em-http-server 0.1.6 → 0.1.7

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 530fe32e11627dd6b6889f1dfe18ff14f09b27fc
4
+ data.tar.gz: e7b4dc4ff5fb5391a6c1378bb28278f75b4cd593
5
+ SHA512:
6
+ metadata.gz: 7cc141f2eb7be20f0c24b89391927406fef09abd02557150bb8757e973e713611bf13f8dce0c760afadaf36f45085299f54bed6ca421ceadaebcb74f670bc829
7
+ data.tar.gz: 90d4f5ae859931153636e4bd00fd157a1526b5a1046a625eac48b32f407879862b027a8fd24fd9a8e8eed7abded55cf1449bea41ae407370d7a7da152aa7babd
data/README.md CHANGED
@@ -21,7 +21,7 @@ Or install it yourself as:
21
21
  require 'eventmachine'
22
22
  require 'em-http-server'
23
23
 
24
- class HTTPHandler < EM::Http::Server
24
+ class HTTPHandler < EM::HttpServer::Server
25
25
 
26
26
  def process_http_request
27
27
  puts @http_request_method
@@ -11,7 +11,7 @@ Gem::Specification.new do |gem|
11
11
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
12
12
  gem.name = "em-http-server"
13
13
  gem.require_paths = ["lib"]
14
- gem.version = "0.1.6"
14
+ gem.version = "0.1.7"
15
15
 
16
16
  gem.add_runtime_dependency "eventmachine"
17
17
  end
@@ -53,6 +53,7 @@ module EventMachine
53
53
 
54
54
  def initialize
55
55
  @headers = {}
56
+ @keep_connection_open = false
56
57
  end
57
58
 
58
59
  def keep_connection_open arg=true
@@ -41,11 +41,11 @@ module EventMachine
41
41
  def parse_first_header(line)
42
42
 
43
43
  # split the line into: METHOD URI PROTOCOL
44
- # eg: GET / HTTP1/1
44
+ # eg: GET / HTTP/1.1
45
45
  parsed = line.split(' ')
46
46
 
47
47
  # a correct request has three parts
48
- send_error(400, "Bad request") unless parsed.size == 3
48
+ return bad_parsing unless parsed.size == 3
49
49
 
50
50
  @http_request_method, uri, @http_protocol = parsed
51
51
 
@@ -53,16 +53,26 @@ module EventMachine
53
53
  @http_request_uri, @http_query_string = uri.split('?')
54
54
  end
55
55
 
56
- # send back to the client an HTTP error
57
- def send_error(code, desc)
58
- string = "HTTP1/1 #{code} #{desc}\r\n"
56
+ def bad_parsing
57
+ code = 400
58
+ desc = "Bad request"
59
+ string = respond_to?(:http_error_string) ? http_error_string(code, desc) : default_error_string(code, desc)
60
+ send_error string
61
+ raise("#{code} #{desc}")
62
+ end
63
+
64
+ def default_error_string(code, desc)
65
+ string = "HTTP/1.1 #{code} #{desc}\r\n"
59
66
  string << "Connection: close\r\n"
60
67
  string << "Content-type: text/plain\r\n"
61
68
  string << "\r\n"
62
69
  string << "Detected error: HTTP code #{code}"
70
+ end
71
+
72
+ # send back to the client an HTTP error
73
+ def send_error(string)
63
74
  send_data string
64
75
  close_connection_after_writing
65
- raise("server error #{code}")
66
76
  end
67
77
 
68
78
  end
@@ -72,7 +82,7 @@ end
72
82
 
73
83
  if __FILE__ == $0
74
84
 
75
- class HTTPHandler < EM::Http::Server
85
+ class HTTPHandler < EM::HttpServer::Server
76
86
 
77
87
  def process_http_request
78
88
  puts @http_request_method
data/test/test_app.rb CHANGED
@@ -1,22 +1,13 @@
1
1
  require 'test/unit'
2
2
  require 'em-http-server'
3
3
 
4
- begin
5
- once = false
6
- require 'eventmachine'
7
- rescue LoadError => e
8
- raise e if once
9
- once = true
10
- require 'rubygems'
11
- retry
12
- end
13
-
4
+ require 'eventmachine'
14
5
 
15
6
 
16
7
  #--------------------------------------
17
8
 
18
9
  module EventMachine
19
- class HttpServer < EM::Http::Server
10
+ class HttpHandler < EM::HttpServer::Server
20
11
  def process_http_request
21
12
  send_data generate_response()
22
13
  close_connection_after_writing
@@ -47,7 +38,7 @@ EORESP
47
38
  def test_simple_get
48
39
  received_response = nil
49
40
 
50
- EventMachine::HttpServer.class_eval do
41
+ EventMachine::HttpHandler.class_eval do
51
42
  def generate_response
52
43
  TestResponse_1
53
44
  end
@@ -55,7 +46,7 @@ EORESP
55
46
 
56
47
 
57
48
  EventMachine.run do
58
- EventMachine.start_server TestHost, TestPort, EventMachine::HttpServer
49
+ EventMachine.start_server TestHost, TestPort, EventMachine::HttpHandler
59
50
  EventMachine.add_timer(1) {raise "timed out"} # make sure the test completes
60
51
 
61
52
  cb = proc do
@@ -75,7 +66,7 @@ EORESP
75
66
 
76
67
  # This frowsy-looking protocol handler allows the test harness to make some
77
68
  # its local variables visible, so we can set them here and they can be asserted later.
78
- class MyTestServer < EventMachine::HttpServer
69
+ class MyTestServer < EventMachine::HttpHandler
79
70
 
80
71
  def initialize *args
81
72
  super
@@ -251,7 +242,42 @@ EORESP
251
242
  cb = proc do
252
243
  tcp = TCPSocket.new TestHost, TestPort
253
244
  data = [
254
- "GET foo HTTP/1.1\r\n",
245
+ "GET HTTP/1.1\r\n",
246
+ "\r\n"
247
+ ].join
248
+ tcp.write data
249
+ received_response = tcp.read
250
+ end
251
+ eb = proc { EventMachine.stop }
252
+ EventMachine.defer cb, eb
253
+
254
+ EventMachine.add_timer(1) {raise "timed out"} # make sure the test completes
255
+ end
256
+
257
+ assert_equal( "HTTP/1.1 400 Bad request\r\nConnection: close\r\nContent-type: text/plain\r\n\r\nDetected error: HTTP code 400", received_response )
258
+ end
259
+
260
+ def test_invalid_custom
261
+ received_response = nil
262
+
263
+ MyTestServer.class_eval do
264
+ def http_error_string(code, desc)
265
+ return 'custom'
266
+ end
267
+ end
268
+
269
+ EventMachine.run do
270
+ EventMachine.start_server(TestHost, TestPort, MyTestServer) do |conn|
271
+ conn.instance_eval do
272
+ @assertions = proc do
273
+ end
274
+ end
275
+ end
276
+
277
+ cb = proc do
278
+ tcp = TCPSocket.new TestHost, TestPort
279
+ data = [
280
+ "GET HTTP/1.1\r\n",
255
281
  "\r\n"
256
282
  ].join
257
283
  tcp.write data
@@ -263,7 +289,7 @@ EORESP
263
289
  EventMachine.add_timer(1) {raise "timed out"} # make sure the test completes
264
290
  end
265
291
 
266
- assert_equal( "HTTP1/1 400 Bad request\r\nConnection: close\r\nContent-type: text/plain\r\n\r\nDetected error: HTTP code 400", received_response )
292
+ assert_equal( "custom", received_response )
267
293
  end
268
294
 
269
295
 
@@ -1,16 +1,7 @@
1
1
  require 'test/unit'
2
2
  require 'em-http-server'
3
3
 
4
- begin
5
- once = false
6
- require 'eventmachine'
7
- rescue LoadError => e
8
- raise e if once
9
- once = true
10
- require 'rubygems'
11
- retry
12
- end
13
-
4
+ require 'eventmachine'
14
5
 
15
6
  #--------------------------------------
16
7
 
@@ -1,16 +1,7 @@
1
1
  require 'test/unit'
2
2
  require 'em-http-server'
3
3
 
4
- begin
5
- once = false
6
- require 'eventmachine'
7
- rescue LoadError => e
8
- raise e if once
9
- once = true
10
- require 'rubygems'
11
- retry
12
- end
13
-
4
+ require 'eventmachine'
14
5
 
15
6
  #--------------------------------------
16
7
 
metadata CHANGED
@@ -1,30 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: em-http-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
5
- prerelease:
4
+ version: 0.1.7
6
5
  platform: ruby
7
6
  authors:
8
7
  - alor
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-04-19 00:00:00.000000000 Z
11
+ date: 2013-11-26 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: eventmachine
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  description: Simple http server for eventmachine
@@ -49,30 +46,28 @@ files:
49
46
  - test/test_response.rb
50
47
  homepage: https://github.com/alor/em-http-server
51
48
  licenses: []
49
+ metadata: {}
52
50
  post_install_message:
53
51
  rdoc_options: []
54
52
  require_paths:
55
53
  - lib
56
54
  required_ruby_version: !ruby/object:Gem::Requirement
57
- none: false
58
55
  requirements:
59
- - - ! '>='
56
+ - - '>='
60
57
  - !ruby/object:Gem::Version
61
58
  version: '0'
62
59
  required_rubygems_version: !ruby/object:Gem::Requirement
63
- none: false
64
60
  requirements:
65
- - - ! '>='
61
+ - - '>='
66
62
  - !ruby/object:Gem::Version
67
63
  version: '0'
68
64
  requirements: []
69
65
  rubyforge_project:
70
- rubygems_version: 1.8.25
66
+ rubygems_version: 2.0.6
71
67
  signing_key:
72
- specification_version: 3
68
+ specification_version: 4
73
69
  summary: Simple http server for eventmachine with the same interface as evma_httpserver
74
70
  test_files:
75
71
  - test/test_app.rb
76
72
  - test/test_delegated.rb
77
73
  - test/test_response.rb
78
- has_rdoc: