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.is_a? 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