archimate 1.1.1 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
- module Archimate
3
- module Diff
4
- class Insert < Difference
5
- using DataModel::DiffableArray
6
-
7
- # Create a new Insert difference
8
- #
9
- # @param inserted_element [Archimate::DataModel::ArchimateNode] Element
10
- # that was inserted
11
- # @param sub_path [str] Path under inserted_element for primitive values
12
- def initialize(target)
13
- super
14
- end
15
-
16
- def to_s
17
- # Note - the explicit to_s is required to access the DiffableArray
18
- # implementation if the parent is an Array.
19
- "#{diff_type} #{target} into #{target.parent.to_s}"
20
- end
21
-
22
- def apply(to_model)
23
- throw TypeError, "Expected a Archimate::DataModel::Model, was a #{to_model.class}" unless to_model.is_a?(DataModel::Model)
24
- target.insert(to_model)
25
- to_model
26
- end
27
-
28
- def insert?
29
- true
30
- end
31
-
32
- def kind
33
- "Insert"
34
- end
35
-
36
- private
37
-
38
- def diff_type
39
- Color.color('INSERT:', :insert)
40
- end
41
- end
42
- end
43
- end
@@ -1,70 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "parallel"
4
-
5
- module Archimate
6
- module Diff
7
- class Merge
8
- include Archimate::Logging
9
- using DataModel::DiffableArray
10
-
11
- def three_way(base, local, remote)
12
- debug { "Computing base:local & base:remote diffs" }
13
- base_local_diffs, base_remote_diffs = Parallel.map([[base, local], [base, remote]],
14
- in_processes: 2) do |base_model, other_model|
15
- base_model.diff(other_model)
16
- end
17
-
18
- debug "Finding Conflicts in #{base_local_diffs.size + base_remote_diffs.size} diffs"
19
- conflicts = Conflicts.new(base_local_diffs, base_remote_diffs)
20
- resolved_diffs = conflicts.resolve
21
-
22
- [apply_diffs(resolved_diffs, base.clone), conflicts]
23
- end
24
-
25
- # Applies the set of diffs to the model returning a
26
- # new model with the diffs applied.
27
- def apply_diffs(diffs, model)
28
- debug { "Applying #{diffs.size} diffs" }
29
- progressbar = ProgressIndicator.new(total: diffs.size, title: "Applying diffs")
30
- diffs
31
- .inject(model) do |model_a, diff|
32
- progressbar.increment
33
- diff.apply(model_a)
34
- end
35
- .rebuild_index
36
- .organize
37
- ensure
38
- progressbar&.finish
39
- end
40
-
41
- # # TODO: not currently used
42
- # def find_merged_duplicates
43
- # [@base_local_diffs, @base_remote_diffs].map do |diffs|
44
- # deleted_element_diffs = diffs.select(&:delete?).select(&:element?)
45
- # deleted_element_diffs.each_with_object({}) do |diff, a|
46
- # element = diff.from_model.elements[diff.element_idx]
47
- # found = diff.from_model.elements.select do |el|
48
- # el != element && el.type == element.type && el.name == element.name
49
- # end
50
- # next if found.empty?
51
- # a[diff] = found
52
- # debug { "\nFound potential de-duplication:" }
53
- # debug { "\t#{diff}" }
54
- # debug { "Might be replaced with:\n\t#{found.map(&:to_s).join(" }\n\t")}\n\n"
55
- # end
56
- # end
57
- # end
58
-
59
- # # TODO: not currently used
60
- # def filter_path_conflicts(diffs)
61
- # diffs.sort { |a, b| a.path_to_array.size <=> b.path_to_array.size }.each_with_object([]) do |i, e|
62
- # diffs.delete(i)
63
- # path_conflicts = diffs.select { |d| d.path.start_with?(i.path) }
64
- # path_conflicts.each { |d| diffs.delete(d) }
65
- # e << i
66
- # end
67
- # end
68
- end
69
- end
70
- end
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
- module Archimate
3
- module Diff
4
- class Move < Difference
5
- using DataModel::DiffablePrimitive
6
- using DataModel::DiffableArray
7
-
8
- # Create a new Move difference
9
- #
10
- # @param target [Archimate::Diff::ArchimateNodeReference] reference to
11
- # ArchimateNode that was changed
12
- # @param changed_from [Archimate::Diff::ArchimateNodeReference] Element
13
- # that was changed
14
- def initialize(target, changed_from)
15
- super(target, changed_from)
16
- end
17
-
18
- def to_s
19
- # Note - the explicit to_s is required to access the DiffableArray
20
- # implementation if the parent is an Array.
21
- "#{diff_type} #{changed_from.parent&.to_s} #{Color.color(target.to_s, :change)} moved to #{target.array_index}"
22
- end
23
-
24
- # TODO: patch is a better name than apply
25
- def apply(to_model)
26
- unless to_model.is_a?(DataModel::Model)
27
- throw(
28
- TypeError,
29
- "Expected a Archimate::DataModel::Model, was a #{to_model.class}"
30
- )
31
- end
32
- target.move(to_model, changed_from)
33
- to_model
34
- end
35
-
36
- def move?
37
- true
38
- end
39
-
40
- def kind
41
- "Move"
42
- end
43
-
44
- private
45
-
46
- def diff_type
47
- Color.color('MOVE:', :move)
48
- end
49
- end
50
- end
51
- end