Module: Oedipus::DataMapper::Conversions

Included in:
Index
Defined in:
lib/oedipus/data_mapper/conversions.rb

Overview

Methods for converting between DataMapper and Oedipus types

Instance Method Summary collapse

Instance Method Details

#convert_filters(args) ⇒ Object

Performs a deep conversion of DataMapper-style operators to Oedipus operators



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/oedipus/data_mapper/conversions.rb', line 15

def convert_filters(args)
  query, options = connection[name].send(:extract_query_data, args, nil)
  [
    query,
    options.inject({}) { |o, (k, v)|
      case k
      when ::DataMapper::Query::Operator
        case k.operator
        when :not, :lt, :lte, :gt, :gte
          o.merge!(k.target => Oedipus.send(k.operator, v))
        else
          raise ArgumentError, "Unsupported Sphinx filter operator #{k.operator}"
        end
      when :order
        o.merge!(order: convert_order(v))
      when :facets
        o.merge!(facets: convert_facets(v))
      else
        o.merge!(k => v)
      end
    }
  ].compact
end