module Datagrid::Filters::RangedFilter

Public Class Methods

new(grid, name, options, &block) click to toggle source
Calls superclass method
# File lib/datagrid/filters/ranged_filter.rb, line 3
def initialize(grid, name, options, &block)
  super(grid, name, options, &block)
  if range?
    options[:multiple] = true
  end
end

Public Instance Methods

default_filter_where(scope, value) click to toggle source
Calls superclass method
# File lib/datagrid/filters/ranged_filter.rb, line 40
def default_filter_where(scope, value)
  if range? && value.is_a?(Array)
    left, right = value
    if left
      scope = driver.greater_equal(scope, name, left)
    end
    if right
      scope = driver.less_equal(scope, name, right)
    end
    scope
  else
    super(scope, value)
  end
end
parse_values(value) click to toggle source
Calls superclass method
# File lib/datagrid/filters/ranged_filter.rb, line 10
def parse_values(value)
  result = super(value)
  return result if !range? || result.nil?
  # Simulate single point range
  return [result, result] unless result.is_a?(Array)

  case result.size
  when 0
    nil
  when 1
    result.first
  when 2
    if result.first && result.last && result.first > result.last
      # If wrong range is given - reverse it to be always valid
      result.reverse
    elsif !result.first && !result.last
      nil
    else
      result
    end
  else
    raise ArgumentError, "Can not create a date range from array of more than two: #{result.inspect}"
  end

end
range?() click to toggle source
# File lib/datagrid/filters/ranged_filter.rb, line 36
def range?
  options[:range]
end