Module: RangedFilter

Included in:
Datagrid::Filters::DateFilter, Datagrid::Filters::DateTimeFilter, Datagrid::Filters::IntegerFilter
Defined in:
lib/datagrid/filters/ranged_filter.rb

Instance Method Summary collapse

Instance Method Details

#default_filter_where(driver, scope, value) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/datagrid/filters/ranged_filter.rb', line 44

def default_filter_where(driver, 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(driver, scope, value)
  end
end

#initialize(grid, name, options, &block) ⇒ Object



4
5
6
7
8
9
# File 'lib/datagrid/filters/ranged_filter.rb', line 4

def initialize(grid, name, options, &block)
  super(grid, name, options, &block)
  if range?
    options[:multiple] = true
  end
end

#parse_values(value) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/datagrid/filters/ranged_filter.rb', line 11

def parse_values(value)
  result = super(value)
  if range? 
    if 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
        else
          result
        end
      else
        raise ArgumentError, "Can not create a date range from array of more than two: #{result.inspect}"
      end
    else
      # Simulate single point range
      result..result
    end

  else
    result
  end
end

#range?Boolean

Returns:

  • (Boolean)


40
41
42
# File 'lib/datagrid/filters/ranged_filter.rb', line 40

def range?
  options[:range]
end