module ElasticGraph::GraphQL::Aggregation::Resolvers::RelayConnectionBuilder
def self.build_bucket(query, response)
def self.build_bucket(query, response) oupings.to_h { |g| [g.key, nil] }, sponse.dig("hits", "total", "value") || 0 ations = query.computations.to_h do |computation| aggregation_name: query.name), {"value" => computation.detail.empty_bucket_value}] et_computations) aggregations"] || {})
def self.build_from_buckets(query:, parent_queries:, schema_element_names:, field_path: [], &build_buckets)
def self.build_from_buckets(query:, parent_queries:, schema_element_names:, field_path: [], &build_buckets) GraphQL::Resolvers::RelayConnection::GenericAdapter.new( schema_element_names: schema_element_names, raw_nodes: raw_nodes_for(query, parent_queries, schema_element_names, field_path, &build_buckets), paginator: query.paginator, get_total_edge_count: -> {}, to_sort_value: ->(node, decoded_cursor) do query.groupings.map do |grouping| DatastoreQuery::Paginator::SortValue.new( from_item: (_ = node).bucket.fetch("key").fetch(grouping.key), from_cursor: decoded_cursor.sort_values.fetch(grouping.key), sort_direction: :asc # we don't yet support any alternate sorting. ) end end ) end
def self.build_from_search_response(query:, search_response:, schema_element_names:)
def self.build_from_search_response(query:, search_response:, schema_element_names:) build_from_buckets(query: query, parent_queries: [], schema_element_names: schema_element_names) do extract_buckets_from(search_response, for_query: query) end end
def self.extract_buckets_from(search_response, for_query:)
def self.extract_buckets_from(search_response, for_query:) _data.dig( for_query, search_response.raw_data)]
def self.raw_nodes_for(query, parent_queries, schema_element_names, field_path)
def self.raw_nodes_for(query, parent_queries, schema_element_names, field_path) r::SINGLETON` is a special case, so handle it here. paginator.paginated_from_singleton_cursor? t| names: schema_element_names, parent_queries, ld_path