mirror of
https://github.com/hakanensari/frankfurter.git
synced 2024-10-29 23:32:35 +01:00
36 lines
720 B
Ruby
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
|