class DateParams::Parser

Attributes

date_format[R]
options[R]
param[R]
params[R]
time_format[R]

Public Class Methods

new(param, options, params) click to toggle source
# File lib/date_params/parser.rb, line 13
def initialize(param, options, params)
  @param = param
  @options = options
  @params = params
  @date_format =  options.fetch :date_format, default_date_format
  @time_format =  options.fetch :time_format, default_time_format
end

Public Instance Methods

parse_date_param!(field = param) click to toggle source
# File lib/date_params/parser.rb, line 21
def parse_date_param!(field = param)
  date_string = traversed_params.try(:[], field)
  return if date_string.blank?
  inferred_date_format = date_string =~ /\d{4}-\d{2}-\d{2}/ ? '%Y-%m-%d' : date_format
  date = Date.strptime(date_string, inferred_date_format)
  traversed_params[field] = date if date
end
parse_datetime_param!() click to toggle source
# File lib/date_params/parser.rb, line 29
def parse_datetime_param!
  if param.is_a? Hash
    fields = param
    fields.assert_valid_keys :date, :time, :field
  else
    fields = {
        date: "#{param}_date".to_sym,
        time: "#{param}_time".to_sym,
        field: param
    }
  end

  date = parse_date_param! fields[:date]
  return if date.blank?
  time_string = traversed_params.try(:[], fields[:time])
  return if time_string.blank?
  datetime_format = "%Y-%m-%dT#{time_format}%z"
  datetime_string = "#{date.iso8601}T#{time_string}#{Time.zone.name}"
  datetime = Time.strptime(datetime_string, datetime_format).in_time_zone(Time.zone)
  traversed_params[fields[:field]] = datetime if datetime
end

Protected Instance Methods

default_date_format() click to toggle source
# File lib/date_params/parser.rb, line 53
def default_date_format
  '%m/%d/%Y'
end
default_time_format() click to toggle source
# File lib/date_params/parser.rb, line 57
def default_time_format
  '%I:%M %p'
end

Private Instance Methods

traversed_params() click to toggle source
# File lib/date_params/parser.rb, line 63
def traversed_params
  traversed_params = params
  if options[:namespace].present?
    traversed_params = traversed_params.try :[], options[:namespace]
  end
  traversed_params
end