class Diff::LCS::Change

enumerable.
addition of an element from either the old or the new sequenced
Represents a simplistic (non-contextual) change. Represents the removal or

def self.from_a(arr)

def self.from_a(arr)
  arr = arr.flatten(1)
  case arr.size
  when 5
    Diff::LCS::ContextChange.new(*(arr[0...5]))
  when 3
    Diff::LCS::Change.new(*(arr[0...3]))
  else
    fail 'Invalid change array format provided.'
  end
end

def self.valid_action?(action)

def self.valid_action?(action)
  VALID_ACTIONS.include? action
end

def <=>(other)

def <=>(other)
  r = action <=> other.action
  r = position <=> other.position if r.zero?
  r = element <=> other.element if r.zero?
  r
end

def ==(other)

def ==(other)
  (self.class == other.class) and
    (action == other.action) and
    (position == other.position) and
    (element == other.element)
end

def adding?

def adding?
  @action == '+'
end

def changed?

def changed?
  @action == '!'
end

def deleting?

def deleting?
  @action == '-'
end

def finished_a?

def finished_a?
  @action == '>'
end

def finished_b?

def finished_b?
  @action == '<'
end

def initialize(*args)

def initialize(*args)
  @action, @position, @element = *args
  fail "Invalid Change Action '#{@action}'" unless Diff::LCS::Change.valid_action?(@action)
  fail 'Invalid Position Type' unless @position.kind_of? IntClass
end

def inspect(*_args)

def inspect(*_args)
  "#<#{self.class}: #{to_a.inspect}>"
end

def to_a

def to_a
  [@action, @position, @element]
end

def unchanged?

def unchanged?
  @action == '='
end