http2 0.0.28 → 0.0.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +150 -28
  3. data/Rakefile +20 -31
  4. data/lib/http2.rb +105 -70
  5. data/lib/http2/base_request.rb +22 -0
  6. data/{include → lib/http2}/connection.rb +56 -28
  7. data/lib/http2/cookie.rb +22 -0
  8. data/lib/http2/errors.rb +18 -0
  9. data/lib/http2/get_request.rb +33 -0
  10. data/{include → lib/http2}/post_data_generator.rb +7 -6
  11. data/{include → lib/http2}/post_multipart_request.rb +20 -20
  12. data/{include → lib/http2}/post_request.rb +17 -22
  13. data/lib/http2/response.rb +109 -0
  14. data/{include → lib/http2}/response_reader.rb +75 -42
  15. data/{include → lib/http2}/url_builder.rb +6 -6
  16. data/lib/http2/utils.rb +52 -0
  17. data/spec/helpers.rb +27 -0
  18. data/spec/http2/cookies_spec.rb +18 -0
  19. data/spec/http2/get_request_spec.rb +11 -0
  20. data/spec/http2/post_data_generator_spec.rb +2 -1
  21. data/spec/http2/post_multipart_request_spec.rb +11 -0
  22. data/spec/http2/post_request_spec.rb +11 -0
  23. data/spec/http2/response_reader_spec.rb +12 -0
  24. data/spec/http2/response_spec.rb +73 -0
  25. data/spec/http2/url_builder_spec.rb +1 -1
  26. data/spec/http2_spec.rb +107 -89
  27. data/spec/spec_helper.rb +8 -8
  28. data/spec/spec_root/content_type_test.rhtml +4 -0
  29. data/spec/spec_root/cookie_test.rhtml +8 -0
  30. data/spec/spec_root/json_test.rhtml +9 -0
  31. data/spec/spec_root/multipart_test.rhtml +28 -0
  32. data/spec/spec_root/redirect_test.rhtml +3 -0
  33. data/spec/spec_root/unauthorized.rhtml +3 -0
  34. data/spec/spec_root/unsupported_media_type.rhtml +3 -0
  35. metadata +118 -36
  36. data/.document +0 -5
  37. data/.rspec +0 -1
  38. data/Gemfile +0 -14
  39. data/Gemfile.lock +0 -77
  40. data/VERSION +0 -1
  41. data/http2.gemspec +0 -77
  42. data/include/errors.rb +0 -11
  43. data/include/get_request.rb +0 -34
  44. data/include/response.rb +0 -73
  45. data/include/utils.rb +0 -40
  46. data/shippable.yml +0 -7
@@ -1,77 +0,0 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
5
- # stub: http2 0.0.28 ruby lib
6
-
7
- Gem::Specification.new do |s|
8
- s.name = "http2"
9
- s.version = "0.0.28"
10
-
11
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
- s.require_paths = ["lib"]
13
- s.authors = ["Kasper Johansen"]
14
- s.date = "2014-12-03"
15
- s.description = "A lightweight framework for doing http-connections in Ruby. Supports cookies, keep-alive, compressing and much more."
16
- s.email = "k@spernj.org"
17
- s.extra_rdoc_files = [
18
- "LICENSE.txt",
19
- "README.md"
20
- ]
21
- s.files = [
22
- ".document",
23
- ".rspec",
24
- "Gemfile",
25
- "Gemfile.lock",
26
- "LICENSE.txt",
27
- "README.md",
28
- "Rakefile",
29
- "VERSION",
30
- "http2.gemspec",
31
- "include/connection.rb",
32
- "include/errors.rb",
33
- "include/get_request.rb",
34
- "include/post_data_generator.rb",
35
- "include/post_multipart_request.rb",
36
- "include/post_request.rb",
37
- "include/response.rb",
38
- "include/response_reader.rb",
39
- "include/url_builder.rb",
40
- "include/utils.rb",
41
- "lib/http2.rb",
42
- "shippable.yml",
43
- "spec/http2/post_data_generator_spec.rb",
44
- "spec/http2/url_builder_spec.rb",
45
- "spec/http2_spec.rb",
46
- "spec/spec_helper.rb"
47
- ]
48
- s.homepage = "http://github.com/kaspernj/http2"
49
- s.licenses = ["MIT"]
50
- s.rubygems_version = "2.4.0"
51
- s.summary = "A lightweight framework for doing http-connections in Ruby. Supports cookies, keep-alive, compressing and much more."
52
-
53
- if s.respond_to? :specification_version then
54
- s.specification_version = 4
55
-
56
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
57
- s.add_runtime_dependency(%q<string-cases>, [">= 0"])
58
- s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
59
- s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
60
- s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
61
- s.add_development_dependency(%q<jeweler>, [">= 1.8.4"])
62
- else
63
- s.add_dependency(%q<string-cases>, [">= 0"])
64
- s.add_dependency(%q<rspec>, ["~> 2.8.0"])
65
- s.add_dependency(%q<rdoc>, ["~> 3.12"])
66
- s.add_dependency(%q<bundler>, [">= 1.0.0"])
67
- s.add_dependency(%q<jeweler>, [">= 1.8.4"])
68
- end
69
- else
70
- s.add_dependency(%q<string-cases>, [">= 0"])
71
- s.add_dependency(%q<rspec>, ["~> 2.8.0"])
72
- s.add_dependency(%q<rdoc>, ["~> 3.12"])
73
- s.add_dependency(%q<bundler>, [">= 1.0.0"])
74
- s.add_dependency(%q<jeweler>, [">= 1.8.4"])
75
- end
76
- end
77
-
@@ -1,11 +0,0 @@
1
- #This class holds various classes for error-handeling.
2
- class Http2::Errors
3
- class Http2error < RuntimeError
4
- attr_accessor :response
5
- end
6
-
7
- class Noaccess < Http2error; end
8
- class Internalserver < Http2error; end
9
- class Notfound < Http2error; end
10
- class Badrequest < Http2error; end
11
- end
@@ -1,34 +0,0 @@
1
- class Http2::GetRequest
2
- def initialize(http2, args)
3
- @http2, @args, @debug, @nl = http2, http2.parse_args(args), http2.debug, http2.nl
4
- end
5
-
6
- def execute
7
- @http2.mutex.synchronize do
8
- puts "Http2: Writing headers: #{header_string}" if @debug
9
- @http2.connection.write(header_string)
10
-
11
- puts "Http2: Reading response." if @debug
12
- resp = @http2.read_response(@args)
13
-
14
- puts "Http2: Done with get request." if @debug
15
- return resp
16
- end
17
- end
18
-
19
- private
20
-
21
- def method
22
- if @args[:method]
23
- @args[:method].to_s.upcase
24
- else
25
- "GET"
26
- end
27
- end
28
-
29
- def header_string
30
- header_str = "#{method} /#{@args[:url]} HTTP/1.1#{@nl}"
31
- header_str << @http2.header_str(@http2.default_headers(@args), @args)
32
- header_str << @nl
33
- end
34
- end
@@ -1,73 +0,0 @@
1
- #This object will be returned as the response for each request.
2
- class Http2::Response
3
- #All the data the response contains. Headers, body, cookies, requested URL and more.
4
- attr_reader :args
5
- attr_accessor :body, :charset, :code, :content_type, :http_version
6
-
7
- #This method should not be called manually.
8
- def initialize(args = {})
9
- @args = args
10
- @args[:headers] = {} if !@args.key?(:headers)
11
- @body = args[:body] || ""
12
- @debug = @args[:debug]
13
- end
14
-
15
- #Returns headers given from the host for the result.
16
- #===Examples
17
- # headers_hash = res.headers
18
- def headers
19
- return @args[:headers]
20
- end
21
-
22
- #Returns a certain header by name or false if not found.
23
- #===Examples
24
- # val = res.header("content-type")
25
- def header(key)
26
- return false if !@args[:headers].key?(key)
27
- return @args[:headers][key].first.to_s
28
- end
29
-
30
- #Returns true if a header of the given string exists.
31
- #===Examples
32
- # print "No content-type was given." if !http.header?("content-type")
33
- def header?(key)
34
- return true if @args[:headers].key?(key) and @args[:headers][key].first.to_s.length > 0
35
- return false
36
- end
37
-
38
- def content_length
39
- header("content-length").to_i if header?("content-length")
40
- end
41
-
42
- #Returns the requested URL as a string.
43
- #===Examples
44
- # res.requested_url #=> "?show=status&action=getstatus"
45
- def requested_url
46
- raise "URL could not be detected." if !@args[:request_args][:url]
47
- return @args[:request_args][:url]
48
- end
49
-
50
- # Checks the data that has been sat on the object and raises various exceptions, if it does not validate somehow.
51
- def validate!
52
- puts "Http2: Validating response length." if @debug
53
- validate_body_versus_content_length!
54
- end
55
-
56
- private
57
-
58
- # Checks that the length of the body is the same as the given content-length if given.
59
- def validate_body_versus_content_length!
60
- unless self.header?("content-length")
61
- puts "Http2: No content length given - skipping length validation." if @debug
62
- return nil
63
- end
64
-
65
- content_length = self.header("content-length").to_i
66
- body_length = @body.bytesize
67
-
68
- puts "Http2: Body length: #{body_length}" if @debug
69
- puts "Http2: Content length: #{content_length}" if @debug
70
-
71
- raise "Body does not match the given content-length: '#{body_length}', '#{content_length}'." if body_length != content_length
72
- end
73
- end
@@ -1,40 +0,0 @@
1
- #This class holds various methods for encoding, decoding and parsing of HTTP-related stuff.
2
- class Http2::Utils
3
- #URL-encodes a string.
4
- def self.urlenc(string)
5
- #Thanks to CGI framework
6
- string.to_s.gsub(/([^ a-zA-Z0-9_.-]+)/) do
7
- '%' + $1.unpack('H2' * $1.bytesize).join('%').upcase
8
- end.tr(' ', '+')
9
- end
10
-
11
- #URL-decodes a string.
12
- def self.urldec(string)
13
- #Thanks to CGI framework
14
- str = string.to_s.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/) do
15
- [$1.delete('%')].pack('H*')
16
- end
17
- end
18
-
19
- #Parses a cookies-string and returns them in an array.
20
- def self.parse_set_cookies(str)
21
- str = String.new(str.to_s)
22
- return [] if str.length <= 0
23
- args = {}
24
- cookie_start_regex = /^(.+?)=(.*?)(;\s*|$)/
25
-
26
- match = str.match(cookie_start_regex)
27
- raise "Could not match cookie: '#{str}'." if !match
28
- str.gsub!(cookie_start_regex, "")
29
-
30
- args["name"] = self.urldec(match[1].to_s)
31
- args["value"] = self.urldec(match[2].to_s)
32
-
33
- while match = str.match(/(.+?)=(.*?)(;\s*|$)/)
34
- str = str.gsub(match[0], "")
35
- args[match[1].to_s.downcase] = match[2].to_s
36
- end
37
-
38
- return [args]
39
- end
40
- end
@@ -1,7 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.0.0
4
- script:
5
- - CODECLIMATE_REPO_TOKEN=df980a87f4dbf846f13115f0ff1a8179bf165b645dcf12204a96c91d9e665f8e bundle exec rspec
6
- notifications:
7
- email: false