json_spec 0.8.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/.travis.yml +2 -4
  2. data/Gemfile +1 -1
  3. data/{LICENSE.md → LICENSE} +0 -0
  4. data/README.md +221 -210
  5. data/features/files.feature +89 -0
  6. data/features/support/env.rb +3 -0
  7. data/features/types.feature +7 -1
  8. data/json_spec.gemspec +16 -20
  9. data/lib/json_spec/configuration.rb +10 -2
  10. data/lib/json_spec/cucumber.rb +18 -3
  11. data/lib/json_spec/errors.rb +22 -1
  12. data/lib/json_spec/helpers.rb +17 -2
  13. data/lib/json_spec/matchers/be_json_eql.rb +63 -0
  14. data/lib/json_spec/matchers/have_json_path.rb +30 -0
  15. data/lib/json_spec/matchers/have_json_size.rb +35 -0
  16. data/lib/json_spec/matchers/have_json_type.rb +49 -0
  17. data/lib/json_spec/matchers/include_json.rb +57 -0
  18. data/lib/json_spec/matchers.rb +9 -218
  19. data/lib/json_spec/memory.rb +2 -3
  20. data/lib/json_spec/messages.rb +8 -0
  21. data/lib/json_spec.rb +3 -1
  22. data/spec/json_spec/configuration_spec.rb +10 -0
  23. data/spec/json_spec/helpers_spec.rb +33 -1
  24. data/spec/json_spec/matchers/be_json_eql_spec.rb +109 -0
  25. data/spec/json_spec/matchers/have_json_path_spec.rb +29 -0
  26. data/spec/json_spec/matchers/have_json_size_spec.rb +47 -0
  27. data/spec/json_spec/matchers/have_json_type_spec.rb +89 -0
  28. data/spec/json_spec/matchers/include_json_spec.rb +76 -0
  29. data/spec/json_spec/matchers_spec.rb +43 -287
  30. data/spec/json_spec/memory_spec.rb +8 -3
  31. data/spec/spec_helper.rb +4 -0
  32. data/spec/support/files/one.json +1 -0
  33. data/spec/support/files/project/one.json +1 -0
  34. data/spec/support/files/project/two.json +18 -0
  35. data/spec/support/files/project/version/one.json +1 -0
  36. data/spec/support/files/project/version/two.json +3 -0
  37. data/spec/support/files/two.json +24 -0
  38. metadata +49 -20
  39. data/lib/json_spec/version.rb +0 -3
data/.travis.yml CHANGED
@@ -1,9 +1,7 @@
1
1
  rvm:
2
- - 1.8.7
3
2
  - 1.9.2
4
3
  - 1.9.3
5
4
  - ruby-head
6
- only:
7
- - master
8
5
  notifications:
9
- disabled: true
6
+ email:
7
+ - steve.richert@gmail.com
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
- source "http://rubygems.org"
1
+ source "https://rubygems.org"
2
2
 
3
3
  gemspec
File without changes
data/README.md CHANGED
@@ -1,24 +1,11 @@
1
1
  json_spec [![Build Status](https://secure.travis-ci.org/collectiveidea/json_spec.png)](http://travis-ci.org/collectiveidea/json_spec) [![Dependency Status](https://gemnasium.com/collectiveidea/json_spec.png)](https://gemnasium.com/collectiveidea/json_spec)
2
- ========
2
+ =========
3
3
 
4
4
  Easily handle JSON in RSpec and Cucumber
5
5
 
6
- Installation
7
- ------------
8
- gem install json_spec
9
-
10
- or with Bundler:
11
-
12
- gem "json_spec"
13
-
14
- Documentation
15
- -------------
16
- Please help write documentation!
17
-
18
- [http://rdoc.info/gems/json_spec](http://rdoc.info/gems/json_spec)
19
-
20
6
  RSpec
21
7
  --------------
8
+
22
9
  json_spec defines five new RSpec matchers:
23
10
 
24
11
  * `be_json_eql`
@@ -29,43 +16,50 @@ json_spec defines five new RSpec matchers:
29
16
 
30
17
  The new matchers could be used in RSpec as follows:
31
18
 
32
- describe User do
33
- let(:user){ User.create!(:first_name => "Steve", :last_name => "Richert") }
19
+ ```ruby
20
+ describe User do
21
+ let(:user){ User.create!(first_name: "Steve", last_name: "Richert") }
22
+
23
+ context "#to_json" do
24
+ it "includes names" do
25
+ names = %({"first_name":"Steve","last_name":"Richert"})
26
+ user.to_json.should be_json_eql(names).excluding("friends")
27
+ end
34
28
 
35
- context "#to_json" do
36
- let(:json){ user.to_json }
29
+ it "includes the ID" do
30
+ user.to_json.should have_json_path("id")
31
+ user.to_json.should have_json_type(Integer).at_path("id")
32
+ end
37
33
 
38
- it "includes the name" do
39
- json.should be_json_eql(%({"first_name":"Steve","last_name":"Richert"})).excluding("friends")
40
- end
34
+ it "includes friends" do
35
+ user.to_json.should have_json_size(0).at_path("friends")
41
36
 
42
- it "includes the ID" do
43
- json.should have_json_path("id")
44
- json.should have_json_type(Integer).at_path("id")
45
- end
37
+ friend = User.create!(first_name: "Catie", last_name: "Richert")
38
+ user.friends << friend
46
39
 
47
- it "includes friends" do
48
- json.should have_json_size(0).at_path("friends")
49
- user.friends << User.create!(:first_name => "Catie", :last_name => "Richert")
50
- json.should have_json_size(1).at_path("friends")
51
- json.should include_json(%({"first_name":"Catie","last_name":"Richert"}))
52
- end
53
- end
40
+ user.to_json.should have_json_size(1).at_path("friends")
41
+ user.to_json.should include_json(friend.to_json)
54
42
  end
43
+ end
44
+ end
45
+ ```
55
46
 
56
- Also json_spec provides some useful helpers for RSpec tests:
47
+ json_spec also provides some useful helpers for RSpec tests:
57
48
 
58
49
  * `parse_json`
59
50
  * `normalize_json`
60
51
  * `generate_normalized_json`
52
+ * `load_json`
61
53
 
62
- To start using them add include statement in your Rspec.configure at spec_helper.rb file:
54
+ To start using them add an include them in your RSpec configuration:
63
55
 
64
- RSpec.configure do |config|
65
- config.include JsonSpec::Helpers
66
- end
56
+ ```ruby
57
+ RSpec.configure do |config|
58
+ config.include JsonSpec::Helpers
59
+ end
60
+ ```
67
61
 
68
- Examples of usage this methods you can find in spec/json_spec/helpers_spec.rb
62
+ You can find usage examples for the helpers in [`spec/json_spec/helpers_spec.rb`](https://github.com/collectiveidea/json_spec/blob/master/spec/json_spec/helpers_spec.rb)
69
63
 
70
64
  ### Exclusions
71
65
 
@@ -79,13 +73,15 @@ It's oftentimes helpful when evaluating JSON representations of newly-created Ac
79
73
  so that the new ID and timestamps don't have to be known. These exclusions are globally
80
74
  customizeable:
81
75
 
82
- JsonSpec.configure do
83
- exclude_keys "created_at", "updated_at"
84
- end
76
+ ```ruby
77
+ JsonSpec.configure do
78
+ exclude_keys "created_at", "updated_at"
79
+ end
80
+ ```
85
81
 
86
82
  Now, the `id` key will be included in json_spec's comparisons. Keys can also be excluded/included
87
- per matcher by chaining the `excluding` or `including` methods (as shown above) which will add or subtract from
88
- the globally excluded keys, respectively.
83
+ per matcher by chaining the `excluding` or `including` methods (as shown above) which will add or
84
+ subtract from the globally excluded keys, respectively.
89
85
 
90
86
  ### Paths
91
87
 
@@ -107,151 +103,168 @@ We could access the first friend's first name with the path `"friends/0/first_na
107
103
 
108
104
  Cucumber
109
105
  --------
106
+
110
107
  json_spec provides Cucumber steps that utilize its RSpec matchers and that's where json_spec really
111
108
  shines. This is perfect for testing your app's JSON API.
112
109
 
113
110
  In order to use the Cucumber steps, in your `env.rb` you must:
114
111
 
115
- require "json_spec/cucumber"
112
+ ```ruby
113
+ require "json_spec/cucumber"
114
+ ```
116
115
 
117
116
  You also need to define a `last_json` method. If you're using Capybara, it could be as simple as:
118
117
 
119
- def last_json
120
- page.source
121
- end
118
+ ```ruby
119
+ def last_json
120
+ page.source
121
+ end
122
+ ```
122
123
 
123
124
  Now, you can use the json_spec steps in your features:
124
125
 
125
- Feature: User API
126
- Background:
127
- Given the following users exist:
128
- | id | first_name | last_name |
129
- | 1 | Steve | Richert |
130
- | 2 | Catie | Richert |
131
- And "Steve Richert" is friends with "Catie Richert"
132
-
133
- Scenario: Index action
134
- When I visit "/users.json"
135
- Then the JSON response should have 2 users
136
- And the JSON response at "0/id" should be 1
137
- And the JSON response at "1/id" should be 2
138
-
139
- Scenario: Show action
140
- When I visit "/users/1.json"
141
- Then the JSON response at "first_name" should be "Steve"
142
- And the JSON response at "last_name" should be "Richert"
143
- And the JSON response should have "created_at"
144
- And the JSON response at "created_at" should be a string
145
- And the JSON response at "friends" should be:
146
- """
147
- [
148
- {
149
- "id": 2,
150
- "first_name": "Catie",
151
- "last_name": "Richert"
152
- }
153
- ]
154
- """
155
-
156
- The background steps above aren't provided by json_spec and the "visit" steps are provided by
157
- Capybara. The remaining steps, json_spec provides. They're versatile and can be used in plenty of
158
- different formats:
159
-
160
- Then the JSON should be:
161
- """
162
- {
163
- "key": "value"
164
- }
165
- """
166
- Then the JSON at "path" should be:
126
+ ```cucumber
127
+ Feature: User API
128
+ Background:
129
+ Given the following users exist:
130
+ | id | first_name | last_name |
131
+ | 1 | Steve | Richert |
132
+ | 2 | Catie | Richert |
133
+ And "Steve Richert" is friends with "Catie Richert"
134
+
135
+ Scenario: Index action
136
+ When I visit "/users.json"
137
+ Then the JSON response should have 2 users
138
+ And the JSON response at "0/id" should be 1
139
+ And the JSON response at "1/id" should be 2
140
+
141
+ Scenario: Show action
142
+ When I visit "/users/1.json"
143
+ Then the JSON response at "first_name" should be "Steve"
144
+ And the JSON response at "last_name" should be "Richert"
145
+ And the JSON response should have "created_at"
146
+ And the JSON response at "created_at" should be a string
147
+ And the JSON response at "friends" should be:
167
148
  """
168
149
  [
169
- "entry",
170
- "entry"
150
+ {
151
+ "id": 2,
152
+ "first_name": "Catie",
153
+ "last_name": "Richert"
154
+ }
171
155
  ]
172
156
  """
157
+ ```
173
158
 
174
- Then the JSON should be {"key":"value"}
175
- Then the JSON at "path" should be {"key":"value"}
176
- Then the JSON should be ["entry","entry"]
177
- Then the JSON at "path" should be ["entry","entry"]
178
- Then the JSON at "path" should be "string"
179
- Then the JSON at "path" should be 10
180
- Then the JSON at "path" should be 10.0
181
- Then the JSON at "path" should be 1e+1
182
- Then the JSON at "path" should be true
183
- Then the JSON at "path" should be false
184
- Then the JSON at "path" should be null
185
-
186
- Then the JSON should include:
187
- """
188
- {
189
- "key": "value"
190
- }
191
- """
192
- Then the JSON at "path" should include:
193
- """
194
- [
195
- "entry",
196
- "entry"
197
- ]
198
- """
159
+ The background steps above aren't provided by json_spec and the "visit" steps are provided by
160
+ Capybara. The remaining steps, json_spec provides. They're versatile and can be used in plenty of
161
+ different formats:
199
162
 
200
- Then the JSON should include {"key":"value"}
201
- Then the JSON at "path" should include {"key":"value"}
202
- Then the JSON should include ["entry","entry"]
203
- Then the JSON at "path" should include ["entry","entry"]
204
- Then the JSON should include "string"
205
- Then the JSON at "path" should include "string"
206
- Then the JSON should include 10
207
- Then the JSON at "path" should include 10
208
- Then the JSON should include 10.0
209
- Then the JSON at "path" should include 10.0
210
- Then the JSON should include 1e+1
211
- Then the JSON at "path" should include 1e+1
212
- Then the JSON should include true
213
- Then the JSON at "path" should include true
214
- Then the JSON should include false
215
- Then the JSON at "path" should include false
216
- Then the JSON should include null
217
- Then the JSON at "path" should include null
218
-
219
- Then the JSON should have "path"
220
-
221
- Then the JSON should be a hash
222
- Then the JSON at "path" should be an array
223
- Then the JSON at "path" should be a float
224
-
225
- Then the JSON should have 1 entry
226
- Then the JSON at "path" should have 2 entries
227
- Then the JSON should have 3 keys
228
- Then the JSON should have 4 whatevers
163
+ ```cucumber
164
+ Then the JSON should be:
165
+ """
166
+ {
167
+ "key": "value"
168
+ }
169
+ """
170
+ Then the JSON at "path" should be:
171
+ """
172
+ [
173
+ "entry",
174
+ "entry"
175
+ ]
176
+ """
177
+
178
+ Then the JSON should be {"key":"value"}
179
+ Then the JSON at "path" should be {"key":"value"}
180
+ Then the JSON should be ["entry","entry"]
181
+ Then the JSON at "path" should be ["entry","entry"]
182
+ Then the JSON at "path" should be "string"
183
+ Then the JSON at "path" should be 10
184
+ Then the JSON at "path" should be 10.0
185
+ Then the JSON at "path" should be 1e+1
186
+ Then the JSON at "path" should be true
187
+ Then the JSON at "path" should be false
188
+ Then the JSON at "path" should be null
189
+
190
+ Then the JSON should include:
191
+ """
192
+ {
193
+ "key": "value"
194
+ }
195
+ """
196
+ Then the JSON at "path" should include:
197
+ """
198
+ [
199
+ "entry",
200
+ "entry"
201
+ ]
202
+ """
203
+
204
+ Then the JSON should include {"key":"value"}
205
+ Then the JSON at "path" should include {"key":"value"}
206
+ Then the JSON should include ["entry","entry"]
207
+ Then the JSON at "path" should include ["entry","entry"]
208
+ Then the JSON should include "string"
209
+ Then the JSON at "path" should include "string"
210
+ Then the JSON should include 10
211
+ Then the JSON at "path" should include 10
212
+ Then the JSON should include 10.0
213
+ Then the JSON at "path" should include 10.0
214
+ Then the JSON should include 1e+1
215
+ Then the JSON at "path" should include 1e+1
216
+ Then the JSON should include true
217
+ Then the JSON at "path" should include true
218
+ Then the JSON should include false
219
+ Then the JSON at "path" should include false
220
+ Then the JSON should include null
221
+ Then the JSON at "path" should include null
222
+
223
+ Then the JSON should have "path"
224
+
225
+ Then the JSON should be a hash
226
+ Then the JSON at "path" should be an array
227
+ Then the JSON at "path" should be a float
228
+
229
+ Then the JSON should have 1 entry
230
+ Then the JSON at "path" should have 2 entries
231
+ Then the JSON should have 3 keys
232
+ Then the JSON should have 4 whatevers
233
+ ```
229
234
 
230
235
  _All instances of "should" above could be followed by "not" and all instances of "JSON" could be downcased and/or followed by "response."_
231
236
 
232
- ### Table format
237
+ ### Table Format
233
238
 
234
239
  Another step exists that uses Cucumber's table formatting and wraps two of the above steps:
235
240
 
236
- Then the JSON should have the following:
237
- | path/0 | {"key":"value"} |
238
- | path/1 | ["entry","entry"] |
241
+ ```cucumber
242
+ Then the JSON should have the following:
243
+ | path/0 | {"key":"value"} |
244
+ | path/1 | ["entry","entry"] |
245
+ ```
239
246
 
240
247
  Any number of rows can be given. The step above is equivalent to:
241
248
 
242
- Then the JSON at "path/0" should be {"key":"value"}
243
- And the JSON at "path/1" should be ["entry","entry"]
249
+ ```cucumber
250
+ Then the JSON at "path/0" should be {"key":"value"}
251
+ And the JSON at "path/1" should be ["entry","entry"]
252
+ ```
244
253
 
245
254
  If only one column is given:
246
255
 
247
- Then the JSON should have the following:
248
- | path/0 |
249
- | path/1 |
256
+ ```cucumber
257
+ Then the JSON should have the following:
258
+ | path/0 |
259
+ | path/1 |
260
+ ```
250
261
 
251
262
  This is equivalent to:
252
263
 
253
- Then the JSON should have "path/0"
254
- And the JSON should have "path/1"
264
+ ```cucumber
265
+ Then the JSON should have "path/0"
266
+ And the JSON should have "path/1"
267
+ ```
255
268
 
256
269
  ### JSON Memory
257
270
 
@@ -259,72 +272,70 @@ There's one more Cucumber step that json_spec provides which hasn't been used ab
259
272
  memorize JSON for reuse in later steps. You can "keep" all or a portion of the JSON by giving a
260
273
  name by which to remember it.
261
274
 
262
- Feature: User API
263
- Scenario: Index action includes full user JSON
264
- Given the following user exists:
265
- | id | first_name | last_name |
266
- | 1 | Steve | Richert |
267
- And I visit "/users/1.json"
268
- And I keep the JSON response as "USER_1"
269
- When I visit "/users.json"
270
- Then the JSON response should be:
271
- """
272
- [
273
- %{USER_1}
274
- ]
275
- """
275
+ ```cucumber
276
+ Feature: User API
277
+ Scenario: Index action includes full user JSON
278
+ Given the following user exists:
279
+ | id | first_name | last_name |
280
+ | 1 | Steve | Richert |
281
+ And I visit "/users/1.json"
282
+ And I keep the JSON response as "USER_1"
283
+ When I visit "/users.json"
284
+ Then the JSON response should be:
285
+ """
286
+ [
287
+ %{USER_1}
288
+ ]
289
+ """
290
+ ```
276
291
 
277
292
  You can memorize JSON at a path:
278
293
 
279
- Given I keep the JSON response at "first_name" as "FIRST_NAME"
294
+ ```cucumber
295
+ Given I keep the JSON response at "first_name" as "FIRST_NAME"
296
+ ```
280
297
 
281
298
  You can remember JSON at a path:
282
299
 
283
- Then the JSON response at "0/first_name" should be:
284
- """
285
- %{FIRST_NAME}
286
- """
300
+ ```cucumber
301
+ Then the JSON response at "0/first_name" should be:
302
+ """
303
+ %{FIRST_NAME}
304
+ """
305
+ ```
287
306
 
288
307
  You can also remember JSON inline:
289
308
 
290
- Then the JSON response at "0/first_name" should be %{FIRST_NAME}
309
+ ```cucumber
310
+ Then the JSON response at "0/first_name" should be %{FIRST_NAME}
311
+ ```
312
+
313
+ ### More
314
+
315
+ Check out the [specs](https://github.com/collectiveidea/json_spec/blob/master/spec)
316
+ and [features](https://github.com/collectiveidea/json_spec/blob/master/features) too see all the
317
+ various ways you can use json_spec.
291
318
 
292
319
  Contributing
293
320
  ------------
294
- In the spirit of [free software](http://www.fsf.org/licensing/essays/free-sw.html), **everyone** is encouraged to help improve this project.
295
-
296
- Here are some ways *you* can contribute:
297
-
298
- * using alpha, beta, and prerelease versions
299
- * reporting bugs
300
- * suggesting new features
301
- * writing or editing documentation
302
- * writing specifications
303
- * writing code (**no patch is too small**: fix typos, add comments, clean up inconsistent whitespace)
304
- * refactoring code
305
- * closing [issues](https://github.com/collectiveidea/json_spec/issues)
306
- * reviewing patches
307
-
308
- Submitting an Issue
309
- -------------------
310
- We use the [GitHub issue tracker](https://github.com/collectiveidea/json_spec/issues) to track bugs
311
- and features. Before submitting a bug report or feature request, check to make sure it hasn't already
312
- been submitted. You can indicate support for an existing issuse by voting it up. When submitting a
313
- bug report, please include a [Gist](https://gist.github.com/) that includes a stack trace and any
314
- details that may be necessary to reproduce the bug, including your gem version, Ruby version, and
315
- operating system. Ideally, a bug report should include a pull request with failing specs.
316
-
317
- Submitting a Pull Request
318
- -------------------------
319
- 1. Fork the project.
320
- 2. Create a topic branch.
321
- 3. Implement your feature or bug fix.
322
- 4. Add specs for your feature or bug fix.
323
- 5. Run `bundle exec rake`. If your changes are not 100% covered and passing, go back to step 4.
324
- 6. Commit and push your changes.
325
- 7. Submit a pull request. Please do not include changes to the gemspec, version, or history file. (If you want to create your own version for some reason, please do so in a separate commit.)
321
+
322
+ If you come across any issues, please [tell us](https://github.com/collectiveidea/json_spec/issues).
323
+ Pull requests (with tests) are appreciated. No pull request is too small. Please help with:
324
+
325
+ * Reporting bugs
326
+ * Suggesting features
327
+ * Writing or improving documentation
328
+ * Fixing typos
329
+ * Cleaning whitespace
330
+ * Refactoring code
331
+ * Adding tests
332
+ * Closing [issues](https://github.com/collectiveidea/json_spec/issues)
333
+
334
+ If you report a bug and don't include a fix, please include a failing test.
326
335
 
327
336
  Copyright
328
337
  ---------
338
+
329
339
  Copyright © 2011 Steve Richert
330
- See [LICENSE](https://github.com/collectiveidea/json_spec/blob/master/LICENSE.md) for details.
340
+
341
+ See [LICENSE](https://github.com/collectiveidea/json_spec/blob/master/LICENSE) for details.
@@ -0,0 +1,89 @@
1
+ Feature: Files
2
+ Scenario: Equivalence from a file
3
+ Given the JSON is:
4
+ """
5
+ {
6
+ "array": [
7
+ "json",
8
+ "spec"
9
+ ],
10
+ "false": false,
11
+ "float": 10.0,
12
+ "hash": {
13
+ "json": "spec"
14
+ },
15
+ "created_at": "2011-07-08 02:27:34",
16
+ "empty_array": [
17
+
18
+ ],
19
+ "empty_hash": {
20
+ },
21
+ "id": 1,
22
+ "integer": 10,
23
+ "negative": -10,
24
+ "null": null,
25
+ "string": "json_spec",
26
+ "true": true,
27
+ "updated_at": "2011-07-08 02:28:50"
28
+ }
29
+ """
30
+ When I get the JSON
31
+ Then the JSON should be file "two.json"
32
+
33
+ Scenario: Inequivalence from a file
34
+ Given the JSON is:
35
+ """
36
+ {
37
+ "string": "json_spec",
38
+ "true": true,
39
+ "updated_at": "2011-07-08 02:28:50"
40
+ }
41
+ """
42
+ When I get the JSON
43
+ Then the JSON should not be file "two.json"
44
+
45
+
46
+ Scenario: Inclusion from a file
47
+ Given the JSON is:
48
+ """
49
+ {
50
+ "array": [
51
+ "json",
52
+ "spec"
53
+ ],
54
+ "created_at": "2011-07-08 02:27:34",
55
+ "empty_array": [
56
+
57
+ ],
58
+ "empty_hash": {
59
+ },
60
+ "false": false,
61
+ "float": 10.0,
62
+ "hash": {
63
+ "json": "spec"
64
+ }
65
+ }
66
+ """
67
+ When I get the JSON
68
+ Then the JSON should include file "project/version/two.json"
69
+
70
+ Scenario: Exclusion from a file
71
+ Given the JSON is:
72
+ """
73
+ {
74
+ "array": [
75
+ "json",
76
+ "spec"
77
+ ],
78
+ "created_at": "2011-07-08 02:27:34",
79
+ "empty_array": [
80
+
81
+ ],
82
+ "empty_hash": {
83
+ },
84
+ "false": false,
85
+ "float": 10.0
86
+ }
87
+ """
88
+ When I get the JSON
89
+ Then the JSON should not include file "project/version/two.json"
@@ -1,6 +1,9 @@
1
1
  $: << File.expand_path("../../../lib", __FILE__)
2
+
2
3
  require "json_spec/cucumber"
3
4
 
5
+ JsonSpec.directory = File.expand_path("../../../spec/support/files", __FILE__)
6
+
4
7
  def last_json
5
8
  @last_json.to_s
6
9
  end
@@ -4,15 +4,21 @@ Feature: Types
4
4
  """
5
5
  {
6
6
  "array": [],
7
+ "false": true,
7
8
  "float": 10.0,
8
9
  "hash": {},
9
10
  "integer": 10,
10
- "string": "json_spec"
11
+ "string": "json_spec",
12
+ "true": true
11
13
  }
12
14
  """
13
15
  When I get the JSON
14
16
  Then the JSON should be a hash
15
17
  And the JSON at "array" should be an array
18
+ And the JSON at "false" should be a boolean
16
19
  And the JSON at "float" should be a float
17
20
  And the JSON at "hash" should be a hash
21
+ And the JSON at "hash" should be an object
18
22
  And the JSON at "integer" should be an integer
23
+ And the JSON at "string" should be a string
24
+ And the JSON at "true" should be a boolean