module Reporting

Public Class Methods

aggregate(collection, query, paginated_params, query_params, projection) click to toggle source
# File lib/mumuki/classroom/models/reporting.rb, line 10
def self.aggregate(collection, query, paginated_params, query_params, projection)
  pipeline = build_pipeline(collection, query, paginated_params, query_params, projection)
  collection.collection.aggregate pipeline
end
build_pipeline(collection, query, paginated_params, query_params, projection) click to toggle source
# File lib/mumuki/classroom/models/reporting.rb, line 3
def self.build_pipeline(collection, query, paginated_params, query_params, projection)
  ordering = "#{Criteria.name}::#{paginated_params[:order_by].to_s.camelize}".constantize
  sorting = "#{Sorting.name}::#{collection.name.demodulize}::By#{paginated_params[:sort_by].to_s.camelize}".constantize
  searching = Searching.filter_for(collection, query_params)
  pipeline query, sorting, ordering, searching, projection
end
pipeline(query, sorting, ordering, searching, projection) click to toggle source
# File lib/mumuki/classroom/models/reporting.rb, line 15
def self.pipeline(query, sorting, ordering, searching, projection)
  main_pipeline = []
  main_pipeline << {'$match': query}
  main_pipeline.concat searching.pipeline
  main_pipeline.concat sorting.pipeline
  main_pipeline << {'$sort': sorting.order_by(ordering)}
  main_pipeline << {'$project': projection}
end