class Hermes::Message::Headers

Public Class Methods

new(list) click to toggle source
# File lib/hermes/message.rb, line 375
def initialize list
  @list = list
end

Public Instance Methods

[](name, type = nil) click to toggle source
# File lib/hermes/message.rb, line 409
def [] name, type = nil
  case name
    when Integer then raise "Not a field name: #{name}"
    else              field name, type
  end
end
add(name, *contents) click to toggle source
# File lib/hermes/message.rb, line 424
def add name, *contents
  e = build_entry name, *contents
  add_entry e
  self
end
create() click to toggle source
# File lib/hermes/message.rb, line 370
def create
  new []
end
delete(name)
Alias for: remove
each() { |name, c| ... } click to toggle source
# File lib/hermes/message.rb, line 388
def each
  @list.each { |e|
    type = Headers.find_type e
    c = e.contents type
    yield e.name, c
  }
  self
end
field(name, type = nil) click to toggle source
# File lib/hermes/message.rb, line 402
def field name, type = nil
  e = find_entry name
  if e then
    type ||= Headers.find_type e
    e.contents type
  end
end
find_type(entry) click to toggle source
# File lib/hermes/message.rb, line 355
def find_type entry
  @types.each { |k,v|
    return v if entry.name_is? k
  }
  nil
end
inspect() click to toggle source
# File lib/hermes/message.rb, line 454
def inspect
  r = ""
  r << "#<#{cls}:"
  r << "0x%x" % (object_id<<1)
  r << " (#{length})"
  r << ">"
end
length() click to toggle source
# File lib/hermes/message.rb, line 379
def length
  @list.length
end
Also aliased as: size
method_missing(sym, *args) click to toggle source
Calls superclass method
# File lib/hermes/message.rb, line 416
def method_missing sym, *args
  if args.empty? and not sym =~ /[!?=]\z/ then
    field sym, *args
  else
    super
  end
end
parse(*list) click to toggle source
# File lib/hermes/message.rb, line 365
def parse *list
  list.flatten!
  list.map! { |h| Entry.parse h }
  new list
end
raw(name) click to toggle source
# File lib/hermes/message.rb, line 397
def raw name
  e = find_entry name
  e.data if e
end
recode(name, type = nil) click to toggle source
# File lib/hermes/message.rb, line 444
def recode name, type = nil
  n = Entry.build_name name
  @list.each { |e|
    next unless e.name_is? n
    type ||= Headers.find_type e
    e.reset type
  }
  self
end
remove(name) click to toggle source
# File lib/hermes/message.rb, line 437
def remove name
  e = Entry.create name
  remove_entries e
  self
end
Also aliased as: delete
replace(name, *contents) click to toggle source
# File lib/hermes/message.rb, line 430
def replace name, *contents
  e = build_entry name, *contents
  remove_entries e
  add_entry e
  self
end
set_field_type(name, type) click to toggle source
# File lib/hermes/message.rb, line 347
def set_field_type name, type
  e = Entry.create name
  if type then
    @types[ e.name] = type
  else
    @types.delete e.name
  end
end
size()
Alias for: length
to_s() click to toggle source
# File lib/hermes/message.rb, line 384
def to_s
  @list.map { |e| "#{e}#$/" }.join
end

Private Instance Methods

add_entry(entry) click to toggle source
# File lib/hermes/message.rb, line 482
def add_entry entry
  @list.unshift entry
end
build_entry(name, *contents) click to toggle source
# File lib/hermes/message.rb, line 469
def build_entry name, *contents
  e = Entry.create name
  type, = *contents
  case type
    when Class then
      e.set *contents
    else
      type = Headers.find_type e
      e.set type, *contents
  end
  e
end
find_entry(name) click to toggle source
# File lib/hermes/message.rb, line 464
def find_entry name
  e = Entry.build_name name
  @list.find { |x| x.name_is? e }
end
remove_entries(entry) click to toggle source
# File lib/hermes/message.rb, line 486
def remove_entries entry
  @list.reject! { |e| e.name_is? entry.name }
end