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