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

Inherits:
HeadMusic::Style::Guideline 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.

Instance Method Summary collapse

Constructor Details

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

Instance Method Details

#bar_durationObject (private)



29
30
31
32
# File 'lib/head_music/style/guidelines/note_fills_final_bar.rb', line 29

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)


25
26
27
# File 'lib/head_music/style/guidelines/note_fills_final_bar.rb', line 25

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

#final_bar_numberObject (private)



21
22
23
# File 'lib/head_music/style/guidelines/note_fills_final_bar.rb', line 21

def final_bar_number
  last_note.position.bar_number
end

#marksObject



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

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)



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

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