Class: ElasticGraph::GraphQL::Resolvers::RelayConnection::SearchResponseAdapterBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/elastic_graph/graphql/resolvers/relay_connection/search_response_adapter_builder.rb

Overview

Adapts an ‘DatastoreResponse::SearchResponse` to what the graphql gem expects for a relay connection.

Class Method Summary collapse

Class Method Details

.build_from(schema_element_names:, search_response:, query:) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/elastic_graph/graphql/resolvers/relay_connection/search_response_adapter_builder.rb', line 17

def self.build_from(schema_element_names:, search_response:, query:)
  document_paginator = query.document_paginator

  GenericAdapter.new(
    schema_element_names: schema_element_names,
    raw_nodes: search_response.to_a,
    paginator: document_paginator.paginator,
    get_total_edge_count: -> { search_response.total_document_count },
    to_sort_value: ->(document, decoded_cursor) do
      (_ = document).sort.zip(decoded_cursor.sort_values.values, document_paginator.sort).map do |from_document, from_cursor, sort_clause|
        DatastoreQuery::Paginator::SortValue.new(
          from_item: from_document,
          from_cursor: from_cursor,
          sort_direction: sort_clause.values.first.fetch("order").to_sym
        )
      end
    end
  )
end