Sha256: c84e8145c814787c53fc77985db8fc5678fc0f4247f1fe8a4b6f3a308b83f077

Contents?: true

Size: 986 Bytes

Versions: 25

Compression:

Stored size: 986 Bytes

Contents

class HeadMusic::Octave
  include Comparable

  DEFAULT = 4

  MATCHER = /(-?\d+)$/

  def self.get(identifier)
    from_number(identifier) || from_name(identifier) || default
  end

  def self.from_number(identifier)
    return nil unless identifier.to_s == identifier.to_i.to_s
    return nil unless (-2..12).include?(identifier.to_i)
    @octaves ||= {}
    @octaves[identifier.to_i] ||= new(identifier.to_i)
  end

  def self.from_name(string)
    if string.to_s.match(HeadMusic::Spelling::MATCHER)
      _letter, _accidental, octave_string = string.to_s.match(HeadMusic::Spelling::MATCHER).captures
      @octaves ||= {}
      @octaves[octave_string.to_i] ||= new(octave_string.to_i) if octave_string
    end
  end

  def self.default
    @octaves[DEFAULT] ||= new(DEFAULT)
  end

  attr_reader :number
  delegate :to_i, :to_s, to: :number

  def initialize(number)
    @number ||= number
  end

  def <=>(other)
    self.to_i <=> other.to_i
  end

  private_class_method :new
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
head_music-0.16.2 lib/head_music/octave.rb
head_music-0.16.0 lib/head_music/octave.rb
head_music-0.14.8 lib/head_music/octave.rb
head_music-0.14.7 lib/head_music/octave.rb
head_music-0.14.5 lib/head_music/octave.rb
head_music-0.14.4 lib/head_music/octave.rb
head_music-0.14.2 lib/head_music/octave.rb
head_music-0.14.1 lib/head_music/octave.rb
head_music-0.13.2 lib/head_music/octave.rb
head_music-0.11.9 lib/head_music/octave.rb
head_music-0.11.8 lib/head_music/octave.rb
head_music-0.11.7 lib/head_music/octave.rb
head_music-0.11.6 lib/head_music/octave.rb
head_music-0.11.5 lib/head_music/octave.rb
head_music-0.11.4 lib/head_music/octave.rb
head_music-0.11.3 lib/head_music/octave.rb
head_music-0.11.2 lib/head_music/octave.rb
head_music-0.11.1 lib/head_music/octave.rb
head_music-0.10.0 lib/head_music/octave.rb
head_music-0.5.2 lib/head_music/octave.rb