z-http-request 0.1.0

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 (60) hide show
  1. checksums.yaml +7 -0
  2. data/.gemtest +0 -0
  3. data/.gitignore +10 -0
  4. data/.rspec +3 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +8 -0
  7. data/Gemfile +17 -0
  8. data/README.md +38 -0
  9. data/Rakefile +3 -0
  10. data/benchmarks/clients.rb +170 -0
  11. data/benchmarks/em-excon.rb +87 -0
  12. data/benchmarks/em-profile.gif +0 -0
  13. data/benchmarks/em-profile.txt +65 -0
  14. data/benchmarks/server.rb +48 -0
  15. data/examples/.gitignore +1 -0
  16. data/examples/digest_auth/client.rb +25 -0
  17. data/examples/digest_auth/server.rb +28 -0
  18. data/examples/fetch.rb +30 -0
  19. data/examples/fibered-http.rb +51 -0
  20. data/examples/multi.rb +25 -0
  21. data/examples/oauth-tweet.rb +35 -0
  22. data/examples/socks5.rb +23 -0
  23. data/lib/z-http/client.rb +318 -0
  24. data/lib/z-http/core_ext/bytesize.rb +6 -0
  25. data/lib/z-http/decoders.rb +254 -0
  26. data/lib/z-http/http_client_options.rb +51 -0
  27. data/lib/z-http/http_connection.rb +214 -0
  28. data/lib/z-http/http_connection_options.rb +44 -0
  29. data/lib/z-http/http_encoding.rb +142 -0
  30. data/lib/z-http/http_header.rb +83 -0
  31. data/lib/z-http/http_status_codes.rb +57 -0
  32. data/lib/z-http/middleware/digest_auth.rb +112 -0
  33. data/lib/z-http/middleware/json_response.rb +15 -0
  34. data/lib/z-http/middleware/oauth.rb +40 -0
  35. data/lib/z-http/middleware/oauth2.rb +28 -0
  36. data/lib/z-http/multi.rb +57 -0
  37. data/lib/z-http/request.rb +23 -0
  38. data/lib/z-http/version.rb +5 -0
  39. data/lib/z-http-request.rb +1 -0
  40. data/lib/z-http.rb +18 -0
  41. data/spec/client_spec.rb +892 -0
  42. data/spec/digest_auth_spec.rb +48 -0
  43. data/spec/dns_spec.rb +44 -0
  44. data/spec/encoding_spec.rb +49 -0
  45. data/spec/external_spec.rb +150 -0
  46. data/spec/fixtures/google.ca +16 -0
  47. data/spec/fixtures/gzip-sample.gz +0 -0
  48. data/spec/gzip_spec.rb +68 -0
  49. data/spec/helper.rb +30 -0
  50. data/spec/middleware_spec.rb +143 -0
  51. data/spec/multi_spec.rb +104 -0
  52. data/spec/pipelining_spec.rb +66 -0
  53. data/spec/redirect_spec.rb +321 -0
  54. data/spec/socksify_proxy_spec.rb +60 -0
  55. data/spec/spec_helper.rb +6 -0
  56. data/spec/ssl_spec.rb +20 -0
  57. data/spec/stallion.rb +296 -0
  58. data/spec/stub_server.rb +42 -0
  59. data/z-http-request.gemspec +33 -0
  60. metadata +248 -0
@@ -0,0 +1,28 @@
1
+ module ZMachine
2
+ module Middleware
3
+ class OAuth2
4
+ include ZMachine::HttpEncoding
5
+ attr_accessor :access_token
6
+
7
+ def initialize(opts={})
8
+ self.access_token = opts[:access_token] or raise "No :access_token provided"
9
+ end
10
+
11
+ def request(client, head, body)
12
+ uri = client.req.uri.dup
13
+ update_uri! uri
14
+ client.req.set_uri uri
15
+
16
+ [head, body]
17
+ end
18
+
19
+ def update_uri!(uri)
20
+ if uri.query.nil?
21
+ uri.query = encode_param(:access_token, access_token)
22
+ else
23
+ uri.query += "&#{encode_param(:access_token, access_token)}"
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,57 @@
1
+ module ZMachine
2
+
3
+ # ZMachine based Multi request client, based on a streaming HTTPRequest class,
4
+ # which allows you to open multiple parallel connections and return only when all
5
+ # of them finish. (i.e. ideal for parallelizing workloads)
6
+ #
7
+ # == Example
8
+ #
9
+ # ZMachine.run {
10
+ #
11
+ # multi = ZMachine::MultiRequest.new
12
+ #
13
+ # # add multiple requests to the multi-handler
14
+ # multi.add(:a, ZMachine::HttpRequest.new('http://www.google.com/').get)
15
+ # multi.add(:b, ZMachine::HttpRequest.new('http://www.yahoo.com/').get)
16
+ #
17
+ # multi.callback {
18
+ # p multi.responses[:callback]
19
+ # p multi.responses[:errback]
20
+ #
21
+ # ZMachine.stop
22
+ # }
23
+ # }
24
+ #
25
+
26
+ class MultiRequest
27
+ include ZMachine::Deferrable
28
+
29
+ attr_reader :requests, :responses
30
+
31
+ def initialize
32
+ @requests = {}
33
+ @responses = {:callback => {}, :errback => {}}
34
+ end
35
+
36
+ def add(name, conn)
37
+ raise 'Duplicate Multi key' if @requests.key? name
38
+
39
+ @requests[name] = conn
40
+
41
+ conn.callback { @responses[:callback][name] = conn; check_progress }
42
+ conn.errback { @responses[:errback][name] = conn; check_progress }
43
+ end
44
+
45
+ def finished?
46
+ (@responses[:callback].size + @responses[:errback].size) == @requests.size
47
+ end
48
+
49
+ protected
50
+
51
+ # invoke callback if all requests have completed
52
+ def check_progress
53
+ succeed(self) if finished?
54
+ end
55
+
56
+ end
57
+ end
@@ -0,0 +1,23 @@
1
+ module ZMachine
2
+ class HttpRequest
3
+ @middleware = []
4
+
5
+ def self.new(uri, options={})
6
+ uri = uri.clone
7
+ connopt = HttpConnectionOptions.new(uri, options)
8
+
9
+ c = HttpConnection.new
10
+ c.connopts = connopt
11
+ c.uri = uri
12
+ c
13
+ end
14
+
15
+ def self.use(klass, *args, &block)
16
+ @middleware << klass.new(*args, &block)
17
+ end
18
+
19
+ def self.middleware
20
+ @middleware
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,5 @@
1
+ module ZMachine
2
+ class HttpRequest
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1 @@
1
+ require 'z-http'
data/lib/z-http.rb ADDED
@@ -0,0 +1,18 @@
1
+ require 'zmachine'
2
+ require 'addressable/uri'
3
+ require 'http/parser'
4
+
5
+ require 'base64'
6
+ require 'socket'
7
+
8
+ require 'z-http/core_ext/bytesize'
9
+ require 'z-http/http_connection'
10
+ require 'z-http/http_header'
11
+ require 'z-http/http_encoding'
12
+ require 'z-http/http_status_codes'
13
+ require 'z-http/http_client_options'
14
+ require 'z-http/http_connection_options'
15
+ require 'z-http/client'
16
+ require 'z-http/multi'
17
+ require 'z-http/request'
18
+ require 'z-http/decoders'