frankfurter/lib/currency.rb
2020-05-02 15:26:03 +01:00

36 lines
720 B
Ruby

# frozen_string_literal: true
require 'day'
require 'forwardable'
class Currency < Sequel::Model(Day.currencies)
class << self
extend Forwardable
def_delegators :dataset, :latest, :between
end
dataset_module do
def only(*iso_codes)
where(iso_code: iso_codes)
end
def between(interval)
case interval.last - interval.first
when 366.. then super.sample('week')
else super
end
end
def sample(precision)
sampler = Sequel.function(:date_trunc, precision, :date)
select(:iso_code)
.select_append { avg(rate).as(rate) }
.select_append(sampler.as(:date))
.group(:iso_code, sampler)
.order(:date)
end
end
end