include/response.rb in http2-0.0.24 vs include/response.rb in http2-0.0.25
- old
+ new
@@ -1,101 +1,73 @@
#This object will be returned as the response for each request.
class Http2::Response
#All the data the response contains. Headers, body, cookies, requested URL and more.
attr_reader :args
-
+ attr_accessor :body, :charset, :code, :content_type, :http_version
+
#This method should not be called manually.
def initialize(args = {})
@args = args
@args[:headers] = {} if !@args.key?(:headers)
- @args[:body] = "" if !@args.key?(:body)
+ @body = args[:body] || ""
@debug = @args[:debug]
end
-
+
#Returns headers given from the host for the result.
#===Examples
# headers_hash = res.headers
def headers
return @args[:headers]
end
-
+
#Returns a certain header by name or false if not found.
#===Examples
# val = res.header("content-type")
def header(key)
return false if !@args[:headers].key?(key)
return @args[:headers][key].first.to_s
end
-
+
#Returns true if a header of the given string exists.
#===Examples
# print "No content-type was given." if !http.header?("content-type")
def header?(key)
return true if @args[:headers].key?(key) and @args[:headers][key].first.to_s.length > 0
return false
end
-
- #Returns the code of the result (200, 404, 500 etc).
- #===Examples
- # print "An internal error occurred." if res.code.to_i == 500
- def code
- return @args[:code]
+
+ def content_length
+ header("content-length").to_i if header?("content-length")
end
-
- #Returns the HTTP-version of the result.
- #===Examples
- # print "We are using HTTP 1.1 and should support keep-alive." if res.http_version.to_s == "1.1"
- def http_version
- return @args[:http_version]
- end
-
- #Returns the complete body of the result as a string.
- #===Examples
- # print "Looks like we caught the end of it as well?" if res.body.to_s.downcase.index("</html>") != nil
- def body
- return @args[:body]
- end
-
- #Returns the charset of the result.
- def charset
- return @args[:charset]
- end
-
- #Returns the content-type of the result as a string.
- #===Examples
- # print "This body can be printed - its just plain text!" if http.contenttype == "text/plain"
- def contenttype
- return @args[:contenttype]
- end
-
+
#Returns the requested URL as a string.
#===Examples
# res.requested_url #=> "?show=status&action=getstatus"
def requested_url
raise "URL could not be detected." if !@args[:request_args][:url]
return @args[:request_args][:url]
end
-
+
# Checks the data that has been sat on the object and raises various exceptions, if it does not validate somehow.
def validate!
puts "Http2: Validating response length." if @debug
validate_body_versus_content_length!
end
-
+
private
-
+
# Checks that the length of the body is the same as the given content-length if given.
def validate_body_versus_content_length!
unless self.header?("content-length")
puts "Http2: No content length given - skipping length validation." if @debug
return nil
end
-
+
content_length = self.header("content-length").to_i
- body_length = @args[:body].to_s.bytesize
-
+ body_length = @body.bytesize
+
puts "Http2: Body length: #{body_length}" if @debug
puts "Http2: Content length: #{content_length}" if @debug
-
+
raise "Body does not match the given content-length: '#{body_length}', '#{content_length}'." if body_length != content_length
end
end
\ No newline at end of file