nitro 0.31.0 → 0.40.0
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/nitro +135 -37
- data/doc/CHANGELOG.1 +108 -108
- data/doc/CHANGELOG.2 +89 -89
- data/doc/CHANGELOG.3 +105 -105
- data/{CHANGELOG → doc/CHANGELOG.4} +509 -509
- data/doc/{AUTHORS → CONTRIBUTORS} +49 -37
- data/doc/LIBRARIES +13 -0
- data/doc/LICENSE +2 -3
- data/doc/MIGRATION +45 -0
- data/doc/RELEASES +131 -11
- data/doc/TODO +67 -0
- data/lib/glue/magick.rb +0 -3
- data/lib/glue/sweeper.rb +30 -15
- data/lib/glue/thumbnails.rb +0 -2
- data/lib/glue/webfile.rb +23 -11
- data/lib/nitro.rb +37 -44
- data/lib/nitro/adapter/cgi.rb +0 -3
- data/lib/nitro/adapter/console.rb +0 -2
- data/lib/nitro/adapter/fastcgi.rb +6 -3
- data/lib/nitro/adapter/mongrel.rb +97 -58
- data/lib/nitro/adapter/script.rb +4 -6
- data/lib/nitro/adapter/webrick.rb +33 -87
- data/lib/nitro/adapter/webrick/vcr.rb +85 -0
- data/lib/nitro/caching.rb +0 -2
- data/lib/nitro/caching/actions.rb +0 -2
- data/lib/nitro/caching/fragments.rb +0 -2
- data/lib/nitro/caching/output.rb +45 -16
- data/lib/nitro/caching/proxy.rb +49 -0
- data/lib/nitro/cgi.rb +3 -6
- data/lib/nitro/cgi/cookie.rb +0 -3
- data/lib/nitro/cgi/request.rb +67 -24
- data/lib/nitro/cgi/response.rb +0 -2
- data/lib/nitro/cgi/{sendfile.rb → send_file.rb} +7 -6
- data/lib/nitro/compiler.rb +62 -55
- data/lib/nitro/compiler/cleanup.rb +0 -3
- data/lib/nitro/compiler/elements.rb +31 -28
- data/lib/nitro/compiler/errors.rb +2 -5
- data/lib/nitro/compiler/include.rb +10 -8
- data/lib/nitro/compiler/layout.rb +0 -2
- data/lib/nitro/compiler/localization.rb +0 -2
- data/lib/nitro/compiler/markup.rb +14 -6
- data/lib/nitro/compiler/morphing.rb +1 -5
- data/lib/nitro/compiler/script.rb +2 -4
- data/lib/nitro/compiler/squeeze.rb +0 -2
- data/lib/nitro/compiler/xslt.rb +0 -2
- data/lib/nitro/context.rb +10 -5
- data/lib/nitro/control.rb +18 -0
- data/lib/nitro/control/attribute.rb +88 -0
- data/lib/nitro/control/attribute/checkbox.rb +19 -0
- data/lib/nitro/control/attribute/datetime.rb +21 -0
- data/lib/nitro/control/attribute/file.rb +20 -0
- data/lib/nitro/control/attribute/fixnum.rb +26 -0
- data/lib/nitro/control/attribute/float.rb +26 -0
- data/lib/nitro/control/attribute/options.rb +38 -0
- data/lib/nitro/control/attribute/password.rb +16 -0
- data/lib/nitro/control/attribute/text.rb +16 -0
- data/lib/nitro/control/attribute/textarea.rb +16 -0
- data/lib/nitro/control/none.rb +16 -0
- data/lib/nitro/control/relation.rb +53 -0
- data/lib/nitro/control/relation/belongs_to.rb +0 -0
- data/lib/nitro/control/relation/has_many.rb +97 -0
- data/lib/nitro/control/relation/joins_many.rb +0 -0
- data/lib/nitro/control/relation/many_to_many.rb +0 -0
- data/lib/nitro/control/relation/refers_to.rb +29 -0
- data/lib/nitro/controller.rb +7 -296
- data/lib/nitro/dispatcher.rb +72 -34
- data/lib/nitro/element.rb +36 -10
- data/lib/nitro/element/javascript.rb +0 -2
- data/lib/nitro/flash.rb +23 -10
- data/lib/nitro/global.rb +36 -11
- data/lib/nitro/helper.rb +22 -8
- data/lib/nitro/helper/benchmark.rb +0 -2
- data/lib/nitro/helper/buffer.rb +0 -3
- data/lib/nitro/helper/css.rb +12 -0
- data/lib/nitro/helper/debug.rb +1 -3
- data/lib/nitro/helper/default.rb +1 -0
- data/lib/nitro/helper/feed.rb +400 -386
- data/lib/nitro/helper/form.rb +246 -116
- data/lib/nitro/helper/javascript.rb +28 -2
- data/lib/nitro/helper/javascript/morphing.rb +0 -2
- data/lib/nitro/helper/javascript/prototype.rb +0 -2
- data/lib/nitro/helper/javascript/scriptaculous.rb +0 -1
- data/lib/nitro/helper/layout.rb +0 -2
- data/lib/nitro/helper/navigation.rb +87 -0
- data/lib/nitro/helper/pager.rb +11 -22
- data/lib/nitro/helper/table.rb +9 -32
- data/lib/nitro/helper/url.rb +104 -0
- data/lib/nitro/helper/xhtml.rb +20 -4
- data/lib/nitro/helper/xml.rb +0 -2
- data/lib/nitro/markup.rb +131 -0
- data/lib/nitro/part.rb +52 -7
- data/lib/nitro/publishable.rb +328 -0
- data/lib/nitro/render.rb +30 -61
- data/lib/nitro/router.rb +12 -4
- data/lib/nitro/sanitize.rb +48 -0
- data/lib/nitro/scaffold.rb +9 -11
- data/lib/nitro/scaffold/controller.rb +25 -0
- data/lib/nitro/scaffold/model.rb +150 -0
- data/lib/nitro/scaffolding.rb +1 -3
- data/lib/nitro/server.rb +57 -32
- data/lib/nitro/server/drb.rb +16 -2
- data/lib/nitro/server/runner.rb +80 -102
- data/lib/nitro/service.rb +0 -1
- data/lib/nitro/service/xmlrpc.rb +0 -2
- data/lib/nitro/session.rb +26 -18
- data/lib/nitro/session/drb.rb +2 -16
- data/lib/nitro/session/memory.rb +0 -2
- data/lib/nitro/template.rb +219 -0
- data/lib/nitro/test/assertions.rb +1 -3
- data/lib/nitro/test/context.rb +0 -1
- data/lib/nitro/test/testcase.rb +0 -1
- data/lib/nitro/version.rb +6 -0
- data/lib/part/admin.rb +16 -0
- data/lib/part/admin/controller.rb +19 -0
- data/lib/part/admin/helper.rb +30 -0
- data/lib/part/admin/og/controller.rb +114 -0
- data/lib/part/admin/og/customize.rb +4 -0
- data/lib/part/admin/og/template/index.xhtml +27 -0
- data/lib/part/admin/og/template/list.xhtml +38 -0
- data/lib/part/admin/og/template/search.xhtml +20 -0
- data/lib/part/admin/og/template/update.xhtml +25 -0
- data/lib/part/admin/skin.rb +207 -0
- data/lib/part/admin/template/denied.xhtml +13 -0
- data/lib/part/admin/template/index.xhtml +12 -0
- data/lib/part/admin/todo.txt +2 -0
- data/proto/public/error.xhtml +4 -2
- data/proto/run.rb +0 -2
- data/test/glue/tc_webfile.rb +1 -0
- data/test/nitro/cgi/tc_request.rb +23 -0
- data/test/nitro/helper/tc_feed.rb +0 -3
- data/test/nitro/helper/tc_navbar.rb +74 -0
- data/test/nitro/helper/tc_table.rb +2 -0
- data/test/nitro/tc_cgi.rb +72 -19
- data/test/nitro/tc_controller.rb +35 -26
- data/test/nitro/tc_controller_aspect.rb +1 -0
- data/test/nitro/tc_controller_params.rb +864 -0
- data/test/nitro/tc_dispatcher.rb +2 -2
- data/test/nitro/tc_element.rb +16 -16
- data/test/nitro/tc_flash.rb +3 -3
- data/test/nitro/tc_markup.rb +31 -0
- data/test/nitro/tc_render.rb +12 -14
- data/test/nitro/tc_session.rb +9 -7
- data/test/nitro/tc_template.rb +34 -0
- metadata +217 -198
- data/INSTALL +0 -121
- data/ProjectInfo +0 -74
- data/README +0 -555
- data/doc/apache.txt +0 -9
- data/doc/config.txt +0 -28
- data/doc/faq.txt +0 -7
- data/doc/lhttpd.txt +0 -7
- data/lib/nitro/adapter/scgi.rb +0 -239
- data/lib/nitro/helper/form/builder.rb +0 -144
- data/lib/nitro/helper/form/controls.rb +0 -389
- data/lib/nitro/helper/rss.rb +0 -72
- data/proto/conf/apache.conf +0 -51
- data/proto/public/scaffold/advanced_search.xhtml +0 -30
- data/proto/public/scaffold/edit.xhtml +0 -11
- data/proto/public/scaffold/form.xhtml +0 -1
- data/proto/public/scaffold/index.xhtml +0 -20
- data/proto/public/scaffold/list.xhtml +0 -32
- data/proto/public/scaffold/new.xhtml +0 -11
- data/proto/public/scaffold/search.xhtml +0 -29
- data/proto/public/scaffold/view.xhtml +0 -8
- data/proto/script/scgi_ctl +0 -221
- data/proto/script/scgi_service +0 -128
- data/setup.rb +0 -1585
- data/src/part/admin.rb +0 -16
- data/src/part/admin/controller.rb +0 -81
- data/src/part/admin/skin.rb +0 -21
- data/src/part/admin/system.css +0 -135
- data/src/part/admin/template/denied.xhtml +0 -1
- data/src/part/admin/template/index.xhtml +0 -43
- data/test/nitro/helper/tc_rss.rb +0 -24
data/lib/nitro/router.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
require 'facet/dictionary'
|
3
|
+
|
1
4
|
module Nitro
|
2
5
|
|
3
6
|
# Router mixin. Typically used to generate 'nice' urls.
|
@@ -38,6 +41,9 @@ module Nitro
|
|
38
41
|
module Router
|
39
42
|
|
40
43
|
# Strip the beginning of the path, used by cgi adapter.
|
44
|
+
#--
|
45
|
+
# gmosx: !?! remove!
|
46
|
+
#++
|
41
47
|
|
42
48
|
setting :strip_path, :default => nil, :doc => 'Strip the beginning of the path, used by cgi adapter'
|
43
49
|
|
@@ -62,14 +68,18 @@ module Router
|
|
62
68
|
# Returns false if no decoding is possible.
|
63
69
|
|
64
70
|
def decode_route(url)
|
71
|
+
# Front end server (for example Apache) some times escape
|
72
|
+
# the url.
|
73
|
+
url = CGI.unescape(url)
|
74
|
+
|
65
75
|
for rule in @rules
|
66
76
|
if md = url.match(rule[:match])
|
67
77
|
params = nil
|
68
78
|
if param_names = rule[:params] || rule[:param]
|
69
79
|
param_names = [ param_names ] unless param_names.is_a?(Array)
|
70
|
-
params =
|
80
|
+
params = Dictionary.new
|
71
81
|
md.captures.each_with_index do |val, idx|
|
72
|
-
params[param_names[idx].to_s
|
82
|
+
params << [param_names[idx].to_s, val]
|
73
83
|
end
|
74
84
|
end
|
75
85
|
Logger.debug "Rewriting '#{url}' to '#{rule[:controller]}##{rule[:action]}(#{params.values.join(', ')})." if $DBG
|
@@ -119,5 +129,3 @@ module Router
|
|
119
129
|
end
|
120
130
|
|
121
131
|
end
|
122
|
-
|
123
|
-
# * George Moschovitis <gm@navel.gr>
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# Code from rubyonrails project (http://www.rubyonrails.com)
|
2
|
+
# Temporarily here.
|
3
|
+
|
4
|
+
require 'html/tokenizer'
|
5
|
+
require 'html/node'
|
6
|
+
|
7
|
+
VERBOTEN_TAGS = %w(form script) unless defined?(VERBOTEN_TAGS)
|
8
|
+
VERBOTEN_ATTRS = /^on/i unless defined?(VERBOTEN_ATTRS)
|
9
|
+
|
10
|
+
class String
|
11
|
+
# Sanitizes the given HTML by making form and script tags into regular
|
12
|
+
# text, and removing all "onxxx" attributes (so that arbitrary Javascript
|
13
|
+
# cannot be executed). Also removes href attributes that start with
|
14
|
+
# "javascript:".
|
15
|
+
#
|
16
|
+
# Returns the sanitized text.
|
17
|
+
def self.sanitize(html)
|
18
|
+
# only do this if absolutely necessary
|
19
|
+
if html.index("<")
|
20
|
+
tokenizer = HTML::Tokenizer.new(html)
|
21
|
+
new_text = ""
|
22
|
+
|
23
|
+
while token = tokenizer.next
|
24
|
+
node = HTML::Node.parse(nil, 0, 0, token, false)
|
25
|
+
new_text << case node
|
26
|
+
when HTML::Tag
|
27
|
+
if VERBOTEN_TAGS.include?(node.name)
|
28
|
+
node.to_s.gsub(/</, "<")
|
29
|
+
else
|
30
|
+
if node.closing != :close
|
31
|
+
node.attributes.delete_if { |attr,v| attr =~ VERBOTEN_ATTRS }
|
32
|
+
if node.attributes["href"] =~ /^javascript:/i
|
33
|
+
node.attributes.delete "href"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
node.to_s
|
37
|
+
end
|
38
|
+
else
|
39
|
+
node.to_s.gsub(/</, "<")
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
html = new_text
|
44
|
+
end
|
45
|
+
|
46
|
+
html
|
47
|
+
end
|
48
|
+
end
|
data/lib/nitro/scaffold.rb
CHANGED
@@ -44,9 +44,9 @@ module Scaffold
|
|
44
44
|
def enchant_class klass
|
45
45
|
# to_s
|
46
46
|
|
47
|
-
if klass.
|
47
|
+
if klass.instance_methods.include? 'title'
|
48
48
|
define_instance_method klass, :to_s, %{ title }, force = true
|
49
|
-
elsif klass.
|
49
|
+
elsif klass.instance_methods.include? 'name'
|
50
50
|
define_instance_method klass, :to_s, %{ name }, force = true
|
51
51
|
end
|
52
52
|
|
@@ -54,7 +54,7 @@ module Scaffold
|
|
54
54
|
# ex: blog/articles/23
|
55
55
|
|
56
56
|
define_instance_method klass, :to_href, %{
|
57
|
-
"\#{self.class.ann.self.controller.mount_path}/\#{self.class.name.underscore.pluralize}/\#{oid}"
|
57
|
+
"\#{self.class.ann.self.controller.mount_path}/\#{self.class.name.demodulize.underscore.pluralize}/\#{oid}"
|
58
58
|
}
|
59
59
|
|
60
60
|
# to_link
|
@@ -68,7 +68,7 @@ module Scaffold
|
|
68
68
|
# ex: admin/articles/edit/23
|
69
69
|
|
70
70
|
define_instance_method klass, :to_admin_href, %{
|
71
|
-
"\#{AdminController.mount_path}/\#{self.class.name.underscore.pluralize}/edit/\#{oid}"
|
71
|
+
"\#{AdminController.mount_path}/\#{self.class.name.underscore.gsub(/::/, '_').pluralize}/edit/\#{oid}"
|
72
72
|
}
|
73
73
|
|
74
74
|
if defined? AdminController
|
@@ -76,14 +76,14 @@ module Scaffold
|
|
76
76
|
# ex: admin/articles/list
|
77
77
|
|
78
78
|
define_instance_method klass, :to_admin_href, %{
|
79
|
-
"\#{AdminController.mount_path}/\#{self.class.name.underscore.pluralize}/list"
|
79
|
+
"\#{AdminController.mount_path}/\#{self.class.name.underscore.gsub(/::/, '_').pluralize}/list"
|
80
80
|
}
|
81
81
|
|
82
82
|
# to_admin_href
|
83
83
|
# ex: admin/articles/list
|
84
84
|
|
85
85
|
define_class_method klass, :to_admin_href, %{
|
86
|
-
"\#{AdminController.mount_path}/\#{self.name.underscore.pluralize}/list"
|
86
|
+
"\#{AdminController.mount_path}/\#{self.name.underscore.gsub(/::/, '_').pluralize}/list"
|
87
87
|
}
|
88
88
|
end
|
89
89
|
end
|
@@ -97,7 +97,7 @@ module Scaffold
|
|
97
97
|
#++
|
98
98
|
|
99
99
|
def define_instance_method klass, meth, body, force = false
|
100
|
-
|
100
|
+
if force or (!klass.instance_methods.include? meth.to_s)
|
101
101
|
klass.module_eval %{
|
102
102
|
def #{meth}
|
103
103
|
#{body}
|
@@ -112,8 +112,8 @@ module Scaffold
|
|
112
112
|
# does not already respond to it.
|
113
113
|
#++
|
114
114
|
|
115
|
-
def define_class_method klass, meth, body
|
116
|
-
|
115
|
+
def define_class_method klass, meth, body, force = false
|
116
|
+
if force or (!klass.respond_to? meth.to_s)
|
117
117
|
klass.module_eval %{
|
118
118
|
def self.#{meth}
|
119
119
|
#{body}
|
@@ -137,5 +137,3 @@ module Scaffold
|
|
137
137
|
end
|
138
138
|
|
139
139
|
end
|
140
|
-
|
141
|
-
# * George Moschovitis <gm@navel.gr>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Nitro
|
2
|
+
|
3
|
+
module Scaffold
|
4
|
+
|
5
|
+
# Automatically creates a scaffold controller to handle the
|
6
|
+
# given models.
|
7
|
+
|
8
|
+
def self.controller(*models)
|
9
|
+
for m in models
|
10
|
+
scaffold_controller(m)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.enchant_controller(model)
|
15
|
+
eval %{
|
16
|
+
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
class Controller
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,150 @@
|
|
1
|
+
module Nitro
|
2
|
+
|
3
|
+
# Scaffolding is one facet of Nitro's Rapid Application
|
4
|
+
# Develpoment (RAD) features. The scaffolder automatically
|
5
|
+
# generates common code for managed object and their
|
6
|
+
# controllers.
|
7
|
+
|
8
|
+
module Scaffold
|
9
|
+
|
10
|
+
# Automatically enchant all models ?
|
11
|
+
|
12
|
+
setting :enchant_all_models, :default => true, :doc => 'Automatically enchant all models?'
|
13
|
+
|
14
|
+
# 'Enchant' a model class (typically a managed class,
|
15
|
+
# entity). A collection of useful methods are magically
|
16
|
+
# added to the class and/or the class instances.
|
17
|
+
#
|
18
|
+
# * to_s
|
19
|
+
# * to_href
|
20
|
+
# * to_link
|
21
|
+
# * to_edit_href
|
22
|
+
# * to_admin_href
|
23
|
+
#--
|
24
|
+
# to_xxx is used instead of xxx in an attempt to avoid
|
25
|
+
# colisions with user defined methods.
|
26
|
+
#++
|
27
|
+
|
28
|
+
def self.model(*classes)
|
29
|
+
for c in classes
|
30
|
+
enchant_model c
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
#--
|
35
|
+
# Actually enchant the given class. Override this method
|
36
|
+
# to customize for your application. The string calculation
|
37
|
+
# code is deliberatly dynamic to work with Ruby's OO
|
38
|
+
# features.
|
39
|
+
#++
|
40
|
+
|
41
|
+
def self.enchant_model(klass)
|
42
|
+
# Find the controller that handles this model. Unless no
|
43
|
+
# controller annotation is defined, try to find a controller
|
44
|
+
# of the form: Model::Controller. Some examples:
|
45
|
+
#
|
46
|
+
# class Ticket
|
47
|
+
# ann self, :controller => SpecialTicketController
|
48
|
+
# ..
|
49
|
+
# end
|
50
|
+
#
|
51
|
+
# or try to find a Ticket::Controller class.
|
52
|
+
|
53
|
+
controller = klass.ann.self[:controller] || klass.constant('Controller')
|
54
|
+
|
55
|
+
# If the class defines a text_key use it to create more
|
56
|
+
# readable (and SEO friendly) urls.
|
57
|
+
|
58
|
+
key = klass.ann.self[:text_key] || 'oid'
|
59
|
+
|
60
|
+
# to_s
|
61
|
+
|
62
|
+
if klass.instance_methods.include? 'title'
|
63
|
+
define_instance_method klass, :to_s, %{ title }, force = true
|
64
|
+
elsif klass.instance_methods.include? 'name'
|
65
|
+
define_instance_method klass, :to_s, %{ name }, force = true
|
66
|
+
end
|
67
|
+
|
68
|
+
# to_href
|
69
|
+
# ex: /articles/23
|
70
|
+
|
71
|
+
define_instance_method klass, :to_href, %{
|
72
|
+
"\#{#{controller}.mount_path}/read/\#{#{key}}".squeeze('/')
|
73
|
+
}
|
74
|
+
|
75
|
+
# to_link
|
76
|
+
# ex: <a href="/articles/23">The article's title</a>
|
77
|
+
|
78
|
+
define_instance_method klass, :to_link, %{
|
79
|
+
%|<a href="\#{to_href}">\#{to_s}</a>|
|
80
|
+
}
|
81
|
+
|
82
|
+
# to_link
|
83
|
+
# ex: <a href="/articles/23">The article's title</a>
|
84
|
+
|
85
|
+
define_class_method klass, :controller, %{
|
86
|
+
#{controller}
|
87
|
+
}
|
88
|
+
|
89
|
+
if defined? OgSystemController
|
90
|
+
self.extend(OgSystemHelper)
|
91
|
+
|
92
|
+
# to_edit_href
|
93
|
+
# ex: admin/update/Article/23
|
94
|
+
|
95
|
+
define_instance_method klass, :to_edit_href, %{
|
96
|
+
"\#{OgSystemController.mount_path}/update/#{class_to_name(klass)}/\#{oid}"
|
97
|
+
}
|
98
|
+
|
99
|
+
# to_admin_href
|
100
|
+
# ex: admin/list/Article
|
101
|
+
|
102
|
+
define_instance_method klass, :to_admin_href, %{
|
103
|
+
"\#{AdminController.mount_path}/list/#{class_to_name(klass)}"
|
104
|
+
}
|
105
|
+
|
106
|
+
# to_admin_href
|
107
|
+
# ex: admin/list/Article
|
108
|
+
|
109
|
+
define_class_method klass, :to_admin_href, %{
|
110
|
+
"\#{AdminController.mount_path}/list/#{class_to_name(klass)}"
|
111
|
+
}
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
|
116
|
+
#--
|
117
|
+
# This helper defines an instance method for the
|
118
|
+
# scaffolded class. The method is only defined if the klass
|
119
|
+
# does not already respond to it.
|
120
|
+
#++
|
121
|
+
|
122
|
+
def self.define_instance_method(klass, meth, body, force = false)
|
123
|
+
if force or (!klass.instance_methods.include? meth.to_s)
|
124
|
+
klass.module_eval %{
|
125
|
+
def #{meth}
|
126
|
+
#{body}
|
127
|
+
end
|
128
|
+
}
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
#--
|
133
|
+
# This helper defines an class method for the
|
134
|
+
# scaffolded class. The method is only defined if the klass
|
135
|
+
# does not already respond to it.
|
136
|
+
#++
|
137
|
+
|
138
|
+
def self.define_class_method(klass, meth, body, force = false)
|
139
|
+
if force or (!klass.respond_to? meth.to_s)
|
140
|
+
klass.module_eval %{
|
141
|
+
def self.#{meth}
|
142
|
+
#{body}
|
143
|
+
end
|
144
|
+
}
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|
149
|
+
|
150
|
+
end
|
data/lib/nitro/scaffolding.rb
CHANGED
@@ -261,7 +261,7 @@ module Scaffolding
|
|
261
261
|
end
|
262
262
|
|
263
263
|
def action_path(sym)
|
264
|
-
action = "#{@base}/#{sym}"
|
264
|
+
action = "#{AdminController.mount_path}/#{@base}/#{sym}"
|
265
265
|
action << @suffix unless @suffix.nil? or sym == :index
|
266
266
|
return action
|
267
267
|
end
|
@@ -389,5 +389,3 @@ module Scaffolding
|
|
389
389
|
end
|
390
390
|
|
391
391
|
end
|
392
|
-
|
393
|
-
# * George Moschovitis <gm@navel.gr>
|
data/lib/nitro/server.rb
CHANGED
@@ -11,11 +11,11 @@ class Server
|
|
11
11
|
|
12
12
|
# The server listening port.
|
13
13
|
|
14
|
-
setting :port, :default =>
|
14
|
+
setting :port, :default => 9000, :doc => 'The server listening port'
|
15
15
|
|
16
|
-
# The map.
|
16
|
+
# The controller map.
|
17
17
|
|
18
|
-
setting :
|
18
|
+
setting :controller_map, :default => { '/' => Controller }, :doc => 'The controller map'
|
19
19
|
|
20
20
|
# The public files root directory.
|
21
21
|
|
@@ -28,8 +28,16 @@ class Server
|
|
28
28
|
# Additional server options. Useful to pass options to
|
29
29
|
# Webrick for example.
|
30
30
|
|
31
|
-
setting :options, :default => {}, :doc =>
|
31
|
+
setting :options, :default => {}, :doc => 'Additional server options'
|
32
32
|
|
33
|
+
# Handle static files? Typically this setting is true while
|
34
|
+
# debuging and when the server is running in stand alone mode.
|
35
|
+
# In production environments, the webapplication runs behind
|
36
|
+
# a front end proxy (for example apache, lighttpd, etc) that
|
37
|
+
# should handle static files.
|
38
|
+
|
39
|
+
setting :handle_static_files, :default => true, :doc => 'Handle static files?'
|
40
|
+
|
33
41
|
# The name of the application.
|
34
42
|
|
35
43
|
attr_accessor :name
|
@@ -87,7 +95,8 @@ class Server
|
|
87
95
|
def start(options = {})
|
88
96
|
@map['/'] = options[:controller] if options[:controller]
|
89
97
|
@dispatcher = options[:dispatcher] || Dispatcher.new(@map)
|
90
|
-
|
98
|
+
@dispatcher.server = self
|
99
|
+
|
91
100
|
return self
|
92
101
|
end
|
93
102
|
|
@@ -99,37 +108,53 @@ class Server
|
|
99
108
|
Mounter.new(self)
|
100
109
|
end
|
101
110
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
options = { :controller => options }
|
111
|
+
class << self
|
112
|
+
|
113
|
+
# Helper to set the default controller map for a Server.
|
114
|
+
|
115
|
+
def map(ctrl_map = nil)
|
116
|
+
unless ctrl_map
|
117
|
+
Server.controller_map
|
118
|
+
else
|
119
|
+
Server.controller_map ||= {}
|
120
|
+
Server.controller_map.update(ctrl_map)
|
121
|
+
end
|
114
122
|
end
|
123
|
+
alias map= map
|
124
|
+
|
125
|
+
# Helper method.
|
126
|
+
#
|
127
|
+
# Available options:
|
128
|
+
#
|
129
|
+
# :dispatcher, :controller
|
130
|
+
#
|
131
|
+
# Altetnatively you can pass a single Controller class instead
|
132
|
+
# of the options hash.
|
133
|
+
|
134
|
+
def run(options = {})
|
135
|
+
unless options.is_a?(Hash)
|
136
|
+
options = { :controller => options }
|
137
|
+
end
|
115
138
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
139
|
+
runner = Runner.new
|
140
|
+
runner.setup_options
|
141
|
+
runner.setup_mode
|
142
|
+
runner.daemonize if runner.daemon
|
143
|
+
|
144
|
+
Global.setup
|
145
|
+
Session.setup
|
146
|
+
Part.setup
|
147
|
+
|
148
|
+
server = Server.new
|
149
|
+
server.start(options)
|
150
|
+
|
151
|
+
runner.invoke(server) unless $NITRO_NO_INVOKE
|
152
|
+
|
153
|
+
return server
|
123
154
|
end
|
124
|
-
|
125
|
-
server = Server.new
|
126
|
-
server.start(options)
|
127
|
-
|
128
|
-
runner.invoke(server) unless $NITRO_NO_INVOKE
|
129
|
-
|
130
|
-
return server
|
155
|
+
|
131
156
|
end
|
132
|
-
|
157
|
+
|
133
158
|
# A Helper class used for CherryPy-style publishing.
|
134
159
|
|
135
160
|
class Mounter # :nodoc: all
|