module HQ::GraphQL::Resource::AutoMutation
Public Instance Methods
build_copy()
click to toggle source
# File lib/hq/graphql/resource/auto_mutation.rb, line 71 def build_copy scoped_self = self build_mutation(action: :copy, require_primary_key: true, nil_klass: true) do define_method(:resolve) do |**args| resource = scoped_self.find_record(args, context) if resource copy = resource.copy if copy.save { resource: copy, errors: {}, } else { resource: copy, errors: errors_from_resource(copy) } end else { resource: nil, errors: { resource: "Unable to find #{self.class.graphql_name}" } } end end end end
build_create()
click to toggle source
# File lib/hq/graphql/resource/auto_mutation.rb, line 11 def build_create scoped_self = self build_mutation(action: :create) do define_method(:resolve) do |**args| resource = scoped_self.new_record(context) resource.assign_attributes(args[:attributes].format_nested_attributes) if resource.save { resource: resource, errors: {}, } else { resource: nil, errors: errors_from_resource(resource) } end end lazy_load do argument :attributes, ::HQ::GraphQL::Inputs[scoped_self.model_name], required: true end end end
build_destroy()
click to toggle source
# File lib/hq/graphql/resource/auto_mutation.rb, line 101 def build_destroy scoped_self = self build_mutation(action: :destroy, require_primary_key: true) do define_method(:resolve) do |**attrs| resource = scoped_self.find_record(attrs, context) if resource if resource.destroy { resource: resource, errors: {}, } else { resource: nil, errors: errors_from_resource(resource) } end else { resource: nil, errors: { resource: "Unable to find #{self.class.graphql_name}" } } end end end end
build_mutation(action:, require_primary_key: false, nil_klass: false, &block)
click to toggle source
Calls superclass method
# File lib/hq/graphql/resource/auto_mutation.rb, line 130 def build_mutation(action:, require_primary_key: false, nil_klass: false, &block) gql_name = "#{graphql_name}#{action.to_s.titleize}" scoped_model_name = model_name klass = Class.new(::GraphQL::Schema::Mutation) do graphql_name gql_name define_method(:ready?) do |**args| super(**args) && ::HQ::GraphQL.authorized?(action, scoped_model_name, context) end lazy_load do field :errors, ::GraphQL::Types::JSON, null: false field :resource, ::HQ::GraphQL::Types[scoped_model_name, nil_klass], null: true end instance_eval(&block) if require_primary_key lazy_load do klass = scoped_model_name.constantize primary_key = klass.primary_key argument primary_key, ::GraphQL::Types::ID, required: true end end def errors_from_resource(resource) resource.errors.to_h.deep_transform_keys { |k| k.to_s.camelize(:lower) } end end const_set(gql_name, klass) end
build_update()
click to toggle source
# File lib/hq/graphql/resource/auto_mutation.rb, line 37 def build_update scoped_self = self build_mutation(action: :update, require_primary_key: true) do define_method(:resolve) do |**args| resource = scoped_self.find_record(args, context) if resource resource.assign_attributes(args[:attributes].format_nested_attributes) if resource.save { resource: resource, errors: {}, } else { resource: nil, errors: errors_from_resource(resource) } end else { resource: nil, errors: { resource: "Unable to find #{self.class.graphql_name}" } } end end lazy_load do argument :attributes, ::HQ::GraphQL::Inputs[scoped_self.model_name], required: true end end end
errors_from_resource(resource)
click to toggle source
# File lib/hq/graphql/resource/auto_mutation.rb, line 156 def errors_from_resource(resource) resource.errors.to_h.deep_transform_keys { |k| k.to_s.camelize(:lower) } end