def aggregate(*args)
query = args.last.kind_of?(Hash) ? args.pop : {}
query[:fields] ||= []
query[:fields] |= args
query[:fields].map! { |f| normalize_field(f) }
raise ArgumentError, 'query[:fields] must not be empty' if query[:fields].empty?
unless query.key?(:order)
directions = direction_map
query[:order] = []
query[:fields].each do |property|
next unless property.kind_of?(Property)
query[:order] << directions.fetch(property, property)
end
end
query = scoped_query(query)
if query.fields.any? { |p| p.kind_of?(Property) }
query.repository.aggregate(query.update(:unique => true))
else
query.repository.aggregate(query).first
end
end