Class: GraphQL::Stitching::Client
- Inherits:
-
Object
- Object
- GraphQL::Stitching::Client
- Defined in:
- lib/graphql/stitching/client.rb
Overview
Client is an out-of-the-box helper that assembles all stitching components into a workflow that executes requests.
Instance Attribute Summary collapse
-
#supergraph ⇒ Supergraph
readonly
Composed supergraph that services incoming requests.
Instance Method Summary collapse
- #execute(raw_query = nil, query: nil, variables: nil, operation_name: nil, context: nil, validate: true) ⇒ Object
-
#initialize(locations: nil, supergraph: nil, composer: nil) ⇒ Client
constructor
Builds a new client instance.
- #on_cache_read(&block) ⇒ Object
- #on_cache_write(&block) ⇒ Object
- #on_error(&block) ⇒ Object
Constructor Details
#initialize(locations: nil, supergraph: nil, composer: nil) ⇒ Client
Builds a new client instance. Either supergraph
or locations
configuration is required.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/graphql/stitching/client.rb', line 17 def initialize(locations: nil, supergraph: nil, composer: nil) @supergraph = if locations && supergraph raise ArgumentError, "Cannot provide both locations and a supergraph." elsif supergraph && !supergraph.is_a?(Supergraph) raise ArgumentError, "Provided supergraph must be a GraphQL::Stitching::Supergraph instance." elsif supergraph supergraph else composer ||= Composer.new composer.perform(locations) end @on_cache_read = nil @on_cache_write = nil @on_error = nil end |
Instance Attribute Details
#supergraph ⇒ Supergraph (readonly)
Returns composed supergraph that services incoming requests.
11 12 13 |
# File 'lib/graphql/stitching/client.rb', line 11 def supergraph @supergraph end |
Instance Method Details
#execute(raw_query = nil, query: nil, variables: nil, operation_name: nil, context: nil, validate: true) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/graphql/stitching/client.rb', line 34 def execute(raw_query = nil, query: nil, variables: nil, operation_name: nil, context: nil, validate: true) request = Request.new( @supergraph, raw_query || query, # << for parity with GraphQL Ruby Schema.execute operation_name: operation_name, variables: variables, context: context, ) if validate validation_errors = request.validate return error_result(request, validation_errors) if validation_errors.any? end load_plan(request) request.execute rescue GraphQL::ParseError, GraphQL::ExecutionError => e error_result(request, [e]) rescue StandardError => e = @on_error.call(request, e) if @on_error error_result(request, [{ "message" => || "An unexpected error occured." }]) end |
#on_cache_read(&block) ⇒ Object
57 58 59 60 |
# File 'lib/graphql/stitching/client.rb', line 57 def on_cache_read(&block) raise ArgumentError, "A cache read block is required." unless block_given? @on_cache_read = block end |
#on_cache_write(&block) ⇒ Object
62 63 64 65 |
# File 'lib/graphql/stitching/client.rb', line 62 def on_cache_write(&block) raise ArgumentError, "A cache write block is required." unless block_given? @on_cache_write = block end |
#on_error(&block) ⇒ Object
67 68 69 70 |
# File 'lib/graphql/stitching/client.rb', line 67 def on_error(&block) raise ArgumentError, "An error handler block is required." unless block_given? @on_error = block end |