Sha256: 04f4207359408ac47d945f4843f7094af7450fb9ffe40db72ca5405b52cc069c

Contents?: true

Size: 1.17 KB

Versions: 12

Compression:

Stored size: 1.17 KB

Contents

module Datagrid::Filters::RangedFilter

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

  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

  def range?
    options[:range]
  end

  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


end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
datagrid-1.8.2 lib/datagrid/filters/ranged_filter.rb
datagrid-1.8.1 lib/datagrid/filters/ranged_filter.rb
datagrid-1.8.0 lib/datagrid/filters/ranged_filter.rb
datagrid-1.7.0 lib/datagrid/filters/ranged_filter.rb
datagrid-1.6.3 lib/datagrid/filters/ranged_filter.rb
datagrid-1.6.2 lib/datagrid/filters/ranged_filter.rb
datagrid-1.6.1 lib/datagrid/filters/ranged_filter.rb
datagrid-1.6.0 lib/datagrid/filters/ranged_filter.rb
datagrid-1.5.9 lib/datagrid/filters/ranged_filter.rb
datagrid-1.5.8 lib/datagrid/filters/ranged_filter.rb
datagrid-1.5.7 lib/datagrid/filters/ranged_filter.rb
datagrid-1.5.6 lib/datagrid/filters/ranged_filter.rb