Sha256: e442b907f1b42b9dc7adf2cfe7c49b0656fa9dfeeaa58fcfa84e38fb0ddc3ef8

Contents?: true

Size: 1.15 KB

Versions: 7

Compression:

Stored size: 1.15 KB

Contents

module GraphQL::Relay::Walker
  module ClientExt
    # 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.
    def walk(from_id:, variables: {}, context: {})
      query_string = GraphQL::Relay::Walker.query_string(schema)
      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
  end
end

begin
  require "graphql/relay/walker"
  require "graphql/client"
  GraphQL::Client.send(:include, GraphQL::Relay::Walker::ClientExt)
rescue LoadError
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
graphql-relay-walker-0.0.9 lib/graphql/relay/walker/client_ext.rb
graphql-relay-walker-0.0.8 lib/graphql/relay/walker/client_ext.rb
graphql-relay-walker-0.0.7 lib/graphql/relay/walker/client_ext.rb
graphql-relay-walker-0.0.6 lib/graphql/relay/walker/client_ext.rb
graphql-relay-walker-0.0.5 lib/graphql/relay/walker/client_ext.rb
graphql-relay-walker-0.0.4 lib/graphql/relay/walker/client_ext.rb
graphql-relay-walker-0.0.3 lib/graphql/relay/walker/client_ext.rb