module GraphQL::Groups::HasAggregates::ClassMethods
Public Instance Methods
aggregate(name, *_, **options, &block)
click to toggle source
# File lib/graphql/groups/has_aggregates.rb, line 11 def aggregate(name, *_, **options, &block) aggregate_type = aggregate_type(name) resolve_method = "resolve_#{name}".to_sym query_method = options[:query_method] || name field = aggregate_field name, aggregate_type, null: false, query_method: query_method, resolver_method: resolve_method, **options, &block aggregate_type.add_fields(field.own_attributes) define_method query_method do |scope:, **kwargs| scope.public_send(name, **kwargs) end define_method resolve_method do group_result[1][name] end end
aggregate_field(*args, **kwargs, &block)
click to toggle source
# File lib/graphql/groups/has_aggregates.rb, line 32 def aggregate_field(*args, **kwargs, &block) field_defn = Schema::AggregateField.from_options(*args, owner: self, **kwargs, &block) add_field(field_defn) field_defn end
Private Instance Methods
aggregate_type(name)
click to toggle source
# File lib/graphql/groups/has_aggregates.rb, line 40 def aggregate_type(name) name = "#{name}AggregateType".upcase_first own_aggregate_types[name] ||= Class.new(Schema::AggregateType) do graphql_name name end end
own_aggregate_types()
click to toggle source
# File lib/graphql/groups/has_aggregates.rb, line 47 def own_aggregate_types @own_aggregate_types ||= {} end