stripe 1.7.11 → 1.8.1

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/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