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