stripe 1.7.11 → 1.8.1

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,14 @@
1
+ === 1.8.1 2013-04-19
2
+
3
+ * 1 minor enhancement:
4
+ * Add support for specifying an API key when retrieving an upcoming invoice
5
+
6
+ === 1.8.0 2013-04-11
7
+
8
+ * 1 major enhancement:
9
+ * Add new Recipient API resource
10
+ * Allow Transfers to be createable
11
+
1
12
  === 1.7.11 2013-02-21
2
13
  * Add 'id' to the list of permanent attributes
3
14
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.7.11
1
+ 1.8.1
data/lib/stripe.rb CHANGED
@@ -2,10 +2,7 @@
2
2
  # API spec at https://stripe.com/docs/api
3
3
  require 'cgi'
4
4
  require 'set'
5
- require 'rubygems'
6
5
  require 'openssl'
7
-
8
- gem 'rest-client', '~> 1.4'
9
6
  require 'rest_client'
10
7
  require 'multi_json'
11
8
 
@@ -35,6 +32,7 @@ require 'stripe/coupon'
35
32
  require 'stripe/token'
36
33
  require 'stripe/event'
37
34
  require 'stripe/transfer'
35
+ require 'stripe/recipient'
38
36
 
39
37
  # Errors
40
38
  require 'stripe/errors/stripe_error'
@@ -127,7 +125,7 @@ module Stripe
127
125
  # Make params into GET parameters
128
126
  if params && params.count > 0
129
127
  query_string = Util.flatten_params(params).collect{|key, value| "#{key}=#{Util.url_encode(value)}"}.join('&')
130
- url += "?#{query_string}"
128
+ url += "#{URI.parse(url).query ? '&' : '?'}#{query_string}"
131
129
  end
132
130
  payload = nil
133
131
  else
@@ -4,8 +4,8 @@ module Stripe
4
4
  include Stripe::APIOperations::Update
5
5
  include Stripe::APIOperations::Create
6
6
 
7
- def self.upcoming(params)
8
- response, api_key = Stripe.request(:get, upcoming_url, @api_key, params)
7
+ def self.upcoming(params, api_key = nil)
8
+ response, api_key = Stripe.request(:get, upcoming_url, api_key, params)
9
9
  Util.convert_to_stripe_object(response, api_key)
10
10
  end
11
11
 
@@ -0,0 +1,12 @@
1
+ module Stripe
2
+ class Recipient < APIResource
3
+ include Stripe::APIOperations::Create
4
+ include Stripe::APIOperations::Delete
5
+ include Stripe::APIOperations::Update
6
+ include Stripe::APIOperations::List
7
+
8
+ def transfers
9
+ Transfer.all({ :recipient => id }, @api_key)
10
+ end
11
+ end
12
+ end
@@ -1,5 +1,6 @@
1
1
  module Stripe
2
2
  class Transfer < APIResource
3
3
  include Stripe::APIOperations::List
4
+ include Stripe::APIOperations::Create
4
5
  end
5
6
  end
data/lib/stripe/util.rb CHANGED
@@ -25,6 +25,7 @@ module Stripe
25
25
  'coupon' => Coupon,
26
26
  'event' => Event,
27
27
  'transfer' => Transfer,
28
+ 'recipient' => Recipient,
28
29
  'list' => ListObject
29
30
  }
30
31
  case resp
@@ -1,3 +1,3 @@
1
1
  module Stripe
2
- VERSION = '1.7.11'
2
+ VERSION = '1.8.1'
3
3
  end
data/test/test_helper.rb CHANGED
@@ -189,6 +189,69 @@ def test_paid_invoice
189
189
  })
190
190
  end
191
191
 
192
+ def test_invoice_customer_array
193
+ {
194
+ :data => [test_invoice],
195
+ :object => 'list',
196
+ :url => '/v1/invoices?customer=test_customer'
197
+ }
198
+ end
199
+
200
+ def test_recipient(params={})
201
+ {
202
+ :name => "Stripe User",
203
+ :type => "individual",
204
+ :livemode => false,
205
+ :object => "recipient",
206
+ :id => "rp_test_recipient",
207
+ :active_account => {
208
+ :last4 => "6789",
209
+ :bank_name => "STRIPE TEST BANK",
210
+ :country => "US",
211
+ :object => "bank_account"
212
+ },
213
+ :created => 1304114758,
214
+ :verified => true
215
+ }.merge(params)
216
+ end
217
+
218
+ def test_recipient_array
219
+ {
220
+ :data => [test_recipient, test_recipient, test_recipient],
221
+ :object => 'list',
222
+ :url => '/v1/recipients'
223
+ }
224
+ end
225
+
226
+ def test_transfer(params={})
227
+ {
228
+ :status => 'pending',
229
+ :amount => 100,
230
+ :account => {
231
+ :object => 'bank_account',
232
+ :country => 'US',
233
+ :bank_name => 'STRIPE TEST BANK',
234
+ :last4 => '6789'
235
+ },
236
+ :recipient => 'test_recipient',
237
+ :fee => 0,
238
+ :fee_details => [],
239
+ :id => "tr_test_transfer",
240
+ :livemode => false,
241
+ :currency => "usd",
242
+ :object => "transfer",
243
+ :date => 1304114826
244
+ }.merge(params)
245
+ end
246
+
247
+ def test_transfer_array
248
+ {
249
+ :data => [test_transfer, test_transfer, test_transfer],
250
+ :object => 'list',
251
+ :url => '/v1/transfers'
252
+ }
253
+ end
254
+
192
255
  def test_invalid_api_key_error
193
256
  {
194
257
  "error" => {
data/test/test_stripe.rb CHANGED
@@ -120,6 +120,15 @@ class TestStripeRuby < Test::Unit::TestCase
120
120
  assert charges.kind_of? Array
121
121
  end
122
122
 
123
+ should "construct URL properly with base query parameters" do
124
+ response = test_response(test_invoice_customer_array)
125
+ @mock.expects(:get).with("#{Stripe.api_base}/v1/invoices?customer=test_customer", nil, nil).returns(response)
126
+ invoices = Stripe::Invoice.all(:customer => 'test_customer')
127
+
128
+ @mock.expects(:get).with("#{Stripe.api_base}/v1/invoices?customer=test_customer&paid=true", nil, nil).returns(response)
129
+ invoices.all(:paid => true)
130
+ end
131
+
123
132
  should "a 400 should give an InvalidRequestError with http status, body, and JSON body" do
124
133
  response = test_response(test_missing_id_error, 400)
125
134
  @mock.expects(:get).once.raises(RestClient::ExceptionWithResponse.new(response, 404))
@@ -468,6 +477,89 @@ class TestStripeRuby < Test::Unit::TestCase
468
477
  end
469
478
  end
470
479
 
480
+ context "transfer tests" do
481
+
482
+ should "transfers should be listable" do
483
+ @mock.expects(:get).once.returns(test_response(test_transfer_array))
484
+ t = Stripe::Transfer.all
485
+ assert t.data.kind_of? Array
486
+ t.each do |transfer|
487
+ assert transfer.kind_of?(Stripe::Transfer)
488
+ end
489
+ end
490
+
491
+ should "transfers should not be deletable" do
492
+ assert_raises NoMethodError do
493
+ @mock.expects(:get).once.returns(test_response(test_transfer))
494
+ t = Stripe::Transfer.retrieve("test_transfer")
495
+ t.delete
496
+ end
497
+ end
498
+
499
+ should "transfers should have BankAccount objects associated with their account property" do
500
+ @mock.expects(:get).once.returns(test_response(test_transfer))
501
+ t = Stripe::Transfer.retrieve("test_transfer")
502
+ assert t.account.kind_of?(Stripe::StripeObject) && t.account.object == 'bank_account'
503
+ end
504
+
505
+ should "create a transfer should return a new transfer when passed correct parameters" do
506
+ @mock.expects(:post).with do |url, api_key, params|
507
+ url == "#{Stripe.api_base}/v1/transfers" && api_key.nil? && CGI.parse(params) == {
508
+ 'currency' => ['usd'], 'amount' => ['100'],
509
+ 'recipient' => ['test_recipient']
510
+ }
511
+ end.once.returns(test_response(test_transfer))
512
+
513
+ t = Stripe::Transfer.create({
514
+ :amount => 100,
515
+ :currency => "usd",
516
+ :recipient => "test_recipient"
517
+ })
518
+
519
+ assert_equal 'pending', t.status
520
+ end
521
+
522
+ end
523
+
524
+ context "recipient tests" do
525
+
526
+ should "recipients should be listable" do
527
+ @mock.expects(:get).once.returns(test_response(test_recipient_array))
528
+ r = Stripe::Recipient.all.data
529
+ assert r.kind_of? Array
530
+ assert r[0].kind_of? Stripe::Recipient
531
+ end
532
+
533
+ should "recipients should be deletable" do
534
+ @mock.expects(:delete).once.returns(test_response(test_recipient({:deleted => true})))
535
+ r = Stripe::Recipient.new("test_recipient")
536
+ r.delete
537
+ assert r.deleted
538
+ end
539
+
540
+ should "recipients should be updateable" do
541
+ @mock.expects(:get).once.returns(test_response(test_recipient({:description => "foo"})))
542
+ @mock.expects(:post).once.returns(test_response(test_recipient({:description => "bar"})))
543
+ r = Stripe::Recipient.new("test_recipient").refresh
544
+ assert_equal r.description, "foo"
545
+ r.description = "bar"
546
+ r.save
547
+ assert_equal r.description, "bar"
548
+ end
549
+
550
+ should "recipients should have BankAccount objects associated with their active_account property" do
551
+ @mock.expects(:get).once.returns(test_response(test_recipient))
552
+ r = Stripe::Recipient.retrieve("test_recipient")
553
+ assert r.active_account.kind_of?(Stripe::StripeObject) && r.active_account.object == 'bank_account'
554
+ end
555
+
556
+ should "create should return a new recipient" do
557
+ @mock.expects(:post).once.returns(test_response(test_recipient))
558
+ r = Stripe::Recipient.create(:name => 'Stripe User', :type => 'individual')
559
+ assert_equal "rp_test_recipient", r.id
560
+ end
561
+ end
562
+
471
563
  context "error checking" do
472
564
 
473
565
  should "404s should raise an InvalidRequestError" do
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.7.11
4
+ version: 1.8.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-02-21 00:00:00.000000000 Z
13
+ date: 2013-04-19 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rest-client
17
- requirement: &70357453615120 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,15 @@ dependencies:
22
22
  version: '1.4'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70357453615120
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: '1.4'
26
31
  - !ruby/object:Gem::Dependency
27
32
  name: multi_json
28
- requirement: &70357453614600 !ruby/object:Gem::Requirement
33
+ requirement: !ruby/object:Gem::Requirement
29
34
  none: false
30
35
  requirements:
31
36
  - - ! '>='
@@ -36,10 +41,18 @@ dependencies:
36
41
  version: '2'
37
42
  type: :runtime
38
43
  prerelease: false
39
- version_requirements: *70357453614600
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ! '>='
48
+ - !ruby/object:Gem::Version
49
+ version: 1.0.4
50
+ - - <
51
+ - !ruby/object:Gem::Version
52
+ version: '2'
40
53
  - !ruby/object:Gem::Dependency
41
54
  name: mocha
42
- requirement: &70357453613960 !ruby/object:Gem::Requirement
55
+ requirement: !ruby/object:Gem::Requirement
43
56
  none: false
44
57
  requirements:
45
58
  - - ! '>='
@@ -47,10 +60,15 @@ dependencies:
47
60
  version: '0'
48
61
  type: :development
49
62
  prerelease: false
50
- version_requirements: *70357453613960
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
51
69
  - !ruby/object:Gem::Dependency
52
70
  name: shoulda
53
- requirement: &70357453613500 !ruby/object:Gem::Requirement
71
+ requirement: !ruby/object:Gem::Requirement
54
72
  none: false
55
73
  requirements:
56
74
  - - ! '>='
@@ -58,10 +76,15 @@ dependencies:
58
76
  version: '0'
59
77
  type: :development
60
78
  prerelease: false
61
- version_requirements: *70357453613500
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ! '>='
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
62
85
  - !ruby/object:Gem::Dependency
63
86
  name: test-unit
64
- requirement: &70357453613080 !ruby/object:Gem::Requirement
87
+ requirement: !ruby/object:Gem::Requirement
65
88
  none: false
66
89
  requirements:
67
90
  - - ! '>='
@@ -69,10 +92,15 @@ dependencies:
69
92
  version: '0'
70
93
  type: :development
71
94
  prerelease: false
72
- version_requirements: *70357453613080
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ! '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
73
101
  - !ruby/object:Gem::Dependency
74
102
  name: rake
75
- requirement: &70357453612660 !ruby/object:Gem::Requirement
103
+ requirement: !ruby/object:Gem::Requirement
76
104
  none: false
77
105
  requirements:
78
106
  - - ! '>='
@@ -80,7 +108,12 @@ dependencies:
80
108
  version: '0'
81
109
  type: :development
82
110
  prerelease: false
83
- version_requirements: *70357453612660
111
+ version_requirements: !ruby/object:Gem::Requirement
112
+ none: false
113
+ requirements:
114
+ - - ! '>='
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
84
117
  description: Stripe is the easiest way to accept payments online. See https://stripe.com
85
118
  for details.
86
119
  email:
@@ -127,6 +160,7 @@ files:
127
160
  - lib/stripe/json.rb
128
161
  - lib/stripe/list_object.rb
129
162
  - lib/stripe/plan.rb
163
+ - lib/stripe/recipient.rb
130
164
  - lib/stripe/singleton_api_resource.rb
131
165
  - lib/stripe/stripe_object.rb
132
166
  - lib/stripe/token.rb
@@ -157,7 +191,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
157
191
  version: '0'
158
192
  requirements: []
159
193
  rubyforge_project:
160
- rubygems_version: 1.8.15
194
+ rubygems_version: 1.8.23
161
195
  signing_key:
162
196
  specification_version: 3
163
197
  summary: Ruby bindings for the Stripe API