lib/locomotive/steam/adapters/mongodb/query.rb in locomotivecms_steam-1.0.0.pre.alpha.1 vs lib/locomotive/steam/adapters/mongodb/query.rb in locomotivecms_steam-1.0.0.pre.alpha.2

- old
+ new

@@ -2,10 +2,12 @@ module Adapters module MongoDB class Query + SYMBOL_OPERATORS = %w(all elem_match exists gt gte in lt lte mod ne near near_sphere nin with_size with_type within_box within_circle within_polygon within_spherical_circle) + attr_reader :criteria, :sort def initialize(scope, localized_attributes, &block) @criteria, @sort, @fields, @skip, @limit = {}, nil, nil, nil, nil @scope, @localized_attributes = scope, localized_attributes @@ -15,11 +17,11 @@ instance_eval(&block) if block_given? end def where(criterion = nil) self.tap do - @criteria.merge!(criterion) unless criterion.nil? + @criteria.merge!(decode_symbol_operators(criterion)) unless criterion.nil? end end def order_by(*args) self.tap do @@ -71,9 +73,25 @@ end end def apply_default_scope where(site_id: @scope.site._id) if @scope.site + end + + def decode_symbol_operators(criterion) + criterion.dup.tap do |_criterion| + criterion.each do |key, value| + next unless key.is_a?(String) + + _key, operator = key.split('.') + + if operator && SYMBOL_OPERATORS.include?(operator) + _criterion.delete(key) + _key = _key.to_s.to_sym.public_send(operator.to_sym) + _criterion[_key] = value + end + end + end end end end