Class: ElasticGraph::GraphQL::Aggregation::QueryAdapter

Inherits:
Object
  • Object
show all
Defined in:
lib/elastic_graph/graphql/aggregation/query_adapter.rb

Overview

Responsible for taking in the incoming GraphQL request context, arguments, and the GraphQL schema and directives and populating the ‘aggregations` portion of `query`.

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#element_namesObject (readonly)

Returns the value of attribute element_names.



28
29
30
# File 'lib/elastic_graph/graphql/aggregation/query_adapter.rb', line 28

def element_names
  @element_names
end

Instance Method Details

#call(query:, lookahead:, args:, field:, context:) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/elastic_graph/graphql/aggregation/query_adapter.rb', line 30

def call(query:, lookahead:, args:, field:, context:)
  return query unless field.type.unwrap_fully.indexed_aggregation?

  aggregations_node = extract_aggregation_node(lookahead, field, context.query)
  return query unless aggregations_node

  aggregation_query = build_aggregation_query_for(
    aggregations_node,
    field: field,
    grouping_adapter: CompositeGroupingAdapter,
    # Filters on root aggregations applied to the search query body itself instead of
    # using a filter aggregation, like sub-aggregations do, so we don't want a filter
    # aggregation generated here.
    unfiltered: true
  )

  query.merge_with(aggregations: {aggregation_query.name => aggregation_query})
end