From c653bb86a019b5de9f00dab5c0261548ff9b457f Mon Sep 17 00:00:00 2001 From: Martijn Storck Date: Fri, 16 Apr 2021 14:30:53 +0200 Subject: [PATCH] Improve number format helper --- lib/xsv/helpers.rb | 36 +++++++++--------------------------- 1 file changed, 9 insertions(+), 27 deletions(-) diff --git a/lib/xsv/helpers.rb b/lib/xsv/helpers.rb index 206d2aa..5456287 100644 --- a/lib/xsv/helpers.rb +++ b/lib/xsv/helpers.rb @@ -103,38 +103,20 @@ def parse_number(string) # Apply date or time number formats, if applicable def parse_number_format(number, format) - number = parse_number(number) if number.is_a?(String) + number = parse_number(number) # number is always a string since it comes out of the Sax Parser - if datetime_format?(format) + is_date_format = format.scan(/[dmy]+/).length > 1 + is_time_format = format.scan(/[hms]+/).length > 1 + + if !is_date_format && !is_time_format + number + elsif is_date_format && is_time_format parse_datetime(number) - elsif date_format?(format) + elsif is_date_format parse_date(number) - elsif time_format?(format) + elsif is_time_format parse_time(number) - else - number end end - - # Tests if the given format string includes both date and time - def datetime_format?(format) - date_format?(format) && time_format?(format) - end - - # Tests if the given format string is a date - def date_format?(format) - return false if format.nil? - - # If it contains at least 2 sequences of d's, m's or y's it's a date! - format.scan(/[dmy]+/).length > 1 - end - - # Tests if the given format string is a time - def time_format?(format) - return false if format.nil? - - # If it contains at least 2 sequences of h's, m's or s's it's a time! - format.scan(/[hms]+/).length > 1 - end end end