mirror of
https://github.com/we-promise/sure.git
synced 2026-04-21 13:04:18 +00:00
* [FEATURE] Add CoinStats exchange portfolios and normalize linked investment charts * [BUGFIX] Fix CoinStats PR regressions * [BUGFIX] Fix CoinStats PR review findings * [BUGFIX] Address follow-up CoinStats PR feedback * [REFACTO] Extract CoinStats exchange account helpers * [BUGFIX] Batch linked CoinStats chart normalization * [BUGFIX] Fix CoinStats processor lint --------- Signed-off-by: Juan José Mata <juanjo.mata@gmail.com> Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
56 lines
1.6 KiB
Ruby
56 lines
1.6 KiB
Ruby
module CoinstatsAccount::SourceClassification
|
|
extend ActiveSupport::Concern
|
|
|
|
def wallet_source?
|
|
payload = raw_payload.to_h.with_indifferent_access
|
|
payload[:source] == "wallet" || (payload[:address].present? && payload[:blockchain].present?)
|
|
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
|