class Mutations::DateFilter

Public Instance Methods

filter(data) click to toggle source
# File lib/mutations/date_filter.rb, line 11
def filter(data)
  # Handle nil case
  if data.nil?
    return [nil, nil] if options[:nils]
    return [nil, :nils]
  end

  # Now check if it's empty:
  if data == ""
    if options[:empty_is_nil]
      return [nil, (:nils unless options[:nils])]
    else
      return [data, :empty]
    end
  end

  if data.is_a?(Date) # Date and DateTime
    actual_date = data
  elsif data.is_a?(String)
    begin
      actual_date = if options[:format]
        Date.strptime(data, options[:format])
      else
        Date.parse(data)
      end
    rescue ArgumentError
      return [nil, :date]
    end
  elsif data.respond_to?(:to_date)  # Time
    actual_date = data.to_date
  else
    return [nil, :date]
  end

  # Ok, its a valid date, check if it falls within the range
  if options[:after]
    if actual_date <= options[:after]
      return [nil, :after]
    end
  end

  if options[:before]
    if actual_date >= options[:before]
      return [nil, :before]
    end
  end

  # We win, it's valid!
  [actual_date, nil]
end