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.
@@ -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
- }