Class: ActiveAdmin::GraphQL::ResourceQueryProxy
- Inherits:
-
Object
- Object
- ActiveAdmin::GraphQL::ResourceQueryProxy
- Includes:
- Controller
- Defined in:
- lib/active_admin/graphql/resource_query_proxy.rb,
lib/active_admin/graphql/resource_query_proxy/controller.rb
Overview
Reuses ResourceController data-access behaviour (scoped_collection, find_collection, find_resource, authorization scoping, Ransack, menu scopes, sorting, includes) so GraphQL list/detail mutations align with the HTML/JSON list and member REST endpoints.
Defined Under Namespace
Modules: Controller
Instance Method Summary collapse
- #build_new(attributes) ⇒ Object
- #find_member(id) ⇒ Object
-
#initialize(aa_resource:, user:, namespace:, graph_params: {}) ⇒ ResourceQueryProxy
constructor
A new instance of ResourceQueryProxy.
- #relation_for_index ⇒ Object
- #run_batch_action(batch_sym, ids, inputs: {}) ⇒ Object
- #run_collection_action(action_name, extra_params: {}) ⇒ Object
- #run_member_action(action_name, id, extra_params: {}) ⇒ Object
Constructor Details
#initialize(aa_resource:, user:, namespace:, graph_params: {}) ⇒ ResourceQueryProxy
Returns a new instance of ResourceQueryProxy.
16 17 18 19 20 21 |
# File 'lib/active_admin/graphql/resource_query_proxy.rb', line 16 def initialize(aa_resource:, user:, namespace:, graph_params: {}) @aa_resource = aa_resource @user = user @namespace = namespace @graph_params = normalize_graph_params(graph_params) end |
Instance Method Details
#build_new(attributes) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/active_admin/graphql/resource_query_proxy.rb', line 32 def build_new(attributes) if missing_required_belongs_to? raise ::GraphQL::ExecutionError, "#{@aa_resource.belongs_to_config.to_param} is required for nested resource #{@aa_resource.resource_name}" end c = controller_for("new") chain = c.send(:apply_authorization_scope, c.send(:scoped_collection)) permitted = attributes.stringify_keys.slice(*@aa_resource.graphql_assignable_attribute_names) chain.build(permitted) end |
#find_member(id) ⇒ Object
27 28 29 30 |
# File 'lib/active_admin/graphql/resource_query_proxy.rb', line 27 def find_member(id) extra = member_route_params_for_find(id) controller_for("show", extra).send(:find_resource) end |
#relation_for_index ⇒ Object
23 24 25 |
# File 'lib/active_admin/graphql/resource_query_proxy.rb', line 23 def relation_for_index controller_for("index").send(:find_collection, except: %i[pagination collection_decorator]) end |
#run_batch_action(batch_sym, ids, inputs: {}) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/active_admin/graphql/resource_query_proxy.rb', line 44 def run_batch_action(batch_sym, ids, inputs: {}) unless @aa_resource.batch_actions_enabled? raise ::GraphQL::ExecutionError, "batch actions are disabled for #{@aa_resource.resource_name}" end inputs = normalize_batch_inputs(inputs) extra = { "batch_action" => batch_sym.to_s, "collection_selection" => Array(ids).map(&:to_s), # TruffleRuby freezes JSON's internal "{}" buffer, so Hash#to_json raises FrozenError. # Dumping into a dedicated StringIO avoids mutating the shared literal. "batch_action_inputs" => dump_batch_inputs(inputs) } c = controller_for("batch_action", extra) perform_controller_command!(c) { c.send(:batch_action) } end |
#run_collection_action(action_name, extra_params: {}) ⇒ Object
72 73 74 75 76 77 78 79 80 81 |
# File 'lib/active_admin/graphql/resource_query_proxy.rb', line 72 def run_collection_action(action_name, extra_params: {}) action_name = action_name.to_s unless @aa_resource.collection_actions.any? { |a| a.name.to_s == action_name } raise ::GraphQL::ExecutionError, "unknown collection action #{action_name.inspect}" end extras = normalize_extra_params(extra_params) c = controller_for(action_name, extras) perform_controller_command!(c) { c.send(action_name) } end |
#run_member_action(action_name, id, extra_params: {}) ⇒ Object
61 62 63 64 65 66 67 68 69 70 |
# File 'lib/active_admin/graphql/resource_query_proxy.rb', line 61 def run_member_action(action_name, id, extra_params: {}) action_name = action_name.to_s unless @aa_resource.member_actions.any? { |a| a.name.to_s == action_name } raise ::GraphQL::ExecutionError, "unknown member action #{action_name.inspect}" end extras = normalize_extra_params(extra_params) c = controller_for(action_name, {"id" => id.to_s}.merge(extras)) perform_controller_command!(c) { c.send(action_name) } end |