class Mail::FieldList

Experimental RBS support (using type sampling data from the type_fusion project).

# sig/mail/field_list.rbs

class Mail::FieldList < Mail::Array
  def select_fields: (String field_name) -> untyped
end

having to worry about the order they will appear in.
email fields in order. And allows you to insert new fields without
Field List class provides an enhanced array that keeps a list of

def add_field(field)

def add_field(field)
  if field.singular?
    replace_field field
  else
    insert_field field
  end
end

def delete_field(name)

def delete_field(name)
  delete_if { |f| f.responsible_for? name }
end

def get_field(field_name)

def get_field(field_name)
  fields = select_fields(field_name)
  case fields.size
  when 0; nil
  when 1; fields.first
  else fields
  end
end

def has_field?(field_name)

def has_field?(field_name)
  any? { |f| f.responsible_for? field_name }
end

def insert_field(field)

From
Licensed under
Copyright (C) 2001-2013 Python Software Foundation.
Heavily based on bisect.insort from Python, which is:

Insert the field in sorted order.
def insert_field(field)
  lo, hi = 0, size
  while lo < hi
    mid = (lo + hi).div(2)
    if field < self[mid]
      hi = mid
    else
      lo = mid + 1
    end
  end
  insert lo, field
end

def replace_field(field)

def replace_field(field)
  if first_offset = index { |f| f.responsible_for? field.name }
    delete_field field.name
    insert first_offset, field
  else
    insert_field field
  end
end

def select_fields(field_name)

Experimental RBS support (using type sampling data from the type_fusion project).

def select_fields: (String field_name) -> untyped

This signature was generated using 1 sample from 1 application.

def select_fields(field_name)
  fields = select { |f| f.responsible_for? field_name }
  if fields.size > 1 && singular?(field_name)
    Array(fields.detect { |f| f.errors.size == 0 } || fields.first)
  else
    fields
  end
end

def singular?(field_name)

def singular?(field_name)
  if klass = Mail::Field.field_class_for(field_name)
    klass.singular?
  else
    false
  end
end

def summary

def summary
  map { |f| "<#{f.name}: #{f.value}>" }.join(", ")
end