mirror of
https://github.com/stripe/stripe-ruby.git
synced 2025-07-07 00:01:20 -04:00
Compare commits
8 Commits
5ea85d0867
...
15415fcbf3
Author | SHA1 | Date | |
---|---|---|---|
|
15415fcbf3 | ||
|
f8acdb5f6a | ||
|
fe794f4868 | ||
|
2b841bc109 | ||
|
1835883848 | ||
|
e11400adc8 | ||
|
e0a50213e7 | ||
|
c1d0ced565 |
@ -1,5 +1,14 @@
|
||||
# Changelog
|
||||
|
||||
## 8.2.0-beta.1 - 2023-01-12
|
||||
* [#1167](https://github.com/stripe/stripe-ruby/pull/1167) API Updates for beta branch
|
||||
* Updated stable APIs to the latest version
|
||||
* Change `quote.draft_quote` implementation to from calling `POST /v1/quotes/{quote}/draft` to `POST /v1/quotes/{quote}/mark_draft`
|
||||
* Add support for `Tax::Register` resource
|
||||
|
||||
## 8.1.0 - 2023-01-12
|
||||
* [#1162](https://github.com/stripe/stripe-ruby/pull/1162) Improve request events instrumentation
|
||||
|
||||
## 8.1.0-beta.4 - 2023-01-05
|
||||
* [#1164](https://github.com/stripe/stripe-ruby/pull/1164) API Updates for beta branch
|
||||
* Updated stable APIs to the latest version
|
||||
|
@ -1 +1 @@
|
||||
v217
|
||||
v218
|
@ -33,6 +33,10 @@ module Stripe
|
||||
attr_reader :num_retries
|
||||
attr_reader :path
|
||||
attr_reader :request_id
|
||||
attr_reader :response_header
|
||||
attr_reader :response_body
|
||||
attr_reader :request_header
|
||||
attr_reader :request_body
|
||||
|
||||
# Arbitrary user-provided data in the form of a Ruby hash that's passed
|
||||
# from subscribers on `request_begin` to subscribers on `request_end`.
|
||||
@ -40,19 +44,53 @@ module Stripe
|
||||
# in `request_end`.
|
||||
attr_reader :user_data
|
||||
|
||||
def initialize(duration:, http_status:, method:, num_retries:, path:,
|
||||
request_id:, user_data: nil)
|
||||
@duration = duration
|
||||
@http_status = http_status
|
||||
@method = method
|
||||
def initialize(request_context:, response_context:,
|
||||
num_retries:, user_data: nil)
|
||||
@duration = request_context.duration
|
||||
@http_status = response_context.http_status
|
||||
@method = request_context.method
|
||||
@num_retries = num_retries
|
||||
@path = path
|
||||
@request_id = request_id
|
||||
@path = request_context.path
|
||||
@request_id = request_context.request_id
|
||||
@user_data = user_data
|
||||
@response_header = response_context.header
|
||||
@response_body = response_context.body
|
||||
@request_header = request_context.header
|
||||
@request_body = request_context.body
|
||||
freeze
|
||||
end
|
||||
end
|
||||
|
||||
class RequestContext
|
||||
attr_reader :duration
|
||||
attr_reader :method
|
||||
attr_reader :path
|
||||
attr_reader :request_id
|
||||
attr_reader :body
|
||||
attr_reader :header
|
||||
|
||||
def initialize(duration:, context:, header:)
|
||||
@duration = duration
|
||||
@method = context.method
|
||||
@path = context.path
|
||||
@request_id = context.request_id
|
||||
@body = context.body
|
||||
@header = header
|
||||
end
|
||||
end
|
||||
|
||||
class ResponseContext
|
||||
attr_reader :http_status
|
||||
attr_reader :body
|
||||
attr_reader :header
|
||||
|
||||
def initialize(http_status:, response:)
|
||||
@http_status = http_status
|
||||
@header = response ? response.to_hash : nil
|
||||
@body = response ? response.body : nil
|
||||
end
|
||||
end
|
||||
|
||||
# This class was renamed for consistency. This alias is here for backwards
|
||||
# compatibility.
|
||||
RequestEvent = RequestEndEvent
|
||||
|
@ -98,6 +98,7 @@ module Stripe
|
||||
SubscriptionItem::OBJECT_NAME => SubscriptionItem,
|
||||
SubscriptionSchedule::OBJECT_NAME => SubscriptionSchedule,
|
||||
Tax::Calculation::OBJECT_NAME => Tax::Calculation,
|
||||
Tax::Registration::OBJECT_NAME => Tax::Registration,
|
||||
Tax::Transaction::OBJECT_NAME => Tax::Transaction,
|
||||
TaxCode::OBJECT_NAME => TaxCode,
|
||||
TaxId::OBJECT_NAME => TaxId,
|
||||
|
@ -85,6 +85,7 @@ require "stripe/resources/subscription"
|
||||
require "stripe/resources/subscription_item"
|
||||
require "stripe/resources/subscription_schedule"
|
||||
require "stripe/resources/tax/calculation"
|
||||
require "stripe/resources/tax/registration"
|
||||
require "stripe/resources/tax/transaction"
|
||||
require "stripe/resources/tax_code"
|
||||
require "stripe/resources/tax_id"
|
||||
|
@ -32,7 +32,7 @@ module Stripe
|
||||
def draft_quote(params = {}, opts = {})
|
||||
request_stripe_object(
|
||||
method: :post,
|
||||
path: format("/v1/quotes/%<quote>s/draft", { quote: CGI.escape(self["id"]) }),
|
||||
path: format("/v1/quotes/%<quote>s/mark_draft", { quote: CGI.escape(self["id"]) }),
|
||||
params: params,
|
||||
opts: opts
|
||||
)
|
||||
@ -140,7 +140,7 @@ module Stripe
|
||||
def self.draft_quote(quote, params = {}, opts = {})
|
||||
request_stripe_object(
|
||||
method: :post,
|
||||
path: format("/v1/quotes/%<quote>s/draft", { quote: CGI.escape(quote) }),
|
||||
path: format("/v1/quotes/%<quote>s/mark_draft", { quote: CGI.escape(quote) }),
|
||||
params: params,
|
||||
opts: opts
|
||||
)
|
||||
|
17
lib/stripe/resources/tax/registration.rb
Normal file
17
lib/stripe/resources/tax/registration.rb
Normal file
@ -0,0 +1,17 @@
|
||||
# File generated from our OpenAPI spec
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Stripe
|
||||
module Tax
|
||||
# A Tax `Registration` lets us know that your business is registered to collect tax on payments within a region, enabling you to [automatically collect tax](https://stripe.com/docs/tax).
|
||||
#
|
||||
# Stripe will not register on your behalf with the relevant authorities when you create a Tax `Registration` object. For more information on how to register to collect tax, see [our guide](https://stripe.com/docs/tax/registering).
|
||||
class Registration < APIResource
|
||||
extend Stripe::APIOperations::Create
|
||||
extend Stripe::APIOperations::List
|
||||
include Stripe::APIOperations::Save
|
||||
|
||||
OBJECT_NAME = "tax.registration"
|
||||
end
|
||||
end
|
||||
end
|
@ -494,15 +494,16 @@ module Stripe
|
||||
end
|
||||
end
|
||||
|
||||
http_resp = execute_request_with_rescues(method, api_base, context) do
|
||||
self.class
|
||||
.default_connection_manager(config)
|
||||
.execute_request(method, url,
|
||||
body: body,
|
||||
headers: headers,
|
||||
query: query,
|
||||
&response_block)
|
||||
end
|
||||
http_resp =
|
||||
execute_request_with_rescues(method, api_base, headers, context) do
|
||||
self.class
|
||||
.default_connection_manager(config)
|
||||
.execute_request(method, url,
|
||||
body: body,
|
||||
headers: headers,
|
||||
query: query,
|
||||
&response_block)
|
||||
end
|
||||
|
||||
[http_resp, api_key]
|
||||
end
|
||||
@ -564,7 +565,7 @@ module Stripe
|
||||
http_status >= 400
|
||||
end
|
||||
|
||||
private def execute_request_with_rescues(method, api_base, context)
|
||||
private def execute_request_with_rescues(method, api_base, headers, context)
|
||||
num_retries = 0
|
||||
|
||||
begin
|
||||
@ -587,7 +588,7 @@ module Stripe
|
||||
|
||||
log_response(context, request_start, http_status, resp.body, resp)
|
||||
notify_request_end(context, request_duration, http_status,
|
||||
num_retries, user_data)
|
||||
num_retries, user_data, resp, headers)
|
||||
|
||||
if config.enable_telemetry? && context.request_id
|
||||
request_duration_ms = (request_duration * 1000).to_i
|
||||
@ -614,7 +615,7 @@ module Stripe
|
||||
log_response_error(error_context, request_start, e)
|
||||
end
|
||||
notify_request_end(context, request_duration, http_status, num_retries,
|
||||
user_data)
|
||||
user_data, resp, headers)
|
||||
|
||||
if self.class.should_retry?(e,
|
||||
method: method,
|
||||
@ -657,17 +658,24 @@ module Stripe
|
||||
end
|
||||
|
||||
private def notify_request_end(context, duration, http_status, num_retries,
|
||||
user_data)
|
||||
user_data, resp, headers)
|
||||
return if !Instrumentation.any_subscribers?(:request_end) &&
|
||||
!Instrumentation.any_subscribers?(:request)
|
||||
|
||||
event = Instrumentation::RequestEndEvent.new(
|
||||
request_context = Stripe::Instrumentation::RequestContext.new(
|
||||
duration: duration,
|
||||
context: context,
|
||||
header: headers
|
||||
)
|
||||
response_context = Stripe::Instrumentation::ResponseContext.new(
|
||||
http_status: http_status,
|
||||
method: context.method,
|
||||
response: resp
|
||||
)
|
||||
|
||||
event = Instrumentation::RequestEndEvent.new(
|
||||
request_context: request_context,
|
||||
response_context: response_context,
|
||||
num_retries: num_retries,
|
||||
path: context.path,
|
||||
request_id: context.request_id,
|
||||
user_data: user_data || {}
|
||||
)
|
||||
Stripe::Instrumentation.notify(:request_end, event)
|
||||
|
@ -1,5 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Stripe
|
||||
VERSION = "8.1.0-beta.4"
|
||||
VERSION = "8.2.0-beta.1"
|
||||
end
|
||||
|
@ -58,13 +58,29 @@ module Stripe
|
||||
|
||||
context "RequestEventEnd" do
|
||||
should "return a frozen object" do
|
||||
event = Stripe::Instrumentation::RequestEndEvent.new(
|
||||
mock_context = stub(
|
||||
duration: 0.1,
|
||||
http_status: 200,
|
||||
method: :get,
|
||||
num_retries: 0,
|
||||
path: "/v1/test",
|
||||
request_id: "req_123",
|
||||
body: ""
|
||||
)
|
||||
|
||||
request_context = Stripe::Instrumentation::RequestContext.new(
|
||||
duration: 0.1,
|
||||
context: mock_context,
|
||||
header: nil
|
||||
)
|
||||
|
||||
response_context = Stripe::Instrumentation::ResponseContext.new(
|
||||
http_status: 200,
|
||||
response: nil
|
||||
)
|
||||
|
||||
event = Stripe::Instrumentation::RequestEndEvent.new(
|
||||
num_retries: 0,
|
||||
request_context: request_context,
|
||||
response_context: response_context,
|
||||
user_data: nil
|
||||
)
|
||||
|
||||
|
@ -1443,19 +1443,25 @@ module Stripe
|
||||
should "notify a subscriber of a successful HTTP request" do
|
||||
events = []
|
||||
Stripe::Instrumentation.subscribe(:request_end, :test) { |event| events << event }
|
||||
stub_response_body = JSON.generate(object: "charge")
|
||||
|
||||
stub_request(:get, "#{Stripe.api_base}/v1/charges")
|
||||
.to_return(body: JSON.generate(object: "charge"), headers: { "Request-ID": "req_123" })
|
||||
Stripe::Charge.list
|
||||
stub_request(:post, "#{Stripe.api_base}/v1/charges")
|
||||
.with(body: { "amount" => "50", "currency" => "usd", "card" => "sc_token" })
|
||||
.to_return(body: stub_response_body, headers: { "Request-ID": "req_123" })
|
||||
|
||||
Stripe::Charge.create(amount: 50, currency: "usd", card: "sc_token")
|
||||
|
||||
assert_equal(1, events.size)
|
||||
event = events.first
|
||||
assert_equal(:get, event.method)
|
||||
assert_equal(:post, event.method)
|
||||
assert_equal("/v1/charges", event.path)
|
||||
assert_equal(200, event.http_status)
|
||||
assert(event.duration.positive?)
|
||||
assert_equal(0, event.num_retries)
|
||||
assert_equal("req_123", event.request_id)
|
||||
assert_equal(stub_response_body, event.response_body)
|
||||
assert_equal("amount=50¤cy=usd&card=sc_token", event.request_body)
|
||||
assert(event.request_header)
|
||||
end
|
||||
|
||||
should "notify a subscriber of a StripeError" do
|
||||
@ -1484,6 +1490,7 @@ module Stripe
|
||||
assert_equal(500, event.http_status)
|
||||
assert(event.duration.positive?)
|
||||
assert_equal(0, event.num_retries)
|
||||
assert_equal(JSON.generate(error: error), event.response_body)
|
||||
end
|
||||
|
||||
should "notify a subscriber of a network error" do
|
||||
@ -1526,8 +1533,9 @@ module Stripe
|
||||
events = []
|
||||
Stripe::Instrumentation.subscribe(:request, :test) { |event| events << event }
|
||||
|
||||
stub_response_body = JSON.generate(object: "charge")
|
||||
stub_request(:get, "#{Stripe.api_base}/v1/charges")
|
||||
.to_return(body: JSON.generate(object: "charge"))
|
||||
.to_return(body: stub_response_body)
|
||||
Stripe::Charge.list
|
||||
|
||||
assert_equal(1, events.size)
|
||||
@ -1537,6 +1545,8 @@ module Stripe
|
||||
assert_equal(200, event.http_status)
|
||||
assert(event.duration.positive?)
|
||||
assert_equal(0, event.num_retries)
|
||||
assert_equal(stub_response_body, event.response_body)
|
||||
assert(event.request_header)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user