From ac07270dfceaa5301eda1f8c8eba6c8c901bcd20 Mon Sep 17 00:00:00 2001 From: Michael Foley Date: Thu, 28 Sep 2023 12:17:54 -0700 Subject: [PATCH] Wrap define_controller initializer in to_prepare This was causing problems when I attempted to upgrade to Rails 7: my `ApplicationController` references some code that doesn't get loaded until Rails has been initialized, and this engine was attempting to load `ApplicationController` before Rails is initialized. This resulted in the code not being found. Wrapping it in a `to_prepare` block fixed the problem. This also fixes a Rubocop being disabled and not re-enabled afterward. --- lib/graphiti_graphql/engine.rb | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/lib/graphiti_graphql/engine.rb b/lib/graphiti_graphql/engine.rb index 83b8f3d..e267384 100644 --- a/lib/graphiti_graphql/engine.rb +++ b/lib/graphiti_graphql/engine.rb @@ -65,15 +65,18 @@ def self.reloader_class end initializer "graphiti_graphql.define_controller" do - require "#{Rails.root}/app/controllers/application_controller" - app_controller = GraphitiGraphQL.config.federation_application_controller || ::ApplicationController - # rubocop:disable Lint/ConstantDefinitionInBlock(Standard) - class GraphitiGraphQL::ExecutionController < app_controller - register_exception Graphiti::Errors::UnreadableAttribute, message: true - def execute - params = request.params # avoid strong_parameters - render json: Graphiti.gql(params[:query], params[:variables]) + ::GraphitiGraphQL::Engine.reloader_class.to_prepare do + require "#{Rails.root}/app/controllers/application_controller" + app_controller = GraphitiGraphQL.config.federation_application_controller || ::ApplicationController + # rubocop:disable Lint/ConstantDefinitionInBlock(Standard) + class GraphitiGraphQL::ExecutionController < app_controller + register_exception Graphiti::Errors::UnreadableAttribute, message: true + def execute + params = request.params # avoid strong_parameters + render json: Graphiti.gql(params[:query], params[:variables]) + end end + # rubocop:enable Lint/ConstantDefinitionInBlock(Standard) end end