mirror of
https://github.com/we-promise/sure.git
synced 2026-05-08 05:04:59 +00:00
* feat: handle defi account with coinstats provider * chore: refactor to follow project conventions * fix: fixing codex/coderabbit findings * fix: fixing coderabbit findings * fix: fixing coderabbit findings * fix: fixing coderabbit findings * fix: fixing coderabbit findings * fix: fixing coderabbit findings
62 lines
1.7 KiB
Ruby
62 lines
1.7 KiB
Ruby
module CoinstatsAccount::SourceClassification
|
|
extend ActiveSupport::Concern
|
|
|
|
def wallet_source?
|
|
payload = raw_payload.to_h.with_indifferent_access
|
|
return false if payload[:source] == "defi"
|
|
payload[:source] == "wallet" || (payload[:address].present? && payload[:blockchain].present?)
|
|
end
|
|
|
|
def defi_source?
|
|
payload = raw_payload.to_h.with_indifferent_access
|
|
payload[:source] == "defi"
|
|
end
|
|
|
|
def exchange_source?
|
|
exchange_source_for?(raw_payload)
|
|
end
|
|
|
|
def exchange_portfolio_account?
|
|
payload = raw_payload.to_h.with_indifferent_access
|
|
exchange_source_for?(payload) && (
|
|
ActiveModel::Type::Boolean.new.cast(payload[:portfolio_account]) ||
|
|
payload[:coins].is_a?(Array)
|
|
)
|
|
end
|
|
|
|
def legacy_exchange_asset_account?
|
|
exchange_source? && !exchange_portfolio_account?
|
|
end
|
|
|
|
def fiat_asset?(payload = raw_payload)
|
|
payload = payload.to_h.with_indifferent_access
|
|
return false if exchange_portfolio_source_for?(payload)
|
|
|
|
metadata = asset_metadata(payload)
|
|
|
|
ActiveModel::Type::Boolean.new.cast(metadata[:isFiat]) ||
|
|
ActiveModel::Type::Boolean.new.cast(payload[:isFiat]) ||
|
|
fiat_identifier?(metadata[:identifier]) ||
|
|
fiat_identifier?(payload[:coinId]) ||
|
|
fiat_identifier?(account_id)
|
|
end
|
|
|
|
def crypto_asset?
|
|
!fiat_asset?
|
|
end
|
|
|
|
private
|
|
def exchange_source_for?(payload)
|
|
payload = payload.to_h.with_indifferent_access
|
|
payload[:source] == "exchange" || payload[:portfolio_id].present?
|
|
end
|
|
|
|
def exchange_portfolio_source_for?(payload)
|
|
payload = payload.to_h.with_indifferent_access
|
|
exchange_source_for?(payload) && (
|
|
ActiveModel::Type::Boolean.new.cast(payload[:portfolio_account]) ||
|
|
payload[:coins].is_a?(Array)
|
|
)
|
|
end
|
|
end
|