hobo 0.5.3 → 0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/hobo +18 -4
- data/hobo_files/plugin/CHANGES.txt +511 -0
- data/hobo_files/plugin/README +8 -3
- data/hobo_files/plugin/Rakefile +81 -0
- data/hobo_files/plugin/generators/hobo/hobo_generator.rb +4 -4
- data/hobo_files/plugin/generators/hobo/templates/guest.rb +1 -1
- data/hobo_files/plugin/generators/hobo_front_controller/hobo_front_controller_generator.rb +1 -1
- data/hobo_files/plugin/generators/hobo_front_controller/templates/index.dryml +16 -22
- data/hobo_files/plugin/generators/hobo_front_controller/templates/login.dryml +4 -6
- data/hobo_files/plugin/generators/hobo_front_controller/templates/search.dryml +6 -5
- data/hobo_files/plugin/generators/hobo_front_controller/templates/signup.dryml +4 -6
- data/hobo_files/plugin/generators/hobo_migration/hobo_migration_generator.rb +237 -0
- data/hobo_files/plugin/generators/hobo_migration/templates/migration.rb +9 -0
- data/hobo_files/plugin/generators/hobo_model/USAGE +2 -3
- data/hobo_files/plugin/generators/hobo_model/hobo_model_generator.rb +1 -14
- data/hobo_files/plugin/generators/hobo_model/templates/fixtures.yml +1 -6
- data/hobo_files/plugin/generators/hobo_model/templates/model.rb +10 -4
- data/hobo_files/plugin/generators/hobo_rapid/hobo_rapid_generator.rb +7 -6
- data/hobo_files/plugin/generators/hobo_rapid/templates/hobo_base.css +68 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/hobo_rapid.css +93 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/hobo_rapid.js +11 -6
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/plus.png +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/stylesheets/application.css +24 -14
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/views/application.dryml +28 -44
- data/hobo_files/plugin/generators/hobo_user_model/USAGE +2 -12
- data/hobo_files/plugin/generators/hobo_user_model/hobo_user_model_generator.rb +1 -14
- data/hobo_files/plugin/generators/hobo_user_model/templates/fixtures.yml +0 -6
- data/hobo_files/plugin/generators/hobo_user_model/templates/model.rb +8 -1
- data/hobo_files/plugin/init.rb +6 -2
- data/hobo_files/plugin/lib/active_record/has_many_association.rb +23 -12
- data/hobo_files/plugin/lib/extensions.rb +134 -40
- data/hobo_files/plugin/lib/extensions/test_case.rb +0 -1
- data/hobo_files/plugin/lib/hobo.rb +77 -46
- data/hobo_files/plugin/lib/hobo/authenticated_user.rb +24 -2
- data/hobo_files/plugin/lib/hobo/authentication_support.rb +2 -1
- data/hobo_files/plugin/lib/hobo/controller.rb +35 -12
- data/hobo_files/plugin/lib/hobo/define_tags.rb +4 -4
- data/hobo_files/plugin/lib/hobo/dryml.rb +33 -51
- data/hobo_files/plugin/lib/hobo/dryml/dryml_builder.rb +47 -34
- data/hobo_files/plugin/lib/hobo/dryml/scoped_variables.rb +37 -0
- data/hobo_files/plugin/lib/hobo/dryml/taglib.rb +27 -5
- data/hobo_files/plugin/lib/hobo/dryml/template.rb +545 -302
- data/hobo_files/plugin/lib/hobo/dryml/template_environment.rb +305 -135
- data/hobo_files/plugin/lib/hobo/email_address.rb +5 -0
- data/hobo_files/plugin/lib/hobo/field_spec.rb +66 -0
- data/hobo_files/plugin/lib/hobo/hobo_helper.rb +325 -0
- data/hobo_files/plugin/lib/hobo/html_string.rb +2 -0
- data/hobo_files/plugin/lib/hobo/lazy_hash.rb +13 -1
- data/hobo_files/plugin/lib/hobo/markdown_string.rb +3 -1
- data/hobo_files/plugin/lib/hobo/model.rb +185 -66
- data/hobo_files/plugin/lib/hobo/model_controller.rb +56 -49
- data/hobo_files/plugin/lib/hobo/password_string.rb +2 -0
- data/hobo_files/plugin/lib/hobo/plugins.rb +75 -0
- data/hobo_files/plugin/lib/hobo/rapid_helper.rb +98 -0
- data/hobo_files/plugin/lib/hobo/static_tags +0 -3
- data/hobo_files/plugin/lib/hobo/textile_string.rb +11 -1
- data/hobo_files/plugin/lib/hobo/undefined.rb +1 -1
- data/hobo_files/plugin/lib/rexml.rb +166 -75
- data/hobo_files/plugin/spec/fixtures/users.yml +9 -0
- data/hobo_files/plugin/spec/spec.opts +6 -0
- data/hobo_files/plugin/spec/spec_helper.rb +28 -0
- data/hobo_files/plugin/spec/unit/hobo/dryml/template_spec.rb +650 -0
- data/hobo_files/plugin/tags/core.dryml +58 -4
- data/hobo_files/plugin/tags/rapid.dryml +289 -135
- data/hobo_files/plugin/tags/rapid_document_tags.dryml +49 -0
- data/hobo_files/plugin/tags/rapid_editing.dryml +92 -69
- data/hobo_files/plugin/tags/rapid_forms.dryml +242 -0
- data/hobo_files/plugin/tags/rapid_navigation.dryml +65 -65
- data/hobo_files/plugin/tags/rapid_pages.dryml +197 -124
- data/hobo_files/plugin/tags/rapid_support.dryml +23 -0
- metadata +29 -22
- data/hobo_files/plugin/generators/hobo_model/templates/migration.rb +0 -13
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/default_mapping.rb +0 -11
- data/hobo_files/plugin/generators/hobo_user_model/templates/migration.rb +0 -15
- data/hobo_files/plugin/lib/hobo/HtmlString +0 -3
- data/hobo_files/plugin/lib/hobo/controller_helpers.rb +0 -135
- data/hobo_files/plugin/lib/hobo/core.rb +0 -475
- data/hobo_files/plugin/lib/hobo/rapid.rb +0 -447
- data/hobo_files/plugin/test/hobo_dryml_template_test.rb +0 -7
- data/hobo_files/plugin/test/hobo_test.rb +0 -7
data/bin/hobo
CHANGED
@@ -27,7 +27,7 @@ def command(s)
|
|
27
27
|
exit(1) unless ok
|
28
28
|
end
|
29
29
|
|
30
|
-
if ARGV.length == 0
|
30
|
+
if ARGV.length == 0 || ARGV.include?("--help")
|
31
31
|
puts USAGE
|
32
32
|
exit 1
|
33
33
|
end
|
@@ -50,9 +50,25 @@ until ARGV.empty?
|
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
-
command("
|
53
|
+
command("mkdir #{app_path}")
|
54
54
|
|
55
55
|
Dir.chdir(app_path) do
|
56
|
+
gen = "ruby #{File.join('script', 'generate')}"
|
57
|
+
plugin = "ruby #{File.join('script', 'plugin')}"
|
58
|
+
|
59
|
+
puts "\nChecking out Edge Rails...\n"
|
60
|
+
system("svn co http://dev.rubyonrails.org/svn/rails/trunk vendor/rails") or
|
61
|
+
begin
|
62
|
+
puts "Could not check out Edge Rails - maybe svn is not installed?"
|
63
|
+
exit 1
|
64
|
+
end
|
65
|
+
|
66
|
+
puts "\nGenerating Edge Rails application...\n"
|
67
|
+
command("ruby #{File.join('vendor', 'rails', 'railties', 'bin', 'rails')} .")
|
68
|
+
|
69
|
+
puts "\nInstalling classic_pagination\n"
|
70
|
+
command("#{plugin} install svn://errtheblog.com/svn/plugins/classic_pagination")
|
71
|
+
|
56
72
|
if hobo_svn
|
57
73
|
puts "\nInstalling Hobo plugin via svn checkout...\n"
|
58
74
|
command("svn co #{HOBO_REPO} vendor/plugins/hobo")
|
@@ -61,8 +77,6 @@ Dir.chdir(app_path) do
|
|
61
77
|
FileUtils.cp_r File.join(SRC_FILES, "plugin"), "vendor/plugins/hobo"
|
62
78
|
end
|
63
79
|
|
64
|
-
gen = "ruby #{File.join('script', 'generate')}"
|
65
|
-
|
66
80
|
puts "\nInitialising Hobo...\n"
|
67
81
|
command("#{gen} hobo --add-routes")
|
68
82
|
|
@@ -1,3 +1,514 @@
|
|
1
|
+
=== Release 0.6 ===
|
2
|
+
|
3
|
+
DRYML
|
4
|
+
|
5
|
+
Local tags are gone. We finally gave up on this feature as too
|
6
|
+
complex.
|
7
|
+
|
8
|
+
New feature - <set_scoped> allows a variable assignment that exists
|
9
|
+
only for the lifetime of the tag-body of <set_scoped/>. At the end
|
10
|
+
of the block, the previous value of the variable, if there will be
|
11
|
+
restored. This feature gives a lot of the power of local tags in a
|
12
|
+
less pure but far simpler mechanism.
|
13
|
+
|
14
|
+
New feature - polymorphic tags. A tag can have many definitions for
|
15
|
+
different types of object. Define with e.g.
|
16
|
+
|
17
|
+
<def tag="card" for="User"/>...</def>
|
18
|
+
<def tag="card" for="BlogPost">...</def>
|
19
|
+
|
20
|
+
call with <card for_type/>
|
21
|
+
|
22
|
+
The actual tag called will be selected according to the type of
|
23
|
+
the current context.
|
24
|
+
|
25
|
+
Core tags moved from lib/hobo/core.rb to tags/core.dryml. This
|
26
|
+
follows on from the deprecating of def_tag
|
27
|
+
|
28
|
+
Fix: attrs_for now works with tags imported from a taglib
|
29
|
+
|
30
|
+
Gone: template parameter modifiers (e.g. <my_param.append>). The
|
31
|
+
only one left is 'replace' which is now written as '<my_param
|
32
|
+
replace>' and 'replace' is now a reserved attribute name. Two new
|
33
|
+
features - default tagbodies and restoring parameters - give the
|
34
|
+
same functionality but are more powerful because you can now _wrap_
|
35
|
+
a parameter in your own tag.
|
36
|
+
|
37
|
+
New feature - default tagbodies. Tags can provide a default tagbody
|
38
|
+
like this:
|
39
|
+
|
40
|
+
<def tag="foo">...<tagbody>this is the default</tagbody>...</def>
|
41
|
+
|
42
|
+
Callers can keep the default: <foo/>
|
43
|
+
replace it <foo>my tagbody</foo>
|
44
|
+
or wrap it in new content: <foo>“<default_tagbody/>”</foo>
|
45
|
+
|
46
|
+
You can give restore the default tagbody of an element further up
|
47
|
+
the hierarchy using the 'for' attribute. e.g:
|
48
|
+
|
49
|
+
<foo><baa>“<default_tagbody for="foo"/>”</baa></foo>
|
50
|
+
|
51
|
+
New feature: restoring replaced template parameters. For example -
|
52
|
+
wrapping a template param in an extra div:
|
53
|
+
|
54
|
+
<MyTemplate>
|
55
|
+
<my_param replace><div><my_param restore/></div></my_param>
|
56
|
+
</MyTemplate>
|
57
|
+
|
58
|
+
def@alias_current renamed to 'alias_current_as'
|
59
|
+
|
60
|
+
@if and @unless controll attributes always test for non-blank rather
|
61
|
+
than true. This is more convenient in DRYML where we generally want
|
62
|
+
to skip stuff if a collection is empty (empty enumerables are blank,
|
63
|
+
but not false)
|
64
|
+
|
65
|
+
An attribute that starts with an XML entity reference is *not*
|
66
|
+
considered a code attribute, even though it does start '&'
|
67
|
+
e.g. label="» Next"
|
68
|
+
|
69
|
+
#merge_attrs now always accumultates rather than
|
70
|
+
replaces css classes.
|
71
|
+
|
72
|
+
form, input and a have been removed from static_tags - these are now
|
73
|
+
defined tags.
|
74
|
+
|
75
|
+
Many core tags moved to Rapid. There are very ferw core tags now - just
|
76
|
+
the basic control tags (if, unless etc.)
|
77
|
+
|
78
|
+
|
79
|
+
Hobo Models
|
80
|
+
|
81
|
+
The display_name method is not used anymore. Instead use the new
|
82
|
+
polymorphic tags.
|
83
|
+
|
84
|
+
<def tag="name" for="MyModel">...</def>
|
85
|
+
|
86
|
+
The <name> tag eventually falls back on to_s, so as an alternative
|
87
|
+
you can rename your display_name methods to to_s.
|
88
|
+
|
89
|
+
New semantics for #new and #build.
|
90
|
+
|
91
|
+
#new now does what new_without_appending used to do. That is, it
|
92
|
+
instantiates a new object exactly as if it was in the collection,
|
93
|
+
but it does not modify the collection itself.
|
94
|
+
|
95
|
+
#build is extended so that it sets the belongs_to association that
|
96
|
+
is the counterpart to the has_many.
|
97
|
+
|
98
|
+
For existing apps, just change any calls to #new_without_appending
|
99
|
+
to #new
|
100
|
+
|
101
|
+
Refactored the rich type mechanism to make it easier to add new
|
102
|
+
types. To add a new type, e.g.:
|
103
|
+
|
104
|
+
class Isbn < String; COLUMN_TYPE = :string; end
|
105
|
+
|
106
|
+
Hobo.field_types[:isbn] = Isbn
|
107
|
+
|
108
|
+
You can then use :isbn as a field type in 'fields do', and
|
109
|
+
register a view with <def tag="view" for="isbn">
|
110
|
+
|
111
|
+
|
112
|
+
New rich type Hobo::EmailAddress < String
|
113
|
+
|
114
|
+
Doesn't have any special behaviour as yet, but we could do nifty
|
115
|
+
things with it in the future like auto anti-spam cloaking,
|
116
|
+
validations...
|
117
|
+
|
118
|
+
New method #nillable_field? tests if the underlying collumn can be
|
119
|
+
null.
|
120
|
+
|
121
|
+
New methods #created_date and #modified_date return
|
122
|
+
[created|modified]_at.to_date
|
123
|
+
|
124
|
+
Default to_s for all hobo_models
|
125
|
+
|
126
|
+
|
127
|
+
Model controller
|
128
|
+
|
129
|
+
Boolean fields now get a false value when the param is either '0' or
|
130
|
+
'false'.
|
131
|
+
|
132
|
+
|
133
|
+
Front controller
|
134
|
+
|
135
|
+
All the templates are updated to use the new DRYML
|
136
|
+
|
137
|
+
|
138
|
+
Migration generator
|
139
|
+
|
140
|
+
Now gives an option to generate and run the migration immediately
|
141
|
+
|
142
|
+
Will create the "foo_type" column for belongs_to associations marked
|
143
|
+
as polymorphic.
|
144
|
+
|
145
|
+
|
146
|
+
Hobo Rapid
|
147
|
+
|
148
|
+
lib/hobo/rapid.rb is gone. The tags are now in tags/rapid.dryml and
|
149
|
+
the helpers are in lib/hobo/rapid_helper.rb
|
150
|
+
|
151
|
+
Now includes two CSS stylesheets. hobo_base.css provides some handy
|
152
|
+
reset rules to reduce cross-browser headaches, and hobo_rapid.css
|
153
|
+
provides default styling for some of the Rapid components.
|
154
|
+
|
155
|
+
Rapid split up into more separate dryml files: rapid,
|
156
|
+
rapid_document_tags, rapid_forms, rapid_pages, rapid_editing,
|
157
|
+
rapid_navigation, rapid_support
|
158
|
+
|
159
|
+
There are a great many changes to the Rapid tags, too much to
|
160
|
+
describe individually here. The most important changes are:
|
161
|
+
|
162
|
+
<show> becomes <view>. <view> is a polymorphic tag, so you can
|
163
|
+
<def tag="view" for="MyClass">
|
164
|
+
|
165
|
+
<edit> is gone. Use <editor> if you want a tag that gives an
|
166
|
+
in-place (ajax) editor, and degrades to <view> if the user does
|
167
|
+
not have edit permission. <editor> is a polymorphic tag, so you
|
168
|
+
can <def tag="editor" for="MyClass">
|
169
|
+
|
170
|
+
<form_field> is now <input>. If you give a type attributes, you
|
171
|
+
get a regular html input tag, if you don't you get a smart Hobo
|
172
|
+
form field appropriate for the type of the context. <input> is a
|
173
|
+
polymorphic tag, so you can <def tag="input" for="MyClass">
|
174
|
+
|
175
|
+
All the special form-field tags tags that ended _field now end
|
176
|
+
_input
|
177
|
+
|
178
|
+
<table_for> becomes <Table>
|
179
|
+
|
180
|
+
<ul_for> becomes <UL>
|
181
|
+
|
182
|
+
<object_form> and <remote_method_form> are now both handled by
|
183
|
+
<form>
|
184
|
+
|
185
|
+
<object_link> and <new_object_link> are now both handled by <a>
|
186
|
+
|
187
|
+
<object_table> becomes <FieldList>
|
188
|
+
|
189
|
+
<display_name> becomes <name>
|
190
|
+
|
191
|
+
Various small changes to the navigation tags - please see
|
192
|
+
rapid_navigation.dryml
|
193
|
+
|
194
|
+
|
195
|
+
Hobo Rapid Javascript
|
196
|
+
|
197
|
+
Fix: problems with the save button in TinyMCE fighting with the
|
198
|
+
save-on-blur behaviour.
|
199
|
+
|
200
|
+
|
201
|
+
Tabla theme
|
202
|
+
|
203
|
+
Tweaks to application.dryml and the stylesheet for new DRYML
|
204
|
+
|
205
|
+
|
206
|
+
Hobo user model generator
|
207
|
+
|
208
|
+
Doesn't declare the authentication fields anymore, as these have
|
209
|
+
been moved to Hobo::Authenticated user. This is part of the move to
|
210
|
+
supporting multiple user models.
|
211
|
+
|
212
|
+
|
213
|
+
Hobo controller & helpers
|
214
|
+
|
215
|
+
ControllerHelpers are now HoboHelper, and there's a change to the
|
216
|
+
way this is included in both the controller and the view.
|
217
|
+
|
218
|
+
#render_tags extended to support polymorphic tags
|
219
|
+
|
220
|
+
#site_search now renders the polymorphic <card> tag for each search
|
221
|
+
result.
|
222
|
+
|
223
|
+
|
224
|
+
Hobo module
|
225
|
+
|
226
|
+
New method Hobo.symbolic_type_name returns a symbol abbreviation for
|
227
|
+
a rich type. e.g. Hobo.symbolic_type_name(Hobo::Text) #=> :text
|
228
|
+
|
229
|
+
New method Hobo.type_name
|
230
|
+
|
231
|
+
Hobo.type_name(MyModule::MyClass) #=> "my_module__my_class"
|
232
|
+
|
233
|
+
Note the double underscore
|
234
|
+
|
235
|
+
|
236
|
+
Core Extensions
|
237
|
+
|
238
|
+
ActiveSupport's HashWithIndifferentAccess is extended to keep it's
|
239
|
+
indifferent access semantics with Hobo's extensions to Hash.
|
240
|
+
|
241
|
+
|
242
|
+
|
243
|
+
=== Release 0.6-pre1 ===
|
244
|
+
|
245
|
+
*NOTE* We are now using Edge Rails for all our tests. YMMV with other
|
246
|
+
Rails releases. If you do upgrade tp Edge Rails, you'll need to
|
247
|
+
install classic_pagination too (this dependency will probably go away
|
248
|
+
at some point)
|
249
|
+
|
250
|
+
hobolib directory (app/views/hobolib) renamed to 'taglibs'
|
251
|
+
|
252
|
+
|
253
|
+
DRYML
|
254
|
+
|
255
|
+
Hobo::DefineTags and def_tag are deprecated - they'll be phased out.
|
256
|
+
|
257
|
+
Code attributes changed from foo="#baa" to foo="&baa"
|
258
|
+
|
259
|
+
Changing the context:
|
260
|
+
|
261
|
+
obj="..." renamed to with="..."
|
262
|
+
|
263
|
+
attr="..." renamed to field="..."
|
264
|
+
|
265
|
+
Shorthand syntax <show:authtor.name/> equivalent to <show field="author.name"/>
|
266
|
+
Note that the ':' and field name(s) are optional on the close tag, e.g.:
|
267
|
+
|
268
|
+
<repeat:comments> ... </repeat>
|
269
|
+
|
270
|
+
(Be aware that your DRYML is no longer valid XML if you go for this option)
|
271
|
+
|
272
|
+
<taglib> renamed to <include>
|
273
|
+
|
274
|
+
part_id="..." renamed to part="..."
|
275
|
+
|
276
|
+
#{...} is now supported in attributes of static tags (i.e. plain HTML tags)
|
277
|
+
|
278
|
+
<include> (formerly <taglib>) now supports the 'as' attribute for
|
279
|
+
putting tags in namespaces.
|
280
|
+
|
281
|
+
<include src="my_taglib"/>, then... <my_tag/>
|
282
|
+
<include src="my_taglib" as="foo"/>, then... <foo.my_tag/>
|
283
|
+
|
284
|
+
(note that <foo.my_tag/> compiles to simple "foo.my_tag()", i.e. a
|
285
|
+
method call on an object, so you can do other stuff with this if
|
286
|
+
the mood takes you)
|
287
|
+
|
288
|
+
xattrs="..." renamed to merge_attrs="..."
|
289
|
+
|
290
|
+
New feature: template tags
|
291
|
+
|
292
|
+
Parameter tags (<:foo>...</:foo>) are gone. Replaced by template
|
293
|
+
parameters.
|
294
|
+
|
295
|
+
content_option and replace_option are gone. The 'param' attribute is
|
296
|
+
the new equivalent (part of template tags)
|
297
|
+
|
298
|
+
<else> can now be used in many places. e.g. after <repeat>, the else
|
299
|
+
content will be used if the repeated collection is empty.
|
300
|
+
|
301
|
+
Attributes can now have no RHS, e.g.
|
302
|
+
|
303
|
+
<logo small/> is equivalent to <logo small="&true"/>
|
304
|
+
|
305
|
+
(note your DRYML is not valid XML if you use this shorthand)
|
306
|
+
|
307
|
+
#attrs_for can be called for any tag and return the declared
|
308
|
+
attributes on the tag. e.g.
|
309
|
+
|
310
|
+
attrs_for(:foo) #=> [:a, :b] -- assuming <def tag="foo" attrs="a, b">
|
311
|
+
|
312
|
+
New feature: local tags, e.g.
|
313
|
+
|
314
|
+
<def tag="a">
|
315
|
+
<def tag="panel">...</def>
|
316
|
+
|
317
|
+
... Any call to panel in here, or in the tagbody of the call to
|
318
|
+
<a> will get the local definition. Note that local tags are full
|
319
|
+
closures and have access to state from the containing tag...
|
320
|
+
</def>
|
321
|
+
|
322
|
+
<set a="&1" b="&2"/> equivalent to <% a = 1; b = 2 %>
|
323
|
+
|
324
|
+
New feature: polymorphic tag calls. e.g. if the current context is a
|
325
|
+
User <card for_type/> will try to call <user_card/>, falling back on
|
326
|
+
just <card/> if no such tag exists.
|
327
|
+
|
328
|
+
New feature: control attributes
|
329
|
+
|
330
|
+
<p if="..."/> as a shorthand for <if q="..."><p/></if>
|
331
|
+
<p unless="..."/> as a shorthand for <unless q="..."><p/></unless>
|
332
|
+
<p repeat="..."/> as a shorthand for <repeat with="..."><p/></repeat>
|
333
|
+
|
334
|
+
Think of these as the dryml equivalent of the suffix 'if' and 'unless' in Ruby.
|
335
|
+
|
336
|
+
If you give the attributes a string, it is treated test for a
|
337
|
+
non-blank field, e.g. if="address" is like
|
338
|
+
<if q="&!this.address.blank?">
|
339
|
+
|
340
|
+
You can use <else> after tags with these attributes on them.
|
341
|
+
|
342
|
+
Fix: calling @view methods with a block now works
|
343
|
+
|
344
|
+
The list of tags considered 'static' (i.e. plain HTML tags) can now
|
345
|
+
be customised by putting your own list (one tag per line) in
|
346
|
+
config/dryml_static_tags.txt
|
347
|
+
|
348
|
+
|
349
|
+
Hobo Controllers
|
350
|
+
|
351
|
+
New directive "include_taglib" allows a specific DRYML taglib to be
|
352
|
+
included in every action on this controller.
|
353
|
+
|
354
|
+
render_tag now supports custom render options, e.g.
|
355
|
+
|
356
|
+
render_tag :error_message, { :message => "uh oh" }, { :status => 500 }
|
357
|
+
|
358
|
+
Options passed to #hobo_index are now also forwarded to
|
359
|
+
#paginated_find, making it easier to change the page size etc.
|
360
|
+
|
361
|
+
#paginated_find now takes an :association parameter to provide a
|
362
|
+
custom association
|
363
|
+
|
364
|
+
Fix: :order option to paginated_find ignored in some situations.
|
365
|
+
|
366
|
+
Hobo controller actions now perform a #hobo_render if you give a
|
367
|
+
response block but the blog does not do a render or a redirect. So
|
368
|
+
e.g. if you just want to update the session you can leave hobo to
|
369
|
+
handle the response
|
370
|
+
|
371
|
+
Fix: hobo_create now checks for create permission if you pass a
|
372
|
+
custom :this parameter
|
373
|
+
|
374
|
+
POSTing and PUTing now support boolean values
|
375
|
+
|
376
|
+
|
377
|
+
Hobo Models
|
378
|
+
|
379
|
+
#created_by renamed to #set_creator. This should help avoid name
|
380
|
+
clashes with column names etc.
|
381
|
+
|
382
|
+
Added field declarations on models. This replaces set_field_type and
|
383
|
+
also supports the migration generator.
|
384
|
+
|
385
|
+
fields do
|
386
|
+
name :string
|
387
|
+
body :html
|
388
|
+
end
|
389
|
+
|
390
|
+
Added return_type declaration for setting rich types on model
|
391
|
+
methods, e.g.
|
392
|
+
|
393
|
+
return_type :html
|
394
|
+
def my_method
|
395
|
+
...
|
396
|
+
end
|
397
|
+
|
398
|
+
This allows DRYML to render the correct widget even when the
|
399
|
+
method is returning nil
|
400
|
+
|
401
|
+
Fix: def_scope was pretty much completely broken
|
402
|
+
|
403
|
+
RSpec support and a test Rails app (in spec/rails-root) added to the
|
404
|
+
repository.
|
405
|
+
|
406
|
+
|
407
|
+
DRYML Core Tags
|
408
|
+
|
409
|
+
<dynamic_tag/> renamed to <call_tag/>
|
410
|
+
|
411
|
+
<display_name/> displays "(not available)" if the context is nil
|
412
|
+
|
413
|
+
show@no_span renamed to show@no_wrapper, and for content such as
|
414
|
+
:html it now generates a div instead of a span.
|
415
|
+
|
416
|
+
count@unless_none -- nothing output when count is zero (can be
|
417
|
+
followed by an <else>)
|
418
|
+
|
419
|
+
<join> now uses <display_name> if no tagbody is given.
|
420
|
+
|
421
|
+
join@with renamed to join@separator
|
422
|
+
|
423
|
+
|
424
|
+
DRYML Helpers
|
425
|
+
|
426
|
+
#param_name_for will strip a trailing '?' if there is one.
|
427
|
+
|
428
|
+
|
429
|
+
Hobo Rapid Tags
|
430
|
+
|
431
|
+
<boolean_field> now also generates a hidden tag with the same name
|
432
|
+
and value '0' like the rails helper. This fixes HTMLs broken idea of
|
433
|
+
how to handle checkboxes (you get a 0 value if the checkbox is not
|
434
|
+
checked, instead of no parameter at all)
|
435
|
+
|
436
|
+
<object_form> no longer generates hidden fields for created_at and updated_at
|
437
|
+
|
438
|
+
|
439
|
+
Hobo::TextileString now includes a monkey-patch to RedCloth
|
440
|
+
|
441
|
+
|
442
|
+
Users & Authentication
|
443
|
+
|
444
|
+
Added: Hobo maintains a login_count attribute if one exists on your user model.
|
445
|
+
|
446
|
+
|
447
|
+
Hobo Rapid Javascript
|
448
|
+
|
449
|
+
Ajax forms now default to not resseting and not refocussing after submission.
|
450
|
+
|
451
|
+
Fix: ajax behaviour (Hobo.applyEvents) now applied to the result of searches.
|
452
|
+
|
453
|
+
Fix: Ajax now using encodeURIComponent instead of escape. Fixes
|
454
|
+
problems with foreign characters.
|
455
|
+
|
456
|
+
|
457
|
+
Tabla theme
|
458
|
+
|
459
|
+
Removed <application_logo/>
|
460
|
+
|
461
|
+
Added missing image plus.png
|
462
|
+
|
463
|
+
|
464
|
+
Generators
|
465
|
+
|
466
|
+
New: hobo_migration generator. Creates fully implemented migrations
|
467
|
+
for you based on field declarations in your models
|
468
|
+
|
469
|
+
hobo_model and hobo_user_model generators updated accordingly --
|
470
|
+
they don't generate migrations any more.
|
471
|
+
|
472
|
+
Routes
|
473
|
+
|
474
|
+
Routes with ';' have been changed to use '/' as per edge Rails.
|
475
|
+
|
476
|
+
Permission System
|
477
|
+
|
478
|
+
Hobo.can_edit? can now handle feild names that end in '?'
|
479
|
+
|
480
|
+
Hobo Module
|
481
|
+
|
482
|
+
Hobo.models now skips files whos names don't look like models
|
483
|
+
(e.g. editor backup files)
|
484
|
+
|
485
|
+
|
486
|
+
Core Extensions:
|
487
|
+
|
488
|
+
Add: Enumerable#build_hash
|
489
|
+
|
490
|
+
(1..3).build_hash {|i| ["#{i} Xs", "X" * i]}
|
491
|
+
=> {"1 Xs"=>"X", "3 Xs"=>"XXX", "2 Xs"=>"XX"}
|
492
|
+
|
493
|
+
Add: Enumerable#map_hash
|
494
|
+
|
495
|
+
(1..5).map_hash { |x| x**2 }
|
496
|
+
=> {5=>25, 1=>1, 2=>4, 3=>9, 4=>16}
|
497
|
+
|
498
|
+
Add: Hash#-
|
499
|
+
|
500
|
+
{:a => 1, :b => 2} - [:a] #=> {:b = 2}
|
501
|
+
|
502
|
+
Add: Hash#&
|
503
|
+
|
504
|
+
{:a => 1, :b => 2} & [:a] #=> {:a = 2}
|
505
|
+
|
506
|
+
|
507
|
+
Documentation
|
508
|
+
|
509
|
+
Added contributed rdoc to Hobo::AuthenticatedUser (thanks!)
|
510
|
+
|
511
|
+
|
1
512
|
=== Release 0.5.3 ===
|
2
513
|
|
3
514
|
Core tags
|