Sha256: c1bb33963c272ff634c8f2440ea87dd05c19a94c61b9fcc5dba056b67dcb5f80
Contents?: true
Size: 1.27 KB
Versions: 1
Compression:
Stored size: 1.27 KB
Contents
# frozen_string_literal: true # preload resolver for queries Rails.application.config.to_prepare do Types::QueryType.class_eval do # Add corresponding preloads to query results # Note: key is automatically calculated based on method name # @param collection (ActiveCollection) # @param type_klass (GQL TypeClass, default: calculates using return type) # @param query_key (String | Sym) Default method name def include_gql_preloads(collection, query_key: nil, type_klass: nil) query_key ||= caller_locations(1, 1)[0].label gql_result_key = GraphQL::Schema::Member::BuildType.camelize(query_key.to_s) type_klass ||= preload_type_klass(gql_result_key.to_s) klass = GraphqlPreloadQueries::Extensions::Preload ast_node = preload_find_node(gql_result_key) klass.preload_associations(collection, ast_node, type_klass) end private # @param key: Symbol def preload_find_node(key) main_node = context.query.document.definitions.first main_node.selections.find { |node_i| node_i.name == key.to_s } end # @param result_key: String def preload_type_klass(result_key) res = self.class.fields[result_key].instance_variable_get(:@return_type_expr) res.is_a?(Array) ? res.first : res end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
graphql_preload_queries-0.4.0 | config/initializers/add_query_helper.rb |