stripe 3.5.2 → 3.5.3

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: 37fac5005ed9a37c3996413717db00c9308bd1a2
4
- data.tar.gz: 97f90fd989e7735522947754e60237ceb238c822
3
+ metadata.gz: 31bc202ae773c518a1f9d9382b08c76df41d4252
4
+ data.tar.gz: 0a8007b7d10c5c4a7cc4f8721553f58042e7ee9b
5
5
  SHA512:
6
- metadata.gz: b2d32411c530bb4b43c4c3313f0ed2867b2f1dfa0bade82185d155eaf5ec23a08f2e4d327278116d0e9045fe3b88f9d666a8f56367e6af2a42733610885c633b
7
- data.tar.gz: 942c93711ce7de11108f2c9721af9a4dfdecdbb73714c3abdcf6f87cc42e2ac61f18f0e76059a5e318517f29c3c1c7c21221434db5afd2f0c79581a4c4ef4a1c
6
+ metadata.gz: 82412fadaa6d945c754cd1712eebad95cb6fc5ab35564ae7878e1c3d7095e4794821fc44119a45c0bd15c52818301c110b33964665c6fb741c2affd5d08237f1
7
+ data.tar.gz: cd2a601d172ae2a1eabf23616832d40716eebdea2c00e101a51419e9f06021463aa4abdb6776e6089df47d163ac87bd9659028e198d8da1e2bd2fb0495e5ba2a
@@ -38,7 +38,7 @@ Metrics/MethodLength:
38
38
  # Offense count: 1
39
39
  # Configuration parameters: CountComments.
40
40
  Metrics/ModuleLength:
41
- Max: 298
41
+ Max: 302
42
42
 
43
43
  # Offense count: 5
44
44
  # Configuration parameters: CountKeywordArgs.
@@ -1,17 +1,23 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.5.3 - 2017-10-16
4
+ * [#594](https://github.com/stripe/stripe-ruby#594) Make sure that `StripeObject`'s `#deep_copy` maintains original class
5
+ * [#595](https://github.com/stripe/stripe-ruby#595) Allow `Object#method` to be called on `StripeObject` even if it conflicts with an accessor
6
+ * [#596](https://github.com/stripe/stripe-ruby#596) Encode arrays as integer-indexed hashes where appropriate
7
+ * [#598](https://github.com/stripe/stripe-ruby#598) Don't persist `idempotency_key` opt between requests
8
+
3
9
  ## 3.5.2 - 2017-10-13
4
10
  * [#592](https://github.com/stripe/stripe-ruby#592) Bring back `Marshal.dump/load` support with custom marshal encoder/decoder
5
11
 
6
12
  ## 3.5.1 - 2017-10-12
7
- * [#591](https://github.com/stripe/stripe-dotnet#591) Use thread-local `StripeClient` instances for thread safety
13
+ * [#591](https://github.com/stripe/stripe-ruby#591) Use thread-local `StripeClient` instances for thread safety
8
14
 
9
15
  ## 3.5.0 - 2017-10-11
10
- * [#589](https://github.com/stripe/stripe-dotnet#589) Rename source `delete` to `detach` (and deprecate the former)
16
+ * [#589](https://github.com/stripe/stripe-ruby#589) Rename source `delete` to `detach` (and deprecate the former)
11
17
 
12
18
  ## 3.4.1 - 2017-10-05
13
- * [#586](https://github.com/stripe/stripe-dotnet#586) Log query strings as well as form bodies with STRIPE_LOG
14
- * [#588](https://github.com/stripe/stripe-dotnet#588) Require minimum Faraday 0.10 for bug fix in parameter encoding
19
+ * [#586](https://github.com/stripe/stripe-ruby#586) Log query strings as well as form bodies with STRIPE_LOG
20
+ * [#588](https://github.com/stripe/stripe-ruby#588) Require minimum Faraday 0.10 for bug fix in parameter encoding
15
21
 
16
22
  ## 3.4.0 - 2017-09-20
17
23
  * Mark legacy Bitcoin API as deprecated, and remove corresponding tests
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.5.2
1
+ 3.5.3
@@ -1,15 +1,15 @@
1
1
  # Stripe Ruby bindings
2
2
  # API spec at https://stripe.com/docs/api
3
3
  require "cgi"
4
+ require "faraday"
5
+ require "json"
4
6
  require "logger"
5
7
  require "openssl"
6
8
  require "rbconfig"
7
9
  require "securerandom"
8
10
  require "set"
9
11
  require "socket"
10
-
11
- require "faraday"
12
- require "json"
12
+ require "uri"
13
13
 
14
14
  # Version
15
15
  require "stripe/version"
@@ -23,7 +23,7 @@ module Stripe
23
23
  # Hash#select returns an array before 1.9
24
24
  opts_to_persist = {}
25
25
  opts.each do |k, v|
26
- opts_to_persist[k] = v if Util::OPTS_KEYS_TO_PERSIST.include?(k)
26
+ opts_to_persist[k] = v if Util::OPTS_PERSISTABLE.include?(k)
27
27
  end
28
28
 
29
29
  [resp, opts_to_persist]
@@ -7,6 +7,7 @@ module Stripe
7
7
  OBJECT_NAME = "invoice".freeze
8
8
 
9
9
  def self.upcoming(params, opts = {})
10
+ params[:subscription_items] = Util.array_to_hash(params[:subscription_items]) if params[:subscription_items]
10
11
  resp, opts = request(:get, upcoming_url, params, opts)
11
12
  Util.convert_to_stripe_object(resp.data, opts)
12
13
  end
@@ -12,10 +12,16 @@ module Stripe
12
12
  end
13
13
 
14
14
  def return_order(params, opts = {})
15
+ params[:items] = Util.array_to_hash(params[:items]) if params[:items]
15
16
  resp, opts = request(:post, returns_url, params, opts)
16
17
  Util.convert_to_stripe_object(resp.data, opts)
17
18
  end
18
19
 
20
+ def self.create(params = {}, opts = {})
21
+ params[:items] = Util.array_to_hash(params[:items]) if params[:items]
22
+ super(params, opts)
23
+ end
24
+
19
25
  private
20
26
 
21
27
  def pay_url
@@ -241,7 +241,16 @@ module Stripe
241
241
  next if protected_fields.include?(k)
242
242
  next if @@permanent_attributes.include?(k)
243
243
 
244
- define_method(k) { @values[k] }
244
+ if k == :method
245
+ # Object#method is a built-in Ruby method that accepts a symbol
246
+ # and returns the corresponding Method object. Because the API may
247
+ # also use `method` as a field name, we check the arity of *args
248
+ # to decide whether to act as a getter or call the parent method.
249
+ define_method(k) { |*args| args.empty? ? @values[k] : super(*args) }
250
+ else
251
+ define_method(k) { @values[k] }
252
+ end
253
+
245
254
  define_method(:"#{k}=") do |v|
246
255
  if v == ""
247
256
  raise ArgumentError, "You cannot set #{k} to an empty string. " \
@@ -427,7 +436,7 @@ module Stripe
427
436
  copy
428
437
  end
429
438
  when StripeObject
430
- StripeObject.construct_from(
439
+ obj.class.construct_from(
431
440
  deep_copy(obj.instance_variable_get(:@values)),
432
441
  obj.instance_variable_get(:@opts).select do |k, _v|
433
442
  Util::OPTS_COPYABLE.include?(k)
@@ -24,6 +24,16 @@ module Stripe
24
24
  super(params, opts)
25
25
  end
26
26
 
27
+ def serialize_params(options = {})
28
+ update_hash = super
29
+ if @unsaved_values.include?(:items)
30
+ value = Util.array_to_hash(@values[:items])
31
+ update_hash[:items] =
32
+ serialize_params_value(value, nil, true, options[:force], key: :items)
33
+ end
34
+ update_hash
35
+ end
36
+
27
37
  private
28
38
 
29
39
  def discount_url
@@ -12,11 +12,15 @@ module Stripe
12
12
 
13
13
  # Options that should be copyable from one StripeObject to another
14
14
  # including options that may be internal.
15
- OPTS_COPYABLE = (OPTS_USER_SPECIFIED + Set[:api_base]).freeze
15
+ OPTS_COPYABLE = (
16
+ OPTS_USER_SPECIFIED + Set[:api_base]
17
+ ).freeze
16
18
 
17
19
  # Options that should be persisted between API requests. This includes
18
20
  # client, which is an object containing an HTTP client to reuse.
19
- OPTS_KEYS_TO_PERSIST = (OPTS_USER_SPECIFIED + Set[:client]).freeze
21
+ OPTS_PERSISTABLE = (
22
+ OPTS_USER_SPECIFIED + Set[:client] - Set[:idempotency_key]
23
+ ).freeze
20
24
 
21
25
  def self.objects_to_ids(h)
22
26
  case h
@@ -1,3 +1,3 @@
1
1
  module Stripe
2
- VERSION = "3.5.2".freeze
2
+ VERSION = "3.5.3".freeze
3
3
  end
@@ -104,6 +104,15 @@ module Stripe
104
104
  assert_equal opts.reject { |k, _v| k == :client },
105
105
  copy_obj.instance_variable_get(:@opts)
106
106
  end
107
+
108
+ should "return an instance of the same class" do
109
+ class TestObject < Stripe::StripeObject; end
110
+
111
+ obj = TestObject.construct_from(id: 1)
112
+ copy_obj = obj.class.send(:deep_copy, obj)
113
+
114
+ assert_equal obj.class, copy_obj.class
115
+ end
107
116
  end
108
117
 
109
118
  should "recursively call to_hash on its values" do
@@ -423,5 +432,17 @@ module Stripe
423
432
  expected_hash = { api_key: "apikey" }
424
433
  assert_equal expected_hash, m.instance_variable_get("@opts")
425
434
  end
435
+
436
+ context "#method" do
437
+ should "act as a getter if no arguments are provided" do
438
+ obj = Stripe::StripeObject.construct_from(id: 1, method: "foo")
439
+ assert_equal "foo", obj.method
440
+ end
441
+
442
+ should "call Object#method if an argument is provided" do
443
+ obj = Stripe::StripeObject.construct_from(id: 1, method: "foo")
444
+ assert obj.method(:id).is_a?(Method)
445
+ end
446
+ end
426
447
  end
427
448
  end
@@ -54,5 +54,51 @@ module Stripe
54
54
  assert subscription.is_a?(Stripe::Subscription)
55
55
  end
56
56
  end
57
+
58
+ context "#serialize_params" do
59
+ should "serialize when items is set to an Array" do
60
+ obj = Stripe::Util.convert_to_stripe_object({
61
+ object: "subscription",
62
+ items: Stripe::Util.convert_to_stripe_object(
63
+ object: "list",
64
+ data: []
65
+ ),
66
+ }, {})
67
+ obj.items = [
68
+ { id: "si_foo", deleted: true },
69
+ { plan: "plan_bar" },
70
+ ]
71
+
72
+ expected = {
73
+ items: {
74
+ :"0" => { id: "si_foo", deleted: true },
75
+ :"1" => { plan: "plan_bar" },
76
+ },
77
+ }
78
+ assert_equal(expected, obj.serialize_params)
79
+ end
80
+
81
+ should "serialize when items is set to a Hash" do
82
+ obj = Stripe::Util.convert_to_stripe_object({
83
+ object: "subscription",
84
+ items: Stripe::Util.convert_to_stripe_object(
85
+ object: "list",
86
+ data: []
87
+ ),
88
+ }, {})
89
+ obj.items = {
90
+ "0" => { id: "si_foo", deleted: true },
91
+ "1" => { plan: "plan_bar" },
92
+ }
93
+
94
+ expected = {
95
+ items: {
96
+ :"0" => { id: "si_foo", deleted: true },
97
+ :"1" => { plan: "plan_bar" },
98
+ },
99
+ }
100
+ assert_equal(expected, obj.serialize_params)
101
+ end
102
+ end
57
103
  end
58
104
  end
@@ -2,6 +2,22 @@ require File.expand_path("../../test_helper", __FILE__)
2
2
 
3
3
  module Stripe
4
4
  class UtilTest < Test::Unit::TestCase
5
+ context "OPTS_COPYABLE" do
6
+ should "include :apibase" do
7
+ assert_include Stripe::Util::OPTS_COPYABLE, :api_base
8
+ end
9
+ end
10
+
11
+ context "OPTS_PERSISTABLE" do
12
+ should "include :client" do
13
+ assert_include Stripe::Util::OPTS_PERSISTABLE, :client
14
+ end
15
+
16
+ should "not include :idempotency_key" do
17
+ refute_includes Stripe::Util::OPTS_PERSISTABLE, :idempotency_key
18
+ end
19
+ end
20
+
5
21
  should "#encode_parameters should prepare parameters for an HTTP request" do
6
22
  params = {
7
23
  a: 3,
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: 3.5.2
4
+ version: 3.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stripe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-13 00:00:00.000000000 Z
11
+ date: 2017-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -172,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
172
172
  version: '0'
173
173
  requirements: []
174
174
  rubyforge_project:
175
- rubygems_version: 2.6.13
175
+ rubygems_version: 2.6.14
176
176
  signing_key:
177
177
  specification_version: 4
178
178
  summary: Ruby bindings for the Stripe API