diff --git a/lib/money/parser/fuzzy.rb b/lib/money/parser/fuzzy.rb index 1bb9ce5..69e9835 100644 --- a/lib/money/parser/fuzzy.rb +++ b/lib/money/parser/fuzzy.rb @@ -74,7 +74,9 @@ def self.parse(input, currency = nil, **options) def parse(input, currency = nil, strict: false) currency = Money::Helpers.value_to_currency(currency) amount = extract_amount_from_string(input, currency, strict) - Money.new(amount, currency) + if amount + Money.new(amount, currency) + end end private @@ -93,7 +95,7 @@ def extract_amount_from_string(input, currency, strict) if number.empty? if !strict - return '0' + return nil else raise MoneyFormatError, "invalid money string: #{input}" end diff --git a/spec/parser/accounting_spec.rb b/spec/parser/accounting_spec.rb index 706eb34..5c3fb1f 100644 --- a/spec/parser/accounting_spec.rb +++ b/spec/parser/accounting_spec.rb @@ -19,8 +19,8 @@ expect(@parser.parse("")).to eq(Money.new) end - it "parses an invalid string to $0" do - expect(@parser.parse("no money", 'USD')).to eq(Money.new(0, 'USD')) + it "parses an invalid string when not strict to nil" do + expect(@parser.parse("no money", 'USD')).to eq(nil) end it "parses a single digit integer string" do diff --git a/spec/parser/fuzzy_spec.rb b/spec/parser/fuzzy_spec.rb index 1cb4904..6320f03 100644 --- a/spec/parser/fuzzy_spec.rb +++ b/spec/parser/fuzzy_spec.rb @@ -11,9 +11,15 @@ expect(@parser.parse("")).to eq(Money.new(0, Money::NULL_CURRENCY)) end - it "parses an invalid string when not strict" do - expect(@parser.parse("no money", 'USD')).to eq(Money.new(0, 'USD')) + it "parses an invalid string when not strict to nil" do + expect(@parser.parse("no money", 'USD')).to eq(nil) + end + + it "parses a badly formatted numeric string when not strict to the closest approximation" do expect(@parser.parse("1..", 'USD')).to eq(Money.new(1, 'USD')) + expect(@parser.parse("1.000", 'USD')).to eq(Money.new(1, 'USD')) + expect(@parser.parse("1.1.1", 'USD')).to eq(Money.new(111, 'USD')) + expect(@parser.parse("1,1.11", 'USD')).to eq(Money.new(11.11, 'USD')) end it "parses raise with an invalid string and strict option" do