From 138887b6e0e938b1c5afbfe1ca82c3d387162d25 Mon Sep 17 00:00:00 2001 From: pranavbabu <54139019+pranavbabu@users.noreply.github.com> Date: Sat, 19 Jul 2025 13:43:22 +0200 Subject: [PATCH 1/4] Cache currency symbol regex to improve parse performance --- lib/monetize/parser.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/monetize/parser.rb b/lib/monetize/parser.rb index 8d88c09a6..a62df04ad 100644 --- a/lib/monetize/parser.rb +++ b/lib/monetize/parser.rb @@ -188,8 +188,13 @@ def split_major_minor(num, delimiter) [major, minor || '00'] end + CURRENCY_SYMBOL_REGEX = begin + regex_safe_symbols = CURRENCY_SYMBOLS.keys.map { |key| Regexp.escape(key) }.join('|') + Regexp.new("(? Date: Sat, 19 Jul 2025 13:46:03 +0200 Subject: [PATCH 2/4] Fix typo --- lib/monetize/parser.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/monetize/parser.rb b/lib/monetize/parser.rb index a62df04ad..b699b1975 100644 --- a/lib/monetize/parser.rb +++ b/lib/monetize/parser.rb @@ -189,7 +189,6 @@ def split_major_minor(num, delimiter) end CURRENCY_SYMBOL_REGEX = begin - regex_safe_symbols = CURRENCY_SYMBOLS.keys.map { |key| Regexp.escape(key) }.join('|') Regexp.new("(? Date: Wed, 23 Jul 2025 12:59:34 +0200 Subject: [PATCH 3/4] Update lib/monetize/parser.rb Co-authored-by: Sunny Ripert --- lib/monetize/parser.rb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/monetize/parser.rb b/lib/monetize/parser.rb index b699b1975..a4919d8db 100644 --- a/lib/monetize/parser.rb +++ b/lib/monetize/parser.rb @@ -188,9 +188,7 @@ def split_major_minor(num, delimiter) [major, minor || '00'] end - CURRENCY_SYMBOL_REGEX = begin - Regexp.new("(? Date: Wed, 23 Jul 2025 18:13:47 +0200 Subject: [PATCH 4/4] Use constant directly and generate it on top of the file --- lib/monetize/parser.rb | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/lib/monetize/parser.rb b/lib/monetize/parser.rb index a4919d8db..c83fd3e3b 100644 --- a/lib/monetize/parser.rb +++ b/lib/monetize/parser.rb @@ -30,7 +30,8 @@ class Parser 'NT$'=> 'TWD', '₱' => 'PHP', } - + + CURRENCY_SYMBOL_REGEX = /(? 3, 'M' => 6, 'B' => 9, 'T' => 12 } MULTIPLIER_SUFFIXES.default = 0 MULTIPLIER_REGEXP = Regexp.new(format('^(.*?\d)(%s)\b([^\d]*)$', MULTIPLIER_SUFFIXES.keys.join('|')), 'i') @@ -100,7 +101,7 @@ def apply_sign(negative, amount) end def compute_currency - match = input.match(currency_symbol_regex) + match = input.match(CURRENCY_SYMBOL_REGEX) CURRENCY_SYMBOLS[match.to_s] if match end @@ -179,19 +180,9 @@ def extract_sign(input) result end - def regex_safe_symbols - CURRENCY_SYMBOLS.keys.map { |key| Regexp.escape(key) }.join('|') - end - def split_major_minor(num, delimiter) major, minor = num.split(delimiter) [major, minor || '00'] end - - CURRENCY_SYMBOL_REGEX = /(?