Sha256: b32a930a446d56cb6004a5fd55e4043b3fc7dfdaa36ee2f260c69936aaaf9032

Contents?: true

Size: 1.91 KB

Versions: 1

Compression:

Stored size: 1.91 KB

Contents

# A complex input type for a field argument.
#
# @example An input type with name and number
#   PlayerInput = GraphQL::InputObjectType.new do |i, types, fields, args|
#     i.name("Player")
#     i.input_fields({
#       name: args.build(type: !types.String)
#       number: args.build(type: !types.Int)
#     })
#   end
#
class GraphQL::InputObjectType < GraphQL::ObjectType
  # Deprecated:
  attr_definable :input_fields

  class DefinitionConfig
    extend GraphQL::DefinitionHelpers::Definable
    attr_definable :name, :description, :input_fields
    def initialize
      @input_fields = {}
    end

    def types
      GraphQL::DefinitionHelpers::TypeDefiner.instance
    end

    def input_field(name, type = nil, desc = nil, default_value: nil, &block)
      argument = if block_given?
        GraphQL::Argument.define(&block)
      else
        GraphQL::Argument.new
      end
      argument.name = name
      type && argument.type = type
      desc && argument.desc = desc
      default_value && argument.default_value = default_value
      @input_fields[name.to_s] = argument
    end

    def to_instance
      object = GraphQL::InputObjectType.new
      object.name = name
      object.description = description
      object.input_fields = @input_fields
      object
    end
  end

  # @overload input_fields(new_fields)
  #   @deprecated use {.define} API instead
  #   Define allowed fields, normalized with {StringNamedHash}
  #   @param new_fields [Hash] allowed fields for this input object type
  #
  # @overload input_fields()
  #   Read the defined fields for this input type
  #   @return [Hash] allowed fields for this input object type
  #
  def input_fields(new_fields=nil)
    new_fields && self.input_fields = new_fields
    @input_fields
  end

  def input_fields=(new_fields)
    @input_fields = GraphQL::DefinitionHelpers::StringNamedHash.new(new_fields).to_h
  end

  def kind
    GraphQL::TypeKinds::INPUT_OBJECT
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
graphql-0.5.0 lib/graph_ql/input_object_type.rb