From 80bfef3b090d3a9741bdb2da71b9ac4ee9cf7a43 Mon Sep 17 00:00:00 2001 From: Zane Wolfgang Pickett Date: Wed, 24 Apr 2024 21:14:07 +0200 Subject: [PATCH] Allow nil to be set as default currency --- Gemfile | 2 +- lib/money-rails/configuration.rb | 4 ++-- spec/active_record/monetizable_spec.rb | 19 +++++++++++++++++++ spec/dummy/app/models/other_product.rb | 3 +++ 4 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 spec/dummy/app/models/other_product.rb diff --git a/Gemfile b/Gemfile index ebddec7259..e77017e3fb 100644 --- a/Gemfile +++ b/Gemfile @@ -9,7 +9,7 @@ platforms :jruby do end platforms :ruby do - gem "sqlite3" + gem "sqlite3", '~> 1.4' end platform :mri do diff --git a/lib/money-rails/configuration.rb b/lib/money-rails/configuration.rb index 129dba97f9..347ae4fc87 100644 --- a/lib/money-rails/configuration.rb +++ b/lib/money-rails/configuration.rb @@ -20,7 +20,7 @@ def configure # Configuration parameters def default_currency - Money::Currency.new(Money.default_currency) + Money::Currency.new(Money.default_currency) if Money.default_currency end # Set default currency of money library @@ -35,7 +35,7 @@ def register_currency=(currency_options) end def set_currency_column_for_default_currency! - iso_code = default_currency.iso_code + iso_code = default_currency&.iso_code currency_column.merge! default: iso_code end diff --git a/spec/active_record/monetizable_spec.rb b/spec/active_record/monetizable_spec.rb index 85dd378fbe..dcc9ee9e39 100644 --- a/spec/active_record/monetizable_spec.rb +++ b/spec/active_record/monetizable_spec.rb @@ -949,6 +949,25 @@ class SubProduct < Product expect(price.amount).not_to eq(value.amount) end + context 'without a default currency' do + let(:product) { OtherProduct.new } + + around do |example| + default_currency = Money.default_currency + Money.default_currency = nil + + example.run + + Money.default_currency = default_currency + end + + it "errors when" do + expect do + product.write_monetized :price, :price_cents, 10.5, false, nil, {} + end.to raise_error(Money::Currency::NoCurrency) + end + end + describe "instance_currency_name" do it "updates instance_currency_name attribute" do product.write_monetized :sale_price, :sale_price_amount, value, false, :sale_price_currency_code, {} diff --git a/spec/dummy/app/models/other_product.rb b/spec/dummy/app/models/other_product.rb new file mode 100644 index 0000000000..574c71e8c5 --- /dev/null +++ b/spec/dummy/app/models/other_product.rb @@ -0,0 +1,3 @@ +class OtherProduct < ActiveRecord::Base + monetize :price_cents +end