rexle-diff 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/rexle-diff.rb +34 -72
- metadata +3 -3
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 29374bab7b8b1f1a56d26f25227809b43c817ff6
|
4
|
+
data.tar.gz: 03b5815ca6d1c9fb2c1f1b4966e556b09ad86510
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 53a8debbe17451b8cb20dd85b9a342787b923758ba55e27850d9026bd562645f240c235fcfdc90acab4f1b2e24100a7425ba569f26820e868f27a183814a3c0c
|
7
|
+
data.tar.gz: ac71487a7823a562c1f834ca693370d933bb2c5b77575ce756f988f6343f14595ce571513db15e4e51a1e867e3ee2baea45023071a55a35788de8f5d890e8d36
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/rexle-diff.rb
CHANGED
@@ -3,84 +3,60 @@
|
|
3
3
|
# file: rexle-diff.rb
|
4
4
|
|
5
5
|
require 'rexle'
|
6
|
+
require 'digest/md5'
|
6
7
|
|
7
8
|
|
8
9
|
class RexleDiff
|
9
10
|
|
10
11
|
attr_reader :to_doc
|
11
12
|
|
12
|
-
def initialize(source1, source2
|
13
|
+
def initialize(source1, source2)
|
13
14
|
|
14
|
-
|
15
|
-
|
15
|
+
doc1, doc2 = Rexle.new(source1), Rexle.new(source2)
|
16
|
+
compare(doc1.root, doc2.root)
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
@to_doc = Rexle.new(a2)
|
18
|
+
@to_doc = doc2
|
20
19
|
end
|
21
20
|
|
22
21
|
private
|
23
22
|
|
24
|
-
|
23
|
+
|
24
|
+
def hashedxml(node)
|
25
25
|
|
26
|
-
|
27
|
-
|
26
|
+
node.elements.map do |element|
|
27
|
+
h = Digest::MD5.new << element.xml
|
28
|
+
h.to_s
|
29
|
+
end
|
28
30
|
end
|
29
31
|
|
30
|
-
def added(
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
values_indexes = values_added_or_changed.map {|x| values2.index x}
|
36
|
-
names_indexes = names_added_or_changed.map {|x| names.index x}
|
37
|
-
|
38
|
-
values_indexes | names_indexes
|
32
|
+
def added(hxlist, hxlist2)
|
33
|
+
|
34
|
+
added_or_changed = hxlist2 - hxlist
|
35
|
+
indexes = added_or_changed.map {|x| hxlist2.index x}
|
36
|
+
indexes
|
39
37
|
|
40
|
-
end
|
38
|
+
end
|
41
39
|
|
42
|
-
def
|
43
|
-
a2 = a.select{|x| x.is_a? Array}
|
44
|
-
a.index a2[i]
|
45
|
-
end
|
46
|
-
|
47
|
-
def compare(a, a2)
|
40
|
+
def compare(node, node2)
|
48
41
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
_, _, _, *raw_c2 = a2
|
54
|
-
c2 = raw_c2.select{|x| x.is_a? Array}
|
55
|
-
names2, values2 = names_values(c2)
|
56
|
-
|
57
|
-
added_indexes = added(values, values2, names, names2)
|
42
|
+
hxlist, hxlist2 = hashedxml(node), hashedxml(node2)
|
43
|
+
|
44
|
+
added_indexes = added(hxlist, hxlist2)
|
58
45
|
|
59
46
|
added_indexes.each do |i|
|
60
|
-
|
61
|
-
|
62
|
-
next unless offset
|
63
|
-
|
64
|
-
a2[offset][1].merge!(created: Time.now.to_s, last_modified: Time.now.to_s)
|
47
|
+
node2.elements[i+1].attributes\
|
48
|
+
.merge!(created: Time.now.to_s, last_modified: Time.now.to_s)
|
65
49
|
end
|
66
50
|
|
67
|
-
|
68
|
-
deleted_indexes = deleted(values, values2)
|
51
|
+
deleted_indexes = deleted(hxlist, hxlist2)
|
69
52
|
|
70
|
-
unchanged_indexes = unchanged(
|
53
|
+
unchanged_indexes = unchanged(hxlist, hxlist2)
|
71
54
|
|
72
|
-
# check the child element if any
|
73
|
-
|
74
55
|
unchanged_indexes.each do |i, i2|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
offset2 = array_index(a2, i2)
|
80
|
-
a2[offset2][1].merge!(a[offset][1])
|
81
|
-
|
82
|
-
compare(c[i],c2[i2]) if c[i].length > 3
|
83
|
-
end
|
56
|
+
|
57
|
+
node2.elements[i2+1].attributes[:created] ||= Time.now.to_s
|
58
|
+
compare(node.elements[i+1], node2.elements[i2+1]) if node.elements[i+1].has_elements?
|
59
|
+
|
84
60
|
end
|
85
61
|
|
86
62
|
end
|
@@ -91,28 +67,14 @@ class RexleDiff
|
|
91
67
|
indexes = result.map {|x| list.index x}
|
92
68
|
|
93
69
|
end
|
94
|
-
|
95
|
-
def timestamp(doc)
|
96
|
-
|
97
|
-
doc.root.traverse do |x|
|
98
|
-
x.attributes[:created] = Time.now.to_s unless x.attributes[:created]
|
99
|
-
end
|
100
|
-
|
101
|
-
return doc
|
102
|
-
end
|
103
70
|
|
104
|
-
def unchanged(
|
105
|
-
|
106
|
-
result = values & values2
|
107
|
-
indexes = result.map {|x| values.index x}
|
108
|
-
indexes2 = result.map {|x| values2.index x}
|
109
|
-
|
110
|
-
names_result = names & names2
|
111
|
-
name_indexes = names_result.map {|x| names.index x}
|
112
|
-
name_indexes2 = names_result.map {|x| names2.index x}
|
71
|
+
def unchanged(list, list2)
|
113
72
|
|
73
|
+
result = list & list2
|
74
|
+
indexes = result.map {|x| list.index x}
|
75
|
+
indexes2 = result.map {|x| list2.index x}
|
114
76
|
|
115
|
-
|
77
|
+
indexes.zip(indexes2)
|
116
78
|
|
117
79
|
end
|
118
80
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rexle-diff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -42,7 +42,7 @@ dependencies:
|
|
42
42
|
version: '1.2'
|
43
43
|
- - ">="
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 1.2.
|
45
|
+
version: 1.2.24
|
46
46
|
type: :runtime
|
47
47
|
prerelease: false
|
48
48
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -52,7 +52,7 @@ dependencies:
|
|
52
52
|
version: '1.2'
|
53
53
|
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: 1.2.
|
55
|
+
version: 1.2.24
|
56
56
|
description:
|
57
57
|
email: james@r0bertson.co.uk
|
58
58
|
executables: []
|
metadata.gz.sig
CHANGED
Binary file
|