lib/graphql/execution/directive_checks.rb



module GraphQL
  module Execution
    # Boolean checks for how an AST node's directives should
    # influence its execution
    module DirectiveChecks
      SKIP = "skip"
      INCLUDE = "include"

      module_function

      # This covers `@include(if:)` & `@skip(if:)`
      # @return [Boolean] Should this node be skipped altogether?
      def skip?(irep_node, query)
        irep_node.directives.each do |directive_node|
          if directive_node.name == SKIP || directive_node.name == INCLUDE
            directive_defn = directive_node.definitions.first
            args = query.arguments_for(directive_node, directive_defn)
            if !directive_defn.include?(args)
              return true
            end
          end
        end
        false
      end

      # @return [Boolean] Should this node be included in the query?
      def include?(irep_node, query)
        !skip?(irep_node, query)
      end
    end
  end
end