Class: Spree::Money
Overview
Spree::Money is a relatively thin wrapper around Monetize which handles formatting via Spree::Config.
Constant Summary collapse
- DifferentCurrencyError =
Class.new(StandardError)
- RUBY_NUMERIC_STRING =
/\A-?\d+(\.\d+)?\z/
Class Attribute Summary collapse
-
.default_formatting_rules ⇒ Object
Returns the value of attribute default_formatting_rules.
Instance Attribute Summary collapse
-
#money ⇒ Object
readonly
Returns the value of attribute money.
Class Method Summary collapse
- .parse(amount, currency = Spree::Config[:currency]) ⇒ Object
- .parse_to_money(amount, currency) ⇒ Object private
Instance Method Summary collapse
- #+(other) ⇒ Object
- #-(other) ⇒ Object
- #<=>(other) ⇒ Object
-
#==(other) ⇒ Object
Delegates comparison to the internal ruby money instance.
-
#as_json ⇒ String
The value of this money object formatted according to its options.
-
#format(options = {}) ⇒ String
The value of this money object formatted according to its options.
-
#initialize(amount, options = {}) ⇒ Money
constructor
A new instance of Money.
-
#to_html(options = { html: true }) ⇒ String
The value of this money object formatted according to its options and any additional options, by default as html.
-
#to_s ⇒ String
The value of this money object formatted according to its options.
Constructor Details
#initialize(amount, options = {}) ⇒ Money
Returns a new instance of Money.
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/spree/money.rb', line 39 def initialize(amount, = {}) if amount.is_a?(::Money) @money = amount else currency = ([:currency] || Spree::Config[:currency]) if amount.to_s =~ RUBY_NUMERIC_STRING @money = Monetize.from_string(amount, currency) else @money = Spree::Money.parse_to_money(amount, currency) Spree::Deprecation.warn <<-WARN.squish, caller Spree::Money was initialized with #{amount.inspect}, which will not be supported in the future. Instead use Spree::Money.new(#{@money.to_s.inspect}, options) or Spree::Money.parse(#{amount.inspect}) WARN end end @options = Spree::Money.default_formatting_rules.merge() end |
Class Attribute Details
.default_formatting_rules ⇒ Object
Returns the value of attribute default_formatting_rules.
16 17 18 |
# File 'lib/spree/money.rb', line 16 def default_formatting_rules @default_formatting_rules end |
Instance Attribute Details
#money ⇒ Object (readonly)
Returns the value of attribute money.
33 34 35 |
# File 'lib/spree/money.rb', line 33 def money @money end |
Class Method Details
.parse(amount, currency = Spree::Config[:currency]) ⇒ Object
18 19 20 |
# File 'lib/spree/money.rb', line 18 def parse(amount, currency = Spree::Config[:currency]) new(parse_to_money(amount, currency)) end |
.parse_to_money(amount, currency) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
23 24 25 |
# File 'lib/spree/money.rb', line 23 def parse_to_money(amount, currency) ::Monetize.parse(amount, currency) end |
Instance Method Details
#+(other) ⇒ Object
128 129 130 131 |
# File 'lib/spree/money.rb', line 128 def +(other) raise TypeError, "Can't add #{other.class} to Spree::Money" if !other.respond_to?(:money) self.class.new(@money + other.money) end |
#-(other) ⇒ Object
123 124 125 126 |
# File 'lib/spree/money.rb', line 123 def -(other) raise TypeError, "Can't subtract #{other.class} to Spree::Money" if !other.respond_to?(:money) self.class.new(@money - other.money) end |
#<=>(other) ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/spree/money.rb', line 99 def <=>(other) if !other.respond_to?(:money) raise TypeError, "Can't compare #{other.class} to Spree::Money" end if self.currency != other.currency # By default, ::Money will try to run a conversion on `other.money` and # try a comparison on that. We do not want any currency conversion to # take place so we'll catch this here and raise an error. raise( DifferentCurrencyError, "Can't compare #{self.currency} with #{other.currency}" ) end @money <=> other.money end |
#==(other) ⇒ Object
Delegates comparison to the internal ruby money instance.
118 119 120 121 |
# File 'lib/spree/money.rb', line 118 def ==(other) raise TypeError, "Can't compare #{other.class} to Spree::Money" if !other.respond_to?(:money) @money == other.money end |
#as_json ⇒ String
Returns the value of this money object formatted according to its options.
95 96 97 |
# File 'lib/spree/money.rb', line 95 def as_json(*) to_s end |
#format(options = {}) ⇒ String
Returns the value of this money object formatted according to its options.
76 77 78 |
# File 'lib/spree/money.rb', line 76 def format( = {}) @money.format(@options.merge()) end |
#to_html(options = { html: true }) ⇒ String
If you pass in options, ensure you pass in the html: true as well.
Returns the value of this money object formatted according to its options and any additional options, by default as html.
84 85 86 87 88 89 90 91 92 |
# File 'lib/spree/money.rb', line 84 def to_html( = { html: true }) output = format() if [:html] # 1) prevent blank, breaking spaces # 2) prevent escaping of HTML character entities output = output.sub(" ", " ").html_safe end output end |
#to_s ⇒ String
Returns the value of this money object formatted according to its options.
59 60 61 |
# File 'lib/spree/money.rb', line 59 def to_s format end |