Class: Rack::Utils::HeaderHash

Inherits:
Hash
  • Object
show all
Defined in:
lib/rack/utils.rb

Overview

A case-insensitive Hash that preserves the original case of a header when set.

Class Method Summary (collapse)

Instance Method Summary (collapse)

Constructor Details

- (HeaderHash) initialize(hash = {})

A new instance of HeaderHash



377
378
379
380
381
# File 'lib/rack/utils.rb', line 377

def initialize(hash={})
  super()
  @names = {}
  hash.each { |k, v| self[k] = v }
end

Class Method Details

+ (Object) new(hash = {})



373
374
375
# File 'lib/rack/utils.rb', line 373

def self.new(hash={})
  HeaderHash === hash ? hash : super(hash)
end

Instance Method Details

- (Object) [](k)



395
396
397
# File 'lib/rack/utils.rb', line 395

def [](k)
  super(k) || super(@names[k.downcase])
end

- (Object) []=(k, v)



399
400
401
402
403
404
# File 'lib/rack/utils.rb', line 399

def []=(k, v)
  canonical = k.downcase
  delete k if @names[canonical] && @names[canonical] != k # .delete is expensive, don't invoke it unless necessary
  @names[k] = @names[canonical] = k
  super k, v
end

- (Object) delete(k)



406
407
408
409
410
411
# File 'lib/rack/utils.rb', line 406

def delete(k)
  canonical = k.downcase
  result = super @names.delete(canonical)
  @names.delete_if { |name,| name.downcase == canonical }
  result
end

- (Object) each



383
384
385
386
387
# File 'lib/rack/utils.rb', line 383

def each
  super do |k, v|
    yield(k, v.respond_to?(:to_ary) ? v.to_ary.join("\n") : v)
  end
end

- (Boolean) include?(k) Also known as: has_key?, member?, key?

Returns:

  • (Boolean)


413
414
415
# File 'lib/rack/utils.rb', line 413

def include?(k)
  @names.include?(k) || @names.include?(k.downcase)
end

- (Object) merge(other)



426
427
428
429
# File 'lib/rack/utils.rb', line 426

def merge(other)
  hash = dup
  hash.merge! other
end

- (Object) merge!(other)



421
422
423
424
# File 'lib/rack/utils.rb', line 421

def merge!(other)
  other.each { |k, v| self[k] = v }
  self
end

- (Object) replace(other)



431
432
433
434
435
# File 'lib/rack/utils.rb', line 431

def replace(other)
  clear
  other.each { |k, v| self[k] = v }
  self
end

- (Object) to_hash



389
390
391
392
393
# File 'lib/rack/utils.rb', line 389

def to_hash
  hash = {}
  each { |k,v| hash[k] = v }
  hash
end