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
k(name, operator)
Alias for: key
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