Sha256: f87cab01f21acb6ca7fe74f241bc4c49993349a0c287587059362e56e998179e

Contents?: true

Size: 1.75 KB

Versions: 125

Compression:

Stored size: 1.75 KB

Contents

# frozen_string_literal: true
module GraphQL
  module Relay
    class Mutation
      # Wrap a user-provided resolve function,
      # wrapping the returned value in a {Mutation::Result}.
      # Also, pass the `clientMutationId` to that result object.
      # @api private
      class Resolve
        def initialize(mutation, resolve)
          @mutation = mutation
          @resolve = resolve
          @wrap_result = mutation.is_a?(GraphQL::Relay::Mutation) && mutation.has_generated_return_type?
          @class_based = mutation.is_a?(Class)
        end

        def call(obj, args, ctx)
          mutation_result = begin
            @resolve.call(obj, args[:input], ctx)
          rescue GraphQL::ExecutionError => err
            err
          end

          ctx.schema.after_lazy(mutation_result) do |res|
            build_result(res, args, ctx)
          end
        end

        private

        def build_result(mutation_result, args, ctx)
          if mutation_result.is_a?(GraphQL::ExecutionError)
            ctx.add_error(mutation_result)
            mutation_result = nil
          end

          if mutation_result.nil?
            nil
          elsif @wrap_result
            if mutation_result && !mutation_result.is_a?(Hash)
              raise StandardError, "Expected `#{mutation_result}` to be a Hash."\
                " Return a hash when using `return_field` or specify a custom `return_type`."
            end

            @mutation.result_class.new(client_mutation_id: args[:input][:clientMutationId], result: mutation_result)
          elsif @class_based
            mutation_result[:client_mutation_id] = args[:input][:client_mutation_id]
            mutation_result
          else
            mutation_result
          end
        end
      end
    end
  end
end

Version data entries

125 entries across 125 versions & 2 rubygems

Version Path
graphql-1.11.12 lib/graphql/relay/mutation/resolve.rb
graphql-1.11.11 lib/graphql/relay/mutation/resolve.rb
graphql-1.12.25 lib/graphql/relay/mutation/resolve.rb
graphql-1.13.24 lib/graphql/relay/mutation/resolve.rb
graphql-1.13.23 lib/graphql/relay/mutation/resolve.rb
graphql-1.13.22 lib/graphql/relay/mutation/resolve.rb
graphql-1.13.21 lib/graphql/relay/mutation/resolve.rb
graphql-1.13.20 lib/graphql/relay/mutation/resolve.rb
graphql-1.13.19 lib/graphql/relay/mutation/resolve.rb
graphql-1.13.18 lib/graphql/relay/mutation/resolve.rb
graphql-1.13.17 lib/graphql/relay/mutation/resolve.rb
graphql-1.13.16 lib/graphql/relay/mutation/resolve.rb
graphql-1.13.15 lib/graphql/relay/mutation/resolve.rb
graphql-1.13.14 lib/graphql/relay/mutation/resolve.rb
graphql-1.13.13 lib/graphql/relay/mutation/resolve.rb
graphql_cody-1.13.0 lib/graphql/relay/mutation/resolve.rb
graphql-1.13.12 lib/graphql/relay/mutation/resolve.rb
graphql-1.13.11 lib/graphql/relay/mutation/resolve.rb
graphql-1.13.10 lib/graphql/relay/mutation/resolve.rb
graphql-1.13.9 lib/graphql/relay/mutation/resolve.rb