Module: Sequel::CurrencyRates

Defined in:
lib/sequel/extensions/currency_rates.rb

Overview

Extension for currency-conversion via currency_rates table

Instance Method Summary collapse

Instance Method Details

#table_nameSymbol

Returns a table name

Returns:

  • (Symbol)

    table name



37
38
39
# 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) ⇒ Sequel::Dataset

Join a rates table

Examples:

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

Parameters:

  • aliaz (Symbol) (defaults to: :currency_rates)

    alias to be used for joined table

  • table (Symbol) (defaults to: table_name)

    table name to join to

  • currency_column (Symbol or Sequel::SQL::Expression) (defaults to: :currency)

    currency column by which table is joined

  • time_column (Symbol or Sequel::SQL::Expression) (defaults to: :created_at)

    time column by which table is joined

Returns:

  • (Sequel::Dataset)

    dataset



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 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