hobo 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE.txt +22 -0
- data/README.txt +18 -0
- data/bin/hobo +81 -0
- data/hobo_files/plugin/CHANGES.txt +963 -0
- data/hobo_files/plugin/LICENSE.txt +22 -0
- data/hobo_files/plugin/README +4 -0
- data/hobo_files/plugin/Rakefile +11 -0
- data/hobo_files/plugin/generators/hobo/hobo_generator.rb +37 -0
- data/hobo_files/plugin/generators/hobo/templates/application.dryml +2 -0
- data/hobo_files/plugin/generators/hobo/templates/guest.rb +31 -0
- data/hobo_files/plugin/generators/hobo_front_controller/USAGE +11 -0
- data/hobo_files/plugin/generators/hobo_front_controller/hobo_front_controller_generator.rb +90 -0
- data/hobo_files/plugin/generators/hobo_front_controller/templates/controller.rb +51 -0
- data/hobo_files/plugin/generators/hobo_front_controller/templates/functional_test.rb +18 -0
- data/hobo_files/plugin/generators/hobo_front_controller/templates/helper.rb +2 -0
- data/hobo_files/plugin/generators/hobo_front_controller/templates/index.dryml +43 -0
- data/hobo_files/plugin/generators/hobo_front_controller/templates/login.dryml +44 -0
- data/hobo_files/plugin/generators/hobo_front_controller/templates/search.dryml +18 -0
- data/hobo_files/plugin/generators/hobo_front_controller/templates/signup.dryml +45 -0
- data/hobo_files/plugin/generators/hobo_model/USAGE +26 -0
- data/hobo_files/plugin/generators/hobo_model/hobo_model_generator.rb +38 -0
- data/hobo_files/plugin/generators/hobo_model/templates/fixtures.yml +11 -0
- data/hobo_files/plugin/generators/hobo_model/templates/migration.rb +13 -0
- data/hobo_files/plugin/generators/hobo_model/templates/model.rb +24 -0
- data/hobo_files/plugin/generators/hobo_model/templates/unit_test.rb +10 -0
- data/hobo_files/plugin/generators/hobo_model_controller/USAGE +30 -0
- data/hobo_files/plugin/generators/hobo_model_controller/hobo_model_controller_generator.rb +43 -0
- data/hobo_files/plugin/generators/hobo_model_controller/templates/controller.rb +5 -0
- data/hobo_files/plugin/generators/hobo_model_controller/templates/functional_test.rb +18 -0
- data/hobo_files/plugin/generators/hobo_model_controller/templates/helper.rb +2 -0
- data/hobo_files/plugin/generators/hobo_model_controller/templates/view.rhtml +2 -0
- data/hobo_files/plugin/generators/hobo_rapid/hobo_rapid_generator.rb +51 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/hobo_rapid.js +436 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/default_mapping.rb +11 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/banner.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/bkg_bodytop.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/bkg_corner_01.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/bkg_corner_02.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/bkg_corner_03.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/bkg_corner_04.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/bkg_shadow_bottom.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/bkg_shadow_left.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/bkg_shadow_right.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/bkg_shadow_top.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/header_blue.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/header_dblue.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/header_green.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/header_purple.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/header_red.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/logo.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/spinner.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/txt_list_img_dblue.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/txt_list_img_green.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/txt_list_img_purple.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/txt_list_img_red.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/window_corner_01.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/window_corner_02.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/window_corner_03.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/window_corner_04.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/window_shadow_bottom.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/window_shadow_left.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/window_shadow_right.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/images/window_shadow_top.gif +0 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/public/stylesheets/application.css +390 -0
- data/hobo_files/plugin/generators/hobo_rapid/templates/themes/default/views/application.dryml +104 -0
- data/hobo_files/plugin/generators/hobo_user_model/USAGE +26 -0
- data/hobo_files/plugin/generators/hobo_user_model/hobo_user_model_generator.rb +38 -0
- data/hobo_files/plugin/generators/hobo_user_model/templates/fixtures.yml +11 -0
- data/hobo_files/plugin/generators/hobo_user_model/templates/migration.rb +15 -0
- data/hobo_files/plugin/generators/hobo_user_model/templates/model.rb +58 -0
- data/hobo_files/plugin/generators/hobo_user_model/templates/unit_test.rb +10 -0
- data/hobo_files/plugin/init.rb +44 -0
- data/hobo_files/plugin/lib/action_view_extensions/base.rb +14 -0
- data/hobo_files/plugin/lib/active_record/has_many_association.rb +54 -0
- data/hobo_files/plugin/lib/active_record/has_many_through_association.rb +22 -0
- data/hobo_files/plugin/lib/active_record/table_definition.rb +34 -0
- data/hobo_files/plugin/lib/extensions.rb +245 -0
- data/hobo_files/plugin/lib/extensions/test_case.rb +130 -0
- data/hobo_files/plugin/lib/hobo.rb +353 -0
- data/hobo_files/plugin/lib/hobo/HtmlString +3 -0
- data/hobo_files/plugin/lib/hobo/authenticated_user.rb +106 -0
- data/hobo_files/plugin/lib/hobo/authentication_support.rb +108 -0
- data/hobo_files/plugin/lib/hobo/composite_model.rb +66 -0
- data/hobo_files/plugin/lib/hobo/controller.rb +134 -0
- data/hobo_files/plugin/lib/hobo/controller_helpers.rb +135 -0
- data/hobo_files/plugin/lib/hobo/core.rb +475 -0
- data/hobo_files/plugin/lib/hobo/define_tags.rb +56 -0
- data/hobo_files/plugin/lib/hobo/dryml.rb +161 -0
- data/hobo_files/plugin/lib/hobo/dryml/dryml_builder.rb +126 -0
- data/hobo_files/plugin/lib/hobo/dryml/tag_module.rb +9 -0
- data/hobo_files/plugin/lib/hobo/dryml/taglib.rb +57 -0
- data/hobo_files/plugin/lib/hobo/dryml/template.rb +586 -0
- data/hobo_files/plugin/lib/hobo/dryml/template_environment.rb +302 -0
- data/hobo_files/plugin/lib/hobo/dryml/template_handler.rb +19 -0
- data/hobo_files/plugin/lib/hobo/generator.rb +25 -0
- data/hobo_files/plugin/lib/hobo/html_string.rb +3 -0
- data/hobo_files/plugin/lib/hobo/lazy_hash.rb +28 -0
- data/hobo_files/plugin/lib/hobo/mapping_tags.rb +262 -0
- data/hobo_files/plugin/lib/hobo/markdown_string.rb +7 -0
- data/hobo_files/plugin/lib/hobo/model.rb +391 -0
- data/hobo_files/plugin/lib/hobo/model_controller.rb +676 -0
- data/hobo_files/plugin/lib/hobo/model_queries.rb +92 -0
- data/hobo_files/plugin/lib/hobo/model_support.rb +44 -0
- data/hobo_files/plugin/lib/hobo/password_string.rb +3 -0
- data/hobo_files/plugin/lib/hobo/predicate_dispatch.rb +78 -0
- data/hobo_files/plugin/lib/hobo/proc_binding.rb +32 -0
- data/hobo_files/plugin/lib/hobo/rapid.rb +447 -0
- data/hobo_files/plugin/lib/hobo/static_tags +92 -0
- data/hobo_files/plugin/lib/hobo/text.rb +3 -0
- data/hobo_files/plugin/lib/hobo/textile_string.rb +13 -0
- data/hobo_files/plugin/lib/hobo/undefined.rb +41 -0
- data/hobo_files/plugin/lib/hobo/undefined_access_error.rb +5 -0
- data/hobo_files/plugin/lib/hobo/where_fragment.rb +23 -0
- data/hobo_files/plugin/lib/rexml.rb +345 -0
- data/hobo_files/plugin/tags/core.dryml +6 -0
- data/hobo_files/plugin/tags/rapid.dryml +177 -0
- data/hobo_files/plugin/tags/rapid_editing.dryml +168 -0
- data/hobo_files/plugin/tags/rapid_navigation.dryml +95 -0
- data/hobo_files/plugin/tags/rapid_pages.dryml +175 -0
- data/hobo_files/plugin/tasks/environments.rake +19 -0
- data/hobo_files/plugin/tasks/hobo_tasks.rake +4 -0
- data/hobo_files/plugin/test/hobo_dryml_template_test.rb +7 -0
- data/hobo_files/plugin/test/hobo_test.rb +7 -0
- data/hobo_files/plugin/uninstall.rb +1 -0
- metadata +206 -0
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2006 Tom Locke
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person
|
4
|
+
obtaining a copy of this software and associated documentation
|
5
|
+
files (the "Software"), to deal in the Software without
|
6
|
+
restriction, including without limitation the rights to use,
|
7
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
copies of the Software, and to permit persons to whom the
|
9
|
+
Software is furnished to do so, subject to the following
|
10
|
+
conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
17
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
19
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
20
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
21
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
22
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
data/README.txt
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
Hobo - The web app builder for Rails
|
2
|
+
|
3
|
+
See http://hobocentral.net for more info
|
4
|
+
|
5
|
+
|
6
|
+
This gem installs a single command: hobo
|
7
|
+
|
8
|
+
|
9
|
+
--- hobo command ---
|
10
|
+
|
11
|
+
Usage: hobo <app-path> [ --user-model <model-name-or-false> ]
|
12
|
+
|
13
|
+
Creates a Rails app at <app-path> pre-configured for Hobo. That is,
|
14
|
+
the Hobo plugin is installed, various Hobo generators are run, and
|
15
|
+
routing is configured.
|
16
|
+
|
17
|
+
Also creates a user model and controller, unless "--user-model false"
|
18
|
+
is given. By default the user model is called "user".
|
data/bin/hobo
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'fileutils'
|
4
|
+
Signal.trap("INT") { puts; exit }
|
5
|
+
|
6
|
+
SRC_FILES = File.join(File.dirname(__FILE__), "../hobo_files")
|
7
|
+
|
8
|
+
USAGE = "USAGE: hobo <app-path> [ --user-model <model-name-or-false> ] [ --svn ]"
|
9
|
+
|
10
|
+
HOBO_REPO = "svn://hobocentral.net/hobo/trunk"
|
11
|
+
|
12
|
+
|
13
|
+
### Nasty stuff needed for Windows :-( ###
|
14
|
+
require 'rbconfig'
|
15
|
+
|
16
|
+
if Config::CONFIG["arch"] =~ /win32/
|
17
|
+
require "win32/registry"
|
18
|
+
def system(command)
|
19
|
+
win = Win32API.new("crtdll", "system", ['P'], 'L').Call(command)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
### end nasty stuff ###
|
23
|
+
|
24
|
+
|
25
|
+
def command(s)
|
26
|
+
ok = system(s)
|
27
|
+
exit(1) unless ok
|
28
|
+
end
|
29
|
+
|
30
|
+
if ARGV.length == 0
|
31
|
+
puts USAGE
|
32
|
+
exit 1
|
33
|
+
end
|
34
|
+
|
35
|
+
app_path = ARGV.shift
|
36
|
+
|
37
|
+
user_model = "user"
|
38
|
+
hobo_svn = false
|
39
|
+
|
40
|
+
until ARGV.empty?
|
41
|
+
case ARGV.shift
|
42
|
+
when "--user-model"
|
43
|
+
arg = ARGV.shift
|
44
|
+
user_model = arg == "false" ? nil : arg
|
45
|
+
when "--svn"
|
46
|
+
hobo_svn = true
|
47
|
+
else
|
48
|
+
puts USAGE
|
49
|
+
exit 1
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
command("rails #{app_path}")
|
54
|
+
|
55
|
+
Dir.chdir(app_path) do
|
56
|
+
if hobo_svn
|
57
|
+
puts "\nInstalling Hobo plugin via svn checkout...\n"
|
58
|
+
command("svn co #{HOBO_REPO} vendor/plugins/hobo")
|
59
|
+
else
|
60
|
+
puts "\nInstalling Hobo plugin from gem...\n"
|
61
|
+
FileUtils.cp_r File.join(SRC_FILES, "plugin"), "vendor/plugins/hobo"
|
62
|
+
end
|
63
|
+
|
64
|
+
gen = "ruby #{File.join('script', 'generate')}"
|
65
|
+
|
66
|
+
puts "\nInitialising Hobo...\n"
|
67
|
+
command("#{gen} hobo --add-routes")
|
68
|
+
|
69
|
+
puts "\nInstalling Hobo Rapid and default theme...\n"
|
70
|
+
command("#{gen} hobo_rapid --import-tags")
|
71
|
+
|
72
|
+
if user_model
|
73
|
+
puts "\nCreating #{user_model} model and controller...\n"
|
74
|
+
command("#{gen} hobo_user_model #{user_model}")
|
75
|
+
command("#{gen} hobo_model_controller #{user_model}")
|
76
|
+
end
|
77
|
+
|
78
|
+
puts "\nCreating standard pages...\n"
|
79
|
+
command("#{gen} hobo_front_controller front " +
|
80
|
+
"#{'--no-user' unless user_model} --delete-index --add-routes")
|
81
|
+
end
|
@@ -0,0 +1,963 @@
|
|
1
|
+
=== Release 0.5.3 ===
|
2
|
+
|
3
|
+
Core tags
|
4
|
+
|
5
|
+
Fix: <show> tag was broken - it wasn't displaying the surrounding
|
6
|
+
<span> or any associations
|
7
|
+
|
8
|
+
<show> now handles all kinds of Numeric types
|
9
|
+
|
10
|
+
|
11
|
+
DRYML
|
12
|
+
|
13
|
+
DRYML Build cache: reloading unchanged DRYML files in dev mode is
|
14
|
+
now *much* faster.
|
15
|
+
|
16
|
+
|
17
|
+
Model extensions
|
18
|
+
|
19
|
+
Fixes to the id_name feature
|
20
|
+
|
21
|
+
|
22
|
+
Hobo model controller
|
23
|
+
|
24
|
+
Fix: :permission_denied_response was not supported on several
|
25
|
+
actions
|
26
|
+
|
27
|
+
|
28
|
+
Hobo Rapid
|
29
|
+
|
30
|
+
Hobo::Rapid::TYPE_NAMES added - a hash that maps classes to names
|
31
|
+
(symbols) that are used when looking for an editor / form field for
|
32
|
+
a given type. Allows you to extend the <edit> tag to support your
|
33
|
+
own types.
|
34
|
+
|
35
|
+
|
36
|
+
=== Release 0.5.2 ===
|
37
|
+
|
38
|
+
Misuse of classify changed throughout to camelize. Bugs related to
|
39
|
+
certain model names fixed as a result.
|
40
|
+
|
41
|
+
Added Hobo::LazyHash. If a value is a proc, the proc is called on the
|
42
|
+
first access of that key, and the result of the proc becomes the
|
43
|
+
value. These are used in the new controller customisation mechanism.
|
44
|
+
|
45
|
+
|
46
|
+
Hobo Rapid
|
47
|
+
|
48
|
+
New ajax options reset_form and refocus_form for ajax forms. Default
|
49
|
+
is true
|
50
|
+
|
51
|
+
toggle: new function like Element.toggle in prototype (Hobo uses the
|
52
|
+
css class 'hidden' instead of an inline 'style' attribute.
|
53
|
+
|
54
|
+
In place editing: various fixes related to HTML/URL encoding.
|
55
|
+
|
56
|
+
New option 'fade' to delete button. Pass fade="#false" to supress
|
57
|
+
the fade effect.
|
58
|
+
|
59
|
+
<hobo_rapid_javascripts> now takes an attribute tiny_mce. Set to
|
60
|
+
true to enable TinyMCE support for html editors.
|
61
|
+
|
62
|
+
<hobo_rapid_javascripts> within the <page> tag now available as
|
63
|
+
inner-tag 'rapid_javascripts'. e.g. you can do
|
64
|
+
|
65
|
+
<page rapid_javascripts.tiny_mce="#true">
|
66
|
+
|
67
|
+
to enable TinyMCE support.
|
68
|
+
|
69
|
+
Removed helper current_user_in?
|
70
|
+
|
71
|
+
Editors now have a css class added automatically:
|
72
|
+
"<class>_<feild>_editor", e.g. "person_name_editor"
|
73
|
+
|
74
|
+
In place editors now wrap the content in a div if the editor will be
|
75
|
+
a textarea or an html editor (was a span).
|
76
|
+
|
77
|
+
All the buttons now have automatically added css classes like
|
78
|
+
"delete_person_button", "create_person_button".
|
79
|
+
|
80
|
+
create_button now uses any passed field values in the check for
|
81
|
+
create permission.
|
82
|
+
|
83
|
+
object form now has a css class added: either the model class name, or
|
84
|
+
"new_<class>"
|
85
|
+
|
86
|
+
New tag <remote_method_form> for calling remote methods with parameters, either with a traditional
|
87
|
+
|
88
|
+
|
89
|
+
Model Extensions
|
90
|
+
|
91
|
+
Fix to HasManyAssociation#new (didn't support parameters)
|
92
|
+
|
93
|
+
Added block queries to has_many associations,
|
94
|
+
e.g. post.comments.find { published = 1 }
|
95
|
+
|
96
|
+
MyModel[...] equivalent to MyModel.find(...) (Thanks to Jamis Buck's
|
97
|
+
tip on his blog)
|
98
|
+
|
99
|
+
New feature: defined scopes
|
100
|
+
|
101
|
+
Field types set by set_field_type are now inherited
|
102
|
+
|
103
|
+
Model#conditions { ... } generates an sql where clause from a query
|
104
|
+
block.
|
105
|
+
|
106
|
+
Fix to #subclass_associations with has_many :through
|
107
|
+
|
108
|
+
Method #changed_fields? to complement #same_fields?. Useful in
|
109
|
+
permission methods.
|
110
|
+
|
111
|
+
|
112
|
+
Integration test extensions
|
113
|
+
|
114
|
+
#visits now can now be given http get parameters
|
115
|
+
|
116
|
+
#deletes added: bob.deletes(some_object)
|
117
|
+
|
118
|
+
#calls_method added: bob.calls_method(object, some_method)
|
119
|
+
|
120
|
+
|
121
|
+
General extensions
|
122
|
+
|
123
|
+
#extract_options_from_args! added to Kernel
|
124
|
+
|
125
|
+
Object#is_a? extended to support multiple args:
|
126
|
+
|
127
|
+
if foo.is_a?(Symbol, String)
|
128
|
+
|
129
|
+
_why's metaid added to Object
|
130
|
+
|
131
|
+
Added Hash#map_hash. e.g. a new hash with all values incremented
|
132
|
+
by 1:
|
133
|
+
|
134
|
+
my_hash.map_hash {|k, v| v+1}
|
135
|
+
|
136
|
+
|
137
|
+
Controller extensions
|
138
|
+
|
139
|
+
redirect_to can be passed an object, equivalent to
|
140
|
+
redirect_to(object_url(x)), e.g.
|
141
|
+
|
142
|
+
redirect_to current_user.adverts
|
143
|
+
|
144
|
+
|
145
|
+
Model controllers
|
146
|
+
|
147
|
+
Removed customisation hooks, create_response,
|
148
|
+
invalid_create_response, update_response etc.
|
149
|
+
|
150
|
+
New mechanism for customising actions.
|
151
|
+
|
152
|
+
def create
|
153
|
+
hobo_create ...customisation args...
|
154
|
+
end
|
155
|
+
|
156
|
+
web_method, show_method, and publish_collection declarations are now
|
157
|
+
inherited.
|
158
|
+
|
159
|
+
|
160
|
+
Helpers
|
161
|
+
|
162
|
+
debug can now be passed multiple values you'd like to inspect
|
163
|
+
|
164
|
+
param_name_for now accepts a string as well as an array for the
|
165
|
+
field path, e.g. param_name_for(current_user, "account.name")
|
166
|
+
|
167
|
+
Core tags
|
168
|
+
|
169
|
+
object_link automatically adds a css class "<class>_link",
|
170
|
+
e.g. "person_link"
|
171
|
+
|
172
|
+
Changed default date formatting to to_s(:long) for dates and times.
|
173
|
+
|
174
|
+
New tag transpose_and_repeat, useful for those tables when you wish
|
175
|
+
HTML grouped cells by column instead of by row.
|
176
|
+
|
177
|
+
New tag if_blank
|
178
|
+
|
179
|
+
|
180
|
+
Permission system
|
181
|
+
|
182
|
+
Hobo::Undefined#undefined? renamed to hobo_undefined?
|
183
|
+
|
184
|
+
can_edit? now works better with boolean fields
|
185
|
+
|
186
|
+
can_call_<method>? renamed to <method>_callable_by?
|
187
|
+
|
188
|
+
|
189
|
+
DRYML
|
190
|
+
|
191
|
+
Fix: options to inner-tags were leaking through to the HTML output.
|
192
|
+
|
193
|
+
Debug feature -- if the <def> tag has an attribute
|
194
|
+
hobo_debug_source, the generated ERB source will be output to
|
195
|
+
logger.debug
|
196
|
+
|
197
|
+
Dryml now reports an error if a part name occurs more than once
|
198
|
+
|
199
|
+
Inner tag names can now be generated at runtime, this allows
|
200
|
+
e.g. the object_table tag to generate inner-tags on the fly for
|
201
|
+
every editor and label:
|
202
|
+
|
203
|
+
<object_table fields.name_editor.update="my_part" />
|
204
|
+
|
205
|
+
Go read that last one again - it's awesome
|
206
|
+
|
207
|
+
New rake tasks
|
208
|
+
|
209
|
+
environments.rake defines tasks like dev, prod, testing so you can
|
210
|
+
e.g.:
|
211
|
+
|
212
|
+
rake prod db:migrate
|
213
|
+
|
214
|
+
(thanks to err.the_blog IIRC)
|
215
|
+
|
216
|
+
|
217
|
+
=== Release 0.5.1 ===
|
218
|
+
|
219
|
+
Fix to model extensions: hobo_user_model generator could not complete
|
220
|
+
because an attempt to access the database before the table exists was
|
221
|
+
made.
|
222
|
+
|
223
|
+
=== Release 0.5 ===
|
224
|
+
|
225
|
+
Tabla theme
|
226
|
+
|
227
|
+
Changed some heading levels to be more logical - e.g. now use H2 and
|
228
|
+
H3 inside a panel instead of H1 and H2
|
229
|
+
|
230
|
+
Various CSS tweaks
|
231
|
+
|
232
|
+
<page>
|
233
|
+
|
234
|
+
Upgraded to use inner tags
|
235
|
+
|
236
|
+
No longer imports public/stylesheets/application.css by default -
|
237
|
+
can easily be added using inner-tags
|
238
|
+
|
239
|
+
<application_nav> and <application_logo> moved into the theme (were
|
240
|
+
in Rapid)
|
241
|
+
|
242
|
+
Frontpage generator
|
243
|
+
|
244
|
+
Page templates modified to use <:intro>, <:main> etc
|
245
|
+
|
246
|
+
|
247
|
+
hobo_rapid generator
|
248
|
+
|
249
|
+
--import-tags option will add two tags to application.dryml:
|
250
|
+
|
251
|
+
<taglib src="plugins/hobo/tags/rapid"/>
|
252
|
+
<set_theme name="default"/>
|
253
|
+
|
254
|
+
|
255
|
+
Plugin initialisation
|
256
|
+
|
257
|
+
Theme no longer set to default in hobo/init.rb. Instead use
|
258
|
+
<set_theme> in application.dryml
|
259
|
+
|
260
|
+
|
261
|
+
Core extentions
|
262
|
+
|
263
|
+
Enumerable#map_with_index
|
264
|
+
|
265
|
+
|
266
|
+
Ajax Mechanism
|
267
|
+
|
268
|
+
Render parameters (http parameters) are passed in as a hash of
|
269
|
+
requests with numeric keys rather than an array.
|
270
|
+
(e.g. render[1][id]=foo rather than render[][id]=foo
|
271
|
+
|
272
|
+
Hobo.ajaxRequest (javascript) now displays error messages in an
|
273
|
+
alert box. (Known issue: seems to show these twice for some reason)
|
274
|
+
|
275
|
+
In-place-editor support extended to allow other parts to be updated at
|
276
|
+
the same time.
|
277
|
+
|
278
|
+
Automatic mechanism for updating multiple displays of the same field
|
279
|
+
after an in-place-edit
|
280
|
+
|
281
|
+
In-place-editor for html fields will now use TinyMCE if installed
|
282
|
+
(integrated with Ajax.InPlaceEditor)
|
283
|
+
|
284
|
+
Select based ajax editor for numbers, suited for small ranges,
|
285
|
+
e.g. 1 to 10
|
286
|
+
|
287
|
+
Hobo.removeButton (javascript) now supports updating of other parts
|
288
|
+
along with the removal.
|
289
|
+
|
290
|
+
Dom attribute "model_id" renamed to "hobo_model_id"
|
291
|
+
|
292
|
+
Fix to Ajax.InPlaceEditor - no longer removes <p> tags
|
293
|
+
|
294
|
+
before_ajax hook. This method is called immediately before the ajax
|
295
|
+
response is performed. A chance for the controller to make extra
|
296
|
+
instance variabled available to the part methods.
|
297
|
+
|
298
|
+
If a custom JS function is specified for an ajax update
|
299
|
+
(render[...][function]=f), this name is no longer camelised - it is
|
300
|
+
called as-is.
|
301
|
+
|
302
|
+
The object (render[...][object]=...) is now allowed to be nil
|
303
|
+
|
304
|
+
In-place-editor fields now reset automatically to a preset message
|
305
|
+
when the field is blank (e.g. "click to edit")
|
306
|
+
|
307
|
+
|
308
|
+
Core helpers
|
309
|
+
|
310
|
+
Fix: object_url gives correct urls when the action is a web-method
|
311
|
+
(controller-name/id/method-name)
|
312
|
+
|
313
|
+
<show> will wrap the displayed content in a <span> with a
|
314
|
+
hobo_model_id. This enables the automatic update of multiple
|
315
|
+
displays of a field value after an ajax edit.
|
316
|
+
|
317
|
+
<show> uses the new type-system added to Hobo models. The main
|
318
|
+
benefit is that values that don't come directly from AR should
|
319
|
+
display without problem, and more types are supported (e.g. float)
|
320
|
+
|
321
|
+
<show> supports a format attribute for numbers:
|
322
|
+
<show attr="price" format="%.2f"/>
|
323
|
+
|
324
|
+
<show> will not display password attributes (e.g. in your model
|
325
|
+
set_field_type :password => :password)
|
326
|
+
|
327
|
+
New tags <show_belongs_to> and <show_has_many> can be overriden to
|
328
|
+
handle the way these relationships are displayed by <show>
|
329
|
+
|
330
|
+
display_name moved into core (was in Rapid, but is needed by <show>)
|
331
|
+
|
332
|
+
display_name uses <show>, so will wrap the name in a span with a
|
333
|
+
hobo_model_id
|
334
|
+
|
335
|
+
<repeat> supports an 'else' attribute, used when the collection is
|
336
|
+
empty.
|
337
|
+
|
338
|
+
Debug methods abort_with and debug are now helpers so they are
|
339
|
+
available from views as well as controllers.
|
340
|
+
|
341
|
+
|
342
|
+
User Authentication
|
343
|
+
|
344
|
+
Username validations are customisable - pass a block to
|
345
|
+
set_login_attr and do validations in there. Otherwise default
|
346
|
+
validations are used.
|
347
|
+
|
348
|
+
|
349
|
+
Hobo::Controller
|
350
|
+
|
351
|
+
hobo_ajax_reponse will use @this if no page context is passed
|
352
|
+
|
353
|
+
|
354
|
+
Module defined tags
|
355
|
+
|
356
|
+
Can provide a predicate as a block, e.g. to have a different nav bar onced logged in.
|
357
|
+
|
358
|
+
def_tag :nav, (proc {logged_in?}) do ...
|
359
|
+
def_tag :nav do ...
|
360
|
+
|
361
|
+
The tag with no predicate will always take precedence if no
|
362
|
+
predicate is true. If the proc has a single parameter, it is
|
363
|
+
passed the options hash.
|
364
|
+
|
365
|
+
|
366
|
+
DRYML
|
367
|
+
|
368
|
+
Changes to taglib cache system.
|
369
|
+
|
370
|
+
A list of known HTML tags is defined in lib/hobo/static_tags. These
|
371
|
+
are available as an array by calling Hobo.static_tags. Any tags
|
372
|
+
parsed that are not in here are compiled as method calls. Thus the
|
373
|
+
order of tag definitions is no longer as critical, making it easier
|
374
|
+
to split large taglibs into multiple files. As a result, tag modules
|
375
|
+
no longer need to track defined tags in a module variable.
|
376
|
+
|
377
|
+
XML comments now passed through to the generated HTML.
|
378
|
+
|
379
|
+
<set_theme> tag to set current theme. Was previously a configuration
|
380
|
+
variable. This way it is easier to change or disable the theme.
|
381
|
+
|
382
|
+
New feature - inner tags
|
383
|
+
|
384
|
+
<def> now supports alias_current attribute, e.g.
|
385
|
+
|
386
|
+
<def tag="page" alias_current="theme_page">
|
387
|
+
|
388
|
+
This overrides the current <page> definition and makes the old one
|
389
|
+
available as <theme_page>
|
390
|
+
|
391
|
+
<tagbody> supports obj= and attr= at the same time, as with regular
|
392
|
+
tag calls
|
393
|
+
|
394
|
+
|
395
|
+
|
396
|
+
Hobo models
|
397
|
+
|
398
|
+
New type system. This is the extended type system that allows you to
|
399
|
+
say, e.g. `set_field_type :intro => :html`. Previously this was
|
400
|
+
returned as a symbol from MyModel.field_type(:intro). The new system
|
401
|
+
uses wrapper types (simple subclasses of String), and modified your
|
402
|
+
model to return these. e.g.
|
403
|
+
|
404
|
+
MyModel.find(:first).intro.class => Hobo::HtmlString
|
405
|
+
|
406
|
+
There are similar types for textile, markdown, passwords, and text
|
407
|
+
(the text type just denotes a longer string, and is used for the
|
408
|
+
'text' sql type).
|
409
|
+
|
410
|
+
|
411
|
+
Hobo model controller
|
412
|
+
|
413
|
+
`show_method` renamed to `show_action`
|
414
|
+
|
415
|
+
New class method `publish_collection`. Any `has_many` collections
|
416
|
+
are published automatically. This method allows custom collections,
|
417
|
+
i.e. model methods that return arrays, to be published also.
|
418
|
+
|
419
|
+
create action for an STI base-class controller can now be used to
|
420
|
+
create subclass instances by passing the 'type' parameter.
|
421
|
+
|
422
|
+
update action enhanced to allow a full Hobo ajax-reponse (i.e. part
|
423
|
+
updates) after in-place-edits.
|
424
|
+
|
425
|
+
Controllers can define a `find_for_show` method to provide a custom
|
426
|
+
instance finder, e.g. a chance to perform eager loading.
|
427
|
+
|
428
|
+
Association actions now check for permission to view the association
|
429
|
+
owner
|
430
|
+
|
431
|
+
|
432
|
+
Model Queries
|
433
|
+
|
434
|
+
<field>_is predicates now work with belongs_to associations.
|
435
|
+
|
436
|
+
|
437
|
+
Hobo Rapid
|
438
|
+
|
439
|
+
rapid.dryml split up into rapid.dryml, rapid_pages.dryml
|
440
|
+
rapid_editing.dryml and rapid_navigation.dryml
|
441
|
+
|
442
|
+
New set of tags for creating navigation bars.
|
443
|
+
|
444
|
+
<no_break> tag replaces spaces with in entire content.
|
445
|
+
|
446
|
+
<edit> tag customisation - for form fields (i.e. new records), will
|
447
|
+
delegate to one of:
|
448
|
+
|
449
|
+
has_many_field
|
450
|
+
belongs_to_field
|
451
|
+
|
452
|
+
string_field
|
453
|
+
textarea_field
|
454
|
+
password_field
|
455
|
+
html_field
|
456
|
+
|
457
|
+
boolean_field
|
458
|
+
|
459
|
+
date_field
|
460
|
+
datetime_field
|
461
|
+
|
462
|
+
integer_field
|
463
|
+
float_field
|
464
|
+
|
465
|
+
Redfine these to customise forms throughout the app.
|
466
|
+
|
467
|
+
Similarly, editor fields (i.e. ajax fields for existing records)
|
468
|
+
use:
|
469
|
+
|
470
|
+
has_many_editor
|
471
|
+
belongs_to_editor
|
472
|
+
|
473
|
+
string_editor
|
474
|
+
textarea_editor
|
475
|
+
password_editor
|
476
|
+
html_editor
|
477
|
+
|
478
|
+
boolean_editor
|
479
|
+
|
480
|
+
datetime_editor
|
481
|
+
date_editor
|
482
|
+
|
483
|
+
integer_editor
|
484
|
+
float_editor
|
485
|
+
|
486
|
+
Redefine these to customise ajax editors throughout the app.
|
487
|
+
|
488
|
+
Note has_many_field and has_many_editor are just placeholders,
|
489
|
+
they are not implemented.
|
490
|
+
|
491
|
+
<update_button> supports a params attribute, to send extra params
|
492
|
+
along with the HTTP PUT.
|
493
|
+
|
494
|
+
<delete_button> now supports part updates and use of
|
495
|
+
Hobo.removeButton together. (i.e. you can have the fade effect and
|
496
|
+
also have other parts updated)
|
497
|
+
|
498
|
+
<object_form> does not create a hidden field for the STI 'type' field.
|
499
|
+
|
500
|
+
|
501
|
+
New feature - Composite models
|
502
|
+
|
503
|
+
Experimental new feature - mapping tags
|
504
|
+
|
505
|
+
New feature - Predicate dispatch modules
|
506
|
+
|
507
|
+
|
508
|
+
=== Release 0.4.3 ===
|
509
|
+
|
510
|
+
Front-controller now filters parameter logging so that passwords are
|
511
|
+
not logged.
|
512
|
+
|
513
|
+
Check if a controller is a Hobo model-controller before installing
|
514
|
+
Hobo routes.
|
515
|
+
|
516
|
+
DRYML
|
517
|
+
|
518
|
+
Can now use obj= and attr= on the same tag, so you can e.g.
|
519
|
+
|
520
|
+
<edit obj="#@this" attr="name"/>
|
521
|
+
|
522
|
+
(The alternative, <edit obj="@this.name"> would not work as
|
523
|
+
<edit> needs this_field which would be nil)
|
524
|
+
|
525
|
+
Shorthand obj="page" for obj="#@this"
|
526
|
+
|
527
|
+
Various fixes and enhancements to the permission system. Things are somewhat
|
528
|
+
experimental and subject to change!
|
529
|
+
|
530
|
+
Core tags/helpers
|
531
|
+
|
532
|
+
`viewable` method filters a collection down to objects that are
|
533
|
+
viewable.
|
534
|
+
|
535
|
+
|
536
|
+
Hobo Rapid:
|
537
|
+
|
538
|
+
<new_in_collection_page> now includes belongs_to associations in the
|
539
|
+
form.
|
540
|
+
|
541
|
+
Cleanup of form field / editor tags
|
542
|
+
|
543
|
+
<ul_for> and <table_for> now skip non-viewable objects
|
544
|
+
|
545
|
+
Fix: even/odd cycle in table_for and ul_for was broken with nested lists/tables.
|
546
|
+
|
547
|
+
Page navigation enhanced to allow URL query parameters to be
|
548
|
+
maintained from page to page.
|
549
|
+
|
550
|
+
<show_collection_page> now only includes a "New Whatever" link if
|
551
|
+
the collection is a "simple" has_many collection (no conditions, not
|
552
|
+
:through)
|
553
|
+
|
554
|
+
<object_link> now has a view attribute to link to alternate views of
|
555
|
+
the object (see below: alternate show pages)
|
556
|
+
|
557
|
+
<object_table>
|
558
|
+
|
559
|
+
Now allows additional rows to be added by giving a tag-body.
|
560
|
+
|
561
|
+
skip_fields attribute to remove fields from the table
|
562
|
+
|
563
|
+
Better support for confirmation dialogues in <delete_button>
|
564
|
+
|
565
|
+
|
566
|
+
Tabla theme:
|
567
|
+
|
568
|
+
Increased width to 800px;
|
569
|
+
|
570
|
+
Small style enhancements
|
571
|
+
|
572
|
+
|
573
|
+
Hobo Module
|
574
|
+
|
575
|
+
Fix to dom_id for objects in an array that is not an AR association
|
576
|
+
(e.g. an array returned by find(:all))
|
577
|
+
|
578
|
+
|
579
|
+
Support for alternative "show" pages. E.g. to add a "profile" page to a User, add
|
580
|
+
|
581
|
+
show_method :profile
|
582
|
+
|
583
|
+
To the UsersController and create
|
584
|
+
app/views/people/profile.dryml. You also get a named route
|
585
|
+
"user_profile" (e.g. you can call user_profile_url(fred) )
|
586
|
+
|
587
|
+
(Using Hobo Rapid you can link to these with <object_link view="profile"/>)
|
588
|
+
|
589
|
+
Fix to template lookup for association pages (e.g. posts/12/comments
|
590
|
+
and posts/12/comments/new)
|
591
|
+
|
592
|
+
Support for permission class methods (experimental). If you can define
|
593
|
+
permission without access to the object state, you can now do so on
|
594
|
+
the class:
|
595
|
+
|
596
|
+
def self.viewable_by(viewer, field)
|
597
|
+
false
|
598
|
+
end
|
599
|
+
|
600
|
+
This helps Hobo in places where there is no object. e.g. in deciding
|
601
|
+
whether or not to present a "New Whatsit" link
|
602
|
+
|
603
|
+
Fix: pagination was broken on index pages with data-filters.
|
604
|
+
|
605
|
+
|
606
|
+
Hobo::ModelController
|
607
|
+
|
608
|
+
Enhanced to allow updating of date and datetime fields. Dates and
|
609
|
+
date-times can be provided either as strings (Hobo will use Chronic
|
610
|
+
for parsing if it's installed) or hashes with :year, :month, :day
|
611
|
+
etc. keys (as used by the select_date helper).
|
612
|
+
|
613
|
+
find_by_data_filter renamed to find_with_data_filter and now does a
|
614
|
+
non-filtered find if no filters were given in the request.
|
615
|
+
|
616
|
+
Added count_with_data_filter
|
617
|
+
|
618
|
+
Fixes to checking create permission when the post parameters
|
619
|
+
contains related sub-objects.
|
620
|
+
|
621
|
+
Access to the new page is forbidden if the current user does not
|
622
|
+
have create permission.
|
623
|
+
|
624
|
+
|
625
|
+
Hobo::Model
|
626
|
+
|
627
|
+
New model queries <field>_starts and <field>_ends
|
628
|
+
|
629
|
+
The <field>_is query will now use an "IS NULL" query if you pass
|
630
|
+
nil.
|
631
|
+
|
632
|
+
Added support for counts with queries, e.g:
|
633
|
+
|
634
|
+
User.count { name_starts 't' }
|
635
|
+
|
636
|
+
Calling `new` on a has_many association (e.g. post.comments.new) has
|
637
|
+
enhanced behaviour for new records (those not in the db). Hobo will
|
638
|
+
try to set up the reciprocal belongs_to association on the created
|
639
|
+
object. This is needed by the permission system when testing
|
640
|
+
can_create?
|
641
|
+
|
642
|
+
#reverse_reflection will attempt to find the reciprocal belongs_to
|
643
|
+
association from a has_many association.
|
644
|
+
|
645
|
+
|
646
|
+
Ajax mechanism
|
647
|
+
|
648
|
+
Fix when using multiple instances of the same part on the same page
|
649
|
+
(i.e. when a part_id attribute appears in a loop).
|
650
|
+
|
651
|
+
Fix when the this_field for the part context is an array index.
|
652
|
+
|
653
|
+
|
654
|
+
Chronic fix to handle dates like "11th Jan" (it can handle "Jan 11th"
|
655
|
+
and "11 Jan" but not "11th Jan")
|
656
|
+
|
657
|
+
|
658
|
+
New feature - Integration testing DSL. Adds an easy to use DSL for
|
659
|
+
integration tests.
|
660
|
+
|
661
|
+
Fix: search page in IE
|
662
|
+
|
663
|
+
|
664
|
+
|
665
|
+
=== Release 0.4.2 ===
|
666
|
+
|
667
|
+
Fix in permission system
|
668
|
+
|
669
|
+
|
670
|
+
|
671
|
+
=== Release 0.4.1 ===
|
672
|
+
|
673
|
+
New feature: "web-methods" -- RPC style actions in model-controllers. Including
|
674
|
+
support for ajax responses.
|
675
|
+
|
676
|
+
New named route "home" to FrontController#index
|
677
|
+
|
678
|
+
Hobo Rapid:
|
679
|
+
|
680
|
+
Renamed <object_small> to <object_card>
|
681
|
+
|
682
|
+
Added support for ajax responses to web-methods
|
683
|
+
|
684
|
+
Removed <possessive> (too app specific)
|
685
|
+
|
686
|
+
<object_link> now passes extra options to the generated <a> tag
|
687
|
+
(e.g. class, id)
|
688
|
+
|
689
|
+
Extra options to <edit> are now passed on to the delegate.
|
690
|
+
|
691
|
+
Naming of edit controls reworked. <editor> is an ajax editor,
|
692
|
+
<form_field> is a non-ajax form field, <edit> chooses automatically
|
693
|
+
between the two. Other tags renamed too -
|
694
|
+
e.g. <in_place_edit_for_boolean> renamed to
|
695
|
+
<boolean_checkbox_editor>
|
696
|
+
|
697
|
+
Support for datetime and date selects in form fields (not editors)
|
698
|
+
|
699
|
+
Added autosubmit option to autocompleters - submits the form as soon
|
700
|
+
as an option is selected.
|
701
|
+
|
702
|
+
Added confirm option to ajax_updater (wraps call in a JS confirm
|
703
|
+
dialogue)
|
704
|
+
|
705
|
+
More data types supported by <editor> (formerly in_place_edit)
|
706
|
+
|
707
|
+
New tag <belongs_to_editor>. Currently just delegates to
|
708
|
+
<belongs_to_menu_editor> but is intended to switch to an
|
709
|
+
autocompleter if there are too many options for a menu.
|
710
|
+
|
711
|
+
New css classes create_button, update_button, delete_button added to
|
712
|
+
button tags.
|
713
|
+
|
714
|
+
Image attribute for delete_button for <input type="image">
|
715
|
+
buttons. Needs implementing on the other buttons (or maybe we should
|
716
|
+
be using css styling only!)
|
717
|
+
|
718
|
+
New tag: <remote_method_button>
|
719
|
+
|
720
|
+
<object_form> updated to only add hidden tags for fields that don't
|
721
|
+
appear in the form.
|
722
|
+
|
723
|
+
hobo_rapid.js
|
724
|
+
|
725
|
+
Fix: in-place-edit controls were displaying the JavaScript source of
|
726
|
+
an alert message after a validation error.
|
727
|
+
|
728
|
+
Support for ajax responses to RPC actions.
|
729
|
+
|
730
|
+
Fix in Hobo.ajaxRequest when no `method` option was given.
|
731
|
+
|
732
|
+
Hobo.applyEvents can now be given an element or a DOM ID.
|
733
|
+
|
734
|
+
Hobo.removeButton: changed duration of Fade effect
|
735
|
+
|
736
|
+
Fix in objectElementFor
|
737
|
+
|
738
|
+
Re-enabled applyEvents in Hobo.updateElement
|
739
|
+
|
740
|
+
|
741
|
+
Tabla theme
|
742
|
+
|
743
|
+
Various CSS refinements
|
744
|
+
|
745
|
+
Added account_nav attribute to <page>
|
746
|
+
|
747
|
+
Added class attribute to page - applied to body tag
|
748
|
+
|
749
|
+
Disable account nav if no `login_url` route exists
|
750
|
+
|
751
|
+
|
752
|
+
hobo_user_model generator
|
753
|
+
|
754
|
+
Migration
|
755
|
+
|
756
|
+
Changed `login` column to `username`.
|
757
|
+
|
758
|
+
Changed to use Hobo migration syntax
|
759
|
+
|
760
|
+
Model: Uses new `set_login_attr`
|
761
|
+
|
762
|
+
|
763
|
+
Plugin initialiser (init.rb)
|
764
|
+
|
765
|
+
Fixed problem with ordering of requires
|
766
|
+
|
767
|
+
Eliminated code to load all models at startup (now done on demand in Hobo module)
|
768
|
+
This reduces the footprint of Hobo, e.g. for apps that want only DRYML.
|
769
|
+
|
770
|
+
|
771
|
+
ActiveRecord extensions
|
772
|
+
|
773
|
+
Added HasManyAssociation#new_without_appending. Creates a model with
|
774
|
+
the correct belongs_to association but doesn't add it to the
|
775
|
+
array. Needed for the permission system.
|
776
|
+
|
777
|
+
Added #member_class to HasManyAssociation and
|
778
|
+
HasManyThroughAssociation - convenience method for
|
779
|
+
proxy_reflection.klass
|
780
|
+
|
781
|
+
|
782
|
+
General Ruby extensions
|
783
|
+
|
784
|
+
Renamed is_in? to in? to conform with ruby-extensions project.
|
785
|
+
|
786
|
+
Added Module#inheriting_attr_accessor. Creates an attribute accessor
|
787
|
+
that looks in the superclass if the attribute does not exist on
|
788
|
+
self. Should be used on classes (e.g. inside class << self)
|
789
|
+
|
790
|
+
|
791
|
+
User Authentication
|
792
|
+
|
793
|
+
The user model can now override the class-method
|
794
|
+
`password_validations` to customise those.
|
795
|
+
|
796
|
+
Virtual fields `password` and `password_confirmation` now declared
|
797
|
+
with field type :password. Hobo Rapid will now generate
|
798
|
+
password-edit fields for these.
|
799
|
+
|
800
|
+
Column used for the user-name is now declared by the user-model
|
801
|
+
class, e.g.
|
802
|
+
|
803
|
+
class User; set_login_attr :email; end
|
804
|
+
|
805
|
+
Extracted acts_as_authenticated controller extensions into
|
806
|
+
Hobo::AuthenticationSupport (was in Hobo::Controller)
|
807
|
+
|
808
|
+
Hobo will manage a last_login_at datetime if such a column exists on
|
809
|
+
the user model.
|
810
|
+
|
811
|
+
|
812
|
+
Site-wide search
|
813
|
+
|
814
|
+
Added message when no results found
|
815
|
+
|
816
|
+
Remove objects from results that are not viewable by the current_user
|
817
|
+
|
818
|
+
|
819
|
+
Hobo Controller
|
820
|
+
|
821
|
+
Fix: render_tags - hoboParts JavaScript was rendered multiple times
|
822
|
+
|
823
|
+
Ajax mechanism updated to support RPC actions.
|
824
|
+
|
825
|
+
|
826
|
+
Core tags & DRYML helpers
|
827
|
+
|
828
|
+
Fix: per-request cache of current_user was not working
|
829
|
+
|
830
|
+
Fix: can_update? was broken
|
831
|
+
|
832
|
+
Fix: can_view_this? handles non-ActiveRecord objects better
|
833
|
+
|
834
|
+
can_view_this? delegates to can_view if this_parent or this_field
|
835
|
+
is null (previously an error).
|
836
|
+
|
837
|
+
Fix: tag_for_object was broken
|
838
|
+
|
839
|
+
<show> supports more field types
|
840
|
+
|
841
|
+
<repeat> now sets the model_id attribute on the repeated element.
|
842
|
+
|
843
|
+
new conditions <unless_blank>, <unless_empty>, <if_can_edit>
|
844
|
+
|
845
|
+
add_classes split into two methods, one that modifies the hash
|
846
|
+
(add_classes!) and one that generates a new one (add_classes)
|
847
|
+
|
848
|
+
Made the new object optional on can_update
|
849
|
+
|
850
|
+
Added a style attribute to <human_type> can be any string method,
|
851
|
+
e.g. pluralize, downcase etc.
|
852
|
+
|
853
|
+
|
854
|
+
DRYML
|
855
|
+
|
856
|
+
Form fields that appear within a DRYML form context are now tracked,
|
857
|
+
so that hidden fields can be automatically added for just those
|
858
|
+
fields that do not appear in the form.
|
859
|
+
|
860
|
+
Renamed instance variable to current context to @_this. Was clashing
|
861
|
+
with @this page context.
|
862
|
+
|
863
|
+
Fix: this_type was failing to default to this.class when using the
|
864
|
+
obj="" attribute
|
865
|
+
|
866
|
+
Renamed method _part_context_js to part_context_js
|
867
|
+
|
868
|
+
|
869
|
+
Model Extensions (hobo_model)
|
870
|
+
|
871
|
+
Renamed set_fields_types to set_field_type
|
872
|
+
|
873
|
+
Added set_search_columns declaration as a shorthand alternative to
|
874
|
+
defining class method search_columns. e.g.
|
875
|
+
|
876
|
+
class Foo < ActiveRecord::Base
|
877
|
+
hobo_model
|
878
|
+
set_search_columns :content, :notes
|
879
|
+
end
|
880
|
+
|
881
|
+
An id_name with the :underscore option no longer returns the name
|
882
|
+
with underscores by default. By default you get the name as it is in
|
883
|
+
the DB, if you call id_name(true) you get it with underscores
|
884
|
+
instead of spaces (e.g. for use in URLs).
|
885
|
+
|
886
|
+
Added Hobo::Model.set_default_order e.g.
|
887
|
+
|
888
|
+
class User < ActiveRecord::Base
|
889
|
+
set_default_order "name"
|
890
|
+
end
|
891
|
+
|
892
|
+
To use: User.find(:all, :order => :default). Default order is used
|
893
|
+
by the hobo_model_controller
|
894
|
+
|
895
|
+
Model Controller
|
896
|
+
|
897
|
+
Fix: show-collection action (e.g. post/12/comments) now uniquifies
|
898
|
+
the collection if the :uniq option was given on the has_many
|
899
|
+
declaration.
|
900
|
+
|
901
|
+
hobo_render now allows the template to be looked for in other
|
902
|
+
classes (e.g. in app/views/other_class)
|
903
|
+
|
904
|
+
Added web_method declaration for RPC-style actions. e.g.
|
905
|
+
|
906
|
+
class Users < ApplicationController
|
907
|
+
web_method :reset_password
|
908
|
+
def reset_password
|
909
|
+
new_pw = @this.reset_password
|
910
|
+
hobo_ajax_response(@this, :password => new_pw)
|
911
|
+
end
|
912
|
+
end
|
913
|
+
|
914
|
+
show action now calls permission_denied unless the current user can
|
915
|
+
view the object.
|
916
|
+
|
917
|
+
Added customisation hooks create_response, update_response,
|
918
|
+
destroy_response. And for invalid records: invalid_create_response,
|
919
|
+
and invalid_update_response. The default response will only happen
|
920
|
+
if these methods don't do a render or a redirect.
|
921
|
+
|
922
|
+
Added before filter to prepare for a web_method
|
923
|
+
|
924
|
+
Template lookup path changed for
|
925
|
+
collections. e.g. /posts/12/comments will now fallback on
|
926
|
+
app/vews/comments/show_in_collection and /posts/12/comments/12 will
|
927
|
+
fallback on app/views/comments/new_in_collection
|
928
|
+
|
929
|
+
index action respects the model's default_order
|
930
|
+
|
931
|
+
Model Queries
|
932
|
+
|
933
|
+
Renamed predicate in_association to is_in
|
934
|
+
|
935
|
+
Added predicate not_in
|
936
|
+
|
937
|
+
Added support for model-defined predicates. Any predicate not found
|
938
|
+
will be looked up on the model class.
|
939
|
+
|
940
|
+
Hobo module
|
941
|
+
|
942
|
+
Removed guest_user attribute
|
943
|
+
|
944
|
+
Hobo.models now loads all model classes on demand the first time it
|
945
|
+
is called.
|
946
|
+
|
947
|
+
Removed parentheses from query in find_by_search (SQLite
|
948
|
+
compatibility)
|
949
|
+
|
950
|
+
add_routes now adds routes for web methods
|
951
|
+
|
952
|
+
can_create? uses new_without_appending when passed a has_many
|
953
|
+
association to check if the user is allowed to create an object in
|
954
|
+
that collection.
|
955
|
+
|
956
|
+
can_edit? returns false for polymorphic associations (for now!)
|
957
|
+
|
958
|
+
can_view? can now handle AR classes (can view instances of this
|
959
|
+
class?) and associations (can view items in this association?)
|
960
|
+
|
961
|
+
Added can_call? permission method for web-methods
|
962
|
+
|
963
|
+
Added Rakefile with rdoc task
|