Sha256: 826a1559d22446199b9dfeae3dec095f600f9077dcb430f975f30cec910c9c21

Contents?: true

Size: 959 Bytes

Versions: 86

Compression:

Stored size: 959 Bytes

Contents

module Thin
  # Store HTTP header name-value pairs direcly to a string
  # and allow duplicated entries on some names.
  class Headers
    HEADER_FORMAT      = "%s: %s\r\n".freeze
    ALLOWED_DUPLICATES = %w(Set-Cookie Set-Cookie2 Warning WWW-Authenticate).freeze
    
    def initialize
      @sent = {}
      @out = []
    end
    
    # Add <tt>key: value</tt> pair to the headers.
    # Ignore if already sent and no duplicates are allowed
    # for this +key+.
    def []=(key, value)
      if !@sent.has_key?(key) || ALLOWED_DUPLICATES.include?(key)
        @sent[key] = true
        value = case value
                when Time
                  value.httpdate
                when NilClass
                  return
                else
                  value.to_s
                end
        @out << HEADER_FORMAT % [key, value]
      end
    end
    
    def has_key?(key)
      @sent[key]
    end
    
    def to_s
      @out.join
    end
  end
end

Version data entries

86 entries across 86 versions & 7 rubygems

Version Path
classiccms-0.7.5 vendor/bundle/gems/thin-1.3.1/lib/thin/headers.rb
classiccms-0.7.4 vendor/bundle/gems/thin-1.3.1/lib/thin/headers.rb
classiccms-0.7.3 vendor/bundle/gems/thin-1.3.1/lib/thin/headers.rb
macournoyer-thin-1.0.1 lib/thin/headers.rb
macournoyer-thin-1.1.0 lib/thin/headers.rb
michaelyta-thin-1.2.2 lib/thin/headers.rb
classiccms-0.7.2 vendor/bundle/gems/thin-1.3.1/lib/thin/headers.rb
classiccms-0.7.1 vendor/bundle/gems/thin-1.3.1/lib/thin/headers.rb
classiccms-0.7.0 vendor/bundle/gems/thin-1.3.1/lib/thin/headers.rb
classiccms-0.6.9 vendor/bundle/gems/thin-1.3.1/lib/thin/headers.rb
classiccms-0.6.8 vendor/bundle/gems/thin-1.3.1/lib/thin/headers.rb
classiccms-0.6.7 vendor/bundle/gems/thin-1.3.1/lib/thin/headers.rb
friendlyfashion-thin-1.4.1.1 lib/thin/headers.rb
classiccms-0.6.6 vendor/bundle/gems/thin-1.3.1/lib/thin/headers.rb
classiccms-0.6.5 vendor/bundle/gems/thin-1.3.1/lib/thin/headers.rb
classiccms-0.6.4 vendor/bundle/gems/thin-1.3.1/lib/thin/headers.rb
classiccms-0.6.3 vendor/bundle/gems/thin-1.3.1/lib/thin/headers.rb
classiccms-0.6.2 vendor/bundle/gems/thin-1.3.1/lib/thin/headers.rb
classiccms-0.6.1 vendor/bundle/gems/thin-1.3.1/lib/thin/headers.rb
classiccms-0.6.0 vendor/bundle/gems/thin-1.3.1/lib/thin/headers.rb