compare-xml 0.6 → 0.61
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
- data/README.md +116 -151
- data/compare-xml.gemspec +1 -1
- data/img/diffing.png +0 -0
- data/lib/compare-xml.rb +1 -1
- data/lib/compare-xml/version.rb +1 -1
- metadata +14 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d518768772143a33cc7c2f799678d4884af7771a
|
4
|
+
data.tar.gz: 6dff6acb2ab2c964db28c48850c902bfcb9c349d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e4faae65d888e4663215d07955c3dbc34ca25cc3230b1d037f1e02f3eafb7cd11e7393032cd2fbe1a1982546138dd00a8311e1c01003c3b66ec2fea11df45505
|
7
|
+
data.tar.gz: d1eccf79ec179f0878a5580b6a1ecae52dd935658ac0d6e0645686d0577dc015b5eacf89f7630b711e867ec902c1794c08a6dd301e9648276a48e6aee45a908f
|
data/README.md
CHANGED
@@ -17,17 +17,15 @@ CompareXML is a fast, lightweight and feature-rich tool that will solve your XML
|
|
17
17
|
|
18
18
|
Add this line to your application's Gemfile:
|
19
19
|
|
20
|
-
|
21
|
-
gem 'compare-xml'
|
22
|
-
```
|
20
|
+
gem 'compare-xml'
|
23
21
|
|
24
22
|
And then execute:
|
25
23
|
|
26
|
-
|
24
|
+
bundle
|
27
25
|
|
28
26
|
Or install it yourself as:
|
29
27
|
|
30
|
-
|
28
|
+
gem install compare-xml
|
31
29
|
|
32
30
|
|
33
31
|
|
@@ -65,32 +63,32 @@ require 'compare-xml'
|
|
65
63
|
CompareXML has a variety of options that can be invoked as an optional argument, e.g.:
|
66
64
|
|
67
65
|
```ruby
|
68
|
-
CompareXML.equivalent?(doc1, doc2, {
|
66
|
+
CompareXML.equivalent?(doc1, doc2, {collapse_whitespace: false, verbose: true, ...})
|
69
67
|
```
|
70
68
|
|
71
|
-
- `collapse_whitespace: {true|false}` default: **`true
|
72
|
-
|
69
|
+
- `collapse_whitespace: {true|false}` default: **`true`** [⇨ show examples ⇦](#collapse_whitespace)
|
70
|
+
- when `true`, trims and collapses whitespace
|
73
71
|
|
74
|
-
- `ignore_attr_order: {true|false}` default: **`true
|
75
|
-
|
72
|
+
- `ignore_attr_order: {true|false}` default: **`true`** [⇨ show examples ⇦](#ignore_attr_order)
|
73
|
+
- when `true`, ignores attribute order within tags
|
76
74
|
|
77
|
-
- `ignore_attr_content: [string1, string2, ...]` default: **`[]
|
78
|
-
|
75
|
+
- `ignore_attr_content: [string1, string2, ...]` default: **`[]`** [⇨ show examples ⇦](#ignore_attr_content)
|
76
|
+
- when provided, ignores all attributes that contain substrings `string`, `string2`, etc.
|
79
77
|
|
80
|
-
- `ignore_attrs: [css_selector1, css_selector1, ...]` default: **`[]
|
81
|
-
|
78
|
+
- `ignore_attrs: [css_selector1, css_selector1, ...]` default: **`[]`** [⇨ show examples ⇦](#ignore_attrs)
|
79
|
+
- when provided, ignores specific *attributes* using [CSS selectors](http://www.w3schools.com/cssref/css_selectors.asp)
|
82
80
|
|
83
|
-
- `ignore_comments: {true|false}` default: **`true
|
84
|
-
|
81
|
+
- `ignore_comments: {true|false}` default: **`true`** [⇨ show examples ⇦](#ignore_comments)
|
82
|
+
- when `true`, ignores comments, such as `<!-- comment -->`
|
85
83
|
|
86
|
-
- `ignore_nodes: [css_selector1, css_selector1, ...]` default: **`[]`**
|
87
|
-
|
84
|
+
- `ignore_nodes: [css_selector1, css_selector1, ...]` default: **`[]`** [⇨ show examples ⇦](#ignore_nodes)
|
85
|
+
- when provided, ignores specific *nodes* using [CSS selectors](http://www.w3schools.com/cssref/css_selectors.asp)
|
88
86
|
|
89
|
-
- `ignore_text_nodes: {true|false}` default: **`false
|
90
|
-
|
87
|
+
- `ignore_text_nodes: {true|false}` default: **`false`** [⇨ show examples ⇦](#ignore_text_nodes)
|
88
|
+
- when `true`, ignores all text content within a document
|
91
89
|
|
92
|
-
- `verbose: {true|false}` default: **`false
|
93
|
-
|
90
|
+
- `verbose: {true|false}` default: **`false`** [⇨ show examples ⇦](#verbose)
|
91
|
+
- when `true`, instead of a boolean, `CompareXML.equivalent?` returns an array of discrepancies.
|
94
92
|
|
95
93
|
|
96
94
|
## Options in Depth
|
@@ -99,22 +97,22 @@ CompareXML.equivalent?(doc1, doc2, {ignore_comments: false, verbose: true, ...})
|
|
99
97
|
|
100
98
|
When `true`, all text content within the document is trimmed (i.e. space removed from left and right) and whitespace is collapsed (i.e. tabs, new lines, multiple whitespace characters are replaced by a single whitespace).
|
101
99
|
|
102
|
-
|
100
|
+
**Usage Example:** `CompareXML.equivalent?(doc1, doc2, {collapse_whitespace: true})`
|
103
101
|
|
104
102
|
**Example:** When `true` the following HTML strings are considered equal:
|
105
103
|
|
106
|
-
|
107
|
-
|
104
|
+
<a href="/admin"> SOME TEXT CONTENT </a>
|
105
|
+
<a href="/index"> SOME TEXT CONTENT </a>
|
108
106
|
|
109
|
-
|
107
|
+
**Example:** When `true` the following HTML strings are considered equal:
|
110
108
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
109
|
+
<html>
|
110
|
+
<title>
|
111
|
+
This is my title
|
112
|
+
</title>
|
113
|
+
</html>
|
116
114
|
|
117
|
-
|
115
|
+
<html><title>This is my title</title></html>
|
118
116
|
|
119
117
|
|
120
118
|
----------
|
@@ -124,28 +122,28 @@ CompareXML.equivalent?(doc1, doc2, {ignore_comments: false, verbose: true, ...})
|
|
124
122
|
|
125
123
|
When `true`, all attributes are sorted before comparison and only attributes of the same type are compared.
|
126
124
|
|
127
|
-
|
125
|
+
**Usage Example:** `CompareXML.equivalent?(doc1, doc2, {ignore_attr_order: true})`
|
128
126
|
|
129
127
|
**Example:** When `true` the following HTML strings are considered equal:
|
130
128
|
|
131
|
-
|
132
|
-
|
129
|
+
<a href="/admin" class="button" target="_blank">Link</a>
|
130
|
+
<a class="button" target="_blank" href="/admin">Link</a>
|
133
131
|
|
134
|
-
|
132
|
+
**Example:** When `false` the above HTML strings are compared as follows:
|
135
133
|
|
136
|
-
|
134
|
+
href="admin" != class="button
|
137
135
|
|
138
|
-
|
136
|
+
The comparison of the `<a>` element will stop at this point, since a discrepancy is found.
|
139
137
|
|
140
|
-
|
138
|
+
**Example:** When `true` the following HTML strings are compared as follows:
|
141
139
|
|
142
|
-
|
143
|
-
|
140
|
+
<a href="/admin" class="button" target="_blank">Link</a>
|
141
|
+
<a class="button" target="_blank" href="/admin" rel="nofollow">Link</a>
|
144
142
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
143
|
+
class="button" == class="button"
|
144
|
+
href="/admin" == href="/admin"
|
145
|
+
=! rel="nofollow"
|
146
|
+
target="_blank" == target="_blank"
|
149
147
|
|
150
148
|
|
151
149
|
----------
|
@@ -155,17 +153,17 @@ CompareXML.equivalent?(doc1, doc2, {ignore_comments: false, verbose: true, ...})
|
|
155
153
|
|
156
154
|
When provided, ignores all **attributes** that contain any of the given substrings. **Note:** types of attributes still have to match (i.e. `<p>` = `<p>`, `<div>` = `<div>`, etc).
|
157
155
|
|
158
|
-
|
156
|
+
**Usage Example:** `CompareXML.equivalent?(doc1, doc2, {ignore_attr_content: ['button']})`
|
159
157
|
|
160
158
|
**Example:** With `ignore_attr_content: ['button']` the following HTML strings are considered equal:
|
161
159
|
|
162
|
-
|
163
|
-
|
160
|
+
<a href="/admin" id="button_1" class="blue button">Link</a>
|
161
|
+
<a href="/admin" id="button_2" class="info button">Link</a>
|
164
162
|
|
165
163
|
**Example:** With `ignore_attr_content: ['menu']` the following HTML strings are considered equal:
|
166
164
|
|
167
|
-
|
168
|
-
|
165
|
+
<a class="menu left" data-scope="abrth$menu" role="side-menu">Link</a>
|
166
|
+
<a class="main menu" data-scope="ergeh$menu" role="main-menu">Link</a>
|
169
167
|
|
170
168
|
|
171
169
|
----------
|
@@ -175,17 +173,17 @@ CompareXML.equivalent?(doc1, doc2, {ignore_comments: false, verbose: true, ...})
|
|
175
173
|
|
176
174
|
When provided, ignores all **attributes** that satisfy a particular rule using [CSS selectors](http://www.w3schools.com/cssref/css_selectors.asp).
|
177
175
|
|
178
|
-
|
176
|
+
**Usage Example:** `CompareXML.equivalent?(doc1, doc2, {ignore_attrs: ['a[rel="nofollow"]', 'input[type="hidden"']})`
|
179
177
|
|
180
178
|
**Example:** With `ignore_attrs: ['a[rel="nofollow"]', 'a[target]']` the following HTML strings are considered equal:
|
181
179
|
|
182
|
-
|
183
|
-
|
180
|
+
<a href="/admin" class="button" target="_blank">Link</a>
|
181
|
+
<a href="/admin" class="button" target="_self" rel="nofollow">Link</a>
|
184
182
|
|
185
|
-
|
183
|
+
**Example:** With `ignore_attrs: ['a[href^="http"]', 'a[class*="button"]']` the following HTML strings are considered equal:
|
186
184
|
|
187
|
-
|
188
|
-
|
185
|
+
<a href="http://google.ca" class="primary button">Link</a>
|
186
|
+
<a href="https://google.com" class="primary button rounded">Link</a>
|
189
187
|
|
190
188
|
|
191
189
|
----------
|
@@ -195,17 +193,17 @@ CompareXML.equivalent?(doc1, doc2, {ignore_comments: false, verbose: true, ...})
|
|
195
193
|
|
196
194
|
When `true`, ignores comments, such as `<!-- This is a comment -->`.
|
197
195
|
|
198
|
-
|
196
|
+
**Usage Example:** `CompareXML.equivalent?(doc1, doc2, {ignore_comments: true})`
|
199
197
|
|
200
198
|
**Example:** When `true` the following HTML strings are considered equal:
|
201
199
|
|
202
|
-
|
203
|
-
|
200
|
+
<!-- This is a comment -->
|
201
|
+
<!-- This is another comment -->
|
204
202
|
|
205
|
-
|
203
|
+
**Example:** When `true` the following HTML strings are considered equal:
|
206
204
|
|
207
|
-
|
208
|
-
|
205
|
+
<a href="/admin"><!-- This is a comment -->Link</a>
|
206
|
+
<a href="/admin">Link</a>
|
209
207
|
|
210
208
|
|
211
209
|
----------
|
@@ -215,17 +213,17 @@ CompareXML.equivalent?(doc1, doc2, {ignore_comments: false, verbose: true, ...})
|
|
215
213
|
|
216
214
|
When provided, ignores all **nodes** that satisfy a particular rule using [CSS selectors](http://www.w3schools.com/cssref/css_selectors.asp).
|
217
215
|
|
218
|
-
|
216
|
+
**Usage Example:** `CompareXML.equivalent?(doc1, doc2, {ignore_nodes: ['script', 'object']})`
|
219
217
|
|
220
218
|
**Example:** With `ignore_nodes: ['a[rel="nofollow"]', 'a[target]']` the following HTML strings are considered equal:
|
221
219
|
|
222
|
-
|
223
|
-
|
220
|
+
<a href="/admin" class="icon" target="_blank">Link 1</a>
|
221
|
+
<a href="/index" class="button" target="_self" rel="nofollow">Link 2</a>
|
224
222
|
|
225
|
-
|
223
|
+
**Example:** With `ignore_nodes: ['b', 'i']` the following HTML strings are considered equal:
|
226
224
|
|
227
|
-
|
228
|
-
|
225
|
+
<a href="/admin"><i class"icon bulb"></i><b>Warning:</b> Link</a>
|
226
|
+
<a href="/admin"><i class"icon info"></i><b>Message:</b> Link</a>
|
229
227
|
|
230
228
|
|
231
229
|
----------
|
@@ -235,17 +233,17 @@ CompareXML.equivalent?(doc1, doc2, {ignore_comments: false, verbose: true, ...})
|
|
235
233
|
|
236
234
|
When `true`, ignores all text content. Text content is anything that is included between an opening and a closing tag, e.g. `<tag>THIS IS TEXT CONTENT</tag>`.
|
237
235
|
|
238
|
-
|
236
|
+
**Usage Example:** `CompareXML.equivalent?(doc1, doc2, {ignore_text_nodes: true})`
|
239
237
|
|
240
238
|
**Example:** When `true` the following HTML strings are considered equal:
|
241
239
|
|
242
|
-
|
243
|
-
|
240
|
+
<a href="/admin">SOME TEXT CONTENT</a>
|
241
|
+
<a href="/admin">DIFFERENT TEXT CONTENT</a>
|
244
242
|
|
245
|
-
|
243
|
+
**Example:** When `true` the following HTML strings are considered equal:
|
246
244
|
|
247
|
-
|
248
|
-
|
245
|
+
<i class="icon></i> <b>Warning:</b>
|
246
|
+
<i class="icon> </i> <b>Message:</b>
|
249
247
|
|
250
248
|
|
251
249
|
----------
|
@@ -255,91 +253,58 @@ CompareXML.equivalent?(doc1, doc2, {ignore_comments: false, verbose: true, ...})
|
|
255
253
|
|
256
254
|
When `true`, instead of returning a boolean value `CompareXML.equivalent?` returns an array of all errors encountered when performing a comparison.
|
257
255
|
|
258
|
-
|
256
|
+
> **Warning:** When `true`, the comparison takes longer! Not only because more processing is required to produce meaningful differences, but also because in this mode, comparison does **NOT** stop when a first difference is encountered, because the goal is to capture as many differences as possible.
|
259
257
|
|
260
|
-
|
258
|
+
**Usage Example:** `CompareXML.equivalent?(doc1, doc2, {verbose: true})`
|
261
259
|
|
262
260
|
**Example:** When `true` given the following HTML strings:
|
263
261
|
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
```ruby
|
269
|
-
[
|
270
|
-
{
|
271
|
-
node1: '<title>TITLE</title>',
|
272
|
-
node2: '<title>ANOTHER TITLE</title>',
|
273
|
-
diff1: 'TITLE',
|
274
|
-
diff2: 'ANOTHER TITLE',
|
275
|
-
},
|
276
|
-
{
|
277
|
-
node1: '<h1>SOME HEADING</h1>',
|
278
|
-
node2: '<h1 id="main">SOME HEADING</h1>',
|
279
|
-
diff1: nil,
|
280
|
-
diff2: 'id="main"',
|
281
|
-
},
|
282
|
-
{
|
283
|
-
node1: '<a href="/admin" rel="icon">Link</a>',
|
284
|
-
node2: '<a rel="button" href="/admin">Link</a>',
|
285
|
-
diff1: '"rel="icon"',
|
286
|
-
diff2: '"rel="button"',
|
287
|
-
},
|
288
|
-
{
|
289
|
-
node1: '<cite>Author Name</cite>',
|
290
|
-
node2: nil,
|
291
|
-
diff1: '<cite>Author Name</cite>',
|
292
|
-
diff2: nil,
|
293
|
-
},
|
294
|
-
{
|
295
|
-
node1: '<p class="footer">FOOTER</p>',
|
296
|
-
node1: '<div class="footer">FOOTER</div>',
|
297
|
-
diff1: 'p',
|
298
|
-
diff2: 'div',
|
299
|
-
}
|
300
|
-
]
|
301
|
-
```
|
302
|
-
|
303
|
-
The structure of each hash inside the array is:
|
304
|
-
|
305
|
-
node1: [Nokogiri::XML::Node] left node that contains the difference
|
306
|
-
node2: [Nokogiri::XML::Node] right node that contains the difference
|
307
|
-
diff1: [Nokogiri::XML::Node|String] left difference
|
308
|
-
diff1: [Nokogiri::XML::Node|String] right difference
|
309
|
-
|
310
|
-
**Node location** of `html:body:p(4)` means that the element in question is `<p>`, its hierarchical ancestors are `html > body`, and it is the **4th** `<p>` tag. That is, it could be found in
|
311
|
-
|
312
|
-
<html><body><p>one</p...p>two</p...p>three</p...p>TARGET</p></body></html>
|
313
|
-
|
314
|
-
> **Note:** `p(4)` means that it is the fourth tag of type `<p>`, but there could be many other tags of other types between `p(3)` and `p(4)`.
|
315
|
-
|
316
|
-
**Node content** displays the discrepancy in content (which could be the name of the tag, attributes, text content, comments, etc)
|
317
|
-
|
318
|
-
**Error code** is a numeric value that indicates the type of a discrepancy. CompareXML implements the following error codes
|
319
|
-
|
320
|
-
```ruby
|
321
|
-
EQUIVALENT = 1 # nodes are equal (for internal use only)
|
322
|
-
MISSING_ATTRIBUTE = 2 # attribute is missing its counterpart
|
323
|
-
MISSING_NODE = 3 # node is missing its counterpart
|
324
|
-
UNEQUAL_ATTRIBUTES = 4 # attributes are not equal
|
325
|
-
UNEQUAL_COMMENTS = 5 # comment contents are not equal
|
326
|
-
UNEQUAL_DOCUMENTS = 6 # document types are not equal
|
327
|
-
UNEQUAL_ELEMENTS = 7 # nodes have the same type but are not equal
|
328
|
-
UNEQUAL_NODES_TYPES = 8 # nodes do not have the same type
|
329
|
-
UNEQUAL_TEXT_CONTENTS = 9 # text contents are not equal
|
330
|
-
```
|
331
|
-
|
332
|
-
Here is an example of how these could be used:
|
262
|
+

|
263
|
+
|
264
|
+
`CompareXML.equivalent?(doc1, doc2, {verbose: true})` will produce an array shown below.
|
333
265
|
|
334
266
|
```ruby
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
267
|
+
[
|
268
|
+
{
|
269
|
+
node1: '<title>TITLE</title>',
|
270
|
+
node2: '<title>ANOTHER TITLE</title>',
|
271
|
+
diff1: 'TITLE',
|
272
|
+
diff2: 'ANOTHER TITLE',
|
273
|
+
},
|
274
|
+
{
|
275
|
+
node1: '<h1>SOME HEADING</h1>',
|
276
|
+
node2: '<h1 id="main">SOME HEADING</h1>',
|
277
|
+
diff1: nil,
|
278
|
+
diff2: 'id="main"',
|
279
|
+
},
|
280
|
+
{
|
281
|
+
node1: '<a href="/admin" rel="icon">Link</a>',
|
282
|
+
node2: '<a rel="button" href="/admin">Link</a>',
|
283
|
+
diff1: '"rel="icon"',
|
284
|
+
diff2: '"rel="button"',
|
285
|
+
},
|
286
|
+
{
|
287
|
+
node1: '<cite>Author Name</cite>',
|
288
|
+
node2: nil,
|
289
|
+
diff1: '<cite>Author Name</cite>',
|
290
|
+
diff2: nil,
|
291
|
+
},
|
292
|
+
{
|
293
|
+
node1: '<p class="footer">FOOTER</p>',
|
294
|
+
node2: '<div class="footer">FOOTER</div>',
|
295
|
+
diff1: 'p',
|
296
|
+
diff2: 'div',
|
297
|
+
}
|
298
|
+
]
|
341
299
|
```
|
342
300
|
|
301
|
+
The structure of each hash inside the array is:
|
302
|
+
|
303
|
+
node1: [Nokogiri::XML::Node] left node that contains the difference
|
304
|
+
node2: [Nokogiri::XML::Node] right node that contains the difference
|
305
|
+
diff1: [Nokogiri::XML::Node|String] left difference
|
306
|
+
diff2: [Nokogiri::XML::Node|String] right difference
|
307
|
+
|
343
308
|
|
344
309
|
|
345
310
|
## Contributing
|
data/compare-xml.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
|
|
11
11
|
|
12
12
|
spec.summary = %q{A customizable tool that compares two instances of Nokogiri::XML::Node for equality or equivalency.}
|
13
13
|
spec.description = %q{CompareXML is a fast, lightweight and feature-rich tool that will solve your XML/HTML comparison or diffing needs. its purpose is to compare two instances of Nokogiri::XML::Node or Nokogiri::XML::NodeSet for equality or equivalency.}
|
14
|
-
spec.homepage = '
|
14
|
+
spec.homepage = 'http://vkononov.github.io/compare-xml'
|
15
15
|
spec.license = 'MIT'
|
16
16
|
|
17
17
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
data/img/diffing.png
ADDED
Binary file
|
data/lib/compare-xml.rb
CHANGED
@@ -133,7 +133,7 @@ module CompareXML
|
|
133
133
|
t1, t2 = collapse(t1), collapse(t2) if opts[:collapse_whitespace]
|
134
134
|
unless t1 == t2
|
135
135
|
status = UNEQUAL_COMMENTS
|
136
|
-
addDifference(n1, n2, t1, t2, opts, differences)
|
136
|
+
addDifference(n1.parent, n2.parent, t1, t2, opts, differences)
|
137
137
|
end
|
138
138
|
status
|
139
139
|
end
|
data/lib/compare-xml/version.rb
CHANGED
metadata
CHANGED
@@ -1,55 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: compare-xml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.61'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vadim Kononov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.11'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.11'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '11.1'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '11.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: nokogiri
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '1.6'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.6'
|
55
55
|
description: CompareXML is a fast, lightweight and feature-rich tool that will solve
|
@@ -61,7 +61,7 @@ executables: []
|
|
61
61
|
extensions: []
|
62
62
|
extra_rdoc_files: []
|
63
63
|
files:
|
64
|
-
-
|
64
|
+
- .gitignore
|
65
65
|
- Gemfile
|
66
66
|
- LICENSE.txt
|
67
67
|
- README.md
|
@@ -69,9 +69,10 @@ files:
|
|
69
69
|
- bin/console
|
70
70
|
- bin/setup
|
71
71
|
- compare-xml.gemspec
|
72
|
+
- img/diffing.png
|
72
73
|
- lib/compare-xml.rb
|
73
74
|
- lib/compare-xml/version.rb
|
74
|
-
homepage:
|
75
|
+
homepage: http://vkononov.github.io/compare-xml
|
75
76
|
licenses:
|
76
77
|
- MIT
|
77
78
|
metadata: {}
|
@@ -81,17 +82,17 @@ require_paths:
|
|
81
82
|
- lib
|
82
83
|
required_ruby_version: !ruby/object:Gem::Requirement
|
83
84
|
requirements:
|
84
|
-
- -
|
85
|
+
- - '>='
|
85
86
|
- !ruby/object:Gem::Version
|
86
87
|
version: '0'
|
87
88
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
89
|
requirements:
|
89
|
-
- -
|
90
|
+
- - '>='
|
90
91
|
- !ruby/object:Gem::Version
|
91
92
|
version: '0'
|
92
93
|
requirements: []
|
93
94
|
rubyforge_project:
|
94
|
-
rubygems_version: 2.
|
95
|
+
rubygems_version: 2.6.2
|
95
96
|
signing_key:
|
96
97
|
specification_version: 4
|
97
98
|
summary: A customizable tool that compares two instances of Nokogiri::XML::Node for
|