Class: MoneyAttribute::Railtie

Inherits:
Rails::Railtie
  • Object
show all
Defined in:
lib/money_attribute/railtie.rb

Class Method Summary collapse

Class Method Details

.register_custom_currencies!Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/money_attribute/railtie.rb', line 40

def self.register_custom_currencies!
  Array(MoneyAttribute.config.added_currencies).each do |currency_data|
    if currency_data.respond_to?(:values_at)
      code = currency_data[:currency]
      subunit = currency_data[:subunit]
      symbol = currency_data[:symbol]
    else
      code, subunit, symbol = *currency_data
    end
    ::Mint::Currency.register(code:, subunit:, symbol:)
  rescue KeyError
    nil
  end
end

.setup_locale_backend!Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/money_attribute/railtie.rb', line 21

def self.setup_locale_backend!
  ::Mint.locale_backend = lambda {
    fmt = I18n.t('number.currency.format', default: {})
    translator = ->(s) { s&.gsub('%n', '%<amount>f')&.gsub('%u', '%<symbol>s') }

    format = if fmt.key?(:positive) || fmt.key?(:negative) || fmt.key?(:zero)
               {
                 positive: translator.call(fmt[:positive] || fmt[:format]),
                 negative: translator.call(fmt[:negative] || fmt[:format]),
                 zero: translator.call(fmt[:zero] || fmt[:format])
               }
             else
               translator.call(fmt[:format])
             end

    { decimal: fmt[:separator], thousand: fmt[:delimiter], format: format }
  }
end