graphql 1.7.14 → 1.8.0.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/lib/generators/graphql/function_generator.rb +1 -1
- data/lib/generators/graphql/loader_generator.rb +1 -1
- data/lib/generators/graphql/mutation_generator.rb +1 -6
- data/lib/generators/graphql/templates/function.erb +2 -2
- data/lib/generators/graphql/templates/loader.erb +2 -2
- data/lib/graphql.rb +2 -0
- data/lib/graphql/argument.rb +0 -1
- data/lib/graphql/backwards_compatibility.rb +2 -3
- data/lib/graphql/base_type.rb +18 -16
- data/lib/graphql/compatibility/query_parser_specification.rb +0 -117
- data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -14
- data/lib/graphql/define/assign_object_field.rb +5 -12
- data/lib/graphql/deprecated_dsl.rb +28 -0
- data/lib/graphql/directive.rb +0 -1
- data/lib/graphql/enum_type.rb +1 -3
- data/lib/graphql/execution.rb +0 -1
- data/lib/graphql/execution/multiplex.rb +29 -12
- data/lib/graphql/field.rb +5 -20
- data/lib/graphql/function.rb +12 -0
- data/lib/graphql/input_object_type.rb +1 -3
- data/lib/graphql/internal_representation/node.rb +14 -26
- data/lib/graphql/internal_representation/visit.rb +6 -3
- data/lib/graphql/introspection/arguments_field.rb +0 -1
- data/lib/graphql/introspection/enum_values_field.rb +0 -1
- data/lib/graphql/introspection/fields_field.rb +0 -1
- data/lib/graphql/introspection/input_fields_field.rb +0 -1
- data/lib/graphql/introspection/interfaces_field.rb +0 -1
- data/lib/graphql/introspection/of_type_field.rb +0 -1
- data/lib/graphql/introspection/possible_types_field.rb +0 -1
- data/lib/graphql/introspection/schema_field.rb +0 -1
- data/lib/graphql/introspection/type_by_name_field.rb +0 -1
- data/lib/graphql/introspection/typename_field.rb +0 -1
- data/lib/graphql/language.rb +0 -3
- data/lib/graphql/language/generation.rb +182 -3
- data/lib/graphql/language/lexer.rb +69 -144
- data/lib/graphql/language/lexer.rl +4 -15
- data/lib/graphql/language/nodes.rb +76 -136
- data/lib/graphql/language/parser.rb +621 -668
- data/lib/graphql/language/parser.y +11 -17
- data/lib/graphql/language/token.rb +3 -10
- data/lib/graphql/object_type.rb +6 -1
- data/lib/graphql/query.rb +13 -8
- data/lib/graphql/query/arguments.rb +33 -48
- data/lib/graphql/query/context.rb +1 -0
- data/lib/graphql/query/literal_input.rb +1 -4
- data/lib/graphql/relay/connection_resolve.rb +3 -0
- data/lib/graphql/relay/global_id_resolve.rb +5 -1
- data/lib/graphql/relay/relation_connection.rb +19 -14
- data/lib/graphql/schema.rb +219 -12
- data/lib/graphql/schema/argument.rb +33 -0
- data/lib/graphql/schema/build_from_definition.rb +18 -64
- data/lib/graphql/schema/enum.rb +76 -0
- data/lib/graphql/schema/field.rb +127 -0
- data/lib/graphql/schema/field/dynamic_resolve.rb +63 -0
- data/lib/graphql/schema/field/unwrapped_resolve.rb +20 -0
- data/lib/graphql/schema/input_object.rb +61 -0
- data/lib/graphql/schema/interface.rb +32 -0
- data/lib/graphql/schema/loader.rb +2 -2
- data/lib/graphql/schema/member.rb +97 -0
- data/lib/graphql/schema/member/build_type.rb +106 -0
- data/lib/graphql/schema/member/has_fields.rb +56 -0
- data/lib/graphql/schema/member/instrumentation.rb +113 -0
- data/lib/graphql/schema/member/list_type_proxy.rb +21 -0
- data/lib/graphql/schema/member/non_null_type_proxy.rb +21 -0
- data/lib/graphql/schema/object.rb +65 -0
- data/lib/graphql/schema/printer.rb +266 -33
- data/lib/graphql/schema/scalar.rb +25 -0
- data/lib/graphql/schema/traversal.rb +26 -17
- data/lib/graphql/schema/union.rb +48 -0
- data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +1 -5
- data/lib/graphql/static_validation/rules/fields_will_merge.rb +8 -15
- data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +1 -11
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +5 -7
- data/lib/graphql/tracing.rb +0 -1
- data/lib/graphql/tracing/platform_tracing.rb +7 -20
- data/lib/graphql/tracing/scout_tracing.rb +2 -2
- data/lib/graphql/unresolved_type_error.rb +2 -3
- data/lib/graphql/version.rb +1 -1
- data/readme.md +1 -1
- data/spec/dummy/app/channels/graphql_channel.rb +1 -22
- data/spec/dummy/log/development.log +0 -239
- data/spec/dummy/log/test.log +0 -204
- data/spec/dummy/test/system/action_cable_subscription_test.rb +0 -4
- data/spec/dummy/tmp/screenshots/failures_test_it_handles_subscriptions.png +0 -0
- data/spec/generators/graphql/function_generator_spec.rb +0 -26
- data/spec/generators/graphql/loader_generator_spec.rb +0 -24
- data/spec/graphql/analysis/max_query_complexity_spec.rb +3 -3
- data/spec/graphql/analysis/max_query_depth_spec.rb +3 -3
- data/spec/graphql/backtrace_spec.rb +0 -10
- data/spec/graphql/base_type_spec.rb +5 -19
- data/spec/graphql/boolean_type_spec.rb +3 -3
- data/spec/graphql/directive_spec.rb +1 -3
- data/spec/graphql/enum_type_spec.rb +5 -18
- data/spec/graphql/execution/execute_spec.rb +1 -1
- data/spec/graphql/execution/multiplex_spec.rb +2 -2
- data/spec/graphql/float_type_spec.rb +2 -2
- data/spec/graphql/id_type_spec.rb +1 -1
- data/spec/graphql/input_object_type_spec.rb +2 -15
- data/spec/graphql/int_type_spec.rb +2 -2
- data/spec/graphql/internal_representation/rewrite_spec.rb +2 -2
- data/spec/graphql/introspection/schema_type_spec.rb +0 -1
- data/spec/graphql/language/generation_spec.rb +186 -21
- data/spec/graphql/language/lexer_spec.rb +1 -21
- data/spec/graphql/language/nodes_spec.rb +12 -21
- data/spec/graphql/language/parser_spec.rb +1 -1
- data/spec/graphql/query/arguments_spec.rb +15 -37
- data/spec/graphql/query/serial_execution/value_resolution_spec.rb +2 -2
- data/spec/graphql/query/variables_spec.rb +1 -1
- data/spec/graphql/query_spec.rb +5 -31
- data/spec/graphql/rake_task_spec.rb +1 -3
- data/spec/graphql/relay/base_connection_spec.rb +1 -1
- data/spec/graphql/relay/connection_instrumentation_spec.rb +2 -2
- data/spec/graphql/relay/connection_resolve_spec.rb +1 -1
- data/spec/graphql/relay/connection_type_spec.rb +1 -1
- data/spec/graphql/relay/mutation_spec.rb +3 -3
- data/spec/graphql/relay/relation_connection_spec.rb +1 -65
- data/spec/graphql/schema/build_from_definition_spec.rb +4 -86
- data/spec/graphql/schema/enum_spec.rb +60 -0
- data/spec/graphql/schema/field_spec.rb +14 -0
- data/spec/graphql/schema/input_object_spec.rb +43 -0
- data/spec/graphql/schema/interface_spec.rb +98 -0
- data/spec/graphql/schema/object_spec.rb +119 -0
- data/spec/graphql/schema/printer_spec.rb +15 -92
- data/spec/graphql/schema/scalar_spec.rb +40 -0
- data/spec/graphql/schema/union_spec.rb +35 -0
- data/spec/graphql/schema/validation_spec.rb +1 -1
- data/spec/graphql/schema/warden_spec.rb +11 -11
- data/spec/graphql/schema_spec.rb +25 -23
- data/spec/graphql/static_validation/rules/fields_have_appropriate_selections_spec.rb +2 -10
- data/spec/graphql/static_validation/rules/fields_will_merge_spec.rb +2 -2
- data/spec/graphql/string_type_spec.rb +3 -3
- data/spec/graphql/subscriptions_spec.rb +1 -1
- data/spec/graphql/tracing/platform_tracing_spec.rb +1 -60
- data/spec/support/dummy/schema.rb +25 -39
- data/spec/support/jazz.rb +334 -0
- data/spec/support/lazy_helpers.rb +21 -23
- data/spec/support/star_wars/data.rb +7 -6
- data/spec/support/star_wars/schema.rb +109 -142
- metadata +39 -33
- data/lib/graphql/execution/instrumentation.rb +0 -82
- data/lib/graphql/language/block_string.rb +0 -47
- data/lib/graphql/language/document_from_schema_definition.rb +0 -277
- data/lib/graphql/language/printer.rb +0 -351
- data/lib/graphql/tracing/data_dog_tracing.rb +0 -49
- data/spec/graphql/execution/instrumentation_spec.rb +0 -165
- data/spec/graphql/language/block_string_spec.rb +0 -70
- data/spec/graphql/language/document_from_schema_definition_spec.rb +0 -770
- data/spec/graphql/language/printer_spec.rb +0 -203
| @@ -34,9 +34,6 @@ | |
| 34 34 | 
             
              RBRACKET =      ']';
         | 
| 35 35 | 
             
              COLON =         ':';
         | 
| 36 36 | 
             
              QUOTE =         '"';
         | 
| 37 | 
            -
              BLOCK_QUOTE =   '"""';
         | 
| 38 | 
            -
              ESCAPED_BLOCK_QUOTE = '\\"""';
         | 
| 39 | 
            -
              BLOCK_STRING_CHAR = (ESCAPED_BLOCK_QUOTE | ^'"""');
         | 
| 40 37 | 
             
              ESCAPED_QUOTE = '\\"';
         | 
| 41 38 | 
             
              STRING_CHAR =   (ESCAPED_QUOTE | ^'"');
         | 
| 42 39 | 
             
              VAR_SIGN =      '$';
         | 
| @@ -45,10 +42,9 @@ | |
| 45 42 | 
             
              EQUALS =        '=';
         | 
| 46 43 | 
             
              BANG =          '!';
         | 
| 47 44 | 
             
              PIPE =          '|';
         | 
| 48 | 
            -
              AMP =           '&';
         | 
| 49 45 |  | 
| 50 46 | 
             
              QUOTED_STRING = QUOTE STRING_CHAR* QUOTE;
         | 
| 51 | 
            -
             | 
| 47 | 
            +
             | 
| 52 48 | 
             
              # catch-all for anything else. must be at the bottom for precedence.
         | 
| 53 49 | 
             
              UNKNOWN_CHAR =         /./;
         | 
| 54 50 |  | 
| @@ -79,15 +75,13 @@ | |
| 79 75 | 
             
                RBRACKET      => { emit(:RBRACKET, ts, te, meta) };
         | 
| 80 76 | 
             
                LBRACKET      => { emit(:LBRACKET, ts, te, meta) };
         | 
| 81 77 | 
             
                COLON         => { emit(:COLON, ts, te, meta) };
         | 
| 82 | 
            -
                QUOTED_STRING => { emit_string(ts, te, meta | 
| 83 | 
            -
                BLOCK_STRING  => { emit_string(ts, te, meta, block: true) };
         | 
| 78 | 
            +
                QUOTED_STRING => { emit_string(ts + 1, te - 1, meta) };
         | 
| 84 79 | 
             
                VAR_SIGN      => { emit(:VAR_SIGN, ts, te, meta) };
         | 
| 85 80 | 
             
                DIR_SIGN      => { emit(:DIR_SIGN, ts, te, meta) };
         | 
| 86 81 | 
             
                ELLIPSIS      => { emit(:ELLIPSIS, ts, te, meta) };
         | 
| 87 82 | 
             
                EQUALS        => { emit(:EQUALS, ts, te, meta) };
         | 
| 88 83 | 
             
                BANG          => { emit(:BANG, ts, te, meta) };
         | 
| 89 84 | 
             
                PIPE          => { emit(:PIPE, ts, te, meta) };
         | 
| 90 | 
            -
                AMP           => { emit(:AMP, ts, te, meta) };
         | 
| 91 85 | 
             
                IDENTIFIER    => { emit(:IDENTIFIER, ts, te, meta) };
         | 
| 92 86 | 
             
                COMMENT       => { record_comment(ts, te, meta) };
         | 
| 93 87 |  | 
| @@ -194,13 +188,8 @@ module GraphQL | |
| 194 188 | 
             
                  PACK_DIRECTIVE = "c*"
         | 
| 195 189 | 
             
                  UTF_8_ENCODING = "UTF-8"
         | 
| 196 190 |  | 
| 197 | 
            -
                  def self.emit_string(ts, te, meta | 
| 198 | 
            -
                     | 
| 199 | 
            -
                    ts += quotes_length
         | 
| 200 | 
            -
                    value = meta[:data][ts...te - quotes_length].pack(PACK_DIRECTIVE).force_encoding(UTF_8_ENCODING)
         | 
| 201 | 
            -
                    if block
         | 
| 202 | 
            -
                      value = GraphQL::Language::BlockString.trim_whitespace(value)
         | 
| 203 | 
            -
                    end
         | 
| 191 | 
            +
                  def self.emit_string(ts, te, meta)
         | 
| 192 | 
            +
                    value = meta[:data][ts...te].pack(PACK_DIRECTIVE).force_encoding(UTF_8_ENCODING)
         | 
| 204 193 | 
             
                    if value !~ VALID_STRING
         | 
| 205 194 | 
             
                      meta[:tokens] << token = GraphQL::Language::Token.new(
         | 
| 206 195 | 
             
                        name: :BAD_UNICODE_ESCAPE,
         | 
| @@ -8,16 +8,7 @@ module GraphQL | |
| 8 8 | 
             
                  # - `children` returns all AST nodes attached to this one. Used for tree traversal.
         | 
| 9 9 | 
             
                  # - `scalars` returns all scalar (Ruby) values attached to this one. Used for comparing nodes.
         | 
| 10 10 | 
             
                  # - `to_query_string` turns an AST node into a GraphQL string
         | 
| 11 | 
            -
             | 
| 12 11 | 
             
                  class AbstractNode
         | 
| 13 | 
            -
                    module Scalars # :nodoc:
         | 
| 14 | 
            -
                      module Name
         | 
| 15 | 
            -
                        def scalars
         | 
| 16 | 
            -
                          super + [name]
         | 
| 17 | 
            -
                        end
         | 
| 18 | 
            -
                      end
         | 
| 19 | 
            -
                    end
         | 
| 20 | 
            -
             | 
| 21 12 | 
             
                    attr_accessor :line, :col, :filename
         | 
| 22 13 |  | 
| 23 14 | 
             
                    # Initialize a node by extracting its position,
         | 
| @@ -50,50 +41,79 @@ module GraphQL | |
| 50 41 |  | 
| 51 42 | 
             
                    # @return [Array<GraphQL::Language::Nodes::AbstractNode>] all nodes in the tree below this one
         | 
| 52 43 | 
             
                    def children
         | 
| 53 | 
            -
                       | 
| 44 | 
            +
                      self.class.child_attributes
         | 
| 45 | 
            +
                        .map { |attr_name| public_send(attr_name) }
         | 
| 46 | 
            +
                        .flatten
         | 
| 54 47 | 
             
                    end
         | 
| 55 48 |  | 
| 56 49 | 
             
                    # @return [Array<Integer, Float, String, Boolean, Array>] Scalar values attached to this node
         | 
| 57 50 | 
             
                    def scalars
         | 
| 58 | 
            -
                       | 
| 51 | 
            +
                      self.class.scalar_attributes
         | 
| 52 | 
            +
                        .map { |attr_name| public_send(attr_name) }
         | 
| 53 | 
            +
                    end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                    class << self
         | 
| 56 | 
            +
                      # A node subclass inherits `scalar_attributes`
         | 
| 57 | 
            +
                      # and `child_attributes` from its parent
         | 
| 58 | 
            +
                      def inherited(subclass)
         | 
| 59 | 
            +
                        subclass.scalar_attributes(*@scalar_attributes)
         | 
| 60 | 
            +
                        subclass.child_attributes(*@child_attributes)
         | 
| 61 | 
            +
                      end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                      # define `attr_names` as places where scalars may be attached to this node
         | 
| 64 | 
            +
                      def scalar_attributes(*attr_names)
         | 
| 65 | 
            +
                        @scalar_attributes ||= []
         | 
| 66 | 
            +
                        @scalar_attributes += attr_names
         | 
| 67 | 
            +
                      end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                      # define `attr_names` as places where child nodes may be attached to this node
         | 
| 70 | 
            +
                      def child_attributes(*attr_names)
         | 
| 71 | 
            +
                        @child_attributes ||= []
         | 
| 72 | 
            +
                        @child_attributes += attr_names
         | 
| 73 | 
            +
                      end
         | 
| 59 74 | 
             
                    end
         | 
| 60 75 |  | 
| 61 76 | 
             
                    def position
         | 
| 62 77 | 
             
                      [line, col]
         | 
| 63 78 | 
             
                    end
         | 
| 64 79 |  | 
| 65 | 
            -
                    def to_query_string | 
| 66 | 
            -
                       | 
| 80 | 
            +
                    def to_query_string
         | 
| 81 | 
            +
                      Generation.generate(self)
         | 
| 67 82 | 
             
                    end
         | 
| 68 83 | 
             
                  end
         | 
| 69 84 |  | 
| 70 85 | 
             
                  # Base class for non-null type names and list type names
         | 
| 71 86 | 
             
                  class WrapperType < AbstractNode
         | 
| 72 87 | 
             
                    attr_accessor :of_type
         | 
| 88 | 
            +
                    scalar_attributes :of_type
         | 
| 73 89 |  | 
| 74 90 | 
             
                    def initialize_node(of_type: nil)
         | 
| 75 91 | 
             
                      @of_type = of_type
         | 
| 76 92 | 
             
                    end
         | 
| 77 93 |  | 
| 78 | 
            -
                    def  | 
| 79 | 
            -
                      [ | 
| 94 | 
            +
                    def children
         | 
| 95 | 
            +
                      [].freeze
         | 
| 80 96 | 
             
                    end
         | 
| 81 97 | 
             
                  end
         | 
| 82 98 |  | 
| 83 99 | 
             
                  # Base class for nodes whose only value is a name (no child nodes or other scalars)
         | 
| 84 100 | 
             
                  class NameOnlyNode < AbstractNode
         | 
| 85 | 
            -
                    include Scalars::Name
         | 
| 86 | 
            -
             | 
| 87 101 | 
             
                    attr_accessor :name
         | 
| 102 | 
            +
                    scalar_attributes :name
         | 
| 88 103 |  | 
| 89 104 | 
             
                    def initialize_node(name: nil)
         | 
| 90 105 | 
             
                      @name = name
         | 
| 91 106 | 
             
                    end
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                    def children
         | 
| 109 | 
            +
                      [].freeze
         | 
| 110 | 
            +
                    end
         | 
| 92 111 | 
             
                  end
         | 
| 93 112 |  | 
| 94 113 | 
             
                  # A key-value pair for a field's inputs
         | 
| 95 114 | 
             
                  class Argument < AbstractNode
         | 
| 96 115 | 
             
                    attr_accessor :name, :value
         | 
| 116 | 
            +
                    scalar_attributes :name, :value
         | 
| 97 117 |  | 
| 98 118 | 
             
                    # @!attribute name
         | 
| 99 119 | 
             
                    #   @return [String] the key for this argument
         | 
| @@ -106,20 +126,15 @@ module GraphQL | |
| 106 126 | 
             
                      @value = value
         | 
| 107 127 | 
             
                    end
         | 
| 108 128 |  | 
| 109 | 
            -
                    def scalars
         | 
| 110 | 
            -
                      [name, value]
         | 
| 111 | 
            -
                    end
         | 
| 112 | 
            -
             | 
| 113 129 | 
             
                    def children
         | 
| 114 130 | 
             
                      [value].flatten.select { |v| v.is_a?(AbstractNode) }
         | 
| 115 131 | 
             
                    end
         | 
| 116 132 | 
             
                  end
         | 
| 117 133 |  | 
| 118 134 | 
             
                  class Directive < AbstractNode
         | 
| 119 | 
            -
                    include Scalars::Name
         | 
| 120 | 
            -
             | 
| 121 135 | 
             
                    attr_accessor :name, :arguments
         | 
| 122 | 
            -
                     | 
| 136 | 
            +
                    scalar_attributes :name
         | 
| 137 | 
            +
                    child_attributes :arguments
         | 
| 123 138 |  | 
| 124 139 | 
             
                    def initialize_node(name: nil, arguments: [])
         | 
| 125 140 | 
             
                      @name = name
         | 
| @@ -128,9 +143,9 @@ module GraphQL | |
| 128 143 | 
             
                  end
         | 
| 129 144 |  | 
| 130 145 | 
             
                  class DirectiveDefinition < AbstractNode
         | 
| 131 | 
            -
                    include Scalars::Name
         | 
| 132 | 
            -
             | 
| 133 146 | 
             
                    attr_accessor :name, :arguments, :locations, :description
         | 
| 147 | 
            +
                    scalar_attributes :name
         | 
| 148 | 
            +
                    child_attributes :arguments, :locations
         | 
| 134 149 |  | 
| 135 150 | 
             
                    def initialize_node(name: nil, arguments: [], locations: [], description: nil)
         | 
| 136 151 | 
             
                      @name = name
         | 
| @@ -138,10 +153,6 @@ module GraphQL | |
| 138 153 | 
             
                      @locations = locations
         | 
| 139 154 | 
             
                      @description = description
         | 
| 140 155 | 
             
                    end
         | 
| 141 | 
            -
             | 
| 142 | 
            -
                    def children
         | 
| 143 | 
            -
                      arguments + locations
         | 
| 144 | 
            -
                    end
         | 
| 145 156 | 
             
                  end
         | 
| 146 157 |  | 
| 147 158 | 
             
                  # This is the AST root for normal queries
         | 
| @@ -153,18 +164,9 @@ module GraphQL | |
| 153 164 | 
             
                  #   document.to_query_string
         | 
| 154 165 | 
             
                  #   # { ... }
         | 
| 155 166 | 
             
                  #
         | 
| 156 | 
            -
                  # @example Creating a custom string from a document
         | 
| 157 | 
            -
                  #  class VariableScrubber < GraphQL::Language::Printer
         | 
| 158 | 
            -
                  #    def print_argument(arg)
         | 
| 159 | 
            -
                  #      "#{arg.name}: <HIDDEN>"
         | 
| 160 | 
            -
                  #    end
         | 
| 161 | 
            -
                  #  end
         | 
| 162 | 
            -
                  #
         | 
| 163 | 
            -
                  #  document.to_query_string(printer: VariableSrubber.new)
         | 
| 164 | 
            -
                  #
         | 
| 165 167 | 
             
                  class Document < AbstractNode
         | 
| 166 168 | 
             
                    attr_accessor :definitions
         | 
| 167 | 
            -
                     | 
| 169 | 
            +
                    child_attributes :definitions
         | 
| 168 170 |  | 
| 169 171 | 
             
                    # @!attribute definitions
         | 
| 170 172 | 
             
                    #   @return [Array<OperationDefinition, FragmentDefinition>] top-level GraphQL units: operations or fragments
         | 
| @@ -186,6 +188,8 @@ module GraphQL | |
| 186 188 | 
             
                  # A single selection in a GraphQL query.
         | 
| 187 189 | 
             
                  class Field < AbstractNode
         | 
| 188 190 | 
             
                    attr_accessor :name, :alias, :arguments, :directives, :selections
         | 
| 191 | 
            +
                    scalar_attributes :name, :alias
         | 
| 192 | 
            +
                    child_attributes :arguments, :directives, :selections
         | 
| 189 193 |  | 
| 190 194 | 
             
                    # @!attribute selections
         | 
| 191 195 | 
             
                    #   @return [Array<Nodes::Field>] Selections on this object (or empty array if this is a scalar field)
         | 
| @@ -198,19 +202,13 @@ module GraphQL | |
| 198 202 | 
             
                      @directives = directives
         | 
| 199 203 | 
             
                      @selections = selections
         | 
| 200 204 | 
             
                    end
         | 
| 201 | 
            -
             | 
| 202 | 
            -
                    def scalars
         | 
| 203 | 
            -
                      [name, self.alias]
         | 
| 204 | 
            -
                    end
         | 
| 205 | 
            -
             | 
| 206 | 
            -
                    def children
         | 
| 207 | 
            -
                      arguments + directives + selections
         | 
| 208 | 
            -
                    end
         | 
| 209 205 | 
             
                  end
         | 
| 210 206 |  | 
| 211 207 | 
             
                  # A reusable fragment, defined at document-level.
         | 
| 212 208 | 
             
                  class FragmentDefinition < AbstractNode
         | 
| 213 209 | 
             
                    attr_accessor :name, :type, :directives, :selections
         | 
| 210 | 
            +
                    scalar_attributes :name, :type
         | 
| 211 | 
            +
                    child_attributes :directives, :selections
         | 
| 214 212 |  | 
| 215 213 | 
             
                    # @!attribute name
         | 
| 216 214 | 
             
                    #   @return [String] the identifier for this fragment, which may be applied with `...#{name}`
         | 
| @@ -223,22 +221,13 @@ module GraphQL | |
| 223 221 | 
             
                      @directives = directives
         | 
| 224 222 | 
             
                      @selections = selections
         | 
| 225 223 | 
             
                    end
         | 
| 226 | 
            -
             | 
| 227 | 
            -
                    def children
         | 
| 228 | 
            -
                      directives + selections
         | 
| 229 | 
            -
                    end
         | 
| 230 | 
            -
             | 
| 231 | 
            -
                    def scalars
         | 
| 232 | 
            -
                      [name, type]
         | 
| 233 | 
            -
                    end
         | 
| 234 224 | 
             
                  end
         | 
| 235 225 |  | 
| 236 226 | 
             
                  # Application of a named fragment in a selection
         | 
| 237 227 | 
             
                  class FragmentSpread < AbstractNode
         | 
| 238 | 
            -
                    include Scalars::Name
         | 
| 239 | 
            -
             | 
| 240 228 | 
             
                    attr_accessor :name, :directives
         | 
| 241 | 
            -
                     | 
| 229 | 
            +
                    scalar_attributes :name
         | 
| 230 | 
            +
                    child_attributes :directives
         | 
| 242 231 |  | 
| 243 232 | 
             
                    # @!attribute name
         | 
| 244 233 | 
             
                    #   @return [String] The identifier of the fragment to apply, corresponds with {FragmentDefinition#name}
         | 
| @@ -252,6 +241,8 @@ module GraphQL | |
| 252 241 | 
             
                  # An unnamed fragment, defined directly in the query with `... {  }`
         | 
| 253 242 | 
             
                  class InlineFragment < AbstractNode
         | 
| 254 243 | 
             
                    attr_accessor :type, :directives, :selections
         | 
| 244 | 
            +
                    scalar_attributes :type
         | 
| 245 | 
            +
                    child_attributes :directives, :selections
         | 
| 255 246 |  | 
| 256 247 | 
             
                    # @!attribute type
         | 
| 257 248 | 
             
                    #   @return [String, nil] Name of the type this fragment applies to, or `nil` if this fragment applies to any type
         | 
| @@ -261,20 +252,12 @@ module GraphQL | |
| 261 252 | 
             
                      @directives = directives
         | 
| 262 253 | 
             
                      @selections = selections
         | 
| 263 254 | 
             
                    end
         | 
| 264 | 
            -
             | 
| 265 | 
            -
                    def children
         | 
| 266 | 
            -
                      directives + selections
         | 
| 267 | 
            -
                    end
         | 
| 268 | 
            -
             | 
| 269 | 
            -
                    def scalars
         | 
| 270 | 
            -
                      [type]
         | 
| 271 | 
            -
                    end
         | 
| 272 255 | 
             
                  end
         | 
| 273 256 |  | 
| 274 257 | 
             
                  # A collection of key-value inputs which may be a field argument
         | 
| 275 258 | 
             
                  class InputObject < AbstractNode
         | 
| 276 259 | 
             
                    attr_accessor :arguments
         | 
| 277 | 
            -
                     | 
| 260 | 
            +
                    child_attributes :arguments
         | 
| 278 261 |  | 
| 279 262 | 
             
                    # @!attribute arguments
         | 
| 280 263 | 
             
                    #   @return [Array<Nodes::Argument>] A list of key-value pairs inside this input object
         | 
| @@ -295,16 +278,13 @@ module GraphQL | |
| 295 278 | 
             
                    private
         | 
| 296 279 |  | 
| 297 280 | 
             
                    def serialize_value_for_hash(value)
         | 
| 298 | 
            -
                       | 
| 299 | 
            -
                      when InputObject
         | 
| 281 | 
            +
                      if value.is_a? InputObject
         | 
| 300 282 | 
             
                        value.to_h
         | 
| 301 | 
            -
                       | 
| 283 | 
            +
                      elsif value.is_a? Array
         | 
| 302 284 | 
             
                        value.map do |v|
         | 
| 303 285 | 
             
                          serialize_value_for_hash v
         | 
| 304 286 | 
             
                        end
         | 
| 305 | 
            -
                       | 
| 306 | 
            -
                        value.name
         | 
| 307 | 
            -
                      when NullValue
         | 
| 287 | 
            +
                      elsif value.is_a? NullValue
         | 
| 308 288 | 
             
                        nil
         | 
| 309 289 | 
             
                      else
         | 
| 310 290 | 
             
                        value
         | 
| @@ -324,6 +304,8 @@ module GraphQL | |
| 324 304 | 
             
                  # May be explicitly typed (eg `mutation { ... }`) or implicitly a query (eg `{ ... }`).
         | 
| 325 305 | 
             
                  class OperationDefinition < AbstractNode
         | 
| 326 306 | 
             
                    attr_accessor :operation_type, :name, :variables, :directives, :selections
         | 
| 307 | 
            +
                    scalar_attributes :operation_type, :name
         | 
| 308 | 
            +
                    child_attributes :variables, :directives, :selections
         | 
| 327 309 |  | 
| 328 310 | 
             
                    # @!attribute variables
         | 
| 329 311 | 
             
                    #   @return [Array<VariableDefinition>] Variable definitions for this operation
         | 
| @@ -344,14 +326,6 @@ module GraphQL | |
| 344 326 | 
             
                      @directives = directives
         | 
| 345 327 | 
             
                      @selections = selections
         | 
| 346 328 | 
             
                    end
         | 
| 347 | 
            -
             | 
| 348 | 
            -
                    def children
         | 
| 349 | 
            -
                      variables + directives + selections
         | 
| 350 | 
            -
                    end
         | 
| 351 | 
            -
             | 
| 352 | 
            -
                    def scalars
         | 
| 353 | 
            -
                      [operation_type, name]
         | 
| 354 | 
            -
                    end
         | 
| 355 329 | 
             
                  end
         | 
| 356 330 |  | 
| 357 331 | 
             
                  # A type name, used for variable definitions
         | 
| @@ -360,6 +334,7 @@ module GraphQL | |
| 360 334 | 
             
                  # An operation-level query variable
         | 
| 361 335 | 
             
                  class VariableDefinition < AbstractNode
         | 
| 362 336 | 
             
                    attr_accessor :name, :type, :default_value
         | 
| 337 | 
            +
                    scalar_attributes :name, :type, :default_value
         | 
| 363 338 |  | 
| 364 339 | 
             
                    # @!attribute default_value
         | 
| 365 340 | 
             
                    #   @return [String, Integer, Float, Boolean, Array, NullValue] A Ruby value to use if no other value is provided
         | 
| @@ -375,10 +350,6 @@ module GraphQL | |
| 375 350 | 
             
                      @type = type
         | 
| 376 351 | 
             
                      @default_value = default_value
         | 
| 377 352 | 
             
                    end
         | 
| 378 | 
            -
             | 
| 379 | 
            -
                    def scalars
         | 
| 380 | 
            -
                      [name, type, default_value]
         | 
| 381 | 
            -
                    end
         | 
| 382 353 | 
             
                  end
         | 
| 383 354 |  | 
| 384 355 | 
             
                  # Usage of a variable in a query. Name does _not_ include `$`.
         | 
| @@ -386,23 +357,19 @@ module GraphQL | |
| 386 357 |  | 
| 387 358 | 
             
                  class SchemaDefinition < AbstractNode
         | 
| 388 359 | 
             
                    attr_accessor :query, :mutation, :subscription
         | 
| 360 | 
            +
                    scalar_attributes :query, :mutation, :subscription
         | 
| 389 361 |  | 
| 390 362 | 
             
                    def initialize_node(query: nil, mutation: nil, subscription: nil)
         | 
| 391 363 | 
             
                      @query = query
         | 
| 392 364 | 
             
                      @mutation = mutation
         | 
| 393 365 | 
             
                      @subscription = subscription
         | 
| 394 366 | 
             
                    end
         | 
| 395 | 
            -
             | 
| 396 | 
            -
                    def scalars
         | 
| 397 | 
            -
                      [query, mutation, subscription]
         | 
| 398 | 
            -
                    end
         | 
| 399 367 | 
             
                  end
         | 
| 400 368 |  | 
| 401 369 | 
             
                  class ScalarTypeDefinition < AbstractNode
         | 
| 402 | 
            -
                    include Scalars::Name
         | 
| 403 | 
            -
             | 
| 404 370 | 
             
                    attr_accessor :name, :directives, :description
         | 
| 405 | 
            -
                     | 
| 371 | 
            +
                    scalar_attributes :name
         | 
| 372 | 
            +
                    child_attributes :directives
         | 
| 406 373 |  | 
| 407 374 | 
             
                    def initialize_node(name:, directives: [], description: nil)
         | 
| 408 375 | 
             
                      @name = name
         | 
| @@ -412,9 +379,9 @@ module GraphQL | |
| 412 379 | 
             
                  end
         | 
| 413 380 |  | 
| 414 381 | 
             
                  class ObjectTypeDefinition < AbstractNode
         | 
| 415 | 
            -
                    include Scalars::Name
         | 
| 416 | 
            -
             | 
| 417 382 | 
             
                    attr_accessor :name, :interfaces, :fields, :directives, :description
         | 
| 383 | 
            +
                    scalar_attributes :name
         | 
| 384 | 
            +
                    child_attributes :interfaces, :fields, :directives
         | 
| 418 385 |  | 
| 419 386 | 
             
                    def initialize_node(name:, interfaces:, fields:, directives: [], description: nil)
         | 
| 420 387 | 
             
                      @name = name
         | 
| @@ -423,15 +390,12 @@ module GraphQL | |
| 423 390 | 
             
                      @fields = fields
         | 
| 424 391 | 
             
                      @description = description
         | 
| 425 392 | 
             
                    end
         | 
| 426 | 
            -
             | 
| 427 | 
            -
                    def children
         | 
| 428 | 
            -
                      interfaces + fields + directives
         | 
| 429 | 
            -
                    end
         | 
| 430 393 | 
             
                  end
         | 
| 431 394 |  | 
| 432 395 | 
             
                  class InputValueDefinition < AbstractNode
         | 
| 433 396 | 
             
                    attr_accessor :name, :type, :default_value, :directives,:description
         | 
| 434 | 
            -
                     | 
| 397 | 
            +
                    scalar_attributes :name, :type, :default_value
         | 
| 398 | 
            +
                    child_attributes :directives
         | 
| 435 399 |  | 
| 436 400 | 
             
                    def initialize_node(name:, type:, default_value: nil, directives: [], description: nil)
         | 
| 437 401 | 
             
                      @name = name
         | 
| @@ -440,14 +404,12 @@ module GraphQL | |
| 440 404 | 
             
                      @directives = directives
         | 
| 441 405 | 
             
                      @description = description
         | 
| 442 406 | 
             
                    end
         | 
| 443 | 
            -
             | 
| 444 | 
            -
                    def scalars
         | 
| 445 | 
            -
                      [name, type, default_value]
         | 
| 446 | 
            -
                    end
         | 
| 447 407 | 
             
                  end
         | 
| 448 408 |  | 
| 449 409 | 
             
                  class FieldDefinition < AbstractNode
         | 
| 450 410 | 
             
                    attr_accessor :name, :arguments, :type, :directives, :description
         | 
| 411 | 
            +
                    scalar_attributes :name, :type
         | 
| 412 | 
            +
                    child_attributes :arguments, :directives
         | 
| 451 413 |  | 
| 452 414 | 
             
                    def initialize_node(name:, arguments:, type:, directives: [], description: nil)
         | 
| 453 415 | 
             
                      @name = name
         | 
| @@ -456,20 +418,12 @@ module GraphQL | |
| 456 418 | 
             
                      @directives = directives
         | 
| 457 419 | 
             
                      @description = description
         | 
| 458 420 | 
             
                    end
         | 
| 459 | 
            -
             | 
| 460 | 
            -
                    def children
         | 
| 461 | 
            -
                      arguments + directives
         | 
| 462 | 
            -
                    end
         | 
| 463 | 
            -
             | 
| 464 | 
            -
                    def scalars
         | 
| 465 | 
            -
                      [name, type]
         | 
| 466 | 
            -
                    end
         | 
| 467 421 | 
             
                  end
         | 
| 468 422 |  | 
| 469 423 | 
             
                  class InterfaceTypeDefinition < AbstractNode
         | 
| 470 | 
            -
                    include Scalars::Name
         | 
| 471 | 
            -
             | 
| 472 424 | 
             
                    attr_accessor :name, :fields, :directives, :description
         | 
| 425 | 
            +
                    scalar_attributes :name
         | 
| 426 | 
            +
                    child_attributes :fields, :directives
         | 
| 473 427 |  | 
| 474 428 | 
             
                    def initialize_node(name:, fields:, directives: [], description: nil)
         | 
| 475 429 | 
             
                      @name = name
         | 
| @@ -477,16 +431,12 @@ module GraphQL | |
| 477 431 | 
             
                      @directives = directives
         | 
| 478 432 | 
             
                      @description = description
         | 
| 479 433 | 
             
                    end
         | 
| 480 | 
            -
             | 
| 481 | 
            -
                    def children
         | 
| 482 | 
            -
                      fields + directives
         | 
| 483 | 
            -
                    end
         | 
| 484 434 | 
             
                  end
         | 
| 485 435 |  | 
| 486 436 | 
             
                  class UnionTypeDefinition < AbstractNode
         | 
| 487 | 
            -
                    include Scalars::Name
         | 
| 488 | 
            -
             | 
| 489 437 | 
             
                    attr_accessor :name, :types, :directives, :description
         | 
| 438 | 
            +
                    scalar_attributes :name
         | 
| 439 | 
            +
                    child_attributes :types, :directives
         | 
| 490 440 |  | 
| 491 441 | 
             
                    def initialize_node(name:, types:, directives: [], description: nil)
         | 
| 492 442 | 
             
                      @name = name
         | 
| @@ -494,16 +444,12 @@ module GraphQL | |
| 494 444 | 
             
                      @directives = directives
         | 
| 495 445 | 
             
                      @description = description
         | 
| 496 446 | 
             
                    end
         | 
| 497 | 
            -
             | 
| 498 | 
            -
                    def children
         | 
| 499 | 
            -
                      types + directives
         | 
| 500 | 
            -
                    end
         | 
| 501 447 | 
             
                  end
         | 
| 502 448 |  | 
| 503 449 | 
             
                  class EnumTypeDefinition < AbstractNode
         | 
| 504 | 
            -
                    include Scalars::Name
         | 
| 505 | 
            -
             | 
| 506 450 | 
             
                    attr_accessor :name, :values, :directives, :description
         | 
| 451 | 
            +
                    scalar_attributes :name
         | 
| 452 | 
            +
                    child_attributes :values, :directives
         | 
| 507 453 |  | 
| 508 454 | 
             
                    def initialize_node(name:, values:, directives: [], description: nil)
         | 
| 509 455 | 
             
                      @name = name
         | 
| @@ -511,17 +457,12 @@ module GraphQL | |
| 511 457 | 
             
                      @directives = directives
         | 
| 512 458 | 
             
                      @description = description
         | 
| 513 459 | 
             
                    end
         | 
| 514 | 
            -
             | 
| 515 | 
            -
                    def children
         | 
| 516 | 
            -
                      values + directives
         | 
| 517 | 
            -
                    end
         | 
| 518 460 | 
             
                  end
         | 
| 519 461 |  | 
| 520 462 | 
             
                  class EnumValueDefinition < AbstractNode
         | 
| 521 | 
            -
                    include Scalars::Name
         | 
| 522 | 
            -
             | 
| 523 463 | 
             
                    attr_accessor :name, :directives, :description
         | 
| 524 | 
            -
                     | 
| 464 | 
            +
                    scalar_attributes :name
         | 
| 465 | 
            +
                    child_attributes :directives
         | 
| 525 466 |  | 
| 526 467 | 
             
                    def initialize_node(name:, directives: [], description: nil)
         | 
| 527 468 | 
             
                      @name = name
         | 
| @@ -531,10 +472,9 @@ module GraphQL | |
| 531 472 | 
             
                  end
         | 
| 532 473 |  | 
| 533 474 | 
             
                  class InputObjectTypeDefinition < AbstractNode
         | 
| 534 | 
            -
                    include Scalars::Name
         | 
| 535 | 
            -
             | 
| 536 475 | 
             
                    attr_accessor :name, :fields, :directives, :description
         | 
| 537 | 
            -
                     | 
| 476 | 
            +
                    scalar_attributes :name
         | 
| 477 | 
            +
                    child_attributes :fields
         | 
| 538 478 |  | 
| 539 479 | 
             
                    def initialize_node(name:, fields:, directives: [], description: nil)
         | 
| 540 480 | 
             
                      @name = name
         |