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. Stands in for a guide class wherever one is expected by answering assess(voice) and assess_items(voice).

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(guide_class, options) ⇒ Configured

Returns a new instance of Configured.



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

def initialize(guide_class, options)
  @guide_class = guide_class
  @options = options.dup.freeze
  guide_items # 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.



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

def guide_class
  @guide_class
end

#optionsObject (readonly)

Returns the value of attribute options.



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

def options
  @options
end

Instance Method Details

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



67
68
69
# File 'lib/head_music/style/guides/configured.rb', line 67

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

#assess(voice) ⇒ Object



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

def assess(voice)
  HeadMusic::Style::GuideAssessment.new(self, voice)
end

#assess_items(voice) ⇒ Object



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

def assess_items(voice)
  HeadMusic::Style::Guides::Assessment.assess_items(voice, items_by_tier)
end

#categoriesObject

The guide-side twin of GuideAssessment#assessments: one category, so a registry sweep can ask every entry the same question.



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

def categories
  [category].compact
end

#categoryObject



43
44
45
# File 'lib/head_music/style/guides/configured.rb', line 43

def category
  guide_class.category
end

#composite?Boolean

Returns:

  • (Boolean)


47
48
49
# File 'lib/head_music/style/guides/configured.rb', line 47

def composite?
  false
end

#display_nameObject



57
58
59
# File 'lib/head_music/style/guides/configured.rb', line 57

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

#guide_itemsObject



23
24
25
# File 'lib/head_music/style/guides/configured.rb', line 23

def guide_items
  @guide_items ||= HeadMusic::Style::Guides::Base::TIERS.flat_map { |tier| items_by_tier[tier] }.freeze
end

#hashObject



72
73
74
# File 'lib/head_music/style/guides/configured.rb', line 72

def hash
  [guide_class, options].hash
end

#inspectObject



81
82
83
# File 'lib/head_music/style/guides/configured.rb', line 81

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

#instructionObject

An unregistered configuration borrows the instruction of the guide it configures.



63
64
65
# File 'lib/head_music/style/guides/configured.rb', line 63

def instruction
  key ? HeadMusic::Style::Guide.instruction_for(key) : guide_class.instruction
end

#items_by_tierObject



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

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

#keyObject

Reverse lookup, not derivation: an ad-hoc configuration has no key rather than claiming one that resolves to a different configuration.



39
40
41
# File 'lib/head_music/style/guides/configured.rb', line 39

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

#nameObject Also known as: to_s



76
77
78
# File 'lib/head_music/style/guides/configured.rb', line 76

def name
  guide_class.name
end

#with(**more) ⇒ Object

Through the guide class, so layering revalidates: .with(contour: :spiral) on an already-configured guide still raises.



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

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