lib/mongoid/report/queries_builder.rb in mongoid-report-0.1.9 vs lib/mongoid/report/queries_builder.rb in mongoid-report-0.2.0
- old
+ new
@@ -1,9 +1,9 @@
module Mongoid
module Report
- QueriesBuilder = Struct.new(:settings) do
+ QueriesBuilder = Struct.new(:configuration) do
def do
[].tap do |queries|
queries.concat([{ '$project' => project_query }])
queries.concat([{ '$group' => group_query }])
queries.concat([{ '$project' => project_group_fields_query }])
@@ -11,30 +11,26 @@
end
private
def groups
- @group_by ||= settings.fetch(:group_by, [])
+ configuration[:group_by]
end
def fields
- @fields ||= settings[:fields].select do |field, _|
- !settings[:columns].include?(field.to_sym)
+ @fields ||= begin
+ columns = configuration[:columns].keys
+
+ configuration[:fields].select do |field|
+ !columns.include?(field.to_sym)
+ end
end
end
- def in_fields
- @in_fields ||= fields.keys
- end
-
- def output_fields
- @output_fields ||= fields.values
- end
-
def all_fields
[:_id]
- .concat(in_fields)
+ .concat(fields)
.concat(groups)
end
# Example: { '$project' => { :field1 => 1 } }
def project_query
@@ -50,11 +46,12 @@
groups.inject(query[:_id]) do |hash, group|
hash.merge!(group => GROUP_TEMPLATE % group)
end
- in_fields.inject(query) do |hash, field|
+ fields.inject(query) do |hash, field|
+ next hash if groups.include?(field)
hash.merge!(field => { '$sum' => GROUP_TEMPLATE % field })
end
end
end
@@ -69,11 +66,12 @@
groups.inject(query) do |hash, group|
hash.merge!(group => PROJECT_TEMPLATE % group)
end
end
- fields.inject(query) do |hash, (field, name)|
- hash.merge!(name => "$#{field}")
+ fields.inject(query) do |hash, field|
+ next hash if groups.include?(field)
+ hash.merge!(field => "$#{field}")
end
end
end
end