Class: DataFilter::RangeFilter

Inherits:
Object
  • Object
show all
Defined in:
lib/data_filter/range_filter.rb

Overview

Used to filter a data item by some range by seeing if the data field value falls within that range

Examples:

with a ceiling

object = MyModel.new(created_at: Date.parse('2001-01-13'))
filter = DataFilter::RangeFilter.new(:created_at, ceiling: Date.parse('2003-01-01'))
filter.call(object)
# => #<MyModel created_at: #<Date '2001-01-13'>>

with a floor

object = MyModel.new(file_count: 300)
filter = DataFilter::RangeFilter.new(:file_count, floor: 1)
filter_return = filter.call(object)
# => #<MyModel file_count: 300>
has_file = filter_return.present?
# => true

Instance Method Summary collapse

Constructor Details

#initialize(field_sym, floor: nil, ceiling: nil, nil_default: nil) ⇒ RangeFilter

Returns a new instance of RangeFilter.

Parameters:

  • field_sym (Symbol)

    the field to filter on

  • floor (Comparable) (defaults to: nil)

    the range beginning we want to filter the data item by

  • ceiling (Comparable) (defaults to: nil)

    the range end we want to filter the data item by

  • nil_default (Comparable) (defaults to: nil)

    the value to use if the data item has no field value



26
27
28
29
30
31
# File 'lib/data_filter/range_filter.rb', line 26

def initialize(field_sym, floor: nil, ceiling: nil, nil_default: nil)
  @field_sym    = field_sym
  @floor        = floor
  @ceiling      = ceiling
  @nil_default  = nil_default
end

Instance Method Details

#call(item) ⇒ Object

Filters the item

Parameters:

  • item (Comparable)

    the item we want to filter

Returns:

  • (Object)

    the original data item



37
38
39
40
41
42
43
# File 'lib/data_filter/range_filter.rb', line 37

def call(item)
  if item.respond_to?(@field_sym)
    actual = item.public_send(@field_sym)
    actual = @nil_default if actual.nil?
    item if in_range?(actual)
  end
end