From 5b514d4cf7a8c226018388cdf374ba9b3c9995b2 Mon Sep 17 00:00:00 2001 From: Myron Marston Date: Fri, 7 Feb 2025 21:51:00 -0800 Subject: [PATCH] Refactor: extract `resolver_query_adapter` as an injectable dependency. This paves the way for further refactoring I'm working on. --- elasticgraph-graphql/lib/elastic_graph/graphql.rb | 14 ++++++++++++-- .../lib/elastic_graph/graphql/http_endpoint.rb | 2 +- .../graphql/resolvers/graphql_adapter.rb | 10 ++-------- elasticgraph-graphql/sig/elastic_graph/graphql.rbs | 3 +++ .../graphql/resolvers/graphql_adapter.rbs | 3 +-- .../graphql/resolvers/query_adapter.rbs | 12 ++++++++++++ .../graphql/resolvers/graphql_adapter_spec.rb | 3 +-- 7 files changed, 32 insertions(+), 15 deletions(-) create mode 100644 elasticgraph-graphql/sig/elastic_graph/graphql/resolvers/query_adapter.rbs diff --git a/elasticgraph-graphql/lib/elastic_graph/graphql.rb b/elasticgraph-graphql/lib/elastic_graph/graphql.rb index 49e850e2..e824f762 100644 --- a/elasticgraph-graphql/lib/elastic_graph/graphql.rb +++ b/elasticgraph-graphql/lib/elastic_graph/graphql.rb @@ -101,8 +101,7 @@ def schema require "elastic_graph/graphql/resolvers/graphql_adapter" Resolvers::GraphQLAdapter.new( schema: schema, - datastore_query_builder: datastore_query_builder, - datastore_query_adapters: datastore_query_adapters, + query_adapter: resolver_query_adapter, runtime_metadata: runtime_metadata, resolvers: graphql_resolvers ) @@ -124,6 +123,17 @@ def datastore_search_router end end + # @private + def resolver_query_adapter + @resolver_query_adapter ||= begin + require "elastic_graph/graphql/resolvers/query_adapter" + Resolvers::QueryAdapter.new( + datastore_query_builder: datastore_query_builder, + datastore_query_adapters: datastore_query_adapters + ) + end + end + # @private def datastore_query_builder @datastore_query_builder ||= begin diff --git a/elasticgraph-graphql/lib/elastic_graph/graphql/http_endpoint.rb b/elasticgraph-graphql/lib/elastic_graph/graphql/http_endpoint.rb index 47fb1e1f..7203db1a 100644 --- a/elasticgraph-graphql/lib/elastic_graph/graphql/http_endpoint.rb +++ b/elasticgraph-graphql/lib/elastic_graph/graphql/http_endpoint.rb @@ -227,7 +227,7 @@ def self.error(status_code, message) # Steep weirdly expects them here... # @dynamic initialize, config, logger, runtime_metadata, graphql_schema_string, datastore_core, clock # @dynamic graphql_http_endpoint, graphql_query_executor, schema, datastore_search_router, filter_interpreter, filter_node_interpreter - # @dynamic datastore_query_builder, graphql_gem_plugins, graphql_resolvers, datastore_query_adapters, monotonic_clock + # @dynamic datastore_query_builder, resolver_query_adapter, graphql_gem_plugins, graphql_resolvers, datastore_query_adapters, monotonic_clock # @dynamic load_dependencies_eagerly, self.from_parsed_yaml, filter_args_translator, sub_aggregation_grouping_adapter end end diff --git a/elasticgraph-graphql/lib/elastic_graph/graphql/resolvers/graphql_adapter.rb b/elasticgraph-graphql/lib/elastic_graph/graphql/resolvers/graphql_adapter.rb index f0a00b23..41a62db7 100644 --- a/elasticgraph-graphql/lib/elastic_graph/graphql/resolvers/graphql_adapter.rb +++ b/elasticgraph-graphql/lib/elastic_graph/graphql/resolvers/graphql_adapter.rb @@ -6,8 +6,6 @@ # # frozen_string_literal: true -require "elastic_graph/graphql/resolvers/query_adapter" - module ElasticGraph class GraphQL module Resolvers @@ -15,13 +13,9 @@ module Resolvers # our resolvers. Responsible for routing a resolution request to the appropriate # resolver. class GraphQLAdapter - def initialize(schema:, datastore_query_builder:, datastore_query_adapters:, runtime_metadata:, resolvers:) + def initialize(schema:, query_adapter:, runtime_metadata:, resolvers:) @schema = schema - @query_adapter = QueryAdapter.new( - datastore_query_builder: datastore_query_builder, - datastore_query_adapters: datastore_query_adapters - ) - + @query_adapter = query_adapter @resolvers = resolvers scalar_types_by_name = runtime_metadata.scalar_types_by_name diff --git a/elasticgraph-graphql/sig/elastic_graph/graphql.rbs b/elasticgraph-graphql/sig/elastic_graph/graphql.rbs index 0a3f7c99..73311da2 100644 --- a/elasticgraph-graphql/sig/elastic_graph/graphql.rbs +++ b/elasticgraph-graphql/sig/elastic_graph/graphql.rbs @@ -33,6 +33,9 @@ module ElasticGraph @datastore_search_router: DatastoreSearchRouter? def datastore_search_router: () -> DatastoreSearchRouter + @resolver_query_adapter: Resolvers::QueryAdapter? + def resolver_query_adapter: () -> Resolvers::QueryAdapter + @datastore_query_builder: DatastoreQuery::Builder? def datastore_query_builder: () -> DatastoreQuery::Builder diff --git a/elasticgraph-graphql/sig/elastic_graph/graphql/resolvers/graphql_adapter.rbs b/elasticgraph-graphql/sig/elastic_graph/graphql/resolvers/graphql_adapter.rbs index 5a274740..2ca3a952 100644 --- a/elasticgraph-graphql/sig/elastic_graph/graphql/resolvers/graphql_adapter.rbs +++ b/elasticgraph-graphql/sig/elastic_graph/graphql/resolvers/graphql_adapter.rbs @@ -4,8 +4,7 @@ module ElasticGraph class GraphQLAdapter def initialize: ( schema: Schema, - datastore_query_builder: DatastoreQuery::Builder, - datastore_query_adapters: ::Array[_QueryAdapter], + query_adapter: Resolvers::QueryAdapter, runtime_metadata: SchemaArtifacts::RuntimeMetadata::Schema, resolvers: ::Array[Resolvers::_Resolver] ) -> void diff --git a/elasticgraph-graphql/sig/elastic_graph/graphql/resolvers/query_adapter.rbs b/elasticgraph-graphql/sig/elastic_graph/graphql/resolvers/query_adapter.rbs new file mode 100644 index 00000000..5573f30a --- /dev/null +++ b/elasticgraph-graphql/sig/elastic_graph/graphql/resolvers/query_adapter.rbs @@ -0,0 +1,12 @@ +module ElasticGraph + class GraphQL + module Resolvers + class QueryAdapter + def initialize: ( + datastore_query_builder: DatastoreQuery::Builder, + datastore_query_adapters: ::Array[_QueryAdapter] + ) -> void + end + end + end +end diff --git a/elasticgraph-graphql/spec/unit/elastic_graph/graphql/resolvers/graphql_adapter_spec.rb b/elasticgraph-graphql/spec/unit/elastic_graph/graphql/resolvers/graphql_adapter_spec.rb index 0207766f..f9de5c96 100644 --- a/elasticgraph-graphql/spec/unit/elastic_graph/graphql/resolvers/graphql_adapter_spec.rb +++ b/elasticgraph-graphql/spec/unit/elastic_graph/graphql/resolvers/graphql_adapter_spec.rb @@ -18,8 +18,7 @@ module Resolvers it "raises a clear error when no resolver can be found" do adapter = GraphQLAdapter.new( schema: schema, - datastore_query_builder: graphql.datastore_query_builder, - datastore_query_adapters: graphql.datastore_query_adapters, + query_adapter: graphql.resolver_query_adapter, runtime_metadata: graphql.runtime_metadata, resolvers: graphql.graphql_resolvers )