Class: Stave::Core::DegreeCollection

Inherits:
Lookup
  • Object
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

Constructor Details

This class inherits a constructor from Stave::Core::Lookup

Class Method Details

.class_keyObject



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

#countObject



9
10
11
# File 'lib/stave/core/degree_collection.rb', line 9

def count
  uniq.count
end

#degreesObject

Set via the variants interface.

Raises:

  • (NotImplementedError)


5
6
7
# File 'lib/stave/core/degree_collection.rb', line 5

def degrees
  raise NotImplementedError
end

#intervalsObject



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

#stepsObject



35
36
37
# File 'lib/stave/core/degree_collection.rb', line 35

def steps
  intervals.each_cons(2).map { |pair| pair.reverse.reduce(:-) }
end

#uniqObject



39
40
41
# File 'lib/stave/core/degree_collection.rb', line 39

def uniq
  degrees.uniq(&:position)
end