Sha256: 11c1fc6d0cc8883971adc032cbd4c8d9d35984111c41a8fd83de69106a1fbf88
Contents?: true
Size: 1.77 KB
Versions: 1
Compression:
Stored size: 1.77 KB
Contents
# frozen_string_literal: true module GraphQL # A list type modifies another type. # # List types can be created with the type helper (`types[InnerType]`) # or {BaseType#to_list_type} (`InnerType.to_list_type`) # # For return types, it says that the returned value will be a list of the modified. # # @example A field which returns a list of items # field :items, types[ItemType] # # or # field :items, ItemType.to_list_type # # For input types, it says that the incoming value will be a list of the modified type. # # @example A field which accepts a list of strings # field :newNames do # # ... # argument :values, types[types.String] # # or # argument :values, types.String.to_list_type # end # # Given a list type, you can always get the underlying type with {#unwrap}. # class ListType < GraphQL::BaseType include GraphQL::BaseType::ModifiesAnotherType attr_reader :of_type def initialize(of_type:) @of_type = of_type end def kind GraphQL::TypeKinds::LIST end def to_s "[#{of_type.to_s}]" end def validate_non_null_input(value, warden) result = GraphQL::Query::InputValidationResult.new ensure_array(value).each_with_index do |item, index| item_result = of_type.validate_input(item, warden) if !item_result.valid? result.merge_result!(index, item_result) end end result end def coerce_non_null_input(value) ensure_array(value).map { |item| of_type.coerce_input(item) } end def coerce_result(value) ensure_array(value).map { |item| item.nil? ? nil : of_type.coerce_result(item) } end private def ensure_array(value) value.is_a?(Array) ? value : [value] end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
graphql-1.3.0 | lib/graphql/list_type.rb |