class MongoidOccurrences::Aggregations::Aggregation

Attributes

base_criteria[R]
options[R]

Public Class Methods

instantiate(*args) click to toggle source
# File lib/mongoid_occurrences/aggregations/aggregation.rb, line 10
def self.instantiate(*args)
  new(*args).instantiate
end
new(base_criteria, options = {}) click to toggle source
# File lib/mongoid_occurrences/aggregations/aggregation.rb, line 18
def initialize(base_criteria, options = {})
  @base_criteria = base_criteria
  @options = options
end
option(name, default_value=nil) click to toggle source
# File lib/mongoid_occurrences/aggregations/aggregation.rb, line 4
def self.option(name, default_value=nil)
  define_method(name) do
    HashWithIndifferentAccess[options].fetch(name, default_value)
  end
end

Public Instance Methods

aggregation() click to toggle source
# File lib/mongoid_occurrences/aggregations/aggregation.rb, line 23
def aggregation
  base_criteria.klass
               .collection
               .aggregate(
                 (selectors + pipeline),
                 allow_disk_use: allow_disk_use
               )
end
instantiate() click to toggle source
# File lib/mongoid_occurrences/aggregations/aggregation.rb, line 32
def instantiate
  aggregation.map do |doc|
    base_criteria.klass.instantiate(doc)
  end
end

Private Instance Methods

selectors() click to toggle source
# File lib/mongoid_occurrences/aggregations/aggregation.rb, line 40
def selectors
  [
    { '$match' => { '$and' => [criteria.selector] } },
    { '$sort' => criteria.options[:sort] },
    { '$limit' => criteria.options[:limit] }
  ].map { |i| i.delete_if { |_, v| v.blank? } }.reject(&:blank?)
end