better_receive 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -1
- data/better_receive.gemspec +1 -1
- data/lib/better_receive/base.rb +1 -11
- data/lib/better_receive/mock.rb +8 -15
- data/lib/better_receive/stub.rb +1 -7
- data/lib/better_receive/version.rb +1 -1
- data/spec/lib/better_receive/mock_spec.rb +109 -127
- data/spec/lib/better_receive/stub_spec.rb +39 -45
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7dba7386ed326d7d13c41a1b901255f356d9547c
|
4
|
+
data.tar.gz: 8d01d997bf38eadbb9945e3f79284d6689baf4d3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d2fc544f91d3a9ae0af34325406dfb7951c97b26bb406ec232e7b79a104bdc106050ca38d0c1ec770921cfe2f1e33e6b071188231d9cb13511250ecf4d27482
|
7
|
+
data.tar.gz: aa613a45884efc818abcefcbf5d44cd05663bd141f0c3eeeac3bb90b1a920f15ac11906190039923f2a82bd9e06e036c2d2d5888c95dc203b2ec605a8ae1db04
|
data/README.md
CHANGED
@@ -9,7 +9,6 @@ Test drive new functionality and prevent bugs by asserting objects respond to me
|
|
9
9
|
|
10
10
|
## Usage
|
11
11
|
|
12
|
-
|
13
12
|
```ruby
|
14
13
|
|
15
14
|
class Foo; end
|
@@ -30,6 +29,8 @@ Any of these situation will raise an error because instances of Foo do not respo
|
|
30
29
|
After the initial extra assertion, they continue to act like regular RSpec mocks/stubs.
|
31
30
|
|
32
31
|
|
32
|
+
If you are using a version of RSpec < 2.14, lock to BetterReceive version 0.5 or earlier.
|
33
|
+
|
33
34
|
## Contributing
|
34
35
|
|
35
36
|
1. Fork it
|
data/better_receive.gemspec
CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.require_paths = ["lib"]
|
16
16
|
gem.version = BetterReceive::BETTER_VERSION
|
17
17
|
|
18
|
-
gem.add_dependency("rspec", "~> 2.
|
18
|
+
gem.add_dependency("rspec", "~> 2.14")
|
19
19
|
gem.add_development_dependency("rake", ">= 0")
|
20
20
|
gem.add_development_dependency("pry", ">= 0")
|
21
21
|
end
|
data/lib/better_receive/base.rb
CHANGED
@@ -18,10 +18,6 @@ module BetterReceive
|
|
18
18
|
RSpec::Matchers::BuiltIn::RespondTo.new(selector)
|
19
19
|
end
|
20
20
|
|
21
|
-
def subject_mock_proxy
|
22
|
-
@mock_proxy ||= subject.send(:__mock_proxy)
|
23
|
-
end
|
24
|
-
|
25
21
|
def any_instance_better_expect(selector, options, &block)
|
26
22
|
any_instance_should_respond_to selector
|
27
23
|
any_instance_add_expectation selector, &block
|
@@ -40,21 +36,15 @@ module BetterReceive
|
|
40
36
|
end
|
41
37
|
|
42
38
|
def any_instance_add_expectation(selector, &block)
|
43
|
-
RSpec::Mocks::space.add(subject)
|
44
|
-
|
45
|
-
subject.instance_variable_set(:@expectation_set, true)
|
46
39
|
subject.send(:observe!, selector)
|
47
40
|
|
48
41
|
subject.message_chains.add(selector, expectation_chain(selector, &block))
|
49
42
|
end
|
50
43
|
|
51
44
|
def any_instance_add_negative_expectation(selector, &block)
|
52
|
-
RSpec::Mocks::space.add(subject)
|
53
|
-
|
54
|
-
subject.instance_variable_set(:@expectation_set, true)
|
55
45
|
subject.send(:observe!, selector)
|
56
46
|
|
57
|
-
subject.message_chains.add(selector,
|
47
|
+
subject.message_chains.add(selector, expectation_chain(selector, &block)).never
|
58
48
|
end
|
59
49
|
|
60
50
|
end
|
data/lib/better_receive/mock.rb
CHANGED
@@ -4,6 +4,7 @@ module BetterReceive
|
|
4
4
|
def assert_with(selector, options={}, &block)
|
5
5
|
selector = selector.to_sym
|
6
6
|
if subject_is_any_instance?
|
7
|
+
subject.instance_variable_set(:@expectation_set, true)
|
7
8
|
any_instance_better_expect(selector, options, &block)
|
8
9
|
else
|
9
10
|
subject.should respond_to selector
|
@@ -14,6 +15,7 @@ module BetterReceive
|
|
14
15
|
def assert_negative_with(selector, options={}, &block)
|
15
16
|
selector = selector.to_sym
|
16
17
|
if subject_is_any_instance?
|
18
|
+
subject.instance_variable_set(:@expectation_set, true)
|
17
19
|
any_instance_better_not_expect(selector, options, &block)
|
18
20
|
else
|
19
21
|
subject.should respond_to selector
|
@@ -24,6 +26,10 @@ module BetterReceive
|
|
24
26
|
|
25
27
|
private
|
26
28
|
|
29
|
+
def subject_mock_proxy
|
30
|
+
@mock_proxy ||= RSpec::Mocks.proxy_for(subject)
|
31
|
+
end
|
32
|
+
|
27
33
|
def mock_subject_method(selector, options, &block)
|
28
34
|
location = options[:expected_from] || caller(1)[2]
|
29
35
|
subject_mock_proxy.add_message_expectation(location, selector, options, &block)
|
@@ -31,24 +37,11 @@ module BetterReceive
|
|
31
37
|
|
32
38
|
def negative_mock_subject_method(selector, options, &block)
|
33
39
|
location = options[:expected_from] || caller(1)[2]
|
34
|
-
subject_mock_proxy.
|
40
|
+
subject_mock_proxy.add_message_expectation(location, selector, options, &block).never
|
35
41
|
end
|
36
42
|
|
37
43
|
def expectation_chain(*args)
|
38
|
-
|
39
|
-
RSpec::Mocks::AnyInstance::PositiveExpectationChain.new(*args)
|
40
|
-
else
|
41
|
-
RSpec::Mocks::AnyInstance::ExpectationChain.new(*args)
|
42
|
-
end
|
44
|
+
RSpec::Mocks::AnyInstance::PositiveExpectationChain.new(*args)
|
43
45
|
end
|
44
|
-
|
45
|
-
def negative_expectation_chain(*args)
|
46
|
-
if defined?(RSpec::Mocks::AnyInstance::NegativeExpectationChain)
|
47
|
-
RSpec::Mocks::AnyInstance::NegativeExpectationChain.new(*args)
|
48
|
-
else
|
49
|
-
RSpec::Mocks::AnyInstance::NegativeExpectationChain.new(*args)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
46
|
end
|
54
47
|
end
|
data/lib/better_receive/stub.rb
CHANGED
@@ -20,18 +20,12 @@ module BetterReceive
|
|
20
20
|
any_instance_better_expect(selector, options, &block)
|
21
21
|
else
|
22
22
|
subject.should respond_to selector
|
23
|
-
|
23
|
+
subject.stub(selector, options, &block)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
def stub_subject_method(selector, options, &block)
|
28
|
-
location = options[:expected_from] || caller(1)[2]
|
29
|
-
subject_mock_proxy.add_stub(location, selector, options, &block)
|
30
|
-
end
|
31
|
-
|
32
27
|
def expectation_chain(*args)
|
33
28
|
RSpec::Mocks::AnyInstance::StubChain.new(*args)
|
34
29
|
end
|
35
|
-
|
36
30
|
end
|
37
31
|
end
|
@@ -26,86 +26,82 @@ describe BetterReceive::Mock do
|
|
26
26
|
}
|
27
27
|
end
|
28
28
|
|
29
|
-
|
30
|
-
|
29
|
+
it "returns an rspec message expectation" do
|
30
|
+
foo.better_receive(:bar).should be_a RSpec::Mocks::MessageExpectation
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
mock_proxy.should_receive(:add_message_expectation)
|
32
|
+
foo.bar
|
33
|
+
end
|
35
34
|
|
36
|
-
|
37
|
-
|
35
|
+
it "responds to additional matchers(:with, :once...)" do
|
36
|
+
br_mock.assert_with(:bar).with('wibble')
|
38
37
|
|
39
|
-
|
40
|
-
|
38
|
+
foo.bar('wibble')
|
39
|
+
end
|
41
40
|
|
42
|
-
|
41
|
+
context "passing arguments" do
|
42
|
+
let(:selector) { :bar }
|
43
|
+
let(:options) { {passed: true} }
|
44
|
+
let(:block_param) { Proc.new {} }
|
43
45
|
|
44
|
-
|
46
|
+
before do
|
47
|
+
br_mock.assert_with(:bar, options, &block_param)
|
45
48
|
|
46
|
-
foo.
|
49
|
+
@expectation = RSpec::Mocks.proxy_for(foo).send(:method_doubles)[0][:expectations][0]
|
47
50
|
end
|
48
51
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
it "passes all arguments through to the mock_proxy" do
|
54
|
-
foo.should_receive(:send).with(:__mock_proxy).and_return(mock_proxy)
|
55
|
-
mock_proxy.should_receive(:add_message_expectation) do |*args, &block|
|
56
|
-
args[1].should == :bar
|
57
|
-
args[2].should == options
|
58
|
-
block.should == block_param
|
59
|
-
end
|
52
|
+
after do
|
53
|
+
foo.bar
|
54
|
+
end
|
60
55
|
|
61
|
-
|
62
|
-
|
56
|
+
it "passes all arguments through to the mock_proxy" do
|
57
|
+
@expectation.message.should == :bar
|
58
|
+
@expectation.implementation.inner_action.should == block_param
|
59
|
+
@expectation.send(:error_generator).opts.should == options
|
60
|
+
end
|
63
61
|
|
64
|
-
|
65
|
-
|
66
|
-
mock_proxy.should_receive(:add_message_expectation) do |*args, &block|
|
67
|
-
args[1].should == :bar
|
68
|
-
end
|
62
|
+
context "when the selector is a string" do
|
63
|
+
let(:selector) { "bar" }
|
69
64
|
|
70
|
-
|
65
|
+
it "converts the selector to a symbol" do
|
66
|
+
@expectation.message.should == selector.to_sym
|
71
67
|
end
|
72
68
|
end
|
69
|
+
end
|
73
70
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
context "when the method is defined" do
|
78
|
-
context "and the method is called" do
|
79
|
-
it 'does not raise an error' do
|
80
|
-
expect {
|
81
|
-
br_mock.assert_with(:bar)
|
82
|
-
foo.bar
|
83
|
-
}.to_not raise_error
|
84
|
-
end
|
85
|
-
end
|
71
|
+
context "on .any_instance" do
|
72
|
+
let(:br_mock) { BetterReceive::Mock.new(Foo.any_instance) }
|
86
73
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
}
|
95
|
-
end
|
74
|
+
context "when the method is defined" do
|
75
|
+
context "and the method is called" do
|
76
|
+
it 'does not raise an error' do
|
77
|
+
expect {
|
78
|
+
br_mock.assert_with(:bar)
|
79
|
+
foo.bar
|
80
|
+
}.to_not raise_error
|
96
81
|
end
|
97
82
|
end
|
98
83
|
|
99
|
-
context '
|
100
|
-
it '
|
84
|
+
context 'and the method is not called' do
|
85
|
+
it 'does raise an error' do
|
101
86
|
expect {
|
102
|
-
br_mock.assert_with(:
|
103
|
-
|
104
|
-
|
87
|
+
br_mock.assert_with(:bar)
|
88
|
+
RSpec::Mocks::space.verify_all
|
89
|
+
}.to raise_error(RSpec::Mocks::MockExpectationError) { |error|
|
90
|
+
error.message.should == "Exactly one instance should have received the following message(s) but didn't: bar"
|
105
91
|
}
|
106
92
|
end
|
107
93
|
end
|
108
94
|
end
|
95
|
+
|
96
|
+
context 'when the method is not defined' do
|
97
|
+
it 'raises an error' do
|
98
|
+
expect {
|
99
|
+
br_mock.assert_with(:baz)
|
100
|
+
}.to raise_error { |error|
|
101
|
+
error.message.should == "Expected instances of Foo to respond to :baz"
|
102
|
+
}
|
103
|
+
end
|
104
|
+
end
|
109
105
|
end
|
110
106
|
end
|
111
107
|
|
@@ -121,91 +117,77 @@ describe BetterReceive::Mock do
|
|
121
117
|
}
|
122
118
|
end
|
123
119
|
|
124
|
-
|
125
|
-
|
120
|
+
it "returns an rspec message expectation" do
|
121
|
+
br_mock.assert_negative_with(:bar).should be_a RSpec::Mocks::MessageExpectation
|
126
122
|
|
127
|
-
|
128
|
-
foo.
|
129
|
-
|
123
|
+
expect {
|
124
|
+
foo.bar
|
125
|
+
}.to raise_error(RSpec::Mocks::MockExpectationError) { |error|
|
126
|
+
error.message.should include "received: 1 time"
|
127
|
+
}
|
128
|
+
end
|
130
129
|
|
131
|
-
|
132
|
-
|
130
|
+
it "responds to additional matchers(:with, :once...)" do
|
131
|
+
br_mock.assert_negative_with(:bar).with('wibble')
|
132
|
+
expect {
|
133
|
+
foo.bar('wibble')
|
134
|
+
}.to raise_error(RSpec::Mocks::MockExpectationError) { |error|
|
135
|
+
error.message.should include "received: 1 time"
|
136
|
+
}
|
137
|
+
end
|
133
138
|
|
134
|
-
|
135
|
-
|
139
|
+
context "passing arguments" do
|
140
|
+
let(:selector) { :bar }
|
141
|
+
let(:options) { {passed: true} }
|
142
|
+
let(:block_param) { Proc.new {} }
|
136
143
|
|
137
|
-
|
138
|
-
|
139
|
-
}.to raise_error(RSpec::Mocks::MockExpectationError) { |error|
|
140
|
-
error.message.should include "received: 1 time"
|
141
|
-
}
|
142
|
-
|
143
|
-
br_mock.assert_negative_with(:bar).with('wibble')
|
144
|
-
expect {
|
145
|
-
foo.bar('wibble')
|
146
|
-
}.to raise_error(RSpec::Mocks::MockExpectationError) { |error|
|
147
|
-
error.message.should include "received: 1 time"
|
148
|
-
}
|
144
|
+
before do
|
145
|
+
br_mock.assert_negative_with(:bar, options, &block_param)
|
149
146
|
|
147
|
+
@expectation = RSpec::Mocks.proxy_for(foo).send(:method_doubles)[0][:expectations][0]
|
150
148
|
end
|
151
149
|
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
foo.should_receive(:send).with(:__mock_proxy).and_return(mock_proxy)
|
158
|
-
mock_proxy.should_receive(:add_negative_message_expectation) do |*args, &block|
|
159
|
-
args[1].should == :bar
|
160
|
-
block.should == block_param
|
161
|
-
end
|
150
|
+
it "passes all arguments through to the mock_proxy" do
|
151
|
+
@expectation.message.should == :bar
|
152
|
+
@expectation.implementation.inner_action.should == block_param
|
153
|
+
@expectation.send(:error_generator).opts.should == options
|
154
|
+
end
|
162
155
|
|
163
|
-
|
164
|
-
|
156
|
+
context "when the selector is a string" do
|
157
|
+
let(:selector) { "bar" }
|
165
158
|
|
166
159
|
it "converts the selector to a symbol" do
|
167
|
-
|
168
|
-
mock_proxy.should_receive(:add_negative_message_expectation) do |*args, &block|
|
169
|
-
args[1].should == :bar
|
170
|
-
end
|
171
|
-
|
172
|
-
br_mock.assert_negative_with("bar", &block_param)
|
160
|
+
@expectation.message.should == selector.to_sym
|
173
161
|
end
|
174
162
|
end
|
163
|
+
end
|
175
164
|
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
context "when the method is defined" do
|
180
|
-
context "and the method is called" do
|
181
|
-
it 'raises when called' do
|
182
|
-
expect {
|
183
|
-
br_mock.assert_negative_with(:bar)
|
184
|
-
foo.bar
|
185
|
-
}.to raise_error(RSpec::Mocks::MockExpectationError) { |error|
|
186
|
-
error.message.should include "received: 1 time"
|
187
|
-
}
|
188
|
-
end
|
189
|
-
end
|
165
|
+
context "on .any_instance" do
|
166
|
+
let(:br_mock) { BetterReceive::Mock.new(Foo.any_instance) }
|
190
167
|
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
end
|
168
|
+
it 'raises when called' do
|
169
|
+
expect {
|
170
|
+
br_mock.assert_negative_with(:bar)
|
171
|
+
foo.bar
|
172
|
+
}.to raise_error(RSpec::Mocks::MockExpectationError) { |error|
|
173
|
+
error.message.should include "received: 1 time"
|
174
|
+
}
|
175
|
+
end
|
200
176
|
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
177
|
+
it 'does not raise an error if not called' do
|
178
|
+
expect {
|
179
|
+
br_mock.assert_negative_with(:bar)
|
180
|
+
RSpec::Mocks::space.verify_all
|
181
|
+
}.to_not raise_error
|
182
|
+
end
|
183
|
+
|
184
|
+
context 'when the method is not defined' do
|
185
|
+
it 'raises an error' do
|
186
|
+
expect {
|
187
|
+
br_mock.assert_negative_with(:baz)
|
188
|
+
}.to raise_error { |error|
|
189
|
+
error.message.should == "Expected instances of Foo to respond to :baz"
|
190
|
+
}
|
209
191
|
end
|
210
192
|
end
|
211
193
|
end
|
@@ -11,67 +11,57 @@ describe BetterReceive::Stub do
|
|
11
11
|
let(:br_stub) { BetterReceive::Stub.new(foo) }
|
12
12
|
|
13
13
|
context "when passed a single selector" do
|
14
|
-
|
15
|
-
|
16
|
-
foo.should_receive(:respond_to?).with(:bar).and_return(true)
|
14
|
+
it "determines whether an object responds to a method" do
|
15
|
+
foo.should_receive(:respond_to?).with(:bar).and_return(true)
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
foo.bar
|
21
|
-
end
|
17
|
+
br_stub.assert_with :bar
|
22
18
|
|
23
|
-
|
24
|
-
expect {
|
25
|
-
br_stub.assert_with :bar_baz
|
26
|
-
}.to raise_error(RSpec::Expectations::ExpectationNotMetError) { |error|
|
27
|
-
error.message.should =~ /to respond to :bar_baz/
|
28
|
-
}
|
29
|
-
end
|
19
|
+
foo.bar
|
30
20
|
end
|
31
21
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
22
|
+
it "raises an error if the method is not defined" do
|
23
|
+
expect {
|
24
|
+
br_stub.assert_with :bar_baz
|
25
|
+
}.to raise_error(RSpec::Expectations::ExpectationNotMetError) { |error|
|
26
|
+
error.message.should =~ /to respond to :bar_baz/
|
27
|
+
}
|
28
|
+
end
|
36
29
|
|
37
|
-
|
38
|
-
|
39
|
-
mock_proxy.should_receive(:add_stub)
|
30
|
+
it "returns an rspec message expectation(responds to additional matchers ('with', 'once'...))" do
|
31
|
+
br_stub.assert_with(:bar).should be_a RSpec::Mocks::MessageExpectation
|
40
32
|
|
41
|
-
|
42
|
-
|
33
|
+
br_stub.assert_with(:bar).with('wibble')
|
34
|
+
end
|
43
35
|
|
44
|
-
|
45
|
-
|
36
|
+
it "returns the value passed in the block" do
|
37
|
+
br_stub.assert_with(:bar) { :baz }
|
46
38
|
|
39
|
+
foo.bar.should == :baz
|
40
|
+
end
|
47
41
|
|
48
|
-
|
49
|
-
|
42
|
+
context "when passing arguments" do
|
43
|
+
let(:selector) { :bar }
|
44
|
+
let(:options) { {passed: true} }
|
45
|
+
let(:block_param) { Proc.new {} }
|
50
46
|
|
51
|
-
|
52
|
-
|
53
|
-
mock_proxy.should_receive(:add_stub) do |*args, &block|
|
54
|
-
args[1].should == :bar
|
55
|
-
args[2].should == options
|
56
|
-
block.should == block_param
|
57
|
-
end
|
47
|
+
before do
|
48
|
+
br_stub.assert_with(:bar, options, &block_param)
|
58
49
|
|
59
|
-
|
50
|
+
@stub = RSpec::Mocks.proxy_for(foo).send(:method_doubles)[0][:stubs][0]
|
60
51
|
end
|
61
52
|
|
62
|
-
it "
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
end
|
67
|
-
|
68
|
-
br_stub.assert_with("bar", passed: true, &block_param)
|
53
|
+
it "creates a mock proxy and adds an expectation to it" do
|
54
|
+
@stub.message.should == :bar
|
55
|
+
@stub.implementation.inner_action.should == block_param
|
56
|
+
@stub.send(:error_generator).opts.should == options
|
69
57
|
end
|
70
58
|
|
71
|
-
|
72
|
-
|
59
|
+
context "when the selector is a string" do
|
60
|
+
let(:selector) { "bar" }
|
73
61
|
|
74
|
-
|
62
|
+
it "converts the selector to a symbol" do
|
63
|
+
@stub.message.should == selector.to_sym
|
64
|
+
end
|
75
65
|
end
|
76
66
|
end
|
77
67
|
end
|
@@ -122,6 +112,10 @@ describe BetterReceive::Stub do
|
|
122
112
|
|
123
113
|
foo.bar.should == :whatever
|
124
114
|
end
|
115
|
+
|
116
|
+
it "does not blow up if the method is not called" do
|
117
|
+
br_stub.assert_with(:bar)
|
118
|
+
end
|
125
119
|
end
|
126
120
|
|
127
121
|
context 'when the method is not defined' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: better_receive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steve Ellis
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-07-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -17,14 +17,14 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - ~>
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '2.
|
20
|
+
version: '2.14'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - ~>
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: '2.
|
27
|
+
version: '2.14'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: rake
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|