stripe 6.3.0 → 6.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +11 -0
  3. data/Makefile +1 -1
  4. data/OPENAPI_VERSION +1 -1
  5. data/VERSION +1 -1
  6. data/lib/stripe/api_operations/create.rb +6 -2
  7. data/lib/stripe/api_operations/delete.rb +12 -7
  8. data/lib/stripe/api_operations/list.rb +6 -9
  9. data/lib/stripe/api_operations/nested_resource.rb +62 -34
  10. data/lib/stripe/api_operations/request.rb +10 -0
  11. data/lib/stripe/api_operations/save.rb +6 -3
  12. data/lib/stripe/api_operations/search.rb +6 -9
  13. data/lib/stripe/api_resource.rb +1 -1
  14. data/lib/stripe/resources/account.rb +28 -8
  15. data/lib/stripe/resources/apps/secret.rb +10 -12
  16. data/lib/stripe/resources/charge.rb +10 -3
  17. data/lib/stripe/resources/checkout/session.rb +10 -3
  18. data/lib/stripe/resources/credit_note.rb +22 -7
  19. data/lib/stripe/resources/customer.rb +66 -25
  20. data/lib/stripe/resources/dispute.rb +10 -3
  21. data/lib/stripe/resources/financial_connections/account.rb +30 -7
  22. data/lib/stripe/resources/identity/verification_session.rb +20 -5
  23. data/lib/stripe/resources/invoice.rb +62 -15
  24. data/lib/stripe/resources/issuing/authorization.rb +20 -5
  25. data/lib/stripe/resources/issuing/card.rb +10 -3
  26. data/lib/stripe/resources/issuing/dispute.rb +10 -3
  27. data/lib/stripe/resources/order.rb +40 -9
  28. data/lib/stripe/resources/payment_intent.rb +60 -13
  29. data/lib/stripe/resources/payment_link.rb +10 -3
  30. data/lib/stripe/resources/payment_method.rb +20 -5
  31. data/lib/stripe/resources/payout.rb +20 -5
  32. data/lib/stripe/resources/quote.rb +50 -11
  33. data/lib/stripe/resources/refund.rb +19 -5
  34. data/lib/stripe/resources/review.rb +10 -3
  35. data/lib/stripe/resources/setup_intent.rb +30 -7
  36. data/lib/stripe/resources/source.rb +16 -6
  37. data/lib/stripe/resources/subscription.rb +10 -3
  38. data/lib/stripe/resources/subscription_item.rb +6 -2
  39. data/lib/stripe/resources/subscription_schedule.rb +20 -5
  40. data/lib/stripe/resources/terminal/reader.rb +49 -11
  41. data/lib/stripe/resources/test_helpers/test_clock.rb +10 -3
  42. data/lib/stripe/resources/topup.rb +10 -3
  43. data/lib/stripe/resources/transfer.rb +10 -3
  44. data/lib/stripe/resources/treasury/financial_account.rb +20 -5
  45. data/lib/stripe/resources/treasury/inbound_transfer.rb +39 -9
  46. data/lib/stripe/resources/treasury/outbound_payment.rb +39 -9
  47. data/lib/stripe/resources/treasury/outbound_transfer.rb +43 -9
  48. data/lib/stripe/resources/treasury/received_credit.rb +5 -6
  49. data/lib/stripe/resources/treasury/received_debit.rb +5 -6
  50. data/lib/stripe/util.rb +29 -3
  51. data/lib/stripe/version.rb +1 -1
  52. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fbc52fa0e9fcfaf1ffdb6427a94285ccf90daacfb9c212400dc3f25dd2bd3ce4
4
- data.tar.gz: c3d8a2d531140836ee11a4aa80f7244226fe1c4cf106ef439820fe5bddb426c5
3
+ metadata.gz: b8b2647147e752c48286db590da33c49eab3ada2597f747e285aeba1c859285d
4
+ data.tar.gz: 72ba2a35faae21c340fb7bad6bfb0325fe9d6dbd8862e2f37e10d8e80f8ded51
5
5
  SHA512:
6
- metadata.gz: 575263394c5d6275016782f492ce1f7e334d003ad9479ef6016521800527006ef6c1a67fbe0e6e58afae64e32b35bc722290763b5d8b588d7263377f86925ef1
7
- data.tar.gz: 044c6379ba0974f110e1a348a7eeeb0f0ada68fbbeb7ae6a4e8939c2f6597c7fb0a080aab7c58de77b33beecc2ffe551b90ed471c63544b74f9e0725389dfb71
6
+ metadata.gz: ebafa5766c73b0b3fd13f5a5fcb1e5488b5eb56d5000d184b5f042cdf5dc2906572fd340d0c61f262d027f4a3f3ec7a0df47e1101da47c9b6ad89b7382097a63
7
+ data.tar.gz: 37fa65a65eaf7af72012db023b1a70a9c753c86e77ac9911eade36f780ab9f0b08ad6dec1846b8fad103051567f75f95771c600a4fc59c5fbbe102626ce7369e
data/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 6.4.0 - 2022-06-17
4
+ * [#1073](https://github.com/stripe/stripe-ruby/pull/1073) API Updates
5
+ * Add support for `fund_cash_balance` test helper method on resource `Customer`
6
+ * [#1074](https://github.com/stripe/stripe-ruby/pull/1074) Support updating pre-release versions
7
+ * [#1072](https://github.com/stripe/stripe-ruby/pull/1072) Trigger workflows on beta branches
8
+ * [#1071](https://github.com/stripe/stripe-ruby/pull/1071) Use request_stripe_object for all requests
9
+ * [#1070](https://github.com/stripe/stripe-ruby/pull/1070) API Updates
10
+
11
+ Switch from using meta-programing to generating explicit methods for custom methods.
12
+ * [#1069](https://github.com/stripe/stripe-ruby/pull/1069) chore: Stop special implementation of Account.persons method.
13
+
3
14
  ## 6.3.0 - 2022-06-08
4
15
  * [#1063](https://github.com/stripe/stripe-ruby/pull/1063) fix: Update cash balance methods to no longer require nested ID.
5
16
 
data/Makefile CHANGED
@@ -1,7 +1,7 @@
1
1
  .PHONY: update-version codegen-format
2
2
  update-version:
3
3
  @echo "$(VERSION)" > VERSION
4
- @perl -pi -e 's|VERSION = "[.\d]+"|VERSION = "$(VERSION)"|' lib/stripe/version.rb
4
+ @perl -pi -e 's|VERSION = "[.\-\w\d]+"|VERSION = "$(VERSION)"|' lib/stripe/version.rb
5
5
 
6
6
  codegen-format:
7
7
  bundle exec rubocop -o /dev/null --auto-correct
data/OPENAPI_VERSION CHANGED
@@ -1 +1 @@
1
- v152
1
+ v157
data/VERSION CHANGED
@@ -1 +1 @@
1
- 6.3.0
1
+ 6.4.0
@@ -4,8 +4,12 @@ module Stripe
4
4
  module APIOperations
5
5
  module Create
6
6
  def create(params = {}, opts = {})
7
- resp, opts = execute_resource_request(:post, resource_url, params, opts)
8
- Util.convert_to_stripe_object(resp.data, opts)
7
+ request_stripe_object(
8
+ method: :post,
9
+ path: resource_url,
10
+ params: params,
11
+ opts: opts
12
+ )
9
13
  end
10
14
  end
11
15
  end
@@ -18,17 +18,22 @@ module Stripe
18
18
  # api_key to be overwritten. See
19
19
  # {APIOperations::Request.execute_resource_request}.
20
20
  def delete(id, params = {}, opts = {})
21
- resp, opts = execute_resource_request(:delete,
22
- "#{resource_url}/#{id}",
23
- params, opts)
24
- Util.convert_to_stripe_object(resp.data, opts)
21
+ request_stripe_object(
22
+ method: :delete,
23
+ path: "#{resource_url}/#{id}",
24
+ params: params,
25
+ opts: opts
26
+ )
25
27
  end
26
28
  end
27
29
 
28
30
  def delete(params = {}, opts = {})
29
- resp, opts = execute_resource_request(:delete, resource_url,
30
- params, opts)
31
- initialize_from(resp.data, opts)
31
+ request_stripe_object(
32
+ method: :delete,
33
+ path: resource_url,
34
+ params: params,
35
+ opts: opts
36
+ )
32
37
  end
33
38
 
34
39
  def self.included(base)
@@ -4,15 +4,12 @@ module Stripe
4
4
  module APIOperations
5
5
  module List
6
6
  def list(filters = {}, opts = {})
7
- opts = Util.normalize_opts(opts)
8
-
9
- resp, opts = execute_resource_request(:get, resource_url, filters, opts)
10
- obj = ListObject.construct_from(resp.data, opts)
11
-
12
- # set filters so that we can fetch the same limit, expansions, and
13
- # predicates when accessing the next and previous pages
14
- obj.filters = filters.dup
15
- obj
7
+ request_stripe_object(
8
+ method: :get,
9
+ path: resource_url,
10
+ params: filters,
11
+ opts: opts
12
+ )
16
13
  end
17
14
  end
18
15
  end
@@ -26,46 +26,74 @@ module Stripe
26
26
  end
27
27
 
28
28
  operations.each do |operation|
29
- case operation
30
- when :create
31
- define_singleton_method(:"create_#{resource}") \
29
+ define_operation(
30
+ resource,
31
+ operation,
32
+ resource_url_method,
33
+ resource_plural
34
+ )
35
+ end
36
+ end
37
+
38
+ private def define_operation(
39
+ resource,
40
+ operation,
41
+ resource_url_method,
42
+ resource_plural
43
+ )
44
+ case operation
45
+ when :create
46
+ define_singleton_method(:"create_#{resource}") \
32
47
  do |id, params = {}, opts = {}|
33
- url = send(resource_url_method, id)
34
- resp, opts = execute_resource_request(:post, url, params, opts)
35
- Util.convert_to_stripe_object(resp.data, opts)
36
- end
37
- when :retrieve
38
- define_singleton_method(:"retrieve_#{resource}") \
48
+ request_stripe_object(
49
+ method: :post,
50
+ path: send(resource_url_method, id),
51
+ params: params,
52
+ opts: opts
53
+ )
54
+ end
55
+ when :retrieve
56
+ define_singleton_method(:"retrieve_#{resource}") \
39
57
  do |id, nested_id, opts = {}|
40
- url = send(resource_url_method, id, nested_id)
41
- resp, opts = execute_resource_request(:get, url, {}, opts)
42
- Util.convert_to_stripe_object(resp.data, opts)
43
- end
44
- when :update
45
- define_singleton_method(:"update_#{resource}") \
58
+ request_stripe_object(
59
+ method: :get,
60
+ path: send(resource_url_method, id, nested_id),
61
+ params: {},
62
+ opts: opts
63
+ )
64
+ end
65
+ when :update
66
+ define_singleton_method(:"update_#{resource}") \
46
67
  do |id, nested_id, params = {}, opts = {}|
47
- url = send(resource_url_method, id, nested_id)
48
- resp, opts = execute_resource_request(:post, url, params, opts)
49
- Util.convert_to_stripe_object(resp.data, opts)
50
- end
51
- when :delete
52
- define_singleton_method(:"delete_#{resource}") \
68
+ request_stripe_object(
69
+ method: :post,
70
+ path: send(resource_url_method, id, nested_id),
71
+ params: params,
72
+ opts: opts
73
+ )
74
+ end
75
+ when :delete
76
+ define_singleton_method(:"delete_#{resource}") \
53
77
  do |id, nested_id, params = {}, opts = {}|
54
- url = send(resource_url_method, id, nested_id)
55
- resp, opts = execute_resource_request(:delete, url, params,
56
- opts)
57
- Util.convert_to_stripe_object(resp.data, opts)
58
- end
59
- when :list
60
- define_singleton_method(:"list_#{resource_plural}") \
78
+ request_stripe_object(
79
+ method: :delete,
80
+ path: send(resource_url_method, id, nested_id),
81
+ params: params,
82
+ opts: opts
83
+ )
84
+ end
85
+ when :list
86
+ define_singleton_method(:"list_#{resource_plural}") \
61
87
  do |id, params = {}, opts = {}|
62
- url = send(resource_url_method, id)
63
- resp, opts = execute_resource_request(:get, url, params, opts)
64
- Util.convert_to_stripe_object(resp.data, opts)
65
- end
66
- else
67
- raise ArgumentError, "Unknown operation: #{operation.inspect}"
88
+ request_stripe_object(
89
+ method: :get,
90
+ path: send(resource_url_method, id),
91
+ params: params,
92
+ opts: opts
93
+ )
68
94
  end
95
+ else
96
+ raise ArgumentError, "Unknown operation: #{operation.inspect}"
69
97
  end
70
98
  end
71
99
  end
@@ -24,6 +24,11 @@ module Stripe
24
24
  )
25
25
  end
26
26
 
27
+ private def request_stripe_object(method:, path:, params:, opts: {})
28
+ resp, opts = execute_resource_request(method, path, params, opts)
29
+ Util.convert_to_stripe_object_with_params(resp.data, params, opts)
30
+ end
31
+
27
32
  private def execute_resource_request_internal(client_request_method_sym,
28
33
  method, url,
29
34
  params, opts,
@@ -122,6 +127,11 @@ module Stripe
122
127
  )
123
128
  end
124
129
 
130
+ private def request_stripe_object(method:, path:, params:, opts: {})
131
+ resp, opts = execute_resource_request(method, path, params, opts)
132
+ Util.convert_to_stripe_object_with_params(resp.data, params, opts)
133
+ end
134
+
125
135
  # See notes on `alias` above.
126
136
  alias request execute_resource_request
127
137
  end
@@ -24,9 +24,12 @@ module Stripe
24
24
  end
25
25
  end
26
26
 
27
- resp, opts = execute_resource_request(:post, "#{resource_url}/#{id}",
28
- params, opts)
29
- Util.convert_to_stripe_object(resp.data, opts)
27
+ request_stripe_object(
28
+ method: :post,
29
+ path: "#{resource_url}/#{id}",
30
+ params: params,
31
+ opts: opts
32
+ )
30
33
  end
31
34
  end
32
35
 
@@ -4,15 +4,12 @@ module Stripe
4
4
  module APIOperations
5
5
  module Search
6
6
  def _search(search_url, filters = {}, opts = {})
7
- opts = Util.normalize_opts(opts)
8
-
9
- resp, opts = execute_resource_request(:get, search_url, filters, opts)
10
- obj = SearchResultObject.construct_from(resp.data, opts)
11
-
12
- # set filters so that we can fetch the same limit and query
13
- # when accessing the next page
14
- obj.filters = filters.dup
15
- obj
7
+ request_stripe_object(
8
+ method: :get,
9
+ path: search_url,
10
+ params: filters,
11
+ opts: opts
12
+ )
16
13
  end
17
14
  end
18
15
  end
@@ -97,7 +97,7 @@ module Stripe
97
97
  if Util.object_name_matches_class?(resp.data[:object], self.class)
98
98
  initialize_from(resp.data, opts)
99
99
  else
100
- Util.convert_to_stripe_object(resp.data, opts)
100
+ Util.convert_to_stripe_object_with_params(resp.data, params, opts)
101
101
  end
102
102
  end
103
103
 
@@ -12,18 +12,43 @@ module Stripe
12
12
 
13
13
  OBJECT_NAME = "account"
14
14
 
15
- custom_method :reject, http_verb: :post
16
-
17
15
  nested_resource_class_methods :capability,
18
16
  operations: %i[retrieve update list],
19
17
  resource_plural: "capabilities"
20
18
  nested_resource_class_methods :person,
21
19
  operations: %i[create retrieve update delete list]
22
20
 
21
+ def persons(params = {}, opts = {})
22
+ request_stripe_object(
23
+ method: :get,
24
+ path: format("/v1/accounts/%<account>s/persons", { account: CGI.escape(self["id"]) }),
25
+ params: params,
26
+ opts: opts
27
+ )
28
+ end
29
+
23
30
  def reject(params = {}, opts = {})
24
31
  request_stripe_object(
25
32
  method: :post,
26
- path: resource_url + "/reject",
33
+ path: format("/v1/accounts/%<account>s/reject", { account: CGI.escape(self["id"]) }),
34
+ params: params,
35
+ opts: opts
36
+ )
37
+ end
38
+
39
+ def self.persons(account, params = {}, opts = {})
40
+ request_stripe_object(
41
+ method: :get,
42
+ path: format("/v1/accounts/%<account>s/persons", { account: CGI.escape(account) }),
43
+ params: params,
44
+ opts: opts
45
+ )
46
+ end
47
+
48
+ def self.reject(account, params = {}, opts = {})
49
+ request_stripe_object(
50
+ method: :post,
51
+ path: format("/v1/accounts/%<account>s/reject", { account: CGI.escape(account) }),
27
52
  params: params,
28
53
  opts: opts
29
54
  )
@@ -60,11 +85,6 @@ module Stripe
60
85
  super(id, opts)
61
86
  end
62
87
 
63
- def persons(params = {}, opts = {})
64
- resp, opts = execute_resource_request(:get, resource_url + "/persons", params, opts)
65
- Util.convert_to_stripe_object(resp.data, opts)
66
- end
67
-
68
88
  # We are not adding a helper for capabilities here as the Account object
69
89
  # already has a capabilities property which is a hash and not the sub-list
70
90
  # of capabilities.
@@ -10,23 +10,21 @@ module Stripe
10
10
  OBJECT_NAME = "apps.secret"
11
11
 
12
12
  def self.delete_where(params = {}, opts = {})
13
- resp, opts = execute_resource_request(
14
- :post,
15
- resource_url + "/delete",
16
- params,
17
- opts
13
+ request_stripe_object(
14
+ method: :post,
15
+ path: "/v1/apps/secrets/delete",
16
+ params: params,
17
+ opts: opts
18
18
  )
19
- Util.convert_to_stripe_object(resp.data, opts)
20
19
  end
21
20
 
22
21
  def self.find(params = {}, opts = {})
23
- resp, opts = execute_resource_request(
24
- :get,
25
- resource_url + "/find",
26
- params,
27
- opts
22
+ request_stripe_object(
23
+ method: :get,
24
+ path: "/v1/apps/secrets/find",
25
+ params: params,
26
+ opts: opts
28
27
  )
29
- Util.convert_to_stripe_object(resp.data, opts)
30
28
  end
31
29
  end
32
30
  end
@@ -10,12 +10,19 @@ module Stripe
10
10
 
11
11
  OBJECT_NAME = "charge"
12
12
 
13
- custom_method :capture, http_verb: :post
14
-
15
13
  def capture(params = {}, opts = {})
16
14
  request_stripe_object(
17
15
  method: :post,
18
- path: resource_url + "/capture",
16
+ path: format("/v1/charges/%<charge>s/capture", { charge: CGI.escape(self["id"]) }),
17
+ params: params,
18
+ opts: opts
19
+ )
20
+ end
21
+
22
+ def self.capture(charge, params = {}, opts = {})
23
+ request_stripe_object(
24
+ method: :post,
25
+ path: format("/v1/charges/%<charge>s/capture", { charge: CGI.escape(charge) }),
19
26
  params: params,
20
27
  opts: opts
21
28
  )
@@ -10,14 +10,21 @@ module Stripe
10
10
 
11
11
  OBJECT_NAME = "checkout.session"
12
12
 
13
- custom_method :expire, http_verb: :post
14
-
15
13
  nested_resource_class_methods :line_item, operations: %i[list]
16
14
 
17
15
  def expire(params = {}, opts = {})
18
16
  request_stripe_object(
19
17
  method: :post,
20
- path: resource_url + "/expire",
18
+ path: format("/v1/checkout/sessions/%<session>s/expire", { session: CGI.escape(self["id"]) }),
19
+ params: params,
20
+ opts: opts
21
+ )
22
+ end
23
+
24
+ def self.expire(session, params = {}, opts = {})
25
+ request_stripe_object(
26
+ method: :post,
27
+ path: format("/v1/checkout/sessions/%<session>s/expire", { session: CGI.escape(session) }),
21
28
  params: params,
22
29
  opts: opts
23
30
  )
@@ -9,25 +9,40 @@ module Stripe
9
9
 
10
10
  OBJECT_NAME = "credit_note"
11
11
 
12
- custom_method :void_credit_note, http_verb: :post, http_path: "void"
13
-
14
12
  def void_credit_note(params = {}, opts = {})
15
13
  request_stripe_object(
16
14
  method: :post,
17
- path: resource_url + "/void",
15
+ path: format("/v1/credit_notes/%<id>s/void", { id: CGI.escape(self["id"]) }),
16
+ params: params,
17
+ opts: opts
18
+ )
19
+ end
20
+
21
+ def self.void_credit_note(id, params = {}, opts = {})
22
+ request_stripe_object(
23
+ method: :post,
24
+ path: format("/v1/credit_notes/%<id>s/void", { id: CGI.escape(id) }),
18
25
  params: params,
19
26
  opts: opts
20
27
  )
21
28
  end
22
29
 
23
30
  def self.preview(params, opts = {})
24
- resp, opts = execute_resource_request(:get, resource_url + "/preview", params, opts)
25
- Util.convert_to_stripe_object(resp.data, opts)
31
+ request_stripe_object(
32
+ method: :get,
33
+ path: resource_url + "/preview",
34
+ params: params,
35
+ opts: opts
36
+ )
26
37
  end
27
38
 
28
39
  def self.list_preview_line_items(params, opts = {})
29
- resp, opts = execute_resource_request(:get, resource_url + "/preview/lines", params, opts)
30
- Util.convert_to_stripe_object(resp.data, opts)
40
+ request_stripe_object(
41
+ method: :get,
42
+ path: resource_url + "/preview/lines",
43
+ params: params,
44
+ opts: opts
45
+ )
31
46
  end
32
47
  end
33
48
  end
@@ -12,9 +12,6 @@ module Stripe
12
12
 
13
13
  OBJECT_NAME = "customer"
14
14
 
15
- custom_method :create_funding_instructions, http_verb: :post, http_path: "funding_instructions"
16
- custom_method :list_payment_methods, http_verb: :get, http_path: "payment_methods"
17
-
18
15
  nested_resource_class_methods :balance_transaction,
19
16
  operations: %i[create retrieve update list]
20
17
  nested_resource_class_methods :tax_id,
@@ -23,7 +20,7 @@ module Stripe
23
20
  def create_funding_instructions(params = {}, opts = {})
24
21
  request_stripe_object(
25
22
  method: :post,
26
- path: resource_url + "/funding_instructions",
23
+ path: format("/v1/customers/%<customer>s/funding_instructions", { customer: CGI.escape(self["id"]) }),
27
24
  params: params,
28
25
  opts: opts
29
26
  )
@@ -32,7 +29,7 @@ module Stripe
32
29
  def list_payment_methods(params = {}, opts = {})
33
30
  request_stripe_object(
34
31
  method: :get,
35
- path: resource_url + "/payment_methods",
32
+ path: format("/v1/customers/%<customer>s/payment_methods", { customer: CGI.escape(self["id"]) }),
36
33
  params: params,
37
34
  opts: opts
38
35
  )
@@ -47,19 +44,36 @@ module Stripe
47
44
  )
48
45
  end
49
46
 
47
+ def self.create_funding_instructions(customer, params = {}, opts = {})
48
+ request_stripe_object(
49
+ method: :post,
50
+ path: format("/v1/customers/%<customer>s/funding_instructions", { customer: CGI.escape(customer) }),
51
+ params: params,
52
+ opts: opts
53
+ )
54
+ end
55
+
56
+ def self.list_payment_methods(customer, params = {}, opts = {})
57
+ request_stripe_object(
58
+ method: :get,
59
+ path: format("/v1/customers/%<customer>s/payment_methods", { customer: CGI.escape(customer) }),
60
+ params: params,
61
+ opts: opts
62
+ )
63
+ end
64
+
50
65
  def self.retrieve_payment_method(
51
66
  customer,
52
67
  payment_method,
53
68
  params = {},
54
69
  opts = {}
55
70
  )
56
- resp, opts = execute_resource_request(
57
- :get,
58
- format("/v1/customers/%<customer>s/payment_methods/%<payment_method>s", { customer: CGI.escape(customer), payment_method: CGI.escape(payment_method) }),
59
- params,
60
- opts
71
+ request_stripe_object(
72
+ method: :get,
73
+ path: format("/v1/customers/%<customer>s/payment_methods/%<payment_method>s", { customer: CGI.escape(customer), payment_method: CGI.escape(payment_method) }),
74
+ params: params,
75
+ opts: opts
61
76
  )
62
- Util.convert_to_stripe_object(resp.data, opts)
63
77
  end
64
78
 
65
79
  custom_method :delete_discount, http_verb: :delete, http_path: "discount"
@@ -80,8 +94,11 @@ module Stripe
80
94
  # so you must call `refresh` on it to get a new version with the
81
95
  # discount removed.
82
96
  def delete_discount
83
- resp, opts = execute_resource_request(:delete, resource_url + "/discount")
84
- Util.convert_to_stripe_object(resp.data, opts)
97
+ request_stripe_object(
98
+ method: :delete,
99
+ path: resource_url + "/discount",
100
+ params: {}
101
+ )
85
102
  end
86
103
 
87
104
  def self.search(params = {}, opts = {})
@@ -103,13 +120,12 @@ module Stripe
103
120
  if !opts_or_unused_nested_id.nil? && opts_or_unused_nested_id.class == Hash && opts.empty?
104
121
  opts = opts_or_unused_nested_id
105
122
  end
106
- resp, opts = execute_resource_request(
107
- :get,
108
- format("/v1/customers/%<customer>s/cash_balance", { customer: CGI.escape(customer) }),
109
- {},
110
- opts
123
+ request_stripe_object(
124
+ method: :get,
125
+ path: format("/v1/customers/%<customer>s/cash_balance", { customer: CGI.escape(customer) }),
126
+ params: {},
127
+ opts: opts
111
128
  )
112
- Util.convert_to_stripe_object(resp.data, opts)
113
129
  end
114
130
 
115
131
  def self.update_cash_balance(
@@ -123,13 +139,38 @@ module Stripe
123
139
  raise ArgumentError, "update_cash_balance requires the second argument always be nil for legacy reasons."
124
140
  end
125
141
 
126
- resp, opts = execute_resource_request(
127
- :post,
128
- format("/v1/customers/%<customer>s/cash_balance", { customer: CGI.escape(customer) }),
129
- params,
130
- opts
142
+ request_stripe_object(
143
+ method: :post,
144
+ path: format("/v1/customers/%<customer>s/cash_balance", { customer: CGI.escape(customer) }),
145
+ params: params,
146
+ opts: opts
131
147
  )
132
- Util.convert_to_stripe_object(resp.data, opts)
148
+ end
149
+
150
+ def test_helpers
151
+ TestHelpers.new(self)
152
+ end
153
+
154
+ class TestHelpers < APIResourceTestHelpers
155
+ RESOURCE_CLASS = Customer
156
+
157
+ def self.fund_cash_balance(customer, params = {}, opts = {})
158
+ request_stripe_object(
159
+ method: :post,
160
+ path: format("/v1/test_helpers/customers/%<customer>s/fund_cash_balance", { customer: CGI.escape(customer) }),
161
+ params: params,
162
+ opts: opts
163
+ )
164
+ end
165
+
166
+ def fund_cash_balance(params = {}, opts = {})
167
+ @resource.request_stripe_object(
168
+ method: :post,
169
+ path: format("/v1/test_helpers/customers/%<customer>s/fund_cash_balance", { customer: CGI.escape(@resource["id"]) }),
170
+ params: params,
171
+ opts: opts
172
+ )
173
+ end
133
174
  end
134
175
  end
135
176
  end
@@ -8,12 +8,19 @@ module Stripe
8
8
 
9
9
  OBJECT_NAME = "dispute"
10
10
 
11
- custom_method :close, http_verb: :post
12
-
13
11
  def close(params = {}, opts = {})
14
12
  request_stripe_object(
15
13
  method: :post,
16
- path: resource_url + "/close",
14
+ path: format("/v1/disputes/%<dispute>s/close", { dispute: CGI.escape(self["id"]) }),
15
+ params: params,
16
+ opts: opts
17
+ )
18
+ end
19
+
20
+ def self.close(dispute, params = {}, opts = {})
21
+ request_stripe_object(
22
+ method: :post,
23
+ path: format("/v1/disputes/%<dispute>s/close", { dispute: CGI.escape(dispute) }),
17
24
  params: params,
18
25
  opts: opts
19
26
  )