nitro 0.28.0 → 0.29.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.
- data/CHANGELOG +382 -0
- data/ProjectInfo +4 -4
- data/README +1 -1
- data/doc/AUTHORS +15 -15
- data/doc/MIGRATION +13 -0
- data/doc/RELEASES +102 -0
- data/lib/glue/sweeper.rb +1 -1
- data/lib/nitro.rb +38 -9
- data/lib/nitro/adapter/acgi.rb +1 -3
- data/lib/nitro/adapter/cgi.rb +1 -1
- data/lib/nitro/adapter/fastcgi.rb +1 -3
- data/lib/nitro/adapter/mongrel.rb +8 -6
- data/lib/nitro/adapter/webrick.rb +1 -2
- data/lib/nitro/cgi.rb +1 -1
- data/lib/nitro/compiler.rb +21 -40
- data/lib/nitro/compiler/elements.rb +72 -32
- data/lib/nitro/compiler/errors.rb +92 -42
- data/lib/nitro/compiler/include.rb +47 -17
- data/lib/nitro/compiler/morphing.rb +1 -3
- data/lib/nitro/compiler/script.rb +2 -2
- data/lib/nitro/context.rb +36 -0
- data/lib/nitro/controller.rb +140 -31
- data/lib/nitro/dispatcher.rb +27 -28
- data/lib/nitro/element.rb +52 -15
- data/lib/nitro/flash.rb +44 -0
- data/lib/nitro/helper/buffer.rb +0 -2
- data/lib/nitro/helper/form.rb +2 -2
- data/lib/nitro/helper/form/controls.rb +14 -3
- data/lib/nitro/helper/pager.rb +1 -1
- data/lib/nitro/helper/table.rb +4 -3
- data/lib/nitro/helper/xml.rb +1 -1
- data/lib/nitro/part.rb +20 -0
- data/lib/nitro/render.rb +44 -5
- data/lib/nitro/router.rb +81 -0
- data/lib/nitro/scaffolding.rb +24 -23
- data/lib/nitro/server.rb +12 -1
- data/lib/nitro/server/runner.rb +12 -0
- data/lib/nitro/session.rb +3 -12
- data/lib/nitro/session/drb.rb +2 -5
- data/lib/nitro/session/file.rb +2 -2
- data/lib/nitro/session/memcached.rb +14 -0
- data/lib/nitro/session/memory.rb +3 -26
- data/lib/nitro/session/og.rb +1 -1
- data/lib/nitro/test/assertions.rb +1 -1
- data/lib/nitro/test/context.rb +8 -2
- data/lib/nitro/test/testcase.rb +16 -7
- data/proto/public/error.xhtml +58 -21
- data/proto/public/js/controls.js +60 -15
- data/proto/public/js/dragdrop.js +105 -16
- data/proto/public/js/effects.js +19 -12
- data/proto/public/js/scriptaculous.js +1 -1
- data/proto/public/js/slider.js +2 -2
- data/proto/public/js/unittest.js +29 -20
- data/proto/public/scaffold/edit.xhtml +1 -1
- data/proto/public/scaffold/index.xhtml +2 -2
- data/proto/public/scaffold/list.xhtml +2 -2
- data/proto/public/scaffold/new.xhtml +1 -1
- data/proto/public/scaffold/search.xhtml +1 -1
- data/src/part/admin/controller.rb +5 -5
- data/src/part/admin/template/index.xhtml +2 -2
- data/test/nitro/compiler/tc_compiler.rb +23 -0
- data/test/nitro/helper/tc_table.rb +35 -0
- data/test/nitro/tc_cgi.rb +1 -1
- data/test/nitro/tc_controller.rb +3 -3
- data/test/nitro/tc_controller_aspect.rb +2 -0
- data/test/nitro/tc_dispatcher.rb +10 -1
- data/test/nitro/tc_flash.rb +14 -0
- data/test/nitro/tc_router.rb +58 -0
- data/test/nitro/tc_session.rb +26 -9
- metadata +13 -12
- data/lib/nitro/routing.rb +0 -41
- data/test/nitro/caching/tc_stores.rb +0 -17
- data/test/nitro/tc_table.rb +0 -66
data/lib/nitro/flash.rb
CHANGED
@@ -58,6 +58,50 @@ module Nitro
|
|
58
58
|
|
59
59
|
(@dirty.keys - keys).each { |k| @dirty.delete k }
|
60
60
|
end
|
61
|
+
|
62
|
+
# :section: Helpers
|
63
|
+
|
64
|
+
# Push a value in an array flash variable.
|
65
|
+
#
|
66
|
+
# === Example
|
67
|
+
#
|
68
|
+
# flash.push :errors, 'This is the first error'
|
69
|
+
# flash.push :errors, 'This is the second error'
|
70
|
+
#
|
71
|
+
# flash[:errors] # => []
|
72
|
+
|
73
|
+
def push(key, value)
|
74
|
+
if value.is_a? Array
|
75
|
+
(self[key] ||= []).concat(value)
|
76
|
+
else
|
77
|
+
(self[key] ||= []) << value
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
# Pop a value from an array flash variable.
|
82
|
+
|
83
|
+
def pop(key)
|
84
|
+
if arr = self[key]
|
85
|
+
if arr.is_a? Array
|
86
|
+
return arr.pop
|
87
|
+
else
|
88
|
+
return arr
|
89
|
+
end
|
90
|
+
end
|
91
|
+
return nil
|
92
|
+
end
|
93
|
+
|
94
|
+
# Join helper
|
95
|
+
|
96
|
+
def join(key, sep = ', ')
|
97
|
+
value = self[key]
|
98
|
+
|
99
|
+
if value.is_a? Array
|
100
|
+
return value.join(sep)
|
101
|
+
else
|
102
|
+
return value
|
103
|
+
end
|
104
|
+
end
|
61
105
|
|
62
106
|
private
|
63
107
|
|
data/lib/nitro/helper/buffer.rb
CHANGED
data/lib/nitro/helper/form.rb
CHANGED
@@ -118,7 +118,7 @@ module FormHelper
|
|
118
118
|
unless options[:all]
|
119
119
|
next if prop.symbol == obj.class.primary_key.symbol or prop[:control] == :none or prop[:relation]
|
120
120
|
end
|
121
|
-
control = Control.fetch(obj, prop, options).render
|
121
|
+
control = Form::Control.fetch(obj, prop, options).render
|
122
122
|
str << FormBuilder.element(prop, control)
|
123
123
|
end
|
124
124
|
end
|
@@ -130,7 +130,7 @@ module FormHelper
|
|
130
130
|
unless options[:all]
|
131
131
|
next if rel[:control] == :none
|
132
132
|
end
|
133
|
-
control = Control.fetch(obj, rel, options).render
|
133
|
+
control = Form::Control.fetch(obj, rel, options).render
|
134
134
|
str << FormBuilder.element(rel, control)
|
135
135
|
end
|
136
136
|
end
|
@@ -4,6 +4,8 @@ module Nitro
|
|
4
4
|
|
5
5
|
# :section: Property controls.
|
6
6
|
|
7
|
+
module Form
|
8
|
+
|
7
9
|
# A Form control.
|
8
10
|
|
9
11
|
class Control
|
@@ -174,7 +176,7 @@ class ArrayControl < Control
|
|
174
176
|
else
|
175
177
|
removable = values.size != 1 ? true : false
|
176
178
|
values.each do |item|
|
177
|
-
str << emit_array_element(
|
179
|
+
str << emit_array_element()
|
178
180
|
end
|
179
181
|
end
|
180
182
|
str << emit_container_end
|
@@ -182,7 +184,6 @@ class ArrayControl < Control
|
|
182
184
|
|
183
185
|
def emit_array_element(options={})
|
184
186
|
removable = options.fetch(:removable, true)
|
185
|
-
selected = options.fetch(:selected, nil)
|
186
187
|
%{
|
187
188
|
<div>
|
188
189
|
<input type="text" id="#{prop.symbol}_ctl" name="#{prop.symbol}[]" value="#{value}"#{emit_style}#{emit_disabled} />
|
@@ -192,6 +193,14 @@ class ArrayControl < Control
|
|
192
193
|
}
|
193
194
|
end
|
194
195
|
|
196
|
+
def emit_container_start
|
197
|
+
%{<div class="array_container">}
|
198
|
+
end
|
199
|
+
|
200
|
+
def emit_container_end
|
201
|
+
%{</div>}
|
202
|
+
end
|
203
|
+
|
195
204
|
def emit_js
|
196
205
|
%{
|
197
206
|
<script type="text/javascript">
|
@@ -210,7 +219,7 @@ class ArrayControl < Control
|
|
210
219
|
node.getElementsByTagName('input')[0].removeAttribute('disabled');
|
211
220
|
if(container.lastChild==ctl) container.appendChild(node);
|
212
221
|
else container.insertBefore(node, ctl.nextSibling);
|
213
|
-
if(container.childNodes.length>1) container.getElementsByTagName('input')[
|
222
|
+
if(container.childNodes.length>1) container.getElementsByTagName('input')[1].disabled='';
|
214
223
|
}
|
215
224
|
</script>
|
216
225
|
}
|
@@ -373,5 +382,7 @@ end
|
|
373
382
|
|
374
383
|
end
|
375
384
|
|
385
|
+
end
|
386
|
+
|
376
387
|
# * George Moschovitis <gm@navel.gr>
|
377
388
|
# * Chris Farmiloe <chris.farmiloe@farmiloe.com>
|
data/lib/nitro/helper/pager.rb
CHANGED
data/lib/nitro/helper/table.rb
CHANGED
@@ -53,6 +53,7 @@ module TableHelper
|
|
53
53
|
# A hash of options.
|
54
54
|
#
|
55
55
|
# :id = id of the component.
|
56
|
+
# :class = class of the component
|
56
57
|
# :headers = an array of the header values
|
57
58
|
# :values = an array of arrays.
|
58
59
|
# :order = options hash (:left, :right, :asc_pic, :desc_pic, :values)
|
@@ -62,6 +63,7 @@ module TableHelper
|
|
62
63
|
def table(options)
|
63
64
|
str = '<table'
|
64
65
|
str << %| id="#{options[:id]}"| if options[:id]
|
66
|
+
str << %| class="#{options[:class]}"| if options[:class]
|
65
67
|
str << '>'
|
66
68
|
|
67
69
|
str << table_rows(options)
|
@@ -73,7 +75,6 @@ module TableHelper
|
|
73
75
|
# [+options+]
|
74
76
|
# A hash of options.
|
75
77
|
#
|
76
|
-
# :id = id of the component.
|
77
78
|
# :headers = an array of the header values
|
78
79
|
# :values = an array of arrays.
|
79
80
|
# :order = options hash (:left, :right, :asc_pic, :desc_pic, :values)
|
@@ -85,7 +86,7 @@ module TableHelper
|
|
85
86
|
options[:values] = options[:values] || options[:items] || options[:rows]
|
86
87
|
|
87
88
|
str = ''
|
88
|
-
str << table_header(options)
|
89
|
+
str << table_header(options) if options[:headers]
|
89
90
|
str << table_footer(options) if options[:footers]
|
90
91
|
|
91
92
|
items = options[:values]
|
@@ -228,7 +229,7 @@ module TableHelper
|
|
228
229
|
params = { TableHelper.order_by_key => order_by,
|
229
230
|
TableHelper.order_direction_key => direction }
|
230
231
|
|
231
|
-
return UriUtils.update_query_string(request.uri.to_s, params)
|
232
|
+
return Glue::UriUtils.update_query_string(request.uri.to_s, params)
|
232
233
|
end
|
233
234
|
|
234
235
|
def create_tbody?(options)
|
data/lib/nitro/helper/xml.rb
CHANGED
data/lib/nitro/part.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Nitro
|
2
|
+
|
3
|
+
# A part is a module of reusable functionality encapsulated as
|
4
|
+
# a mini site/app. You can require (include) multiple parts in
|
5
|
+
# your application. A part is in essence a high level component.
|
6
|
+
|
7
|
+
class Part
|
8
|
+
|
9
|
+
# Require (include) a part in the current application.
|
10
|
+
|
11
|
+
def self.require(name)
|
12
|
+
Logger.debug "Requiring part '#{name}'."
|
13
|
+
Kernel.require "part/#{name}/run.rb"
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
# * George Moschovitis <gm@navel.gr>
|
data/lib/nitro/render.rb
CHANGED
@@ -7,7 +7,6 @@ require 'facet/string/blank'
|
|
7
7
|
require 'glue/attribute'
|
8
8
|
require 'glue/settings'
|
9
9
|
require 'glue/template'
|
10
|
-
require 'glue/builder'
|
11
10
|
require 'glue/builder/xml'
|
12
11
|
|
13
12
|
require 'nitro/helper/xhtml'
|
@@ -157,6 +156,8 @@ private
|
|
157
156
|
@out.flush if @out.is_a?(IO)
|
158
157
|
end
|
159
158
|
|
159
|
+
# :section: Redirection methods.
|
160
|
+
|
160
161
|
# Send a redirect response.
|
161
162
|
#
|
162
163
|
# If the url starts with '/' it is considered absolute, else
|
@@ -184,6 +185,8 @@ private
|
|
184
185
|
redirect("#{@context.referer}#{postfix}", status)
|
185
186
|
end
|
186
187
|
alias_method :redirect_to_referer, :redirect_referer
|
188
|
+
alias_method :redirect_referrer, :redirect_referer
|
189
|
+
alias_method :redirect_to_referrer, :redirect_referer
|
187
190
|
|
188
191
|
# Redirect to home.
|
189
192
|
|
@@ -192,6 +195,42 @@ private
|
|
192
195
|
end
|
193
196
|
alias_method :redirect_to_home, :redirect_home
|
194
197
|
|
198
|
+
# :section: Seaside style call/answer methods.
|
199
|
+
|
200
|
+
# Call redirects to the given url but push the original
|
201
|
+
# url in a callstack, so that the target can return by
|
202
|
+
# executing answer.
|
203
|
+
#
|
204
|
+
# === Example
|
205
|
+
#
|
206
|
+
# caller:
|
207
|
+
# color, type = call('utils/select_color')
|
208
|
+
#
|
209
|
+
# target:
|
210
|
+
# answer(color, type)
|
211
|
+
#--
|
212
|
+
# FIXME: dont use yet, you have to encode the branch to
|
213
|
+
# make this safe for use.
|
214
|
+
#++
|
215
|
+
|
216
|
+
def call(url, status = 303)
|
217
|
+
(session[:CALL_STACK] ||= {}) << request.uri
|
218
|
+
redirect(url, status)
|
219
|
+
end
|
220
|
+
|
221
|
+
# Returns from a call by poping the callstack.
|
222
|
+
#--
|
223
|
+
# FIXME: don't use yet.
|
224
|
+
#++
|
225
|
+
|
226
|
+
def answer(index = 0, status = 303)
|
227
|
+
if stack = session[:CALL_STACK] and not stack.empty?
|
228
|
+
redirect(stack.pop, status)
|
229
|
+
else
|
230
|
+
raise 'Cannot answer, call stack is empty'
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
195
234
|
# Log a rendering error.
|
196
235
|
|
197
236
|
def log_error(error, path, full = true)
|
@@ -226,16 +265,16 @@ private
|
|
226
265
|
def render_template(filename)
|
227
266
|
filename = "#{filename}.xhtml" unless filename =~ /\.xhtml$/
|
228
267
|
template = File.read("#{template_root}/#{filename}")
|
229
|
-
Template.process_template(template, '@out', binding)
|
268
|
+
Glue::Template.process_template(template, '@out', binding)
|
230
269
|
end
|
231
270
|
|
232
271
|
# Access the programmatic renderer (builder).
|
233
272
|
|
234
273
|
def build(&block)
|
235
274
|
if block.arity == 1
|
236
|
-
yield XmlBuilder.new(@out)
|
275
|
+
yield Glue::XmlBuilder.new(@out)
|
237
276
|
else
|
238
|
-
XmlBuilder.new(@out).instance_eval(&block)
|
277
|
+
Glue::XmlBuilder.new(@out).instance_eval(&block)
|
239
278
|
end
|
240
279
|
end
|
241
280
|
|
@@ -243,7 +282,7 @@ private
|
|
243
282
|
# output buffer.
|
244
283
|
|
245
284
|
def builder
|
246
|
-
XmlBuilder.new(@out)
|
285
|
+
Glue::XmlBuilder.new(@out)
|
247
286
|
end
|
248
287
|
|
249
288
|
# A Helper class to access rendering mixins. Useful to avoid
|
data/lib/nitro/router.rb
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
module Nitro
|
2
|
+
|
3
|
+
# Router mixin. Typically used to generate 'nice' urls.
|
4
|
+
# Nice urls apart from looking more beautiful are considered (?)
|
5
|
+
# more Search Engine friendly.
|
6
|
+
#
|
7
|
+
# However, due to the power of Nitro's intelligent dispatching
|
8
|
+
# mechanism, routing is almost never used! It is only needed
|
9
|
+
# for really special urls.
|
10
|
+
#
|
11
|
+
# === Example
|
12
|
+
#
|
13
|
+
# r.add_route(%r{rewritten/url/(.*)}, :controller => IdController, :action => :register, :param => :name)
|
14
|
+
# r.add_route(%r{another/zelo/(.*)/(.*)}, :controller => AdminController, :action => :kick, :params => [:name, :age])
|
15
|
+
# r.add_route(%r{cool/(.*)_(.*).html}, :controller => AdminController, :action => :long, :params => [:name, :age])
|
16
|
+
|
17
|
+
module Router
|
18
|
+
|
19
|
+
# Strip the beginning of the path, used by cgi adapter.
|
20
|
+
|
21
|
+
setting :strip_path, :default => nil, :doc => 'Strip the beginning of the path, used by cgi adapter'
|
22
|
+
|
23
|
+
# The route table maps 'nice URLs' to real URLs that
|
24
|
+
# can be handled by the Dispatcher.
|
25
|
+
|
26
|
+
attr_accessor :routes
|
27
|
+
|
28
|
+
# Decodes a url to a [controller, action, params] tupple.
|
29
|
+
# Returns false if no decoding is possible.
|
30
|
+
|
31
|
+
def decode_route(url)
|
32
|
+
for rule, options in @routes
|
33
|
+
if md = url.match(rule)
|
34
|
+
params = nil
|
35
|
+
if param_names = options[:params] || options[:param]
|
36
|
+
param_names = [ param_names ] unless param_names.is_a?(Array)
|
37
|
+
params = {}
|
38
|
+
md.captures.each_with_index do |val, idx|
|
39
|
+
params[param_names[idx].to_s] = val
|
40
|
+
end
|
41
|
+
end
|
42
|
+
return options[:controller], options[:action], params
|
43
|
+
end
|
44
|
+
end
|
45
|
+
return false
|
46
|
+
end
|
47
|
+
alias_method :route, :decode_route
|
48
|
+
|
49
|
+
# Encodes a [controller, action, params] tupple into a url.
|
50
|
+
# Returns false if no encoding is possible.
|
51
|
+
|
52
|
+
def encode_route(controller, action, *params)
|
53
|
+
if route = @routes.find { |r| (r.last[:controller] == controller) and (r.last[:action] == action) }
|
54
|
+
rule, options = *route
|
55
|
+
url = rule.source
|
56
|
+
|
57
|
+
(params.size / 2).times do |i|
|
58
|
+
val = params[i + i + 1]
|
59
|
+
url.sub!(/\(.*?\)/, val.to_s)
|
60
|
+
end
|
61
|
+
|
62
|
+
return url
|
63
|
+
end
|
64
|
+
return false
|
65
|
+
end
|
66
|
+
|
67
|
+
# Add a route to the routing table.
|
68
|
+
|
69
|
+
def add_route(rule, options)
|
70
|
+
(@routes ||= []) << [rule, options]
|
71
|
+
end
|
72
|
+
alias_method :<<, :add_route
|
73
|
+
|
74
|
+
def add_routes
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
# * George Moschovitis <gm@navel.gr>
|
data/lib/nitro/scaffolding.rb
CHANGED
@@ -33,12 +33,16 @@ module Scaffolding
|
|
33
33
|
base.extend(ClassMethods)
|
34
34
|
end
|
35
35
|
|
36
|
-
def self.
|
37
|
-
klass.
|
36
|
+
def self.class_to_method(klass)
|
37
|
+
klass.name.underscore.gsub('::','__').downcase
|
38
38
|
end
|
39
39
|
|
40
40
|
def self.class_to_list(klass)
|
41
|
-
klass.
|
41
|
+
class_to_method(klass).plural
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.class_to_path(klass)
|
45
|
+
klass.name.underscore.gsub('::','/').downcase
|
42
46
|
end
|
43
47
|
|
44
48
|
#--
|
@@ -66,10 +70,6 @@ module Scaffolding
|
|
66
70
|
@base__ = "#{@base}__" if @base
|
67
71
|
end
|
68
72
|
|
69
|
-
def class_to_name(klass)
|
70
|
-
klass.to_s.demodulize.underscore.downcase
|
71
|
-
end
|
72
|
-
|
73
73
|
#--
|
74
74
|
# A helper that defines a class method.
|
75
75
|
#++
|
@@ -160,28 +160,28 @@ module Scaffolding
|
|
160
160
|
|
161
161
|
def scaffold_controller
|
162
162
|
define_controller_action 'index', %{
|
163
|
-
#{Aspects.gen_advice_code(:scaffold_index, @controller.advices, :pre)}
|
163
|
+
#{Glue::Aspects.gen_advice_code(:scaffold_index, @controller.advices, :pre)}
|
164
164
|
@list, @pager = paginate(@klass, :per_page => Scaffolding.per_page)
|
165
165
|
}
|
166
166
|
|
167
167
|
define_controller_action 'list', %{
|
168
|
-
#{Aspects.gen_advice_code(:scaffold_list, @controller.advices, :pre)}
|
168
|
+
#{Glue::Aspects.gen_advice_code(:scaffold_list, @controller.advices, :pre)}
|
169
169
|
@list, @pager = paginate(@klass, :per_page => Scaffolding.per_page)
|
170
170
|
}
|
171
171
|
|
172
172
|
define_controller_action 'view(oid)', %{
|
173
|
-
#{Aspects.gen_advice_code(:scaffold_view, @controller.advices, :pre)}
|
173
|
+
#{Glue::Aspects.gen_advice_code(:scaffold_view, @controller.advices, :pre)}
|
174
174
|
@obj = @klass[oid]
|
175
175
|
}
|
176
176
|
|
177
177
|
define_controller_action 'new(all = false)', %{
|
178
|
-
#{Aspects.gen_advice_code(:scaffold_new, @controller.advices, :pre)}
|
178
|
+
#{Glue::Aspects.gen_advice_code(:scaffold_new, @controller.advices, :pre)}
|
179
179
|
@obj = @klass.new
|
180
180
|
@all = all
|
181
181
|
}
|
182
182
|
|
183
183
|
define_controller_action 'edit(oid = nil, all = false)', %{
|
184
|
-
#{Aspects.gen_advice_code(:scaffold_edit, @controller.advices, :pre)}
|
184
|
+
#{Glue::Aspects.gen_advice_code(:scaffold_edit, @controller.advices, :pre)}
|
185
185
|
@obj = @klass[oid]
|
186
186
|
@all = all
|
187
187
|
}
|
@@ -195,18 +195,19 @@ module Scaffolding
|
|
195
195
|
else
|
196
196
|
obj = request.fill(@klass.create, :assign_relations => true, :preprocess => true)
|
197
197
|
end
|
198
|
-
#{Aspects.gen_advice_code(:scaffold_save, @controller.advices, :pre)}
|
198
|
+
#{Glue::Aspects.gen_advice_code(:scaffold_save, @controller.advices, :pre)}
|
199
199
|
unless obj.valid?
|
200
200
|
flash[:ERRORS] = obj.errors
|
201
201
|
redirect_to_referer
|
202
202
|
end
|
203
203
|
obj.save
|
204
|
-
|
204
|
+
oid = obj.pk
|
205
|
+
#{Glue::Aspects.gen_advice_code(:scaffold_save, @controller.advices, :post)}
|
205
206
|
redirect '#{action_path(:list)}'
|
206
207
|
}
|
207
208
|
|
208
209
|
define_controller_action 'search(query)', %{
|
209
|
-
#{Aspects.gen_advice_code(:scaffold_search, @controller.advices, :pre)}
|
210
|
+
#{Glue::Aspects.gen_advice_code(:scaffold_search, @controller.advices, :pre)}
|
210
211
|
@query = query
|
211
212
|
if @klass.respond_to? :search
|
212
213
|
@list = #@klass.search(query)
|
@@ -214,9 +215,9 @@ module Scaffolding
|
|
214
215
|
}
|
215
216
|
|
216
217
|
define_controller_action 'delete(oid)', %{
|
217
|
-
#{Aspects.gen_advice_code(:scaffold_delete, @controller.advices, :pre)}
|
218
|
+
#{Glue::Aspects.gen_advice_code(:scaffold_delete, @controller.advices, :pre)}
|
218
219
|
@klass.delete(oid)
|
219
|
-
#{Aspects.gen_advice_code(:scaffold_delete, @controller.advices, :post)}
|
220
|
+
#{Glue::Aspects.gen_advice_code(:scaffold_delete, @controller.advices, :post)}
|
220
221
|
redirect_to_referer
|
221
222
|
}
|
222
223
|
|
@@ -225,18 +226,18 @@ module Scaffolding
|
|
225
226
|
for rel in @klass.relations
|
226
227
|
define_controller_action "remove_#{rel.target_singular_name}(oid, rid)", %{
|
227
228
|
obj = @klass[oid]
|
228
|
-
#{Aspects.gen_advice_code(:scaffold_remove_relation, @controller.advices, :pre)}
|
229
|
+
#{Glue::Aspects.gen_advice_code(:scaffold_remove_relation, @controller.advices, :pre)}
|
229
230
|
rob = #{rel.target_class}[rid]
|
230
231
|
obj.#{rel.name}.remove(rob)
|
231
|
-
#{Aspects.gen_advice_code(:scaffold_remove_relation, @controller.advices, :post)}
|
232
|
+
#{Glue::Aspects.gen_advice_code(:scaffold_remove_relation, @controller.advices, :post)}
|
232
233
|
redirect_to_referer
|
233
234
|
}
|
234
235
|
define_controller_action "delete_#{rel.target_singular_name}(oid, rid)", %{
|
235
|
-
#{Aspects.gen_advice_code(:scaffold_delete_relation, @controller.advices, :pre)}
|
236
|
+
#{Glue::Aspects.gen_advice_code(:scaffold_delete_relation, @controller.advices, :pre)}
|
236
237
|
obj = @klass[oid]
|
237
238
|
rob = #{rel.target_class}[rid]
|
238
239
|
obj.#{rel.name}.delete(rob)
|
239
|
-
#{Aspects.gen_advice_code(:scaffold_delete_relation, @controller.advices, :post)}
|
240
|
+
#{Glue::Aspects.gen_advice_code(:scaffold_delete_relation, @controller.advices, :post)}
|
240
241
|
redirect_to_referer
|
241
242
|
}
|
242
243
|
end
|
@@ -298,9 +299,9 @@ module Scaffolding
|
|
298
299
|
#++
|
299
300
|
|
300
301
|
def scaffold(klass, options = {})
|
301
|
-
o = {
|
302
|
+
o = scaffolding_classes[klass] || {
|
302
303
|
:pk => 'oid',
|
303
|
-
:name => Scaffolding.
|
304
|
+
:name => Scaffolding.class_to_method(klass),
|
304
305
|
:plural_name => Scaffolding.class_to_list(klass),
|
305
306
|
:mount => true
|
306
307
|
}
|