class Locomotive::Steam::Adapters::MongoDB::Query
Constants
- SYMBOL_OPERATORS
Attributes
criteria[R]
sort[R]
Public Class Methods
new(scope, localized_attributes, &block)
click to toggle source
# File lib/locomotive/steam/adapters/mongodb/query.rb, line 11 def initialize(scope, localized_attributes, &block) @criteria, @sort, @fields, @skip, @limit = {}, nil, nil, nil, nil @scope, @localized_attributes = scope, localized_attributes apply_default_scope instance_eval(&block) if block_given? end
Public Instance Methods
against(collection)
click to toggle source
# File lib/locomotive/steam/adapters/mongodb/query.rb, line 46 def against(collection) _query = to_origin selector, fields, sort = _query.selector, _query.options[:fields], _query.options[:sort] results = collection.find(selector) results = results.sort(sort) if sort results = results.projection(fields) if fields results = results.skip(@skip) if @skip results = results.limit(@limit) if @limit results end
key(name, operator)
click to toggle source
# File lib/locomotive/steam/adapters/mongodb/query.rb, line 63 def key(name, operator) :"#{name}".send(operator.to_sym) end
Also aliased as: k
limit(limit)
click to toggle source
# File lib/locomotive/steam/adapters/mongodb/query.rb, line 42 def limit(limit) self.tap { @limit = limit } end
offset(offset)
click to toggle source
# File lib/locomotive/steam/adapters/mongodb/query.rb, line 38 def offset(offset) self.tap { @skip = offset } end
only(*args)
click to toggle source
# File lib/locomotive/steam/adapters/mongodb/query.rb, line 32 def only(*args) self.tap do @fields = [*args] end end
order_by(*args)
click to toggle source
# File lib/locomotive/steam/adapters/mongodb/query.rb, line 26 def order_by(*args) self.tap do @sort = decode_order_by(*args) end end
to_origin()
click to toggle source
# File lib/locomotive/steam/adapters/mongodb/query.rb, line 59 def to_origin build_origin_query.only(@fields).where(@criteria).order_by(*@sort) end
where(criterion = nil)
click to toggle source
# File lib/locomotive/steam/adapters/mongodb/query.rb, line 20 def where(criterion = nil) self.tap do @criteria.merge!(decode_symbol_operators(criterion)) unless criterion.nil? end end
Private Instance Methods
_decode_order_by(arg)
click to toggle source
# File lib/locomotive/steam/adapters/mongodb/query.rb, line 109 def _decode_order_by(arg) case arg when String if arg.include?(',') _decode_order_by(arg.split(',')) else arg.strip.split(/[\s|.]/) end when Array then arg.map { |_arg| _decode_order_by(_arg) } else arg end end
apply_default_scope()
click to toggle source
# File lib/locomotive/steam/adapters/mongodb/query.rb, line 83 def apply_default_scope where(site_id: @scope.site._id) if @scope.site end
build_aliases(localized_attributes, locale)
click to toggle source
# File lib/locomotive/steam/adapters/mongodb/query.rb, line 75 def build_aliases(localized_attributes, locale) localized_attributes.inject({}) do |aliases, name| aliases.tap do aliases[name.to_s] = "#{name}.#{locale}" end end end
build_origin_query()
click to toggle source
# File lib/locomotive/steam/adapters/mongodb/query.rb, line 71 def build_origin_query ::Origin::Query.new(build_aliases(@localized_attributes, @scope.locale)) end
decode_order_by(*spec)
click to toggle source
# File lib/locomotive/steam/adapters/mongodb/query.rb, line 103 def decode_order_by(*spec) [*spec].compact.map do |arg| _decode_order_by(arg) end end
decode_symbol_operators(criterion)
click to toggle source
# File lib/locomotive/steam/adapters/mongodb/query.rb, line 87 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