lib/music-transcription/profile.rb in music-transcription-0.5.2 vs lib/music-transcription/profile.rb in music-transcription-0.5.3

- old
+ new

@@ -19,10 +19,47 @@ (self.value_changes == other.value_changes) end # Produce an identical Profile object. def clone - Profile.new(@start_value, @value_changes.clone) + Marshal.load(Marshal.dump(self)) + end + + def last_value + last = @start_value + last_change_pair = @value_changes.max_by {|k,v| k} + unless last_change_pair.nil? + last = last_change_pair[1].value + end + return last + end + + def changes_before? offset + @value_changes.count {|k,v| k < offset } > 0 + end + + def changes_after? offset + @value_changes.count {|k,v| k > offset } > 0 + end + + # move changes forward or back by some offset + def shift amt + self.clone.shift! amt + end + + # move changes forward or back by some offset + def shift! amt + @value_changes = Hash[@value_changes.map {|k,v| [k+amt,v]}] + return self + end + + def merge_changes changes + self.clone.merge_changes! changes + end + + def merge_changes! changes + @value_changes.merge! changes + return self end # Returns true if start value and value changes all are between given A and B. def values_between? a, b is_ok = self.start_value.between?(a,b)