mirror of
https://github.com/we-promise/sure.git
synced 2026-05-29 23:39:03 +00:00
* feat(providers): add Kraken exchange sync Adds family-scoped Kraken API-key connections, read-only balance and trade import, account setup/linking flows, provider status wiring, and focused test coverage. Closes #1758 * test(providers): avoid Kraken sample secret false positive * fix(providers): address Kraken review findings * fix(providers): address Kraken review cleanup * test(imports): stabilize transaction import ordering
33 lines
907 B
Ruby
33 lines
907 B
Ruby
# frozen_string_literal: true
|
|
|
|
module KrakenAccount::UsdConverter
|
|
private
|
|
|
|
def convert_from_usd(amount, date: Date.current)
|
|
return [ amount.to_d, false, nil ] if target_currency == "USD"
|
|
|
|
rate = ExchangeRate.find_or_fetch_rate(from: "USD", to: target_currency, date: date)
|
|
return [ amount.to_d, true, nil ] if rate.nil?
|
|
|
|
converted = Money.new(amount, "USD").exchange_to(target_currency, custom_rate: rate.rate).amount
|
|
stale = rate.date != date
|
|
rate_date = stale ? rate.date : nil
|
|
|
|
[ converted, stale, rate_date ]
|
|
end
|
|
|
|
def build_stale_extra(stale, rate_date, target_date)
|
|
kraken_meta = if stale
|
|
{
|
|
"stale_rate" => true,
|
|
"rate_date_used" => rate_date&.to_s,
|
|
"rate_target_date" => target_date&.to_s
|
|
}
|
|
else
|
|
{ "stale_rate" => false }
|
|
end
|
|
|
|
{ "kraken" => kraken_meta }
|
|
end
|
|
end
|