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

- (ContextChange) initialize(action, old_position, old_element, new_position, new_element)

A new instance of ContextChange



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

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

- (Object) action (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?).



88
89
90
# File 'lib/diff/lcs/change.rb', line 88

def action
  @action
end

- (Object) new_element (readonly)

Returns the value of attribute new_element



92
93
94
# File 'lib/diff/lcs/change.rb', line 92

def new_element
  @new_element
end

- (Object) new_position (readonly)

Returns the value of attribute new_position



91
92
93
# File 'lib/diff/lcs/change.rb', line 91

def new_position
  @new_position
end

- (Object) old_element (readonly)

Returns the value of attribute old_element



90
91
92
# File 'lib/diff/lcs/change.rb', line 90

def old_element
  @old_element
end

- (Object) old_position (readonly)

Returns the value of attribute old_position



89
90
91
# File 'lib/diff/lcs/change.rb', line 89

def old_position
  @old_position
end

Class Method Details

+ (Object) from_a(arr)

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



130
131
132
133
134
135
136
137
# File 'lib/diff/lcs/change.rb', line 130

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

+ (Object) simplify(event)

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



141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
# File 'lib/diff/lcs/change.rb', line 141

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

- (Object) <=>(other)



108
109
110
111
112
113
114
115
# File 'lib/diff/lcs/change.rb', line 108

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

- (Object) ==(other)



96
97
98
99
100
101
102
# File 'lib/diff/lcs/change.rb', line 96

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

- (Object) inspect(*args)



104
105
106
# File 'lib/diff/lcs/change.rb', line 104

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

- (Object) to_a



125
126
127
# File 'lib/diff/lcs/change.rb', line 125

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