Class: HeadMusic::Rudiment::EnharmonicEquivalence

Inherits:
Object
  • Object
show all
Defined in:
lib/head_music/rudiment/enharmonic_equivalence.rb

Overview

Base class for enharmonic equivalence relationships between rudiments. An enharmonic equivalent is the same sound spelled differently, such as D# and Eb. Subclasses declare their subject class and implement #enharmonic_equivalent?.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(subject) ⇒ EnharmonicEquivalence

Returns a new instance of EnharmonicEquivalence.



20
21
22
# File 'lib/head_music/rudiment/enharmonic_equivalence.rb', line 20

def initialize(subject)
  @subject = self.class.subject_class.get(subject)
end

Instance Attribute Details

#subjectObject (readonly)

Returns the value of attribute subject.



18
19
20
# File 'lib/head_music/rudiment/enharmonic_equivalence.rb', line 18

def subject
  @subject
end

Class Method Details

.get(subject) ⇒ Object



8
9
10
11
12
# File 'lib/head_music/rudiment/enharmonic_equivalence.rb', line 8

def self.get(subject)
  subject = subject_class.get(subject)
  @enharmonic_equivalences ||= {}
  @enharmonic_equivalences[subject.to_s] ||= new(subject)
end

.subject_classObject

Raises:

  • (NotImplementedError)


14
15
16
# File 'lib/head_music/rudiment/enharmonic_equivalence.rb', line 14

def self.subject_class
  raise NotImplementedError, "Subclasses must implement .subject_class"
end

Instance Method Details

#enharmonic?(other) ⇒ Boolean

Returns:

  • (Boolean)


24
25
26
# File 'lib/head_music/rudiment/enharmonic_equivalence.rb', line 24

def enharmonic?(other)
  enharmonic_equivalent?(other)
end

#equivalent?(other) ⇒ Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/head_music/rudiment/enharmonic_equivalence.rb', line 28

def equivalent?(other)
  enharmonic_equivalent?(other)
end