Sha256: 5753ce09d5592772a7a2f14235dc273aafa302ea34666cd8b2d2bd12a3cbdbcf

Contents?: true

Size: 833 Bytes

Versions: 7

Compression:

Stored size: 833 Bytes

Contents

# frozen_string_literal: true
class GraphQL::Models::Instrumentation
  # @param skip_nil_models If true, field resolvers (in proxy_to or backed_by_model blocks) will not be invoked if the model is nil.
  def initialize(skip_nil_models = true)
    @skip_nil_models = skip_nil_models
  end

  def instrument(type, field)
    field_info = GraphQL::Models.field_info(type, field.name)
    return field unless field_info

    old_resolver = field.resolve_proc

    new_resolver = -> (object, args, ctx) {
      base_model = field_info.object_to_base_model.call(object)
      GraphQL::Models.load_association(base_model, field_info.path, ctx).then do |model|
        next nil if model.nil? && @skip_nil_models
        old_resolver.call(model, args, ctx)
      end
    }

    field.redefine do
      resolve(new_resolver)
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
graphql-activerecord-0.12.6 lib/graphql/models/instrumentation.rb
graphql-activerecord-0.12.5 lib/graphql/models/instrumentation.rb
graphql-activerecord-0.12.4 lib/graphql/models/instrumentation.rb
graphql-activerecord-0.12.3 lib/graphql/models/instrumentation.rb
graphql-activerecord-0.12.2 lib/graphql/models/instrumentation.rb
graphql-activerecord-0.12.1 lib/graphql/models/instrumentation.rb
graphql-activerecord-0.12.0 lib/graphql/models/instrumentation.rb