lib/graphql/language/nodes.rb in graphql-0.9.5 vs lib/graphql/language/nodes.rb in graphql-0.10.0
- old
+ new
@@ -1,89 +1,93 @@
-module GraphQL::Language::Nodes
- # AbstractNode creates classes who:
- # - require their keyword arguments, throw ArgumentError if they don't match
- # - expose accessors for keyword arguments
- class AbstractNode
- attr_accessor :line, :col
+module GraphQL
+ module Language
+ module Nodes
+ # AbstractNode creates classes who:
+ # - require their keyword arguments, throw ArgumentError if they don't match
+ # - expose accessors for keyword arguments
+ class AbstractNode
+ attr_accessor :line, :col
- # @param options [Hash] Must contain all attributes defined by {required_attrs}, may also include `position_source`
- def initialize(options)
- required_keys = self.class.required_attrs
- allowed_keys = required_keys + [:line, :col]
- position_source = options.delete(:position_source)
- if !position_source.nil?
- options[:line], options[:col] = position_source.line_and_column
- end
+ # @param options [Hash] Must contain all attributes defined by {required_attrs}, may also include `position_source`
+ def initialize(options)
+ required_keys = self.class.required_attrs
+ allowed_keys = required_keys + [:line, :col]
+ position_source = options.delete(:position_source)
+ if !position_source.nil?
+ options[:line], options[:col] = position_source.line_and_column
+ end
- present_keys = options.keys
- extra_keys = present_keys - allowed_keys
- if extra_keys.any?
- raise ArgumentError, "#{self.class.name} Extra arguments: #{extra_keys}"
- end
+ present_keys = options.keys
+ extra_keys = present_keys - allowed_keys
+ if extra_keys.any?
+ raise ArgumentError, "#{self.class.name} Extra arguments: #{extra_keys}"
+ end
- missing_keys = required_keys - present_keys
- if missing_keys.any?
- raise ArgumentError, "#{self.class.name} Missing arguments: #{missing_keys}"
- end
+ missing_keys = required_keys - present_keys
+ if missing_keys.any?
+ raise ArgumentError, "#{self.class.name} Missing arguments: #{missing_keys}"
+ end
- allowed_keys.each do |key|
- if options.has_key?(key)
- value = options[key]
- self.send("#{key}=", value)
+ allowed_keys.each do |key|
+ if options.has_key?(key)
+ value = options[key]
+ self.send("#{key}=", value)
+ end
+ end
end
- end
- end
- # Test all attributes, checking for any other nodes below this one
- def children
- self.class.required_attrs
- .map { |attr| send(attr) }
- .flatten
- .select { |val| val.is_a?(GraphQL::Language::Nodes::AbstractNode) }
- end
+ # Test all attributes, checking for any other nodes below this one
+ def children
+ self.class.required_attrs
+ .map { |attr| send(attr) }
+ .flatten
+ .select { |val| val.is_a?(GraphQL::Language::Nodes::AbstractNode) }
+ end
- class << self
- attr_reader :required_attrs
- # Defines attributes which are required at initialization.
- def attr_required(*attr_names)
- @required_attrs ||= []
- @required_attrs += attr_names
- attr_accessor(*attr_names)
- end
+ class << self
+ attr_reader :required_attrs
+ # Defines attributes which are required at initialization.
+ def attr_required(*attr_names)
+ @required_attrs ||= []
+ @required_attrs += attr_names
+ attr_accessor(*attr_names)
+ end
- # Create a new AbstractNode child which
- # requires and exposes {attr_names}.
- # @param attr_names [Array<Symbol>] Attributes this node class will have
- # @param block [Block] Block passed to `Class.new`
- # @return [Class] A new node class
- def create(*attr_names, &block)
- cls = Class.new(self, &block)
- cls.attr_required(*attr_names)
- cls
+ # Create a new AbstractNode child which
+ # requires and exposes {attr_names}.
+ # @param attr_names [Array<Symbol>] Attributes this node class will have
+ # @param block [Block] Block passed to `Class.new`
+ # @return [Class] A new node class
+ def create(*attr_names, &block)
+ cls = Class.new(self, &block)
+ cls.attr_required(*attr_names)
+ cls
+ end
+ end
end
- end
- end
- Argument = AbstractNode.create(:name, :value)
- Directive = AbstractNode.create(:name, :arguments)
- Document = AbstractNode.create(:parts)
- Enum = AbstractNode.create(:name)
- Field = AbstractNode.create(:name, :alias, :arguments, :directives, :selections)
- FragmentDefinition = AbstractNode.create(:name, :type, :directives, :selections)
- FragmentSpread = AbstractNode.create(:name, :directives)
- InlineFragment = AbstractNode.create(:type, :directives, :selections)
- InputObject = AbstractNode.create(:pairs) do
- def to_h(options={})
- pairs.inject({}) do |memo, pair|
- v = pair.value
- memo[pair.name] = v.is_a?(InputObject) ? v.to_h : v
- memo
+ Argument = AbstractNode.create(:name, :value)
+ Directive = AbstractNode.create(:name, :arguments)
+ Document = AbstractNode.create(:parts)
+ Enum = AbstractNode.create(:name)
+ Field = AbstractNode.create(:name, :alias, :arguments, :directives, :selections)
+ FragmentDefinition = AbstractNode.create(:name, :type, :directives, :selections)
+ FragmentSpread = AbstractNode.create(:name, :directives)
+ InlineFragment = AbstractNode.create(:type, :directives, :selections)
+ InputObject = AbstractNode.create(:pairs) do
+ def to_h(options={})
+ pairs.inject({}) do |memo, pair|
+ v = pair.value
+ memo[pair.name] = v.is_a?(InputObject) ? v.to_h : v
+ memo
+ end
+ end
end
+ ListType = AbstractNode.create(:of_type)
+ NonNullType = AbstractNode.create(:of_type)
+ OperationDefinition = AbstractNode.create(:operation_type, :name, :variables, :directives, :selections)
+ TypeName = AbstractNode.create(:name)
+ Variable = AbstractNode.create(:name, :type, :default_value)
+ VariableIdentifier = AbstractNode.create(:name)
end
end
- ListType = AbstractNode.create(:of_type)
- NonNullType = AbstractNode.create(:of_type)
- OperationDefinition = AbstractNode.create(:operation_type, :name, :variables, :directives, :selections)
- TypeName = AbstractNode.create(:name)
- Variable = AbstractNode.create(:name, :type, :default_value)
- VariableIdentifier = AbstractNode.create(:name)
end