class Minutely::TimeRange::Parser
A parser that tries to convert the input value to `Minutely::TimeRange`.
Public Instance Methods
parse()
click to toggle source
# File lib/minutely/time_range/parser.rb, line 8 def parse case value when nil then nil when Array then parse_array(value) when Hash then parse_hash when Range then parse_range when String then parse_string when TimeRange then value else invalid_time_range! end end
Private Instance Methods
include_empty_item?(items)
click to toggle source
# File lib/minutely/time_range/parser.rb, line 49 def include_empty_item?(items) items.any? do |item| item.nil? || (item.respond_to?(:empty?) && item.empty?) end end
invalid_time_range!()
click to toggle source
# File lib/minutely/time_range/parser.rb, line 22 def invalid_time_range! raise ArgumentError, 'invalid time range' end
parse_array(items)
click to toggle source
# File lib/minutely/time_range/parser.rb, line 26 def parse_array(items) invalid_time_range! if items.length != 2 || include_empty_item?(items) TimeRange.new(*items) end
parse_hash()
click to toggle source
# File lib/minutely/time_range/parser.rb, line 32 def parse_hash return nil if value.empty? parse_array(value.fetch_values(:from, :to)) end
parse_range()
click to toggle source
# File lib/minutely/time_range/parser.rb, line 38 def parse_range TimeRange.new(value.begin, value.end, exclude_end: value.exclude_end?) end
parse_string()
click to toggle source
# File lib/minutely/time_range/parser.rb, line 42 def parse_string return nil if value.empty? items = value.split('-').map(&:strip) parse_array(items) end