rexle-diff 0.5.6 → 0.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 93d8a79715998fce6b9f7e300eb1b2e5f134bacf
4
- data.tar.gz: f205561be2a54dbc0854c383d54c9a5ee70af6b7
3
+ metadata.gz: b01a429faca38a0012c0fbacba964d73b8b446f0
4
+ data.tar.gz: 35abca30022f63e2050c08386ede1fadc1d3dc8e
5
5
  SHA512:
6
- metadata.gz: c94950c599947b2631f7f0a7fdad6fd6531a2acb3e442b043bc2992ebf4a89df4037e232d8300c2762941b7c7e460d6e42713a285f672746cf58a4d6de226720
7
- data.tar.gz: 2368abb03c64f4d6fac7a945c471e06291aaf5d67b199f271b4df28ed5d7452678997c965038970114d1168c31327ec83c8877fadd834669c6a8d676ea3ab8ac
6
+ metadata.gz: 2c9545684ed7caa9942949e001d86e9f48a951a377c348ee61a253f35b318555d8f185665f318cb850698fab9f81ef554726633bba672416d59fbd47a187ad3a
7
+ data.tar.gz: 3529f4691329569af9a02a13c69e8b0b2b0c783eed717770cf34997535d1a1bc5e1eeeefdf7fd63c3221d1302b8ca71286c9bdd39d31b1abbb8bd9794b4d009c
Binary file
data.tar.gz.sig CHANGED
@@ -1,3 +1,2 @@
1
- ��d��կ�
2
- F5?Xv���'��ΈJL�����:k��!?�ů�SX}�+���g�%12�~���ڞhY��u|`��FhAI��������
3
- Lu(-u������2�z�9���i��άlj��ho�+���'�RUH�B�=����`D4�Q���7��ġ��G������0Α%��rc7a�a$(���]���zD�� !�
1
+ �'�tg��(J��S�Љ�7m�a��nW*�GD�&��M�-�SȎ�r��+���^�6�
2
+ �͎� �0$DDe�A��t]�.��z# ��Ӄ��Oh���J�*�-A{W����k�c���CpY`>��3L6q+�NH�,�=��Wb9?B��5 ���[̾�e<�?X��]��*�ʮm�"�3]fڝ\d&֍���6��*o ;nd?F��l;���ޤ�
@@ -6,14 +6,69 @@ require 'rexle'
6
6
  require 'fuzzy_match'
7
7
 
8
8
 
9
+ class Rexle::Element
10
+
11
+ def hashed() @hash end
12
+ def hashed=(num) @hash = num end
13
+
14
+ end
15
+
16
+
9
17
  class RexleDiff
18
+
19
+ class HashedDoc
20
+
21
+ def initialize(node)
22
+
23
+ @node = node
24
+ @node.hashed = hash(node) + hashit(node).inject(:+)
25
+
26
+ end
27
+
28
+ def to_doc()
29
+ @node
30
+ end
31
+
32
+ def hash(element)
33
+
34
+ attributes = element.attributes.clone
35
+ %i(created last_modified).each {|x| attributes.delete x}
36
+ [element.name, attributes, element.text.to_s.strip].hash
37
+
38
+ end
39
+
40
+ def hashit(node)
41
+
42
+ a = node.elements.map do |element|
43
+
44
+ row = hash element
45
+
46
+ if element.has_elements?
47
+ r = hashit(element)
48
+ sum = row + r.inject(:+)
49
+ element.hashed = sum
50
+ sum
51
+ else
52
+ element.hashed = row
53
+ row
54
+ end
55
+ end
56
+
57
+ end
58
+
59
+ end
60
+
10
61
 
62
+
11
63
  attr_reader :to_doc
12
64
 
13
65
  def initialize(source1, source2, fuzzy_match: false)
14
66
 
15
67
  @fuzzy_match = fuzzy_match
16
- doc1, doc2 = Rexle.new(source1), Rexle.new(source2)
68
+
69
+ doc1, doc2 = HashedDoc.new(Rexle.new(source1).root).to_doc,
70
+ HashedDoc.new(Rexle.new(source2).root).to_doc
71
+
17
72
  compare(doc1.root, doc2.root)
18
73
 
19
74
  @to_doc = doc2
@@ -21,7 +76,6 @@ class RexleDiff
21
76
 
22
77
  private
23
78
 
24
-
25
79
 
26
80
  # Returns an array of indexes of the nodes from the newer document which
27
81
  # have been added or changed
@@ -30,7 +84,7 @@ class RexleDiff
30
84
 
31
85
  list1 = hxlist.map.with_index {|x,i| x + i}
32
86
  list2 = hxlist2.map.with_index {|x,i| x + i}
33
-
87
+
34
88
  added_or_changed = list2 - list1
35
89
  indexes = added_or_changed.map {|x| list2.index x}
36
90
 
@@ -48,6 +102,7 @@ class RexleDiff
48
102
  # elements which may have been modified are also
49
103
  # added to the added_indexes list
50
104
  added_or_changed_indexes = added(hxlist, hxlist2)
105
+
51
106
  added_indexes, updated_indexes = @fuzzy_match ? \
52
107
  fuzzy_match(added_or_changed_indexes, node, node2) : \
53
108
  [added_or_changed_indexes, []]
@@ -66,7 +121,7 @@ class RexleDiff
66
121
  deleted_indexes = deleted(hxlist, hxlist2)
67
122
 
68
123
  unchanged_indexes = unchanged(hxlist, hxlist2)
69
-
124
+
70
125
  unchanged_indexes.each do |i, i2|
71
126
 
72
127
  compare(node.elements[i+1], node2.elements[i2+1]) if node\
@@ -124,20 +179,8 @@ class RexleDiff
124
179
  #
125
180
  def hashedxml(node)
126
181
 
127
- node.elements.map do |element|
128
-
129
- attributes = element.attributes.clone
130
-
131
- # Although attribute last_modified isn't used by rexle-diff it is
132
- # created by Dynarex whenever a record is created or updated.
133
- # This would of course cause the record to be flagged as changed even
134
- # when the element value itself hashn't changed.
135
- #
136
- %i(created last_modified).each {|x| attributes.delete x}
137
- x = element.elements.length > 0 ? '' : 0
138
- [element.name, attributes, element.text.to_s.strip, x].hash
139
-
140
- end
182
+ node.elements.map &:hashed
183
+
141
184
  end
142
185
 
143
186
  # Returns an array of indexes from both original and new nodes which
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.5.6
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -39,20 +39,20 @@ dependencies:
39
39
  requirements:
40
40
  - - "~>"
41
41
  - !ruby/object:Gem::Version
42
- version: '1.2'
42
+ version: '1.4'
43
43
  - - ">="
44
44
  - !ruby/object:Gem::Version
45
- version: 1.2.24
45
+ version: 1.4.1
46
46
  type: :runtime
47
47
  prerelease: false
48
48
  version_requirements: !ruby/object:Gem::Requirement
49
49
  requirements:
50
50
  - - "~>"
51
51
  - !ruby/object:Gem::Version
52
- version: '1.2'
52
+ version: '1.4'
53
53
  - - ">="
54
54
  - !ruby/object:Gem::Version
55
- version: 1.2.24
55
+ version: 1.4.1
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: fuzzy_match
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -103,5 +103,6 @@ rubyforge_project:
103
103
  rubygems_version: 2.5.1
104
104
  signing_key:
105
105
  specification_version: 4
106
- summary: rexle-diff
106
+ summary: Compares XML and returns the latest XML with changes identified by datetime
107
+ stamps in the attributes.
107
108
  test_files: []
metadata.gz.sig CHANGED
Binary file