class Genderize::Io::Parser::Header

Attributes

headers[R]
response[R]
strict[R]

Public Class Methods

new(response, strict: true) click to toggle source
# File lib/genderize/io/parser/header.rb, line 10
def initialize(response, strict: true)
  @response = response
  @strict = strict
  @headers = []
end
parse(response, strict: true) click to toggle source
# File lib/genderize/io/parser/header.rb, line 16
def self.parse(response, strict: true)
  instance = new(response, strict: strict)
  instance.parse
  instance
end

Public Instance Methods

method_missing(sym, *) click to toggle source
Calls superclass method
# File lib/genderize/io/parser/header.rb, line 26
def method_missing(sym, *)
  detect_multi_value_keys(sym) || super
end
parse() click to toggle source
# File lib/genderize/io/parser/header.rb, line 22
def parse
  @headers = @response.split(/\\r\\n|\n|\r/)
end
respond_to_missing?(sym, *) click to toggle source
Calls superclass method
# File lib/genderize/io/parser/header.rb, line 30
def respond_to_missing?(sym, *)
  detect_multi_value_keys(sym) || super
end
response_code() click to toggle source
# File lib/genderize/io/parser/header.rb, line 34
def response_code
  @headers[0].match(%r{HTTP/\d\.\d (\d{3}.*)})[1]
end
version() click to toggle source
# File lib/genderize/io/parser/header.rb, line 38
def version
  @headers[0].match(%r{HTTP/\d\.\d})[0]
end

Private Instance Methods

detect_multi_value_keys(tag) click to toggle source
# File lib/genderize/io/parser/header.rb, line 44
def detect_multi_value_keys(tag)
  tag = method_sym_to_http_pattern(tag)
  results = @headers.select { |val| val =~ /^#{tag}:/i }.map { |val| value_from(val) }
  results.size <= 1 ? results.first : results
end
method_sym_to_http_pattern(sym) click to toggle source
# File lib/genderize/io/parser/header.rb, line 50
def method_sym_to_http_pattern(sym)
  replacement = @strict ? '-' : '[-_]'
  sym.to_s.gsub('_', replacement)
end
value_from(tag) click to toggle source
# File lib/genderize/io/parser/header.rb, line 55
def value_from(tag)
  val = tag.split(/:\s+/)[1]
  val =~ /^"(.*)"$/ ? Regexp.last_match(1) : val
end