class GraphQL::Analysis::FieldUsage
A query reducer for tracking both field usage and deprecated field usage.
@example Logging field usage and deprecated field usage
Schema.query_analyzers << GraphQL::Analysis::FieldUsage.new { |query, used_fields, used_deprecated_fields| puts "Used GraphQL fields: #{used_fields.join(', ')}" puts "Used deprecated GraphQL fields: #{used_deprecated_fields.join(', ')}" } Schema.execute(query_str) # Used GraphQL fields: Cheese.id, Cheese.fatContent, Query.cheese # Used deprecated GraphQL fields: Cheese.fatContent
Public Class Methods
new(&block)
click to toggle source
# File lib/graphql/analysis/field_usage.rb, line 15 def initialize(&block) @field_usage_handler = block end
Public Instance Methods
call(memo, visit_type, irep_node)
click to toggle source
# File lib/graphql/analysis/field_usage.rb, line 27 def call(memo, visit_type, irep_node) if irep_node.ast_node.is_a?(GraphQL::Language::Nodes::Field) && visit_type == :leave field = "#{irep_node.owner_type.name}.#{irep_node.definition.name}" memo[:used_fields] << field if irep_node.definition.deprecation_reason memo[:used_deprecated_fields] << field end end memo end
final_value(memo)
click to toggle source
# File lib/graphql/analysis/field_usage.rb, line 39 def final_value(memo) @field_usage_handler.call(memo[:query], memo[:used_fields].to_a, memo[:used_deprecated_fields].to_a) end
initial_value(query)
click to toggle source
# File lib/graphql/analysis/field_usage.rb, line 19 def initial_value(query) { query: query, used_fields: Set.new, used_deprecated_fields: Set.new } end