stripe 5.38.0 → 6.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +85 -0
- data/Makefile +7 -0
- data/README.md +3 -3
- data/VERSION +1 -1
- data/lib/stripe/api_operations/search.rb +19 -0
- data/lib/stripe/api_resource.rb +2 -17
- data/lib/stripe/api_resource_test_helpers.rb +47 -0
- data/lib/stripe/connection_manager.rb +22 -1
- data/lib/stripe/object_types.rb +12 -1
- data/lib/stripe/resources/cash_balance.rb +22 -0
- data/lib/stripe/resources/charge.rb +9 -0
- data/lib/stripe/resources/checkout/session.rb +11 -0
- data/lib/stripe/resources/customer.rb +33 -0
- data/lib/stripe/resources/discount.rb +1 -0
- data/lib/stripe/resources/financial_connections/account.rb +31 -0
- data/lib/stripe/resources/financial_connections/account_owner.rb +10 -0
- data/lib/stripe/resources/financial_connections/account_ownership.rb +10 -0
- data/lib/stripe/resources/financial_connections/session.rb +12 -0
- data/lib/stripe/resources/funding_instructions.rb +16 -0
- data/lib/stripe/resources/invoice.rb +9 -0
- data/lib/stripe/resources/issuing/card_details.rb +2 -1
- data/lib/stripe/resources/order.rb +26 -6
- data/lib/stripe/resources/payment_intent.rb +39 -0
- data/lib/stripe/resources/payment_link.rb +23 -0
- data/lib/stripe/resources/price.rb +9 -0
- data/lib/stripe/resources/product.rb +9 -0
- data/lib/stripe/resources/refund.rb +30 -0
- data/lib/stripe/resources/setup_intent.rb +10 -0
- data/lib/stripe/resources/shipping_rate.rb +12 -0
- data/lib/stripe/resources/source_transaction.rb +1 -0
- data/lib/stripe/resources/subscription.rb +9 -0
- data/lib/stripe/resources/terminal/configuration.rb +15 -0
- data/lib/stripe/resources/terminal/reader.rb +60 -0
- data/lib/stripe/resources/test_helpers/test_clock.rb +25 -0
- data/lib/stripe/resources.rb +10 -1
- data/lib/stripe/search_result_object.rb +86 -0
- data/lib/stripe/stripe_client.rb +12 -5
- data/lib/stripe/util.rb +47 -0
- data/lib/stripe/version.rb +1 -1
- data/lib/stripe.rb +4 -1
- data/stripe.gemspec +3 -3
- metadata +19 -6
- data/lib/stripe/resources/order_return.rb +0 -10
@@ -5,13 +5,26 @@ module Stripe
|
|
5
5
|
class PaymentIntent < APIResource
|
6
6
|
extend Stripe::APIOperations::Create
|
7
7
|
extend Stripe::APIOperations::List
|
8
|
+
extend Stripe::APIOperations::Search
|
8
9
|
include Stripe::APIOperations::Save
|
9
10
|
|
10
11
|
OBJECT_NAME = "payment_intent"
|
11
12
|
|
13
|
+
custom_method :apply_customer_balance, http_verb: :post
|
12
14
|
custom_method :cancel, http_verb: :post
|
13
15
|
custom_method :capture, http_verb: :post
|
14
16
|
custom_method :confirm, http_verb: :post
|
17
|
+
custom_method :increment_authorization, http_verb: :post
|
18
|
+
custom_method :verify_microdeposits, http_verb: :post
|
19
|
+
|
20
|
+
def apply_customer_balance(params = {}, opts = {})
|
21
|
+
request_stripe_object(
|
22
|
+
method: :post,
|
23
|
+
path: resource_url + "/apply_customer_balance",
|
24
|
+
params: params,
|
25
|
+
opts: opts
|
26
|
+
)
|
27
|
+
end
|
15
28
|
|
16
29
|
def cancel(params = {}, opts = {})
|
17
30
|
request_stripe_object(
|
@@ -39,5 +52,31 @@ module Stripe
|
|
39
52
|
opts: opts
|
40
53
|
)
|
41
54
|
end
|
55
|
+
|
56
|
+
def increment_authorization(params = {}, opts = {})
|
57
|
+
request_stripe_object(
|
58
|
+
method: :post,
|
59
|
+
path: resource_url + "/increment_authorization",
|
60
|
+
params: params,
|
61
|
+
opts: opts
|
62
|
+
)
|
63
|
+
end
|
64
|
+
|
65
|
+
def verify_microdeposits(params = {}, opts = {})
|
66
|
+
request_stripe_object(
|
67
|
+
method: :post,
|
68
|
+
path: resource_url + "/verify_microdeposits",
|
69
|
+
params: params,
|
70
|
+
opts: opts
|
71
|
+
)
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.search(params = {}, opts = {})
|
75
|
+
_search("/v1/payment_intents/search", params, opts)
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.search_auto_paging_each(params = {}, opts = {}, &blk)
|
79
|
+
search(params, opts).auto_paging_each(&blk)
|
80
|
+
end
|
42
81
|
end
|
43
82
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# File generated from our OpenAPI spec
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Stripe
|
5
|
+
class PaymentLink < APIResource
|
6
|
+
extend Stripe::APIOperations::Create
|
7
|
+
extend Stripe::APIOperations::List
|
8
|
+
include Stripe::APIOperations::Save
|
9
|
+
|
10
|
+
OBJECT_NAME = "payment_link"
|
11
|
+
|
12
|
+
custom_method :list_line_items, http_verb: :get, http_path: "line_items"
|
13
|
+
|
14
|
+
def list_line_items(params = {}, opts = {})
|
15
|
+
request_stripe_object(
|
16
|
+
method: :get,
|
17
|
+
path: resource_url + "/line_items",
|
18
|
+
params: params,
|
19
|
+
opts: opts
|
20
|
+
)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -5,8 +5,17 @@ module Stripe
|
|
5
5
|
class Price < APIResource
|
6
6
|
extend Stripe::APIOperations::Create
|
7
7
|
extend Stripe::APIOperations::List
|
8
|
+
extend Stripe::APIOperations::Search
|
8
9
|
include Stripe::APIOperations::Save
|
9
10
|
|
10
11
|
OBJECT_NAME = "price"
|
12
|
+
|
13
|
+
def self.search(params = {}, opts = {})
|
14
|
+
_search("/v1/prices/search", params, opts)
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.search_auto_paging_each(params = {}, opts = {}, &blk)
|
18
|
+
search(params, opts).auto_paging_each(&blk)
|
19
|
+
end
|
11
20
|
end
|
12
21
|
end
|
@@ -6,8 +6,17 @@ module Stripe
|
|
6
6
|
extend Stripe::APIOperations::Create
|
7
7
|
include Stripe::APIOperations::Delete
|
8
8
|
extend Stripe::APIOperations::List
|
9
|
+
extend Stripe::APIOperations::Search
|
9
10
|
include Stripe::APIOperations::Save
|
10
11
|
|
11
12
|
OBJECT_NAME = "product"
|
13
|
+
|
14
|
+
def self.search(params = {}, opts = {})
|
15
|
+
_search("/v1/products/search", params, opts)
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.search_auto_paging_each(params = {}, opts = {}, &blk)
|
19
|
+
search(params, opts).auto_paging_each(&blk)
|
20
|
+
end
|
12
21
|
end
|
13
22
|
end
|
@@ -8,5 +8,35 @@ module Stripe
|
|
8
8
|
include Stripe::APIOperations::Save
|
9
9
|
|
10
10
|
OBJECT_NAME = "refund"
|
11
|
+
|
12
|
+
custom_method :cancel, http_verb: :post
|
13
|
+
|
14
|
+
def cancel(params = {}, opts = {})
|
15
|
+
request_stripe_object(
|
16
|
+
method: :post,
|
17
|
+
path: resource_url + "/cancel",
|
18
|
+
params: params,
|
19
|
+
opts: opts
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_helpers
|
24
|
+
TestHelpers.new(self)
|
25
|
+
end
|
26
|
+
|
27
|
+
class TestHelpers < APIResourceTestHelpers
|
28
|
+
RESOURCE_CLASS = Refund
|
29
|
+
|
30
|
+
custom_method :expire, http_verb: :post
|
31
|
+
|
32
|
+
def expire(params = {}, opts = {})
|
33
|
+
@resource.request_stripe_object(
|
34
|
+
method: :post,
|
35
|
+
path: resource_url + "/expire",
|
36
|
+
params: params,
|
37
|
+
opts: opts
|
38
|
+
)
|
39
|
+
end
|
40
|
+
end
|
11
41
|
end
|
12
42
|
end
|
@@ -11,6 +11,7 @@ module Stripe
|
|
11
11
|
|
12
12
|
custom_method :cancel, http_verb: :post
|
13
13
|
custom_method :confirm, http_verb: :post
|
14
|
+
custom_method :verify_microdeposits, http_verb: :post
|
14
15
|
|
15
16
|
def cancel(params = {}, opts = {})
|
16
17
|
request_stripe_object(
|
@@ -29,5 +30,14 @@ module Stripe
|
|
29
30
|
opts: opts
|
30
31
|
)
|
31
32
|
end
|
33
|
+
|
34
|
+
def verify_microdeposits(params = {}, opts = {})
|
35
|
+
request_stripe_object(
|
36
|
+
method: :post,
|
37
|
+
path: resource_url + "/verify_microdeposits",
|
38
|
+
params: params,
|
39
|
+
opts: opts
|
40
|
+
)
|
41
|
+
end
|
32
42
|
end
|
33
43
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# File generated from our OpenAPI spec
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Stripe
|
5
|
+
class ShippingRate < APIResource
|
6
|
+
extend Stripe::APIOperations::Create
|
7
|
+
extend Stripe::APIOperations::List
|
8
|
+
include Stripe::APIOperations::Save
|
9
|
+
|
10
|
+
OBJECT_NAME = "shipping_rate"
|
11
|
+
end
|
12
|
+
end
|
@@ -6,6 +6,7 @@ module Stripe
|
|
6
6
|
extend Stripe::APIOperations::Create
|
7
7
|
include Stripe::APIOperations::Delete
|
8
8
|
extend Stripe::APIOperations::List
|
9
|
+
extend Stripe::APIOperations::Search
|
9
10
|
include Stripe::APIOperations::Save
|
10
11
|
|
11
12
|
OBJECT_NAME = "subscription"
|
@@ -22,5 +23,13 @@ module Stripe
|
|
22
23
|
end
|
23
24
|
|
24
25
|
save_nested_resource :source
|
26
|
+
|
27
|
+
def self.search(params = {}, opts = {})
|
28
|
+
_search("/v1/subscriptions/search", params, opts)
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.search_auto_paging_each(params = {}, opts = {}, &blk)
|
32
|
+
search(params, opts).auto_paging_each(&blk)
|
33
|
+
end
|
25
34
|
end
|
26
35
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# File generated from our OpenAPI spec
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Stripe
|
5
|
+
module Terminal
|
6
|
+
class Configuration < APIResource
|
7
|
+
extend Stripe::APIOperations::Create
|
8
|
+
include Stripe::APIOperations::Delete
|
9
|
+
extend Stripe::APIOperations::List
|
10
|
+
include Stripe::APIOperations::Save
|
11
|
+
|
12
|
+
OBJECT_NAME = "terminal.configuration"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -10,6 +10,66 @@ module Stripe
|
|
10
10
|
include Stripe::APIOperations::Save
|
11
11
|
|
12
12
|
OBJECT_NAME = "terminal.reader"
|
13
|
+
|
14
|
+
custom_method :cancel_action, http_verb: :post
|
15
|
+
custom_method :process_payment_intent, http_verb: :post
|
16
|
+
custom_method :process_setup_intent, http_verb: :post
|
17
|
+
custom_method :set_reader_display, http_verb: :post
|
18
|
+
|
19
|
+
def cancel_action(params = {}, opts = {})
|
20
|
+
request_stripe_object(
|
21
|
+
method: :post,
|
22
|
+
path: resource_url + "/cancel_action",
|
23
|
+
params: params,
|
24
|
+
opts: opts
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
def process_payment_intent(params = {}, opts = {})
|
29
|
+
request_stripe_object(
|
30
|
+
method: :post,
|
31
|
+
path: resource_url + "/process_payment_intent",
|
32
|
+
params: params,
|
33
|
+
opts: opts
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
def process_setup_intent(params = {}, opts = {})
|
38
|
+
request_stripe_object(
|
39
|
+
method: :post,
|
40
|
+
path: resource_url + "/process_setup_intent",
|
41
|
+
params: params,
|
42
|
+
opts: opts
|
43
|
+
)
|
44
|
+
end
|
45
|
+
|
46
|
+
def set_reader_display(params = {}, opts = {})
|
47
|
+
request_stripe_object(
|
48
|
+
method: :post,
|
49
|
+
path: resource_url + "/set_reader_display",
|
50
|
+
params: params,
|
51
|
+
opts: opts
|
52
|
+
)
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_helpers
|
56
|
+
TestHelpers.new(self)
|
57
|
+
end
|
58
|
+
|
59
|
+
class TestHelpers < APIResourceTestHelpers
|
60
|
+
RESOURCE_CLASS = Reader
|
61
|
+
|
62
|
+
custom_method :present_payment_method, http_verb: :post
|
63
|
+
|
64
|
+
def present_payment_method(params = {}, opts = {})
|
65
|
+
@resource.request_stripe_object(
|
66
|
+
method: :post,
|
67
|
+
path: resource_url + "/present_payment_method",
|
68
|
+
params: params,
|
69
|
+
opts: opts
|
70
|
+
)
|
71
|
+
end
|
72
|
+
end
|
13
73
|
end
|
14
74
|
end
|
15
75
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# File generated from our OpenAPI spec
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Stripe
|
5
|
+
module TestHelpers
|
6
|
+
class TestClock < APIResource
|
7
|
+
extend Stripe::APIOperations::Create
|
8
|
+
include Stripe::APIOperations::Delete
|
9
|
+
extend Stripe::APIOperations::List
|
10
|
+
|
11
|
+
OBJECT_NAME = "test_helpers.test_clock"
|
12
|
+
|
13
|
+
custom_method :advance, http_verb: :post
|
14
|
+
|
15
|
+
def advance(params = {}, opts = {})
|
16
|
+
request_stripe_object(
|
17
|
+
method: :post,
|
18
|
+
path: resource_url + "/advance",
|
19
|
+
params: params,
|
20
|
+
opts: opts
|
21
|
+
)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/stripe/resources.rb
CHANGED
@@ -16,6 +16,7 @@ require "stripe/resources/bitcoin_receiver"
|
|
16
16
|
require "stripe/resources/bitcoin_transaction"
|
17
17
|
require "stripe/resources/capability"
|
18
18
|
require "stripe/resources/card"
|
19
|
+
require "stripe/resources/cash_balance"
|
19
20
|
require "stripe/resources/charge"
|
20
21
|
require "stripe/resources/checkout/session"
|
21
22
|
require "stripe/resources/country_spec"
|
@@ -31,6 +32,11 @@ require "stripe/resources/event"
|
|
31
32
|
require "stripe/resources/exchange_rate"
|
32
33
|
require "stripe/resources/file"
|
33
34
|
require "stripe/resources/file_link"
|
35
|
+
require "stripe/resources/financial_connections/account"
|
36
|
+
require "stripe/resources/financial_connections/account_owner"
|
37
|
+
require "stripe/resources/financial_connections/account_ownership"
|
38
|
+
require "stripe/resources/financial_connections/session"
|
39
|
+
require "stripe/resources/funding_instructions"
|
34
40
|
require "stripe/resources/identity/verification_report"
|
35
41
|
require "stripe/resources/identity/verification_session"
|
36
42
|
require "stripe/resources/invoice"
|
@@ -46,8 +52,8 @@ require "stripe/resources/line_item"
|
|
46
52
|
require "stripe/resources/login_link"
|
47
53
|
require "stripe/resources/mandate"
|
48
54
|
require "stripe/resources/order"
|
49
|
-
require "stripe/resources/order_return"
|
50
55
|
require "stripe/resources/payment_intent"
|
56
|
+
require "stripe/resources/payment_link"
|
51
57
|
require "stripe/resources/payment_method"
|
52
58
|
require "stripe/resources/payout"
|
53
59
|
require "stripe/resources/person"
|
@@ -68,6 +74,7 @@ require "stripe/resources/reversal"
|
|
68
74
|
require "stripe/resources/review"
|
69
75
|
require "stripe/resources/setup_attempt"
|
70
76
|
require "stripe/resources/setup_intent"
|
77
|
+
require "stripe/resources/shipping_rate"
|
71
78
|
require "stripe/resources/sigma/scheduled_query_run"
|
72
79
|
require "stripe/resources/sku"
|
73
80
|
require "stripe/resources/source"
|
@@ -78,9 +85,11 @@ require "stripe/resources/subscription_schedule"
|
|
78
85
|
require "stripe/resources/tax_code"
|
79
86
|
require "stripe/resources/tax_id"
|
80
87
|
require "stripe/resources/tax_rate"
|
88
|
+
require "stripe/resources/terminal/configuration"
|
81
89
|
require "stripe/resources/terminal/connection_token"
|
82
90
|
require "stripe/resources/terminal/location"
|
83
91
|
require "stripe/resources/terminal/reader"
|
92
|
+
require "stripe/resources/test_helpers/test_clock"
|
84
93
|
require "stripe/resources/three_d_secure"
|
85
94
|
require "stripe/resources/token"
|
86
95
|
require "stripe/resources/topup"
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stripe
|
4
|
+
class SearchResultObject < StripeObject
|
5
|
+
include Enumerable
|
6
|
+
include Stripe::APIOperations::Search
|
7
|
+
include Stripe::APIOperations::Request
|
8
|
+
|
9
|
+
OBJECT_NAME = "search_result"
|
10
|
+
|
11
|
+
# This accessor allows a `SearchResultObject` to inherit various filters
|
12
|
+
# that were given to a predecessor. This allows for things like consistent
|
13
|
+
# limits, expansions, and predicates as a user pages through resources.
|
14
|
+
attr_accessor :filters
|
15
|
+
|
16
|
+
# An empty search result object. This is returned from +next+ when we know
|
17
|
+
# that there isn't a next page in order to replicate the behavior of the API
|
18
|
+
# when it attempts to return a page beyond the last.
|
19
|
+
def self.empty_search_result(opts = {})
|
20
|
+
SearchResultObject.construct_from({ data: [] }, opts)
|
21
|
+
end
|
22
|
+
|
23
|
+
def initialize(*args)
|
24
|
+
super
|
25
|
+
self.filters = {}
|
26
|
+
end
|
27
|
+
|
28
|
+
def [](key)
|
29
|
+
case key
|
30
|
+
when String, Symbol
|
31
|
+
super
|
32
|
+
else
|
33
|
+
raise ArgumentError,
|
34
|
+
"You tried to access the #{key.inspect} index, but " \
|
35
|
+
"SearchResultObject types only support String keys. " \
|
36
|
+
"(HINT: Search calls return an object with a 'data' (which is " \
|
37
|
+
"the data array). You likely want to call #data[#{key.inspect}])"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# Iterates through each resource in the page represented by the current
|
42
|
+
# `SearchListObject`.
|
43
|
+
#
|
44
|
+
# Note that this method makes no effort to fetch a new page when it gets to
|
45
|
+
# the end of the current page's resources. See also +auto_paging_each+.
|
46
|
+
def each(&blk)
|
47
|
+
data.each(&blk)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Returns true if the page object contains no elements.
|
51
|
+
def empty?
|
52
|
+
data.empty?
|
53
|
+
end
|
54
|
+
|
55
|
+
# Iterates through each resource in all pages, making additional fetches to
|
56
|
+
# the API as necessary.
|
57
|
+
#
|
58
|
+
# Note that this method will make as many API calls as necessary to fetch
|
59
|
+
# all resources. For more granular control, please see +each+ and
|
60
|
+
# +next_search_result_page+.
|
61
|
+
def auto_paging_each(&blk)
|
62
|
+
return enum_for(:auto_paging_each) unless block_given?
|
63
|
+
|
64
|
+
page = self
|
65
|
+
|
66
|
+
loop do
|
67
|
+
page.each(&blk)
|
68
|
+
page = page.next_search_result_page
|
69
|
+
|
70
|
+
break if page.empty?
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
# Fetches the next page in the resource list (if there is one).
|
75
|
+
#
|
76
|
+
# This method will try to respect the limit of the current page. If none
|
77
|
+
# was given, the default limit will be fetched again.
|
78
|
+
def next_search_result_page(params = {}, opts = {})
|
79
|
+
return self.class.empty_search_result(opts) unless has_more
|
80
|
+
|
81
|
+
params = filters.merge(page: next_page).merge(params)
|
82
|
+
|
83
|
+
_search(url, params, opts)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
data/lib/stripe/stripe_client.rb
CHANGED
@@ -585,7 +585,7 @@ module Stripe
|
|
585
585
|
handle_error_response(resp, context)
|
586
586
|
end
|
587
587
|
|
588
|
-
log_response(context, request_start, http_status, resp.body)
|
588
|
+
log_response(context, request_start, http_status, resp.body, resp)
|
589
589
|
notify_request_end(context, request_duration, http_status,
|
590
590
|
num_retries, user_data)
|
591
591
|
|
@@ -609,7 +609,7 @@ module Stripe
|
|
609
609
|
error_context = context.dup_from_response_headers(e.http_headers)
|
610
610
|
http_status = resp.code.to_i
|
611
611
|
log_response(error_context, request_start,
|
612
|
-
e.http_status, e.http_body)
|
612
|
+
e.http_status, e.http_body, resp)
|
613
613
|
else
|
614
614
|
log_response_error(error_context, request_start, e)
|
615
615
|
end
|
@@ -903,10 +903,13 @@ module Stripe
|
|
903
903
|
body: context.body,
|
904
904
|
idempotency_key: context.idempotency_key,
|
905
905
|
query: context.query,
|
906
|
-
config: config
|
906
|
+
config: config,
|
907
|
+
process_id: Process.pid,
|
908
|
+
thread_object_id: Thread.current.object_id,
|
909
|
+
log_timestamp: Util.monotonic_time)
|
907
910
|
end
|
908
911
|
|
909
|
-
private def log_response(context, request_start, status, body)
|
912
|
+
private def log_response(context, request_start, status, body, resp)
|
910
913
|
Util.log_info("Response from Stripe API",
|
911
914
|
account: context.account,
|
912
915
|
api_version: context.api_version,
|
@@ -921,7 +924,11 @@ module Stripe
|
|
921
924
|
body: body,
|
922
925
|
idempotency_key: context.idempotency_key,
|
923
926
|
request_id: context.request_id,
|
924
|
-
config: config
|
927
|
+
config: config,
|
928
|
+
process_id: Process.pid,
|
929
|
+
thread_object_id: Thread.current.object_id,
|
930
|
+
response_object_id: resp.object_id,
|
931
|
+
log_timestamp: Util.monotonic_time)
|
925
932
|
|
926
933
|
return unless context.request_id
|
927
934
|
|
data/lib/stripe/util.rb
CHANGED
@@ -47,6 +47,53 @@ module Stripe
|
|
47
47
|
Util.object_classes[object_name] == klass
|
48
48
|
end
|
49
49
|
|
50
|
+
# Adds a custom method to a resource class. This is used to add support for
|
51
|
+
# non-CRUDL API requests, e.g. capturing charges. custom_method takes the
|
52
|
+
# following parameters:
|
53
|
+
# - name: the name of the custom method to create (as a symbol)
|
54
|
+
# - http_verb: the HTTP verb for the API request (:get, :post, or :delete)
|
55
|
+
# - http_path: the path to append to the resource's URL. If not provided,
|
56
|
+
# the name is used as the path
|
57
|
+
# - resource: the resource implementation class
|
58
|
+
# - target: the class that custom static method will be added to
|
59
|
+
#
|
60
|
+
# For example, this call:
|
61
|
+
# custom_method :capture, http_verb: post
|
62
|
+
# adds a `capture` class method to the resource class that, when called,
|
63
|
+
# will send a POST request to `/v1/<object_name>/capture`.
|
64
|
+
def self.custom_method(resource, target, name, http_verb, http_path)
|
65
|
+
unless %i[get post delete].include?(http_verb)
|
66
|
+
raise ArgumentError,
|
67
|
+
"Invalid http_verb value: #{http_verb.inspect}. Should be one " \
|
68
|
+
"of :get, :post or :delete."
|
69
|
+
end
|
70
|
+
unless target.respond_to?(:resource_url)
|
71
|
+
raise ArgumentError,
|
72
|
+
"Invalid target value: #{target}. Target class should have a " \
|
73
|
+
"`resource_url` method."
|
74
|
+
end
|
75
|
+
http_path ||= name.to_s
|
76
|
+
target.define_singleton_method(name) do |id, params = {}, opts = {}|
|
77
|
+
unless id.is_a?(String)
|
78
|
+
raise ArgumentError,
|
79
|
+
"id should be a string representing the ID of an API resource"
|
80
|
+
end
|
81
|
+
|
82
|
+
url = "#{target.resource_url}/"\
|
83
|
+
"#{CGI.escape(id)}/"\
|
84
|
+
"#{CGI.escape(http_path)}"
|
85
|
+
|
86
|
+
resp, opts = resource.execute_resource_request(
|
87
|
+
http_verb,
|
88
|
+
url,
|
89
|
+
params,
|
90
|
+
opts
|
91
|
+
)
|
92
|
+
|
93
|
+
Util.convert_to_stripe_object(resp.data, opts)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
50
97
|
# Converts a hash of fields or an array of hashes into a +StripeObject+ or
|
51
98
|
# array of +StripeObject+s. These new objects will be created as a concrete
|
52
99
|
# type as dictated by their `object` field (e.g. an `object` value of
|
data/lib/stripe/version.rb
CHANGED
data/lib/stripe.rb
CHANGED
@@ -24,6 +24,7 @@ require "stripe/api_operations/list"
|
|
24
24
|
require "stripe/api_operations/nested_resource"
|
25
25
|
require "stripe/api_operations/request"
|
26
26
|
require "stripe/api_operations/save"
|
27
|
+
require "stripe/api_operations/search"
|
27
28
|
|
28
29
|
# API resource support classes
|
29
30
|
require "stripe/errors"
|
@@ -35,8 +36,10 @@ require "stripe/stripe_client"
|
|
35
36
|
require "stripe/stripe_object"
|
36
37
|
require "stripe/stripe_response"
|
37
38
|
require "stripe/list_object"
|
39
|
+
require "stripe/search_result_object"
|
38
40
|
require "stripe/error_object"
|
39
41
|
require "stripe/api_resource"
|
42
|
+
require "stripe/api_resource_test_helpers"
|
40
43
|
require "stripe/singleton_api_resource"
|
41
44
|
require "stripe/webhook"
|
42
45
|
require "stripe/stripe_configuration"
|
@@ -103,7 +106,7 @@ module Stripe
|
|
103
106
|
# with API requests. Useful for plugin authors to identify their plugin when
|
104
107
|
# communicating with Stripe.
|
105
108
|
#
|
106
|
-
# Takes a name and optional
|
109
|
+
# Takes a name and optional partner program ID, plugin URL, and version.
|
107
110
|
def self.set_app_info(name, partner_id: nil, url: nil, version: nil)
|
108
111
|
@app_info = {
|
109
112
|
name: name,
|
data/stripe.gemspec
CHANGED
@@ -13,16 +13,16 @@ Gem::Specification.new do |s|
|
|
13
13
|
"See https://stripe.com for details."
|
14
14
|
s.author = "Stripe"
|
15
15
|
s.email = "support@stripe.com"
|
16
|
-
s.homepage = "https://stripe.com/docs/api
|
16
|
+
s.homepage = "https://stripe.com/docs/api?lang=ruby"
|
17
17
|
s.license = "MIT"
|
18
18
|
|
19
19
|
s.metadata = {
|
20
20
|
"bug_tracker_uri" => "https://github.com/stripe/stripe-ruby/issues",
|
21
21
|
"changelog_uri" =>
|
22
22
|
"https://github.com/stripe/stripe-ruby/blob/master/CHANGELOG.md",
|
23
|
-
"documentation_uri" => "https://stripe.com/docs/api
|
23
|
+
"documentation_uri" => "https://stripe.com/docs/api?lang=ruby",
|
24
24
|
"github_repo" => "ssh://github.com/stripe/stripe-ruby",
|
25
|
-
"homepage_uri" => "https://stripe.com/docs/api
|
25
|
+
"homepage_uri" => "https://stripe.com/docs/api?lang=ruby",
|
26
26
|
"source_code_uri" => "https://github.com/stripe/stripe-ruby",
|
27
27
|
}
|
28
28
|
|