Class: GraphQL::Models::Instrumentation

Inherits:
Object
  • Object
show all
Defined in:
lib/graphql/models/instrumentation.rb

Instance Method Summary collapse

Constructor Details

#initialize(skip_nil_models = true) ⇒ Instrumentation

Returns a new instance of Instrumentation.

Parameters:

  • skip_nil_models (defaults to: true)

    If true, field resolvers (in proxy_to or backed_by_model blocks) will not be invoked if the model is nil.



4
5
6
# File 'lib/graphql/models/instrumentation.rb', line 4

def initialize(skip_nil_models = true)
  @skip_nil_models = skip_nil_models
end

Instance Method Details

#instrument(type, field) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/graphql/models/instrumentation.rb', line 8

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