Class: VCSToolkit::Diff
- Inherits:
-
Object
- Object
- VCSToolkit::Diff
- Includes:
- Enumerable
- Defined in:
- lib/vcs_toolkit/diff.rb
Class Method Summary collapse
Instance Method Summary collapse
- #each(&block) ⇒ Object
- #has_changes? ⇒ Boolean
- #has_conflicts? ⇒ Boolean
-
#initialize(changes) ⇒ Diff
constructor
A new instance of Diff.
-
#new_content(conflict_start = '<<<', conflict_switch = '>>>', conflict_end = '===') ⇒ Object
Reconstruct the new sequence from the diff.
- #to_s ⇒ Object
Constructor Details
#initialize(changes) ⇒ Diff
Returns a new instance of Diff.
7 8 9 |
# File 'lib/vcs_toolkit/diff.rb', line 7 def initialize(changes) @changes = changes end |
Class Method Details
.from_sequences(sequence_one, sequence_two) ⇒ Object
57 58 59 |
# File 'lib/vcs_toolkit/diff.rb', line 57 def self.from_sequences(sequence_one, sequence_two) new ::Diff::LCS.sdiff(sequence_one, sequence_two) end |
Instance Method Details
#each(&block) ⇒ Object
19 20 21 |
# File 'lib/vcs_toolkit/diff.rb', line 19 def each(&block) @changes.each &block end |
#has_changes? ⇒ Boolean
11 12 13 |
# File 'lib/vcs_toolkit/diff.rb', line 11 def has_changes? not @changes.all?(&:unchanged?) end |
#has_conflicts? ⇒ Boolean
15 16 17 |
# File 'lib/vcs_toolkit/diff.rb', line 15 def has_conflicts? @changes.any?(&:conflict?) end |
#new_content(conflict_start = '<<<', conflict_switch = '>>>', conflict_end = '===') ⇒ Object
Reconstruct the new sequence from the diff
42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/vcs_toolkit/diff.rb', line 42 def new_content(conflict_start='<<<', conflict_switch='>>>', conflict_end='===') flat_map do |change| if change.conflict? version_one = change.diff_one.new_content(conflict_start, conflict_switch, conflict_end) version_two = change.diff_two.new_content(conflict_start, conflict_switch, conflict_end) [conflict_start] + version_one + [conflict_switch] + version_two + [conflict_end] elsif change.deleting? [] else [change.new_element] end end end |
#to_s ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/vcs_toolkit/diff.rb', line 23 def to_s flat_map do |change| if change.unchanged? [change.new_element] elsif change.deleting? ["-#{change.old_element}"] elsif change.adding? ["+#{change.new_element}"] elsif change.changed? ["-#{change.old_element}", "+#{change.new_element}"] else raise "Unknown change in the diff #{change.action}" end end.join '' end |