Sha256: 25e6cb49ca988b556095b345270ff97d5c3dfbcec4c30a53155067f93df95ab4

Contents?: true

Size: 1.95 KB

Versions: 9

Compression:

Stored size: 1.95 KB

Contents

# frozen_string_literal: true
module GraphQL
  module StaticValidation
    module ArgumentsAreDefined
      def on_argument(node, parent)
        parent_defn = case parent
        when GraphQL::Language::Nodes::InputObject
          arg_defn = context.argument_definition
          if arg_defn.nil?
            nil
          else
            arg_ret_type = arg_defn.type.unwrap
            if arg_ret_type.kind.input_object?
              arg_ret_type
            else
              nil
            end
          end
        when GraphQL::Language::Nodes::Directive
          context.schema.directives[parent.name]
        when GraphQL::Language::Nodes::Field
          context.field_definition
        else
          raise "Unexpected argument parent: #{parent.class} (##{parent})"
        end

        if parent_defn && context.warden.arguments(parent_defn).any? { |arg| arg.name == node.name }
          super
        elsif parent_defn
          kind_of_node = node_type(parent)
          error_arg_name = parent_name(parent, parent_defn)
          add_error(GraphQL::StaticValidation::ArgumentsAreDefinedError.new(
            "#{kind_of_node} '#{error_arg_name}' doesn't accept argument '#{node.name}'",
            nodes: node,
            name: error_arg_name,
            type: kind_of_node,
            argument: node.name
          ))
        else
          # Some other weird error
          super
        end
      end

      private

      def parent_name(parent, type_defn)
        case parent
        when GraphQL::Language::Nodes::Field
          parent.alias || parent.name
        when GraphQL::Language::Nodes::InputObject
          type_defn.graphql_name
        when GraphQL::Language::Nodes::Argument, GraphQL::Language::Nodes::Directive
          parent.name
        else
          raise "Invariant: Unexpected parent #{parent.inspect} (#{parent.class})"
        end
      end

      def node_type(parent)
        parent.class.name.split("::").last
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
graphql-1.10.4 lib/graphql/static_validation/rules/arguments_are_defined.rb
graphql-1.10.3 lib/graphql/static_validation/rules/arguments_are_defined.rb
graphql-1.10.2 lib/graphql/static_validation/rules/arguments_are_defined.rb
graphql-1.10.1 lib/graphql/static_validation/rules/arguments_are_defined.rb
graphql-1.10.0 lib/graphql/static_validation/rules/arguments_are_defined.rb
graphql-1.10.0.pre4 lib/graphql/static_validation/rules/arguments_are_defined.rb
graphql-1.10.0.pre3 lib/graphql/static_validation/rules/arguments_are_defined.rb
graphql-1.10.0.pre2 lib/graphql/static_validation/rules/arguments_are_defined.rb
graphql-1.10.0.pre1 lib/graphql/static_validation/rules/arguments_are_defined.rb