Class: GraphQL::RemoteLoader::Loader
- Inherits:
-
Batch::Loader
- Object
- Batch::Loader
- GraphQL::RemoteLoader::Loader
- Defined in:
- lib/graphql/remote_loader/loader.rb
Class Method Summary collapse
-
.load(query, context: {}) ⇒ Object
Delegates to GraphQL::Batch::Loader#load We include a unique prime as part of the batch key to use as part of the alias on all fields.
-
.load_value(*path, context: {}) ⇒ Object
Loads the value, then if the query was successful, fulfills promise with the leaf value instead of the full results hash.
- .reset_index ⇒ Object
- .store_context(context) ⇒ Object
Instance Method Summary collapse
-
#query(query_string) ⇒ Object
Given a query string, return a response JSON.
Class Method Details
.load(query, context: {}) ⇒ Object
Delegates to GraphQL::Batch::Loader#load We include a unique prime as part of the batch key to use as part of the alias on all fields. This is used to a) Avoid name collisions in the generated query b) Determine which fields in the result JSON should be
handed fulfilled to each promise
14 15 16 17 18 19 20 21 22 23 |
# File 'lib/graphql/remote_loader/loader.rb', line 14 def self.load(query, context: {}) @index ||= 1 @index += 1 prime = Prime.take(@index - 1).last store_context(context) self.for.load([query, prime, @context]) end |
.load_value(*path, context: {}) ⇒ Object
Loads the value, then if the query was successful, fulfills promise with the leaf value instead of the full results hash.
If errors are present, returns nil.
29 30 31 32 33 34 35 |
# File 'lib/graphql/remote_loader/loader.rb', line 29 def self.load_value(*path, context: {}) load(query_from_path(path), context: context).then do |results| next nil if results["errors"] && !results["errors"].empty? value_from_hash(results["data"]) end end |
.reset_index ⇒ Object
37 38 39 |
# File 'lib/graphql/remote_loader/loader.rb', line 37 def self.reset_index @index = nil end |
.store_context(context) ⇒ Object
41 42 43 44 |
# File 'lib/graphql/remote_loader/loader.rb', line 41 def self.store_context(context) @context ||= {} @context.merge!(context.to_h) end |
Instance Method Details
#query(query_string) ⇒ Object
Given a query string, return a response JSON
47 48 49 50 |
# File 'lib/graphql/remote_loader/loader.rb', line 47 def query(query_string) raise NotImplementedError, "RemoteLoader::Loader should be subclassed and #query must be defined" end |