lib/aggrobot/query_planner.rb in aggrobot-0.0.2 vs lib/aggrobot/query_planner.rb in aggrobot-0.1.0
- old
+ new
@@ -1,36 +1,25 @@
+require 'aggrobot/query_planner/parameters_validator'
require 'aggrobot/query_planner/default_query_planner'
require 'aggrobot/query_planner/group_limit_query_planner'
require 'aggrobot/query_planner/bucketed_groups_query_planner'
+
+# plans queries in a Aggrobot
module Aggrobot::QueryPlanner
+ # creates query object
def self.create(collection, group_by, opts = nil)
case
when opts.nil?
DefaultQueryPlanner.new(collection, group_by)
when opts.key?(:limit_to)
+ # GROUP attrs by 'group_by' with limit
GroupLimitQueryPlanner.new(collection, group_by, opts)
when opts.key?(:buckets)
+ # GROUP attrs by 'group_by' in buckets of opts[:buckets], e.g. 1..100, 101..200 etc
BucketedGroupsQueryPlanner.new(collection, group_by, opts)
+ else
+ raise ArgumentError.new "Invalid options to group_by : #{opts}"
end
end
-
- module ParametersValidator
- def self.validate_options(opts, required_parameters, optional_parameters)
- params = opts.keys
- # raise errors for required parameters
- raise_argument_error(opts, required_parameters, optional_parameters) unless (required_parameters - params).empty?
- # raise errors if any extra arguments given
- raise_argument_error(opts, required_parameters, optional_parameters) unless (params - required_parameters - optional_parameters).empty?
- end
-
- def self.raise_argument_error(opts, required_parameters, optional_parameters)
- raise ArgumentError, <<-ERR
- Wrong arguments given - #{opts}
- Required parameters are #{required_parameters}
- Optional parameters are #{optional_parameters}
- ERR
- end
- end
-
end
\ No newline at end of file