Sha256: 15fe5efb25c5aa2d3b022087b31d72f9a42df4e302bc3fd764561a206d9b2d5b

Contents?: true

Size: 1.39 KB

Versions: 9

Compression:

Stored size: 1.39 KB

Contents

# encoding: utf-8

require 'money'

module Spree
  class Money
    class <<self
      attr_accessor :default_formatting_rules
    end
    self.default_formatting_rules = {
      # Ruby money currently has this as false, which is wrong for the vast
      # majority of locales.
      sign_before_symbol: true
    }

    attr_reader :money

    delegate :cents, :currency, to: :money

    def initialize(amount, options = {})
      @money = Monetize.parse([amount, (options[:currency] || Spree::Config[:currency])].join)
      @options = Spree::Money.default_formatting_rules.merge(options)
    end

    def amount_in_cents
      (cents / currency.subunit_to_unit.to_f * 100).round
    end

    def to_s
      @money.format(@options)
    end

    def to_html(options = { html: true })
      output = @money.format(@options.merge(options))
      if options[:html]
        # 1) prevent blank, breaking spaces
        # 2) prevent escaping of HTML character entities
        output = output.sub(' ', '&nbsp;').html_safe
      end
      output
    end

    def as_json(*)
      to_s
    end

    def decimal_mark
      return @money.decimal_mark if @options[:decimal_mark].nil?
      @options[:decimal_mark]
    end

    def thousands_separator
      return @money.thousands_separator if @options[:thousands_separator].nil?
      @options[:thousands_separator]
    end

    def ==(obj)
      @money == obj.money
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
spree_core-3.4.6 lib/spree/money.rb
spree_core-3.6.4 lib/spree/money.rb
spree_core-3.6.3 lib/spree/money.rb
spree_core-3.6.2 lib/spree/money.rb
spree_core-3.6.1 lib/spree/money.rb
spree_core-3.6.0 lib/spree/money.rb
spree_core-3.5.0 lib/spree/money.rb
spree_core-3.6.0.rc1 lib/spree/money.rb
spree_core-3.5.0.rc2 lib/spree/money.rb