class GraphqlRails::Controller
base class for all graphql_rails controllers
Attributes
action_name[R]
controller_name[R]
graphql_request[R]
Public Class Methods
action(action_name)
click to toggle source
# File lib/graphql_rails/controller.rb, line 33 def action(action_name) controller_configuration.action(action_name) end
action_default()
click to toggle source
# File lib/graphql_rails/controller.rb, line 37 def action_default controller_configuration.action_default end
after_action(*args, **kwargs, &block)
click to toggle source
# File lib/graphql_rails/controller.rb, line 29 def after_action(*args, **kwargs, &block) controller_configuration.add_action_hook(:after, *args, **kwargs, &block) end
around_action(*args, **kwargs, &block)
click to toggle source
# File lib/graphql_rails/controller.rb, line 25 def around_action(*args, **kwargs, &block) controller_configuration.add_action_hook(:around, *args, **kwargs, &block) end
before_action(*args, **kwargs, &block)
click to toggle source
# File lib/graphql_rails/controller.rb, line 21 def before_action(*args, **kwargs, &block) controller_configuration.add_action_hook(:before, *args, **kwargs, &block) end
controller_configuration()
click to toggle source
# File lib/graphql_rails/controller.rb, line 45 def controller_configuration @controller_configuration ||= Controller::Configuration.new(self) end
inherited(subclass)
click to toggle source
Calls superclass method
# File lib/graphql_rails/controller.rb, line 15 def inherited(subclass) super new_config = controller_configuration.dup_with(controller: subclass) subclass.instance_variable_set(:@controller_configuration, new_config) end
model(*args)
click to toggle source
# File lib/graphql_rails/controller.rb, line 41 def model(*args) controller_configuration.model(*args) end
new(graphql_request)
click to toggle source
# File lib/graphql_rails/controller.rb, line 52 def initialize(graphql_request) @graphql_request = graphql_request end
Public Instance Methods
call(method_name)
click to toggle source
# File lib/graphql_rails/controller.rb, line 56 def call(method_name) @action_name = method_name with_controller_action_logging do call_with_rendering graphql_request.object_to_return end ensure @action_name = nil end
Protected Instance Methods
params()
click to toggle source
# File lib/graphql_rails/controller.rb, line 78 def params @params ||= graphql_request.params.deep_transform_keys { |key| key.to_s.underscore }.with_indifferent_access end
render(object_or_errors)
click to toggle source
# File lib/graphql_rails/controller.rb, line 70 def render(object_or_errors) errors = graphql_errors_from_render_params(object_or_errors) object = errors.empty? ? object_or_errors : nil graphql_request.errors = errors graphql_request.object_to_return = object end
Private Instance Methods
call_with_rendering()
click to toggle source
# File lib/graphql_rails/controller.rb, line 84 def call_with_rendering hooks_runner = ActionHooksRunner.new(action_name: action_name, controller: self) response = hooks_runner.call { public_send(action_name) } render response if graphql_request.no_object_to_return? rescue StandardError => error if error.is_a?(GraphQL::ExecutionError) render error: error else render error: SystemError.new(error.message) end end
default_payload()
click to toggle source
# File lib/graphql_rails/controller/log_controller_action.rb, line 36 def default_payload { controller: controller_name, action: action_name, params: filtered_params } end
filter_parameters()
click to toggle source
# File lib/graphql_rails/controller/log_controller_action.rb, line 58 def filter_parameters return [] if !defined?(Rails) || Rails.application.nil? Rails.application.config.filter_parameters || [] end
filtered_params()
click to toggle source
# File lib/graphql_rails/controller/log_controller_action.rb, line 48 def filtered_params @filtered_params ||= if filter_parameters.empty? params else filter_options = Rails.configuration.filter_parameters parameter_filter_class.new(filter_options).filter(params) end end
graphql_errors_from_render_params(rendering_params)
click to toggle source
# File lib/graphql_rails/controller.rb, line 97 def graphql_errors_from_render_params(rendering_params) return [] unless rendering_params.is_a?(Hash) return [] if rendering_params.keys.count != 1 errors = rendering_params[:error] || rendering_params[:errors] errors.is_a?(Enumerable) ? errors : Array(errors) end
parameter_filter_class()
click to toggle source
# File lib/graphql_rails/controller/log_controller_action.rb, line 64 def parameter_filter_class return ActiveSupport::ParameterFilter if Object.const_defined?('ActiveSupport::ParameterFilter') ActionDispatch::Http::ParameterFilter end
status()
click to toggle source
# File lib/graphql_rails/controller/log_controller_action.rb, line 44 def status graphql_request.errors.present? ? 500 : 200 end
with_controller_action_logging(&block)
click to toggle source
# File lib/graphql_rails/controller.rb, line 105 def with_controller_action_logging(&block) LogControllerAction.call( controller_name: self.class.name, action_name: action_name, params: params, graphql_request: graphql_request, &block ) end