json_spec 1.1.1 → 1.1.2
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 +6 -14
- data/.gitignore +1 -3
- data/.travis.yml +12 -3
- data/Gemfile +1 -2
- data/{LICENSE → LICENSE.txt} +0 -0
- data/README.md +10 -10
- data/Rakefile +7 -6
- data/gemfiles/rspec2.gemfile +9 -0
- data/gemfiles/rspec3.gemfile +9 -0
- data/json_spec.gemspec +5 -5
- data/lib/json_spec/configuration.rb +1 -1
- data/lib/json_spec/matchers/be_json_eql.rb +4 -2
- data/lib/json_spec/matchers/have_json_path.rb +4 -2
- data/lib/json_spec/matchers/have_json_size.rb +4 -2
- data/lib/json_spec/matchers/have_json_type.rb +6 -4
- data/lib/json_spec/matchers/include_json.rb +6 -4
- data/spec/json_spec/configuration_spec.rb +2 -2
- data/spec/json_spec/matchers/be_json_eql_spec.rb +2 -2
- data/spec/json_spec/matchers/have_json_size_spec.rb +6 -4
- data/spec/json_spec/matchers/have_json_type_spec.rb +6 -4
- data/spec/json_spec/memory_spec.rb +2 -2
- data/spec/spec_helper.rb +7 -0
- metadata +36 -14
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
YzA1MDUwZDlmM2Y4MjMzMDMyOGU4OTE2Yjk2Mzk1NjA2NGM5MzYwNmE1ZWE1
|
10
|
-
N2U4ZTNkZmVjZGZlZGVmNDYxYTczMDQ1NjdmMTZmODI1NjllMTc5ZjY1YjEx
|
11
|
-
MTZhNjA5YTU3MzdmN2NmNWNiMzA4ZTQxYjgwMmQwOGNlOTg3ZGM=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
Y2U3OWY4OTYyNjNiMjU5MTZmNzBlMDNhZTU0ZGE0NGVmMGRhNWEwYWNiMzdj
|
14
|
-
YTk2MTVlM2JkNjcxOTliMmVmY2VjNDU1NjcwYmRiNmVhYTQ4YjhmYjY2MDk0
|
15
|
-
NTA1MzY1Yzk3ZTFmMGFkZTliOWFlN2RiMTcwMGI5NTk5ZTdmNjA=
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: cb0b1f7ab27245791f7d65778506309a14a43645
|
4
|
+
data.tar.gz: 3aa7d4931332e3ffe04d7d44da3d8256b7fa613f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ed9cb913d6d387841c2f7a725b4aaf192cf3a4aa72dad6e052f155574cdb563232ecb8f1d780d1a2636a324c6c8ea42cb7e9f4a15f0ffeb601ed294a6c19da7a
|
7
|
+
data.tar.gz: 3fba85ecb36f7d03cb4f04a661622f43b51764ec04ae9f3b6312c8f67bd54084cbbb9f6563c0121f1eb30a4ed85fedcf70d52140b64d6015498ee06b7c0bda84
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,6 +1,15 @@
|
|
1
|
+
branches:
|
2
|
+
only:
|
3
|
+
- master
|
4
|
+
gemfile:
|
5
|
+
- gemfiles/rspec2.gemfile
|
6
|
+
- gemfiles/rspec3.gemfile
|
1
7
|
language: ruby
|
2
|
-
|
8
|
+
matrix:
|
9
|
+
allow_failures:
|
10
|
+
- rvm: ruby-head
|
3
11
|
rvm:
|
4
|
-
- 1.9.2
|
5
12
|
- 1.9.3
|
6
|
-
- 2.0
|
13
|
+
- "2.0"
|
14
|
+
- "2.1"
|
15
|
+
- ruby-head
|
data/Gemfile
CHANGED
data/{LICENSE → LICENSE.txt}
RENAMED
File without changes
|
data/README.md
CHANGED
@@ -1,10 +1,13 @@
|
|
1
|
-
|
2
|
-
=========
|
1
|
+
# json_spec
|
3
2
|
|
4
3
|
Easily handle JSON in RSpec and Cucumber
|
5
4
|
|
6
|
-
|
7
|
-
|
5
|
+
[](http://rubygems.org/gems/json_spec)
|
6
|
+
[](https://travis-ci.org/collectiveidea/json_spec)
|
7
|
+
[](https://codeclimate.com/github/collectiveidea/json_spec)
|
8
|
+
[](https://gemnasium.com/collectiveidea/json_spec)
|
9
|
+
|
10
|
+
## RSpec
|
8
11
|
|
9
12
|
json_spec defines five new RSpec matchers:
|
10
13
|
|
@@ -101,8 +104,7 @@ hash keys and array indexes. For instance, with the following JSON:
|
|
101
104
|
|
102
105
|
We could access the first friend's first name with the path `"friends/0/first_name"`.
|
103
106
|
|
104
|
-
Cucumber
|
105
|
-
--------
|
107
|
+
## Cucumber
|
106
108
|
|
107
109
|
json_spec provides Cucumber steps that utilize its RSpec matchers and that's where json_spec really
|
108
110
|
shines. This is perfect for testing your app's JSON API.
|
@@ -316,8 +318,7 @@ Check out the [specs](https://github.com/collectiveidea/json_spec/blob/master/sp
|
|
316
318
|
and [features](https://github.com/collectiveidea/json_spec/blob/master/features) to see all the
|
317
319
|
various ways you can use json_spec.
|
318
320
|
|
319
|
-
Contributing
|
320
|
-
------------
|
321
|
+
## Contributing
|
321
322
|
|
322
323
|
If you come across any issues, please [tell us](https://github.com/collectiveidea/json_spec/issues).
|
323
324
|
Pull requests (with tests) are appreciated. No pull request is too small. Please help with:
|
@@ -333,8 +334,7 @@ Pull requests (with tests) are appreciated. No pull request is too small. Please
|
|
333
334
|
|
334
335
|
If you report a bug and don't include a fix, please include a failing test.
|
335
336
|
|
336
|
-
Copyright
|
337
|
-
---------
|
337
|
+
## Copyright
|
338
338
|
|
339
339
|
Copyright © 2011 Steve Richert
|
340
340
|
|
data/Rakefile
CHANGED
@@ -3,13 +3,14 @@ require "rspec/core/rake_task"
|
|
3
3
|
require "cucumber/rake/task"
|
4
4
|
|
5
5
|
RSpec::Core::RakeTask.new(:spec)
|
6
|
-
|
7
|
-
|
6
|
+
|
7
|
+
Cucumber::Rake::Task.new(:cucumber) do |task|
|
8
|
+
task.cucumber_opts = "--tags ~@fail"
|
8
9
|
end
|
9
10
|
|
10
|
-
Cucumber::Rake::Task.new(:negative_cucumber) do |
|
11
|
-
|
11
|
+
Cucumber::Rake::Task.new(:negative_cucumber) do |task|
|
12
|
+
task.cucumber_opts = "--tags @fail --wip"
|
12
13
|
end
|
13
14
|
|
14
|
-
task :
|
15
|
-
task :
|
15
|
+
task test: [:spec, :cucumber, :negative_cucumber]
|
16
|
+
task default: :test
|
data/json_spec.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |gem|
|
4
4
|
gem.name = "json_spec"
|
5
|
-
gem.version = "1.1.
|
5
|
+
gem.version = "1.1.2"
|
6
6
|
|
7
7
|
gem.authors = ["Steve Richert"]
|
8
8
|
gem.email = ["steve.richert@gmail.com"]
|
@@ -12,11 +12,11 @@ Gem::Specification.new do |gem|
|
|
12
12
|
gem.license = "MIT"
|
13
13
|
|
14
14
|
gem.add_dependency "multi_json", "~> 1.0"
|
15
|
-
gem.add_dependency "rspec", "
|
15
|
+
gem.add_dependency "rspec", ">= 2.0", "< 4.0"
|
16
16
|
|
17
17
|
gem.add_development_dependency "bundler", "~> 1.0"
|
18
|
+
gem.add_development_dependency "rake", "~> 10.0"
|
18
19
|
|
19
|
-
gem.files
|
20
|
-
gem.test_files
|
21
|
-
gem.require_paths = ["lib"]
|
20
|
+
gem.files = `git ls-files`.split($\)
|
21
|
+
gem.test_files = gem.files.grep(/^(features|spec)/)
|
22
22
|
end
|
@@ -42,13 +42,15 @@ module JsonSpec
|
|
42
42
|
self
|
43
43
|
end
|
44
44
|
|
45
|
-
def
|
45
|
+
def failure_message
|
46
46
|
message_with_path("Expected equivalent JSON")
|
47
47
|
end
|
48
|
+
alias :failure_message_for_should :failure_message
|
48
49
|
|
49
|
-
def
|
50
|
+
def failure_message_when_negated
|
50
51
|
message_with_path("Expected inequivalent JSON")
|
51
52
|
end
|
53
|
+
alias :failure_message_for_should_not :failure_message_when_negated
|
52
54
|
|
53
55
|
def description
|
54
56
|
message_with_path("equal JSON")
|
@@ -14,13 +14,15 @@ module JsonSpec
|
|
14
14
|
false
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
17
|
+
def failure_message
|
18
18
|
%(Expected JSON path "#{@path}")
|
19
19
|
end
|
20
|
+
alias :failure_message_for_should :failure_message
|
20
21
|
|
21
|
-
def
|
22
|
+
def failure_message_when_negated
|
22
23
|
%(Expected no JSON path "#{@path}")
|
23
24
|
end
|
25
|
+
alias :failure_message_for_should_not :failure_message_when_negated
|
24
26
|
|
25
27
|
def description
|
26
28
|
%(have JSON path "#{@path}")
|
@@ -19,13 +19,15 @@ module JsonSpec
|
|
19
19
|
self
|
20
20
|
end
|
21
21
|
|
22
|
-
def
|
22
|
+
def failure_message
|
23
23
|
message_with_path("Expected JSON value size to be #{@expected}, got #{@actual}")
|
24
24
|
end
|
25
|
+
alias :failure_message_for_should :failure_message
|
25
26
|
|
26
|
-
def
|
27
|
+
def failure_message_when_negated
|
27
28
|
message_with_path("Expected JSON value size to not be #{@expected}, got #{@actual}")
|
28
29
|
end
|
30
|
+
alias :failure_message_for_should_not :failure_message_when_negated
|
29
31
|
|
30
32
|
def description
|
31
33
|
message_with_path(%(have JSON size "#{@expected}"))
|
@@ -10,7 +10,7 @@ module JsonSpec
|
|
10
10
|
|
11
11
|
def matches?(json)
|
12
12
|
@ruby = parse_json(json, @path)
|
13
|
-
@classes.any?{|c| c === @ruby }
|
13
|
+
@classes.any? { |c| c === @ruby }
|
14
14
|
end
|
15
15
|
|
16
16
|
def at_path(path)
|
@@ -18,13 +18,15 @@ module JsonSpec
|
|
18
18
|
self
|
19
19
|
end
|
20
20
|
|
21
|
-
def
|
21
|
+
def failure_message
|
22
22
|
message_with_path("Expected JSON value type to be #{@classes.join(", ")}, got #{@ruby.class}")
|
23
23
|
end
|
24
|
+
alias :failure_message_for_should :failure_message
|
24
25
|
|
25
|
-
def
|
26
|
+
def failure_message_when_negated
|
26
27
|
message_with_path("Expected JSON value type to not be #{@classes.join(", ")}, got #{@ruby.class}")
|
27
28
|
end
|
29
|
+
alias :failure_message_for_should_not :failure_message_when_negated
|
28
30
|
|
29
31
|
def description
|
30
32
|
message_with_path(%(have JSON type "#{@classes.join(", ")}"))
|
@@ -34,7 +36,7 @@ module JsonSpec
|
|
34
36
|
def type_to_classes(type)
|
35
37
|
case type
|
36
38
|
when Class then [type]
|
37
|
-
when Array then type.map{|t| type_to_classes(t) }.flatten
|
39
|
+
when Array then type.map { |t| type_to_classes(t) }.flatten
|
38
40
|
else
|
39
41
|
case type.to_s.downcase
|
40
42
|
when "boolean" then [TrueClass, FalseClass]
|
@@ -15,8 +15,8 @@ module JsonSpec
|
|
15
15
|
actual = parse_json(actual_json, @path)
|
16
16
|
expected = exclude_keys(parse_json(@expected_json))
|
17
17
|
case actual
|
18
|
-
when Hash then actual.values.map{|v| exclude_keys(v) }.include?(expected)
|
19
|
-
when Array then actual.map{|e| exclude_keys(e) }.include?(expected)
|
18
|
+
when Hash then actual.values.map { |v| exclude_keys(v) }.include?(expected)
|
19
|
+
when Array then actual.map { |e| exclude_keys(e) }.include?(expected)
|
20
20
|
when String then actual.include?(expected)
|
21
21
|
else false
|
22
22
|
end
|
@@ -42,13 +42,15 @@ module JsonSpec
|
|
42
42
|
self
|
43
43
|
end
|
44
44
|
|
45
|
-
def
|
45
|
+
def failure_message
|
46
46
|
message_with_path("Expected included JSON")
|
47
47
|
end
|
48
|
+
alias :failure_message_for_should :failure_message
|
48
49
|
|
49
|
-
def
|
50
|
+
def failure_message_when_negated
|
50
51
|
message_with_path("Expected excluded JSON")
|
51
52
|
end
|
53
|
+
alias :failure_message_for_should_not :failure_message_when_negated
|
52
54
|
|
53
55
|
def description
|
54
56
|
message_with_path("include JSON")
|
@@ -16,12 +16,12 @@ describe JsonSpec::Configuration do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
it "excludes custom keys via block" do
|
19
|
-
JsonSpec.configure{|c| c.exclude_keys("token") }
|
19
|
+
JsonSpec.configure { |c| c.exclude_keys("token") }
|
20
20
|
JsonSpec.excluded_keys.should == ["token"]
|
21
21
|
end
|
22
22
|
|
23
23
|
it "excludes custom keys via block setter" do
|
24
|
-
JsonSpec.configure{|c| c.excluded_keys = ["token"] }
|
24
|
+
JsonSpec.configure { |c| c.excluded_keys = ["token"] }
|
25
25
|
JsonSpec.excluded_keys.should == ["token"]
|
26
26
|
end
|
27
27
|
|
@@ -28,8 +28,8 @@ describe JsonSpec::Matchers::BeJsonEql do
|
|
28
28
|
it "ignores excluded-by-default hash keys" do
|
29
29
|
JsonSpec.excluded_keys.should_not be_empty
|
30
30
|
|
31
|
-
actual = expected = {"json" => "spec"}
|
32
|
-
JsonSpec.excluded_keys.each{|k| actual[k] = k }
|
31
|
+
actual = expected = { "json" => "spec" }
|
32
|
+
JsonSpec.excluded_keys.each { |k| actual[k] = k }
|
33
33
|
actual.to_json.should be_json_eql(expected.to_json)
|
34
34
|
end
|
35
35
|
|
@@ -21,16 +21,18 @@ describe JsonSpec::Matchers::HaveJsonSize do
|
|
21
21
|
%({"one":[1,2,3]}).should have_json_size(3).at_path("one")
|
22
22
|
end
|
23
23
|
|
24
|
-
it "provides a failure message
|
24
|
+
it "provides a failure message" do
|
25
25
|
matcher = have_json_size(3)
|
26
26
|
matcher.matches?(%([1,2]))
|
27
|
-
matcher.
|
27
|
+
matcher.failure_message.should == "Expected JSON value size to be 3, got 2"
|
28
|
+
matcher.failure_message_for_should.should == "Expected JSON value size to be 3, got 2" # RSpec 2 interface
|
28
29
|
end
|
29
30
|
|
30
|
-
it "provides a failure message for
|
31
|
+
it "provides a failure message for negation" do
|
31
32
|
matcher = have_json_size(3)
|
32
33
|
matcher.matches?(%([1,2,3]))
|
33
|
-
matcher.
|
34
|
+
matcher.failure_message_when_negated.should == "Expected JSON value size to not be 3, got 3"
|
35
|
+
matcher.failure_message_for_should_not.should == "Expected JSON value size to not be 3, got 3" # RSpec 2 interface
|
34
36
|
end
|
35
37
|
|
36
38
|
it "provides a description message" do
|
@@ -46,16 +46,18 @@ describe JsonSpec::Matchers::HaveJsonType do
|
|
46
46
|
%(10.0).should have_json_type(Numeric)
|
47
47
|
end
|
48
48
|
|
49
|
-
it "provides a failure message
|
49
|
+
it "provides a failure message" do
|
50
50
|
matcher = have_json_type(Numeric)
|
51
51
|
matcher.matches?(%("foo"))
|
52
|
-
matcher.
|
52
|
+
matcher.failure_message.should == "Expected JSON value type to be Numeric, got String"
|
53
|
+
matcher.failure_message_for_should.should == "Expected JSON value type to be Numeric, got String" # RSpec 2 interface
|
53
54
|
end
|
54
55
|
|
55
|
-
it "provides a failure message for
|
56
|
+
it "provides a failure message for negation" do
|
56
57
|
matcher = have_json_type(Numeric)
|
57
58
|
matcher.matches?(%(10))
|
58
|
-
matcher.
|
59
|
+
matcher.failure_message_when_negated.should == "Expected JSON value type to not be Numeric, got Fixnum"
|
60
|
+
matcher.failure_message_for_should_not.should == "Expected JSON value type to not be Numeric, got Fixnum" # RSpec 2 interface
|
59
61
|
end
|
60
62
|
|
61
63
|
it "provides a description message" do
|
@@ -7,12 +7,12 @@ describe JsonSpec::Memory do
|
|
7
7
|
|
8
8
|
it "memorizes strings" do
|
9
9
|
JsonSpec.memorize(:key, "value")
|
10
|
-
JsonSpec.memory.should == {:
|
10
|
+
JsonSpec.memory.should == { key: "value" }
|
11
11
|
end
|
12
12
|
|
13
13
|
it "symbolizes keys" do
|
14
14
|
JsonSpec.memorize("key", "value")
|
15
|
-
JsonSpec.memory.should == {:
|
15
|
+
JsonSpec.memory.should == { key: "value" }
|
16
16
|
end
|
17
17
|
|
18
18
|
it "regurgitates unremembered strings" do
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,57 +1,77 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json_spec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steve Richert
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-06-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multi_json
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '2.0'
|
34
|
+
- - "<"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '4.0'
|
34
37
|
type: :runtime
|
35
38
|
prerelease: false
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
37
40
|
requirements:
|
38
|
-
- -
|
41
|
+
- - ">="
|
39
42
|
- !ruby/object:Gem::Version
|
40
43
|
version: '2.0'
|
44
|
+
- - "<"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '4.0'
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
48
|
name: bundler
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
44
50
|
requirements:
|
45
|
-
- - ~>
|
51
|
+
- - "~>"
|
46
52
|
- !ruby/object:Gem::Version
|
47
53
|
version: '1.0'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
51
57
|
requirements:
|
52
|
-
- - ~>
|
58
|
+
- - "~>"
|
53
59
|
- !ruby/object:Gem::Version
|
54
60
|
version: '1.0'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: rake
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '10.0'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '10.0'
|
55
75
|
description: RSpec matchers and Cucumber steps for testing JSON content
|
56
76
|
email:
|
57
77
|
- steve.richert@gmail.com
|
@@ -59,10 +79,10 @@ executables: []
|
|
59
79
|
extensions: []
|
60
80
|
extra_rdoc_files: []
|
61
81
|
files:
|
62
|
-
- .gitignore
|
63
|
-
- .travis.yml
|
82
|
+
- ".gitignore"
|
83
|
+
- ".travis.yml"
|
64
84
|
- Gemfile
|
65
|
-
- LICENSE
|
85
|
+
- LICENSE.txt
|
66
86
|
- README.md
|
67
87
|
- Rakefile
|
68
88
|
- features/equivalence.feature
|
@@ -74,6 +94,8 @@ files:
|
|
74
94
|
- features/step_definitions/steps.rb
|
75
95
|
- features/support/env.rb
|
76
96
|
- features/types.feature
|
97
|
+
- gemfiles/rspec2.gemfile
|
98
|
+
- gemfiles/rspec3.gemfile
|
77
99
|
- json_spec.gemspec
|
78
100
|
- lib/json_spec.rb
|
79
101
|
- lib/json_spec/configuration.rb
|
@@ -115,17 +137,17 @@ require_paths:
|
|
115
137
|
- lib
|
116
138
|
required_ruby_version: !ruby/object:Gem::Requirement
|
117
139
|
requirements:
|
118
|
-
- -
|
140
|
+
- - ">="
|
119
141
|
- !ruby/object:Gem::Version
|
120
142
|
version: '0'
|
121
143
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
144
|
requirements:
|
123
|
-
- -
|
145
|
+
- - ">="
|
124
146
|
- !ruby/object:Gem::Version
|
125
147
|
version: '0'
|
126
148
|
requirements: []
|
127
149
|
rubyforge_project:
|
128
|
-
rubygems_version: 2.
|
150
|
+
rubygems_version: 2.2.2
|
129
151
|
signing_key:
|
130
152
|
specification_version: 4
|
131
153
|
summary: Easily handle JSON in RSpec and Cucumber
|