class Thin::Headers

Store HTTP header name-value pairs direcly to a string and allow duplicated entries on some names.

Constants

ALLOWED_DUPLICATES
CR_OR_LF
HEADER_FORMAT

Public Class Methods

new() click to toggle source
# File lib/thin/headers.rb, line 13
def initialize
  @sent = {}
  @out = []
end

Public Instance Methods

[]=(key, value) click to toggle source

Add key: value pair to the headers. Ignore if already sent and no duplicates are allowed for this key.

# File lib/thin/headers.rb, line 21
def []=(key, value)
  downcase_key = key.downcase
  if !@sent.has_key?(downcase_key) || ALLOWED_DUPLICATES.include?(downcase_key)
    @sent[downcase_key] = true
    value = case value
            when Time
              value.httpdate
            when NilClass
              return
            when CR_OR_LF
              raise InvalidHeader, "Header contains CR or LF"
            else
              value.to_s
            end
    @out << HEADER_FORMAT % [key, value]
  end
end
has_key?(key) click to toggle source
# File lib/thin/headers.rb, line 39
def has_key?(key)
  @sent[key.downcase]
end
to_s() click to toggle source
# File lib/thin/headers.rb, line 43
def to_s
  @out.join
end