Sha256: 556d6e163bab59b9bfb3594543412f0441437e50476773d9161b9be8c7844d9e
Contents?: true
Size: 1007 Bytes
Versions: 1
Compression:
Stored size: 1007 Bytes
Contents
# frozen_string_literal: true module Minutely class Time ## # A parser that tries to convert the input value to `Minutely::Time`. class Parser < Minutely::Parser def parse return value if value.is_a?(Time) return Time.new(value.hour, value.min) if like_time? case value when nil then nil when Integer then parse_integer when String then parse_string else raise ArgumentError, 'invalid time' end end private def like_time? value.respond_to?(:hour) && value.respond_to?(:min) end def parse_integer hour = value / 100 minute = value % 100 Time.new(hour, minute) end def parse_string return nil if value.empty? matches = value.match(/\A(?<hour>\d{1,2}):(?<minute>\d{2})\z/) raise ArgumentError, 'invalid time string' unless matches Time.new(matches[:hour].to_i, matches[:minute].to_i) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
minutely-3.0.0 | lib/minutely/time/parser.rb |