mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-18 20:59:39 +02:00
* Ignore env.test from source control * Simplification of providers interface * Synth tests * Update money to use new find rates method * Remove unused issues code * Additional issue feature removals * Update price data fetching and tests * Update documentation for providers * Security test fixes * Fix self host test * Update synth usage data access * Remove AI pr schema changes
35 lines
807 B
Ruby
35 lines
807 B
Ruby
class Provider
|
|
include Retryable
|
|
|
|
ProviderError = Class.new(StandardError)
|
|
ProviderResponse = Data.define(:success?, :data, :error)
|
|
|
|
private
|
|
PaginatedData = Data.define(:paginated, :first_page, :total_pages)
|
|
UsageData = Data.define(:used, :limit, :utilization, :plan)
|
|
|
|
# Subclasses can specify errors that can be retried
|
|
def retryable_errors
|
|
[]
|
|
end
|
|
|
|
def provider_response(retries: nil, &block)
|
|
data = if retries
|
|
retrying(retryable_errors, max_retries: retries) { yield }
|
|
else
|
|
yield
|
|
end
|
|
|
|
ProviderResponse.new(
|
|
success?: true,
|
|
data: data,
|
|
error: nil,
|
|
)
|
|
rescue StandardError => error
|
|
ProviderResponse.new(
|
|
success?: false,
|
|
data: nil,
|
|
error: error,
|
|
)
|
|
end
|
|
end
|