Class: HeadMusic::Style::Guidelines::LimitOctaveLeaps

Inherits:
Annotation
  • Object
show all
Defined in:
lib/head_music/style/guidelines/limit_octave_leaps.rb

Overview

A counterpoint guideline: Use a maximum of one octave leap. Configurable via the maximum_leaps: option.

Constant Summary collapse

MAXIMUM_LEAPS =
1

Instance Method Summary collapse

Constructor Details

This class inherits a constructor from HeadMusic::Style::Annotation

Instance Method Details

#marksObject



9
10
11
12
13
14
15
# File 'lib/head_music/style/guidelines/limit_octave_leaps.rb', line 9

def marks
  return if octave_leaps.length <= maximum_leaps

  octave_leaps.map do |leap|
    HeadMusic::Style::Mark.for_all(leap.notes)
  end
end

#maximum_leapsObject (private)



23
24
25
# File 'lib/head_music/style/guidelines/limit_octave_leaps.rb', line 23

def maximum_leaps
  options.fetch(:maximum_leaps) { self.class::MAXIMUM_LEAPS }
end

#messageObject



17
18
19
# File 'lib/head_music/style/guidelines/limit_octave_leaps.rb', line 17

def message
  "Use a maximum of #{maximum_leaps.humanize} octave #{(maximum_leaps == 1) ? "leap" : "leaps"}."
end

#octave_leapsObject (private)



27
28
29
# File 'lib/head_music/style/guidelines/limit_octave_leaps.rb', line 27

def octave_leaps
  melodic_note_pairs.select(&:octave?)
end