parallel_http 0.0.1
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.
- data/lib/parallel_http.rb +43 -0
- metadata +77 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'iconv'
|
2
|
+
require 'eventmachine'
|
3
|
+
require 'em-http-request'
|
4
|
+
require 'fiber'
|
5
|
+
|
6
|
+
class ParallelHttp
|
7
|
+
def self.exec requests
|
8
|
+
results = []
|
9
|
+
if EM.reactor_running?
|
10
|
+
results = [{:error => "Have not tested this with an eventmachine reactor that is already running. Might have to change the code around a bit... I have an EM.stop in there and I know that would be bad if I shut down your reactor."}]
|
11
|
+
else
|
12
|
+
EM.run do
|
13
|
+
results = exec_inner(requests)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
results
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.exec_inner requests
|
20
|
+
results = []
|
21
|
+
request_size = requests.size
|
22
|
+
requests.each do |request|
|
23
|
+
Fiber.new do
|
24
|
+
result = self.single(request)
|
25
|
+
ic = Iconv.new('UTF-8//IGNORE', 'UTF-8')
|
26
|
+
body = ic.iconv(result.response)
|
27
|
+
results << {id: request[:id], response_code: result.response_header.status, body: body}
|
28
|
+
EM.stop if request_size == results.size
|
29
|
+
end.resume
|
30
|
+
end
|
31
|
+
results
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.single request
|
35
|
+
f = Fiber.current
|
36
|
+
# puts "making a request #{request[:url]}, #{request[:verb]}, #{request[:options]}"
|
37
|
+
http = EventMachine::HttpRequest.new(request[:url]).send(request[:verb].downcase, request[:options] || {})
|
38
|
+
http.callback { f.resume(http) }
|
39
|
+
http.errback { f.resume(http) }
|
40
|
+
result = Fiber.yield
|
41
|
+
result
|
42
|
+
end
|
43
|
+
end
|
metadata
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: parallel_http
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Rodney Carvalho
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-01-09 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: eventmachine
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.0.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.0.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: em-http-request
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 1.0.3
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.0.3
|
46
|
+
description: Make parallel http calls using EventMachine under the hood
|
47
|
+
email: rcarvalho@atlantistech.com
|
48
|
+
executables: []
|
49
|
+
extensions: []
|
50
|
+
extra_rdoc_files: []
|
51
|
+
files:
|
52
|
+
- lib/parallel_http.rb
|
53
|
+
homepage: http://rubygems.org/gems/parallel_http
|
54
|
+
licenses: []
|
55
|
+
post_install_message:
|
56
|
+
rdoc_options: []
|
57
|
+
require_paths:
|
58
|
+
- lib
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
61
|
+
requirements:
|
62
|
+
- - ! '>='
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '0'
|
65
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ! '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
requirements: []
|
72
|
+
rubyforge_project:
|
73
|
+
rubygems_version: 1.8.24
|
74
|
+
signing_key:
|
75
|
+
specification_version: 3
|
76
|
+
summary: Parallel HTTP calls
|
77
|
+
test_files: []
|