stripe 5.38.0 → 6.0.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 +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
|
|