@@ -35,6 +35,8 @@ class Parser
3535 MULTIPLIER_REGEXP = Regexp . new ( format ( '^(.*?\d)(%s)\b([^\d]*)$' , MULTIPLIER_SUFFIXES . keys . join ( '|' ) ) , 'i' )
3636
3737 DEFAULT_DECIMAL_MARK = '.' . freeze
38+ DEFAULT_MINOR = "00" . freeze
39+ private_constant :DEFAULT_MINOR
3840
3941 def initialize ( input , fallback_currency = Money . default_currency , options = { } )
4042 @input = input . to_s . strip
@@ -111,7 +113,7 @@ def extract_major_minor(num)
111113
112114 case used_delimiters . length
113115 when 0
114- [ num , 0 ]
116+ [ num , DEFAULT_MINOR ]
115117 when 2
116118 thousands_separator , decimal_mark = used_delimiters
117119 split_major_minor ( num . gsub ( thousands_separator , '' ) , decimal_mark )
@@ -138,7 +140,7 @@ def extract_major_minor_with_single_delimiter(num, delimiter)
138140 if delimiter == currency . decimal_mark
139141 split_major_minor ( num , delimiter )
140142 elsif Monetize . enforce_currency_delimiters && delimiter == currency . thousands_separator
141- [ num . gsub ( delimiter , '' ) , 0 ]
143+ [ num . gsub ( delimiter , '' ) , DEFAULT_MINOR ]
142144 else
143145 extract_major_minor_with_tentative_delimiter ( num , delimiter )
144146 end
@@ -148,7 +150,7 @@ def extract_major_minor_with_single_delimiter(num, delimiter)
148150 def extract_major_minor_with_tentative_delimiter ( num , delimiter )
149151 if num . scan ( delimiter ) . length > 1
150152 # Multiple matches; treat as thousands separator
151- [ num . gsub ( delimiter , '' ) , '00' ]
153+ [ num . gsub ( delimiter , '' ) , DEFAULT_MINOR ]
152154 else
153155 possible_major , possible_minor = split_major_minor ( num , delimiter )
154156
@@ -161,7 +163,7 @@ def extract_major_minor_with_tentative_delimiter(num, delimiter)
161163 if is_decimal_mark
162164 [ possible_major , possible_minor ]
163165 else
164- [ "#{ possible_major } #{ possible_minor } " , '00' ]
166+ [ "#{ possible_major } #{ possible_minor } " , DEFAULT_MINOR ]
165167 end
166168 end
167169 end
@@ -185,7 +187,9 @@ def split_major_minor(num, delimiter)
185187 splits = num . split ( delimiter )
186188 fail ParseError , 'Invalid amount (multiple delimiters)' if splits . length > 2
187189
188- [ splits [ 0 ] , splits [ 1 ] || '00' ]
190+ splits [ 1 ] ||= DEFAULT_MINOR
191+
192+ splits
189193 end
190194 end
191195end
0 commit comments