class ReeMapper::Field

def has_default?

def has_default?
  default != NO_DEFAULT
end

def has_role?(role)

def has_role?(role)
  return true  if roles.empty?
  return false if role.nil?
  if role.is_a?(Array)
    role.any? { roles.include?(_1) }
  else
    roles.include?(role)
  end
end

def initialize(type, name = nil, from: nil, doc: nil, optional: false, null: false, role: nil, default: NO_DEFAULT,

def initialize(type, name = nil, from: nil, doc: nil, optional: false, null: false, role: nil, default: NO_DEFAULT,
               only: nil, except: nil, location: nil)
  @type     = type
  @name     = name
  @from     = from || name
  @doc      = doc
  @optional = optional
  @null     = null
  @roles    = Array(role)
  @default  = default
  @fields_filter = ReeMapper::FieldsFilter.build(only, except)
  @name_as_str               = @name.to_s
  @name_as_instance_var_name = :"@#{@name}"
  @from_as_str               = @from.to_s
  @location = location
  if @location
    @location = @location
      .sub(Ree.root_dir, ".")
      .sub(/:in.+/, "")
  end
  raise ArgumentError, 'required fields do not support defaults' if has_default? && !optional
end