stripe 1.30.2 → 1.30.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.txt +4 -0
- data/README.rdoc +15 -0
- data/VERSION +1 -1
- data/lib/stripe/account.rb +65 -3
- data/lib/stripe/stripe_object.rb +20 -27
- data/lib/stripe/util.rb +4 -1
- data/lib/stripe/version.rb +1 -1
- data/stripe.gemspec +8 -0
- data/test/stripe/account_test.rb +98 -1
- data/test/stripe/metadata_test.rb +1 -1
- data/test/stripe/stripe_object_test.rb +77 -0
- data/test/stripe/util_test.rb +35 -6
- metadata +44 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57a7cdc2de64371c76c7f0a74cc2b179819a6589
|
4
|
+
data.tar.gz: 3d3f0155191a28d7cda3ae40f9551880d0c63f73
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 57b53ee9cce83fa1bd0a8e78b548594239799e46a1105dbda7d67d33302b7578bbc33280416f78058bc112808a49ea3a57e7e0fd42104fb331b82383832158a7
|
7
|
+
data.tar.gz: 804c78f9c635f021c6e8dec7c1c78a16c9ddf4b43ac81f60782ecec1c247bacd6bd9fd21a6b5b563eb12f815ee5d96b0b16fbe6ecaf8e31251a74a67e3290997
|
data/History.txt
CHANGED
data/README.rdoc
CHANGED
@@ -1,5 +1,20 @@
|
|
1
1
|
= Stripe Ruby bindings {<img src="https://travis-ci.org/stripe/stripe-ruby.svg?branch=master" alt="Build Status" />}[https://travis-ci.org/stripe/stripe-ruby]
|
2
2
|
|
3
|
+
The Stripe Ruby bindings provide a small SDK for convenient access to the
|
4
|
+
Stripe API from applications written in the Ruby language. It provides a
|
5
|
+
pre-defined set of classes for API resources that initialize themselves
|
6
|
+
dynamically from API responses which allows the bindings to tolerate a number
|
7
|
+
of different versions of the API.
|
8
|
+
|
9
|
+
The bindings also provide other features. For example:
|
10
|
+
|
11
|
+
* Easy configuration path for fast setup and use.
|
12
|
+
* Helpers for pagination.
|
13
|
+
* Tracking of "fresh" values in API resources so that partial updates can be
|
14
|
+
executed.
|
15
|
+
* Built-in mechanisms for the serialization of parameters according to the
|
16
|
+
expectations of Stripe's API.
|
17
|
+
|
3
18
|
== Documentation
|
4
19
|
|
5
20
|
{Ruby API Docs}[https://stripe.com/docs/api/ruby#intro]
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.30.
|
1
|
+
1.30.3
|
data/lib/stripe/account.rb
CHANGED
@@ -16,17 +16,56 @@ module Stripe
|
|
16
16
|
# @override To make id optional
|
17
17
|
def self.retrieve(id=ARGUMENT_NOT_PROVIDED, opts={})
|
18
18
|
id = id.equal?(ARGUMENT_NOT_PROVIDED) ? nil : Util.check_string_argument!(id)
|
19
|
-
|
20
|
-
#
|
21
|
-
#
|
19
|
+
|
20
|
+
# Account used to be a singleton, where this method's signature was
|
21
|
+
# `(opts={})`. For the sake of not breaking folks who pass in an OAuth
|
22
|
+
# key in opts, let's lurkily string match for it.
|
22
23
|
if opts == {} && id.is_a?(String) && id.start_with?('sk_')
|
23
24
|
# `super` properly assumes a String opts is the apiKey and normalizes as expected.
|
24
25
|
opts = id
|
25
26
|
id = nil
|
26
27
|
end
|
28
|
+
|
27
29
|
super(id, opts)
|
28
30
|
end
|
29
31
|
|
32
|
+
# Somewhat unfortunately, we attempt to do a special encoding trick when
|
33
|
+
# serializing `additional_owners` under an account: when updating a value,
|
34
|
+
# we actually send the update parameters up as an integer-indexed hash
|
35
|
+
# rather than an array. So instead of this:
|
36
|
+
#
|
37
|
+
# field[]=item1&field[]=item2&field[]=item3
|
38
|
+
#
|
39
|
+
# We send this:
|
40
|
+
#
|
41
|
+
# field[0]=item1&field[1]=item2&field[2]=item3
|
42
|
+
#
|
43
|
+
# There are two major problems with this technique:
|
44
|
+
#
|
45
|
+
# * Entities are addressed by array index, which is not stable and can
|
46
|
+
# easily result in unexpected results between two different requests.
|
47
|
+
#
|
48
|
+
# * A replacement of the array's contents is ambiguous with setting a
|
49
|
+
# subset of the array. Because of this, the only way to shorten an
|
50
|
+
# array is to unset it completely by making sure it goes into the
|
51
|
+
# server as an empty string, then setting its contents again.
|
52
|
+
#
|
53
|
+
# We're trying to get this overturned on the server side, but for now,
|
54
|
+
# patch in a special allowance.
|
55
|
+
def self.serialize_params(obj, original_value=nil)
|
56
|
+
update_hash = StripeObject.serialize_params(obj, original_value)
|
57
|
+
case obj
|
58
|
+
when StripeObject
|
59
|
+
obj_values = obj.instance_variable_get(:@values)
|
60
|
+
obj_values.each do |k, v|
|
61
|
+
if k == :additional_owners && v.is_a?(Array)
|
62
|
+
update_hash[k] = serialize_additional_owners(obj, v)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
update_hash
|
67
|
+
end
|
68
|
+
|
30
69
|
def protected_fields
|
31
70
|
[:legal_entity]
|
32
71
|
end
|
@@ -47,5 +86,28 @@ module Stripe
|
|
47
86
|
end
|
48
87
|
|
49
88
|
ARGUMENT_NOT_PROVIDED = Object.new
|
89
|
+
|
90
|
+
private
|
91
|
+
|
92
|
+
def self.serialize_additional_owners(obj, value)
|
93
|
+
original_value = obj.instance_variable_get(:@original_values)[:additional_owners]
|
94
|
+
if original_value && original_value.length > value.length
|
95
|
+
# url params provide no mechanism for deleting an item in an array,
|
96
|
+
# just overwriting the whole array or adding new items. So let's not
|
97
|
+
# allow deleting without a full overwrite until we have a solution.
|
98
|
+
raise ArgumentError.new(
|
99
|
+
"You cannot delete an item from an array, you must instead set a new array"
|
100
|
+
)
|
101
|
+
end
|
102
|
+
|
103
|
+
update_hash = {}
|
104
|
+
value.each_with_index do |v, i|
|
105
|
+
update = StripeObject.serialize_params(v)
|
106
|
+
if update != {} && (!original_value || update != original_value[i])
|
107
|
+
update_hash[i.to_s] = update
|
108
|
+
end
|
109
|
+
end
|
110
|
+
update_hash
|
111
|
+
end
|
50
112
|
end
|
51
113
|
end
|
data/lib/stripe/stripe_object.rb
CHANGED
@@ -170,6 +170,13 @@ module Stripe
|
|
170
170
|
case obj
|
171
171
|
when nil
|
172
172
|
''
|
173
|
+
when Array
|
174
|
+
update = obj.map { |v| serialize_params(v) }
|
175
|
+
if original_value != update
|
176
|
+
update
|
177
|
+
else
|
178
|
+
nil
|
179
|
+
end
|
173
180
|
when StripeObject
|
174
181
|
unsaved_keys = obj.instance_variable_get(:@unsaved_values)
|
175
182
|
obj_values = obj.instance_variable_get(:@values)
|
@@ -180,37 +187,23 @@ module Stripe
|
|
180
187
|
end
|
181
188
|
|
182
189
|
obj_values.each do |k, v|
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
190
|
+
if v.is_a?(Array)
|
191
|
+
original_value = obj.instance_variable_get(:@original_values)[k]
|
192
|
+
|
193
|
+
# the conditional here tests whether the old and new values are
|
194
|
+
# different (and therefore needs an update), or the same (meaning
|
195
|
+
# we can leave it out of the request)
|
196
|
+
if updated = serialize_params(v, original_value)
|
197
|
+
update_hash[k] = updated
|
198
|
+
else
|
199
|
+
update_hash.delete(k)
|
200
|
+
end
|
201
|
+
elsif v.is_a?(StripeObject) || v.is_a?(Hash)
|
202
|
+
update_hash[k] = obj.serialize_nested_object(k)
|
196
203
|
end
|
197
204
|
end
|
198
205
|
|
199
206
|
update_hash
|
200
|
-
when Array
|
201
|
-
update_hash = {}
|
202
|
-
obj.each_with_index do |value, index|
|
203
|
-
update = serialize_params(value)
|
204
|
-
if update != {} && (!original_value || update != original_value[index])
|
205
|
-
update_hash[index] = update
|
206
|
-
end
|
207
|
-
end
|
208
|
-
|
209
|
-
if update_hash == {}
|
210
|
-
nil
|
211
|
-
else
|
212
|
-
update_hash
|
213
|
-
end
|
214
207
|
else
|
215
208
|
obj
|
216
209
|
end
|
data/lib/stripe/util.rb
CHANGED
@@ -116,7 +116,10 @@ module Stripe
|
|
116
116
|
|
117
117
|
def self.flatten_params(params, parent_key=nil)
|
118
118
|
result = []
|
119
|
-
|
119
|
+
|
120
|
+
# do not sort the final output because arrays (and arrays of hashes
|
121
|
+
# especially) can be order sensitive, but do sort incoming parameters
|
122
|
+
params.sort_by { |(k, v)| k.to_s }.each do |key, value|
|
120
123
|
calculated_key = parent_key ? "#{parent_key}[#{key}]" : "#{key}"
|
121
124
|
if value.is_a?(Hash)
|
122
125
|
result += flatten_params(value, calculated_key)
|
data/lib/stripe/version.rb
CHANGED
data/stripe.gemspec
CHANGED
@@ -20,6 +20,14 @@ spec = Gem::Specification.new do |s|
|
|
20
20
|
s.add_development_dependency('test-unit')
|
21
21
|
s.add_development_dependency('rake')
|
22
22
|
|
23
|
+
# to avoid problems, bring Byebug in on just versions of Ruby under which
|
24
|
+
# it's known to work well
|
25
|
+
if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.0.0')
|
26
|
+
s.add_development_dependency("byebug")
|
27
|
+
s.add_development_dependency("pry")
|
28
|
+
s.add_development_dependency("pry-byebug")
|
29
|
+
end
|
30
|
+
|
23
31
|
s.files = `git ls-files`.split("\n")
|
24
32
|
s.test_files = `git ls-files -- test/*`.split("\n")
|
25
33
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
data/test/stripe/account_test.rb
CHANGED
@@ -68,7 +68,7 @@ module Stripe
|
|
68
68
|
|
69
69
|
@mock.expects(:post).
|
70
70
|
once.
|
71
|
-
with('https://api.stripe.com/v1/accounts/acct_foo', nil, 'legal_entity[
|
71
|
+
with('https://api.stripe.com/v1/accounts/acct_foo', nil, 'legal_entity[address][line1]=2+Three+Four&legal_entity[first_name]=Bob').
|
72
72
|
returns(make_response(resp))
|
73
73
|
|
74
74
|
a = Stripe::Account.retrieve('acct_foo')
|
@@ -151,5 +151,102 @@ module Stripe
|
|
151
151
|
a = Stripe::Account.retrieve
|
152
152
|
assert_equal(BankAccount, a.external_accounts.data[0].class)
|
153
153
|
end
|
154
|
+
|
155
|
+
should "#serialize_params an a new additional_owners" do
|
156
|
+
obj = Stripe::Util.convert_to_stripe_object({
|
157
|
+
:object => "account",
|
158
|
+
:legal_entity => {
|
159
|
+
},
|
160
|
+
}, {})
|
161
|
+
obj.legal_entity.additional_owners = [
|
162
|
+
{ :first_name => "Joe" },
|
163
|
+
{ :first_name => "Jane" },
|
164
|
+
]
|
165
|
+
|
166
|
+
expected = {
|
167
|
+
:legal_entity => {
|
168
|
+
:additional_owners => {
|
169
|
+
"0" => { :first_name => "Joe" },
|
170
|
+
"1" => { :first_name => "Jane" },
|
171
|
+
}
|
172
|
+
}
|
173
|
+
}
|
174
|
+
assert_equal(expected, obj.class.serialize_params(obj))
|
175
|
+
end
|
176
|
+
|
177
|
+
should "#serialize_params on an partially changed additional_owners" do
|
178
|
+
obj = Stripe::Util.convert_to_stripe_object({
|
179
|
+
:object => "account",
|
180
|
+
:legal_entity => {
|
181
|
+
:additional_owners => [
|
182
|
+
Stripe::StripeObject.construct_from({
|
183
|
+
:first_name => "Joe"
|
184
|
+
}),
|
185
|
+
Stripe::StripeObject.construct_from({
|
186
|
+
:first_name => "Jane"
|
187
|
+
}),
|
188
|
+
]
|
189
|
+
}
|
190
|
+
}, {})
|
191
|
+
obj.legal_entity.additional_owners[1].first_name = "Stripe"
|
192
|
+
|
193
|
+
expected = {
|
194
|
+
:legal_entity => {
|
195
|
+
:additional_owners => {
|
196
|
+
"1" => { :first_name => "Stripe" }
|
197
|
+
}
|
198
|
+
}
|
199
|
+
}
|
200
|
+
assert_equal(expected, obj.class.serialize_params(obj))
|
201
|
+
end
|
202
|
+
|
203
|
+
should "#serialize_params on an unchanged additional_owners" do
|
204
|
+
obj = Stripe::Util.convert_to_stripe_object({
|
205
|
+
:object => "account",
|
206
|
+
:legal_entity => {
|
207
|
+
:additional_owners => [
|
208
|
+
Stripe::StripeObject.construct_from({
|
209
|
+
:first_name => "Joe"
|
210
|
+
}),
|
211
|
+
Stripe::StripeObject.construct_from({
|
212
|
+
:first_name => "Jane"
|
213
|
+
}),
|
214
|
+
]
|
215
|
+
}
|
216
|
+
}, {})
|
217
|
+
|
218
|
+
expected = {
|
219
|
+
:legal_entity => {
|
220
|
+
:additional_owners => {}
|
221
|
+
}
|
222
|
+
}
|
223
|
+
assert_equal(expected, obj.class.serialize_params(obj))
|
224
|
+
end
|
225
|
+
|
226
|
+
# Note that the empty string that we send for this one has a special
|
227
|
+
# meaning for the server, which interprets it as an array unset.
|
228
|
+
should "#serialize_params on an unset additional_owners" do
|
229
|
+
obj = Stripe::Util.convert_to_stripe_object({
|
230
|
+
:object => "account",
|
231
|
+
:legal_entity => {
|
232
|
+
:additional_owners => [
|
233
|
+
Stripe::StripeObject.construct_from({
|
234
|
+
:first_name => "Joe"
|
235
|
+
}),
|
236
|
+
Stripe::StripeObject.construct_from({
|
237
|
+
:first_name => "Jane"
|
238
|
+
}),
|
239
|
+
]
|
240
|
+
}
|
241
|
+
}, {})
|
242
|
+
obj.legal_entity.additional_owners = nil
|
243
|
+
|
244
|
+
expected = {
|
245
|
+
:legal_entity => {
|
246
|
+
:additional_owners => ""
|
247
|
+
}
|
248
|
+
}
|
249
|
+
assert_equal(expected, obj.class.serialize_params(obj))
|
250
|
+
end
|
154
251
|
end
|
155
252
|
end
|
@@ -99,5 +99,82 @@ module Stripe
|
|
99
99
|
# it to something more useful).
|
100
100
|
assert_equal opts, source.instance_variable_get(:@opts)
|
101
101
|
end
|
102
|
+
|
103
|
+
should "#serialize_params on an empty object" do
|
104
|
+
obj = Stripe::StripeObject.construct_from({})
|
105
|
+
assert_equal({}, Stripe::StripeObject.serialize_params(obj))
|
106
|
+
end
|
107
|
+
|
108
|
+
should "#serialize_params on a basic object" do
|
109
|
+
obj = Stripe::StripeObject.construct_from({ :foo => nil })
|
110
|
+
obj.update_attributes(:foo => "bar")
|
111
|
+
assert_equal({ :foo => "bar" }, Stripe::StripeObject.serialize_params(obj))
|
112
|
+
end
|
113
|
+
|
114
|
+
should "#serialize_params on a more complex object" do
|
115
|
+
obj = Stripe::StripeObject.construct_from({
|
116
|
+
:foo => Stripe::StripeObject.construct_from({
|
117
|
+
:bar => nil,
|
118
|
+
:baz => nil,
|
119
|
+
}),
|
120
|
+
})
|
121
|
+
obj.foo.bar = "newbar"
|
122
|
+
assert_equal({ :foo => { :bar => "newbar" } },
|
123
|
+
Stripe::StripeObject.serialize_params(obj))
|
124
|
+
end
|
125
|
+
|
126
|
+
should "#serialize_params on an array" do
|
127
|
+
obj = Stripe::StripeObject.construct_from({
|
128
|
+
:foo => nil,
|
129
|
+
})
|
130
|
+
obj.foo = ["new-value"]
|
131
|
+
assert_equal({ :foo => ["new-value"] },
|
132
|
+
Stripe::StripeObject.serialize_params(obj))
|
133
|
+
end
|
134
|
+
|
135
|
+
should "#serialize_params on an array that shortens" do
|
136
|
+
obj = Stripe::StripeObject.construct_from({
|
137
|
+
:foo => ["0-index", "1-index", "2-index"],
|
138
|
+
})
|
139
|
+
obj.foo = ["new-value"]
|
140
|
+
assert_equal({ :foo => ["new-value"] },
|
141
|
+
Stripe::StripeObject.serialize_params(obj))
|
142
|
+
end
|
143
|
+
|
144
|
+
should "#serialize_params on an array that lengthens" do
|
145
|
+
obj = Stripe::StripeObject.construct_from({
|
146
|
+
:foo => ["0-index", "1-index", "2-index"],
|
147
|
+
})
|
148
|
+
obj.foo = ["new-value"] * 4
|
149
|
+
assert_equal({ :foo => ["new-value"] * 4 },
|
150
|
+
Stripe::StripeObject.serialize_params(obj))
|
151
|
+
end
|
152
|
+
|
153
|
+
should "#serialize_params on an array of hashes" do
|
154
|
+
obj = Stripe::StripeObject.construct_from({
|
155
|
+
:foo => nil,
|
156
|
+
})
|
157
|
+
obj.foo = [
|
158
|
+
Stripe::StripeObject.construct_from({
|
159
|
+
:bar => nil
|
160
|
+
})
|
161
|
+
]
|
162
|
+
obj.foo[0].bar = "baz"
|
163
|
+
assert_equal({ :foo => [{ :bar => "baz" }] },
|
164
|
+
Stripe::StripeObject.serialize_params(obj))
|
165
|
+
end
|
166
|
+
|
167
|
+
should "#serialize_params doesn't include unchanged values" do
|
168
|
+
obj = Stripe::StripeObject.construct_from({ :foo => nil })
|
169
|
+
assert_equal({}, Stripe::StripeObject.serialize_params(obj))
|
170
|
+
end
|
171
|
+
|
172
|
+
should "#serialize_params on an array that is unchanged" do
|
173
|
+
obj = Stripe::StripeObject.construct_from({
|
174
|
+
:foo => ["0-index", "1-index", "2-index"],
|
175
|
+
})
|
176
|
+
obj.foo = ["0-index", "1-index", "2-index"]
|
177
|
+
assert_equal({}, Stripe::StripeObject.serialize_params(obj))
|
178
|
+
end
|
102
179
|
end
|
103
180
|
end
|
data/test/stripe/util_test.rb
CHANGED
@@ -10,6 +10,9 @@ module Stripe
|
|
10
10
|
[:c, "bar&baz"],
|
11
11
|
[:d, { :a => "a", :b => "b" }],
|
12
12
|
[:e, [0, 1]],
|
13
|
+
|
14
|
+
# note the empty hash won't even show up in the request
|
15
|
+
[:f, []]
|
13
16
|
]
|
14
17
|
assert_equal(
|
15
18
|
"a=3&b=%2Bfoo%3F&c=bar%26baz&d[a]=a&d[b]=b&e[]=0&e[]=1",
|
@@ -33,8 +36,8 @@ module Stripe
|
|
33
36
|
[:d, { :a => "a", :b => "b" }],
|
34
37
|
[:e, [0, 1]],
|
35
38
|
[:f, [
|
36
|
-
{ :
|
37
|
-
{ :
|
39
|
+
{ :bar => "1", :foo => "2" },
|
40
|
+
{ :baz => "3", :foo => "4" },
|
38
41
|
]],
|
39
42
|
]
|
40
43
|
assert_equal([
|
@@ -49,10 +52,10 @@ module Stripe
|
|
49
52
|
# *The key here is the order*. In order to be properly interpreted as
|
50
53
|
# an array of hashes on the server, everything from a single hash must
|
51
54
|
# come in at once. A duplicate key in an array triggers a new element.
|
52
|
-
["f[][
|
53
|
-
["f[][
|
54
|
-
["f[][
|
55
|
-
["f[][
|
55
|
+
["f[][bar]", "1"],
|
56
|
+
["f[][foo]", "2"],
|
57
|
+
["f[][baz]", "3"],
|
58
|
+
["f[][foo]", "4"],
|
56
59
|
], Stripe::Util.flatten_params(params))
|
57
60
|
end
|
58
61
|
|
@@ -84,5 +87,31 @@ module Stripe
|
|
84
87
|
assert_raise { Stripe::Util.normalize_opts(nil) }
|
85
88
|
assert_raise { Stripe::Util.normalize_opts(:api_key => nil) }
|
86
89
|
end
|
90
|
+
|
91
|
+
should "#convert_to_stripe_object should pass through unknown types" do
|
92
|
+
obj = Util.convert_to_stripe_object(7, {})
|
93
|
+
assert_equal 7, obj
|
94
|
+
end
|
95
|
+
|
96
|
+
should "#convert_to_stripe_object should turn hashes into StripeObjects" do
|
97
|
+
obj = Util.convert_to_stripe_object({ :foo => "bar" }, {})
|
98
|
+
assert obj.is_a?(StripeObject)
|
99
|
+
assert_equal "bar", obj.foo
|
100
|
+
end
|
101
|
+
|
102
|
+
should "#convert_to_stripe_object should turn lists into ListObjects" do
|
103
|
+
obj = Util.convert_to_stripe_object({ :object => "list" }, {})
|
104
|
+
assert obj.is_a?(ListObject)
|
105
|
+
end
|
106
|
+
|
107
|
+
should "#convert_to_stripe_object should marshal other classes" do
|
108
|
+
obj = Util.convert_to_stripe_object({ :object => "account" }, {})
|
109
|
+
assert obj.is_a?(Account)
|
110
|
+
end
|
111
|
+
|
112
|
+
should "#convert_to_stripe_object should marshal arrays" do
|
113
|
+
obj = Util.convert_to_stripe_object([1, 2, 3], {})
|
114
|
+
assert_equal [1, 2, 3], obj
|
115
|
+
end
|
87
116
|
end
|
88
117
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stripe
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.30.
|
4
|
+
version: 1.30.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ross Boucher
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-10-
|
12
|
+
date: 2015-10-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|
@@ -95,6 +95,48 @@ dependencies:
|
|
95
95
|
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: byebug
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: pry
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: pry-byebug
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
133
|
+
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
98
140
|
description: Stripe is the easiest way to accept payments online. See https://stripe.com
|
99
141
|
for details.
|
100
142
|
email:
|