Class: HeadMusic::Analysis::DiatonicInterval::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/head_music/analysis/diatonic_interval/parser.rb

Constant Summary collapse

NUMBER_NAMES =
HeadMusic::Analysis::DiatonicInterval::NUMBER_NAMES

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(identifier) ⇒ Parser

Returns a new instance of Parser.



6
7
8
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 6

def initialize(identifier)
  @identifier = expand(identifier)
end

Instance Attribute Details

#identifierObject (readonly)

Returns the value of attribute identifier.



4
5
6
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 4

def identifier
  @identifier
end

Instance Method Details

#degree_nameObject



18
19
20
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 18

def degree_name
  words.last
end

#expand(identifier) ⇒ Object



30
31
32
33
34
35
36
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 30

def expand(identifier)
  if /[A-Z]\d{1,2}/i.match?(identifier)
    number = NUMBER_NAMES[identifier.gsub(/[A-Z]/i, "").to_i - 1]
    return [quality_for(identifier[0]), number].join("_").to_sym
  end
  identifier
end

#higher_letterObject



26
27
28
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 26

def higher_letter
  HeadMusic::Rudiment::Pitch.middle_c.letter_name.steps_up(steps)
end

#quality_abbreviationsObject



38
39
40
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 38

def quality_abbreviations
  HeadMusic::Analysis::DiatonicInterval::QUALITY_ABBREVIATIONS
end

#quality_for(abbreviation) ⇒ Object



42
43
44
45
46
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 42

def quality_for(abbreviation)
  quality_abbreviations[abbreviation.to_sym] ||
    quality_abbreviations[abbreviation.upcase.to_sym] ||
    quality_abbreviations[abbreviation.downcase.to_sym]
end

#quality_nameObject



14
15
16
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 14

def quality_name
  words[0..-2].join(" ").to_sym
end

#stepsObject



22
23
24
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 22

def steps
  NUMBER_NAMES.index(degree_name)
end

#wordsObject



10
11
12
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 10

def words
  identifier.to_s.split(/[_ ]+/)
end