Module: FilterFactory::ActiveRecord::Filter

Defined in:
lib/filter_factory/active_record/filter.rb

Instance Method Summary collapse

Instance Method Details

#filter(filter_object) ⇒ ActiveRecord::Relation

Applies the filter passed as an argument to model class or relation

Parameters:

  • filter_object (Filter)

    filter object used to filter records

Returns:

  • (ActiveRecord::Relation)


8
9
10
11
12
13
14
15
16
17
18
# File 'lib/filter_factory/active_record/filter.rb', line 8

def filter(filter_object)
  conditions = filter_object.filled_fields.map do |field|
    FilterFactory::ActiveRecord::Condition.new(field.name, field.value).method(field.condition)
  end

  relation = self.is_a?(::ActiveRecord::Relation) ? self : nil

  conditions.inject(relation) do |res, condition|
    res ? res.instance_eval(&condition) : instance_eval(&condition)
  end
end