rspec-rcv 0.2.7 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
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.