43 lines
875 B
Ruby
43 lines
875 B
Ruby
# frozen_string_literal: true
|
|
|
|
require "roda"
|
|
require "rate"
|
|
require "money/currency"
|
|
|
|
module Versions
|
|
class V1 < Roda
|
|
class CurrencyNames
|
|
def cache_key
|
|
return if currencies.empty?
|
|
|
|
Digest::MD5.hexdigest(currencies.first[:date].to_s)
|
|
end
|
|
|
|
def formatted
|
|
return {} if currencies.empty?
|
|
|
|
iso_codes.to_h do |iso_code|
|
|
[iso_code, Money::Currency.find(iso_code).name]
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def iso_codes
|
|
currencies.map { |c| c[:quote] }.append("EUR").sort
|
|
end
|
|
|
|
def currencies
|
|
@currencies ||= find_currencies
|
|
end
|
|
|
|
def find_currencies
|
|
require "carry_forward"
|
|
|
|
today = Date.today
|
|
rows = Rate.where(provider: "ECB").where(date: (today - 14)..today).naked.all
|
|
CarryForward.apply(rows, date: today)
|
|
end
|
|
end
|
|
end
|
|
end
|