Module: Typus::Orm::Mongoid::Search

Includes:
Base::Search
Defined in:
lib/typus/orm/mongoid/search.rb

Instance Method Summary collapse

Methods included from Base::Search

#build_boolean_conditions, #build_conditions, #build_date_conditions, #build_datetime_conditions, #build_my_joins, #build_string_conditions

Instance Method Details

#build_filter_interval(interval, key) ⇒ Object



34
35
36
# File 'lib/typus/orm/mongoid/search.rb', line 34

def build_filter_interval(interval, key)
  {key.to_sym.gt => interval.first, key.to_sym.lt => interval.last}
end

#build_has_many_conditions(key, value) ⇒ Object

TODO: Detect the primary_key for this object.



39
40
41
# File 'lib/typus/orm/mongoid/search.rb', line 39

def build_has_many_conditions(key, value)
  ["#{key}.id = ?", value]
end

#build_search_conditions(key, value) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/typus/orm/mongoid/search.rb', line 8

def build_search_conditions(key, value)
  search_fields = typus_search_fields
  search_fields = search_fields.empty? ? { "name" => "@" } : search_fields

  search_query = search_fields.map do |key, type|
    related_model = self

    split_keys = key.split('.')
    split_keys[0..-2].each do |split_key|
      if related_model.responds_to? :relations && related_model.relations[split_key] && related_model.relations[split_key].embeded?
        related_model = related_model.relations[split_key]
      else
        raise "Search key '#{key}' is invalid. #{split_key} is not an embeded document" if related_model.embeded?
      end
    end

    field = related_model.fields[split_keys.last]
    raise "Search key '#{field.name}' is invalid." unless field
    value = field.serialize(value) if field.type.ancestors.include?(Numeric)

    {key => value}
  end

  {'$or' => search_query}
end