stripe 1.23.0 → 1.24.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8bf9ef8e5a7343b1993b9b828ff317326bf78591
4
- data.tar.gz: fdae2b4926156adfa71f047dd830f1ff1032c3a8
3
+ metadata.gz: 7ecbd18ba821963c6f74fe3f77824f17abc2fe69
4
+ data.tar.gz: 88b6c051bb7a499cd1b0fe9ca017c56ee6ad3290
5
5
  SHA512:
6
- metadata.gz: 5628f1bdbf7b87c0ed664944d60373923741d286bf26e037224a99039930a542beddd15f86304b081cdfd80619926719bee81302ba8a5b2e4823df763b9024fb
7
- data.tar.gz: 20de174deab2c119dd0521cf700354a7d90cdbd948ef2980ef65d50678edccb54b5f9ff7eb62359d857b770671c3f28059aab40eed62ee2e8d1671ff8457e5d0
6
+ metadata.gz: 8bcd08d62d22be5862e078ec20c574c2dde8045ebc4a9897853dbf695909e5a62ac9ea8cd417d9385aeba2078ff42ab9221f55e10aa9412f7d43a9fc5ca099d3
7
+ data.tar.gz: 09b0cb29cba10c861f4453cb648df2dacea2e7d1424ad1a1b141083b6ff5cb3f5cfbd105665aa22c98777e7df1e8d095733e4188c9eb16f911cf1d475453137a
@@ -1,3 +1,9 @@
1
+ === 1.24.0 2015-08-03
2
+
3
+ * Added support for deleting managed accounts
4
+ * Added support for dispute listing and retrieval
5
+ * Bugfix: token objects now are the correct class
6
+
1
7
  === 1.23.0 2015-07-06
2
8
 
3
9
  * Added request IDs and HTTP headers to errors.
@@ -1,4 +1,4 @@
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] {<img src="https://gemnasium.com/stripe/stripe-ruby.png" alt="Dependency Status" />}[https://gemnasium.com/stripe/stripe-ruby]
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
3
  == Documentation
4
4
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.23.0
1
+ 1.24.0
@@ -48,6 +48,7 @@ require 'stripe/reversal'
48
48
  require 'stripe/application_fee_refund'
49
49
  require 'stripe/bitcoin_receiver'
50
50
  require 'stripe/bitcoin_transaction'
51
+ require 'stripe/dispute'
51
52
 
52
53
  # Errors
53
54
  require 'stripe/errors/stripe_error'
@@ -66,9 +67,12 @@ module Stripe
66
67
  @ssl_bundle_path = DEFAULT_CA_BUNDLE_PATH
67
68
  @verify_ssl_certs = true
68
69
 
70
+ @open_timeout = 30
71
+ @read_timeout = 80
69
72
 
70
73
  class << self
71
- attr_accessor :api_key, :api_base, :verify_ssl_certs, :api_version, :connect_base, :uploads_base
74
+ attr_accessor :api_key, :api_base, :verify_ssl_certs, :api_version, :connect_base, :uploads_base,
75
+ :open_timeout, :read_timeout
72
76
  end
73
77
 
74
78
  def self.api_url(url='', api_base_url=nil)
@@ -123,8 +127,8 @@ module Stripe
123
127
  end
124
128
 
125
129
  request_opts.update(:headers => request_headers(api_key).update(headers),
126
- :method => method, :open_timeout => 30,
127
- :payload => payload, :url => url, :timeout => 80)
130
+ :method => method, :open_timeout => open_timeout,
131
+ :payload => payload, :url => url, :timeout => read_timeout)
128
132
 
129
133
  begin
130
134
  response = execute_request(request_opts)
@@ -1,6 +1,7 @@
1
1
  module Stripe
2
2
  class Account < APIResource
3
3
  include Stripe::APIOperations::Create
4
+ include Stripe::APIOperations::Delete
4
5
  include Stripe::APIOperations::List
5
6
  include Stripe::APIOperations::Update
6
7
 
@@ -0,0 +1,16 @@
1
+ module Stripe
2
+ class Dispute < APIResource
3
+ include Stripe::APIOperations::List
4
+ include Stripe::APIOperations::Create
5
+ include Stripe::APIOperations::Update
6
+
7
+ def close(params={}, opts={})
8
+ response, opts = request(:post, close_url, params, opts)
9
+ refresh_from(response, opts)
10
+ end
11
+
12
+ def close_url
13
+ url + '/close'
14
+ end
15
+ end
16
+ end
@@ -16,7 +16,8 @@ module Stripe
16
16
  end
17
17
 
18
18
  def retrieve(id, opts={})
19
- response, opts = request(:get,"#{url}/#{CGI.escape(id)}", {}, opts)
19
+ id, retrieve_params = Util.normalize_id(id)
20
+ response, opts = request(:get,"#{url}/#{CGI.escape(id)}", retrieve_params, opts)
20
21
  Util.convert_to_stripe_object(response, opts)
21
22
  end
22
23
 
@@ -10,15 +10,7 @@ module Stripe
10
10
  end
11
11
 
12
12
  def initialize(id=nil, opts={})
13
- # parameter overloading!
14
- if id.kind_of?(Hash)
15
- @retrieve_params = id.dup
16
- @retrieve_params.delete(:id)
17
- id = id[:id]
18
- else
19
- @retrieve_params = {}
20
- end
21
-
13
+ id, @retrieve_params = Util.normalize_id(id)
22
14
  @opts = opts
23
15
  @values = {}
24
16
  # This really belongs in APIResource, but not putting it there allows us
@@ -39,10 +39,12 @@ module Stripe
39
39
  'refund' => Refund,
40
40
  'subscription' => Subscription,
41
41
  'file_upload' => FileUpload,
42
+ 'token' => Token,
42
43
  'transfer' => Transfer,
43
44
  'transfer_reversal' => Reversal,
44
45
  'bitcoin_receiver' => BitcoinReceiver,
45
- 'bitcoin_transaction' => BitcoinTransaction
46
+ 'bitcoin_transaction' => BitcoinTransaction,
47
+ 'dispute' => Dispute
46
48
  }
47
49
  end
48
50
 
@@ -110,7 +112,7 @@ module Stripe
110
112
  result = []
111
113
  value.each do |elem|
112
114
  if elem.is_a?(Hash)
113
- result += flatten_params(elem, calculated_key)
115
+ result += flatten_params(elem, "#{calculated_key}[]")
114
116
  elsif elem.is_a?(Array)
115
117
  result += flatten_params_array(elem, calculated_key)
116
118
  else
@@ -120,6 +122,16 @@ module Stripe
120
122
  result
121
123
  end
122
124
 
125
+ def self.normalize_id(id)
126
+ if id.kind_of?(Hash) # overloaded id
127
+ params_hash = id.dup
128
+ id = params_hash.delete(:id)
129
+ else
130
+ params_hash = {}
131
+ end
132
+ [id, params_hash]
133
+ end
134
+
123
135
  # The secondary opts argument can either be a string or hash
124
136
  # Turn this value into an api_key and a set of headers
125
137
  def self.normalize_opts(opts)
@@ -1,3 +1,3 @@
1
1
  module Stripe
2
- VERSION = '1.23.0'
2
+ VERSION = '1.24.0'
3
3
  end
@@ -93,6 +93,19 @@ module Stripe
93
93
  ch.refresh
94
94
  end
95
95
 
96
+ should "send expand when fetching through ListObject" do
97
+ @mock.expects(:get).once.
98
+ with("#{Stripe.api_base}/v1/customers/c_test_customer", nil, nil).
99
+ returns(make_response(make_customer))
100
+
101
+ @mock.expects(:get).once.
102
+ with("#{Stripe.api_base}/v1/customers/c_test_customer/sources/cc_test_card?expand[]=customer", nil, nil).
103
+ returns(make_response(make_card))
104
+
105
+ customer = Stripe::Customer.retrieve('c_test_customer')
106
+ customer.sources.retrieve({:id => 'cc_test_card', :expand => [:customer]})
107
+ end
108
+
96
109
  should "send stripe account as header when set" do
97
110
  stripe_account = "acct_0000"
98
111
  Stripe.expects(:execute_request).with do |opts|
@@ -112,6 +125,29 @@ module Stripe
112
125
  'sk_test_local')
113
126
  end
114
127
 
128
+ should "have default open and read timeouts" do
129
+ assert_equal Stripe.open_timeout, 30
130
+ assert_equal Stripe.read_timeout, 80
131
+ end
132
+
133
+ should "allow configurable open and read timeouts" do
134
+ original_timeouts = Stripe.open_timeout, Stripe.read_timeout
135
+
136
+ begin
137
+ Stripe.open_timeout = 999
138
+ Stripe.read_timeout = 998
139
+
140
+ Stripe.expects(:execute_request).with do |opts|
141
+ opts[:open_timeout] == 999 && opts[:timeout] == 998
142
+ end.returns(make_response(make_charge))
143
+
144
+ Stripe::Charge.create({:card => {:number => '4242424242424242'}},
145
+ 'sk_test_local')
146
+ ensure
147
+ Stripe.open_timeout, Stripe.read_timeout = original_timeouts
148
+ end
149
+ end
150
+
115
151
  context "when specifying per-object credentials" do
116
152
  context "with no global API key set" do
117
153
  should "use the per-object credential when creating" do
@@ -95,5 +95,24 @@ module Stripe
95
95
  })
96
96
  assert c.paid
97
97
  end
98
+
99
+ should "properly handle an array or dictionaries" do
100
+ @mock.expects(:post).with do |url, api_key, params|
101
+ url == "#{Stripe.api_base}/v1/charges" && api_key.nil? && CGI.parse(params) == {
102
+ 'currency' => ['usd'], 'amount' => ['100'],
103
+ 'source' => ['btcrcv_test_receiver'],
104
+ 'level3[][red]' => ['firstred', 'another'],
105
+ 'level3[][one]' => ['fish'],
106
+ }
107
+ end.once.returns(make_response(make_charge))
108
+
109
+ c = Stripe::Charge.create({
110
+ :amount => 100,
111
+ :source => 'btcrcv_test_receiver',
112
+ :currency => "usd",
113
+ :level3 => [{:red => 'firstred'}, {:one => 'fish', :red => 'another'}]
114
+ })
115
+ assert c.paid
116
+ end
98
117
  end
99
118
  end
@@ -0,0 +1,45 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ module Stripe
4
+ class DisputeTest < Test::Unit::TestCase
5
+ should "disputes should be retrievable" do
6
+ @mock.expects(:get).once.returns(make_response(make_dispute))
7
+ d = Stripe::Dispute.retrieve('dp_test_dispute')
8
+ assert d.kind_of?(Stripe::Dispute)
9
+ end
10
+
11
+ should "disputes should be listable" do
12
+ @mock.expects(:get).once.returns(make_response(make_dispute_array))
13
+ d = Stripe::Dispute.all
14
+ assert d.data.kind_of? Array
15
+ d.each do |dispute|
16
+ assert dispute.kind_of?(Stripe::Dispute)
17
+ end
18
+ end
19
+
20
+ should "disputes should be closeable" do
21
+ @mock.expects(:get).never
22
+ @mock.expects(:post).with(
23
+ "#{Stripe.api_base}/v1/disputes/test_dispute/close",
24
+ nil,
25
+ ''
26
+ ).once.returns(make_response({:id => 'dp_test_dispute', :status => 'lost'}))
27
+ d = Stripe::Dispute.new('test_dispute')
28
+ d.close
29
+ end
30
+
31
+ should "disputes should be updateable" do
32
+ @mock.expects(:get).once.returns(make_response(make_dispute))
33
+ @mock.expects(:post).with(
34
+ "#{Stripe.api_base}/v1/disputes/dp_test_dispute",
35
+ nil,
36
+ 'evidence[customer_name]=customer'
37
+ ).once.returns(make_response(make_dispute))
38
+
39
+ d = Stripe::Dispute.new('test_dispute')
40
+ d.refresh
41
+ d.evidence['customer_name'] = 'customer'
42
+ d.save
43
+ end
44
+ end
45
+ end
@@ -156,6 +156,31 @@ module Stripe
156
156
  }
157
157
  end
158
158
 
159
+
160
+ def make_dispute(params={})
161
+ id = params[:id] || 'dp_test_dispute'
162
+ {
163
+ :id => id,
164
+ :charge => "ch_test_charge",
165
+ :amount => 500,
166
+ :created => 1304114758,
167
+ :status => 'needs_response',
168
+ :livemode => false,
169
+ :currency => 'usd',
170
+ :object => 'dispute',
171
+ :reason => 'fraudulent',
172
+ :evidence => {},
173
+ }.merge(params)
174
+ end
175
+
176
+ def make_dispute_array
177
+ {
178
+ :data => [make_dispute, make_dispute, make_dispute],
179
+ :object => 'list',
180
+ :url => '/v1/disputes'
181
+ }
182
+ end
183
+
159
184
  def make_recipient_card_array(recipient_id)
160
185
  {
161
186
  :data => [make_card, make_card, make_card],
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.23.0
4
+ version: 1.24.0
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-07-07 00:00:00.000000000 Z
12
+ date: 2015-08-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
@@ -138,6 +138,7 @@ files:
138
138
  - lib/stripe/charge.rb
139
139
  - lib/stripe/coupon.rb
140
140
  - lib/stripe/customer.rb
141
+ - lib/stripe/dispute.rb
141
142
  - lib/stripe/errors/api_connection_error.rb
142
143
  - lib/stripe/errors/api_error.rb
143
144
  - lib/stripe/errors/authentication_error.rb
@@ -171,6 +172,7 @@ files:
171
172
  - test/stripe/coupon_test.rb
172
173
  - test/stripe/customer_card_test.rb
173
174
  - test/stripe/customer_test.rb
175
+ - test/stripe/dispute_test.rb
174
176
  - test/stripe/file_upload_test.rb
175
177
  - test/stripe/invoice_test.rb
176
178
  - test/stripe/list_object_test.rb
@@ -219,6 +221,7 @@ test_files:
219
221
  - test/stripe/coupon_test.rb
220
222
  - test/stripe/customer_card_test.rb
221
223
  - test/stripe/customer_test.rb
224
+ - test/stripe/dispute_test.rb
222
225
  - test/stripe/file_upload_test.rb
223
226
  - test/stripe/invoice_test.rb
224
227
  - test/stripe/list_object_test.rb