nitro 0.1.2 → 0.2.0

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 (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