diff_matcher 1.0.0 → 1.0.1
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.
- data/.travis.yml +10 -0
- data/CHANGELOG.md +9 -0
- data/Gemfile +8 -5
- data/README.md +66 -40
- data/Rakefile +1 -1
- data/lib/diff_matcher/difference.rb +4 -4
- data/lib/diff_matcher/version.rb +1 -1
- data/spec/diff_matcher/difference_spec.rb +16 -17
- data/spec/spec_helper.rb +5 -2
- metadata +7 -2
data/.travis.yml
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
rvm:
|
2
|
+
# - 1.8.6 # travis no longer supports this https://twitter.com/#!/travisci/status/114926454122364928
|
3
|
+
- 1.8.7
|
4
|
+
# - 1.9.1 # travis no longer supports this https://twitter.com/#!/travisci/status/114926454122364928
|
5
|
+
- 1.9.2
|
6
|
+
- 1.9.3
|
7
|
+
- rbx
|
8
|
+
- rbx-2.0
|
9
|
+
- ree
|
10
|
+
- ruby-head
|
data/CHANGELOG.md
ADDED
data/Gemfile
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
2
|
|
3
|
-
gemspec
|
3
|
+
#gemspec
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
gem "rake" , "~> 0.9"
|
6
|
+
gem "rspec", "~> 2.6.0"
|
7
|
+
|
8
|
+
group :development do
|
9
|
+
platforms :mri_19 do
|
10
|
+
gem "simplecov"
|
11
|
+
end
|
9
12
|
end
|
data/README.md
CHANGED
@@ -24,78 +24,100 @@ Installation
|
|
24
24
|
Usage
|
25
25
|
---
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
``` ruby
|
28
|
+
require 'diff_matcher'
|
29
|
+
|
30
|
+
DiffMatcher::difference(actual, expected, opts={})
|
31
|
+
```
|
30
32
|
|
31
33
|
When `expected` != `actual`
|
32
34
|
|
33
|
-
|
34
|
-
|
35
|
-
|
35
|
+
``` ruby
|
36
|
+
puts DiffMatcher::difference(1, 2)
|
37
|
+
# => - 1+ 2
|
38
|
+
# => Where, - 1 missing, + 1 additional
|
39
|
+
```
|
36
40
|
|
37
41
|
When `expected` == `actual`
|
38
42
|
|
39
|
-
|
40
|
-
|
43
|
+
``` ruby
|
44
|
+
p DiffMatcher::difference(1, 1)
|
45
|
+
# => nil
|
46
|
+
```
|
41
47
|
|
42
48
|
When `actual` is an instance of the `expected`
|
43
49
|
|
44
|
-
|
45
|
-
|
50
|
+
``` ruby
|
51
|
+
p DiffMatcher::difference(String, '1')
|
52
|
+
# => nil
|
53
|
+
```
|
46
54
|
|
47
55
|
When `actual` is a string that matches the `expected` regex
|
48
56
|
|
49
|
-
|
50
|
-
|
57
|
+
``` ruby
|
58
|
+
p DiffMatcher::difference(/[a-z]/, "a")
|
59
|
+
# => nil
|
60
|
+
```
|
51
61
|
|
52
62
|
When `actual` is passed to an `expected` proc and it returns true
|
53
63
|
|
54
|
-
|
55
|
-
|
56
|
-
|
64
|
+
``` ruby
|
65
|
+
is_boolean = lambda { |x| [FalseClass, TrueClass].include? x.class }
|
66
|
+
p DiffMatcher::difference(is_boolean, true)
|
67
|
+
# => nil
|
68
|
+
```
|
57
69
|
|
58
70
|
When `actual` is missing one of the `expected` values
|
59
71
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
72
|
+
``` ruby
|
73
|
+
puts DiffMatcher::difference([1, 2], [1])
|
74
|
+
# => [
|
75
|
+
# => - 2
|
76
|
+
# => ]
|
77
|
+
# => Where, - 1 missing
|
78
|
+
```
|
65
79
|
|
66
80
|
When `actual` has additional values to the `expected`
|
67
81
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
82
|
+
``` ruby
|
83
|
+
puts DiffMatcher::difference([1], [1, 2])
|
84
|
+
# => [
|
85
|
+
# => + 2
|
86
|
+
# => ]
|
87
|
+
# => Where, - 1 additional
|
88
|
+
```
|
73
89
|
|
74
90
|
### Options
|
75
91
|
|
76
92
|
`:ignore_additional=>true` will match even if `actual` has additional items
|
77
93
|
|
78
|
-
|
79
|
-
|
94
|
+
``` ruby
|
95
|
+
p DiffMatcher::difference([1], [1, 2], :ignore_additional=>true)
|
96
|
+
# => nil
|
97
|
+
```
|
80
98
|
|
81
99
|
`:verbose=>true` shows only missing and additional items in the output
|
82
100
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
101
|
+
``` ruby
|
102
|
+
puts DiffMatcher::difference([Fixnum, 2], [1], :quiet=>true)
|
103
|
+
# => [
|
104
|
+
# => - 2
|
105
|
+
# => ]
|
106
|
+
# => Where, - 1 missing
|
107
|
+
```
|
88
108
|
|
89
109
|
`:verbose=>true` shows all matched items in the output
|
90
110
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
111
|
+
``` ruby
|
112
|
+
puts DiffMatcher::difference([Fixnum, 2], [1], :verbose=>true)
|
113
|
+
# => [
|
114
|
+
# = > : 1,
|
115
|
+
# => - 2
|
116
|
+
# => ]
|
117
|
+
# => Where, - 1 missing, : 1 match_class
|
118
|
+
```
|
97
119
|
|
98
|
-
####
|
120
|
+
#### Prefixes
|
99
121
|
|
100
122
|
NB. The `: 1` from above includes a `:` prefix that shows the `1` was matched against a class (ie. `Fixnum`)
|
101
123
|
|
@@ -108,7 +130,7 @@ The items shown in a difference are prefixed as follows:
|
|
108
130
|
match class => ": "
|
109
131
|
match proc => "{ "
|
110
132
|
|
111
|
-
####
|
133
|
+
#### Colours
|
112
134
|
|
113
135
|
Colours (defined in colour schemes) can also appear in the difference.
|
114
136
|
|
@@ -122,11 +144,15 @@ Using the `:default` colour scheme items shown in a difference are coloured as f
|
|
122
144
|
match proc => cyan
|
123
145
|
|
124
146
|
|
147
|
+
`:color_scheme=>:white_background` shows difference as follows
|
148
|
+
|
149
|
+
``` ruby
|
125
150
|
puts DiffMatcher::difference(
|
126
151
|
{ :a=>{ :a1=>11 }, :b=>[ 21, 22 ], :c=>/\d/, :d=>Fixnum, :e=>lambda { |x| (4..6).includes? x },
|
127
152
|
{ :a=>{ :a1=>10, :a2=>12 }, :b=>[ 21 ], :c=>'3' , :d=>4 , :e=>5 },
|
128
153
|
:verbose=>true, :color_scheme=>:white_background
|
129
154
|
)
|
155
|
+
```
|
130
156
|
|
131
157
|

|
132
158
|
|
data/Rakefile
CHANGED
@@ -49,7 +49,7 @@ module DiffMatcher
|
|
49
49
|
def matching?
|
50
50
|
@match ||= @difference ? item_types.map { |item_type|
|
51
51
|
@color_scheme[item_type]
|
52
|
-
}.
|
52
|
+
}.inject(0) { |count, (color, prefix)|
|
53
53
|
count + @difference.scan("#{color}#{prefix}").size
|
54
54
|
} == 0 : true
|
55
55
|
end
|
@@ -101,7 +101,7 @@ module DiffMatcher
|
|
101
101
|
right = diff(actual, expected)
|
102
102
|
items_to_s(
|
103
103
|
expected,
|
104
|
-
(item_types_shown).
|
104
|
+
(item_types_shown).inject([]) { |a, method|
|
105
105
|
a + send(method, left, right, expected.class).compact.map { |item| markup(method, item) }
|
106
106
|
}
|
107
107
|
)
|
@@ -112,11 +112,11 @@ module DiffMatcher
|
|
112
112
|
|
113
113
|
def diff(expected, actual, reverse=false)
|
114
114
|
if expected.is_a?(Hash)
|
115
|
-
expected.keys.
|
115
|
+
expected.keys.inject({}) { |h, k|
|
116
116
|
h.update(k => actual.has_key?(k) ? difference(actual[k], expected[k], reverse) : expected[k])
|
117
117
|
}
|
118
118
|
elsif expected.is_a?(Array)
|
119
|
-
expected, actual = [expected, actual].map { |x| x.each_with_index.
|
119
|
+
expected, actual = [expected, actual].map { |x| x.each_with_index.inject({}) { |h, (v, i)| h.update(i=>v) } }
|
120
120
|
#diff(expected, actual, reverse) # XXX - is there a test case for this?
|
121
121
|
diff(expected, actual)
|
122
122
|
else
|
data/lib/diff_matcher/version.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
RUBY_1_9 = (RUBY_VERSION =~ /^1\.9/)
|
4
|
-
|
5
3
|
def opts_to_s(opts)
|
6
4
|
opts_strs = opts.map { |k,v| ":#{k}=>#{v}" if v }.compact
|
7
5
|
opts_strs.size > 0 ? ", " + opts_strs * ", " : ""
|
@@ -17,7 +15,8 @@ end
|
|
17
15
|
describe DiffMatcher do
|
18
16
|
subject { DiffMatcher::difference(expected, actual, opts) }
|
19
17
|
|
20
|
-
shared_examples_for "a differ" do |expected, same, different, difference
|
18
|
+
shared_examples_for "a differ" do |expected, same, different, difference, opts|
|
19
|
+
opts ||= {}
|
21
20
|
context "with #{opts.size > 0 ? opts_to_s(opts) : "no opts"}" do
|
22
21
|
describe "difference(#{expected.inspect}, #{same.inspect}#{opts_to_s(opts)})" do
|
23
22
|
let(:expected) { expected }
|
@@ -50,7 +49,7 @@ describe DiffMatcher do
|
|
50
49
|
2
|
51
50
|
|
52
51
|
it_behaves_like "a differ", expected, same, different,
|
53
|
-
<<-EOF
|
52
|
+
<<-EOF, {}
|
54
53
|
- 1+ 2
|
55
54
|
Where, - 1 missing, + 1 additional
|
56
55
|
EOF
|
@@ -63,7 +62,7 @@ describe DiffMatcher do
|
|
63
62
|
"b"
|
64
63
|
|
65
64
|
it_behaves_like "a differ", expected, same, different,
|
66
|
-
<<-EOF
|
65
|
+
<<-EOF, {}
|
67
66
|
- "a"+ "b"
|
68
67
|
Where, - 1 missing, + 1 additional
|
69
68
|
EOF
|
@@ -72,7 +71,7 @@ describe DiffMatcher do
|
|
72
71
|
different = 0
|
73
72
|
|
74
73
|
it_behaves_like "a differ", expected, same, different,
|
75
|
-
<<-EOF
|
74
|
+
<<-EOF, {}
|
76
75
|
- "a"+ 0
|
77
76
|
Where, - 1 missing, + 1 additional
|
78
77
|
EOF
|
@@ -82,7 +81,7 @@ describe DiffMatcher do
|
|
82
81
|
different = nil
|
83
82
|
|
84
83
|
it_behaves_like "a differ", expected, same, different,
|
85
|
-
<<-EOF
|
84
|
+
<<-EOF, {}
|
86
85
|
- "a"+ nil
|
87
86
|
Where, - 1 missing, + 1 additional
|
88
87
|
EOF
|
@@ -96,7 +95,7 @@ describe DiffMatcher do
|
|
96
95
|
false
|
97
96
|
|
98
97
|
it_behaves_like "a differ", expected, same, different,
|
99
|
-
<<-EOF
|
98
|
+
<<-EOF, {}
|
100
99
|
- nil+ false
|
101
100
|
Where, - 1 missing, + 1 additional
|
102
101
|
EOF
|
@@ -109,7 +108,7 @@ describe DiffMatcher do
|
|
109
108
|
[ 2 ]
|
110
109
|
|
111
110
|
it_behaves_like "a differ", expected, same, different,
|
112
|
-
<<-EOF
|
111
|
+
<<-EOF, {}
|
113
112
|
[
|
114
113
|
- 1+ 2
|
115
114
|
]
|
@@ -157,7 +156,7 @@ describe DiffMatcher do
|
|
157
156
|
[ 1, 2 ]
|
158
157
|
|
159
158
|
it_behaves_like "a differ", expected, same, different,
|
160
|
-
<<-EOF
|
159
|
+
<<-EOF, {}
|
161
160
|
[
|
162
161
|
- 3
|
163
162
|
]
|
@@ -183,7 +182,7 @@ describe DiffMatcher do
|
|
183
182
|
{ "a"=>2 }
|
184
183
|
|
185
184
|
it_behaves_like "a differ", expected, same, different,
|
186
|
-
<<-EOF
|
185
|
+
<<-EOF, {}
|
187
186
|
{
|
188
187
|
"a"=>- 1+ 2
|
189
188
|
}
|
@@ -197,7 +196,7 @@ describe DiffMatcher do
|
|
197
196
|
{ "a"=>[ "b", 1 ] }
|
198
197
|
|
199
198
|
it_behaves_like "a differ", expected, same, different,
|
200
|
-
<<-EOF
|
199
|
+
<<-EOF, {}
|
201
200
|
{
|
202
201
|
"a"=>- {"b"=>1}+ ["b", 1]
|
203
202
|
}
|
@@ -213,7 +212,7 @@ describe DiffMatcher do
|
|
213
212
|
|
214
213
|
describe "it won't match the descendents" do
|
215
214
|
it_behaves_like "a differ", expected, same, different,
|
216
|
-
<<-EOF
|
215
|
+
<<-EOF, {}
|
217
216
|
{
|
218
217
|
- "a"=>{"b"=>{"c"=>1}},
|
219
218
|
+ "b"=>{"c"=>1}
|
@@ -233,7 +232,7 @@ describe DiffMatcher do
|
|
233
232
|
1
|
234
233
|
|
235
234
|
it_behaves_like "a differ", expected, same, different,
|
236
|
-
<<-EOF
|
235
|
+
<<-EOF, {}
|
237
236
|
- String+ 1
|
238
237
|
Where, - 1 missing, + 1 additional
|
239
238
|
EOF
|
@@ -248,7 +247,7 @@ describe DiffMatcher do
|
|
248
247
|
"A"
|
249
248
|
|
250
249
|
it_behaves_like "a differ", expected, same, different,
|
251
|
-
<<-EOF
|
250
|
+
<<-EOF, {}
|
252
251
|
- /[a-z]/+ "A"
|
253
252
|
Where, - 1 missing, + 1 additional
|
254
253
|
EOF
|
@@ -257,7 +256,7 @@ describe DiffMatcher do
|
|
257
256
|
different = :a
|
258
257
|
|
259
258
|
it_behaves_like "a differ", expected, same, different,
|
260
|
-
<<-EOF
|
259
|
+
<<-EOF, {}
|
261
260
|
- /[a-z]/+ :a
|
262
261
|
Where, - 1 missing, + 1 additional
|
263
262
|
EOF
|
@@ -285,7 +284,7 @@ describe DiffMatcher do
|
|
285
284
|
|
286
285
|
describe "it shows regex, class, proc matches and" do
|
287
286
|
it_behaves_like "a differ", expected, same, different,
|
288
|
-
<<-EOF
|
287
|
+
<<-EOF, {}
|
289
288
|
[
|
290
289
|
- 1+ 0,
|
291
290
|
~ (3),
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: diff_matcher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.0.
|
5
|
+
version: 1.0.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Playup
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-09-
|
13
|
+
date: 2011-09-21 00:00:00 +10:00
|
14
14
|
default_executable:
|
15
15
|
dependencies: []
|
16
16
|
|
@@ -32,6 +32,8 @@ extensions: []
|
|
32
32
|
extra_rdoc_files: []
|
33
33
|
|
34
34
|
files:
|
35
|
+
- .travis.yml
|
36
|
+
- CHANGELOG.md
|
35
37
|
- Gemfile
|
36
38
|
- License.txt
|
37
39
|
- README.md
|
@@ -57,6 +59,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
57
59
|
requirements:
|
58
60
|
- - ">="
|
59
61
|
- !ruby/object:Gem::Version
|
62
|
+
hash: 245833137
|
63
|
+
segments:
|
64
|
+
- 0
|
60
65
|
version: "0"
|
61
66
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
67
|
none: false
|