Class: Billingrails::Client
- Inherits:
-
Object
- Object
- Billingrails::Client
- Defined in:
- lib/billingrails/client.rb
Overview
Main client for interacting with the Billingrails API
Constant Summary collapse
- DEFAULT_BASE_URL =
'https://api.billingrails.com/v1'- DEFAULT_TIMEOUT =
30- DEFAULT_MAX_RETRIES =
3- RETRYABLE_HTTP_STATUSES =
[429, 500, 502, 503, 504].freeze
Instance Attribute Summary collapse
-
#accounts ⇒ Object
readonly
Returns the value of attribute accounts.
-
#api_key ⇒ Object
readonly
Returns the value of attribute api_key.
-
#base_url ⇒ Object
readonly
Returns the value of attribute base_url.
-
#credit_grants ⇒ Object
readonly
Returns the value of attribute credit_grants.
-
#discounts ⇒ Object
readonly
Returns the value of attribute discounts.
-
#events ⇒ Object
readonly
Returns the value of attribute events.
-
#fees ⇒ Object
readonly
Returns the value of attribute fees.
-
#invoices ⇒ Object
readonly
Returns the value of attribute invoices.
-
#max_retries ⇒ Object
readonly
Returns the value of attribute max_retries.
-
#meters ⇒ Object
readonly
Returns the value of attribute meters.
-
#payment_links ⇒ Object
readonly
Returns the value of attribute payment_links.
-
#payments ⇒ Object
readonly
Returns the value of attribute payments.
-
#plans ⇒ Object
readonly
Returns the value of attribute plans.
-
#prices ⇒ Object
readonly
Returns the value of attribute prices.
-
#subscriptions ⇒ Object
readonly
Returns the value of attribute subscriptions.
-
#timeout ⇒ Object
readonly
Returns the value of attribute timeout.
Instance Method Summary collapse
-
#initialize(api_key:, base_url: DEFAULT_BASE_URL, timeout: DEFAULT_TIMEOUT, max_retries: DEFAULT_MAX_RETRIES) ⇒ Client
constructor
Initialize a new client.
-
#request(method, path, body: nil, params: nil) ⇒ Hash
Make an HTTP request.
Constructor Details
#initialize(api_key:, base_url: DEFAULT_BASE_URL, timeout: DEFAULT_TIMEOUT, max_retries: DEFAULT_MAX_RETRIES) ⇒ Client
Initialize a new client
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/billingrails/client.rb', line 27 def initialize(api_key:, base_url: DEFAULT_BASE_URL, timeout: DEFAULT_TIMEOUT, max_retries: DEFAULT_MAX_RETRIES) @api_key = api_key @base_url = base_url.chomp('/') @timeout = timeout @max_retries = max_retries validate_config! # Initialize top-level resources @accounts = Resources::Accounts.new(self) @invoices = Resources::Invoices.new(self) @payments = Resources::Payments.new(self) @payment_pages = Resources::PaymentLinks.new(self) @checkout_sessions = Resources::CheckoutSessions.new(self) @subscriptions = Resources::Subscriptions.new(self) @products = Resources::Products.new(self) @prices = Resources::Prices.new(self) @plans = Resources::Plans.new(self) @events = Resources::Events.new(self) @meters = Resources::Meters.new(self) @credit_grants = Resources::CreditGrants.new(self) @discounts = Resources::Discounts.new(self) @tax_rates = Resources::TaxRates.new(self) end |
Instance Attribute Details
#accounts ⇒ Object (readonly)
Returns the value of attribute accounts.
17 18 19 |
# File 'lib/billingrails/client.rb', line 17 def accounts @accounts end |
#api_key ⇒ Object (readonly)
Returns the value of attribute api_key.
16 17 18 |
# File 'lib/billingrails/client.rb', line 16 def api_key @api_key end |
#base_url ⇒ Object (readonly)
Returns the value of attribute base_url.
16 17 18 |
# File 'lib/billingrails/client.rb', line 16 def base_url @base_url end |
#credit_grants ⇒ Object (readonly)
Returns the value of attribute credit_grants.
19 20 21 |
# File 'lib/billingrails/client.rb', line 19 def credit_grants @credit_grants end |
#discounts ⇒ Object (readonly)
Returns the value of attribute discounts.
19 20 21 |
# File 'lib/billingrails/client.rb', line 19 def discounts @discounts end |
#events ⇒ Object (readonly)
Returns the value of attribute events.
18 19 20 |
# File 'lib/billingrails/client.rb', line 18 def events @events end |
#fees ⇒ Object (readonly)
Returns the value of attribute fees.
18 19 20 |
# File 'lib/billingrails/client.rb', line 18 def fees @fees end |
#invoices ⇒ Object (readonly)
Returns the value of attribute invoices.
17 18 19 |
# File 'lib/billingrails/client.rb', line 17 def invoices @invoices end |
#max_retries ⇒ Object (readonly)
Returns the value of attribute max_retries.
16 17 18 |
# File 'lib/billingrails/client.rb', line 16 def max_retries @max_retries end |
#meters ⇒ Object (readonly)
Returns the value of attribute meters.
18 19 20 |
# File 'lib/billingrails/client.rb', line 18 def meters @meters end |
#payment_links ⇒ Object (readonly)
Returns the value of attribute payment_links.
17 18 19 |
# File 'lib/billingrails/client.rb', line 17 def payment_links @payment_links end |
#payments ⇒ Object (readonly)
Returns the value of attribute payments.
17 18 19 |
# File 'lib/billingrails/client.rb', line 17 def payments @payments end |
#plans ⇒ Object (readonly)
Returns the value of attribute plans.
18 19 20 |
# File 'lib/billingrails/client.rb', line 18 def plans @plans end |
#prices ⇒ Object (readonly)
Returns the value of attribute prices.
18 19 20 |
# File 'lib/billingrails/client.rb', line 18 def prices @prices end |
#subscriptions ⇒ Object (readonly)
Returns the value of attribute subscriptions.
18 19 20 |
# File 'lib/billingrails/client.rb', line 18 def subscriptions @subscriptions end |
#timeout ⇒ Object (readonly)
Returns the value of attribute timeout.
16 17 18 |
# File 'lib/billingrails/client.rb', line 16 def timeout @timeout end |
Instance Method Details
#request(method, path, body: nil, params: nil) ⇒ Hash
Make an HTTP request
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/billingrails/client.rb', line 60 def request(method, path, body: nil, params: nil) uri = build_uri(path, params) http_request = build_request(method, uri, body) last_exception = nil last_error_response = nil @max_retries.times do |attempt| begin response = execute_request(uri, http_request) rescue StandardError => e last_exception = e break end last_exception = nil code = response.code.to_i if (200..299).cover?(code) return {} if response.body.nil? || response.body.empty? return JSON.parse(response.body) end if attempt < @max_retries - 1 && retryable_status?(code) sleep(2**attempt) next end last_error_response = response break end if last_error_response handle_response(last_error_response) elsif last_exception raise ConnectionError, "Failed to connect to API: #{last_exception.}" else raise ConnectionError, 'Failed to connect to API' end end |