module GraphQL::Relay::Walker::ClientExt

Public Instance Methods

walk(from_id:, except: nil, only: nil, variables: {}, context: {}) { |frame| ... } click to toggle source

Walk this client's graph from the given GID.

from_id: - The String GID to start walking from. variables: - A Hash of variables to be passed to GraphQL::Client. context: - A Hash containing context to be passed to GraphQL::Client. &blk - A block to call with each Walker::Frame that is visited.

Returns nothing.

# File lib/graphql/relay/walker/client_ext.rb, line 11
def walk(from_id:, except: nil, only: nil, variables: {}, context: {})
  query_string = GraphQL::Relay::Walker.query_string(schema, except: except, only: only)
  walker_query = parse(query_string)

  GraphQL::Relay::Walker.walk(from_id: from_id) do |frame|
    response = query(
      walker_query,
      variables: variables.merge('id' => frame.gid),
      context: context
    )

    frame.context[:response] = response
    frame.result = response.respond_to?(:data) && response.data ? response.data.to_h : {}
    frame.enqueue_found_gids

    yield(frame) if block_given?
  end
end