class Xenon::Headers
Public Class Methods
Header(name)
click to toggle source
# File lib/xenon/headers.rb, line 67 def Header(name) klass = Class.new do def name self.class.const_get(:NAME) end def self.inherited(base) Headers.register(base) end end Headers.const_set("#{name.tr('-', '_').classify}Header", klass) klass.const_set(:NAME, name) klass end
ListHeader(name)
click to toggle source
# File lib/xenon/headers.rb, line 82 def ListHeader(name) klass = Header(name) klass.class_eval do attr_reader :values def initialize(values) @values = values end def merge(other) self.class.new(*(@values + other.values)) end def to_s @values.map(&:to_s).join(', ') end end klass end
header_class(name)
click to toggle source
# File lib/xenon/headers.rb, line 63 def header_class(name) (@registered || {})[name] end
inherited(base)
click to toggle source
# File lib/xenon/headers.rb, line 73 def self.inherited(base) Headers.register(base) end
initialize(values)
click to toggle source
# File lib/xenon/headers.rb, line 87 def initialize(values) @values = values end
merge(other)
click to toggle source
# File lib/xenon/headers.rb, line 91 def merge(other) self.class.new(*(@values + other.values)) end
name()
click to toggle source
# File lib/xenon/headers.rb, line 69 def name self.class.const_get(:NAME) end
new()
click to toggle source
# File lib/xenon/headers.rb, line 7 def initialize @hash = {} end
register(klass)
click to toggle source
# File lib/xenon/headers.rb, line 59 def register(klass) (@registered ||= {})[klass.const_get(:NAME)] = klass end
to_s()
click to toggle source
# File lib/xenon/headers.rb, line 95 def to_s @values.map(&:to_s).join(', ') end
Public Instance Methods
add!(header)
click to toggle source
# File lib/xenon/headers.rb, line 30 def add!(header) existing = @hash[header.name] if existing if existing.respond_to?(:merge) set!(existing.merge(header)) else raise "Unmergeable header '#{header.name}' already exists" end else set!(header) end self end
Also aliased as: <<
each(&block)
click to toggle source
# File lib/xenon/headers.rb, line 21 def each(&block) @hash.values.each(&block) end
freeze()
click to toggle source
Calls superclass method
# File lib/xenon/headers.rb, line 16 def freeze @hash.freeze super end
initialize_dup(other)
click to toggle source
Calls superclass method
# File lib/xenon/headers.rb, line 11 def initialize_dup(other) super @hash = @hash.dup end
remove!(header)
click to toggle source
# File lib/xenon/headers.rb, line 44 def remove!(header) header = header.name if header.respond_to?(:name) @hash.delete(header) self end
set!(header)
click to toggle source
# File lib/xenon/headers.rb, line 25 def set!(header) @hash[header.name] = header self end