tmm1-em-http-request 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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 'make' }
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
- file "#{ext}/Makefile" => ["#{ext}/extconf.rb"] do
62
+ mf = (extension + '_makefile').to_sym
63
+
64
+ task mf do |t|
57
65
  extconf "#{ext}"
58
66
  end
59
67
 
60
- file ext_so => ext_files do
68
+ task extension.to_sym => [mf] do
61
69
  make "#{ext}"
62
70
  cp ext_so, "lib"
63
71
  end
@@ -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
 
@@ -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 'em-http/client'
15
- require 'em-http/multi'
16
- require 'em-http/request'
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'
@@ -94,7 +94,11 @@ module EventMachine
94
94
 
95
95
  def encode_query(path, query)
96
96
  return path unless query
97
- path + "?" + query.map { |k, v| encode_param(k, v) }.join('&')
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
 
@@ -54,7 +54,7 @@ describe EventMachine::HttpRequest do
54
54
  }
55
55
  end
56
56
 
57
- it "should pass query parameters" do
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.0
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
- }