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.
- data/AUTHORS +8 -0
- data/ChangeLog +1546 -0
- data/LICENCE +32 -0
- data/README +278 -0
- data/RELEASES +7 -0
- data/Rakefile +79 -0
- data/bin/cluster.rb +219 -0
- data/doc/architecture.txt +28 -0
- data/doc/bugs.txt +7 -0
- data/doc/css.txt +20 -0
- data/doc/ideas.txt +120 -0
- data/doc/pg.txt +47 -0
- data/doc/svn.txt +82 -0
- data/doc/todo.txt +30 -0
- data/etc/new-project.rb +18 -0
- data/examples/simple/README +15 -0
- data/examples/simple/app.rb +31 -0
- data/examples/simple/conf/apache.conf +100 -0
- data/examples/simple/conf/config.rb +89 -0
- data/examples/simple/conf/debug-config.rb +53 -0
- data/examples/simple/conf/live-config.rb +48 -0
- data/examples/simple/conf/overrides.rb +9 -0
- data/examples/simple/conf/requires.rb +51 -0
- data/examples/simple/ctl +32 -0
- data/examples/simple/env.rb +33 -0
- data/examples/simple/install.rb +12 -0
- data/examples/simple/lib/articles/entities.rb +35 -0
- data/examples/simple/lib/articles/lc-en.rb +36 -0
- data/examples/simple/lib/articles/methods.rb +55 -0
- data/examples/simple/lib/articles/part.rb +58 -0
- data/examples/simple/logs/access_log +2 -0
- data/examples/simple/logs/apache.log +3 -0
- data/examples/simple/logs/app.log +1 -0
- data/examples/simple/logs/events.log +1 -0
- data/examples/simple/root/add-article.sx +15 -0
- data/examples/simple/root/article-form.ss +20 -0
- data/examples/simple/root/comments-form.ss +16 -0
- data/examples/simple/root/comments.si +30 -0
- data/examples/simple/root/index.sx +44 -0
- data/examples/simple/root/shader/shader.xsl +100 -0
- data/examples/simple/root/shader/style.css +9 -0
- data/examples/simple/root/view-article.sx +30 -0
- data/examples/tiny/app.rb +30 -0
- data/examples/tiny/conf/apache.conf +100 -0
- data/examples/tiny/conf/config.rb +67 -0
- data/examples/tiny/conf/requires.rb +40 -0
- data/examples/tiny/ctl +31 -0
- data/examples/tiny/logs/access_log +9 -0
- data/examples/tiny/logs/apache.log +9 -0
- data/examples/tiny/root/index.sx +35 -0
- data/lib/n/app/cluster.rb +219 -0
- data/lib/n/app/cookie.rb +86 -0
- data/lib/n/app/filters/autologin.rb +50 -0
- data/lib/n/app/fragment.rb +67 -0
- data/lib/n/app/handlers.rb +120 -0
- data/lib/n/app/handlers/code-handler.rb +184 -0
- data/lib/n/app/handlers/page-handler.rb +612 -0
- data/lib/n/app/request-part.rb +59 -0
- data/lib/n/app/request.rb +653 -0
- data/lib/n/app/script.rb +398 -0
- data/lib/n/app/server.rb +53 -0
- data/lib/n/app/session.rb +224 -0
- data/lib/n/app/user.rb +47 -0
- data/lib/n/app/webrick-servlet.rb +213 -0
- data/lib/n/app/webrick.rb +70 -0
- data/lib/n/application.rb +187 -0
- data/lib/n/config.rb +31 -0
- data/lib/n/db.rb +217 -0
- data/lib/n/db/README +232 -0
- data/lib/n/db/connection.rb +369 -0
- data/lib/n/db/make-release.sh +26 -0
- data/lib/n/db/managed.rb +235 -0
- data/lib/n/db/mixins.rb +282 -0
- data/lib/n/db/mysql.rb +342 -0
- data/lib/n/db/psql.rb +378 -0
- data/lib/n/db/tools.rb +110 -0
- data/lib/n/db/utils.rb +99 -0
- data/lib/n/events.rb +118 -0
- data/lib/n/l10n.rb +22 -0
- data/lib/n/logger.rb +33 -0
- data/lib/n/macros.rb +53 -0
- data/lib/n/mixins.rb +46 -0
- data/lib/n/parts.rb +154 -0
- data/lib/n/properties.rb +194 -0
- data/lib/n/server.rb +61 -0
- data/lib/n/server/PLAYBACK.txt +8 -0
- data/lib/n/server/RESEARCH.txt +13 -0
- data/lib/n/server/filter.rb +77 -0
- data/lib/n/shaders.rb +167 -0
- data/lib/n/sitemap.rb +188 -0
- data/lib/n/std.rb +69 -0
- data/lib/n/sync/clc.rb +108 -0
- data/lib/n/sync/handler.rb +221 -0
- data/lib/n/sync/server.rb +170 -0
- data/lib/n/tools/README +11 -0
- data/lib/n/ui/date-select.rb +74 -0
- data/lib/n/ui/pager.rb +187 -0
- data/lib/n/ui/popup.rb +45 -0
- data/lib/n/ui/select.rb +41 -0
- data/lib/n/ui/tabs.rb +34 -0
- data/lib/n/utils/array.rb +92 -0
- data/lib/n/utils/cache.rb +144 -0
- data/lib/n/utils/gfx.rb +108 -0
- data/lib/n/utils/hash.rb +148 -0
- data/lib/n/utils/html.rb +147 -0
- data/lib/n/utils/http.rb +98 -0
- data/lib/n/utils/mail.rb +28 -0
- data/lib/n/utils/number.rb +31 -0
- data/lib/n/utils/pool.rb +66 -0
- data/lib/n/utils/string.rb +297 -0
- data/lib/n/utils/template.rb +38 -0
- data/lib/n/utils/time.rb +91 -0
- data/lib/n/utils/uri.rb +193 -0
- data/lib/xsl/base.xsl +205 -0
- data/lib/xsl/ce.xsl +30 -0
- data/lib/xsl/localization.xsl +23 -0
- data/lib/xsl/xforms.xsl +26 -0
- data/test/run.rb +95 -0
- 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,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
|
+
|
data/examples/simple/ctl
ADDED
|
@@ -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,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
|