Module: Groovestack::Base::GraphQL::Mutations::MethodTrigger

Defined in:
lib/groovestack/base/graphql/mutations/method_trigger.rb

Instance Method Summary collapse

Instance Method Details

#trigger_instance_method!(obj:, attrs:, instance_method:, args: nil, authorization_policy: nil) ⇒ Object

rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity

Raises:

  • (GraphQL::ExecutionError)


8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/groovestack/base/graphql/mutations/method_trigger.rb', line 8

def trigger_instance_method!(obj:, attrs:, instance_method:, args: nil, authorization_policy: nil) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
  raise GraphQL::ExecutionError, 'instance_method not present' if instance_method.blank?

  instance_method = instance_method.to_sym

  raise ::GraphQL::ExecutionError, 'instance_method undefined' unless obj.respond_to?(instance_method)

  if attrs.present?
    raise ::GraphQL::ExecutionError,
          'Cannot update multiple attributes when triggering instance method'
  end
  unless authorization_policy.nil? || authorization_policy.permitted_instance_methods.include?(instance_method) # rubocop:disable Layout/LineLength
    raise ::GraphQL::ExecutionError,
          "Unauthorized not allowed to trigger #{instance_method} for this #{obj.class}"
  end

  if args.present? && args.is_a?(Array)
    obj.send(instance_method.to_s, *args)
  elsif args.present? && args.is_a?(Hash)
    obj.send(instance_method.to_s, **args.symbolize_keys!)
  else
    obj.send(instance_method.to_s)
  end
end