Module: MongoidFilter::ClassMethods

Defined in:
lib/mongoid_filter.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#filter_field_aliasesObject



21
22
23
# File 'lib/mongoid_filter.rb', line 21

def filter_field_aliases
  @filter_aliases ||= {}
end

#filter_fieldsObject



13
14
15
# File 'lib/mongoid_filter.rb', line 13

def filter_fields
  @filter_fields ||= []
end

#special_filtersObject



17
18
19
# File 'lib/mongoid_filter.rb', line 17

def special_filters
  @special_filters ||= {}
end

Instance Method Details

#can_filter_by(*fields) ⇒ Object



25
26
27
# File 'lib/mongoid_filter.rb', line 25

def can_filter_by(*fields)
  self.filter_fields.concat(fields.flatten.map(&:to_sym))
end

#filter_by(filter_params) ⇒ Object



36
37
38
39
40
41
42
43
44
45
# File 'lib/mongoid_filter.rb', line 36

def filter_by(filter_params)
  condition = {}
  prepare_filter_params(filter_params).each do |attribute, value|
    field_name, operator = parse_attribute(attribute)
    condition.merge!(build_expression(field_name, operator, value)) if field_name.in? filter_fields
  end
  criteria = where(condition)
  criteria.instance_variable_set(:@filter_form_object, FormObject.new(filter_params))
  criteria
end

#filter_form_objectObject



47
48
49
# File 'lib/mongoid_filter.rb', line 47

def filter_form_object
  criteria.instance_variable_get(:@filter_form_object) || FormObject.new({})
end

#special_filter(field, deserializing_proc, options = {}) ⇒ Object



29
30
31
32
33
34
# File 'lib/mongoid_filter.rb', line 29

def special_filter(field, deserializing_proc, options = {})
  self.special_filters.merge!(field => deserializing_proc)

  field_name = options[:field_name]
  self.filter_field_aliases.merge!(field => field_name)
end