Class: HeadMusic::Notation::ABC::VoltaPasses
- Inherits:
-
Object
- Object
- HeadMusic::Notation::ABC::VoltaPasses
- Defined in:
- lib/head_music/notation/abc/volta_passes.rb
Overview
Interprets the digits of a volta bracket — “1”, “1,3”, “2-4” — as the pass numbers on which the bracketed bars play.
Class Method Summary collapse
-
.ensure_unique(passes, digits, line_number) ⇒ Object
private
-
.expand_range(part) ⇒ Object
private
-
.parse(digits, line_number) ⇒ Object
Class Method Details
.ensure_unique(passes, digits, line_number) ⇒ Object (private)
18 19 20 21 22 23 24 25 |
# File 'lib/head_music/notation/abc/volta_passes.rb', line 18 def self.ensure_unique(passes, digits, line_number) return if passes.uniq.length == passes.length raise ParseError.new( "Volta passes must be unique", line_number: line_number, snippet: digits ) end |
.expand_range(part) ⇒ Object (private)
12 13 14 15 |
# File 'lib/head_music/notation/abc/volta_passes.rb', line 12 def self.(part) first, last = part.split("-", 2) last ? (first.to_i..last.to_i).to_a : [first.to_i] end |
.parse(digits, line_number) ⇒ Object
6 7 8 9 10 |
# File 'lib/head_music/notation/abc/volta_passes.rb', line 6 def self.parse(digits, line_number) passes = digits.split(",").flat_map { |part| (part) }.select(&:positive?) ensure_unique(passes, digits, line_number) passes end |