Class: Diff::LCS::ContextChange

Inherits:
Object
  • Object
show all
Includes:
Comparable, ChangeTypeTests
Defined in:
lib/diff/lcs/change.rb

Overview

Represents a contextual change. Contains the position and values of the elements in the old and the new sequenced enumerables as well as the action taken.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ChangeTypeTests

#adding?, #changed?, #deleting?, #finished_a?, #finished_b?, #unchanged?

Constructor Details

#initialize(action, old_position, old_element, new_position, new_element) ⇒ ContextChange

Returns a new instance of ContextChange.



125
126
127
128
129
130
131
# File 'lib/diff/lcs/change.rb', line 125

def initialize(action, old_position, old_element, new_position, new_element)
  @action = action
  @old_position = old_position
  @old_element = old_element
  @new_position = new_position
  @new_element = new_element
end

Instance Attribute Details

#actionObject (readonly)

Returns the action this Change represents. Can be ‘+’ (#adding?), ‘-’ (#deleting?), ‘=’ (#unchanged?), # or ‘!’ (#changed?). When created by Diff::LCS#diff or Diff::LCS#sdiff, it may also be ‘>’ (#finished_a?) or ‘<’ (#finished_b?).



96
97
98
# File 'lib/diff/lcs/change.rb', line 96

def action
  @action
end

#new_elementObject (readonly)

Returns the value of attribute new_element.



100
101
102
# File 'lib/diff/lcs/change.rb', line 100

def new_element
  @new_element
end

#new_positionObject (readonly)

Returns the value of attribute new_position.



99
100
101
# File 'lib/diff/lcs/change.rb', line 99

def new_position
  @new_position
end

#old_elementObject (readonly)

Returns the value of attribute old_element.



98
99
100
# File 'lib/diff/lcs/change.rb', line 98

def old_element
  @old_element
end

#old_positionObject (readonly)

Returns the value of attribute old_position.



97
98
99
# File 'lib/diff/lcs/change.rb', line 97

def old_position
  @old_position
end

Class Method Details

.from_a(arr) ⇒ Object

Creates a ContextChange from an array produced by ContextChange#to_a.



138
139
140
141
142
143
144
145
# File 'lib/diff/lcs/change.rb', line 138

def self.from_a(arr)
  if arr.size == 5
    Diff::LCS::ContextChange.new(arr[0], arr[1], arr[2], arr[3], arr[4])
  else
    Diff::LCS::ContextChange.new(arr[0], arr[1][0], arr[1][1], arr[2][0],
                                 arr[2][1])
  end
end

.simplify(event) ⇒ Object

Simplifies a context change for use in some diff callbacks. ‘<’ actions are converted to ‘-’ and ‘>’ actions are converted to ‘+’.



149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
# File 'lib/diff/lcs/change.rb', line 149

def self.simplify(event)
  ea = event.to_a

  case ea[0]
  when '-'
    ea[2][1] = nil
  when '<'
    ea[0] = '-'
    ea[2][1] = nil
  when '+'
    ea[1][1] = nil
  when '>'
    ea[0] = '+'
    ea[1][1] = nil
  end

  Diff::LCS::ContextChange.from_a(ea)
end

Instance Method Details

#<=>(other) ⇒ Object



116
117
118
119
120
121
122
123
# File 'lib/diff/lcs/change.rb', line 116

def <=>(other)
  r = @action <=> other.action
  r = @old_position <=> other.old_position if r.zero?
  r = @new_position <=> other.new_position if r.zero?
  r = @old_element <=> other.old_element if r.zero?
  r = @new_element <=> other.new_element if r.zero?
  r
end

#==(other) ⇒ Object



104
105
106
107
108
109
110
# File 'lib/diff/lcs/change.rb', line 104

def ==(other)
  (@action == other.action) and
  (@old_position == other.old_position) and
  (@new_position == other.new_position) and
  (@old_element == other.old_element) and
  (@new_element == other.new_element)
end

#inspect(*args) ⇒ Object



112
113
114
# File 'lib/diff/lcs/change.rb', line 112

def inspect(*args)
  %Q(#<#{self.class.name}:#{__id__} @action=#{action} positions=#{old_position},#{new_position} elements=#{old_element.inspect},#{new_element.inspect}>)
end

#to_aObject



133
134
135
# File 'lib/diff/lcs/change.rb', line 133

def to_a
  [@action, [@old_position, @old_element], [@new_position, @new_element]]
end