Sha256: be0856538f46fe7c8ed8d0c180c36772ef2a57fbfd16100e72f511b3bf5ea3e6

Contents?: true

Size: 1.03 KB

Versions: 1

Compression:

Stored size: 1.03 KB

Contents

module Music
module Transcription

class Change
  attr_accessor :value, :duration
  
  def initialize value, duration
    @value = value
    @duration = duration
  end
  
  def ==(other)
    self.class == other.class &&
    self.value == other.value &&
    self.duration == other.duration
  end

  class Immediate < Change
    include Validatable

    def initialize value
      super(value,0)
    end
    
    def check_methods
      [ :ensure_zero_duration ]
    end
    
    def ensure_zero_duration
      unless @duration == 0
        raise NonZeroError, "immediate change duration #{self.duration} must be 0"
      end
    end
  end
  
  class Gradual < Change
    include Validatable
    
    def initialize value, transition_duration
      super(value, transition_duration)
    end
    
    def check_methods
      [ :ensure_nonnegative_duration ]
    end
    
    def ensure_nonnegative_duration
      if @duration < 0
        raise NegativeError, "gradual change duration #{self.duration} must be non-negative"
      end
    end
  end
end

end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
music-transcription-0.19.0 lib/music-transcription/model/change.rb