restify 1.2.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 6cb4e54249171cc430b42e94584d53a8d855dc27
4
- data.tar.gz: 021d1ef66172c7a992f7f447ffbe0ac2770421d9
2
+ SHA256:
3
+ metadata.gz: 83609cc7ae78151c15357d2400a61212e9c1a783a56d9eb2f8bb02b6e678192c
4
+ data.tar.gz: 8f95a040bf308a60be58985567fca717dff5979c418d19ad0d41d4ae62c24346
5
5
  SHA512:
6
- metadata.gz: d32a9c6b8978674f26a021f5e29618fe3c75012144697431f79033db6f4a503c0d7de39803dedb20c691c0d3feaa0965a9382de598cf9741d7c9bcb33e63292e
7
- data.tar.gz: 8b699331f7a597f3b99ead0a5fe9da59bdec2648244a802798c952cdac430d729a1297e91807657723ed43fd35a04c3b52d95ec8abf93a1364fd2a2f99140af8
6
+ metadata.gz: 0771f95f1e405ac45c00585db79575bb927e9a860dd26459401b21f0d53947ec04ccb60d4180ef44eb79a4abc05f7707b29e667cbe9af967fd6829a5a0287069
7
+ data.tar.gz: fbda92689823e54622f27dbf17f98d12048a721780ccbabb51528d893a8dfc73359807b3d3fdb58a7ec1d43561eb95df0d524334566e2672106df90882981861
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.3.0
4
+
5
+ * Improve typhoeus adapter to better utilize concurrency
6
+ * Default to new typhoeus adapter
7
+
3
8
  ## 1.2.1
4
9
 
5
10
  * Fix issue with Ruby 2.2 compatibility
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Restify
2
2
 
3
- Restify is an experimental hypermedia REST client that uses parallel, keep-alive and pipelined requests by default.
3
+ Restify is an experimental hypermedia REST client that does parallel, concurrent, keep-alive and pipelined requests by default.
4
4
 
5
5
  Restify scans Link headers and returned resource for links and relations to other resources, represented as RFC6570 URI Templates, and exposes those to the developer.
6
6
 
@@ -10,11 +10,11 @@ Restify is build upon the following libraries:
10
10
 
11
11
  * [concurrent-ruby](https://github.com/ruby-concurrency/concurrent-ruby)
12
12
  * [addressable](https://github.com/sporkmonger/addressable)
13
- * [em-http-request](https://github.com/igrigorik/em-http-request)
13
+ * [typhoeus](https://github.com/typhoeus/typhoeus)
14
14
 
15
15
  It has optional HTTP adapters using:
16
16
 
17
- * [typhoeus](https://github.com/typhoeus/typhoeus)
17
+ * [em-http-request](https://github.com/igrigorik/em-http-request)
18
18
 
19
19
  The HTTP adapters are mostly run in a background thread and may not survive mid-application forks.
20
20
 
@@ -13,9 +13,9 @@ module Restify
13
13
  }.freeze
14
14
 
15
15
  def initialize(sync: false, **options)
16
- @queue = Queue.new
17
16
  @sync = sync
18
17
  @hydra = ::Typhoeus::Hydra.new(pipelining: true, **options)
18
+ @mutex = Mutex.new
19
19
 
20
20
  start unless sync?
21
21
  end
@@ -24,17 +24,18 @@ module Restify
24
24
  @sync
25
25
  end
26
26
 
27
- def queue(request, writer)
28
- if sync?
29
- @hydra.queue convert request, writer
30
- @hydra.run
31
- else
32
- @queue.push [request, writer]
27
+ def call_native(request, writer)
28
+ @mutex.synchronize do
29
+ @hydra.queue convert(request, writer)
33
30
  end
31
+
32
+ sync? ? @hydra.run : start
34
33
  end
35
34
 
36
- def call_native(request, writer)
37
- queue request, writer
35
+ def queued?
36
+ @mutex.synchronize do
37
+ @hydra.queued_requests.any?
38
+ end
38
39
  end
39
40
 
40
41
  private
@@ -46,14 +47,11 @@ module Restify
46
47
  headers: DEFAULT_HEADERS.merge(request.headers),
47
48
  body: request.body
48
49
 
49
- req.on_complete {|response| handle(response, writer, request) }
50
- req
51
- end
52
-
53
- def handle(native_response, writer, request)
54
- writer.fulfill convert_back(native_response, request)
50
+ req.on_complete do |response|
51
+ writer.fulfill convert_back(response, request)
52
+ end
55
53
 
56
- @hydra.queue convert(*@queue.pop(true)) until @queue.empty?
54
+ req
57
55
  end
58
56
 
59
57
  def convert_back(response, request)
@@ -71,15 +69,16 @@ module Restify
71
69
  end
72
70
  end
73
71
 
74
- # rubocop:disable Metrics/MethodLength
75
72
  def start
76
- Thread.new do
73
+ thread.run
74
+ end
75
+
76
+ def thread
77
+ @thread ||= Thread.new do
77
78
  loop do
78
79
  begin
79
- while (req = convert(*@queue.pop))
80
- @hydra.queue req
81
- @hydra.run if @queue.empty?
82
- end
80
+ Thread.stop unless queued?
81
+ @hydra.run
83
82
  rescue StandardError => e
84
83
  puts "#{self.class}: #{e.message}"
85
84
  end
@@ -10,8 +10,8 @@ module Restify
10
10
 
11
11
  def adapter
12
12
  @adapter ||= begin
13
- require 'restify/adapter/em'
14
- Restify::Adapter::EM.new
13
+ require 'restify/adapter/typhoeus'
14
+ Restify::Adapter::Typhoeus.new
15
15
  end
16
16
  end
17
17
 
@@ -3,8 +3,8 @@
3
3
  module Restify
4
4
  module VERSION
5
5
  MAJOR = 1
6
- MINOR = 2
7
- PATCH = 1
6
+ MINOR = 3
7
+ PATCH = 0
8
8
  STAGE = nil
9
9
  STRING = [MAJOR, MINOR, PATCH, STAGE].reject(&:nil?).join('.').freeze
10
10
 
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: restify
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Graichen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-30 00:00:00.000000000 Z
11
+ date: 2017-11-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: concurrent-ruby
14
+ name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.0'
19
+ version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.0'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: addressable
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -39,75 +39,61 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.3'
41
41
  - !ruby/object:Gem::Dependency
42
- name: hashie
42
+ name: concurrent-ruby
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.3'
47
+ version: '1.0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3.3'
54
+ version: '1.0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rack
56
+ name: hashie
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '3.3'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '3.3'
69
69
  - !ruby/object:Gem::Dependency
70
- name: eventmachine
70
+ name: rack
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '1.2'
75
+ version: '0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: '1.2'
82
+ version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: em-http-request
84
+ name: typhoeus
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 1.1.3
89
+ version: '1.3'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 1.1.3
97
- - !ruby/object:Gem::Dependency
98
- name: activesupport
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :runtime
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
96
+ version: '1.3'
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: bundler
113
99
  requirement: !ruby/object:Gem::Requirement
@@ -185,7 +171,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
185
171
  version: '0'
186
172
  requirements: []
187
173
  rubyforge_project:
188
- rubygems_version: 2.6.14
174
+ rubygems_version: 2.7.1
189
175
  signing_key:
190
176
  specification_version: 4
191
177
  summary: An experimental hypermedia REST client.