module Sequel::CurrencyRates

Extension for currency-conversion via currency_rates table

Public Instance Methods

table_name() click to toggle source

Returns a table name

@return [Symbol] table name

Calls superclass method
# File lib/sequel/extensions/currency_rates.rb, line 37
def table_name
  respond_to?(:first_source_alias) ? first_source_alias : super
end
with_rates( aliaz = :currency_rates, table: table_name, rates_table: Sequel[:currency_rates], currency_column: :currency, time_column: :created_at ) click to toggle source

Join a rates table

@param aliaz [Symbol] alias to be used for joined table @param table [Symbol] table name to join to @param currency_column [Symbol or Sequel::SQL::Expression] currency column by which

table is joined

@param time_column [Symbol or Sequel::SQL::Expression] time column by which table is joined

@example

Order::Model.with_rates.select(Sequel[:amount].in_usd)

@return [Sequel::Dataset] dataset

# File lib/sequel/extensions/currency_rates.rb, line 17
def with_rates(
  aliaz = :currency_rates,
  table: table_name,
  rates_table: Sequel[:currency_rates],
  currency_column: :currency,
  time_column: :created_at
)
  table = Sequel[table]
  rates = Sequel[aliaz]

  currency_expr = wrap_if_symbol(currency_column, table)
  time_expr = wrap_if_symbol(time_column, table)

  join_expr = (rates[:currency] =~ currency_expr) & rates[:period].pg_range.contains(time_expr)
  left_join(rates_table.as(aliaz), join_expr)
end

Private Instance Methods

wrap_if_symbol(column_name, table) click to toggle source
# File lib/sequel/extensions/currency_rates.rb, line 43
def wrap_if_symbol(column_name, table)
  column_name.is_a?(Symbol) ? table[column_name] : column_name
end