serverside 0.2.5 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. data/CHANGELOG +10 -0
  2. data/README +3 -3
  3. data/Rakefile +4 -4
  4. data/bin/serverside +4 -4
  5. data/doc/rdoc/classes/Daemon.html +4 -4
  6. data/doc/rdoc/classes/ServerSide.html +14 -74
  7. data/doc/rdoc/classes/ServerSide/Application.html +13 -13
  8. data/doc/rdoc/classes/ServerSide/{Connection.html → HTTP.html} +12 -18
  9. data/doc/rdoc/classes/ServerSide/HTTP/Connection.html +200 -0
  10. data/doc/rdoc/classes/ServerSide/{Connection → HTTP}/Const.html +6 -6
  11. data/doc/rdoc/classes/ServerSide/{Connection/Base.html → HTTP/Request.html} +213 -164
  12. data/doc/rdoc/classes/ServerSide/{Server.html → HTTP/Server.html} +22 -22
  13. data/doc/rdoc/classes/ServerSide/Router.html +496 -0
  14. data/doc/rdoc/classes/ServerSide/StaticFiles.html +31 -30
  15. data/doc/rdoc/classes/ServerSide/Template.html +12 -12
  16. data/doc/rdoc/created.rid +1 -1
  17. data/doc/rdoc/files/CHANGELOG.html +22 -4
  18. data/doc/rdoc/files/COPYING.html +1 -1
  19. data/doc/rdoc/files/README.html +4 -4
  20. data/doc/rdoc/files/lib/serverside/application_rb.html +1 -1
  21. data/doc/rdoc/files/lib/serverside/cluster_rb.html +1 -1
  22. data/doc/rdoc/files/lib/serverside/connection_rb.html +1 -1
  23. data/doc/rdoc/files/lib/serverside/core_ext_rb.html +1 -1
  24. data/doc/rdoc/files/lib/serverside/daemon_rb.html +1 -1
  25. data/doc/rdoc/files/lib/serverside/request_rb.html +101 -0
  26. data/doc/rdoc/files/lib/serverside/routing_rb.html +1 -1
  27. data/doc/rdoc/files/lib/serverside/server_rb.html +1 -1
  28. data/doc/rdoc/files/lib/serverside/static_rb.html +1 -1
  29. data/doc/rdoc/files/lib/serverside/template_rb.html +1 -1
  30. data/doc/rdoc/files/lib/serverside_rb.html +1 -1
  31. data/doc/rdoc/fr_class_index.html +6 -5
  32. data/doc/rdoc/fr_file_index.html +1 -0
  33. data/doc/rdoc/fr_method_index.html +31 -31
  34. data/lib/serverside/application.rb +1 -1
  35. data/lib/serverside/connection.rb +12 -141
  36. data/lib/serverside/request.rb +150 -0
  37. data/lib/serverside/routing.rb +117 -126
  38. data/lib/serverside/server.rb +13 -12
  39. data/lib/serverside/static.rb +1 -1
  40. data/test/functional/primitive_static_server_test.rb +3 -3
  41. data/test/functional/routing_server.rb +1 -1
  42. data/test/functional/routing_server_test.rb +1 -1
  43. data/test/functional/static_profile.rb +1 -1
  44. data/test/functional/static_server_test.rb +2 -2
  45. data/test/unit/connection_test.rb +30 -224
  46. data/test/unit/request_test.rb +248 -0
  47. data/test/unit/routing_test.rb +4 -4
  48. data/test/unit/server_test.rb +10 -8
  49. data/test/unit/static_test.rb +1 -1
  50. metadata +61 -56
  51. data/doc/rdoc/classes/ServerSide/Connection/Router.html +0 -493
@@ -0,0 +1,248 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+ require 'stringio'
3
+
4
+ class RequestTest < Test::Unit::TestCase
5
+ class DummyConnection
6
+ attr_reader :opened
7
+
8
+ def initialize
9
+ @opened = true
10
+ end
11
+
12
+ def close
13
+ @opened = false
14
+ end
15
+ end
16
+
17
+ class DummyRequest2 < ServerSide::HTTP::Request
18
+ attr_accessor :count
19
+
20
+ def parse
21
+ @count = 1
22
+ end
23
+
24
+ def respond
25
+ @count += 1
26
+ @persistent = @count < 2
27
+ end
28
+ end
29
+
30
+ def test_process
31
+ r = DummyRequest2.new(nil)
32
+ sleep 0.2
33
+ assert_equal false, r.process
34
+ assert_equal 2, r.count
35
+ assert_equal false, r.persistent
36
+ end
37
+
38
+ class DummyRequest3 < ServerSide::HTTP::Request
39
+ attr_accessor :parse_result, :respond_result
40
+ def parse; @parse_result; end
41
+ def respond; @respond_result; end
42
+ end
43
+
44
+ class ServerSide::HTTP::Request
45
+ attr_writer :conn, :persistent
46
+ end
47
+
48
+ def test_process_result
49
+ r = DummyRequest3.new(nil)
50
+ r.parse_result = nil
51
+ r.persistent = true
52
+ assert_equal nil, r.process
53
+ r.parse_result = nil
54
+ r.respond_result = true
55
+ assert_equal nil, r.process
56
+ r.parse_result = {}
57
+ r.respond_result = nil
58
+ r.persistent = false
59
+ assert_equal false, r.process
60
+ r.parse_result = {}
61
+ r.respond_result = true
62
+ r.persistent = true
63
+ assert_equal true, r.process
64
+ r.parse_result = {}
65
+ r.persistent = 'hello'
66
+ assert_equal 'hello', r.process
67
+ end
68
+
69
+ def test_parse_request_invalid
70
+ r = ServerSide::HTTP::Request.new(nil)
71
+ r.conn = StringIO.new('POST /test')
72
+ assert_nil r.parse
73
+ r.conn = StringIO.new('invalid string')
74
+ assert_nil r.parse
75
+ r.conn = StringIO.new('GET HTTP/1.1')
76
+ assert_nil r.parse
77
+ r.conn = StringIO.new('GET /test http')
78
+ assert_nil r.parse
79
+ r.conn = StringIO.new('GET /test HTTP')
80
+ assert_nil r.parse
81
+ r.conn = StringIO.new('GET /test HTTP/')
82
+ assert_nil r.parse
83
+ r.conn = StringIO.new('POST /test HTTP/1.1')
84
+ assert_nil r.parse
85
+ end
86
+
87
+ def test_parse_request
88
+ r = ServerSide::HTTP::Request.new(nil)
89
+ r.conn = StringIO.new("POST /test HTTP/1.1\r\n\r\n")
90
+ assert_kind_of Hash, r.parse
91
+ assert_equal :post, r.method
92
+ assert_equal '/test', r.path
93
+ assert_nil r.query
94
+ assert_equal '1.1', r.version
95
+ assert_equal({}, r.parameters)
96
+ assert_equal({}, r.headers)
97
+ assert_equal({}, r.cookies)
98
+ assert_nil r.response_cookies
99
+ assert_equal true, r.persistent
100
+
101
+ # trailing slash in path
102
+ r = ServerSide::HTTP::Request.new(nil)
103
+ r.conn = StringIO.new("POST /test/asdf/qw/?time=24%20hours HTTP/1.1\r\n\r\n")
104
+ assert_kind_of Hash, r.parse
105
+ assert_equal :post, r.method
106
+ assert_equal '/test/asdf/qw', r.path
107
+ assert_equal 'time=24%20hours', r.query
108
+ assert_equal '1.1', r.version
109
+ assert_equal({:time => '24 hours'}, r.parameters)
110
+ assert_equal({}, r.headers)
111
+ assert_equal({}, r.cookies)
112
+ assert_nil r.response_cookies
113
+ assert_equal true, r.persistent
114
+
115
+ r.conn = StringIO.new("GET /cex?q=node_state HTTP/1.1\r\n\r\n")
116
+ assert_kind_of Hash, r.parse
117
+ assert_equal :get, r.method
118
+ assert_equal '/cex', r.path
119
+ assert_equal 'q=node_state', r.query
120
+ assert_equal({:q => 'node_state'}, r.parameters)
121
+ assert_equal({}, r.cookies)
122
+ assert_nil r.response_cookies
123
+
124
+ r.conn = StringIO.new("GET / HTTP/1.0\r\n\r\n")
125
+ assert_kind_of Hash, r.parse
126
+ assert_equal false, r.persistent
127
+ assert_equal({}, r.cookies)
128
+ assert_nil r.response_cookies
129
+
130
+ r.conn = StringIO.new("GET / HTTP/invalid\r\n\r\n")
131
+ assert_kind_of Hash, r.parse
132
+ assert_equal 'invalid', r.version
133
+ assert_equal false, r.persistent
134
+
135
+ r.conn = StringIO.new("GET / HTTP/1.1\r\nConnection: close\r\n\r\n")
136
+ assert_kind_of Hash, r.parse
137
+ assert_equal '1.1', r.version
138
+ assert_equal 'close', r.headers['Connection']
139
+ assert_equal false, r.persistent
140
+
141
+ # cookies
142
+ r.conn = StringIO.new("GET / HTTP/1.1\r\nConnection: close\r\nCookie: abc=1342; def=7%2f4\r\n\r\n")
143
+ assert_kind_of Hash, r.parse
144
+ assert_equal 'abc=1342; def=7%2f4', r.headers['Cookie']
145
+ assert_equal '1342', r.cookies[:abc]
146
+ assert_equal '7/4', r.cookies[:def]
147
+ end
148
+
149
+ def test_send_response
150
+ r = ServerSide::HTTP::Request.new(nil)
151
+ # simple case
152
+ r.conn = StringIO.new
153
+ r.persistent = true
154
+ r.send_response(200, 'text', 'Hello there!')
155
+ r.conn.rewind
156
+ assert_equal "HTTP/1.1 200\r\nContent-Type: text\r\nContent-Length: 12\r\n\r\nHello there!",
157
+ r.conn.read
158
+
159
+ # include content-length
160
+ r.conn = StringIO.new
161
+ r.persistent = true
162
+ r.send_response(404, 'text/html', '<h1>404!</h1>', 10) # incorrect length
163
+ r.conn.rewind
164
+ assert_equal "HTTP/1.1 404\r\nContent-Type: text/html\r\nContent-Length: 10\r\n\r\n<h1>404!</h1>",
165
+ r.conn.read
166
+
167
+ # headers
168
+ r.conn = StringIO.new
169
+ r.persistent = true
170
+ r.send_response(404, 'text/html', '<h1>404!</h1>', nil, {'ETag' => 'xxyyzz'})
171
+ r.conn.rewind
172
+ assert_equal "HTTP/1.1 404\r\nContent-Type: text/html\r\nETag: xxyyzz\r\nContent-Length: 13\r\n\r\n<h1>404!</h1>",
173
+ r.conn.read
174
+
175
+ # no body
176
+ r.conn = StringIO.new
177
+ r.persistent = true
178
+ r.send_response(404, 'text/html', nil, nil, {'Set-Cookie' => 'abc=123'})
179
+ r.conn.rewind
180
+ assert_equal "HTTP/1.1 404\r\nConnection: close\r\nContent-Type: text/html\r\nSet-Cookie: abc=123\r\n\r\n",
181
+ r.conn.read
182
+ assert_equal false, r.persistent
183
+
184
+ # not persistent
185
+ r.conn = StringIO.new
186
+ r.persistent = false
187
+ r.send_response(200, 'text', 'Hello there!')
188
+ r.conn.rewind
189
+ assert_equal "HTTP/1.1 200\r\nConnection: close\r\nContent-Type: text\r\nContent-Length: 12\r\n\r\nHello there!",
190
+ r.conn.read
191
+
192
+ # socket error
193
+ r.conn = nil
194
+ r.persistent = true
195
+ assert_nothing_raised {r.send_response(200, 'text', 'Hello there!')}
196
+ assert_equal false, r.persistent
197
+ end
198
+
199
+ def test_stream
200
+ r = ServerSide::HTTP::Request.new(nil)
201
+ r.conn = StringIO.new
202
+ r.stream 'hey there'
203
+ r.conn.rewind
204
+ assert_equal 'hey there', r.conn.read
205
+
206
+ r.conn = StringIO.new
207
+ r.persistent = true
208
+ r.send_response(404, 'text/html', nil, nil, {'Set-Cookie' => 'abc=123'})
209
+ r.stream('hey there')
210
+ r.conn.rewind
211
+ assert_equal "HTTP/1.1 404\r\nConnection: close\r\nContent-Type: text/html\r\nSet-Cookie: abc=123\r\n\r\nhey there",
212
+ r.conn.read
213
+ end
214
+
215
+ def test_redirect
216
+ r = ServerSide::HTTP::Request.new(nil)
217
+ r.conn = StringIO.new
218
+ r.redirect('http://mau.com/132')
219
+ r.conn.rewind
220
+ assert_equal "HTTP/1.1 302\r\nConnection: close\r\nLocation: http://mau.com/132\r\n\r\n", r.conn.read
221
+
222
+ r.conn = StringIO.new
223
+ r.redirect('http://www.google.com/search?q=meaning%20of%20life', true)
224
+ r.conn.rewind
225
+ assert_equal "HTTP/1.1 301\r\nConnection: close\r\nLocation: http://www.google.com/search?q=meaning%20of%20life\r\n\r\n", r.conn.read
226
+ end
227
+
228
+ def test_set_cookie
229
+ r = ServerSide::HTTP::Request.new(nil)
230
+ r.conn = StringIO.new
231
+ t = Time.now + 360
232
+ r.set_cookie(:session, "ABCDEFG", t)
233
+ assert_equal "Set-Cookie: session=ABCDEFG; path=/; expires=#{t.rfc2822}\r\n", r.response_cookies
234
+ r.send_response(200, 'text', 'Hi!')
235
+ r.conn.rewind
236
+ assert_equal "HTTP/1.1 200\r\nConnection: close\r\nContent-Type: text\r\nSet-Cookie: session=ABCDEFG; path=/; expires=#{t.rfc2822}\r\nContent-Length: 3\r\n\r\nHi!", r.conn.read
237
+ end
238
+
239
+ def test_delete_cookie
240
+ r = ServerSide::HTTP::Request.new(nil)
241
+ r.conn = StringIO.new
242
+ r.delete_cookie(:session)
243
+ assert_equal "Set-Cookie: session=; path=/; expires=#{Time.at(0).rfc2822}\r\n", r.response_cookies
244
+ r.send_response(200, 'text', 'Hi!')
245
+ r.conn.rewind
246
+ assert_equal "HTTP/1.1 200\r\nConnection: close\r\nContent-Type: text\r\nSet-Cookie: session=; path=/; expires=#{Time.at(0).rfc2822}\r\nContent-Length: 3\r\n\r\nHi!", r.conn.read
247
+ end
248
+ end
@@ -1,7 +1,7 @@
1
1
  require File.dirname(__FILE__) + '/../test_helper'
2
2
  require 'stringio'
3
3
 
4
- class ServerSide::Connection::Router
4
+ class ServerSide::Router
5
5
  attr_accessor :t, :parameters
6
6
 
7
7
  def self.rules
@@ -22,7 +22,7 @@ class ServerSide::Connection::Router
22
22
  end
23
23
 
24
24
  class RoutingTest < Test::Unit::TestCase
25
- R = ServerSide::Connection::Router
25
+ R = ServerSide::Router
26
26
 
27
27
  def test_has_routes?
28
28
  R.remove_rules
@@ -158,14 +158,14 @@ class RoutingTest < Test::Unit::TestCase
158
158
 
159
159
  def test_serverside_route
160
160
  R.reset_rules
161
- ServerSide.route(:path => 'abc') {1 + 1}
161
+ ServerSide::Router.route(:path => 'abc') {1 + 1}
162
162
  assert_equal 1, R.rules.length
163
163
  assert_equal({:path => 'abc'}, R.rules[0][0])
164
164
  assert_equal 2, R.rules[0][1].call
165
165
  end
166
166
 
167
167
  def test_serverside_route_default
168
- ServerSide.route_default {1234}
168
+ ServerSide::Router.route_default {1234}
169
169
  assert_equal 1234, R.new(StringIO.new).default_handler
170
170
  end
171
171
  end
@@ -2,19 +2,21 @@ require File.dirname(__FILE__) + '/../test_helper'
2
2
  require 'net/http'
3
3
 
4
4
  class ServerTest < Test::Unit::TestCase
5
- class DummyConnection
6
- attr_reader :conn
7
- @@count = 0
8
- def initialize(conn)
9
- @@count += 1
10
- @conn = conn
5
+ class DummyRequest < ServerSide::HTTP::Request
6
+ def respond
11
7
  @conn << "HTTP/1.1 200\r\nContent-Length: 9\r\n\r\nHi there!"
12
- @conn.close
13
8
  end
14
9
  end
15
10
 
16
11
  def test_server_creation
17
- t = Thread.new {ServerSide::Server.new('0.0.0.0', 17543, DummyConnection)}
12
+ t = Thread.new do
13
+ begin
14
+ ServerSide::HTTP::Server.new('0.0.0.0', 17543, DummyRequest)
15
+ rescue => e
16
+ puts e.message
17
+ puts e.backtrace.first
18
+ end
19
+ end
18
20
  sleep 0.1
19
21
 
20
22
  h = Net::HTTP.new('localhost', 17543)
@@ -3,7 +3,7 @@ require 'stringio'
3
3
  require 'fileutils'
4
4
 
5
5
  class ConnectionTest < Test::Unit::TestCase
6
- class Dummy < ServerSide::Connection::Base
6
+ class Dummy < ServerSide::HTTP::Request
7
7
  def self.static_files
8
8
  @@static_files
9
9
  end
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.8.11
2
+ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: serverside
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.2.5
7
- date: 2006-09-03 00:00:00 +03:00
6
+ version: 0.2.6
7
+ date: 2006-09-30 00:00:00 +03:00
8
8
  summary: Performance-oriented web framework.
9
9
  require_paths:
10
10
  - lib
@@ -25,6 +25,7 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
25
25
  platform: ruby
26
26
  signing_key:
27
27
  cert_chain:
28
+ post_install_message:
28
29
  authors:
29
30
  - Sharon Rosner
30
31
  files:
@@ -33,82 +34,86 @@ files:
33
34
  - Rakefile
34
35
  - bin/serverside
35
36
  - doc/rdoc
37
+ - doc/rdoc/classes
36
38
  - doc/rdoc/created.rid
37
- - doc/rdoc/rdoc-style.css
38
39
  - doc/rdoc/files
39
- - doc/rdoc/classes
40
- - doc/rdoc/fr_file_index.html
41
40
  - doc/rdoc/fr_class_index.html
41
+ - doc/rdoc/fr_file_index.html
42
42
  - doc/rdoc/fr_method_index.html
43
43
  - doc/rdoc/index.html
44
- - doc/rdoc/files/README.html
45
- - doc/rdoc/files/CHANGELOG.html
46
- - doc/rdoc/files/COPYING.html
47
- - doc/rdoc/files/lib
48
- - doc/rdoc/files/lib/serverside_rb.html
49
- - doc/rdoc/files/lib/serverside
50
- - doc/rdoc/files/lib/serverside/server_rb.html
51
- - doc/rdoc/files/lib/serverside/daemon_rb.html
52
- - doc/rdoc/files/lib/serverside/application_rb.html
53
- - doc/rdoc/files/lib/serverside/core_ext_rb.html
54
- - doc/rdoc/files/lib/serverside/connection_rb.html
55
- - doc/rdoc/files/lib/serverside/cluster_rb.html
56
- - doc/rdoc/files/lib/serverside/static_rb.html
57
- - doc/rdoc/files/lib/serverside/routing_rb.html
58
- - doc/rdoc/files/lib/serverside/template_rb.html
59
- - doc/rdoc/classes/Symbol.html
60
- - doc/rdoc/classes/Proc.html
61
- - doc/rdoc/classes/Object.html
62
- - doc/rdoc/classes/String.html
63
- - doc/rdoc/classes/Daemon.html
44
+ - doc/rdoc/rdoc-style.css
64
45
  - doc/rdoc/classes/Daemon
65
- - doc/rdoc/classes/ServerSide.html
46
+ - doc/rdoc/classes/Daemon.html
47
+ - doc/rdoc/classes/Object.html
48
+ - doc/rdoc/classes/Proc.html
66
49
  - doc/rdoc/classes/ServerSide
67
- - doc/rdoc/classes/Daemon/PidFile.html
50
+ - doc/rdoc/classes/ServerSide.html
51
+ - doc/rdoc/classes/String.html
52
+ - doc/rdoc/classes/Symbol.html
68
53
  - doc/rdoc/classes/Daemon/Base.html
69
- - doc/rdoc/classes/Daemon/Cluster.html
70
54
  - doc/rdoc/classes/Daemon/Cluster
55
+ - doc/rdoc/classes/Daemon/Cluster.html
56
+ - doc/rdoc/classes/Daemon/PidFile.html
71
57
  - doc/rdoc/classes/Daemon/Cluster/PidFile.html
72
- - doc/rdoc/classes/ServerSide/StaticFiles.html
73
- - doc/rdoc/classes/ServerSide/StaticFiles
74
58
  - doc/rdoc/classes/ServerSide/Application.html
75
- - doc/rdoc/classes/ServerSide/Connection.html
76
- - doc/rdoc/classes/ServerSide/Connection
77
- - doc/rdoc/classes/ServerSide/Server.html
59
+ - doc/rdoc/classes/ServerSide/HTTP
60
+ - doc/rdoc/classes/ServerSide/HTTP.html
61
+ - doc/rdoc/classes/ServerSide/Router.html
62
+ - doc/rdoc/classes/ServerSide/StaticFiles
63
+ - doc/rdoc/classes/ServerSide/StaticFiles.html
78
64
  - doc/rdoc/classes/ServerSide/Template.html
65
+ - doc/rdoc/classes/ServerSide/HTTP/Connection.html
66
+ - doc/rdoc/classes/ServerSide/HTTP/Const.html
67
+ - doc/rdoc/classes/ServerSide/HTTP/Request.html
68
+ - doc/rdoc/classes/ServerSide/HTTP/Server.html
79
69
  - doc/rdoc/classes/ServerSide/StaticFiles/Const.html
80
- - doc/rdoc/classes/ServerSide/Connection/Const.html
81
- - doc/rdoc/classes/ServerSide/Connection/Base.html
82
- - doc/rdoc/classes/ServerSide/Connection/Router.html
83
- - test/unit
84
- - test/test_helper.rb
70
+ - doc/rdoc/files/CHANGELOG.html
71
+ - doc/rdoc/files/COPYING.html
72
+ - doc/rdoc/files/lib
73
+ - doc/rdoc/files/README.html
74
+ - doc/rdoc/files/lib/serverside
75
+ - doc/rdoc/files/lib/serverside_rb.html
76
+ - doc/rdoc/files/lib/serverside/application_rb.html
77
+ - doc/rdoc/files/lib/serverside/cluster_rb.html
78
+ - doc/rdoc/files/lib/serverside/connection_rb.html
79
+ - doc/rdoc/files/lib/serverside/core_ext_rb.html
80
+ - doc/rdoc/files/lib/serverside/daemon_rb.html
81
+ - doc/rdoc/files/lib/serverside/request_rb.html
82
+ - doc/rdoc/files/lib/serverside/routing_rb.html
83
+ - doc/rdoc/files/lib/serverside/server_rb.html
84
+ - doc/rdoc/files/lib/serverside/static_rb.html
85
+ - doc/rdoc/files/lib/serverside/template_rb.html
85
86
  - test/functional
86
87
  - test/spec
87
- - test/unit/daemon_test.rb
88
- - test/unit/server_test.rb
89
- - test/unit/core_ext_test.rb
90
- - test/unit/connection_test.rb
91
- - test/unit/cluster_test.rb
92
- - test/unit/static_test.rb
93
- - test/unit/routing_test.rb
94
- - test/unit/template_test.rb
88
+ - test/test_helper.rb
89
+ - test/unit
95
90
  - test/functional/primitive_static_server_test.rb
96
- - test/functional/static_server_test.rb
97
- - test/functional/static_profile.rb
98
- - test/functional/static_rfuzz.rb
99
91
  - test/functional/routing_server.rb
100
92
  - test/functional/routing_server_test.rb
93
+ - test/functional/static_profile.rb
94
+ - test/functional/static_rfuzz.rb
95
+ - test/functional/static_server_test.rb
101
96
  - test/spec/core_ext_spec.rb
102
- - lib/serverside.rb
97
+ - test/unit/cluster_test.rb
98
+ - test/unit/connection_test.rb
99
+ - test/unit/core_ext_test.rb
100
+ - test/unit/daemon_test.rb
101
+ - test/unit/request_test.rb
102
+ - test/unit/routing_test.rb
103
+ - test/unit/server_test.rb
104
+ - test/unit/static_test.rb
105
+ - test/unit/template_test.rb
103
106
  - lib/serverside
104
- - lib/serverside/server.rb
105
- - lib/serverside/daemon.rb
107
+ - lib/serverside.rb
106
108
  - lib/serverside/application.rb
107
- - lib/serverside/core_ext.rb
108
- - lib/serverside/connection.rb
109
109
  - lib/serverside/cluster.rb
110
- - lib/serverside/static.rb
110
+ - lib/serverside/connection.rb
111
+ - lib/serverside/core_ext.rb
112
+ - lib/serverside/daemon.rb
113
+ - lib/serverside/request.rb
111
114
  - lib/serverside/routing.rb
115
+ - lib/serverside/server.rb
116
+ - lib/serverside/static.rb
112
117
  - lib/serverside/template.rb
113
118
  - CHANGELOG
114
119
  test_files: []