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