Skip to content

Commit 5573de9

Browse files
committed
Add rudimentary default resolver tracker.
1 parent db11d0c commit 5573de9

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

lib/graphql/schema/field.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# frozen_string_literal: true
22
require "graphql/schema/field/connection_extension"
33
require "graphql/schema/field/scope_extension"
4+
require "graphql/schema/field/default_resolver_tracker"
45

56
module GraphQL
67
class Schema
@@ -737,7 +738,10 @@ def resolve(object, args, query_ctx)
737738

738739
inner_object = obj.object
739740

741+
tracker = query_ctx[:_default_resolver_tracker]
742+
740743
if !NOT_CONFIGURED.equal?(@hash_key)
744+
tracker&.track(self, :hash_key)
741745
hash_value = if inner_object.is_a?(Hash)
742746
inner_object.key?(@hash_key) ? inner_object[@hash_key] : inner_object[@hash_key_str]
743747
elsif inner_object.respond_to?(:[])
@@ -751,6 +755,7 @@ def resolve(object, args, query_ctx)
751755
hash_value || (@fallback_value != NOT_CONFIGURED ? @fallback_value : nil)
752756
end
753757
elsif obj.respond_to?(resolver_method)
758+
tracker&.track(self, :resolver_method)
754759
method_to_call = resolver_method
755760
method_receiver = obj
756761
# Call the method with kwargs, if there are any
@@ -761,17 +766,22 @@ def resolve(object, args, query_ctx)
761766
end
762767
elsif inner_object.is_a?(Hash)
763768
if @dig_keys
769+
tracker&.track(self, :hash_dig_keys)
764770
inner_object.dig(*@dig_keys)
765771
elsif inner_object.key?(@method_sym)
772+
tracker&.track(self, :hash_method_sym)
766773
inner_object[@method_sym]
767774
elsif inner_object.key?(@method_str) || !inner_object.default_proc.nil?
775+
tracker&.track(self, :hash_method_str)
768776
inner_object[@method_str]
769777
elsif @fallback_value != NOT_CONFIGURED
778+
tracker&.track(self, :hash_fallback)
770779
@fallback_value
771780
else
772781
nil
773782
end
774783
elsif inner_object.respond_to?(@method_sym)
784+
tracker&.track(self, :send_method_sym)
775785
method_to_call = @method_sym
776786
method_receiver = obj.object
777787
if !ruby_kwargs.empty?
@@ -780,6 +790,7 @@ def resolve(object, args, query_ctx)
780790
inner_object.public_send(@method_sym)
781791
end
782792
elsif @fallback_value != NOT_CONFIGURED
793+
tracker&.track(self, :fallback)
783794
@fallback_value
784795
else
785796
raise <<-ERR
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# frozen_string_literal: true
2+
3+
module GraphQL
4+
class Schema
5+
class Field
6+
class DefaultResolverTracker
7+
def initialize
8+
@counts_by_field = Hash.new do |h, k|
9+
h[k] = Hash.new do |h2, k2|
10+
h2[k2] = 0
11+
end
12+
end
13+
end
14+
15+
def track(field, strategy)
16+
@counts_by_field[field.path][strategy] += 1
17+
end
18+
end
19+
end
20+
end
21+
end

0 commit comments

Comments
 (0)