Skip to content

Commit

Permalink
Refactor: extract resolver_query_adapter as an injectable dependency.
Browse files Browse the repository at this point in the history
This paves the way for further refactoring I'm working on.
  • Loading branch information
myronmarston committed Feb 24, 2025
1 parent ac83c3b commit ed38fd4
Show file tree
Hide file tree
Showing 7 changed files with 32 additions and 15 deletions.
14 changes: 12 additions & 2 deletions elasticgraph-graphql/lib/elastic_graph/graphql.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
)
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,16 @@
#
# frozen_string_literal: true

require "elastic_graph/graphql/resolvers/query_adapter"

module ElasticGraph
class GraphQL
module Resolvers
# Adapts the GraphQL gem's resolver interface to the interface implemented by
# 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
Expand Down
3 changes: 3 additions & 0 deletions elasticgraph-graphql/sig/elastic_graph/graphql.rbs
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -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
)
Expand Down

0 comments on commit ed38fd4

Please sign in to comment.