Class: Dinie::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/dinie/generated/client.rb,
sig/dinie/generated/client.rbs

Constant Summary collapse

DEFAULT_TIMEOUT_SECONDS =

Returns:

  • (Integer)
Internal::HttpClient::DEFAULT_TIMEOUT_SECONDS
DEFAULT_MAX_RETRIES =

Returns:

  • (Integer)
Internal::HttpClient::DEFAULT_MAX_RETRIES

Instance Method Summary collapse

Constructor Details

#initialize(client_id: nil, client_secret: nil, code: nil, base_url: nil, timeout: DEFAULT_TIMEOUT_SECONDS, max_retries: DEFAULT_MAX_RETRIES, idempotency: true, log_level: :off, logger: nil, adapter: nil, token_manager: nil, connection: nil) ⇒ Client

Returns a new instance of Client.

Parameters:

  • client_id: (String, nil) (defaults to: nil)
  • client_secret: (String, nil) (defaults to: nil)
  • base_url: (String, nil) (defaults to: nil)
  • timeout: (Numeric) (defaults to: DEFAULT_TIMEOUT_SECONDS)
  • max_retries: (Integer) (defaults to: DEFAULT_MAX_RETRIES)
  • idempotency: (Boolean) (defaults to: true)
  • log_level: (Symbol) (defaults to: :off)
  • logger: (Object) (defaults to: nil)
  • adapter: (Symbol, nil) (defaults to: nil)
  • token_manager: (Dinie::Internal::TokenManager, nil) (defaults to: nil)
  • connection: (Object) (defaults to: nil)


12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/dinie/generated/client.rb', line 12

def initialize(client_id: nil, client_secret: nil, code: nil, base_url: nil, timeout: DEFAULT_TIMEOUT_SECONDS,
               max_retries: DEFAULT_MAX_RETRIES, idempotency: true, log_level: :off, logger: nil,
               adapter: nil, token_manager: nil, connection: nil)
  @base_url = first_present(base_url, ENV.fetch("DINIE_BASE_URL", nil)) || Internal::HttpClient::DEFAULT_BASE_URL
  @options = {
    timeout: timeout, max_retries: max_retries, idempotency: idempotency,
    log_level: log_level, logger: logger, adapter: adapter
  }

  @connection = connection || build_connection(log_level: log_level, logger: logger, adapter: adapter)
  @token_manager = token_manager || build_token_manager(client_id, client_secret, code)
  @http = Internal::HttpClient.new(
    token_manager: @token_manager, base_url: @base_url, timeout: timeout,
    max_retries: max_retries, idempotency: idempotency, connection: @connection
  )
end

Instance Method Details

#banks ⇒ Dinie::Resources::Banks

The banks resource (flat Array<Bank> list).



25
26
27
# File 'sig/dinie/generated/client.rbs', line 25

def banks
  @banks ||= Resources::Banks.new(@http)
end

#biometrics ⇒ Object



33
34
35
# File 'lib/dinie/generated/client.rb', line 33

def biometrics
  @biometrics ||= Resources::Biometrics.new(@http)
end

#build_connection(log_level:, logger:, adapter:) ⇒ Object

Parameters:

  • log_level: (Symbol)
  • logger: (Object)
  • adapter: (Symbol, nil)

Returns:

  • (Object)


84
85
86
87
88
89
90
# File 'lib/dinie/generated/client.rb', line 84

def build_connection(log_level:, logger:, adapter:)
  Faraday.new(url: @base_url) do |faraday|
    faraday.request :multipart
    faraday.use Internal::Middleware::Logging, level: log_level, logger: logger
    faraday.adapter(adapter || :net_http_persistent)
  end
end

#build_token_manager(client_id, client_secret, code = nil) ⇒ Dinie::Internal::TokenManager

Parameters:

  • client_id (String, nil)
  • client_secret (String, nil)

Returns:

Raises:



70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/dinie/generated/client.rb', line 70

def build_token_manager(client_id, client_secret, code = nil)
  resolved_id = first_present(client_id, ENV.fetch("DINIE_CLIENT_ID", nil))
  resolved_secret = first_present(client_secret, ENV.fetch("DINIE_CLIENT_SECRET", nil))
  raise Dinie::Error, "Missing Dinie client id: pass `client_id:` or set DINIE_CLIENT_ID." if resolved_id.nil?
  if resolved_secret.nil?
    raise Dinie::Error, "Missing Dinie client secret: pass `client_secret:` or set DINIE_CLIENT_SECRET."
  end

  Internal::TokenManager.new(
    client_id: resolved_id, client_secret: resolved_secret,
    base_url: @base_url, connection: @connection, code: code
  )
end

#credentials ⇒ Dinie::Resources::Credentials

The credentials resource.



28
29
30
# File 'sig/dinie/generated/client.rbs', line 28

def credentials
  @credentials ||= Resources::Credentials.new(@http)
end

#credit_offers ⇒ Dinie::Resources::CreditOffers

The credit-offers resource.



19
20
21
# File 'sig/dinie/generated/client.rbs', line 19

def credit_offers
  @credit_offers ||= Resources::CreditOffers.new(@http)
end

#customers ⇒ Dinie::Resources::Customers

The customers resource.



16
17
18
# File 'sig/dinie/generated/client.rbs', line 16

def customers
  @customers ||= Resources::Customers.new(@http)
end

#first_present(*candidates) ⇒ Object

Parameters:

  • candidates (Object)

Returns:

  • (Object)


92
93
94
# File 'lib/dinie/generated/client.rb', line 92

def first_present(*candidates)
  candidates.find { |value| !value.nil? && value != "" }
end

#loans ⇒ Dinie::Resources::Loans

The loans resource.



22
23
24
# File 'sig/dinie/generated/client.rbs', line 22

def loans
  @loans ||= Resources::Loans.new(@http)
end

#rate_limit ⇒ Dinie::RateLimit?

The latest rate-limit snapshot; nil before the first call.

Returns:



34
35
36
# File 'sig/dinie/generated/client.rbs', line 34

def rate_limit
  @http.rate_limit
end

#webhook_endpoints ⇒ Dinie::Resources::WebhookEndpoints

The webhook-endpoints resource.



31
32
33
# File 'sig/dinie/generated/client.rbs', line 31

def webhook_endpoints
  @webhook_endpoints ||= Resources::WebhookEndpoints.new(@http)
end

#with_options(**overrides) ⇒ Dinie::Client

Clone the client with merged config, sharing the same TokenManager + connection.

Parameters:

  • overrides (Object)

Returns:



37
38
39
40
41
42
# File 'sig/dinie/generated/client.rbs', line 37

def with_options(**overrides)
  self.class.new(
    base_url: @base_url, token_manager: @token_manager, connection: @connection,
    **@options.merge(overrides)
  )
end