nitro 0.1.2

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 +8 -0
  2. data/ChangeLog +1546 -0
  3. data/LICENCE +32 -0
  4. data/README +278 -0
  5. data/RELEASES +7 -0
  6. data/Rakefile +79 -0
  7. data/bin/cluster.rb +219 -0
  8. data/doc/architecture.txt +28 -0
  9. data/doc/bugs.txt +7 -0
  10. data/doc/css.txt +20 -0
  11. data/doc/ideas.txt +120 -0
  12. data/doc/pg.txt +47 -0
  13. data/doc/svn.txt +82 -0
  14. data/doc/todo.txt +30 -0
  15. data/etc/new-project.rb +18 -0
  16. data/examples/simple/README +15 -0
  17. data/examples/simple/app.rb +31 -0
  18. data/examples/simple/conf/apache.conf +100 -0
  19. data/examples/simple/conf/config.rb +89 -0
  20. data/examples/simple/conf/debug-config.rb +53 -0
  21. data/examples/simple/conf/live-config.rb +48 -0
  22. data/examples/simple/conf/overrides.rb +9 -0
  23. data/examples/simple/conf/requires.rb +51 -0
  24. data/examples/simple/ctl +32 -0
  25. data/examples/simple/env.rb +33 -0
  26. data/examples/simple/install.rb +12 -0
  27. data/examples/simple/lib/articles/entities.rb +35 -0
  28. data/examples/simple/lib/articles/lc-en.rb +36 -0
  29. data/examples/simple/lib/articles/methods.rb +55 -0
  30. data/examples/simple/lib/articles/part.rb +58 -0
  31. data/examples/simple/logs/access_log +2 -0
  32. data/examples/simple/logs/apache.log +3 -0
  33. data/examples/simple/logs/app.log +1 -0
  34. data/examples/simple/logs/events.log +1 -0
  35. data/examples/simple/root/add-article.sx +15 -0
  36. data/examples/simple/root/article-form.ss +20 -0
  37. data/examples/simple/root/comments-form.ss +16 -0
  38. data/examples/simple/root/comments.si +30 -0
  39. data/examples/simple/root/index.sx +44 -0
  40. data/examples/simple/root/shader/shader.xsl +100 -0
  41. data/examples/simple/root/shader/style.css +9 -0
  42. data/examples/simple/root/view-article.sx +30 -0
  43. data/examples/tiny/app.rb +30 -0
  44. data/examples/tiny/conf/apache.conf +100 -0
  45. data/examples/tiny/conf/config.rb +67 -0
  46. data/examples/tiny/conf/requires.rb +40 -0
  47. data/examples/tiny/ctl +31 -0
  48. data/examples/tiny/logs/access_log +9 -0
  49. data/examples/tiny/logs/apache.log +9 -0
  50. data/examples/tiny/root/index.sx +35 -0
  51. data/lib/n/app/cluster.rb +219 -0
  52. data/lib/n/app/cookie.rb +86 -0
  53. data/lib/n/app/filters/autologin.rb +50 -0
  54. data/lib/n/app/fragment.rb +67 -0
  55. data/lib/n/app/handlers.rb +120 -0
  56. data/lib/n/app/handlers/code-handler.rb +184 -0
  57. data/lib/n/app/handlers/page-handler.rb +612 -0
  58. data/lib/n/app/request-part.rb +59 -0
  59. data/lib/n/app/request.rb +653 -0
  60. data/lib/n/app/script.rb +398 -0
  61. data/lib/n/app/server.rb +53 -0
  62. data/lib/n/app/session.rb +224 -0
  63. data/lib/n/app/user.rb +47 -0
  64. data/lib/n/app/webrick-servlet.rb +213 -0
  65. data/lib/n/app/webrick.rb +70 -0
  66. data/lib/n/application.rb +187 -0
  67. data/lib/n/config.rb +31 -0
  68. data/lib/n/db.rb +217 -0
  69. data/lib/n/db/README +232 -0
  70. data/lib/n/db/connection.rb +369 -0
  71. data/lib/n/db/make-release.sh +26 -0
  72. data/lib/n/db/managed.rb +235 -0
  73. data/lib/n/db/mixins.rb +282 -0
  74. data/lib/n/db/mysql.rb +342 -0
  75. data/lib/n/db/psql.rb +378 -0
  76. data/lib/n/db/tools.rb +110 -0
  77. data/lib/n/db/utils.rb +99 -0
  78. data/lib/n/events.rb +118 -0
  79. data/lib/n/l10n.rb +22 -0
  80. data/lib/n/logger.rb +33 -0
  81. data/lib/n/macros.rb +53 -0
  82. data/lib/n/mixins.rb +46 -0
  83. data/lib/n/parts.rb +154 -0
  84. data/lib/n/properties.rb +194 -0
  85. data/lib/n/server.rb +61 -0
  86. data/lib/n/server/PLAYBACK.txt +8 -0
  87. data/lib/n/server/RESEARCH.txt +13 -0
  88. data/lib/n/server/filter.rb +77 -0
  89. data/lib/n/shaders.rb +167 -0
  90. data/lib/n/sitemap.rb +188 -0
  91. data/lib/n/std.rb +69 -0
  92. data/lib/n/sync/clc.rb +108 -0
  93. data/lib/n/sync/handler.rb +221 -0
  94. data/lib/n/sync/server.rb +170 -0
  95. data/lib/n/tools/README +11 -0
  96. data/lib/n/ui/date-select.rb +74 -0
  97. data/lib/n/ui/pager.rb +187 -0
  98. data/lib/n/ui/popup.rb +45 -0
  99. data/lib/n/ui/select.rb +41 -0
  100. data/lib/n/ui/tabs.rb +34 -0
  101. data/lib/n/utils/array.rb +92 -0
  102. data/lib/n/utils/cache.rb +144 -0
  103. data/lib/n/utils/gfx.rb +108 -0
  104. data/lib/n/utils/hash.rb +148 -0
  105. data/lib/n/utils/html.rb +147 -0
  106. data/lib/n/utils/http.rb +98 -0
  107. data/lib/n/utils/mail.rb +28 -0
  108. data/lib/n/utils/number.rb +31 -0
  109. data/lib/n/utils/pool.rb +66 -0
  110. data/lib/n/utils/string.rb +297 -0
  111. data/lib/n/utils/template.rb +38 -0
  112. data/lib/n/utils/time.rb +91 -0
  113. data/lib/n/utils/uri.rb +193 -0
  114. data/lib/xsl/base.xsl +205 -0
  115. data/lib/xsl/ce.xsl +30 -0
  116. data/lib/xsl/localization.xsl +23 -0
  117. data/lib/xsl/xforms.xsl +26 -0
  118. data/test/run.rb +95 -0
  119. metadata +187 -0
@@ -0,0 +1,89 @@
1
+ # = Configuration
2
+ #
3
+ # === Design:
4
+ #
5
+ # Use a separate file for configuration, makes the
6
+ # main file more readable, and allows for reconfiguring
7
+ # (reload) the webapp without restarting the server.
8
+ #
9
+ # FIXME: redesign this!
10
+ #
11
+ # code: gmosx
12
+ #
13
+ # (c) 2004 Navel, all rights reserved.
14
+ # $Id: config.rb 89 2004-10-20 12:55:58Z gmosx $
15
+
16
+ require "n/std"
17
+ require "n/properties"
18
+ require "n/logger"
19
+ require "n/config"
20
+
21
+ $name = "Simple"
22
+ $root_dir = "simple/root"
23
+
24
+ # Main logger
25
+
26
+ $log = Logger.new("simple/logs/app.log", 10);
27
+
28
+ # Events logger
29
+
30
+ $elog = Logger.new("simple/logs/events.log", "weekly");
31
+
32
+ require "n/db"
33
+ require "n/app/cluster"
34
+ require "n/config"
35
+
36
+ require "simple/conf/requires"
37
+ require "simple/conf/overrides"
38
+
39
+ $srv_extension_map = {
40
+ "sx" => ["text/html",
41
+ # N::App::AutoLoginFilter.new(
42
+ N::App::PageHandler.new
43
+ # )
44
+ ],
45
+ "si" => ["text/html",
46
+ N::App::PageHandler.new
47
+ ],
48
+ "rx" => ["text/html",
49
+ # N::App::AutoLoginFilter.new(
50
+ N::App::CodeHandler.new
51
+ # )
52
+ ]
53
+ }
54
+
55
+ # enable distributed sessions.
56
+ $drb_state = true
57
+ $drb_lm_server = "druby://:9000"
58
+ $drb_sessions_cluster = "druby://:8001"
59
+
60
+ module App
61
+
62
+ # Config
63
+ #
64
+ module Config
65
+
66
+ def initialize_sitemap
67
+ end
68
+
69
+ #
70
+ #
71
+ def initialize_shaders
72
+ # $default_shader = N::NilShader.new
73
+ $default_shader = N::Shader.new("simple", "#{$root_dir}/shader/shader.xsl")
74
+ end
75
+
76
+ def initialize_events
77
+ $events = $event_manager = N::EventManager.new($elog)
78
+
79
+ # Example event:
80
+ $events.add_handler(
81
+ "messages/add", "ranking", proc { |user|
82
+ # nop
83
+ }
84
+ )
85
+ end
86
+
87
+ end
88
+
89
+ end # module
@@ -0,0 +1,53 @@
1
+ # = Debug Configuration
2
+ #
3
+ # Configuration to use while debugging, this is slow.
4
+ #--
5
+ # code:
6
+ # George Moschovitis <gm@navel.gr>
7
+ #
8
+ # (c) 2004 Navel, all rights reserved.
9
+ # $Id: debug-config.rb 84 2004-10-19 13:57:01Z gmosx $
10
+ #++
11
+
12
+ require "simple/conf/config"
13
+
14
+ puts "DEBUG configuration\n\n"
15
+
16
+ # If set to true disables xsl caching. Usefull when debugging xsls.
17
+
18
+ $reload_xsl = true
19
+
20
+ # If set to true disables script compilation. Usefull when debugging
21
+ # statically included scripts.
22
+
23
+ $reload_scripts = true
24
+
25
+ # Logger (redirect to STDERR)
26
+
27
+ $log = Logger.new(STDERR);
28
+ $log.level = Logger::DEBUG
29
+
30
+ # Events logger
31
+
32
+ $elog = Logger.new(STDERR);
33
+ $elog.level = Logger::INFO
34
+
35
+ # Database
36
+
37
+ $db = N::Db.new(
38
+ :address => "localhost",
39
+ :database => "simple",
40
+ :user => "postgres",
41
+ :password => "navelrulez",
42
+ # gmosx: NEVER set to 1 to avoid deadlocks!
43
+ :connection_count => 5
44
+ )
45
+
46
+ $appsrv_address = "127.0.0.1"
47
+ $appsrv_port = 9090
48
+ $srv_url = "http://127.0.0.1:8080"
49
+ #$srv_url = "http://192.168.0.3:8080"
50
+
51
+ # gmosx: no error page in debug mode to avoid loops when there
52
+ # is a bug in the handler code or the shader.
53
+ $error_page_url = nil
@@ -0,0 +1,48 @@
1
+ # = Live Configuration
2
+ #
3
+ # Configuration to use in the live server, optimized for speed.
4
+ #
5
+ #--
6
+ # code:
7
+ # George Moschovitis <gm@navel.gr>
8
+ #
9
+ # (c) 2004 Navel, all rights reserved.
10
+ # $Id: live-config.rb 87 2004-10-19 17:27:45Z gmosx $
11
+ #++
12
+
13
+ require "simple/conf/config"
14
+
15
+ puts "LIVE configuration\n\n"
16
+
17
+ # If set to true disables xsl caching. Usefull when debugging xsls.
18
+
19
+ $reload_xsl = false
20
+
21
+ # If set to true disables script compilation. Usefull when debugging
22
+ # statically included scripts.
23
+
24
+ $reload_scripts = false
25
+
26
+ # Logger
27
+
28
+ $log.level = Logger::INFO
29
+
30
+ # Events logger
31
+
32
+ $elog.level = Logger::INFO
33
+
34
+ # Database
35
+
36
+ $db = N::Db.new(
37
+ :address => "localhost",
38
+ :database => "simple",
39
+ :user => "postgres",
40
+ :password => "navelrulez",
41
+ :connection_count => 20
42
+ )
43
+
44
+ $appsrv_address = "127.0.0.1"
45
+ $appsrv_port = 9090
46
+ $srv_url = "http://127.0.0.1:8080"
47
+ #$srv_url = "http://192.168.0.3:8080"
48
+
@@ -0,0 +1,9 @@
1
+ # = Simple
2
+ #
3
+ # Framework overrides.
4
+ #
5
+ # === Todo:
6
+ #
7
+ # - find a better name for this file.
8
+
9
+
@@ -0,0 +1,51 @@
1
+ # = Requires all needed files
2
+ #
3
+ # === Design:
4
+ #
5
+ # Collect all requires in one file includable
6
+ # in multiple executable scripts. Moreover, it
7
+ # makes the main script file more readable.
8
+ #
9
+ # === Ideas:
10
+ #
11
+ # - use load instead of require to make reloadable?
12
+ #
13
+ #--
14
+ # code:
15
+ # George Moschovitis <gm@navel.gr>
16
+ #
17
+ # (c) 2004 Navel, all rights reserved.
18
+ # $Id: requires.rb 84 2004-10-19 13:57:01Z gmosx $
19
+ #++
20
+
21
+ require "n/std"
22
+ require "n/properties"
23
+
24
+ require "n/db"
25
+ require "n/l10n"
26
+ require "n/logger"
27
+ require "n/parts"
28
+ require "n/events"
29
+ require "n/shaders"
30
+ require "n/mixins"
31
+ require "n/sitemap"
32
+
33
+ require "n/utils/number"
34
+ require "n/utils/string"
35
+ require "n/utils/gfx"
36
+ require "n/utils/html"
37
+ require "n/utils/hash"
38
+ require "n/utils/array"
39
+
40
+ require "n/ui/popup"
41
+ require "n/ui/select"
42
+ require "n/ui/pager"
43
+ require "n/ui/tabs"
44
+ require "n/ui/date-select"
45
+
46
+ require "n/app/cluster"
47
+ require "n/app/handlers/page-handler"
48
+ require "n/app/handlers/code-handler"
49
+
50
+ require "articles/part"
51
+
@@ -0,0 +1,32 @@
1
+ #! /bin/sh
2
+
3
+ ARGV="$@"
4
+
5
+ case $ARGV in
6
+ start)
7
+ /usr/sbin/httpd -d `pwd` -f conf/apache.conf
8
+ ruby -C../../.. nitro/bin/cluster.rb --daemon
9
+ ruby -C.. simple/app.rb --start # --daemon
10
+ ERROR=$?
11
+ ;;
12
+ restart)
13
+ # restart appserver only!
14
+ export ASPID= `ps ax | grep app.rb | grep ruby | cut -d" " -f1`
15
+ if [ -n "$ASPID" ]; then
16
+ echo $ASPID
17
+ kill -9 $ASPID
18
+ fi
19
+ ruby -C.. simple/app.rb --restart # --daemon
20
+ ERROR=$?
21
+ ;;
22
+ stop)
23
+ killall -9 ruby httpd
24
+ ERROR=$?
25
+ ;;
26
+ *)
27
+ echo "NOP"
28
+ ERROR=$?
29
+ esac
30
+
31
+ exit $ERROR
32
+
@@ -0,0 +1,33 @@
1
+ # = Environment
2
+ #
3
+ # Require this file in your script to gain access to the full
4
+ # AppServer environment.
5
+ #
6
+ # code:
7
+ # George Moschovitis <gm@navel.gr>
8
+ #
9
+ # (c) 2004 Navel, all rights reserved.
10
+ # $Id: env.rb 69 2004-10-18 09:33:17Z gmosx $
11
+
12
+ $:.unshift ".."
13
+ $:.unshift "simple/lib"
14
+ $:.unshift "../lib"
15
+
16
+ $DBG = true
17
+ $DBG ? (require "simple/conf/debug-config") : (require "simple/conf/live-config")
18
+
19
+ require "n/app/server"
20
+ require "n/db/tools" # very useful :)
21
+
22
+ $drb_lm_server = "druby://:10000"
23
+
24
+ module App
25
+
26
+ class Server < N::App::Server
27
+ include App::Config
28
+ end
29
+
30
+ end # module
31
+
32
+ $app = App::Server.new.exec()
33
+
@@ -0,0 +1,12 @@
1
+ # = Install
2
+ #
3
+ #--
4
+ # code:
5
+ # George Moschovitis <gm@navel.gr>
6
+ #
7
+ # (c) 2004 Navel, all rights reserved.
8
+ # $Id: install.rb 84 2004-10-19 13:57:01Z gmosx $
9
+ #++
10
+
11
+ `createdb simple -U postgres`
12
+
@@ -0,0 +1,35 @@
1
+ # = Entities for the Articles part.
2
+ #
3
+ #--
4
+ # code:
5
+ # George Moschovitis <gm@navel.gr>
6
+ #
7
+ # (c) 2004 Navel, all rights reserved.
8
+ # $Id: entities.rb 87 2004-10-19 17:27:45Z gmosx $
9
+ #++
10
+
11
+ module N
12
+
13
+ # = Article
14
+ #
15
+ class Article
16
+ include N::Entity
17
+ include N::CreateTime
18
+ manage {
19
+ prop_accessor String, :title
20
+ prop_accessor String, :body
21
+ }
22
+ end
23
+
24
+ # = Comment
25
+ #
26
+ class Comment
27
+ include N::Entity
28
+ include N::Child
29
+ include N::CreateTime
30
+ manage {
31
+ prop_accessor String, :body
32
+ }
33
+ end
34
+
35
+ end # module
@@ -0,0 +1,36 @@
1
+ # = Base English Localization Dictionary
2
+ #
3
+ #--
4
+ # code:
5
+ # George Moschovitis <gm@navel.gr>
6
+ #
7
+ # (c) 2004 Navel, all rights reserved.
8
+ # $Id: lc-en.rb 84 2004-10-19 13:57:01Z gmosx $
9
+ #++
10
+
11
+ $lc_en.update({
12
+
13
+ :general => "General",
14
+ :edit => "Edit",
15
+ :add => "Add",
16
+ :del => "Delete",
17
+ :cancel => "Cancel",
18
+ :preview => "Preview",
19
+ :store => "Store",
20
+ :update => "Update",
21
+ :submit => "Submit",
22
+ :title => "Title",
23
+ :body => "Body",
24
+ :description => "Description",
25
+ :answer => "Answer",
26
+ :refresh => "Refresh",
27
+ :select_all => "Select all",
28
+ :clear_all => "Clear all",
29
+
30
+ # search
31
+
32
+ :search => "Search",
33
+ :search_results => "Search results",
34
+ :results_found => proc { |count| "#{count} results found" }
35
+
36
+ })
@@ -0,0 +1,55 @@
1
+ # = Methods for the Articles part.
2
+ #
3
+ #--
4
+ # code:
5
+ # George Moschovitis <gm@navel.gr>
6
+ #
7
+ # (c) 2004 Navel, all rights reserved.
8
+ # $Id: methods.rb 84 2004-10-19 13:57:01Z gmosx $
9
+ #++
10
+
11
+ module P
12
+
13
+ module ArticlesMethods
14
+
15
+ # Add an article
16
+ #
17
+ def add_article(request)
18
+ if request.delete("add_article")
19
+ article = N::Article.new
20
+ request.update_entity(article)
21
+ $db << article
22
+ request.redirect("index.sx")
23
+ end
24
+ end
25
+
26
+ # Delete an article
27
+ #
28
+ def del_article(request)
29
+ if oid = request.delete("del_article_oid")
30
+ $db.delete(oid.to_i, N::Article)
31
+ end
32
+ end
33
+
34
+ # Add a comment
35
+ #
36
+ def add_comment(request)
37
+ if pid = request.delete("add_comment_pid")
38
+ comment = N::Comment.new
39
+ comment.pid = pid
40
+ request.update_entity(comment)
41
+ $db << comment
42
+ end
43
+ end
44
+
45
+ # Delete a comment
46
+ #
47
+ def del_comment(request)
48
+ if oid = request.delete("del_comment_oid")
49
+ $db.delete(oid.to_i, N::Comment)
50
+ end
51
+ end
52
+
53
+ end
54
+
55
+ end # module