module VCR::Normalizers::Header

def convert_to_raw_strings(array)

def convert_to_raw_strings(array)
  # Ensure the values are raw strings.
  # Apparently for Paperclip uploads to S3, headers
  # get serialized with some extra stuff which leads
  # to a seg fault. See this issue for more info:
  # https://github.com/myronmarston/vcr/issues#issue/39
  array.map do |v|
    case v
      when String; String.new(v)
      when Array; convert_to_raw_strings(v)
      else v
    end
  end
end

def delete_header(key)

def delete_header(key)
  if key = header_key(key)
    @normalized_header_keys.delete key.downcase
    headers.delete key
  end
end

def edit_header(key, value = nil)

def edit_header(key, value = nil)
  if key = header_key(key)
    value ||= yield headers[key]
    headers[key] = Array(value)
  end
end

def get_header(key)

def get_header(key)
  key = header_key(key)
  headers[key] if key
end

def header_key(key)

def header_key(key)
  key = @normalized_header_keys[key.downcase]
  key if headers.has_key? key
end

def initialize(*args)

def initialize(*args)
  super
  normalize_headers
end

def normalize_headers

def normalize_headers
  new_headers = {}
  @normalized_header_keys = Hash.new {|h,k| k }
  headers.each do |k, v|
    val_array = case v
      when Array then v
      when nil then []
      else [v]
    end
    new_headers[String.new(k)] = convert_to_raw_strings(val_array)
    @normalized_header_keys[k.downcase] = k
  end if headers
  self.headers = new_headers
end