diff_matcher 2.3.1 → 2.3.3
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/.gitignore +3 -0
- data/CHANGELOG.md +44 -0
- data/README.md +10 -0
- data/lib/diff_matcher/difference.rb +6 -1
- data/lib/diff_matcher/escape_to_html.rb +32 -0
- data/lib/diff_matcher/version.rb +1 -1
- data/spec/diff_matcher/difference_spec.rb +17 -0
- metadata +5 -5
- data/Gemfile.lock +0 -26
- data/examples/tennis_score.rb +0 -15
data/.gitignore
ADDED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,49 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
### v2.3.3
|
4
|
+
|
5
|
+
Allow HTML output using `:html_output=>true` option
|
6
|
+
|
7
|
+
### v2.3.2
|
8
|
+
|
9
|
+
Summarize `Hash` and `Array` output in diff with `"..."`
|
10
|
+
```
|
11
|
+
eg.
|
12
|
+
- [...]+ {...}
|
13
|
+
```
|
14
|
+
|
15
|
+
### v2.2.3
|
16
|
+
|
17
|
+
* set color_enabled/color_scheme on the class
|
18
|
+
|
19
|
+
(ie. so it can be used by default)
|
20
|
+
|
21
|
+
### v2.2.2
|
22
|
+
|
23
|
+
* BUGFIX for `AllMatcher`
|
24
|
+
|
25
|
+
- return a diff instead of raising an exception
|
26
|
+
- (raising an exception was a bad idea as it blew up the entire match
|
27
|
+
when used in conjuction with an or-matcher, or embedded into other
|
28
|
+
matchers)
|
29
|
+
|
30
|
+
### v2.2.1
|
31
|
+
|
32
|
+
* AllMatcher also accepts a size (`Fixnum` or `Range`)
|
33
|
+
|
34
|
+
### v2.2.0
|
35
|
+
|
36
|
+
* Added Matcher and AllMatcher
|
37
|
+
- Matcher returns the *closest* diff.
|
38
|
+
* Added `:min`, `:max` args to `AllMatcher` and `:optional_keys` to `Matcher`
|
39
|
+
* Added range matcher
|
40
|
+
|
41
|
+
### v2.0.0
|
42
|
+
|
43
|
+
* Remove `:verbose` option
|
44
|
+
|
45
|
+
More often than not users want this as the default.
|
46
|
+
|
3
47
|
### v1.0.1
|
4
48
|
|
5
49
|
* BUGFIX for ruby 1.8.7
|
data/README.md
CHANGED
@@ -214,6 +214,16 @@ puts DiffMatcher::difference([Fixnum, 2], [1], :quiet=>true)
|
|
214
214
|
# => Where, - 1 missing
|
215
215
|
```
|
216
216
|
|
217
|
+
`:html_output=>true` will convert ansii escape codes to html spans
|
218
|
+
|
219
|
+
``` ruby
|
220
|
+
puts DiffMatcher::difference(1, 2, :html_output=>true)
|
221
|
+
<pre>
|
222
|
+
<span style="color:red">- <b>1</b></span><span style="color:yellow">+ <b>2</b></span>
|
223
|
+
Where, <span style="color:red">- <b>1 missing</b></span>, <span style="color:yellow">+ <b>1 additional</b></span>
|
224
|
+
</pre>
|
225
|
+
```
|
226
|
+
|
217
227
|
#### Prefixes
|
218
228
|
|
219
229
|
The items shown in a difference are prefixed as follows:
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'diff_matcher/escape_to_html'
|
2
|
+
|
1
3
|
module DiffMatcher
|
2
4
|
|
3
5
|
def self.difference(expected, actual, opts={})
|
@@ -121,6 +123,8 @@ module DiffMatcher
|
|
121
123
|
@optional_keys = opts.delete(:optional_keys) || []
|
122
124
|
@dif_count = 0
|
123
125
|
@difference = difference(expected, actual)
|
126
|
+
@html_output = opts[:html_output]
|
127
|
+
@color_enabled = true if @html_output
|
124
128
|
end
|
125
129
|
|
126
130
|
def matching?
|
@@ -144,7 +148,8 @@ module DiffMatcher
|
|
144
148
|
}.compact.join(", ")
|
145
149
|
msg << "\nWhere, #{where}" if where.size > 0
|
146
150
|
|
147
|
-
|
151
|
+
msg.gsub!(/\e\[\d+m/, "") unless @color_enabled
|
152
|
+
@html_output ? "<pre>\n#{escape_to_html(msg)}\n</pre>" : msg
|
148
153
|
end
|
149
154
|
end
|
150
155
|
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# from http://stackoverflow.com/questions/4894434/ansi-escape-code-with-html-tags-in-ruby
|
2
|
+
def escape_to_html(data)
|
3
|
+
{ 1 => :nothing,
|
4
|
+
2 => :nothing,
|
5
|
+
4 => :nothing,
|
6
|
+
5 => :nothing,
|
7
|
+
7 => :nothing,
|
8
|
+
30 => :black,
|
9
|
+
31 => :red,
|
10
|
+
32 => :green,
|
11
|
+
33 => :yellow,
|
12
|
+
34 => :blue,
|
13
|
+
35 => :magenta,
|
14
|
+
36 => :cyan,
|
15
|
+
37 => :white,
|
16
|
+
40 => :nothing,
|
17
|
+
41 => :nothing,
|
18
|
+
43 => :nothing,
|
19
|
+
44 => :nothing,
|
20
|
+
45 => :nothing,
|
21
|
+
46 => :nothing,
|
22
|
+
47 => :nothing,
|
23
|
+
}.each do |key, value|
|
24
|
+
if value != :nothing
|
25
|
+
data.gsub!(/\e\[#{key}m/,"<span style=\"color:#{value}\">")
|
26
|
+
else
|
27
|
+
data.gsub!(/\e\[#{key}m/,"<b>")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
data.gsub!(/^\e\[0m/,'')
|
31
|
+
data.gsub!(/\e\[0m/,'</b></span>')
|
32
|
+
end
|
data/lib/diff_matcher/version.rb
CHANGED
@@ -750,5 +750,22 @@ describe "DiffMatcher::difference(expected, actual, opts)" do
|
|
750
750
|
EOF
|
751
751
|
end
|
752
752
|
end
|
753
|
+
|
754
|
+
describe "it shows matches in html" do
|
755
|
+
it_behaves_like "a diff matcher", expected, same, different,
|
756
|
+
<<-EOF , :color_scheme => :white_background, :html_output=>true
|
757
|
+
<pre>
|
758
|
+
[
|
759
|
+
<span style=\"color:red\">- <b>1</b></span><span style=\"color:magenta\">+ <b>0</b></span>,
|
760
|
+
2,
|
761
|
+
<span style=\"color:green\">~ </b></span>\"<span style=\"color:green\">(<b>3</b></span><span style=\"color:green\">)</b></span>\"</b></span>,
|
762
|
+
<span style=\"color:blue\">: <b>4</b></span>,
|
763
|
+
<span style=\"color:cyan\">. <b>5</b></span>,
|
764
|
+
<span style=\"color:cyan\">{ <b>6</b></span>
|
765
|
+
]
|
766
|
+
Where, <span style=\"color:red\">- <b>1 missing</b></span>, <span style=\"color:magenta\">+ <b>1 additional</b></span>, <span style=\"color:green\">~ <b>1 match_regexp</b></span>, <span style=\"color:blue\">: <b>1 match_class</b></span>, <span style=\"color:cyan\">. <b>1 match_range</b></span>, <span style=\"color:cyan\">{ <b>1 match_proc</b></span>
|
767
|
+
</pre>
|
768
|
+
EOF
|
769
|
+
end
|
753
770
|
end
|
754
771
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: diff_matcher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.3.
|
4
|
+
version: 2.3.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-03 00:00:00.000000000 +10:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
description: ! "DiffMatcher performs recursive matches on values contained in hashes,
|
@@ -22,11 +22,11 @@ executables: []
|
|
22
22
|
extensions: []
|
23
23
|
extra_rdoc_files: []
|
24
24
|
files:
|
25
|
+
- .gitignore
|
25
26
|
- .rspec
|
26
27
|
- .travis.yml
|
27
28
|
- CHANGELOG.md
|
28
29
|
- Gemfile
|
29
|
-
- Gemfile.lock
|
30
30
|
- License.txt
|
31
31
|
- README.md
|
32
32
|
- Rakefile
|
@@ -34,9 +34,9 @@ files:
|
|
34
34
|
- diff_matcher.gemspec
|
35
35
|
- doc/diff_matcher.gif
|
36
36
|
- doc/example_output.png
|
37
|
-
- examples/tennis_score.rb
|
38
37
|
- lib/diff_matcher.rb
|
39
38
|
- lib/diff_matcher/difference.rb
|
39
|
+
- lib/diff_matcher/escape_to_html.rb
|
40
40
|
- lib/diff_matcher/version.rb
|
41
41
|
- spec/diff_matcher/difference_spec.rb
|
42
42
|
- spec/spec_helper.rb
|
@@ -55,7 +55,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
55
55
|
version: '0'
|
56
56
|
segments:
|
57
57
|
- 0
|
58
|
-
hash:
|
58
|
+
hash: 1047575201
|
59
59
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
60
|
none: false
|
61
61
|
requirements:
|
data/Gemfile.lock
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
GEM
|
2
|
-
remote: http://rubygems.org/
|
3
|
-
specs:
|
4
|
-
diff-lcs (1.1.3)
|
5
|
-
multi_json (1.0.4)
|
6
|
-
rake (0.9.2.2)
|
7
|
-
rspec (2.6.0)
|
8
|
-
rspec-core (~> 2.6.0)
|
9
|
-
rspec-expectations (~> 2.6.0)
|
10
|
-
rspec-mocks (~> 2.6.0)
|
11
|
-
rspec-core (2.6.4)
|
12
|
-
rspec-expectations (2.6.0)
|
13
|
-
diff-lcs (~> 1.1.2)
|
14
|
-
rspec-mocks (2.6.0)
|
15
|
-
simplecov (0.5.4)
|
16
|
-
multi_json (~> 1.0.3)
|
17
|
-
simplecov-html (~> 0.5.3)
|
18
|
-
simplecov-html (0.5.3)
|
19
|
-
|
20
|
-
PLATFORMS
|
21
|
-
ruby
|
22
|
-
|
23
|
-
DEPENDENCIES
|
24
|
-
rake (~> 0.9)
|
25
|
-
rspec (~> 2.6.0)
|
26
|
-
simplecov
|
data/examples/tennis_score.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'diff_matcher'
|
2
|
-
|
3
|
-
set_scores = [
|
4
|
-
[[6,4], [6,4], [6,4]],
|
5
|
-
[[8,4], [6,9], [6,4]],
|
6
|
-
]
|
7
|
-
|
8
|
-
pat_set_scores = DiffMatcher::AllMatcher.new(
|
9
|
-
[0..6, 0..6],
|
10
|
-
:size => 2..3
|
11
|
-
)
|
12
|
-
|
13
|
-
invalid_scores = set_scores.map { |score| pat_set_scores.diff(score) }.compact
|
14
|
-
|
15
|
-
puts invalid_scores
|