rspec-rcv 0.2.7 → 0.3.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.
- checksums.yaml +4 -4
- data/lib/rspec-rcv/handler.rb +47 -20
- data/lib/rspec-rcv/version.rb +1 -1
- data/rspec-rcv.gemspec +2 -0
- metadata +31 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e7f7ef0b816b8ffa81a6688ed6fc90b75f7d05be
|
4
|
+
data.tar.gz: 1c91a8426617d6653bf3e950bb9e2b3bb88498f6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 064bd72d4c9ee31f49558dfe3a8699ad1b597c6e0ca3a2a51745be7b0998f1682c03079dd1dc139838c40852f7153f9c3986c9d6ada963616e409c1f360d4efa
|
7
|
+
data.tar.gz: a0a3b38024c03f308398df8e4c219aefcc2cc5c3b76e12a7c5e5f806252dd3016bab9c6e82dcde2792e6a9c2acb2381467909fe56491dd479e8308cece6d62fe
|
data/lib/rspec-rcv/handler.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'diffy'
|
2
|
+
require 'json-compare'
|
2
3
|
|
3
4
|
module RSpecRcv
|
4
5
|
class Handler
|
@@ -18,7 +19,7 @@ module RSpecRcv
|
|
18
19
|
eq = opts[:compare_with].call(existing_data["data"], data, opts)
|
19
20
|
|
20
21
|
if !eq && opts[:fail_on_changed_output]
|
21
|
-
raise_error!(output)
|
22
|
+
raise_error!(output, JsonCompare.get_diff(existing_data["data"], data, opts.fetch(:ignore_keys, [])))
|
22
23
|
end
|
23
24
|
|
24
25
|
return :same if eq
|
@@ -56,35 +57,61 @@ module RSpecRcv
|
|
56
57
|
end
|
57
58
|
end
|
58
59
|
|
59
|
-
def raise_error!(output)
|
60
|
+
def raise_error!(output, json_compare_output)
|
60
61
|
diff = Diffy::Diff.new(existing_file, output).to_s
|
61
|
-
data_index = diff.lines.find_index{ |line| line =~ /"data":/ } # keys before data are un-important
|
62
62
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
key = line.split("\"")[1]
|
68
|
-
next if key.nil?
|
69
|
-
next if opts.fetch(:ignore_keys, []).include?(key.to_s)
|
70
|
-
next if opts.fetch(:ignore_keys, []).include?(key.to_sym)
|
71
|
-
|
72
|
-
if line.start_with?("-")
|
73
|
-
removed << key
|
74
|
-
elsif line.start_with?("+")
|
75
|
-
added << key
|
76
|
-
end
|
77
|
-
end
|
63
|
+
combined = JsonOutputCombiner.new(json_compare_output).combine
|
64
|
+
removed = combined[:remove]
|
65
|
+
added = combined[:append]
|
66
|
+
updated = combined[:update]
|
78
67
|
|
79
68
|
raise RSpecRcv::DataChangedError.new(<<-EOF)
|
80
69
|
Existing data will be overwritten. Turn off this feature with fail_on_changed_output=false
|
81
70
|
|
82
71
|
#{diff}
|
83
72
|
|
84
|
-
The following keys were added: #{added.uniq}
|
85
|
-
The following keys were removed: #{removed.uniq}
|
73
|
+
The following keys were added: #{added.uniq.map(&:to_s)}
|
74
|
+
The following keys were removed: #{removed.uniq.map(&:to_s)}
|
75
|
+
The following keys were updated: #{updated.uniq.map(&:to_s)}
|
76
|
+
|
86
77
|
This fixture is located at #{path}
|
87
78
|
EOF
|
88
79
|
end
|
89
80
|
end
|
90
81
|
end
|
82
|
+
|
83
|
+
class JsonOutputCombiner
|
84
|
+
def initialize(output)
|
85
|
+
@output = output
|
86
|
+
end
|
87
|
+
|
88
|
+
def combine
|
89
|
+
compact_compare_output(@output, key: "")
|
90
|
+
end
|
91
|
+
|
92
|
+
private
|
93
|
+
|
94
|
+
KEYS_TO_COMBINE = [:update, :append, :remove]
|
95
|
+
|
96
|
+
def combine_results(a, b)
|
97
|
+
KEYS_TO_COMBINE.each do |key|
|
98
|
+
a[key] += b[key]
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def compact_compare_output(output, key:)
|
103
|
+
result = { update: [], append: [], remove: [] }
|
104
|
+
return result unless output.is_a?(Hash)
|
105
|
+
|
106
|
+
KEYS_TO_COMBINE.each do |combine_key|
|
107
|
+
output.fetch(combine_key, {}).each do |update_key, nested_output|
|
108
|
+
new_key = "#{key}#{key.empty? ? '' : '.'}#{update_key}"
|
109
|
+
result[combine_key] << new_key
|
110
|
+
nested_result = compact_compare_output(nested_output, key: new_key)
|
111
|
+
combine_results(result, nested_result)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
result
|
116
|
+
end
|
117
|
+
end
|
data/lib/rspec-rcv/version.rb
CHANGED
data/rspec-rcv.gemspec
CHANGED
@@ -19,6 +19,8 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.required_ruby_version = '>= 2.0.0'
|
20
20
|
spec.add_development_dependency "bundler", "~> 1.10"
|
21
21
|
spec.add_development_dependency "rake", "~> 10.0"
|
22
|
+
spec.add_development_dependency "pry"
|
22
23
|
spec.add_runtime_dependency "rspec"
|
23
24
|
spec.add_runtime_dependency "diffy"
|
25
|
+
spec.add_runtime_dependency "json-compare"
|
24
26
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-rcv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen Bussey
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-07-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rspec
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +80,20 @@ dependencies:
|
|
66
80
|
- - ">="
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: json-compare
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
69
97
|
description:
|
70
98
|
email:
|
71
99
|
- steve.bussey@salesloft.com
|
@@ -109,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
109
137
|
version: '0'
|
110
138
|
requirements: []
|
111
139
|
rubyforge_project:
|
112
|
-
rubygems_version: 2.4.
|
140
|
+
rubygems_version: 2.4.5.1
|
113
141
|
signing_key:
|
114
142
|
specification_version: 4
|
115
143
|
summary: Export results of rspec tests to disk for integration testing.
|