Class: Spree::LocalizedNumber

Inherits:
Object
  • Object
show all
Defined in:
lib/spree/localized_number.rb

Class Method Summary collapse

Class Method Details

.parse(number) ⇒ BigDecimal, anything

Given a string, strips all non-price-like characters from it, taking into account locale settings. Returns the input given anything else.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/spree/localized_number.rb', line 12

def self.parse(number)
  return number unless number.is_a?(String)

  # I18n.t('number.currency.format.delimiter') could be useful here, but is
  # unnecessary as it is stripped by the non_number_characters gsub.
  separator = I18n.t(:'number.currency.format.separator')
  non_number_characters = /[^0-9\-#{separator}]/

  # strip everything else first
  number = number.gsub(non_number_characters, '')

  # then replace the locale-specific decimal separator with the standard separator if necessary
  number = number.gsub(separator, '.') unless separator == '.'

  # Handle empty string for ruby 2.4 compatibility
  BigDecimal(number.presence || 0)
end