stripe 2.3.0 → 2.4.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: 2b491a85852c3b17ea12c480ae456f163e0862d9
4
- data.tar.gz: d1c4cefdc8963ebf96bf7e68c2319e55d95c04a1
3
+ metadata.gz: fa5a5d77a37b6f87fe0e40d1eb03072b82d0b4cf
4
+ data.tar.gz: aacdfe4bb67bdc6671e300a899a0e9cf037332ac
5
5
  SHA512:
6
- metadata.gz: 2d38841dad3272ef61d8658def6fbaf5b153c011a832f3e5a13c076bfd740a363e86980fb7cee7d89c693fd4c33a6f82e256a9d6fdd263ea53d03ef830aeebeb
7
- data.tar.gz: 8384f1ab4c1416cea101e424c431707ab10a703d986418c6aa77aa323feed629005532a8634ad6bb099195564a9727f7288693c1cb79d8bf02fe883507e103fd
6
+ metadata.gz: 79d65a44f1a015f5d052396ae54a7a103ff35821ea9b7e290e52f0aa35b5ed0e70f0e9c2230a0ee8cbc2e03508517a4d8bcad79e3248ce2d08a869febfa08207
7
+ data.tar.gz: c57103af7cdbf0026211c11a121764bb02f859d00ad822cb29ec49f5a45181274a06c6cb54f86fb9cb9a28e27231490e836b2b29dc4d62273387f66b79653b93
@@ -1,3 +1,7 @@
1
+ === 2.4.0 2017-04-18
2
+
3
+ * Add `Stripe.set_app_info` for use by plugin creators
4
+
1
5
  === 2.3.0 2017-04-14
2
6
 
3
7
  * Add question mark accessor when assigning boolean value to undefined field
data/README.md CHANGED
@@ -122,6 +122,16 @@ an intermittent network problem:
122
122
  [Idempotency keys][idempotency-keys] are added to requests to guarantee that
123
123
  retries are safe.
124
124
 
125
+ ### Writing a Plugin
126
+
127
+ If you're writing a plugin that uses the library, we'd appreciate it if you
128
+ identified using `#set_app_info`:
129
+
130
+ Stripe.set_app_info("MyAwesomePlugin", version: "1.2.34", url: "https://myawesomeplugin.info");
131
+
132
+ This information is passed along when the library makes calls to the Stripe
133
+ API.
134
+
125
135
  ## Development
126
136
 
127
137
  Run all tests:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.3.0
1
+ 2.4.0
@@ -70,6 +70,8 @@ require 'stripe/transfer'
70
70
  module Stripe
71
71
  DEFAULT_CA_BUNDLE_PATH = File.dirname(__FILE__) + '/data/ca-certificates.crt'
72
72
 
73
+ @app_info = nil
74
+
73
75
  @api_base = 'https://api.stripe.com'
74
76
  @connect_base = 'https://connect.stripe.com'
75
77
  @uploads_base = 'https://uploads.stripe.com'
@@ -92,6 +94,16 @@ module Stripe
92
94
  attr_reader :max_network_retry_delay, :initial_network_retry_delay
93
95
  end
94
96
 
97
+ # Gets the application for a plugin that's identified some. See
98
+ # #set_app_info.
99
+ def self.app_info
100
+ @app_info
101
+ end
102
+
103
+ def self.app_info=(info)
104
+ @app_info = info
105
+ end
106
+
95
107
  # The location of a file containing a bundle of CA certificates. By default
96
108
  # the library will use an included bundle that can successfully validate
97
109
  # Stripe certificates.
@@ -131,6 +143,19 @@ module Stripe
131
143
  @max_network_retries = val.to_i
132
144
  end
133
145
 
146
+ # Sets some basic information about the running application that's sent along
147
+ # with API requests. Useful for plugin authors to identify their plugin when
148
+ # communicating with Stripe.
149
+ #
150
+ # Takes a name and optional version and plugin URL.
151
+ def self.set_app_info(name, version: nil, url: nil)
152
+ @app_info = {
153
+ name: name,
154
+ url: url,
155
+ version: version,
156
+ }
157
+ end
158
+
134
159
  private
135
160
 
136
161
  # DEPRECATED. Use `Util#encode_parameters` instead.
@@ -218,6 +218,16 @@ module Stripe
218
218
  http_status: status, http_body: body)
219
219
  end
220
220
 
221
+ # Formats a plugin "app info" hash into a string that we can tack onto the
222
+ # end of a User-Agent string where it'll be fairly prominant in places like
223
+ # the Dashboard. Note that this formatting has been implemented to match
224
+ # other libraries, and shouldn't be changed without universal consensus.
225
+ def format_app_info(info)
226
+ str = info[:name]
227
+ str = "#{str}/#{info[:version]}" unless info[:version].nil?
228
+ str = "#{str} (#{info[:url]})" unless info[:url].nil?
229
+ str
230
+ end
221
231
 
222
232
  def handle_api_error(http_resp)
223
233
  begin
@@ -309,8 +319,13 @@ module Stripe
309
319
  end
310
320
 
311
321
  def request_headers(api_key, method)
322
+ user_agent = "Stripe/v1 RubyBindings/#{Stripe::VERSION}"
323
+ unless Stripe.app_info.nil?
324
+ user_agent += " " + format_app_info(Stripe.app_info)
325
+ end
326
+
312
327
  headers = {
313
- 'User-Agent' => "Stripe/v1 RubyBindings/#{Stripe::VERSION}",
328
+ 'User-Agent' => user_agent,
314
329
  'Authorization' => "Bearer #{api_key}",
315
330
  'Content-Type' => 'application/x-www-form-urlencoded'
316
331
  }
@@ -382,6 +397,7 @@ module Stripe
382
397
  lang_version = "#{RUBY_VERSION} p#{RUBY_PATCHLEVEL} (#{RUBY_RELEASE_DATE})"
383
398
 
384
399
  {
400
+ :application => Stripe.app_info,
385
401
  :bindings_version => Stripe::VERSION,
386
402
  :lang => 'ruby',
387
403
  :lang_version => lang_version,
@@ -390,7 +406,7 @@ module Stripe
390
406
  :publisher => 'stripe',
391
407
  :uname => @uname,
392
408
  :hostname => Socket.gethostname,
393
- }
409
+ }.delete_if { |k, v| v.nil? }
394
410
  end
395
411
  end
396
412
  end
@@ -1,3 +1,3 @@
1
1
  module Stripe
2
- VERSION = '2.3.0'
2
+ VERSION = '2.4.0'
3
3
  end
@@ -143,14 +143,19 @@ module Stripe
143
143
 
144
144
  context "Stripe-Account header" do
145
145
  should "use a globally set header" do
146
- Stripe.stripe_account = 'acct_1234'
146
+ begin
147
+ old = Stripe.stripe_account
148
+ Stripe.stripe_account = 'acct_1234'
147
149
 
148
- stub_request(:post, "#{Stripe.api_base}/v1/account").
149
- with(headers: {"Stripe-Account" => Stripe.stripe_account}).
150
- to_return(body: JSON.generate(API_FIXTURES.fetch(:account)))
150
+ stub_request(:post, "#{Stripe.api_base}/v1/account").
151
+ with(headers: {"Stripe-Account" => Stripe.stripe_account}).
152
+ to_return(body: JSON.generate(API_FIXTURES.fetch(:account)))
151
153
 
152
- client = StripeClient.new
153
- client.execute_request(:post, '/v1/account')
154
+ client = StripeClient.new
155
+ client.execute_request(:post, '/v1/account')
156
+ ensure
157
+ Stripe.stripe_account = old
158
+ end
154
159
  end
155
160
 
156
161
  should "use a locally set header" do
@@ -176,6 +181,43 @@ module Stripe
176
181
  end
177
182
  end
178
183
 
184
+ context "app_info" do
185
+ should "send app_info if set" do
186
+ begin
187
+ old = Stripe.app_info
188
+ Stripe.set_app_info(
189
+ "MyAwesomePlugin",
190
+ url: "https://myawesomeplugin.info",
191
+ version: "1.2.34"
192
+ )
193
+
194
+ stub_request(:post, "#{Stripe.api_base}/v1/account").
195
+ with { |req|
196
+ assert_equal \
197
+ "Stripe/v1 RubyBindings/#{Stripe::VERSION} " \
198
+ "MyAwesomePlugin/1.2.34 (https://myawesomeplugin.info)",
199
+ req.headers["User-Agent"]
200
+
201
+ data = JSON.parse(req.headers["X-Stripe-Client-User-Agent"],
202
+ symbolize_names: true)
203
+
204
+ assert_equal({
205
+ name: "MyAwesomePlugin",
206
+ url: "https://myawesomeplugin.info",
207
+ version: "1.2.34"
208
+ }, data[:application])
209
+
210
+ true
211
+ }.to_return(body: JSON.generate(API_FIXTURES.fetch(:account)))
212
+
213
+ client = StripeClient.new
214
+ client.execute_request(:post, '/v1/account')
215
+ ensure
216
+ Stripe.app_info = old
217
+ end
218
+ end
219
+ end
220
+
179
221
  context "error handling" do
180
222
  should "handle error response with empty body" do
181
223
  stub_request(:post, "#{Stripe.api_base}/v1/charges").
@@ -14,6 +14,24 @@ class StripeTest < Test::Unit::TestCase
14
14
  end
15
15
  end
16
16
 
17
+ should "allow app_info to be configured" do
18
+ begin
19
+ old = Stripe.app_info
20
+ Stripe.set_app_info(
21
+ "MyAwesomePlugin",
22
+ url: "https://myawesomeplugin.info",
23
+ version: "1.2.34"
24
+ )
25
+ assert_equal({
26
+ name: "MyAwesomePlugin",
27
+ url: "https://myawesomeplugin.info",
28
+ version: "1.2.34"
29
+ }, Stripe.app_info)
30
+ ensure
31
+ Stripe.app_info = old
32
+ end
33
+ end
34
+
17
35
  should "allow ca_bundle_path to be configured" do
18
36
  begin
19
37
  old = Stripe.ca_bundle_path
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stripe
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stripe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-14 00:00:00.000000000 Z
11
+ date: 2017-04-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday