Class: HeadMusic::Style::Guides::Configured

Inherits:
Object
  • Object
show all
Defined in:
lib/head_music/style/guides/configured.rb

Overview

A guide class paired with configuration. Quacks like a guide class to Style::Analysis by responding to #analyze(voice), exactly as Annotation::Configured quacks like a guideline class via #new(voice).

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(guide_class, options) ⇒ Configured

Returns a new instance of Configured.



10
11
12
13
14
# File 'lib/head_music/style/guides/configured.rb', line 10

def initialize(guide_class, options)
  @guide_class = guide_class
  @options = options.dup.freeze
  ruleset # Resolve now, so a bad configuration raises here rather than mid-grading.
end

Instance Attribute Details

#guide_classObject (readonly)

Returns the value of attribute guide_class.



8
9
10
# File 'lib/head_music/style/guides/configured.rb', line 8

def guide_class
  @guide_class
end

#optionsObject (readonly)

Returns the value of attribute options.



8
9
10
# File 'lib/head_music/style/guides/configured.rb', line 8

def options
  @options
end

Instance Method Details

#==(other) ⇒ Object Also known as: eql?



45
46
47
# File 'lib/head_music/style/guides/configured.rb', line 45

def ==(other)
  other.is_a?(self.class) && guide_class == other.guide_class && options == other.options
end

#analyze(voice) ⇒ Object



16
17
18
# File 'lib/head_music/style/guides/configured.rb', line 16

def analyze(voice)
  ruleset.map { |rule| rule.new(voice) }
end

#categoryObject



37
38
39
# File 'lib/head_music/style/guides/configured.rb', line 37

def category
  guide_class.category
end

#display_nameObject



41
42
43
# File 'lib/head_music/style/guides/configured.rb', line 41

def display_name
  key ? HeadMusic::Style::Guide.display_name_for(key) : guide_class.display_name
end

#hashObject



50
51
52
# File 'lib/head_music/style/guides/configured.rb', line 50

def hash
  [guide_class, options].hash
end

#inspectObject



59
60
61
# File 'lib/head_music/style/guides/configured.rb', line 59

def inspect
  "#{guide_class.name}.with(#{options.inspect})"
end

#keyObject

Reverse lookup, not derivation. An ad-hoc configuration outside the registry honestly has no key rather than claiming a key that resolves to a different configuration.



33
34
35
# File 'lib/head_music/style/guides/configured.rb', line 33

def key
  HeadMusic::Style::Guide.key_for(self)
end

#nameObject Also known as: to_s



54
55
56
# File 'lib/head_music/style/guides/configured.rb', line 54

def name
  guide_class.name
end

#rulesetObject



20
21
22
# File 'lib/head_music/style/guides/configured.rb', line 20

def ruleset
  @ruleset ||= guide_class.ruleset(**options)
end

#with(**more) ⇒ Object

Re-dispatches through the guide class so layering revalidates: ContourMelody.with(contour: :arch).with(contour: :spiral) still raises.



26
27
28
# File 'lib/head_music/style/guides/configured.rb', line 26

def with(**more)
  guide_class.with(**options.merge(more))
end