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