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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ea556cb01b7fded7ef4069546c612373ec3771cb
4
- data.tar.gz: 91afb1fbd251eea0283f5258f1fefc3d6853b530
3
+ metadata.gz: e7f7ef0b816b8ffa81a6688ed6fc90b75f7d05be
4
+ data.tar.gz: 1c91a8426617d6653bf3e950bb9e2b3bb88498f6
5
5
  SHA512:
6
- metadata.gz: 29606e35351ee13f1e9671b8abf344d432faaba9e77212ce472c58cf7ac78e0a201e33bdefb9884d4ac196a4a71cf44059d731e837a9ff70e586d5feb964acd5
7
- data.tar.gz: 16c627bdce506c00f07c231bd021af1d5456941371a3bfb65523f4c6b8f910d35216f86ef7c0ccc38c6b2ee69426fd64d1febb786355a58fff1517685fc6092d
6
+ metadata.gz: 064bd72d4c9ee31f49558dfe3a8699ad1b597c6e0ca3a2a51745be7b0998f1682c03079dd1dc139838c40852f7153f9c3986c9d6ada963616e409c1f360d4efa
7
+ data.tar.gz: a0a3b38024c03f308398df8e4c219aefcc2cc5c3b76e12a7c5e5f806252dd3016bab9c6e82dcde2792e6a9c2acb2381467909fe56491dd479e8308cece6d62fe
@@ -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
- removed = []
64
- added = []
65
-
66
- diff.lines[data_index..-1].each do |line|
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
@@ -1,3 +1,3 @@
1
1
  module RSpecRcv
2
- VERSION = "0.2.7"
2
+ VERSION = "0.3.1"
3
3
  end
@@ -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.2.7
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: 2015-11-15 00:00:00.000000000 Z
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.6
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.