class TimeInputs::Parser
Public Class Methods
new(error_policy=->(message){ raise BaseError, message)
click to toggle source
# File lib/time_inputs/parser.rb, line 3 def initialize error_policy=->(message){ raise BaseError, message } @error_policy = error_policy end
Public Instance Methods
parse(input_string, options={})
click to toggle source
# File lib/time_inputs/parser.rb, line 7 def parse input_string, options={} input_as_hh_mm = to_hh_mm(input_string.to_s) date_context = check_date! options.fetch(:date_context) { Date.today } hours, minutes = input_as_hh_mm.split(":") Time.local(date_context.year, date_context.month, date_context.day, hours.to_i, minutes.to_i) rescue BaseError => e @error_policy.call(e.message) end
Private Instance Methods
check_date!(date)
click to toggle source
# File lib/time_inputs/parser.rb, line 24 def check_date! date raise BaseError, "invalid date_context" unless date.respond_to?(:to_date) date.to_date end
to_hh_mm(input)
click to toggle source
# File lib/time_inputs/parser.rb, line 17 def to_hh_mm input raise BaseError, "invalid input" unless input =~ /\A\d{1,2}:?\d{2}\z/ input.rjust(4,'0').tap do |str| str.insert(2,':') unless str =~/\A\d?\d:\d{2}\z/ end end