frankfurter/lib/currency.rb

36 lines
720 B
Ruby
Raw Normal View History

# 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
2020-05-02 16:18:52 +02:00
when 366.. then super.sample('week')
2020-04-02 15:52:56 +02:00
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