Class: HeadMusic::Style::Guidelines::NoteFillsFinalBar

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

Overview

Checks that the final bar contains a single note that fills the entire measure.

Constant Summary collapse

MESSAGE =
"End with a single note that fills the final bar."

Instance Method Summary collapse

Constructor Details

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

Instance Method Details

#bar_durationObject (private)



31
32
33
34
# File 'lib/head_music/style/guidelines/note_fills_final_bar.rb', line 31

def bar_duration
  meter = composition.meter_at(final_bar_number)
  meter.count_unit.relative_value * meter.counts_per_bar
end

#fills_bar?(note) ⇒ Boolean (private)

Returns:

  • (Boolean)


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

def fills_bar?(note)
  note.rhythmic_value.total_value == bar_duration
end

#final_bar_numberObject (private)



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

def final_bar_number
  last_note.position.bar_number
end

#marksObject



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

def marks
  return unless notes.any?

  bar_notes = notes_in_final_bar
  return if bar_notes.length == 1 && fills_bar?(bar_notes.first)

  HeadMusic::Style::Mark.for_all(bar_notes.any? ? bar_notes : [last_note])
end

#notes_in_final_barObject (private)



19
20
21
# File 'lib/head_music/style/guidelines/note_fills_final_bar.rb', line 19

def notes_in_final_bar
  notes.select { |note| note.position.bar_number == final_bar_number }
end