Sha256: c3ea5a4463ad9628fe2ee6f51fedf57ffdf941ed645d454dd9ec3b0a25774447

Contents?: true

Size: 1.45 KB

Versions: 10

Compression:

Stored size: 1.45 KB

Contents

module Pay
  class Currency
    include ActionView::Helpers::NumberHelper

    attr_reader :attributes

    def self.all
      @currencies ||= begin
        path = Engine.root.join("config", "currencies", "iso.json")
        JSON.parse File.read(path)
      end
    end

    # Takes an amount (in cents) and currency and returns the formatted version for the currency
    def self.format(amount, currency:, **options)
      currency ||= :usd
      new(currency).format_amount(amount, **options)
    end

    def initialize(iso_code)
      @attributes = self.class.all[iso_code.to_s.downcase]
    end

    def format_amount(amount, **options)
      number_to_currency(
        amount.to_i / subunit_to_unit.to_f,
        {
          precision: precision,
          unit: unit,
          separator: separator,
          delimiter: delimiter,
          format: format
        }.compact.merge(options)
      )
    end

    # Returns the precision to display
    #
    # If 1, returns 0
    # If 100, returns 2
    # If 1000, returns 3
    def precision
      subunit_to_unit.digits.count - 1
    end

    def unit
      attributes["unit"]
    end

    def separator
      attributes["separator"]
    end

    def delimiter
      attributes["delimiter"]
    end

    def format
      attributes["format"]
    end

    def subunit?
      subunit.blank?
    end

    def subunit
      attributes["subunit"]
    end

    def subunit_to_unit
      attributes["subunit_to_unit"]
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
pay-3.0.24 lib/pay/currency.rb
pay-3.0.23 lib/pay/currency.rb
pay-3.0.22 lib/pay/currency.rb
pay-3.0.21 lib/pay/currency.rb
pay-3.0.20 lib/pay/currency.rb
pay-3.0.19 lib/pay/currency.rb
pay-3.0.18 lib/pay/currency.rb
pay-3.0.17 lib/pay/currency.rb
pay-3.0.16 lib/pay/currency.rb
pay-3.0.15 lib/pay/currency.rb