restify 0.1.0.1.b17 → 0.1.0.1.b18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +8 -8
  2. data/lib/restify/adapter.rb +89 -38
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NjllYTM4YTdlZjAzM2ZkODBlMzgzOWNhMGIyZGE4MDAzNDFmMmQzYw==
4
+ NTY0OWIxYmVlNTE1NzRlZGE3M2QwMTkxNzVjOTJjY2QwMWNkMGNlYw==
5
5
  data.tar.gz: !binary |-
6
- OGYwZjFmOWY1Y2FjY2Q2OGU2YTljZjM2MzZmMTlmNmFjMWVjZDI5ZA==
6
+ ZTJkMTE4MzczOTg2N2VjOTY2MTQ4MzgxMDIzYmYwNjQ1NTM4OWIwYQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YzRlYWM0ODMwZjY5ZTk3ZmRkMDk5NzM1OGJjYzI0ZDIwOGU4NzU5ODE2MTMy
10
- YmM4NGM5OWY5NjkxNTExODdhMjg5ZDcwYzk0MjJhMGQxN2Y5MjE3Yzg0NzNm
11
- NTBjMzFlMmM0M2FkNGUzMGRmY2Y0MzVkZGFiMTQ1ZGQ1Mzc1M2E=
9
+ ZjljMDFlY2MzMjI3OTg3ZTgyOTRhZWU5ZDE3M2RjMzE5M2JlOWZiYWU0NjI5
10
+ Mzk1MjVhNzU3MjJiZDEzN2JhODczYzY0MDI0N2ZmNjkwMTQ0NjM1YzViNjQ1
11
+ N2VjMjc5NmNmMGM1MTRhZTliYWM2ZTdhZTVlZmI0NjAxMjc2MWU=
12
12
  data.tar.gz: !binary |-
13
- NTBmY2ZmOTdmM2ZlZjQ2ODc2YmZmMTIxZThlMjIyNzQyZTk1NmRhMzMxY2Q2
14
- MjhhZDZkNGVmMDc5Yzc4MjU2MWU1NTE1OTQxODJjZjgzYTI0OGVmODJjZWVj
15
- MjYzZmE4Y2Q1MzU3N2RlODYwM2JiNDM2MTQ0NmQyZjllYjliNDc=
13
+ NjIyMWY3ZGEwY2I1N2I1MWZhYzljMWZiYTkxY2Q4Zjk1ZDJmNWQxMTZhOTUx
14
+ OGVlYTg3NzI3ZjViNWM2NDhiZTRkZDFlY2MzMzcxOGIzOWEwMTRmYjgyZDNl
15
+ OTI0MDdhOTI2MjU1MmQ3NWRmMmIzZjhmMjQ4NDU0ZWU4YzRhMWE=
@@ -6,35 +6,103 @@ module Restify
6
6
  module Adapter
7
7
  #
8
8
  class EM
9
+ class Connection
10
+ class << self
11
+ def open(uri)
12
+ connections[uri.origin] ||= new uri.origin
13
+ end
9
14
 
10
- def call(request)
11
- Obligation.create do |w|
12
- next_tick do
13
- conn = ConnectionPool.get(request.uri)
14
- req = conn.send request.method.downcase,
15
- keepalive: true,
16
- redirects: 3,
17
- path: request.uri.normalized_path,
18
- query: request.uri.normalized_query,
19
- body: request.body,
20
- head: request.headers
21
-
22
- req.callback do
23
- w.fulfill Response.new(
24
- request,
25
- req.response_header.status,
26
- req.response_header,
27
- req.response
28
- )
15
+ def connections
16
+ @connections ||= {}
17
+ end
18
+ end
19
+
20
+ attr_reader :origin
21
+
22
+ def initialize(origin)
23
+ @origin = origin
24
+ @pipeline = true
25
+ end
26
+
27
+ def requests
28
+ @requests ||= []
29
+ end
30
+
31
+ def call(request, writer)
32
+ requests << [request, writer]
33
+ process_next if requests.size == 1
34
+ end
35
+
36
+ def connection
37
+ @connection ||= EventMachine::HttpRequest.new(origin)
38
+ end
39
+
40
+ def pipeline?
41
+ @pipeline
42
+ end
43
+
44
+ def process_next
45
+ return if requests.empty?
46
+
47
+ request, writer = pipeline? ? requests.shift : requests.first
48
+ req = connection.send request.method.downcase,
49
+ keepalive: true,
50
+ redirects: 3,
51
+ path: request.uri.normalized_path,
52
+ query: request.uri.normalized_query,
53
+ body: request.body,
54
+ head: request.headers
55
+
56
+ # puts "REQUEST: #{request} #{pipeline? ? 'w/' : 'w/o'} pipelining"
57
+
58
+ req.callback do
59
+ # puts "SUCCESS: #{request}"
60
+ requests.shift unless pipeline?
61
+
62
+ writer.fulfill Response.new(
63
+ request,
64
+ req.response_header.status,
65
+ req.response_header,
66
+ req.response
67
+ )
68
+
69
+ if req.response_header['CONNECTION'] == 'close'
70
+ @connection = nil
71
+ @pipeline = false
29
72
  end
30
73
 
31
- req.errback do
32
- w.reject RuntimeError.new
74
+ process_next
75
+ end
76
+
77
+ req.errback do
78
+ # puts "ERROR: #{request}"
79
+ @connection = nil
80
+
81
+ if pipeline?
82
+ EventMachine.next_tick do
83
+ @pipeline = false
84
+ call request, writer
85
+ end
86
+ else
87
+ begin
88
+ raise RuntimeError.new \
89
+ "(#{req.response_header.status}) #{req.error}"
90
+ rescue => e
91
+ writer.reject e
92
+ end
33
93
  end
34
94
  end
35
95
  end
36
96
  end
37
97
 
98
+ def call(request)
99
+ Obligation.create do |writer|
100
+ next_tick do
101
+ Connection.open(request.uri).call(request, writer)
102
+ end
103
+ end
104
+ end
105
+
38
106
  private
39
107
 
40
108
  def next_tick(&block)
@@ -52,23 +120,6 @@ module Restify
52
120
  end
53
121
  end unless EventMachine.reactor_running?
54
122
  end
55
-
56
- #
57
- class ConnectionPool
58
- class << self
59
- #
60
- def get(uri)
61
- connections[uri.origin] ||= begin
62
- EventMachine::HttpRequest.new(uri.origin)
63
- end
64
- end
65
-
66
- #
67
- def connections
68
- @connections ||= {}
69
- end
70
- end
71
- end
72
123
  end
73
124
  end
74
125
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: restify
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.1.b17
4
+ version: 0.1.0.1.b18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Graichen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-06 00:00:00.000000000 Z
11
+ date: 2014-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: obligation