nitro 0.24.0 → 0.25.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +279 -0
- data/ProjectInfo +7 -7
- data/doc/AUTHORS +4 -2
- data/doc/RELEASES +96 -1
- data/lib/nitro.rb +5 -2
- data/lib/nitro/adapter/cgi.rb +1 -1
- data/lib/nitro/adapter/webrick.rb +7 -5
- data/lib/nitro/caching/output.rb +3 -2
- data/lib/nitro/cgi/utils.rb +8 -4
- data/lib/nitro/compiler.rb +9 -5
- data/lib/nitro/compiler/include.rb +42 -0
- data/lib/nitro/compiler/markup.rb +1 -1
- data/lib/nitro/compiler/morphing.rb +120 -50
- data/lib/nitro/compiler/squeeze.rb +2 -2
- data/lib/nitro/context.rb +9 -0
- data/lib/nitro/controller.rb +8 -4
- data/lib/nitro/dispatcher.rb +5 -5
- data/lib/nitro/dispatcher/nice.rb +16 -5
- data/lib/nitro/element.rb +30 -8
- data/lib/nitro/helper.rb +56 -0
- data/lib/nitro/{mixin → helper}/benchmark.rb +1 -1
- data/lib/nitro/{mixin → helper}/buffer.rb +1 -2
- data/lib/nitro/{mixin → helper}/debug.rb +1 -1
- data/lib/nitro/{mixin/helper.rb → helper/default.rb} +4 -4
- data/lib/nitro/{mixin → helper}/form.rb +3 -3
- data/lib/nitro/{mixin → helper}/javascript.rb +17 -1
- data/lib/nitro/{mixin → helper}/pager.rb +1 -1
- data/lib/nitro/{mixin → helper}/rss.rb +3 -3
- data/lib/nitro/{mixin → helper}/table.rb +1 -1
- data/lib/nitro/{mixin → helper}/xhtml.rb +2 -2
- data/lib/nitro/{mixin → helper}/xml.rb +1 -1
- data/lib/nitro/render.rb +16 -8
- data/lib/nitro/scaffold.rb +6 -6
- data/lib/nitro/server/runner.rb +12 -0
- data/lib/nitro/session/drbserver.rb +16 -1
- data/proto/public/js/builder.js +97 -0
- data/proto/public/js/controls.js +18 -5
- data/proto/public/js/dragdrop.js +8 -5
- data/proto/public/js/effects.js +185 -4
- data/proto/public/js/prototype.js +432 -178
- data/proto/public/js/scriptaculous.js +6 -2
- data/proto/public/js/slider.js +226 -0
- data/proto/public/js/unittest.js +363 -0
- data/proto/public/media/nitro.png +0 -0
- data/{script → proto/script}/scgi_ctl +0 -0
- data/{script → proto/script}/scgi_service +16 -8
- data/proto/src/skin.rb +24 -0
- data/{lib → src}/part/admin.rb +0 -0
- data/src/part/admin/controller.rb +47 -0
- data/{lib → src}/part/admin/skin.rb +0 -0
- data/src/part/admin/template/denied.xhtml +1 -0
- data/{lib → src}/part/admin/template/index.xhtml +0 -0
- data/test/nitro/{mixin → helper}/tc_pager.rb +2 -2
- data/test/nitro/{mixin → helper}/tc_rss.rb +3 -3
- data/test/nitro/{mixin → helper}/tc_table.rb +3 -3
- data/test/nitro/{mixin → helper}/tc_xhtml.rb +3 -3
- data/test/nitro/tc_caching.rb +4 -1
- data/test/nitro/tc_controller.rb +2 -2
- data/test/nitro/tc_element.rb +30 -0
- data/test/nitro/tc_helper.rb +36 -0
- data/test/nitro/tc_render.rb +1 -1
- metadata +70 -38
- data/lib/nitro/mixin/markup.rb +0 -122
- data/lib/part/admin/controller.rb +0 -28
- data/proto/README +0 -11
- data/proto/doc/README +0 -1
- data/proto/scgi.rb +0 -333
data/lib/nitro/dispatcher.rb
CHANGED
@@ -2,7 +2,7 @@ require 'nano/kernel/singleton'
|
|
2
2
|
|
3
3
|
require 'nitro/controller'
|
4
4
|
require 'nitro/routing'
|
5
|
-
require 'nitro/
|
5
|
+
require 'nitro/helper/default'
|
6
6
|
|
7
7
|
module Nitro
|
8
8
|
|
@@ -114,14 +114,14 @@ class Dispatcher
|
|
114
114
|
|
115
115
|
# Call this method to automatically include helpers in the
|
116
116
|
# Controllers. For each Controller 'XxxController' the
|
117
|
-
# default helper 'Helper' and the auto
|
118
|
-
# '
|
117
|
+
# default helper 'Helper' and the auto helper
|
118
|
+
# 'XxxControllerHelper' (if it exists) are included.
|
119
119
|
|
120
120
|
def auto_mixin(c)
|
121
|
-
c.helper(
|
121
|
+
c.helper(Nitro::DefaultHelper)
|
122
122
|
|
123
123
|
begin
|
124
|
-
if helper = Module.by_name("#{c}
|
124
|
+
if helper = Module.by_name("#{c}Helper")
|
125
125
|
c.helper(helper)
|
126
126
|
end
|
127
127
|
rescue NameError
|
@@ -6,8 +6,11 @@ module Nitro
|
|
6
6
|
|
7
7
|
class Dispatcher
|
8
8
|
|
9
|
-
#
|
10
|
-
# implicit nice urls. Subdirectories are
|
9
|
+
# The default dispatching algorithm that handles
|
10
|
+
# implicit nice urls. Subdirectories are supported.
|
11
|
+
# Action containing '/' separators look for templates
|
12
|
+
# in subdirectories. The '/' char is converted to '__'
|
13
|
+
# to find the actual action.
|
11
14
|
#
|
12
15
|
# Returns the dispatcher class, the action name and the
|
13
16
|
# base url. For the root path, the base url is nil.
|
@@ -17,18 +20,26 @@ class Dispatcher
|
|
17
20
|
|
18
21
|
parts = path.split('/')
|
19
22
|
parts.shift # get rid of the leading '/'.
|
20
|
-
|
23
|
+
|
21
24
|
if klass = controller_class_for("/#{parts.first}")
|
22
25
|
base = "/#{parts.shift}"
|
23
26
|
else
|
24
27
|
base = nil
|
25
28
|
klass = controller_class_for(ROOT)
|
26
29
|
end
|
27
|
-
|
30
|
+
=begin
|
31
|
+
if klass.action_methods.include?(parts.first)
|
32
|
+
action = parts.shift
|
33
|
+
else
|
34
|
+
action = 'index'
|
35
|
+
end
|
36
|
+
p '---', action
|
37
|
+
getc
|
38
|
+
=end
|
28
39
|
unless action = parts.shift
|
29
40
|
action = 'index'
|
30
41
|
end
|
31
|
-
|
42
|
+
|
32
43
|
unless parts.empty?
|
33
44
|
context.headers['QUERY_STRING'] = "#{parts.join(';')};#{context.headers['QUERY_STRING']}"
|
34
45
|
end
|
data/lib/nitro/element.rb
CHANGED
@@ -3,7 +3,9 @@ require 'rexml/streamlistener'
|
|
3
3
|
|
4
4
|
require 'nano/string/capitalized'
|
5
5
|
require 'nano/string/camelize'
|
6
|
+
require 'mega/annotation'
|
6
7
|
|
8
|
+
require 'glue/flexob'
|
7
9
|
require 'glue/configuration'
|
8
10
|
|
9
11
|
module Nitro
|
@@ -28,10 +30,14 @@ class Element
|
|
28
30
|
|
29
31
|
attr_accessor :_parent
|
30
32
|
|
31
|
-
# The
|
33
|
+
# The children of this element.
|
32
34
|
|
33
35
|
attr_accessor :_children
|
34
36
|
|
37
|
+
# The named children of this element.
|
38
|
+
|
39
|
+
attr_accessor :_named
|
40
|
+
|
35
41
|
# The text of this element.
|
36
42
|
|
37
43
|
attr_accessor :_text
|
@@ -42,15 +48,22 @@ class Element
|
|
42
48
|
|
43
49
|
def initialize(*args)
|
44
50
|
@_children = []
|
51
|
+
@_named = Flexob.new
|
45
52
|
@_text = ''
|
46
53
|
end
|
47
54
|
|
48
55
|
def open
|
49
56
|
end
|
50
57
|
|
51
|
-
|
52
|
-
#
|
53
|
-
|
58
|
+
# If an optional name parameter is passed renders
|
59
|
+
# the content of the named child element.
|
60
|
+
|
61
|
+
def content(cname = nil)
|
62
|
+
if cname
|
63
|
+
@_named[cname].content
|
64
|
+
else
|
65
|
+
@_text
|
66
|
+
end
|
54
67
|
end
|
55
68
|
|
56
69
|
def close
|
@@ -72,9 +85,18 @@ class Element
|
|
72
85
|
def add_child(child)
|
73
86
|
child._parent = self
|
74
87
|
@_children << child
|
88
|
+
if cname = child.class.ann.self[:name]
|
89
|
+
@_named[cname] = child
|
90
|
+
end
|
75
91
|
end
|
76
92
|
|
77
93
|
alias_method :children, :_children
|
94
|
+
|
95
|
+
class << self
|
96
|
+
def name(sym)
|
97
|
+
ann self, :name => sym.to_sym
|
98
|
+
end
|
99
|
+
end
|
78
100
|
end
|
79
101
|
|
80
102
|
# Processes a page containing elements.
|
@@ -100,7 +122,7 @@ class ElementProcessor # :nodoc: all
|
|
100
122
|
# check if the name starts with the element prefix, or
|
101
123
|
# is capitalized.
|
102
124
|
if name =~ PREFIX_RE or name =~ CAPITALIZED_RE
|
103
|
-
|
125
|
+
name = name.split(':')[1].camelize if name =~ PREFIX_RE
|
104
126
|
|
105
127
|
obj = Object.const_get(name).new
|
106
128
|
|
@@ -108,10 +130,11 @@ class ElementProcessor # :nodoc: all
|
|
108
130
|
obj.instance_variable_set("@#{k}", v)
|
109
131
|
end
|
110
132
|
|
111
|
-
@stack.push [obj, @buffer]
|
133
|
+
@stack.push [obj, @buffer, @parent]
|
112
134
|
|
113
135
|
@buffer = obj._text
|
114
136
|
@parent.add_child(obj) if @parent
|
137
|
+
|
115
138
|
@parent = obj
|
116
139
|
else # This is a static element.
|
117
140
|
attrs = []
|
@@ -131,7 +154,7 @@ class ElementProcessor # :nodoc: all
|
|
131
154
|
# is capitalized.
|
132
155
|
if name =~ PREFIX_RE or name =~ CAPITALIZED_RE
|
133
156
|
name = name.split(':')[1].camelize if name =~ PREFIX_RE
|
134
|
-
obj, @buffer = @stack.pop
|
157
|
+
obj, @buffer, @parent = @stack.pop
|
135
158
|
@buffer << obj.render
|
136
159
|
else
|
137
160
|
@buffer << "</#{name}>"
|
@@ -155,7 +178,6 @@ class ElementProcessor # :nodoc: all
|
|
155
178
|
def transform(source)
|
156
179
|
self.new.transform(source)
|
157
180
|
end
|
158
|
-
|
159
181
|
end
|
160
182
|
|
161
183
|
# Expand the elemens found in source.
|
data/lib/nitro/helper.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'nano/kernel/constant'
|
2
|
+
require 'nano/string/camelize'
|
3
|
+
|
4
|
+
require 'glue/attribute'
|
5
|
+
|
6
|
+
module Nitro
|
7
|
+
|
8
|
+
# Helpers are standard Ruby modules that contain utility
|
9
|
+
# methods. By using the special 'helper'
|
10
|
+
# macro provided by Helpers, the utility methods are
|
11
|
+
# included as private methods.
|
12
|
+
#
|
13
|
+
# === Examples
|
14
|
+
#
|
15
|
+
# class MyController < Nitro::Controller
|
16
|
+
# helper :xhtml # == include Nitro::XhtmlHelper
|
17
|
+
# end
|
18
|
+
|
19
|
+
module Helpers
|
20
|
+
|
21
|
+
module Utils
|
22
|
+
|
23
|
+
#--
|
24
|
+
# gmosx: dont name constant to avoid loop.
|
25
|
+
#++
|
26
|
+
|
27
|
+
def self.const(mod)
|
28
|
+
return constant(mod)
|
29
|
+
rescue NameError => ex
|
30
|
+
return nil
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.append_features(base)
|
35
|
+
super
|
36
|
+
base.module_eval do
|
37
|
+
def self.helper(*modules)
|
38
|
+
for mod in modules
|
39
|
+
unless mod.is_a? Module
|
40
|
+
mod = mod.to_s.camelize
|
41
|
+
# gmosx: check xxxHelper before xxx.
|
42
|
+
mod = Utils.const("#{mod}Helper") || Utils.const("Nitro::#{mod}Helper") || Utils.const(mod)
|
43
|
+
end
|
44
|
+
symbols = mod.instance_methods.collect { |m| m.to_sym }
|
45
|
+
self.send(:include, mod)
|
46
|
+
self.send(:private, *symbols)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
# * George Moschovitis <gm@navel.gr>
|
@@ -1,13 +1,13 @@
|
|
1
|
-
require 'nitro/
|
1
|
+
require 'nitro/helper/debug'
|
2
2
|
|
3
3
|
module Nitro
|
4
4
|
|
5
|
-
# This
|
5
|
+
# This helper is included by default in all Controllers.
|
6
6
|
# This is the place to add general purpose utility methods to
|
7
7
|
# be shared accross all Controllers.
|
8
8
|
|
9
|
-
module
|
10
|
-
include
|
9
|
+
module DefaultHelper
|
10
|
+
include DebugHelper
|
11
11
|
# This is an open module, extend in your application.
|
12
12
|
end
|
13
13
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'nano/inflect'
|
2
2
|
|
3
|
-
require 'nitro/
|
3
|
+
require 'nitro/helper/xhtml'
|
4
4
|
require 'og/relation/all'
|
5
5
|
|
6
6
|
module Nitro
|
@@ -12,11 +12,11 @@ module Nitro
|
|
12
12
|
# overrides.
|
13
13
|
#++
|
14
14
|
|
15
|
-
module
|
15
|
+
module FormHelper
|
16
16
|
|
17
17
|
def self.included(base)
|
18
18
|
super
|
19
|
-
base.send :include,
|
19
|
+
base.send :include, XhtmlHelper
|
20
20
|
end
|
21
21
|
|
22
22
|
private
|
@@ -9,7 +9,7 @@ module Nitro
|
|
9
9
|
# * dragdrop.js
|
10
10
|
# * controls.js
|
11
11
|
|
12
|
-
module
|
12
|
+
module JavascriptHelper
|
13
13
|
|
14
14
|
private
|
15
15
|
|
@@ -57,6 +57,21 @@ private
|
|
57
57
|
alias_method :live, :live_request
|
58
58
|
alias_method :async, :live_request
|
59
59
|
|
60
|
+
# Denotes an element as toggleable.
|
61
|
+
|
62
|
+
def toggleable(id, options = {})
|
63
|
+
__append_script_file__ 'js/prototype.js'
|
64
|
+
|
65
|
+
behaviour "##{id}", %{
|
66
|
+
el.onclick = function() {
|
67
|
+
Element.toggle('#{id}');
|
68
|
+
return false;
|
69
|
+
}
|
70
|
+
}
|
71
|
+
|
72
|
+
return nil
|
73
|
+
end
|
74
|
+
|
60
75
|
# :section: script.aculo.us dragdrop.js
|
61
76
|
|
62
77
|
# Make the element dragable.
|
@@ -197,6 +212,7 @@ private
|
|
197
212
|
return nil
|
198
213
|
end
|
199
214
|
|
215
|
+
# -----------------------------------------------------------
|
200
216
|
# :section: general javascript helpers.
|
201
217
|
|
202
218
|
# Include external javascript file.
|
@@ -3,7 +3,7 @@ require 'rss/0.9'
|
|
3
3
|
|
4
4
|
require 'nano/string/first_char'
|
5
5
|
|
6
|
-
require '
|
6
|
+
require 'glue/markup'
|
7
7
|
|
8
8
|
module Nitro
|
9
9
|
|
@@ -18,8 +18,8 @@ module Nitro
|
|
18
18
|
# <?xml-stylesheet href="rss.css" type="text/css"?>
|
19
19
|
#++
|
20
20
|
|
21
|
-
module
|
22
|
-
include
|
21
|
+
module RssHelper
|
22
|
+
include Glue::Markup
|
23
23
|
|
24
24
|
# === Options
|
25
25
|
#
|
@@ -3,7 +3,7 @@ module Nitro
|
|
3
3
|
# A helper mixin for programmatically building XHTML
|
4
4
|
# blocks.
|
5
5
|
|
6
|
-
module
|
6
|
+
module XhtmlHelper
|
7
7
|
|
8
8
|
private
|
9
9
|
|
@@ -90,7 +90,7 @@ private
|
|
90
90
|
#{options(:labels_values => (1..31).to_a, :selected => date.day)}
|
91
91
|
</select>
|
92
92
|
<select id="#{name}.month" name="#{name}.month">
|
93
|
-
#{options(:labels => Date::MONTHNAMES, :values => (1..12).to_a, :selected => (date.month))}
|
93
|
+
#{options(:labels => Date::MONTHNAMES[1..12], :values => (1..12).to_a, :selected => (date.month))}
|
94
94
|
</select>
|
95
95
|
<select id="#{name}.year" name="#{name}.year">
|
96
96
|
#{options(:labels_values => ((Time.now.year-10)..(Time.now.year+10)).to_a, :selected => date.year)}
|
data/lib/nitro/render.rb
CHANGED
@@ -10,10 +10,10 @@ require 'glue/template'
|
|
10
10
|
require 'glue/builder'
|
11
11
|
require 'glue/builder/xml'
|
12
12
|
|
13
|
-
require 'nitro/
|
14
|
-
require 'nitro/
|
15
|
-
require 'nitro/
|
16
|
-
require 'nitro/
|
13
|
+
require 'nitro/helper/xhtml'
|
14
|
+
require 'nitro/helper/form'
|
15
|
+
require 'nitro/helper/table'
|
16
|
+
require 'nitro/helper/buffer'
|
17
17
|
|
18
18
|
module Nitro
|
19
19
|
|
@@ -44,7 +44,7 @@ end
|
|
44
44
|
#++
|
45
45
|
|
46
46
|
module Render
|
47
|
-
include
|
47
|
+
include BufferHelper
|
48
48
|
|
49
49
|
# If true, auto redirect to referer on empty buffer.
|
50
50
|
|
@@ -173,6 +173,7 @@ private
|
|
173
173
|
|
174
174
|
raise RenderExit
|
175
175
|
end
|
176
|
+
alias_method :redirect_to, :redirect
|
176
177
|
|
177
178
|
# Redirect to the referer.
|
178
179
|
|
@@ -181,6 +182,13 @@ private
|
|
181
182
|
end
|
182
183
|
alias_method :redirect_to_referer, :redirect_referer
|
183
184
|
|
185
|
+
# Redirect to home.
|
186
|
+
|
187
|
+
def redirect_home(status = 303)
|
188
|
+
redirect('/', status)
|
189
|
+
end
|
190
|
+
alias_method :redirect_to_home, :redirect_home
|
191
|
+
|
184
192
|
# Log a rendering error.
|
185
193
|
|
186
194
|
def log_error(error, path)
|
@@ -240,9 +248,9 @@ private
|
|
240
248
|
|
241
249
|
class Emitter
|
242
250
|
include Singleton
|
243
|
-
|
244
|
-
|
245
|
-
|
251
|
+
include XhtmlHelper
|
252
|
+
include FormHelper
|
253
|
+
include TableHelper
|
246
254
|
end
|
247
255
|
|
248
256
|
# A helper to access the utilities emitter:
|