json_spec 0.6.0 → 0.7.0

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.
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{|f| File.basename(f) }
19
19
  s.require_paths = ["lib"]
20
20
 
21
- s.add_dependency "json", "~> 1.0"
21
+ s.add_dependency "multi_json", "~> 1.0.0"
22
22
  s.add_dependency "rspec", "~> 2.0"
23
23
 
24
24
  s.add_development_dependency "rake", "~> 0.9"
@@ -1,12 +1,14 @@
1
+ require 'multi_json'
2
+
1
3
  module JsonSpec
2
4
  module Helpers
3
5
  extend self
4
6
 
5
7
  def parse_json(json, path = nil)
6
- ruby = JSON.parse(%([#{json}])).first
8
+ ruby = MultiJson.decode(%([#{json}])).first
7
9
  value_at_json_path(ruby, path)
8
- rescue JSON::ParserError
9
- JSON.parse(json)
10
+ rescue MultiJson::DecodeError
11
+ MultiJson.decode(json)
10
12
  end
11
13
 
12
14
  def normalize_json(json, path = nil)
@@ -17,7 +17,7 @@ RSpec::Matchers.define :be_json_eql do |expected_json|
17
17
  end
18
18
 
19
19
  chain :excluding do |*keys|
20
- excluded_keys.add(*keys.map{|k| k.to_s })
20
+ excluded_keys.merge(keys.map{|k| k.to_s })
21
21
  end
22
22
 
23
23
  chain :including do |*keys|
@@ -60,7 +60,7 @@ RSpec::Matchers.define :include_json do |expected_json|
60
60
  end
61
61
 
62
62
  chain :excluding do |*keys|
63
- excluded_keys.add(*keys.map{|k| k.to_s })
63
+ excluded_keys.merge(*keys.map{|k| k.to_s })
64
64
  end
65
65
 
66
66
  chain :including do |*keys|
@@ -105,7 +105,8 @@ RSpec::Matchers.define :have_json_type do |klass|
105
105
  include JsonSpec::Helpers
106
106
 
107
107
  match do |json|
108
- parse_json(json, @path).is_a?(klass)
108
+ @json = json
109
+ actual.is_a?(klass)
109
110
  end
110
111
 
111
112
  chain :at_path do |path|
@@ -113,24 +114,27 @@ RSpec::Matchers.define :have_json_type do |klass|
113
114
  end
114
115
 
115
116
  failure_message_for_should do
116
- message = "Expected JSON value type to be #{klass}"
117
+ message = "Expected JSON value type to be #{klass}, got #{actual.class}"
117
118
  message << %( at path "#{@path}") if @path
118
119
  message
119
120
  end
120
121
 
121
122
  failure_message_for_should_not do
122
- message = "Expected JSON value type to not be #{klass}"
123
+ message = "Expected JSON value type to not be #{klass}, got #{actual.class}"
123
124
  message << %( at path "#{@path}") if @path
124
125
  message
125
126
  end
127
+
128
+ def actual
129
+ parse_json(@json, @path)
130
+ end
126
131
  end
127
132
 
128
133
  RSpec::Matchers.define :have_json_size do |expected_size|
129
134
  include JsonSpec::Helpers
130
135
 
131
136
  match do |json|
132
- ruby = parse_json(json, @path)
133
- actual_size = ruby.is_a?(Enumerable) ? ruby.size : 1
137
+ @json = json
134
138
  actual_size == expected_size
135
139
  end
136
140
 
@@ -139,14 +143,19 @@ RSpec::Matchers.define :have_json_size do |expected_size|
139
143
  end
140
144
 
141
145
  failure_message_for_should do
142
- message = "Expected JSON value size to be #{expected_size}"
146
+ message = "Expected JSON value size to be #{expected_size}, got #{actual_size}"
143
147
  message << %( at path "#{@path}") if @path
144
148
  message
145
149
  end
146
150
 
147
151
  failure_message_for_should_not do
148
- message = "Expected JSON value size to not be #{expected_size}"
152
+ message = "Expected JSON value size to not be #{expected_size}, got #{actual_size}"
149
153
  message << %( at path "#{@path}") if @path
150
154
  message
151
155
  end
156
+
157
+ def actual_size
158
+ ruby = parse_json(@json, @path)
159
+ ruby.is_a?(Enumerable) ? ruby.size : 1
160
+ end
152
161
  end
@@ -1,3 +1,3 @@
1
1
  module JsonSpec
2
- VERSION = "0.6.0"
2
+ VERSION = "0.7.0"
3
3
  end
@@ -13,7 +13,7 @@ describe JsonSpec::Helpers do
13
13
  end
14
14
 
15
15
  it "raises a parser error for invalid JSON" do
16
- expect{ parse_json("json_spec") }.to raise_error(JSON::ParserError)
16
+ expect{ parse_json("json_spec") }.to raise_error(MultiJson::DecodeError)
17
17
  end
18
18
 
19
19
  it "parses at a path if given" do
@@ -67,6 +67,11 @@ describe "Matchers:" do
67
67
  %({"id":1,"json":"spec"}).should be_json_eql(%({"id":2,"json":"spec"})).excluding(:id)
68
68
  end
69
69
 
70
+ it "excludes multiple keys" do
71
+ JsonSpec.excluded_keys = []
72
+ %({"id":1,"json":"spec"}).should be_json_eql(%({"id":2,"json":"different"})).excluding(:id, :json)
73
+ end
74
+
70
75
  it "includes globally-excluded hash keys per matcher" do
71
76
  JsonSpec.excluded_keys = %w(id ignore)
72
77
  %({"id":1,"json":"spec","ignore":"please"}).should_not be_json_eql(%({"id":2,"json":"spec","ignore":"this"})).including("id")
@@ -76,6 +81,11 @@ describe "Matchers:" do
76
81
  JsonSpec.excluded_keys = %w(id)
77
82
  %({"id":1,"json":"spec"}).should_not be_json_eql(%({"id":2,"json":"spec"})).including(:id)
78
83
  end
84
+
85
+ it "includes multiple keys" do
86
+ JsonSpec.excluded_keys = %w(id json)
87
+ %({"id":1,"json":"spec"}).should_not be_json_eql(%({"id":2,"json":"different"})).including(:id, :json)
88
+ end
79
89
  end
80
90
 
81
91
  context "include_json" do
@@ -152,6 +162,18 @@ describe "Matchers:" do
152
162
  it "matches at a path" do
153
163
  %({"one":[1,2,3]}).should have_json_size(3).at_path("one")
154
164
  end
165
+
166
+ it "provides a failure message for should" do
167
+ matcher = have_json_size(3)
168
+ matcher.matches?(%([1,2]))
169
+ matcher.failure_message_for_should.should == "Expected JSON value size to be 3, got 2"
170
+ end
171
+
172
+ it "provides a failure message for should not" do
173
+ matcher = have_json_size(3)
174
+ matcher.matches?(%([1,2,3]))
175
+ matcher.failure_message_for_should_not.should == "Expected JSON value size to not be 3, got 3"
176
+ end
155
177
  end
156
178
 
157
179
  context "have_json_path" do
@@ -215,6 +237,18 @@ describe "Matchers:" do
215
237
  %(10.0).should have_json_type(Numeric)
216
238
  end
217
239
 
240
+ it "provides a failure message for should" do
241
+ matcher = have_json_type(Numeric)
242
+ matcher.matches?(%("foo"))
243
+ matcher.failure_message_for_should.should == "Expected JSON value type to be Numeric, got String"
244
+ end
245
+
246
+ it "provides a failure message for should not" do
247
+ matcher = have_json_type(Numeric)
248
+ matcher.matches?(%(10))
249
+ matcher.failure_message_for_should_not.should == "Expected JSON value type to not be Numeric, got Fixnum"
250
+ end
251
+
218
252
  context "somewhat uselessly" do
219
253
  it "matches true" do
220
254
  %(true).should have_json_type(TrueClass)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json_spec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,23 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-07-20 00:00:00.000000000 -04:00
13
- default_executable:
12
+ date: 2011-08-19 00:00:00.000000000Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
- name: json
17
- requirement: &70202465651180 !ruby/object:Gem::Requirement
15
+ name: multi_json
16
+ requirement: &70258292680600 !ruby/object:Gem::Requirement
18
17
  none: false
19
18
  requirements:
20
19
  - - ~>
21
20
  - !ruby/object:Gem::Version
22
- version: '1.0'
21
+ version: 1.0.0
23
22
  type: :runtime
24
23
  prerelease: false
25
- version_requirements: *70202465651180
24
+ version_requirements: *70258292680600
26
25
  - !ruby/object:Gem::Dependency
27
26
  name: rspec
28
- requirement: &70202465650680 !ruby/object:Gem::Requirement
27
+ requirement: &70258292680100 !ruby/object:Gem::Requirement
29
28
  none: false
30
29
  requirements:
31
30
  - - ~>
@@ -33,10 +32,10 @@ dependencies:
33
32
  version: '2.0'
34
33
  type: :runtime
35
34
  prerelease: false
36
- version_requirements: *70202465650680
35
+ version_requirements: *70258292680100
37
36
  - !ruby/object:Gem::Dependency
38
37
  name: rake
39
- requirement: &70202465650220 !ruby/object:Gem::Requirement
38
+ requirement: &70258292710600 !ruby/object:Gem::Requirement
40
39
  none: false
41
40
  requirements:
42
41
  - - ~>
@@ -44,10 +43,10 @@ dependencies:
44
43
  version: '0.9'
45
44
  type: :development
46
45
  prerelease: false
47
- version_requirements: *70202465650220
46
+ version_requirements: *70258292710600
48
47
  - !ruby/object:Gem::Dependency
49
48
  name: cucumber
50
- requirement: &70202465649760 !ruby/object:Gem::Requirement
49
+ requirement: &70258292710140 !ruby/object:Gem::Requirement
51
50
  none: false
52
51
  requirements:
53
52
  - - ~>
@@ -55,7 +54,7 @@ dependencies:
55
54
  version: '1.0'
56
55
  type: :development
57
56
  prerelease: false
58
- version_requirements: *70202465649760
57
+ version_requirements: *70258292710140
59
58
  description: Easily handle JSON in RSpec and Cucumber
60
59
  email:
61
60
  - steve.richert@gmail.com
@@ -92,7 +91,6 @@ files:
92
91
  - spec/json_spec/matchers_spec.rb
93
92
  - spec/json_spec/memory_spec.rb
94
93
  - spec/spec_helper.rb
95
- has_rdoc: true
96
94
  homepage: https://github.com/collectiveidea/json_spec
97
95
  licenses: []
98
96
  post_install_message:
@@ -113,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
111
  version: '0'
114
112
  requirements: []
115
113
  rubyforge_project: json_spec
116
- rubygems_version: 1.6.2
114
+ rubygems_version: 1.8.8
117
115
  signing_key:
118
116
  specification_version: 3
119
117
  summary: Easily handle JSON in RSpec and Cucumber