class GraphQL::DefinitionHelpers::DefinedByConfig::DefinitionConfig

Then, the applicable properties of this object are transfered to the given instance.
This object is ‘instance_eval`’d when defining any object in the schema.

def self.attr_definable(*names)

def self.attr_definable(*names)
  attr_accessor(*names)
  names.each do |name|
    ivar_name = "@#{name}".to_sym
    define_method(name) do |new_value=nil|
      new_value && self.instance_variable_set(ivar_name, new_value)
      instance_variable_get(ivar_name)
    end
  end
end

def argument(name, type, description = nil, default_value: nil)

def argument(name, type, description = nil, default_value: nil)
   argument = GraphQL::Argument.new
   argument.name = name.to_s
   argument.type = type
   argument.description = description
   argument.default_value = default_value
   @arguments[name.to_s] = argument
 end

def field(name, type = nil, desc = nil, field: nil, property: nil, &block)

def field(name, type = nil, desc = nil, field: nil, property: nil, &block)
  if block_given?
    field = GraphQL::Field.define(&block)
  else
    field ||= GraphQL::Field.new
  end
  type && field.type = type
  desc && field.description = desc
  property && field.resolve = -> (t,a,c) { t.public_send(property)}
  field.name ||= name.to_s
  fields[name.to_s] = field
end

def initialize

def initialize
  @interfaces = []
  @possible_types = []
  @on = []
  @fields = {}
  @arguments = {}
  @values = []
  @input_fields = {}
end

def input_field(name, type = nil, desc = nil, default_value: nil, &block)

For InputObjectType
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.description = desc
  default_value && argument.default_value = default_value
  input_fields[name.to_s] = argument
end

def to_instance(object, attributes)

def to_instance(object, attributes)
  attributes.each do |attr_name|
    configured_value = self.public_send(attr_name)
    object.public_send("#{attr_name}=", configured_value)
  end
  object
end

def types

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

def value(name, desc = nil, deprecation_reason: nil, value: name)

For EnumType
def value(name, desc = nil, deprecation_reason: nil, value: name)
  values << GraphQL::EnumType::EnumValue.new(name: name, description: desc, deprecation_reason: deprecation_reason, value: value)
end