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