chargify2 0.2.1 → 0.2.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.
- data/Gemfile +1 -0
- data/Gemfile.lock +15 -0
- data/chargify2.gemspec +3 -3
- data/lib/chargify2/direct.rb +26 -26
- data/spec/direct_response_parameters_spec.rb +9 -9
- data/spec/direct_secure_parameters_spec.rb +15 -15
- data/spec/spec_helper.rb +5 -0
- metadata +27 -29
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -2,6 +2,7 @@ GEM
|
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
4
|
addressable (2.2.5)
|
5
|
+
archive-tar-minitar (0.5.2)
|
5
6
|
capybara (0.4.1.2)
|
6
7
|
celerity (>= 0.7.9)
|
7
8
|
culerity (>= 0.2.4)
|
@@ -14,6 +15,7 @@ GEM
|
|
14
15
|
celerity (0.8.9)
|
15
16
|
childprocess (0.1.8)
|
16
17
|
ffi (~> 1.0.6)
|
18
|
+
columnize (0.3.4)
|
17
19
|
crack (0.1.8)
|
18
20
|
culerity (0.2.15)
|
19
21
|
diff-lcs (1.1.2)
|
@@ -29,6 +31,8 @@ GEM
|
|
29
31
|
git (>= 1.2.5)
|
30
32
|
rake
|
31
33
|
json_pure (1.5.1)
|
34
|
+
linecache19 (0.5.12)
|
35
|
+
ruby_core_source (>= 0.1.4)
|
32
36
|
mime-types (1.16)
|
33
37
|
nokogiri (1.4.4)
|
34
38
|
rack (1.2.2)
|
@@ -44,6 +48,16 @@ GEM
|
|
44
48
|
rspec-expectations (2.3.0)
|
45
49
|
diff-lcs (~> 1.1.2)
|
46
50
|
rspec-mocks (2.3.0)
|
51
|
+
ruby-debug-base19 (0.11.25)
|
52
|
+
columnize (>= 0.3.1)
|
53
|
+
linecache19 (>= 0.5.11)
|
54
|
+
ruby_core_source (>= 0.1.4)
|
55
|
+
ruby-debug19 (0.11.6)
|
56
|
+
columnize (>= 0.3.1)
|
57
|
+
linecache19 (>= 0.5.11)
|
58
|
+
ruby-debug-base19 (>= 0.11.19)
|
59
|
+
ruby_core_source (0.1.5)
|
60
|
+
archive-tar-minitar (>= 0.5.2)
|
47
61
|
rubyzip (0.9.4)
|
48
62
|
selenium-webdriver (0.1.4)
|
49
63
|
childprocess (>= 0.1.7)
|
@@ -71,6 +85,7 @@ DEPENDENCIES
|
|
71
85
|
jeweler (~> 1.5.2)
|
72
86
|
rcov
|
73
87
|
rspec (~> 2.3.0)
|
88
|
+
ruby-debug19
|
74
89
|
vcr
|
75
90
|
webmock
|
76
91
|
yard (~> 0.6.0)
|
data/chargify2.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{chargify2}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Michael Klett"]
|
12
|
-
s.date = %q{2011-10-
|
11
|
+
s.authors = ["Michael Klett", "Shay Frendt"]
|
12
|
+
s.date = %q{2011-10-28}
|
13
13
|
s.description = %q{}
|
14
14
|
s.email = %q{michael@webadvocate.com}
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/chargify2/direct.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
module Chargify2
|
2
2
|
class Direct
|
3
3
|
attr_reader :client
|
4
|
-
|
4
|
+
|
5
5
|
def initialize(client)
|
6
6
|
@client = client
|
7
7
|
validate_client
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
def secure_parameters(params = {})
|
11
11
|
SecureParameters.new(params, client)
|
12
12
|
end
|
@@ -18,9 +18,9 @@ module Chargify2
|
|
18
18
|
def self.signature(message, secret)
|
19
19
|
OpenSSL::HMAC.hexdigest(OpenSSL::Digest::Digest.new('sha1'), secret, message)
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
private
|
23
|
-
|
23
|
+
|
24
24
|
def validate_client
|
25
25
|
unless client.is_a?(Client)
|
26
26
|
raise ArgumentError.new("Direct.new requires a Client as an argument")
|
@@ -35,20 +35,20 @@ module Chargify2
|
|
35
35
|
attr_reader :nonce
|
36
36
|
attr_reader :data
|
37
37
|
attr_reader :secret
|
38
|
-
|
38
|
+
|
39
39
|
def initialize(hash, client)
|
40
40
|
args = hash.symbolize_keys
|
41
|
-
|
41
|
+
|
42
42
|
@api_id = client.api_id
|
43
43
|
@secret = client.api_secret
|
44
44
|
|
45
45
|
@timestamp = args[:timestamp]
|
46
46
|
@nonce = args[:nonce]
|
47
47
|
@data = args[:data]
|
48
|
-
|
48
|
+
|
49
49
|
validate_args
|
50
50
|
end
|
51
|
-
|
51
|
+
|
52
52
|
def to_form_inputs
|
53
53
|
output = []
|
54
54
|
output << %{<input type="hidden" name="secure[api_id]" value="#{h(api_id)}"/>}
|
@@ -59,42 +59,42 @@ module Chargify2
|
|
59
59
|
output.join("\n")
|
60
60
|
end
|
61
61
|
|
62
|
-
%w(timestamp nonce data).each do |method|
|
62
|
+
%w(timestamp nonce data api_id secret).each do |method|
|
63
63
|
define_method("#{method}?") do
|
64
64
|
value = self.send(method)
|
65
|
-
value && value.to_s.strip.
|
65
|
+
value && !(value.is_a?(Hash) ? value : value.to_s.strip).empty?
|
66
66
|
end
|
67
67
|
end
|
68
|
-
|
68
|
+
|
69
69
|
def encoded_data
|
70
70
|
hash = data? ? data : {}
|
71
71
|
uri = Addressable::URI.new
|
72
72
|
uri.query_values = hash
|
73
73
|
uri.query
|
74
74
|
end
|
75
|
-
|
75
|
+
|
76
76
|
def signature
|
77
77
|
message = "#{api_id}#{timestamp}#{nonce}#{encoded_data}"
|
78
78
|
Direct.signature(message, secret)
|
79
79
|
end
|
80
|
-
|
80
|
+
|
81
81
|
private
|
82
|
-
|
82
|
+
|
83
83
|
def h(s)
|
84
84
|
ERB::Util.html_escape(s)
|
85
85
|
end
|
86
|
-
|
86
|
+
|
87
87
|
def validate_args
|
88
88
|
if data && !data.is_a?(Hash)
|
89
89
|
raise ArgumentError.new("The 'data' must be provided as a Hash (you passed a #{data.class})")
|
90
90
|
end
|
91
|
-
|
92
|
-
unless api_id && secret
|
91
|
+
|
92
|
+
unless api_id? && secret?
|
93
93
|
raise ArgumentError.new("SecureParameters require connection to a Client - was one given?")
|
94
94
|
end
|
95
95
|
end
|
96
96
|
end
|
97
|
-
|
97
|
+
|
98
98
|
# There is no need to instantiate a ResponseParameters instance directly. Use Direct#response_parameters instead.
|
99
99
|
class ResponseParameters
|
100
100
|
attr_reader :api_id
|
@@ -105,10 +105,10 @@ module Chargify2
|
|
105
105
|
attr_reader :call_id
|
106
106
|
attr_reader :secret
|
107
107
|
attr_reader :signature
|
108
|
-
|
108
|
+
|
109
109
|
def initialize(params, client)
|
110
110
|
args = params.symbolize_keys
|
111
|
-
|
111
|
+
|
112
112
|
@api_id = client.api_id
|
113
113
|
@secret = client.api_secret
|
114
114
|
|
@@ -118,21 +118,21 @@ module Chargify2
|
|
118
118
|
@result_code = args[:result_code]
|
119
119
|
@call_id = args[:call_id]
|
120
120
|
@signature = args[:signature]
|
121
|
-
|
121
|
+
|
122
122
|
validate_args
|
123
123
|
end
|
124
|
-
|
124
|
+
|
125
125
|
def verified?
|
126
126
|
message = "#{api_id}#{timestamp}#{nonce}#{status_code}#{result_code}#{call_id}"
|
127
127
|
Direct.signature(message, secret) == signature
|
128
128
|
end
|
129
|
-
|
129
|
+
|
130
130
|
def success?
|
131
131
|
status_code.to_s == '200'
|
132
132
|
end
|
133
|
-
|
133
|
+
|
134
134
|
private
|
135
|
-
|
135
|
+
|
136
136
|
def validate_args
|
137
137
|
unless api_id && secret && api_id.to_s.length > 0 && secret.to_s.length > 0
|
138
138
|
raise ArgumentError.new("ResponseParameters require connection to a Client - was one given?")
|
@@ -140,4 +140,4 @@ module Chargify2
|
|
140
140
|
end
|
141
141
|
end
|
142
142
|
end
|
143
|
-
end
|
143
|
+
end
|
@@ -3,13 +3,13 @@ require 'spec_helper'
|
|
3
3
|
module Chargify2
|
4
4
|
describe Direct::ResponseParameters do
|
5
5
|
let(:client) { Client.new(valid_client_credentials) }
|
6
|
-
|
6
|
+
|
7
7
|
it "raises an argument error if it could not get an api_id and secret from the passed client" do
|
8
8
|
lambda {
|
9
9
|
Direct::SecureParameters.new({}, OpenCascade.new)
|
10
10
|
}.should raise_error(ArgumentError)
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
describe "#verified?" do
|
14
14
|
before(:each) do
|
15
15
|
@api_id = valid_client_credentials[:api_id]
|
@@ -18,7 +18,7 @@ module Chargify2
|
|
18
18
|
@status_code = '200'
|
19
19
|
@result_code = '2000'
|
20
20
|
@call_id = 'blah'
|
21
|
-
|
21
|
+
|
22
22
|
# Used the generator here: http://hash.online-convert.com/sha1-generator
|
23
23
|
# ... with message: "1c016050-498a-012e-91b1-005056a216ab13032453261c016050-498a-012e-91b1-005056a216ab2002000blah"
|
24
24
|
# ... and secret: "p5lxQ804MYtwZecFWNOT"
|
@@ -36,10 +36,10 @@ module Chargify2
|
|
36
36
|
'call_id' => @call_id,
|
37
37
|
'signature' => @signature
|
38
38
|
}, client)
|
39
|
-
|
39
|
+
|
40
40
|
rp.verified?.should be_true
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
it "returns false when the calculated signature of the result params is different from the received signature" do
|
44
44
|
rp = Direct::ResponseParameters.new({
|
45
45
|
'api_id' => @api_id,
|
@@ -50,10 +50,10 @@ module Chargify2
|
|
50
50
|
'call_id' => @call_id,
|
51
51
|
'signature' => 'foo'
|
52
52
|
}, client)
|
53
|
-
|
53
|
+
|
54
54
|
rp.verified?.should be_false
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
it "returns false when the calculated signature is correct but the api_id does not match the client's" do
|
58
58
|
other_client_credentials = valid_client_credentials.merge(:api_id => '1')
|
59
59
|
other_client = Client.new(other_client_credentials)
|
@@ -67,9 +67,9 @@ module Chargify2
|
|
67
67
|
'call_id' => @call_id,
|
68
68
|
'signature' => @signature
|
69
69
|
}, other_client)
|
70
|
-
|
70
|
+
|
71
71
|
rp.verified?.should be_false
|
72
72
|
end
|
73
73
|
end
|
74
74
|
end
|
75
|
-
end
|
75
|
+
end
|
@@ -3,30 +3,30 @@ require 'spec_helper'
|
|
3
3
|
module Chargify2
|
4
4
|
describe Direct::SecureParameters do
|
5
5
|
let(:client) { Client.new(valid_client_credentials) }
|
6
|
-
|
6
|
+
|
7
7
|
it "raises an argument error if data is provided but it is not in hash format" do
|
8
8
|
lambda {
|
9
9
|
Direct::SecureParameters.new({'data' => 'string'}, client)
|
10
10
|
}.should raise_error(ArgumentError)
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
it "raises an argument error if it could not get an api_id and secret from the passed client" do
|
14
14
|
lambda {
|
15
15
|
Direct::SecureParameters.new({}, OpenCascade.new)
|
16
16
|
}.should raise_error(ArgumentError)
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
describe "#timestamp?" do
|
20
20
|
it "returns true when a timestamp is provided via a string hash key" do
|
21
21
|
sp = Direct::SecureParameters.new({'timestamp' => '1234'}, client)
|
22
22
|
sp.timestamp?.should be_true
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
it "returns true when a timestamp is provided via a symbol hash key" do
|
26
26
|
sp = Direct::SecureParameters.new({:timestamp => '1234'}, client)
|
27
27
|
sp.timestamp?.should be_true
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
it "returns false when a timestamp key/value is not provided" do
|
31
31
|
sp = Direct::SecureParameters.new({}, client)
|
32
32
|
sp.timestamp?.should be_false
|
@@ -48,12 +48,12 @@ module Chargify2
|
|
48
48
|
sp = Direct::SecureParameters.new({'nonce' => '1234'}, client)
|
49
49
|
sp.nonce?.should be_true
|
50
50
|
end
|
51
|
-
|
51
|
+
|
52
52
|
it "returns true when a nonce is provided via a symbol hash key" do
|
53
53
|
sp = Direct::SecureParameters.new({:nonce => '1234'}, client)
|
54
54
|
sp.nonce?.should be_true
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
it "returns false when a nonce key/value is not provided" do
|
58
58
|
sp = Direct::SecureParameters.new({}, client)
|
59
59
|
sp.nonce?.should be_false
|
@@ -75,12 +75,12 @@ module Chargify2
|
|
75
75
|
sp = Direct::SecureParameters.new({'data' => {'foo' => 'bar'}}, client)
|
76
76
|
sp.data?.should be_true
|
77
77
|
end
|
78
|
-
|
78
|
+
|
79
79
|
it "returns true when data is provided via a symbol hash key" do
|
80
80
|
sp = Direct::SecureParameters.new({:data => {'foo' => 'bar'}}, client)
|
81
81
|
sp.data?.should be_true
|
82
82
|
end
|
83
|
-
|
83
|
+
|
84
84
|
it "returns false when a data key/value is not provided" do
|
85
85
|
sp = Direct::SecureParameters.new({}, client)
|
86
86
|
sp.data?.should be_false
|
@@ -96,24 +96,24 @@ module Chargify2
|
|
96
96
|
sp.data?.should be_false
|
97
97
|
end
|
98
98
|
end
|
99
|
-
|
99
|
+
|
100
100
|
describe "#encoded_data" do
|
101
101
|
it "turns the data hash in to query string format" do
|
102
102
|
sp = Direct::SecureParameters.new({'data' => {'one' => 'two', 'three' => 'four'}}, client)
|
103
103
|
sp.encoded_data.should == "one=two&three=four"
|
104
104
|
end
|
105
|
-
|
105
|
+
|
106
106
|
it "turns a nested data hash in to nested query string format" do
|
107
107
|
sp = Direct::SecureParameters.new({'data' => {'one' => {'two' => {'three' => 'four'}}, 'foo' => 'bar'}}, client)
|
108
108
|
sp.encoded_data.should == "foo=bar&one[two][three]=four"
|
109
109
|
end
|
110
|
-
|
110
|
+
|
111
111
|
it "performs percent encoding on unsafe characters" do
|
112
112
|
sp = Direct::SecureParameters.new({'data' => {'redirect_uri' => 'http://www.example.com', 'sentence' => 'Michael was here!'}}, client)
|
113
113
|
sp.encoded_data.should == "redirect_uri=http%3A%2F%2Fwww.example.com&sentence=Michael%20was%20here%21"
|
114
114
|
end
|
115
115
|
end
|
116
|
-
|
116
|
+
|
117
117
|
describe "#to_form_inputs" do
|
118
118
|
context "with no timestamp, nonce, nor data" do
|
119
119
|
it "outputs 2 hidden form inputs - one for the api_id and one for the signature" do
|
@@ -125,7 +125,7 @@ module Chargify2
|
|
125
125
|
form.should have_selector("input[type='hidden'][name='secure[signature]'][value='#{sp.signature}']", :count => 1)
|
126
126
|
end
|
127
127
|
end
|
128
|
-
|
128
|
+
|
129
129
|
context "with a timestamp" do
|
130
130
|
it "outputs 3 hidden form inputs - one each for the api_id, timestamp, and signature" do
|
131
131
|
sp = Direct::SecureParameters.new({'timestamp' => '1234'}, client)
|
@@ -183,7 +183,7 @@ module Chargify2
|
|
183
183
|
nonce = '5678'
|
184
184
|
data = {'one' => 'two', 'three' => {'four' => "http://www.example.com"}}
|
185
185
|
sp = Direct::SecureParameters.new({'timestamp' => timestamp, 'nonce' => nonce, 'data' => data}, client)
|
186
|
-
|
186
|
+
|
187
187
|
# Used the generator here: http://hash.online-convert.com/sha1-generator
|
188
188
|
# ... with message: "1c016050-498a-012e-91b1-005056a216ab12345678one=two&three[four]=http%3A%2F%2Fwww.example.com"
|
189
189
|
# ... and secret: "p5lxQ804MYtwZecFWNOT"
|
data/spec/spec_helper.rb
CHANGED
@@ -13,6 +13,11 @@ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
|
13
13
|
RSpec.configure do |config|
|
14
14
|
config.include SpecHelperMethods
|
15
15
|
config.extend VCR::RSpec::Macros
|
16
|
+
config.filter_run :focused => true
|
17
|
+
config.run_all_when_everything_filtered = true
|
18
|
+
config.alias_example_to :fit, :focused => true
|
19
|
+
config.alias_example_to :xit, :disabled => true
|
20
|
+
config.color_enabled = true
|
16
21
|
end
|
17
22
|
|
18
23
|
VCR.config do |c|
|
metadata
CHANGED
@@ -1,20 +1,21 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chargify2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Michael Klett
|
9
|
+
- Shay Frendt
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date: 2011-10-
|
13
|
+
date: 2011-10-28 00:00:00.000000000 -04:00
|
13
14
|
default_executable:
|
14
15
|
dependencies:
|
15
16
|
- !ruby/object:Gem::Dependency
|
16
17
|
name: httparty
|
17
|
-
requirement: &
|
18
|
+
requirement: &2153786560 !ruby/object:Gem::Requirement
|
18
19
|
none: false
|
19
20
|
requirements:
|
20
21
|
- - ! '>='
|
@@ -22,10 +23,10 @@ dependencies:
|
|
22
23
|
version: '0'
|
23
24
|
type: :runtime
|
24
25
|
prerelease: false
|
25
|
-
version_requirements: *
|
26
|
+
version_requirements: *2153786560
|
26
27
|
- !ruby/object:Gem::Dependency
|
27
28
|
name: addressable
|
28
|
-
requirement: &
|
29
|
+
requirement: &2153786080 !ruby/object:Gem::Requirement
|
29
30
|
none: false
|
30
31
|
requirements:
|
31
32
|
- - ! '>='
|
@@ -33,10 +34,10 @@ dependencies:
|
|
33
34
|
version: '0'
|
34
35
|
type: :runtime
|
35
36
|
prerelease: false
|
36
|
-
version_requirements: *
|
37
|
+
version_requirements: *2153786080
|
37
38
|
- !ruby/object:Gem::Dependency
|
38
39
|
name: hashie
|
39
|
-
requirement: &
|
40
|
+
requirement: &2153785600 !ruby/object:Gem::Requirement
|
40
41
|
none: false
|
41
42
|
requirements:
|
42
43
|
- - ! '>='
|
@@ -44,10 +45,10 @@ dependencies:
|
|
44
45
|
version: '0'
|
45
46
|
type: :runtime
|
46
47
|
prerelease: false
|
47
|
-
version_requirements: *
|
48
|
+
version_requirements: *2153785600
|
48
49
|
- !ruby/object:Gem::Dependency
|
49
50
|
name: hashery
|
50
|
-
requirement: &
|
51
|
+
requirement: &2153785120 !ruby/object:Gem::Requirement
|
51
52
|
none: false
|
52
53
|
requirements:
|
53
54
|
- - ! '>='
|
@@ -55,10 +56,10 @@ dependencies:
|
|
55
56
|
version: '0'
|
56
57
|
type: :runtime
|
57
58
|
prerelease: false
|
58
|
-
version_requirements: *
|
59
|
+
version_requirements: *2153785120
|
59
60
|
- !ruby/object:Gem::Dependency
|
60
61
|
name: rspec
|
61
|
-
requirement: &
|
62
|
+
requirement: &2153784640 !ruby/object:Gem::Requirement
|
62
63
|
none: false
|
63
64
|
requirements:
|
64
65
|
- - ~>
|
@@ -66,10 +67,10 @@ dependencies:
|
|
66
67
|
version: 2.3.0
|
67
68
|
type: :development
|
68
69
|
prerelease: false
|
69
|
-
version_requirements: *
|
70
|
+
version_requirements: *2153784640
|
70
71
|
- !ruby/object:Gem::Dependency
|
71
72
|
name: yard
|
72
|
-
requirement: &
|
73
|
+
requirement: &2153784160 !ruby/object:Gem::Requirement
|
73
74
|
none: false
|
74
75
|
requirements:
|
75
76
|
- - ~>
|
@@ -77,10 +78,10 @@ dependencies:
|
|
77
78
|
version: 0.6.0
|
78
79
|
type: :development
|
79
80
|
prerelease: false
|
80
|
-
version_requirements: *
|
81
|
+
version_requirements: *2153784160
|
81
82
|
- !ruby/object:Gem::Dependency
|
82
83
|
name: bundler
|
83
|
-
requirement: &
|
84
|
+
requirement: &2153783680 !ruby/object:Gem::Requirement
|
84
85
|
none: false
|
85
86
|
requirements:
|
86
87
|
- - ~>
|
@@ -88,10 +89,10 @@ dependencies:
|
|
88
89
|
version: 1.0.0
|
89
90
|
type: :development
|
90
91
|
prerelease: false
|
91
|
-
version_requirements: *
|
92
|
+
version_requirements: *2153783680
|
92
93
|
- !ruby/object:Gem::Dependency
|
93
94
|
name: jeweler
|
94
|
-
requirement: &
|
95
|
+
requirement: &2153799580 !ruby/object:Gem::Requirement
|
95
96
|
none: false
|
96
97
|
requirements:
|
97
98
|
- - ~>
|
@@ -99,10 +100,10 @@ dependencies:
|
|
99
100
|
version: 1.5.2
|
100
101
|
type: :development
|
101
102
|
prerelease: false
|
102
|
-
version_requirements: *
|
103
|
+
version_requirements: *2153799580
|
103
104
|
- !ruby/object:Gem::Dependency
|
104
105
|
name: rcov
|
105
|
-
requirement: &
|
106
|
+
requirement: &2153799100 !ruby/object:Gem::Requirement
|
106
107
|
none: false
|
107
108
|
requirements:
|
108
109
|
- - ! '>='
|
@@ -110,10 +111,10 @@ dependencies:
|
|
110
111
|
version: '0'
|
111
112
|
type: :development
|
112
113
|
prerelease: false
|
113
|
-
version_requirements: *
|
114
|
+
version_requirements: *2153799100
|
114
115
|
- !ruby/object:Gem::Dependency
|
115
116
|
name: webmock
|
116
|
-
requirement: &
|
117
|
+
requirement: &2153798620 !ruby/object:Gem::Requirement
|
117
118
|
none: false
|
118
119
|
requirements:
|
119
120
|
- - ! '>='
|
@@ -121,10 +122,10 @@ dependencies:
|
|
121
122
|
version: '0'
|
122
123
|
type: :development
|
123
124
|
prerelease: false
|
124
|
-
version_requirements: *
|
125
|
+
version_requirements: *2153798620
|
125
126
|
- !ruby/object:Gem::Dependency
|
126
127
|
name: vcr
|
127
|
-
requirement: &
|
128
|
+
requirement: &2153798140 !ruby/object:Gem::Requirement
|
128
129
|
none: false
|
129
130
|
requirements:
|
130
131
|
- - ! '>='
|
@@ -132,10 +133,10 @@ dependencies:
|
|
132
133
|
version: '0'
|
133
134
|
type: :development
|
134
135
|
prerelease: false
|
135
|
-
version_requirements: *
|
136
|
+
version_requirements: *2153798140
|
136
137
|
- !ruby/object:Gem::Dependency
|
137
138
|
name: capybara
|
138
|
-
requirement: &
|
139
|
+
requirement: &2153797660 !ruby/object:Gem::Requirement
|
139
140
|
none: false
|
140
141
|
requirements:
|
141
142
|
- - ! '>='
|
@@ -143,7 +144,7 @@ dependencies:
|
|
143
144
|
version: '0'
|
144
145
|
type: :development
|
145
146
|
prerelease: false
|
146
|
-
version_requirements: *
|
147
|
+
version_requirements: *2153797660
|
147
148
|
description: ''
|
148
149
|
email: michael@webadvocate.com
|
149
150
|
executables: []
|
@@ -190,9 +191,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
190
191
|
- - ! '>='
|
191
192
|
- !ruby/object:Gem::Version
|
192
193
|
version: '0'
|
193
|
-
segments:
|
194
|
-
- 0
|
195
|
-
hash: 1643346488157857297
|
196
194
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
197
195
|
none: false
|
198
196
|
requirements:
|