json_spec 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ rvm:
2
+ - 1.8.6
3
+ - 1.8.7
4
+ - 1.9.2
5
+ - ruby-head
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- JsonSpec
1
+ json_spec
2
2
  ========
3
3
  Easily handle JSON in RSpec and Cucumber
4
4
 
@@ -14,15 +14,15 @@ Documentation
14
14
  -------------
15
15
  Please help write documentation!
16
16
 
17
- [http://rdoc.info/github/collectiveidea/json_spec](http://rdoc.info/github/collectiveidea/json_spec)
17
+ [http://rdoc.info/gems/json_spec](http://rdoc.info/gems/json_spec)
18
18
 
19
19
  Continuous Integration
20
20
  ----------------------
21
- Coming soon…
21
+ [![Build Status](https://travis-ci.org/collectiveidea/json_spec.png)](http://travis-ci.org/collectiveidea/json_spec)
22
22
 
23
23
  RSpec
24
24
  --------------
25
- JsonSpec defines four new RSpec matchers:
25
+ json_spec defines four new RSpec matchers:
26
26
 
27
27
  * `be_json_eql`
28
28
  * `have_json_path`
@@ -56,7 +56,7 @@ The new matchers could be used in RSpec as follows:
56
56
 
57
57
  ### Exclusions
58
58
 
59
- JsonSpec ignores certain hash keys by default when comparing JSON:
59
+ json_spec ignores certain hash keys by default when comparing JSON:
60
60
 
61
61
  * `id`
62
62
  * `created_at`
@@ -70,13 +70,13 @@ customizeable:
70
70
  exclude_keys "created_at", "updated_at"
71
71
  end
72
72
 
73
- Now, the `id` key will be included in JsonSpec's comparisons. Keys can also be excluded/included
73
+ Now, the `id` key will be included in json_spec's comparisons. Keys can also be excluded/included
74
74
  per matcher by chaining the `excluding` or `including` methods (as shown above) which will add or subtract from
75
75
  the globally excluded keys, respectively.
76
76
 
77
77
  ### Paths
78
78
 
79
- Each of JsonSpec's matchers deal with JSON "paths." These are simple strings of "/" separated
79
+ Each of json_spec's matchers deal with JSON "paths." These are simple strings of "/" separated
80
80
  hash keys and array indexes. For instance, with the following JSON:
81
81
 
82
82
  {
@@ -94,7 +94,7 @@ We could access the first friend's first name with the path `"friends/0/first_na
94
94
 
95
95
  Cucumber
96
96
  --------
97
- JsonSpec provides Cucumber steps that utilize its RSpec matchers and that's where JsonSpec really
97
+ json_spec provides Cucumber steps that utilize its RSpec matchers and that's where json_spec really
98
98
  shines. This is perfect for testing your app's JSON API.
99
99
 
100
100
  In order to use the Cucumber steps, in your `env.rb` you must:
@@ -107,7 +107,7 @@ You also need to define a `last_json` method. If you're using Capybara, it could
107
107
  page.source
108
108
  end
109
109
 
110
- Now, you can use the JsonSpec steps in your features:
110
+ Now, you can use the json_spec steps in your features:
111
111
 
112
112
  Feature: User API
113
113
  Background:
@@ -140,8 +140,8 @@ Now, you can use the JsonSpec steps in your features:
140
140
  ]
141
141
  """
142
142
 
143
- The background steps above aren't provided by JsonSpec and the "visit" steps are provided by
144
- Capybara. The remaining steps all stem from the five steps that JsonSpec provides. They're
143
+ The background steps above aren't provided by json_spec and the "visit" steps are provided by
144
+ Capybara. The remaining steps all stem from the five steps that json_spec provides. They're
145
145
  versatile and can be used in plenty of different formats:
146
146
 
147
147
  Then the JSON should be:
@@ -181,7 +181,7 @@ versatile and can be used in plenty of different formats:
181
181
  Then the JSON should have 3 keys
182
182
  Then the JSON should have 4 whatevers
183
183
 
184
- _All instances of "JSON" above could also be downcased and/or followed by "response."_
184
+ _All instances of "should" above could be followed by "not" and all instances of "JSON" could be downcased and/or followed by "response."_
185
185
 
186
186
  Contributing
187
187
  ------------
@@ -214,7 +214,7 @@ Submitting a Pull Request
214
214
  2. Create a topic branch.
215
215
  3. Implement your feature or bug fix.
216
216
  4. Add specs for your feature or bug fix.
217
- 5. Run <tt>bundle exec rake</tt>. If your changes are not 100% covered and passing, go back to step 4.
217
+ 5. Run `bundle exec rake`. If your changes are not 100% covered and passing, go back to step 4.
218
218
  6. Commit and push your changes.
219
219
  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.)
220
220
 
@@ -21,5 +21,6 @@ Gem::Specification.new do |s|
21
21
  s.add_dependency "json", "~> 1.0"
22
22
  s.add_dependency "rspec", "~> 2.0"
23
23
 
24
+ s.add_development_dependency "rake", "~> 0.9"
24
25
  s.add_development_dependency "cucumber", "~> 1.0"
25
26
  end
@@ -2,23 +2,43 @@ require File.expand_path("../../json_spec", __FILE__)
2
2
 
3
3
  World(JsonSpec::Helpers)
4
4
 
5
- Then /^the (?:JSON|json)(?: response)?(?: at "(.*)")? should be:$/ do |path, json|
6
- last_json.should be_json_eql(json).at_path(path)
5
+ Then /^the (?:JSON|json)(?: response)?(?: at "(.*)")? should( not)? be:$/ do |path, negative, json|
6
+ if negative
7
+ last_json.should_not be_json_eql(json).at_path(path)
8
+ else
9
+ last_json.should be_json_eql(json).at_path(path)
10
+ end
7
11
  end
8
12
 
9
- Then /^the (?:JSON|json)(?: response)?(?: at "(.*)")? should be (".*"|\-?\d+(?:\.\d+)?(?:[eE][\+\-]?\d+)?|\[.*\]|\{.*\}|true|false|null)$/ do |path, value|
10
- last_json.should be_json_eql(value).at_path(path)
13
+ Then /^the (?:JSON|json)(?: response)?(?: at "(.*)")? should( not)? be (".*"|\-?\d+(?:\.\d+)?(?:[eE][\+\-]?\d+)?|\[.*\]|\{.*\}|true|false|null)$/ do |path, negative, value|
14
+ if negative
15
+ last_json.should_not be_json_eql(value).at_path(path)
16
+ else
17
+ last_json.should be_json_eql(value).at_path(path)
18
+ end
11
19
  end
12
20
 
13
- Then /^the (?:JSON|json)(?: response)? should have "(.*)"$/ do |path|
14
- last_json.should have_json_path(path)
21
+ Then /^the (?:JSON|json)(?: response)? should( not)? have "(.*)"$/ do |negative, path|
22
+ if negative
23
+ last_json.should_not have_json_path(path)
24
+ else
25
+ last_json.should have_json_path(path)
26
+ end
15
27
  end
16
28
 
17
- Then /^the (?:JSON|json)(?: response)?(?: at "(.*)")? should be an? (.*)$/ do |path, type|
29
+ Then /^the (?:JSON|json)(?: response)?(?: at "(.*)")? should( not)? be an? (.*)$/ do |path, negative, type|
18
30
  klass = Module.const_get(type.gsub(/^./){|x| x.upcase })
19
- last_json.should have_json_type(klass).at_path(path)
31
+ if negative
32
+ last_json.should_not have_json_type(klass).at_path(path)
33
+ else
34
+ last_json.should have_json_type(klass).at_path(path)
35
+ end
20
36
  end
21
37
 
22
- Then /^the (?:JSON|json)(?: response)?(?: at "(.*)")? should have (\d+)/ do |path, size|
23
- last_json.should have_json_size(size.to_i).at_path(path)
38
+ Then /^the (?:JSON|json)(?: response)?(?: at "(.*)")? should( not)? have (\d+)/ do |path, negative, size|
39
+ if negative
40
+ last_json.should_not have_json_size(size.to_i).at_path(path)
41
+ else
42
+ last_json.should have_json_size(size.to_i).at_path(path)
43
+ end
24
44
  end
@@ -9,8 +9,7 @@ module JsonSpec
9
9
  def pretty_json_value(ruby)
10
10
  case ruby
11
11
  when Hash, Array then JSON.pretty_generate(ruby)
12
- when NilClass then "null"
13
- else ruby.inspect
12
+ else ruby.to_json
14
13
  end
15
14
  end
16
15
 
@@ -29,6 +29,12 @@ RSpec::Matchers.define :be_json_eql do |expected_json|
29
29
  message
30
30
  end
31
31
 
32
+ failure_message_for_should_not do
33
+ message = "Expected inequivalent JSON"
34
+ message << %( at path "#{@path}") if @path
35
+ message
36
+ end
37
+
32
38
  def scrub(json, path = nil)
33
39
  ruby = path ? ruby_at_json_path(json, path) : parse_json_value(json)
34
40
  pretty_json_value(exclude_keys(ruby)).chomp + "\n"
@@ -71,6 +77,10 @@ RSpec::Matchers.define :have_json_path do |path|
71
77
  failure_message_for_should do
72
78
  %(Expected JSON path "#{path}")
73
79
  end
80
+
81
+ failure_message_for_should_not do
82
+ %(Expected no JSON path "#{path}")
83
+ end
74
84
  end
75
85
 
76
86
  RSpec::Matchers.define :have_json_type do |klass|
@@ -86,7 +96,13 @@ RSpec::Matchers.define :have_json_type do |klass|
86
96
  end
87
97
 
88
98
  failure_message_for_should do
89
- message = "Expected JSON value type of #{klass}"
99
+ message = "Expected JSON value type to be #{klass}"
100
+ message << %( at path "#{@path}") if @path
101
+ message
102
+ end
103
+
104
+ failure_message_for_should_not do
105
+ message = "Expected JSON value type to not be #{klass}"
90
106
  message << %( at path "#{@path}") if @path
91
107
  message
92
108
  end
@@ -106,7 +122,13 @@ RSpec::Matchers.define :have_json_size do |expected_size|
106
122
  end
107
123
 
108
124
  failure_message_for_should do
109
- message = "Expected JSON value size of #{expected_size}"
125
+ message = "Expected JSON value size to be #{expected_size}"
126
+ message << %( at path "#{@path}") if @path
127
+ message
128
+ end
129
+
130
+ failure_message_for_should_not do
131
+ message = "Expected JSON value size to not be #{expected_size}"
110
132
  message << %( at path "#{@path}") if @path
111
133
  message
112
134
  end
@@ -1,3 +1,3 @@
1
1
  module JsonSpec
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
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.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -14,7 +14,7 @@ default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: json
17
- requirement: &2153487840 !ruby/object:Gem::Requirement
17
+ requirement: &2155991800 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '1.0'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *2153487840
25
+ version_requirements: *2155991800
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rspec
28
- requirement: &2153487340 !ruby/object:Gem::Requirement
28
+ requirement: &2155991300 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,21 @@ dependencies:
33
33
  version: '2.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *2153487340
36
+ version_requirements: *2155991300
37
+ - !ruby/object:Gem::Dependency
38
+ name: rake
39
+ requirement: &2155990840 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ version: '0.9'
45
+ type: :development
46
+ prerelease: false
47
+ version_requirements: *2155990840
37
48
  - !ruby/object:Gem::Dependency
38
49
  name: cucumber
39
- requirement: &2153486880 !ruby/object:Gem::Requirement
50
+ requirement: &2155990380 !ruby/object:Gem::Requirement
40
51
  none: false
41
52
  requirements:
42
53
  - - ~>
@@ -44,7 +55,7 @@ dependencies:
44
55
  version: '1.0'
45
56
  type: :development
46
57
  prerelease: false
47
- version_requirements: *2153486880
58
+ version_requirements: *2155990380
48
59
  description: Easily handle JSON in RSpec and Cucumber
49
60
  email:
50
61
  - steve.richert@gmail.com
@@ -53,6 +64,7 @@ extensions: []
53
64
  extra_rdoc_files: []
54
65
  files:
55
66
  - .gitignore
67
+ - .travis.yml
56
68
  - Gemfile
57
69
  - LICENSE.md
58
70
  - README.md