diff --git a/lib/money/currency.rb b/lib/money/currency.rb index a27759c9..53da2228 100644 --- a/lib/money/currency.rb +++ b/lib/money/currency.rb @@ -11,9 +11,13 @@ class UnknownCurrency < ArgumentError; end class << self def new(currency_iso) - raise UnknownCurrency, "Currency can't be blank" if currency_iso.nil? || currency_iso.to_s.empty? - iso = currency_iso.to_s.downcase - @@loaded_currencies[iso] || @@mutex.synchronize { @@loaded_currencies[iso] = super(iso) } + iso = currency_iso.to_s + return @@loaded_currencies[iso] if @@loaded_currencies.key?(iso) + raise UnknownCurrency, "Currency can't be blank" if iso.empty? + downcased = iso.downcase + @@mutex.synchronize do + @@loaded_currencies[iso] ||= @@loaded_currencies[downcased] ||= super(downcased) + end end alias_method :find!, :new