serverside 0.2.0 → 0.2.5

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.
Files changed (40) hide show
  1. data/CHANGELOG +26 -0
  2. data/README +39 -22
  3. data/Rakefile +18 -2
  4. data/bin/serverside +21 -5
  5. data/doc/rdoc/classes/ServerSide/Application.html +12 -19
  6. data/doc/rdoc/classes/ServerSide/Connection/Base.html +203 -116
  7. data/doc/rdoc/classes/ServerSide/Connection/Const.html +35 -5
  8. data/doc/rdoc/classes/ServerSide/Connection/Router.html +107 -78
  9. data/doc/rdoc/classes/ServerSide/Server.html +1 -1
  10. data/doc/rdoc/classes/ServerSide/StaticFiles/Const.html +10 -0
  11. data/doc/rdoc/classes/ServerSide/StaticFiles.html +73 -43
  12. data/doc/rdoc/classes/ServerSide/Template.html +200 -0
  13. data/doc/rdoc/classes/ServerSide.html +13 -8
  14. data/doc/rdoc/created.rid +1 -1
  15. data/doc/rdoc/files/CHANGELOG.html +44 -1
  16. data/doc/rdoc/files/README.html +63 -35
  17. data/doc/rdoc/files/lib/serverside/application_rb.html +1 -1
  18. data/doc/rdoc/files/lib/serverside/connection_rb.html +1 -1
  19. data/doc/rdoc/files/lib/serverside/routing_rb.html +1 -1
  20. data/doc/rdoc/files/lib/serverside/server_rb.html +1 -1
  21. data/doc/rdoc/files/lib/serverside/static_rb.html +1 -1
  22. data/doc/rdoc/files/lib/serverside/template_rb.html +108 -0
  23. data/doc/rdoc/fr_class_index.html +1 -2
  24. data/doc/rdoc/fr_file_index.html +1 -0
  25. data/doc/rdoc/fr_method_index.html +18 -16
  26. data/lib/serverside/application.rb +0 -28
  27. data/lib/serverside/connection.rb +38 -12
  28. data/lib/serverside/routing.rb +23 -2
  29. data/lib/serverside/server.rb +1 -1
  30. data/lib/serverside/static.rb +12 -0
  31. data/lib/serverside/template.rb +36 -0
  32. data/test/functional/primitive_static_server_test.rb +26 -2
  33. data/test/functional/static_rfuzz.rb +3 -39
  34. data/test/spec/core_ext_spec.rb +68 -0
  35. data/test/unit/connection_test.rb +37 -1
  36. data/test/unit/template_test.rb +78 -0
  37. metadata +8 -6
  38. data/doc/rdoc/classes/ServerSide/Application/Base.html +0 -196
  39. data/doc/rdoc/classes/ServerSide/Application/Static.html +0 -156
  40. data/test/unit/application_test.rb +0 -16
data/CHANGELOG CHANGED
@@ -1,5 +1,31 @@
1
+ *0.2.5*
2
+
3
+ * Added template serving to static file module.
4
+
5
+ * Wrote a simple ERB template system.
6
+
7
+ * More documentation tweaks.
8
+
9
+ * Changed how response cookies are formatted for somewhat better performance.
10
+
11
+ * Updated documentation.
12
+
13
+ * Removed deprecated code in lib/serverside/application.rb.
14
+
15
+ * Added HTTP cookie functionality (parse, set and delete.)
16
+
17
+ * Updated rakefile to include a spec task, as well as an rcov task. Updated test task to include spec and rcov tasks.
18
+
19
+ * Started writing RSpec tests. This looks like a very interesting concept.
20
+
21
+ * Added /test/spec directory.
22
+
1
23
  *0.2.0*
2
24
 
25
+ * Updated RFuzz script to work, but it doesn't still do anything interesting.
26
+
27
+ * Added a serve command to serverside script.
28
+
3
29
  * Changed substition of embedded parameters from (.*) to (.+).
4
30
 
5
31
  * Added rule compilation after setting the default handler.
data/README CHANGED
@@ -5,47 +5,64 @@ as easy as possible to use. ServerSide includes a full-featured HTTP server, a
5
5
  controller-view system and a bunch of other tools to easily create servers and
6
6
  clusters of servers.
7
7
 
8
- == Installation
8
+ == Resources
9
+
10
+ * {Project page}[http://code.google.com/p/serverside/]
11
+ * {Source code}[http://serverside.googlecode.com/svn/]
12
+ * {Bug tracking}[http://code.google.com/p/serverside/issues/list]
13
+ * {RubyForge page}[http://rubyforge.org/projects/serverside/]
9
14
 
10
- <tt>sudo gem install serverside</tt>
15
+ To check out the repository, just perform:
16
+
17
+ svn co {http://serverside.googlecode.com/svn/}[http://serverside.googlecode.com/svn/]
11
18
 
12
- == Source Code
19
+ == Installation
13
20
 
14
- http://serverside.googlecode.com/svn/
21
+ sudo gem install serverside
15
22
 
16
- == The Daemon
23
+ == Usage
17
24
 
18
25
  Once you have the ServerSide gem installed, you can use the <tt>serverside</tt>
19
26
  script to control servers. For example:
20
27
 
21
- <tt>serverside -p 8000 start .</tt>
28
+ serverside start .
29
+
30
+ will start an HTTP server on port 8000, serving the content of the working
31
+ directory. You can stop the server by running <tt>serverside stop .</tt>
22
32
 
23
- will start an HTTP server, serving the content of the working directory. You can
24
- stop the server by running <tt>serverside stop .</tt>
33
+ To run the server without forking, use the 'serve' command:
34
+
35
+ serverside serve .
36
+
37
+ == Serving ERb Templates
38
+
39
+ ServerSide can render ERb[http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/]
40
+ templates in a fashion similar to PHP. You can store templates in .rhtml files,
41
+ and ServerSide takes care of all the rest. ServerSide is also smart enough to
42
+ allow you to use nice looking URL's with your templates, and automatically adds
43
+ the .rhtml extension if the file is there.
25
44
 
26
45
  == Serving Dynamic Content
27
46
 
28
- You can use the ServerSide::Application and ServerSide::Controller classes to
29
- create dynamic web applications. The ServerSide framework also lets you route
30
- requests based on any attribute of incoming requests, such as host name, path,
31
- URL parameters etc.
32
-
33
- To start your app, you can either supply the <tt>serverside</tt> script with
34
- your Ruby code file:
47
+ By default ServerSide serves static files, but you can change the behavior by
48
+ creating custom {routing rules}[classes/ServerSide/Connection/Router.html].
49
+ Here's a simple routing rule:
35
50
 
36
- <tt>serverside start ~/myapp/myapp.rb</tt>
51
+ ServerSide.route(:path => '/hello/:name') {
52
+ send_response(200, 'text', "Hello #{@parameters[:name]}!")
53
+ }
37
54
 
38
- Or you can put your code in a file called <tt>serverside.rb</tt> and tell the
39
- <tt>serverside</tt> script the directory path:
55
+ The ServerSide framework also lets you route requests based on any attribute of
56
+ incoming requests, such as host name, path, URL parameters etc.
40
57
 
41
- <tt>serverside start /home/nc/reality/production</tt>
58
+ To run your custom rules, you can either put them in a file called serverside.rb,
59
+ or tell serverside to explicitly load a specific file:
42
60
 
43
- The script will then load <tt>/home/nc/reality/production/serverside.rb</tt> and
44
- take care of everything else.
61
+ serverside start ~/myapp/myapp.rb
45
62
 
46
63
  == Running a Cluster of Servers
47
64
 
48
65
  ServerSide makes it easy to control a cluster of servers. Just supply a range of
49
66
  ports instead of a single port:
50
67
 
51
- <tt>serverside -p 8000..8009 start .</tt>
68
+ serverside -p 8000..8009 start .
data/Rakefile CHANGED
@@ -7,7 +7,7 @@ require 'fileutils'
7
7
  include FileUtils
8
8
 
9
9
  NAME = "serverside"
10
- VERS = "0.2.0"
10
+ VERS = "0.2.5"
11
11
  CLEAN.include ['**/.*.sw?', '*.gem', '.config']
12
12
  RDOC_OPTS = ['--quiet', '--title', "ServerSide Documentation",
13
13
  "--opname", "index.html",
@@ -68,7 +68,7 @@ task :uninstall => [:clean] do
68
68
  end
69
69
 
70
70
  task :doc_rforge do
71
- sh %{rake doc}
71
+ Rake::Task['doc'].execute
72
72
  sh %{scp -r doc/rdoc/* ciconia@rubyforge.org:/var/www/gforge-projects/serverside}
73
73
  end
74
74
 
@@ -86,6 +86,16 @@ Rake::TestTask.new('test_functional') do |t|
86
86
  t.verbose = true
87
87
  end
88
88
 
89
+ desc 'Run specification tests'
90
+ task :spec do
91
+ sh %{spec test/spec/*_spec.rb}
92
+ end
93
+
94
+ desc 'Run rcov'
95
+ task :rcov do
96
+ sh %{rcov test/unit/*_test.rb test/functional/*_test.rb}
97
+ end
98
+
89
99
  desc 'Run all tests'
90
100
  Rake::TestTask.new('test') do |t|
91
101
  t.libs << 'test'
@@ -93,6 +103,12 @@ Rake::TestTask.new('test') do |t|
93
103
  t.verbose = true
94
104
  end
95
105
 
106
+ desc 'Run all tests, specs and finish with rcov'
107
+ task :aok do
108
+ Rake::Task['rcov'].execute
109
+ Rake::Task['spec'].execute
110
+ end
111
+
96
112
  ##############################################################################
97
113
  # Statistics
98
114
  ##############################################################################
data/bin/serverside CHANGED
@@ -10,10 +10,15 @@ $cmd_config = {
10
10
  }
11
11
 
12
12
  opts = OptionParser.new do |opts|
13
- opts.banner = "Usage: serverside start|stop|restart [app1 app2 ...]"
13
+ opts.banner = "Usage: serverside start|stop|restart|serve [app1]"
14
14
  opts.define_head "ServerSide, a fast and simple web framework for ruby."
15
15
  opts.separator ""
16
- opts.separator "The supplied app paths can be directory or file references."
16
+ opts.separator "The supplied app path can be directory or file references. \
17
+ If the path refers to a directory the system will try to load serverside.rb in \
18
+ that directory. If no path is given, the current working directory is assumed."
19
+ opts.separator ""
20
+ opts.separator "* The start, stop and restart commands are used to control the daemon."
21
+ opts.separator "* The serve command is used to start the server without forking."
17
22
  opts.separator ""
18
23
  opts.separator "Options:"
19
24
 
@@ -47,8 +52,8 @@ if ARGV.length < 1
47
52
  end
48
53
 
49
54
  $cmd = ARGV.shift
50
- unless %w(start stop restart).include?($cmd)
51
- puts "Invalid command specified. Known commands are: start, stop, restart."
55
+ unless %w(start stop restart serve).include?($cmd)
56
+ puts "Invalid command specified. Known commands are: start, stop, restart, serve."
52
57
  exit
53
58
  end
54
59
 
@@ -63,4 +68,15 @@ unless ServerSide::Connection::Router.has_routes?
63
68
  ServerSide.route_default {serve_static('.'/@path)}
64
69
  end
65
70
 
66
- ServerSide::Application.daemonize($cmd_config, $cmd)
71
+ if $cmd == 'serve'
72
+ if $cmd_config[:ports].begin != $cmd_config[:ports].end
73
+ puts "Please specify a single port."
74
+ exit
75
+ end
76
+ puts "Serving at #{$cmd_config[:host]}:#{$cmd_config[:ports].begin}..."
77
+ trap('INT') {exit}
78
+ ServerSide::Server.new($cmd_config[:host], $cmd_config[:ports].begin,
79
+ ServerSide::Connection::Router)
80
+ else
81
+ ServerSide::Application.daemonize($cmd_config, $cmd)
82
+ end
@@ -80,8 +80,8 @@
80
80
  <h3 class="section-bar">Methods</h3>
81
81
 
82
82
  <div class="name-list">
83
- <a href="#M000027">config=</a>&nbsp;&nbsp;
84
- <a href="#M000028">daemonize</a>&nbsp;&nbsp;
83
+ <a href="#M000028">config=</a>&nbsp;&nbsp;
84
+ <a href="#M000029">daemonize</a>&nbsp;&nbsp;
85
85
  </div>
86
86
  </div>
87
87
 
@@ -92,13 +92,6 @@
92
92
 
93
93
  <div id="section">
94
94
 
95
- <div id="class-list">
96
- <h3 class="section-bar">Classes and Modules</h3>
97
-
98
- Class <a href="Application/Base.html" class="link">ServerSide::Application::Base</a><br />
99
- Class <a href="Application/Static.html" class="link">ServerSide::Application::Static</a><br />
100
-
101
- </div>
102
95
 
103
96
 
104
97
 
@@ -110,19 +103,19 @@ Class <a href="Application/Static.html" class="link">ServerSide::Application::St
110
103
  <div id="methods">
111
104
  <h3 class="section-bar">Public Class methods</h3>
112
105
 
113
- <div id="method-M000027" class="method-detail">
114
- <a name="M000027"></a>
106
+ <div id="method-M000028" class="method-detail">
107
+ <a name="M000028"></a>
115
108
 
116
109
  <div class="method-heading">
117
- <a href="#M000027" class="method-signature">
110
+ <a href="#M000028" class="method-signature">
118
111
  <span class="method-name">config=</span><span class="method-args">(c)</span>
119
112
  </a>
120
113
  </div>
121
114
 
122
115
  <div class="method-description">
123
116
  <p><a class="source-toggle" href="#"
124
- onclick="toggleCode('M000027-source');return false;">[Source]</a></p>
125
- <div class="method-source-code" id="M000027-source">
117
+ onclick="toggleCode('M000028-source');return false;">[Source]</a></p>
118
+ <div class="method-source-code" id="M000028-source">
126
119
  <pre>
127
120
  <span class="ruby-comment cmt"># File lib/serverside/application.rb, line 9</span>
128
121
  9: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">config=</span>(<span class="ruby-identifier">c</span>)
@@ -133,19 +126,19 @@ Class <a href="Application/Static.html" class="link">ServerSide::Application::St
133
126
  </div>
134
127
  </div>
135
128
 
136
- <div id="method-M000028" class="method-detail">
137
- <a name="M000028"></a>
129
+ <div id="method-M000029" class="method-detail">
130
+ <a name="M000029"></a>
138
131
 
139
132
  <div class="method-heading">
140
- <a href="#M000028" class="method-signature">
133
+ <a href="#M000029" class="method-signature">
141
134
  <span class="method-name">daemonize</span><span class="method-args">(config, cmd)</span>
142
135
  </a>
143
136
  </div>
144
137
 
145
138
  <div class="method-description">
146
139
  <p><a class="source-toggle" href="#"
147
- onclick="toggleCode('M000028-source');return false;">[Source]</a></p>
148
- <div class="method-source-code" id="M000028-source">
140
+ onclick="toggleCode('M000029-source');return false;">[Source]</a></p>
141
+ <div class="method-source-code" id="M000029-source">
149
142
  <pre>
150
143
  <span class="ruby-comment cmt"># File lib/serverside/application.rb, line 13</span>
151
144
  13: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">daemonize</span>(<span class="ruby-identifier">config</span>, <span class="ruby-identifier">cmd</span>)