module GraphQL::Language::DefinitionSlice

Public Instance Methods

slice(document, name) click to toggle source
# File lib/graphql/language/definition_slice.rb, line 6
def slice(document, name)
  definitions = {}
  document.definitions.each { |d| definitions[d.name] = d }
  names = find_definition_dependencies(definitions, name)
  definitions = document.definitions.select { |d| names.include?(d.name) }
  Nodes::Document.new(definitions: definitions)
end

Private Instance Methods

find_definition_dependencies(definitions, name) click to toggle source
# File lib/graphql/language/definition_slice.rb, line 16
def find_definition_dependencies(definitions, name)
  names = Set.new([name])
  visitor = Visitor.new(definitions[name])
  visitor[Nodes::FragmentSpread] << ->(node, parent) {
    if fragment = definitions[node.name]
      names.merge(find_definition_dependencies(definitions, fragment.name))
    end
  }
  visitor.visit
  names
end