module GraphQLIncludable

Public Class Methods

includes(ctx, starting_at: nil) click to toggle source
# File lib/graphql_includable.rb, line 9
def self.includes(ctx, starting_at: nil)
  ActiveSupport::Notifications.instrument('graphql_includable.includes') do |instrument|
    instrument[:operation_name] = ctx.query&.operation_name
    instrument[:field_name] = ctx.irep_node.name
    instrument[:starting_at] = starting_at

    includes = Includes.new(nil)
    resolver = Resolver.new(ctx)

    node = ctx.irep_node
    node = node_for_path(node, starting_at) if starting_at.present?

    generated_includes = if node.present?
                           resolver.includes_for_node(node, includes)
                           includes.active_record_includes
                         end

    instrument[:includes] = generated_includes
    generated_includes
  end
end
node_for_path(node, path_into_query) click to toggle source
# File lib/graphql_includable.rb, line 31
def self.node_for_path(node, path_into_query)
  children = node.scoped_children[node.return_type.unwrap]&.with_indifferent_access || {}
  children.dig(path_into_query)
end