Skip to content

Commit

Permalink
Allow nil to be used as a default_currency
Browse files Browse the repository at this point in the history
  • Loading branch information
sirwolfgang committed Apr 24, 2024
1 parent 37e183a commit 256ed8c
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 2 deletions.
3 changes: 3 additions & 0 deletions lib/money/currency.rb
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ def initialize(method, currency, attribute)
# Thrown when an unknown currency is requested.
class UnknownCurrency < ArgumentError; end

# Thrown when currency is not provided.
class NoCurrency < ArgumentError; end

class << self
def new(id)
id = id.to_s.downcase
Expand Down
7 changes: 5 additions & 2 deletions lib/money/money.rb
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,9 @@ def self.default_currency
@using_deprecated_default_currency = false
end

if @default_currency.respond_to?(:call)
if @default_currency.nil?
nil
elsif @default_currency.respond_to?(:call)
Money::Currency.new(@default_currency.call)
else
Money::Currency.new(@default_currency)
Expand Down Expand Up @@ -338,7 +340,7 @@ class << self
# Money.new(100, "USD") #=> #<Money @fractional=100 @currency="USD">
# Money.new(100, "EUR") #=> #<Money @fractional=100 @currency="EUR">
#
def initialize( obj, currency = Money.default_currency, options = {})
def initialize(obj, currency = Money.default_currency, options = {})
# For backwards compatability, if options is not a Hash, treat it as a bank parameter
unless options.is_a?(Hash)
options = { bank: options }
Expand All @@ -352,6 +354,7 @@ def initialize( obj, currency = Money.default_currency, options = {})

# BigDecimal can be Infinity and NaN, money of that amount does not make sense
raise ArgumentError, 'must be initialized with a finite value' unless @fractional.finite?
raise Currency::NoCurrency, 'must be provide a currency' if @currency.nil?
end

# Assuming using a currency using dollars:
Expand Down
15 changes: 15 additions & 0 deletions spec/money_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,21 @@
it "should have the default currency" do
expect(money.currency).to eq Money.default_currency
end

context 'without a default' do
around do |example|
default_currency = Money.default_currency
Money.default_currency = nil

example.run

Money.default_currency = default_currency
end

it 'should throw an NoCurrency Error' do
expect { money }.to raise_error(Money::Currency::NoCurrency)
end
end
end

context 'given a currency is provided' do
Expand Down

0 comments on commit 256ed8c

Please sign in to comment.