scaffolding_extensions 1.3.0 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
data/doc/camping.txt
CHANGED
data/doc/merb.txt
CHANGED
@@ -11,3 +11,8 @@ controllers:
|
|
11
11
|
scaffold_habtm Model1, :things
|
12
12
|
scaffold_all_models :only=>[Model1, Model2, Model3]
|
13
13
|
end
|
14
|
+
|
15
|
+
Merb isn't fully supported in that if you override a scaffolded form
|
16
|
+
but don't add your own layout, it won't use the scaffolded layout. Also,
|
17
|
+
using your own layout and overriding the scaffolded forms is untested,
|
18
|
+
though it should work.
|
@@ -38,7 +38,7 @@ module ScaffoldingExtensions
|
|
38
38
|
# use the contents of it as the template without the layout.
|
39
39
|
#
|
40
40
|
# There may well be a much better way to do this via modifying the _template_roots, but
|
41
|
-
# I didn't have much luck and decided to take the path I used with Camping
|
41
|
+
# I didn't have much luck and decided to take the path I used with Camping,
|
42
42
|
# rendering the templates directly.
|
43
43
|
def scaffold_render_template(action, options = {}, render_options = {})
|
44
44
|
suffix = options[:suffix]
|
@@ -1,13 +1,7 @@
|
|
1
|
-
|
2
|
-
require 'erubis'
|
3
|
-
ERB = Erubis::Eruby
|
4
|
-
rescue
|
5
|
-
require 'erb'
|
6
|
-
end
|
1
|
+
require 'erb'
|
7
2
|
require 'cgi'
|
8
3
|
|
9
4
|
module ScaffoldingExtensions
|
10
|
-
SCAFFOLD_ROOTS={}
|
11
5
|
class << self
|
12
6
|
private
|
13
7
|
# Sinatra doesn't have a default location for models, so assume none
|
@@ -35,22 +29,19 @@ module ScaffoldingExtensions
|
|
35
29
|
def scaffold_flash
|
36
30
|
{}
|
37
31
|
end
|
32
|
+
|
33
|
+
# Sinatra's ERB renderer doesn't like "-%>"
|
34
|
+
def scaffold_fix_template(text)
|
35
|
+
text.gsub('-%>', '%>')
|
36
|
+
end
|
38
37
|
|
39
|
-
# Proc that redirects to given url
|
40
38
|
def scaffold_redirect_to(url)
|
41
|
-
env =
|
39
|
+
env = request.env
|
42
40
|
host = env['HTTP_HOST'] || "#{env['SERVER_NAME']}#{":#{env['SERVER_PORT']}" if env['SERVER_PORT'] && env['SERVER_PORT'].to_i != 80}"
|
43
|
-
|
41
|
+
redirect("//#{host}#{url}")
|
44
42
|
end
|
45
43
|
|
46
|
-
#
|
47
|
-
# @scaffold_template_dir and then create a template file inside that
|
48
|
-
# to override the template (make sure the default templates are also
|
49
|
-
# in this folder). It doesn't support user modifiable layouts,
|
50
|
-
# so you'll have to modify the layout.rhtml file in @scaffold_template_dir.
|
51
|
-
#
|
52
|
-
# This returns a proc that renders the necessary template using a plain
|
53
|
-
# text renderer.
|
44
|
+
# Render's the scaffolded template. A user can override both the template and the layout.
|
54
45
|
def scaffold_render_template(action, options = {}, render_options = {})
|
55
46
|
suffix = options[:suffix]
|
56
47
|
suffix_action = "#{action}#{suffix}"
|
@@ -59,15 +50,12 @@ module ScaffoldingExtensions
|
|
59
50
|
@scaffold_class ||= @scaffold_options[:class]
|
60
51
|
if render_options.include?(:inline)
|
61
52
|
use_js = @scaffold_javascript
|
62
|
-
text
|
63
|
-
|
64
|
-
headers('Content-Type'=>'text/javascript') if use_js
|
65
|
-
render(:text, text, :layout=>false)
|
66
|
-
end
|
53
|
+
headers('Content-Type'=>'text/javascript') if use_js
|
54
|
+
render(:erb, scaffold_fix_template(render_options[:inline]), :layout=>false)
|
67
55
|
else
|
68
|
-
|
69
|
-
|
70
|
-
|
56
|
+
template = resolve_template(:erb, suffix_action.to_sym, render_options, false) || scaffold_fix_template(File.read(scaffold_path(action)))
|
57
|
+
layout = determine_layout(:erb, :layout, {}) || scaffold_fix_template(File.read(scaffold_path('layout'))).gsub('@content', 'yield')
|
58
|
+
render(:erb, template, :layout=>layout)
|
71
59
|
end
|
72
60
|
end
|
73
61
|
|
@@ -76,11 +64,11 @@ module ScaffoldingExtensions
|
|
76
64
|
end
|
77
65
|
|
78
66
|
def scaffold_request_env
|
79
|
-
|
67
|
+
request.env
|
80
68
|
end
|
81
69
|
|
82
70
|
def scaffold_request_id
|
83
|
-
|
71
|
+
params[:id]
|
84
72
|
end
|
85
73
|
|
86
74
|
def scaffold_request_method
|
@@ -88,7 +76,7 @@ module ScaffoldingExtensions
|
|
88
76
|
end
|
89
77
|
|
90
78
|
def scaffold_request_param(v)
|
91
|
-
sparams =
|
79
|
+
sparams = params
|
92
80
|
unless param = sparams[v.to_sym]
|
93
81
|
param = {}
|
94
82
|
sparams.each do |k,value|
|
@@ -106,15 +94,9 @@ module ScaffoldingExtensions
|
|
106
94
|
# is only used for access control, so if you aren't using
|
107
95
|
# scaffold_session_value, it shouldn't matter.
|
108
96
|
def scaffold_session
|
109
|
-
|
97
|
+
session
|
110
98
|
end
|
111
99
|
|
112
|
-
def scaffold_set_vars(meth, event)
|
113
|
-
@scaffold_path = self.class.scaffold_root
|
114
|
-
@scaffold_method = meth
|
115
|
-
@sinatra_event = event
|
116
|
-
end
|
117
|
-
|
118
100
|
# Treats the id option as special, appending it to the path.
|
119
101
|
# Uses the rest of the options as query string parameters.
|
120
102
|
def scaffold_url(action, options = {})
|
@@ -126,60 +108,49 @@ module ScaffoldingExtensions
|
|
126
108
|
"#{@scaffold_path}/#{action}#{id}"
|
127
109
|
end
|
128
110
|
end
|
129
|
-
|
130
|
-
# Class methods for Sinatra necessary for Scaffolding Extensions
|
131
|
-
module MetaSinatraController
|
132
|
-
include ScaffoldingExtensions::MetaController
|
133
|
-
attr_accessor :scaffold_root
|
111
|
+
end
|
134
112
|
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
include ScaffoldingExtensions::PrototypeHelper
|
141
|
-
include ScaffoldingExtensions::SinatraHelper
|
142
|
-
end
|
113
|
+
class Sinatra::EventContext
|
114
|
+
SCAFFOLD_ROOTS = []
|
115
|
+
extend ScaffoldingExtensions::MetaController
|
116
|
+
|
117
|
+
def self.scaffold_setup_helper
|
143
118
|
end
|
144
119
|
|
145
|
-
|
146
|
-
|
147
|
-
|
120
|
+
def self.scaffold_action_setup(root)
|
121
|
+
if SCAFFOLD_ROOTS.empty?
|
122
|
+
include ScaffoldingExtensions::Controller
|
123
|
+
include ScaffoldingExtensions::SinatraController
|
124
|
+
include ScaffoldingExtensions::Helper
|
125
|
+
include ScaffoldingExtensions::PrototypeHelper
|
126
|
+
include ScaffoldingExtensions::SinatraHelper
|
148
127
|
end
|
128
|
+
unless SCAFFOLD_ROOTS.include?(root)
|
129
|
+
SCAFFOLD_ROOTS << root
|
130
|
+
[:get, :post].each do |req_meth|
|
131
|
+
Object.send(req_meth, "#{root}/?:meth?/?:request_id?") do
|
132
|
+
@scaffold_path = root
|
133
|
+
@scaffold_method = meth = params[:meth] ||= 'index'
|
134
|
+
params[:id] ||= params[:request_id]
|
135
|
+
raise(ArgumentError, 'Method Not Allowed') if req_meth == :get && scaffolded_nonidempotent_method?(meth)
|
136
|
+
raise(Sinatra::NotFound) unless scaffolded_method?(meth)
|
137
|
+
send(meth)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
self
|
149
142
|
end
|
150
143
|
end
|
151
144
|
|
152
|
-
class Sinatra::EventContext
|
153
|
-
include ScaffoldingExtensions::TextRenderer
|
154
|
-
end
|
155
|
-
|
156
145
|
def scaffold(root, model, options = {})
|
157
|
-
|
146
|
+
Sinatra::EventContext.scaffold_action_setup(root).send(:scaffold, model, options)
|
158
147
|
end
|
159
148
|
|
160
149
|
def scaffold_all_models(root, options = {})
|
161
|
-
|
150
|
+
Sinatra::EventContext.scaffold_action_setup(root).send(:scaffold_all_models, options)
|
162
151
|
end
|
163
152
|
|
164
153
|
def scaffold_habtm(root, model, association)
|
165
|
-
|
154
|
+
Sinatra::EventContext.scaffold_action_setup(root).send(:scaffold_habtm, model, association)
|
166
155
|
end
|
167
156
|
|
168
|
-
def scaffold_setup(root)
|
169
|
-
unless klass = ScaffoldingExtensions::SCAFFOLD_ROOTS[root]
|
170
|
-
klass = ScaffoldingExtensions::SCAFFOLD_ROOTS[root] = Class.new
|
171
|
-
klass.send(:extend, ScaffoldingExtensions::MetaSinatraController)
|
172
|
-
klass.scaffold_root = root
|
173
|
-
[:get, :post].each do |req_meth|
|
174
|
-
send(req_meth, "#{klass.scaffold_root}/?:meth?/?:request_id?") do
|
175
|
-
meth = params[:meth] ||= 'index'
|
176
|
-
params[:id] ||= params[:request_id]
|
177
|
-
@controller = klass.new
|
178
|
-
raise(ArgumentError, 'Method Not Allowed') if req_meth == :get && @controller.send(:scaffolded_nonidempotent_method?, meth)
|
179
|
-
@controller.send(:scaffold_set_vars, meth, self)
|
180
|
-
instance_eval(&@controller.send(meth))
|
181
|
-
end
|
182
|
-
end
|
183
|
-
end
|
184
|
-
klass
|
185
|
-
end
|
@@ -471,7 +471,7 @@ module ScaffoldingExtensions::MetaModel
|
|
471
471
|
|
472
472
|
# Returns all objects of the associated class not currently associated with this object.
|
473
473
|
def scaffold_unassociated_objects(association, object, options)
|
474
|
-
scaffold_associated_class(association).scaffold_get_objects(:conditions=>[scaffold_unassociated_condition(association, object), scaffold_session_conditions(options[:session])], :order=>scaffold_select_order_association(association), :include=>scaffold_include_association(association))
|
474
|
+
scaffold_associated_class(association).scaffold_get_objects(:conditions=>[scaffold_unassociated_condition(association, object), scaffold_associated_class(association).scaffold_session_conditions(options[:session])], :order=>scaffold_select_order_association(association), :include=>scaffold_include_association(association))
|
475
475
|
end
|
476
476
|
|
477
477
|
# Updates attributes for the given action, but does not save the record.
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scaffolding_extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Evans
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-12-
|
12
|
+
date: 2008-12-17 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|