Class: Stave::Core::DegreeCollection
- Inherits:
-
Lookup
- Object
- Lookup
- Stave::Core::DegreeCollection
show all
- Defined in:
- lib/stave/core/degree_collection.rb
Instance Attribute Summary
Attributes inherited from Lookup
#variant
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from Lookup
#==, each_key, find_by, #initialize, keys, string_keys, variant, variant?, variant_lookup, variants, where, with_options
Class Method Details
.class_key ⇒ Object
43
44
45
46
47
48
|
# File 'lib/stave/core/degree_collection.rb', line 43
def self.class_key
to_s.delete_prefix("Stave::Theory::")
.gsub(/([a-z])([A-Z])/, "\\1_\\2")
.downcase
.to_sym
end
|
Instance Method Details
#count ⇒ Object
9
10
11
|
# File 'lib/stave/core/degree_collection.rb', line 9
def count
uniq.count
end
|
#degrees ⇒ Object
Set via the variants interface.
5
6
7
|
# File 'lib/stave/core/degree_collection.rb', line 5
def degrees
raise NotImplementedError
end
|
#intervals ⇒ Object
13
14
15
|
# File 'lib/stave/core/degree_collection.rb', line 13
def intervals
degrees.map(&:interval)
end
|
#relative_rotate(position) ⇒ Object
25
26
27
28
29
30
31
32
33
|
# File 'lib/stave/core/degree_collection.rb', line 25
def relative_rotate(position)
return degrees if position == 1
rotated_degrees = rotate(position)
rotated_degrees.map do |degree|
degree - rotated_degrees.first
end
end
|
#rotate(position) ⇒ Object
17
18
19
20
21
22
23
|
# File 'lib/stave/core/degree_collection.rb', line 17
def rotate(position)
return degrees if position == 1
uniq.rotate(position - 1).tap do |degrees|
degrees << degrees.first
end
end
|
#steps ⇒ Object
35
36
37
|
# File 'lib/stave/core/degree_collection.rb', line 35
def steps
intervals.each_cons(2).map { |pair| pair.reverse.reduce(:-) }
end
|
#uniq ⇒ Object
39
40
41
|
# File 'lib/stave/core/degree_collection.rb', line 39
def uniq
degrees.uniq(&:position)
end
|