tmm1-em-http-request 0.1.0 → 0.1.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/README.rdoc +51 -0
- data/Rakefile +12 -4
- data/ext/buffer/em_buffer.c +6 -1
- data/lib/em-http.rb +6 -5
- data/lib/em-http/client.rb +6 -2
- data/test/test_request.rb +14 -1
- metadata +3 -3
- data/README +0 -36
data/README.rdoc
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
= EM-HTTP-Client
|
2
|
+
|
3
|
+
EventMachine based HTTP Request interface. Supports streaming response processing, uses Ragel HTTP parser.
|
4
|
+
- Simple interface for single & parallel requests via deferred callbacks
|
5
|
+
- Automatic gzip & deflate decoding
|
6
|
+
- Basic-Auth support
|
7
|
+
|
8
|
+
== Simple client example
|
9
|
+
|
10
|
+
EventMachine.run {
|
11
|
+
http = EventMachine::HttpRequest.new('http://127.0.0.1/').get :query => {'keyname' => 'value'}
|
12
|
+
|
13
|
+
http.callback {
|
14
|
+
p http.response_header.status
|
15
|
+
p http.response_header
|
16
|
+
p http.response
|
17
|
+
|
18
|
+
EventMachine.stop
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
== Multi request example
|
23
|
+
|
24
|
+
EventMachine.run {
|
25
|
+
multi = EventMachine::MultiRequest.new
|
26
|
+
|
27
|
+
# add multiple requests to the multi-handler
|
28
|
+
multi.add(EventMachine::HttpRequest.new('http://www.google.com/').get)
|
29
|
+
multi.add(EventMachine::HttpRequest.new('http://www.yahoo.com/').get)
|
30
|
+
|
31
|
+
multi.callback {
|
32
|
+
p multi.responses[:succeeded]
|
33
|
+
p multi.responses[:failed]
|
34
|
+
|
35
|
+
EventMachine.stop
|
36
|
+
}
|
37
|
+
}
|
38
|
+
|
39
|
+
== Basic-Auth example
|
40
|
+
|
41
|
+
EventMachine.run {
|
42
|
+
http = EventMachine::HttpRequest.new('http://www.website.com/').get :head => {'authorization' => ['user', 'pass']}
|
43
|
+
|
44
|
+
http.errback { failed }
|
45
|
+
http.callback {
|
46
|
+
p http.response_header
|
47
|
+
|
48
|
+
EventMachine.stop
|
49
|
+
}
|
50
|
+
}
|
51
|
+
|
data/Rakefile
CHANGED
@@ -5,6 +5,13 @@ require 'rake/gempackagetask'
|
|
5
5
|
require 'fileutils'
|
6
6
|
include FileUtils
|
7
7
|
|
8
|
+
# copied from EventMachine.
|
9
|
+
MAKE = ENV['MAKE'] || if RUBY_PLATFORM =~ /mswin/ # mingw uses make.
|
10
|
+
'nmake'
|
11
|
+
else
|
12
|
+
'make'
|
13
|
+
end
|
14
|
+
|
8
15
|
# Default Rake task is compile
|
9
16
|
task :default => :compile
|
10
17
|
|
@@ -28,7 +35,7 @@ task :ragel do
|
|
28
35
|
end
|
29
36
|
|
30
37
|
def make(makedir)
|
31
|
-
Dir.chdir(makedir) { sh
|
38
|
+
Dir.chdir(makedir) { sh MAKE }
|
32
39
|
end
|
33
40
|
|
34
41
|
def extconf(dir)
|
@@ -51,13 +58,14 @@ def setup_extension(dir, extension)
|
|
51
58
|
end
|
52
59
|
|
53
60
|
desc "Builds just the #{extension} extension"
|
54
|
-
task extension.to_sym => ["#{ext}/Makefile", ext_so ]
|
55
61
|
|
56
|
-
|
62
|
+
mf = (extension + '_makefile').to_sym
|
63
|
+
|
64
|
+
task mf do |t|
|
57
65
|
extconf "#{ext}"
|
58
66
|
end
|
59
67
|
|
60
|
-
|
68
|
+
task extension.to_sym => [mf] do
|
61
69
|
make "#{ext}"
|
62
70
|
cp ext_so, "lib"
|
63
71
|
end
|
data/ext/buffer/em_buffer.c
CHANGED
@@ -11,9 +11,14 @@
|
|
11
11
|
|
12
12
|
#include <string.h>
|
13
13
|
#include <time.h>
|
14
|
-
#include <unistd.h>
|
15
14
|
#include <errno.h>
|
16
15
|
|
16
|
+
#ifndef GetReadFile
|
17
|
+
#define FPTR_TO_FD(fptr) (fptr->fd)
|
18
|
+
#else
|
19
|
+
#define FPTR_TO_FD(fptr) (fileno(GetReadFile(fptr)))
|
20
|
+
#endif
|
21
|
+
|
17
22
|
/* Default number of bytes in each node's buffer */
|
18
23
|
#define DEFAULT_NODE_SIZE 16384
|
19
24
|
|
data/lib/em-http.rb
CHANGED
@@ -8,9 +8,10 @@ require 'rubygems'
|
|
8
8
|
require 'eventmachine'
|
9
9
|
require 'zlib'
|
10
10
|
|
11
|
-
require 'http11_client'
|
12
|
-
require 'em_buffer'
|
13
11
|
|
14
|
-
require '
|
15
|
-
require '
|
16
|
-
|
12
|
+
require File.dirname(__FILE__) + '/http11_client'
|
13
|
+
require File.dirname(__FILE__) + '/em_buffer'
|
14
|
+
|
15
|
+
require File.dirname(__FILE__) + '/em-http/client'
|
16
|
+
require File.dirname(__FILE__) + '/em-http/multi'
|
17
|
+
require File.dirname(__FILE__) + '/em-http/request'
|
data/lib/em-http/client.rb
CHANGED
@@ -94,7 +94,11 @@ module EventMachine
|
|
94
94
|
|
95
95
|
def encode_query(path, query)
|
96
96
|
return path unless query
|
97
|
-
|
97
|
+
if query.kind_of? String
|
98
|
+
return "#{path}?#{query}"
|
99
|
+
else
|
100
|
+
return path + "?" + query.map { |k, v| encode_param(k, v) }.join('&')
|
101
|
+
end
|
98
102
|
end
|
99
103
|
|
100
104
|
# URL encodes query parameters:
|
@@ -234,7 +238,7 @@ module EventMachine
|
|
234
238
|
end
|
235
239
|
|
236
240
|
def unbind
|
237
|
-
(@state == :finished) ? succeed : fail
|
241
|
+
(@state == :finished) ? succeed(self) : fail
|
238
242
|
close_connection
|
239
243
|
end
|
240
244
|
|
data/test/test_request.rb
CHANGED
@@ -54,7 +54,7 @@ describe EventMachine::HttpRequest do
|
|
54
54
|
}
|
55
55
|
end
|
56
56
|
|
57
|
-
it "should
|
57
|
+
it "should build query parameters from Hash" do
|
58
58
|
EventMachine.run {
|
59
59
|
http = EventMachine::HttpRequest.new('http://127.0.0.1:8080/').get :query => {:q => 'test'}
|
60
60
|
|
@@ -67,6 +67,19 @@ describe EventMachine::HttpRequest do
|
|
67
67
|
}
|
68
68
|
end
|
69
69
|
|
70
|
+
it "should pass query parameters string" do
|
71
|
+
EventMachine.run {
|
72
|
+
http = EventMachine::HttpRequest.new('http://127.0.0.1:8080/').get :query => "q=test"
|
73
|
+
|
74
|
+
http.errback { failed }
|
75
|
+
http.callback {
|
76
|
+
http.response_header.status.should == 200
|
77
|
+
http.response.should match(/test/)
|
78
|
+
EventMachine.stop
|
79
|
+
}
|
80
|
+
}
|
81
|
+
end
|
82
|
+
|
70
83
|
it "should encode an array of query parameters" do
|
71
84
|
EventMachine.run {
|
72
85
|
http = EventMachine::HttpRequest.new('http://127.0.0.1:8080/echo_query').get :query => {:hash => ['value1', 'value2']}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tmm1-em-http-request
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ilya Grigorik
|
@@ -34,7 +34,7 @@ extra_rdoc_files: []
|
|
34
34
|
files:
|
35
35
|
- .autotest
|
36
36
|
- LICENSE
|
37
|
-
- README
|
37
|
+
- README.rdoc
|
38
38
|
- Rakefile
|
39
39
|
- ext/buffer/em_buffer.c
|
40
40
|
- ext/buffer/extconf.rb
|
@@ -73,7 +73,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
73
73
|
version:
|
74
74
|
requirements: []
|
75
75
|
|
76
|
-
rubyforge_project:
|
76
|
+
rubyforge_project: em-http-request
|
77
77
|
rubygems_version: 1.2.0
|
78
78
|
signing_key:
|
79
79
|
specification_version: 2
|
data/README
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
EventMachine based HTTP Request interface. Supports streaming response processing / based on Zed Shaw's Ragel HTTP parser.
|
2
|
-
- Borrows a lot of good concepts from Rev's HttpClient, Curb, and other libraries.
|
3
|
-
- Offers support for single or parallel request queries & via deferred callbacks
|
4
|
-
|
5
|
-
Simple client example:
|
6
|
-
--------
|
7
|
-
|
8
|
-
EventMachine.run {
|
9
|
-
http = EventMachine::HttpRequest.new('http://127.0.0.1/').get :query => {'keyname' => 'value'}
|
10
|
-
|
11
|
-
http.callback {
|
12
|
-
p http.response_header.status
|
13
|
-
p http.response_header
|
14
|
-
p http.response
|
15
|
-
|
16
|
-
EventMachine.stop
|
17
|
-
}
|
18
|
-
}
|
19
|
-
|
20
|
-
Multi request example:
|
21
|
-
----------
|
22
|
-
|
23
|
-
EventMachine.run {
|
24
|
-
multi = EventMachine::MultiRequest.new
|
25
|
-
|
26
|
-
# add multiple requests to the multi-handler
|
27
|
-
multi.add(EventMachine::HttpRequest.new('http://www.google.com/').get)
|
28
|
-
multi.add(EventMachine::HttpRequest.new('http://www.yahoo.com/').get)
|
29
|
-
|
30
|
-
multi.callback {
|
31
|
-
p multi.responses[:succeeded]
|
32
|
-
p multi.responses[:failed]
|
33
|
-
|
34
|
-
EventMachine.stop
|
35
|
-
}
|
36
|
-
}
|