em-rest-client 0.0.1 → 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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +9 -1
- data/CHANGELOG.md +9 -0
- data/{Gemfile → Gemfile1} +2 -0
- data/Gemfile2 +5 -0
- data/em-rest-client.gemspec +3 -3
- data/lib/em-rest-client.rb +2 -1
- data/lib/em-rest-client/configuration.rb +11 -0
- data/lib/em-rest-client/em_http_request.rb +2 -107
- data/lib/em-rest-client/em_http_request/base.rb +114 -0
- data/lib/em-rest-client/em_http_request/v1.rb +18 -0
- data/lib/em-rest-client/em_http_request/v2.rb +19 -0
- data/lib/em-rest-client/request.rb +22 -0
- metadata +16 -9
- data/lib/em-rest-client/rest_client.rb +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '06104576379630975ec5aaab0e871ed05e0e2548'
|
4
|
+
data.tar.gz: d864b33a587822a8e583ad01376f3fc4385af69e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e1a3d562a9fa9a5021ec1c7c9efdf8883e70a9385f1f744f7dfd7a36a592d72cd089f72f4c4d016fbe6d1c5ef1e4ecf8c47a8de510e9c1dcbf7ebd333025ab5
|
7
|
+
data.tar.gz: a777f0815fb079d4b0b3096327eea9651cbbbc795d0dc692c3e7fc584ae83fcd2cfee38991f9439028267135eb0b490c36a3b6d9674a84f8ffe7371ce8c2b861
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/CHANGELOG.md
ADDED
data/{Gemfile → Gemfile1}
RENAMED
data/Gemfile2
ADDED
data/em-rest-client.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "em-rest-client"
|
7
|
-
spec.version = "0.0
|
7
|
+
spec.version = "0.1.0"
|
8
8
|
spec.authors = ["Andriy Yanko"]
|
9
9
|
spec.email = ["andriy.yanko@railsware.com"]
|
10
10
|
|
@@ -17,11 +17,11 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
|
-
spec.add_development_dependency "rest-client", "
|
20
|
+
spec.add_development_dependency "rest-client", ">= 1.8"
|
21
21
|
spec.add_development_dependency "em-http-request", "~> 1.1"
|
22
22
|
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.9"
|
24
24
|
spec.add_development_dependency "rake", "~> 10.0"
|
25
25
|
spec.add_development_dependency "rspec", "~> 3.4.0"
|
26
|
-
spec.add_development_dependency "webmock", "~>
|
26
|
+
spec.add_development_dependency "webmock", "~> 3.0"
|
27
27
|
end
|
data/lib/em-rest-client.rb
CHANGED
@@ -1,107 +1,2 @@
|
|
1
|
-
require 'em-
|
2
|
-
require
|
3
|
-
|
4
|
-
module RestClient
|
5
|
-
class EmHttpRequest < Request
|
6
|
-
|
7
|
-
def initialize(args)
|
8
|
-
raise ArgumentError, ':block_response option is not supported' if args[:block_response]
|
9
|
-
super(args)
|
10
|
-
end
|
11
|
-
|
12
|
-
def execute(&block)
|
13
|
-
uri = parse_url_with_auth(url)
|
14
|
-
connection = build_connection(uri)
|
15
|
-
client = transmit(connection, &block)
|
16
|
-
raise client.error if client.error
|
17
|
-
net_http_response = build_net_http_response(client)
|
18
|
-
process_result(net_http_response, &block)
|
19
|
-
ensure
|
20
|
-
payload.close if payload
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def transmit(connection, &block)
|
26
|
-
client = nil
|
27
|
-
if EM.reactor_running?
|
28
|
-
client = sync_transmit(connection, &block)
|
29
|
-
else
|
30
|
-
EM.run do
|
31
|
-
Fiber.new do
|
32
|
-
client = sync_transmit(connection, &block)
|
33
|
-
EM.stop
|
34
|
-
end.resume
|
35
|
-
end
|
36
|
-
end
|
37
|
-
client
|
38
|
-
end
|
39
|
-
|
40
|
-
def sync_transmit(connection, &block)
|
41
|
-
client = build_client(connection)
|
42
|
-
if client.error
|
43
|
-
client
|
44
|
-
else
|
45
|
-
fiber = Fiber.current
|
46
|
-
client.callback { fiber.resume(client) }
|
47
|
-
client.errback { fiber.resume(client) }
|
48
|
-
Fiber.yield
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def build_connection(uri)
|
53
|
-
uri = uri.dup
|
54
|
-
uri.user = nil
|
55
|
-
uri.password = nil
|
56
|
-
EM::HttpRequest.new(uri, build_connection_options)
|
57
|
-
end
|
58
|
-
|
59
|
-
def build_client(connection)
|
60
|
-
connection.setup_request(method, build_request_options)
|
61
|
-
end
|
62
|
-
|
63
|
-
def build_connection_options
|
64
|
-
options = {}
|
65
|
-
options[:connect_timeout] = open_timeout if open_timeout
|
66
|
-
options[:inactivity_timeout] = timeout if timeout
|
67
|
-
if RestClient.proxy
|
68
|
-
proxy_uri = URI.parse(RestClient.proxy)
|
69
|
-
options[:proxy] = {
|
70
|
-
host: proxy_uri.host,
|
71
|
-
port: proxy_uri.port,
|
72
|
-
authorization: [proxy_uri.user, proxy_uri.password]
|
73
|
-
}
|
74
|
-
end
|
75
|
-
options
|
76
|
-
end
|
77
|
-
|
78
|
-
def build_request_options
|
79
|
-
options = {}
|
80
|
-
options[:decoding] = false
|
81
|
-
options[:head] = processed_headers
|
82
|
-
if user
|
83
|
-
options[:head]['authorization'] = [user, password]
|
84
|
-
end
|
85
|
-
options[:body] = payload.to_s
|
86
|
-
options
|
87
|
-
end
|
88
|
-
|
89
|
-
def build_net_http_response(client)
|
90
|
-
klass = Net::HTTPResponse.send(
|
91
|
-
:response_class,
|
92
|
-
client.response_header.status.to_s
|
93
|
-
)
|
94
|
-
response = klass.new(
|
95
|
-
client.response_header.http_version,
|
96
|
-
client.response_header.status.to_s,
|
97
|
-
client.response_header.http_reason
|
98
|
-
)
|
99
|
-
client.response_header.raw.each do |k, v|
|
100
|
-
response.add_field(k, v)
|
101
|
-
end
|
102
|
-
response.body = client.response
|
103
|
-
response.instance_variable_set :@read, true
|
104
|
-
response
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
1
|
+
require 'em-rest-client/em_http_request/base'
|
2
|
+
require "em-rest-client/em_http_request/v#{RestClient::VERSION.to_i}"
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require 'em-http'
|
2
|
+
require 'fiber'
|
3
|
+
|
4
|
+
module RestClient
|
5
|
+
class EmHttpRequest < Request
|
6
|
+
|
7
|
+
def initialize(args)
|
8
|
+
raise ArgumentError, ':block_response option is not supported' if args[:block_response]
|
9
|
+
super(args)
|
10
|
+
end
|
11
|
+
|
12
|
+
def execute(&block)
|
13
|
+
uri = parse_url_with_auth(url)
|
14
|
+
connection = build_connection(uri)
|
15
|
+
client = transmit(connection, &block)
|
16
|
+
raise client.error if client.error
|
17
|
+
net_http_response = build_net_http_response(client)
|
18
|
+
process_result(net_http_response, &block)
|
19
|
+
ensure
|
20
|
+
payload.close if payload
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def transmit(connection, &block)
|
26
|
+
client = nil
|
27
|
+
if EM.reactor_running?
|
28
|
+
client = sync_transmit(connection, &block)
|
29
|
+
else
|
30
|
+
EM.run do
|
31
|
+
Fiber.new do
|
32
|
+
client = sync_transmit(connection, &block)
|
33
|
+
EM.stop
|
34
|
+
end.resume
|
35
|
+
end
|
36
|
+
end
|
37
|
+
client
|
38
|
+
end
|
39
|
+
|
40
|
+
def sync_transmit(connection, &block)
|
41
|
+
client = build_client(connection)
|
42
|
+
if client.error
|
43
|
+
client
|
44
|
+
else
|
45
|
+
fiber = Fiber.current
|
46
|
+
client.callback { fiber.resume(client) }
|
47
|
+
client.errback { fiber.resume(client) }
|
48
|
+
Fiber.yield
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def build_connection(uri)
|
53
|
+
uri = uri.dup
|
54
|
+
uri.user = nil
|
55
|
+
uri.password = nil
|
56
|
+
EM::HttpRequest.new(uri, build_connection_options)
|
57
|
+
end
|
58
|
+
|
59
|
+
def build_client(connection)
|
60
|
+
connection.setup_request(method, build_request_options)
|
61
|
+
end
|
62
|
+
|
63
|
+
def build_connection_options
|
64
|
+
options = {}
|
65
|
+
|
66
|
+
if connect_timeout = build_connect_timeout
|
67
|
+
options[:connect_timeout] = connect_timeout
|
68
|
+
end
|
69
|
+
|
70
|
+
if inactivity_timeout = build_inactivity_timeout
|
71
|
+
options[:inactivity_timeout] = inactivity_timeout
|
72
|
+
end
|
73
|
+
|
74
|
+
if proxy_uri = build_proxy_uri
|
75
|
+
options[:proxy] = {
|
76
|
+
host: proxy_uri.host,
|
77
|
+
port: proxy_uri.port,
|
78
|
+
authorization: [proxy_uri.user, proxy_uri.password]
|
79
|
+
}
|
80
|
+
end
|
81
|
+
|
82
|
+
options
|
83
|
+
end
|
84
|
+
|
85
|
+
def build_request_options
|
86
|
+
options = {}
|
87
|
+
options[:decoding] = false
|
88
|
+
options[:head] = processed_headers
|
89
|
+
if user
|
90
|
+
options[:head]['authorization'] = [user, password]
|
91
|
+
end
|
92
|
+
options[:body] = payload.to_s
|
93
|
+
options
|
94
|
+
end
|
95
|
+
|
96
|
+
def build_net_http_response(client)
|
97
|
+
klass = Net::HTTPResponse.send(
|
98
|
+
:response_class,
|
99
|
+
client.response_header.status.to_s
|
100
|
+
)
|
101
|
+
response = klass.new(
|
102
|
+
client.response_header.http_version,
|
103
|
+
client.response_header.status.to_s,
|
104
|
+
client.response_header.http_reason
|
105
|
+
)
|
106
|
+
client.response_header.raw.each do |k, v|
|
107
|
+
response.add_field(k, v)
|
108
|
+
end
|
109
|
+
response.body = client.response
|
110
|
+
response.instance_variable_set :@read, true
|
111
|
+
response
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
RestClient::EmHttpRequest.class_eval do
|
2
|
+
|
3
|
+
private
|
4
|
+
|
5
|
+
def build_connect_timeout
|
6
|
+
open_timeout
|
7
|
+
end
|
8
|
+
|
9
|
+
def build_inactivity_timeout
|
10
|
+
timeout
|
11
|
+
end
|
12
|
+
|
13
|
+
def build_proxy_uri
|
14
|
+
return unless RestClient.proxy
|
15
|
+
URI.parse(RestClient.proxy)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
RestClient::EmHttpRequest.class_eval do
|
2
|
+
|
3
|
+
private
|
4
|
+
|
5
|
+
alias_method :parse_url_with_auth, :parse_url_with_auth!
|
6
|
+
|
7
|
+
def build_connect_timeout
|
8
|
+
open_timeout
|
9
|
+
end
|
10
|
+
|
11
|
+
def build_inactivity_timeout
|
12
|
+
read_timeout
|
13
|
+
end
|
14
|
+
|
15
|
+
def build_proxy_uri
|
16
|
+
proxy_uri
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module RestClient
|
2
|
+
class Request
|
3
|
+
class << self
|
4
|
+
def execute(args, &block)
|
5
|
+
adapter_name = args.fetch(:adapter, RestClient.adapter)
|
6
|
+
klass = get_adapter_klass(adapter_name)
|
7
|
+
klass.new(args).execute(&block)
|
8
|
+
end
|
9
|
+
|
10
|
+
def get_adapter_klass(name)
|
11
|
+
case name
|
12
|
+
when :net_http
|
13
|
+
Request
|
14
|
+
when :em_http
|
15
|
+
EmHttpRequest
|
16
|
+
else
|
17
|
+
raise NotImplementedError, "Unsupported adapter: #{adapter.inspect}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
metadata
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: em-rest-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andriy Yanko
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-09-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.8'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.8'
|
27
27
|
- !ruby/object:Gem::Dependency
|
@@ -86,14 +86,14 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '3.0'
|
90
90
|
type: :development
|
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: '
|
96
|
+
version: '3.0'
|
97
97
|
description:
|
98
98
|
email:
|
99
99
|
- andriy.yanko@railsware.com
|
@@ -104,7 +104,9 @@ files:
|
|
104
104
|
- ".gitignore"
|
105
105
|
- ".rspec"
|
106
106
|
- ".travis.yml"
|
107
|
-
-
|
107
|
+
- CHANGELOG.md
|
108
|
+
- Gemfile1
|
109
|
+
- Gemfile2
|
108
110
|
- LICENSE
|
109
111
|
- README.md
|
110
112
|
- Rakefile
|
@@ -112,8 +114,12 @@ files:
|
|
112
114
|
- bin/setup
|
113
115
|
- em-rest-client.gemspec
|
114
116
|
- lib/em-rest-client.rb
|
117
|
+
- lib/em-rest-client/configuration.rb
|
115
118
|
- lib/em-rest-client/em_http_request.rb
|
116
|
-
- lib/em-rest-client/
|
119
|
+
- lib/em-rest-client/em_http_request/base.rb
|
120
|
+
- lib/em-rest-client/em_http_request/v1.rb
|
121
|
+
- lib/em-rest-client/em_http_request/v2.rb
|
122
|
+
- lib/em-rest-client/request.rb
|
117
123
|
homepage: https://github.com/railsware/em-rest-client
|
118
124
|
licenses:
|
119
125
|
- MIT
|
@@ -134,8 +140,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
134
140
|
version: '0'
|
135
141
|
requirements: []
|
136
142
|
rubyforge_project:
|
137
|
-
rubygems_version: 2.
|
143
|
+
rubygems_version: 2.6.11
|
138
144
|
signing_key:
|
139
145
|
specification_version: 4
|
140
146
|
summary: EventMachine::HttpRequest adapter for HTTP REST client
|
141
147
|
test_files: []
|
148
|
+
has_rdoc:
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'rest_client'
|
2
|
-
|
3
|
-
module RestClient
|
4
|
-
class << self
|
5
|
-
attr_accessor :adapter
|
6
|
-
end
|
7
|
-
|
8
|
-
class Request
|
9
|
-
class << self
|
10
|
-
def execute(args, &block)
|
11
|
-
adapter = args.fetch(:adapter, RestClient.adapter)
|
12
|
-
klass =
|
13
|
-
case adapter
|
14
|
-
when :net_http
|
15
|
-
Request
|
16
|
-
when :em_http
|
17
|
-
EmHttpRequest
|
18
|
-
else
|
19
|
-
raise NotImplementedError, "Unsupported adapter: #{adapter.inspect}"
|
20
|
-
end
|
21
|
-
klass.new(args).execute(&block)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
RestClient.adapter = :net_http
|