nitro 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. data/AUTHORS +3 -0
  2. data/ChangeLog +83 -0
  3. data/LICENCE +8 -8
  4. data/README +5 -1
  5. data/RELEASES +9 -0
  6. data/Rakefile +43 -23
  7. data/bin/cluster.rb +15 -12
  8. data/examples/ndb/README +5 -0
  9. data/examples/ndb/run.rb +271 -0
  10. data/examples/simple/README +27 -0
  11. data/examples/simple/app.rb +2 -2
  12. data/examples/simple/conf/config.rb +3 -8
  13. data/examples/simple/conf/debug-config.rb +6 -7
  14. data/examples/simple/conf/live-config.rb +2 -4
  15. data/examples/simple/conf/requires.rb +2 -10
  16. data/examples/simple/ctl +1 -1
  17. data/examples/simple/env.rb +2 -2
  18. data/examples/simple/root/article-form.ss +1 -1
  19. data/examples/simple/root/comments-form.ss +1 -1
  20. data/examples/tiny/README +15 -0
  21. data/examples/tiny/app.rb +2 -2
  22. data/examples/tiny/conf/config.rb +8 -13
  23. data/examples/tiny/conf/requires.rb +2 -8
  24. data/examples/tiny/ctl +2 -17
  25. data/examples/tiny/root/index.sx +1 -1
  26. data/lib/n/app/cluster.rb +15 -12
  27. data/lib/n/app/cookie.rb +10 -9
  28. data/lib/n/app/filters/autologin.rb +5 -4
  29. data/lib/n/app/fragment.rb +13 -10
  30. data/lib/n/app/handlers.rb +29 -22
  31. data/lib/n/app/handlers/code-handler.rb +2 -4
  32. data/lib/n/app/handlers/page-handler.rb +3 -5
  33. data/lib/n/app/request-part.rb +2 -7
  34. data/lib/n/app/request.rb +27 -22
  35. data/lib/n/app/script.rb +4 -15
  36. data/lib/n/app/server.rb +11 -7
  37. data/lib/n/app/session.rb +7 -11
  38. data/lib/n/app/user.rb +10 -11
  39. data/lib/n/app/webrick-servlet.rb +23 -10
  40. data/lib/n/app/webrick.rb +13 -10
  41. data/lib/n/application.rb +13 -6
  42. data/lib/n/config.rb +18 -7
  43. data/lib/n/db.rb +56 -40
  44. data/lib/n/db/connection.rb +18 -22
  45. data/lib/n/db/managed.rb +6 -8
  46. data/lib/n/db/mixins.rb +4 -7
  47. data/lib/n/db/mysql.rb +6 -3
  48. data/lib/n/db/psql.rb +15 -10
  49. data/lib/n/db/tools.rb +5 -9
  50. data/lib/n/db/utils.rb +11 -8
  51. data/lib/n/events.rb +14 -10
  52. data/lib/n/logger.rb +8 -2
  53. data/lib/n/macros.rb +5 -2
  54. data/lib/n/parts.rb +13 -10
  55. data/lib/n/properties.rb +17 -12
  56. data/lib/n/server.rb +3 -2
  57. data/lib/n/server/filter.rb +2 -4
  58. data/lib/n/shaders.rb +11 -13
  59. data/lib/n/sitemap.rb +23 -20
  60. data/lib/n/std.rb +15 -4
  61. data/lib/n/sync/clc.rb +4 -2
  62. data/lib/n/sync/handler.rb +20 -12
  63. data/lib/n/sync/server.rb +24 -18
  64. data/lib/n/ui/date-select.rb +2 -4
  65. data/lib/n/ui/pager.rb +10 -8
  66. data/lib/n/ui/popup.rb +5 -4
  67. data/lib/n/ui/select.rb +3 -4
  68. data/lib/n/ui/tabs.rb +3 -4
  69. data/lib/n/utils/array.rb +6 -14
  70. data/lib/n/utils/cache.rb +3 -7
  71. data/lib/n/utils/gfx.rb +5 -6
  72. data/lib/n/utils/hash.rb +7 -12
  73. data/lib/n/utils/html.rb +8 -4
  74. data/lib/n/utils/http.rb +10 -6
  75. data/lib/n/utils/mail.rb +6 -6
  76. data/lib/n/utils/number.rb +3 -4
  77. data/lib/n/utils/pool.rb +5 -8
  78. data/lib/n/utils/string.rb +12 -10
  79. data/lib/n/utils/template.rb +3 -5
  80. data/lib/n/utils/time.rb +7 -5
  81. data/lib/n/utils/uri.rb +5 -4
  82. data/lib/p/README +1 -0
  83. data/lib/xsl/xforms.xsl +2 -0
  84. data/test/n/app/tc_cookie.rb +34 -0
  85. data/test/n/app/tc_request.rb +70 -0
  86. data/test/n/app/tc_requestpart.rb +28 -0
  87. data/test/n/app/tc_session.rb +34 -0
  88. data/test/n/tc_db.rb +223 -0
  89. data/test/n/tc_db_mysql.rb +241 -0
  90. data/test/n/tc_events.rb +44 -0
  91. data/test/n/tc_properties.rb +68 -0
  92. data/test/n/tc_sitemap.rb +37 -0
  93. data/test/n/ui/tc_pager.rb +52 -0
  94. data/test/n/utils/tc_cache.rb +47 -0
  95. data/test/n/utils/tc_hash.rb +39 -0
  96. data/test/n/utils/tc_html.rb +79 -0
  97. data/test/n/utils/tc_http.rb +18 -0
  98. data/test/n/utils/tc_number.rb +21 -0
  99. data/test/n/utils/tc_strings.rb +149 -0
  100. data/test/n/utils/tc_uri.rb +100 -0
  101. metadata +49 -22
  102. data/doc/css.txt +0 -20
  103. data/doc/ideas.txt +0 -120
  104. data/doc/pg.txt +0 -47
  105. data/doc/svn.txt +0 -82
  106. data/doc/todo.txt +0 -30
  107. data/examples/simple/conf/overrides.rb +0 -9
  108. data/examples/simple/logs/access_log +0 -2
  109. data/examples/simple/logs/apache.log +0 -3
  110. data/examples/simple/logs/app.log +0 -1
  111. data/examples/simple/logs/events.log +0 -1
  112. data/examples/tiny/conf/apache.conf +0 -100
  113. data/examples/tiny/logs/access_log +0 -9
  114. data/examples/tiny/logs/apache.log +0 -9
  115. data/lib/n/db/make-release.sh +0 -26
  116. data/lib/n/tools/README +0 -11
  117. data/lib/xsl/ce.xsl +0 -30
  118. data/lib/xsl/localization.xsl +0 -23
  119. data/test/run.rb +0 -95
@@ -1,5 +1,32 @@
1
1
  = A Simple Web Application
2
2
 
3
+ This simple application demonstrates various Nitro features.
4
+
5
+
6
+ == Description of contents
7
+
8
+ conf/apache.conf
9
+ apache configuration
10
+
11
+ conf/config.rb
12
+ application configuration
13
+
14
+ root/
15
+ the public web directory
16
+
17
+ logs/
18
+ logfiles come here
19
+
20
+ lib/n/
21
+ application specific ruby code
22
+
23
+ lib/p/
24
+ application specific Nitro parts
25
+
26
+ test/
27
+ unit tests
28
+
29
+
3
30
  == Setup
4
31
 
5
32
  To setup this example web application run the follwing script:
@@ -5,10 +5,10 @@
5
5
  # A simple Web Application to demonstrate the Engine.
6
6
  #
7
7
  # code:
8
- # George Moschovitis <gm@navel.gr>
8
+ # * George Moschovitis <gm@navel.gr>
9
9
  #
10
10
  # (c) 2004 Navel, all rights reserved.
11
- # $Id: app.rb 87 2004-10-19 17:27:45Z gmosx $
11
+ # $Id: app.rb 101 2004-10-22 12:35:39Z gmosx $
12
12
 
13
13
  $:.unshift "simple/lib"
14
14
  $:.unshift "../lib"
@@ -1,17 +1,14 @@
1
1
  # = Configuration
2
2
  #
3
- # === Design:
4
- #
5
3
  # Use a separate file for configuration, makes the
6
4
  # main file more readable, and allows for reconfiguring
7
5
  # (reload) the webapp without restarting the server.
8
6
  #
9
- # FIXME: redesign this!
10
- #
11
- # code: gmosx
7
+ # code:
8
+ # * George Moschovitis <gm@navel.gr>
12
9
  #
13
10
  # (c) 2004 Navel, all rights reserved.
14
- # $Id: config.rb 89 2004-10-20 12:55:58Z gmosx $
11
+ # $Id: config.rb 106 2004-10-25 11:31:11Z gmosx $
15
12
 
16
13
  require "n/std"
17
14
  require "n/properties"
@@ -31,10 +28,8 @@ $elog = Logger.new("simple/logs/events.log", "weekly");
31
28
 
32
29
  require "n/db"
33
30
  require "n/app/cluster"
34
- require "n/config"
35
31
 
36
32
  require "simple/conf/requires"
37
- require "simple/conf/overrides"
38
33
 
39
34
  $srv_extension_map = {
40
35
  "sx" => ["text/html",
@@ -1,13 +1,12 @@
1
1
  # = Debug Configuration
2
2
  #
3
3
  # Configuration to use while debugging, this is slow.
4
- #--
4
+ #
5
5
  # code:
6
- # George Moschovitis <gm@navel.gr>
6
+ # * George Moschovitis <gm@navel.gr>
7
7
  #
8
8
  # (c) 2004 Navel, all rights reserved.
9
- # $Id: debug-config.rb 84 2004-10-19 13:57:01Z gmosx $
10
- #++
9
+ # $Id: debug-config.rb 106 2004-10-25 11:31:11Z gmosx $
11
10
 
12
11
  require "simple/conf/config"
13
12
 
@@ -43,10 +42,10 @@ $db = N::Db.new(
43
42
  :connection_count => 5
44
43
  )
45
44
 
46
- $appsrv_address = "127.0.0.1"
45
+ $srv_address = $appsrv_address = "127.0.0.1"
46
+ $srv_port = 8080
47
47
  $appsrv_port = 9090
48
- $srv_url = "http://127.0.0.1:8080"
49
- #$srv_url = "http://192.168.0.3:8080"
48
+ $srv_url = "http://#$srv_address:#$srv_port"
50
49
 
51
50
  # gmosx: no error page in debug mode to avoid loops when there
52
51
  # is a bug in the handler code or the shader.
@@ -2,13 +2,11 @@
2
2
  #
3
3
  # Configuration to use in the live server, optimized for speed.
4
4
  #
5
- #--
6
5
  # code:
7
- # George Moschovitis <gm@navel.gr>
6
+ # * George Moschovitis <gm@navel.gr>
8
7
  #
9
8
  # (c) 2004 Navel, all rights reserved.
10
- # $Id: live-config.rb 87 2004-10-19 17:27:45Z gmosx $
11
- #++
9
+ # $Id: live-config.rb 101 2004-10-22 12:35:39Z gmosx $
12
10
 
13
11
  require "simple/conf/config"
14
12
 
@@ -1,22 +1,14 @@
1
1
  # = Requires all needed files
2
2
  #
3
- # === Design:
4
- #
5
3
  # Collect all requires in one file includable
6
4
  # in multiple executable scripts. Moreover, it
7
5
  # makes the main script file more readable.
8
6
  #
9
- # === Ideas:
10
- #
11
- # - use load instead of require to make reloadable?
12
- #
13
- #--
14
7
  # code:
15
- # George Moschovitis <gm@navel.gr>
8
+ # * George Moschovitis <gm@navel.gr>
16
9
  #
17
10
  # (c) 2004 Navel, all rights reserved.
18
- # $Id: requires.rb 84 2004-10-19 13:57:01Z gmosx $
19
- #++
11
+ # $Id: requires.rb 101 2004-10-22 12:35:39Z gmosx $
20
12
 
21
13
  require "n/std"
22
14
  require "n/properties"
@@ -5,7 +5,7 @@ ARGV="$@"
5
5
  case $ARGV in
6
6
  start)
7
7
  /usr/sbin/httpd -d `pwd` -f conf/apache.conf
8
- ruby -C../../.. nitro/bin/cluster.rb --daemon
8
+ ruby -C../.. bin/cluster.rb --daemon
9
9
  ruby -C.. simple/app.rb --start # --daemon
10
10
  ERROR=$?
11
11
  ;;
@@ -4,10 +4,10 @@
4
4
  # AppServer environment.
5
5
  #
6
6
  # code:
7
- # George Moschovitis <gm@navel.gr>
7
+ # * George Moschovitis <gm@navel.gr>
8
8
  #
9
9
  # (c) 2004 Navel, all rights reserved.
10
- # $Id: env.rb 69 2004-10-18 09:33:17Z gmosx $
10
+ # $Id: env.rb 101 2004-10-22 12:35:39Z gmosx $
11
11
 
12
12
  $:.unshift ".."
13
13
  $:.unshift "simple/lib"
@@ -3,7 +3,7 @@
3
3
  P::Articles.add_article(request)
4
4
  ?>
5
5
 
6
- <form id="add_article" method="post" action="#{request.uri}">
6
+ <form id="add_article" method="post">
7
7
  <input type="hidden" name="add_article" value="*" />
8
8
 
9
9
  <p>
@@ -2,7 +2,7 @@
2
2
 
3
3
  <!-- the <?xml declaration is optional, but lets be strict. -->
4
4
 
5
- <form id="comments_form" method="post" action="#{request.uri}">
5
+ <form id="comments_form" method="post">
6
6
  <input type="hidden" name="add_comment_pid" value="#{request[:comments_parent].oid}" />
7
7
  <input type="hidden" name="oid" value="#{request[:comments_parent].oid}" />
8
8
 
@@ -0,0 +1,15 @@
1
+ = A Tiny web application
2
+
3
+ An example to test Nitro.
4
+
5
+
6
+ === Run the example
7
+
8
+ $ cd examples/tiny
9
+
10
+ $ ./ctl
11
+
12
+ to stop the example press Ctrl+C or execute the
13
+ following command:
14
+
15
+ $ ./ctl stop
@@ -5,10 +5,10 @@
5
5
  # A simple Web Application to demonstrate the Engine.
6
6
  #
7
7
  # code:
8
- # George Moschovitis <gm@navel.gr>
8
+ # * George Moschovitis <gm@navel.gr>
9
9
  #
10
10
  # (c) 2004 Navel, all rights reserved.
11
- # $Id: app.rb 90 2004-10-20 12:56:43Z gmosx $
11
+ # $Id: app.rb 101 2004-10-22 12:35:39Z gmosx $
12
12
 
13
13
  $:.unshift "../lib"
14
14
 
@@ -1,20 +1,15 @@
1
1
  # = Configuration
2
2
  #
3
- # === Design:
4
- #
5
3
  # Use a separate file for configuration, makes the
6
4
  # main file more readable, and allows for reconfiguring
7
5
  # (reload) the webapp without restarting the server.
8
6
  #
9
- # FIXME: redesign this!
10
- #
11
- # code: gmosx
7
+ # code:
8
+ # * George Moschovitis <gm@navel.gr>
12
9
  #
13
10
  # (c) 2004 Navel, all rights reserved.
14
- # $Id: config.rb 90 2004-10-20 12:56:43Z gmosx $
11
+ # $Id: config.rb 106 2004-10-25 11:31:11Z gmosx $
15
12
 
16
- require "n/std"
17
- require "n/properties"
18
13
  require "n/logger"
19
14
  require "n/config"
20
15
 
@@ -26,8 +21,8 @@ $log = Logger.new(STDERR, 10);
26
21
 
27
22
  $reload_scripts = $DBG
28
23
 
29
- require "n/config"
30
-
24
+ require "n/std"
25
+ require "n/properties"
31
26
  require "tiny/conf/requires"
32
27
 
33
28
  $srv_extension_map = {
@@ -42,9 +37,9 @@ $srv_extension_map = {
42
37
  ]
43
38
  }
44
39
 
45
- $appsrv_address = "127.0.0.1"
46
- $appsrv_port = 9090
47
- $srv_url = "http://127.0.0.1:8080"
40
+ $srv_address = $appsrv_address = "127.0.0.1"
41
+ $srv_port = $appsrv_port = 8080
42
+ $srv_url = "http://#$srv_address:#$srv_port"
48
43
 
49
44
  module App
50
45
 
@@ -1,20 +1,14 @@
1
1
  # = Requires all needed files
2
2
  #
3
- # === Design:
4
- #
5
3
  # Collect all requires in one file includable
6
4
  # in multiple executable scripts. Moreover, it
7
5
  # makes the main script file more readable.
8
6
  #
9
- # === Ideas:
10
- #
11
- # - use load instead of require to make reloadable?
12
- #
13
7
  # code:
14
- # George Moschovitis <gm@navel.gr>
8
+ # * George Moschovitis <gm@navel.gr>
15
9
  #
16
10
  # (c) 2004 Navel, all rights reserved.
17
- # $Id: requires.rb 90 2004-10-20 12:56:43Z gmosx $
11
+ # $Id: requires.rb 101 2004-10-22 12:35:39Z gmosx $
18
12
 
19
13
  require "n/std"
20
14
  require "n/properties"
@@ -3,27 +3,12 @@
3
3
  ARGV="$@"
4
4
 
5
5
  case $ARGV in
6
- start)
7
- /usr/sbin/httpd -d `pwd` -f conf/apache.conf
8
- ruby -C.. tiny/app.rb --start # --daemon
9
- ERROR=$?
10
- ;;
11
- restart)
12
- # restart appserver only!
13
- export ASPID= `ps ax | grep app.rb | grep ruby | cut -d" " -f1`
14
- if [ -n "$ASPID" ]; then
15
- echo $ASPID
16
- kill -9 $ASPID
17
- fi
18
- ruby -C.. tiny/app.rb --restart # --daemon
19
- ERROR=$?
20
- ;;
21
6
  stop)
22
- killall -9 ruby httpd
7
+ killall -9 ruby
23
8
  ERROR=$?
24
9
  ;;
25
10
  *)
26
- echo "NOP"
11
+ ruby -C.. tiny/app.rb --start # --daemon
27
12
  ERROR=$?
28
13
  esac
29
14
 
@@ -21,7 +21,7 @@
21
21
  <h1>Hello #{name}</h1>
22
22
 
23
23
  <p>
24
- <form id="my_form" action="#{request.uri}">
24
+ <form id="my_form">
25
25
  <b>Enter your name:</b>
26
26
  <input type="text" name="name" />
27
27
  <br />
@@ -1,13 +1,10 @@
1
- # = Cluster
2
- #
3
- # TODO: use Sync instead of Monitor
4
- #
5
- # code:: gmosx
1
+ # code:
2
+ # * George Moschovitis <gm@navel.gr>
6
3
  #
7
4
  # (c) 2004 Navel, all rights reserved.
8
- # $Id: cluster.rb 74 2004-10-18 11:30:20Z gmosx $
5
+ # $Id: cluster.rb 104 2004-10-22 13:35:03Z gmosx $
9
6
 
10
- $:.unshift "nitro/lib"
7
+ $:.unshift "lib"
11
8
 
12
9
  require "drb"
13
10
  require "monitor"
@@ -21,16 +18,20 @@ module N
21
18
 
22
19
  # = Cluster
23
20
  #
24
- # A Cluster is a collection of servers. The cluster synchronizes the
25
- # servers and distributes the state. An older version used a polling
26
- # system, ie: the servers polled the cluster to obtain the state. This
27
- # version uses a push system, ie when the state is changed a delta
28
- # is pushed to the clients.
21
+ # A Cluster manages the state of a collection of servers. The cluster
22
+ # synchronizes the servers and distributes the state. An older version
23
+ # used a polling system, ie: the servers polled the cluster to
24
+ # obtain the state. This version uses a push system, ie when the
25
+ # state is changed a delta is pushed to the clients.
26
+ #
27
+ # TODO: use Sync instead of Monitor
29
28
  #
30
29
  class Cluster < N::Application
31
30
 
32
31
  # = CHash ClusterHash
33
32
  #
33
+ # The CHash 'endpoint' resides in the Cluster server
34
+ #
34
35
  class CHash < Hash
35
36
  attr :mon
36
37
 
@@ -111,6 +112,8 @@ class Cluster < N::Application
111
112
 
112
113
  # = SHash ServerHash
113
114
  #
115
+ # The SHash 'endpoint' resides in the App server
116
+ #
114
117
  class SHash < Hash
115
118
  attr :mon
116
119
 
@@ -1,9 +1,8 @@
1
- # = Http Cookie
2
- #
3
- # code:: gmosx
1
+ # code:
2
+ # * George Moschovitis <gm@navel.gr>
4
3
  #
5
4
  # (c) 2004 Navel, all rights reserved.
6
- # $Id: cookie.rb 71 2004-10-18 10:50:22Z gmosx $
5
+ # $Id: cookie.rb 99 2004-10-22 09:50:28Z gmosx $
7
6
 
8
7
  require "cgi"
9
8
 
@@ -34,9 +33,11 @@ end # class CGI
34
33
 
35
34
  module N; module App
36
35
 
37
- # Cookie
36
+ # = Cookie
37
+ #
38
+ # An encapsulation of the standard HTTP Cookie.
38
39
  #
39
- # === Design:
40
+ # === Design
40
41
  #
41
42
  # Ruby's default cgi library implements the functionality,
42
43
  # so we reuse it here!
@@ -44,14 +45,14 @@ module N; module App
44
45
  # The http request contains only key/values pairs so we
45
46
  # dont keep a full object.
46
47
  #
47
- # === Todo:
48
+ # === Future
48
49
  #
49
50
  # - switch to libapreq!
50
51
  #
51
52
  class Cookie < CGI::Cookie
52
53
 
53
54
  # Override default implementation
54
-
55
+ #
55
56
  def initialize(name, *value)
56
57
  super
57
58
 
@@ -83,4 +84,4 @@ class Cookie < CGI::Cookie
83
84
 
84
85
  end
85
86
 
86
- end; end # module
87
+ end; end # module
@@ -1,9 +1,8 @@
1
- # = AutoLogin filter
2
- #
3
- # code:: gmosx
1
+ # code:
2
+ # * George Moschovitis
4
3
  #
5
4
  # (c) 2004 Navel, all rights reserved.
6
- # $Id: autologin.rb 79 2004-10-18 16:38:19Z gmosx $
5
+ # $Id: autologin.rb 99 2004-10-22 09:50:28Z gmosx $
7
6
 
8
7
  require "n/utils/string"
9
8
  require "n/server/filter"
@@ -19,6 +18,8 @@ module N; module App
19
18
  #
20
19
  class AutoLoginFilter < N::ServerFilter
21
20
 
21
+ # Perform the actual work of auto logging in the user
22
+ #
22
23
  def process(request)
23
24
  if request.is_top?
24
25
  # only try to autologin for top level requests