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)
  @type     = type
  @name     = name
  @from     = from || name
  @doc      = doc
  @optional = optional
  @null     = null
  @roles    = Array(role)
  @default  = default
  @fields_filter = ReeMapper::FieldsFilter.build(only: only, except: except)
  @name_as_str               = @name.to_s
  @name_as_instance_var_name = :"@#{@name}"
  @from_as_str               = @from.to_s
  raise ArgumentError, 'required fields do not support defaults' if has_default? && !optional
end