class DataFilter::TruthyFilter

Used to filter a data item by whether it is truthy/falsey

@example

object = MyModel.new(is_alive: 'false')
filter = DataFilter::TruthyFilter.new(:is_alive)
filter.call(object)
# => nil

Public Class Methods

new(field_sym, invert: false) click to toggle source

@param field_sym [Symbol] the name of the field to filter by @param invert [Boolean] (default: false) set to true if you

would rather match when the field is falsey instead of when
it is truthy
# File lib/data_filter/truthy_filter.rb, line 14
def initialize(field_sym, invert: false)
  @field_sym = field_sym
  @invert = invert
end

Public Instance Methods

call(item) click to toggle source

Filters the item

@param item [Object] the item we want to filter @return [Object, nil] the original data item

# File lib/data_filter/truthy_filter.rb, line 23
def call(item)
  if item.respond_to?(@field_sym)
    val = item.public_send(@field_sym)
    is_falsey = is_falsey?(val)
    is_match = (@invert ? is_falsey : !is_falsey)
    if is_match
      item
    end
  end
end

Private Instance Methods

is_falsey?(val) click to toggle source

@private

# File lib/data_filter/truthy_filter.rb, line 37
def is_falsey?(val)
  [false, 'false', 0, nil].include?(val)
end