hobo 1.0.1 → 1.0.2
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/CHANGES.txt +17 -0
- data/Rakefile +2 -2
- data/doctest/model.rdoctest +1 -0
- data/doctest/multi_model_forms.rdoctest +1 -0
- data/doctest/scopes.rdoctest +1 -0
- data/lib/hobo.rb +12 -3
- data/lib/hobo/accessible_associations.rb +5 -1
- data/lib/hobo/dryml/dryml_generator.rb +1 -1
- data/lib/hobo/lifecycles/lifecycle.rb +23 -32
- data/lib/hobo/model.rb +0 -1
- data/lib/hobo/model_controller.rb +2 -2
- data/lib/hobo/scopes/automatic_scopes.rb +1 -1
- data/lib/hobo/scopes/named_scope_extensions.rb +1 -1
- data/lib/hobo/view_hints.rb +5 -1
- data/taglibs/rapid_forms.dryml +15 -4
- data/taglibs/rapid_navigation.dryml +20 -1
- metadata +37 -11
data/CHANGES.txt
CHANGED
@@ -14,6 +14,23 @@ likely to cause conflicts, so it is highly recommended that you have
|
|
14
14
|
your code backed up and in a change control system such as git or
|
15
15
|
subversion.
|
16
16
|
|
17
|
+
=== Hobo 1.0.2 ===
|
18
|
+
|
19
|
+
This release is almost identical to 1.0.1 except that it updates the
|
20
|
+
version requirements to exclude Rails3. Hobo does not currently work
|
21
|
+
with Rails3, although we are working on it.
|
22
|
+
|
23
|
+
This release silences some warnings produced when running with Rails
|
24
|
+
2.3.10.
|
25
|
+
|
26
|
+
This release contains preliminary support for Ruby 1.9.2, although you
|
27
|
+
may encounter problems if you use Single Type Inheritance (STI)
|
28
|
+
models.
|
29
|
+
|
30
|
+
A few very minor bug fixes have also been included. See the [github
|
31
|
+
log](https://github.com/tablatom/hobo/compare/v1.0.1...v1.0.2) for
|
32
|
+
more details.
|
33
|
+
|
17
34
|
=== Hobo 1.0.1 ===
|
18
35
|
|
19
36
|
This version contains two speedups: one fix that reduces the number of
|
data/Rakefile
CHANGED
@@ -59,8 +59,8 @@ Jeweler::Tasks.new do |gemspec|
|
|
59
59
|
gemspec.executables = ['hobo']
|
60
60
|
gemspec.default_executable = 'hobo'
|
61
61
|
gemspec.rubyforge_project = "hobo"
|
62
|
-
gemspec.add_dependency("rails", [">= 2.2.2"])
|
63
|
-
gemspec.add_dependency("will_paginate", [">= 2.3.11"])
|
62
|
+
gemspec.add_dependency("rails", [">= 2.2.2", "< 3.0.0"])
|
63
|
+
gemspec.add_dependency("will_paginate", [">= 2.3.11", "~> 2"])
|
64
64
|
gemspec.add_dependency("hobosupport", ["= #{Hobo::VERSION}"])
|
65
65
|
gemspec.add_dependency("hobofields", ["= #{Hobo::VERSION}"])
|
66
66
|
gemspec.files.include %w(tasks/environments.rake tasks/hobo_tasks.rake)
|
data/doctest/model.rdoctest
CHANGED
@@ -34,6 +34,7 @@ Contents
|
|
34
34
|
>> $:.unshift File.join(File.expand_path(File.dirname(__FILE__)), '../../hobofields/lib')
|
35
35
|
>> $:.unshift File.join(File.expand_path(File.dirname(__FILE__)), '../../hobosupport/lib')
|
36
36
|
>> $:.unshift File.join(File.expand_path(File.dirname(__FILE__)), '../../hobo/lib')
|
37
|
+
>> gem 'will_paginate', '~> 2'
|
37
38
|
>> require 'will_paginate'
|
38
39
|
>> require 'will_paginate/finder'
|
39
40
|
>> require 'hobosupport'
|
@@ -31,6 +31,7 @@ Contents
|
|
31
31
|
>> $:.unshift File.join(File.expand_path(File.dirname(__FILE__)), '../../hobofields/lib')
|
32
32
|
>> $:.unshift File.join(File.expand_path(File.dirname(__FILE__)), '../../hobosupport/lib')
|
33
33
|
>> $:.unshift File.join(File.expand_path(File.dirname(__FILE__)), '../../hobo/lib')
|
34
|
+
>> gem 'will_paginate', '~> 2'
|
34
35
|
>> require 'will_paginate'
|
35
36
|
>> require 'will_paginate/finder'
|
36
37
|
>> require 'hobosupport'
|
data/doctest/scopes.rdoctest
CHANGED
data/lib/hobo.rb
CHANGED
@@ -2,12 +2,17 @@
|
|
2
2
|
require 'hobosupport'
|
3
3
|
require 'hobofields'
|
4
4
|
begin
|
5
|
+
gem 'will_paginate', '~> 2'
|
5
6
|
require 'will_paginate'
|
6
7
|
rescue MissingSourceFile
|
7
8
|
# OK, Hobo won't do pagination then
|
8
9
|
end
|
9
10
|
|
10
|
-
ActiveSupport::Dependencies.
|
11
|
+
if ActiveSupport::Dependencies.respond_to?(:autoload_paths)
|
12
|
+
ActiveSupport::Dependencies.autoload_paths |= [ File.dirname(__FILE__)]
|
13
|
+
else
|
14
|
+
ActiveSupport::Dependencies.load_paths |= [ File.dirname(__FILE__)]
|
15
|
+
end
|
11
16
|
|
12
17
|
# Hobo can be installed in /vendor/hobo, /vendor/plugins/hobo, vendor/plugins/hobo/hobo, etc.
|
13
18
|
::HOBO_ROOT = File.expand_path(File.dirname(__FILE__) + "/..")
|
@@ -16,7 +21,7 @@ class HoboError < RuntimeError; end
|
|
16
21
|
|
17
22
|
module Hobo
|
18
23
|
|
19
|
-
VERSION = "1.0.
|
24
|
+
VERSION = "1.0.2"
|
20
25
|
|
21
26
|
class PermissionDeniedError < RuntimeError; end
|
22
27
|
|
@@ -161,7 +166,11 @@ module Hobo
|
|
161
166
|
|
162
167
|
HoboFields.never_wrap(Hobo::Undefined) if defined? HoboFields
|
163
168
|
|
164
|
-
ActiveSupport::Dependencies.
|
169
|
+
if ActiveSupport::Dependencies.respond_to?(:autoload_paths)
|
170
|
+
ActiveSupport::Dependencies.autoload_paths |= [ "#{RAILS_ROOT}/app/viewhints" ]
|
171
|
+
else
|
172
|
+
ActiveSupport::Dependencies.load_paths |= [ "#{RAILS_ROOT}/app/viewhints" ]
|
173
|
+
end
|
165
174
|
end
|
166
175
|
|
167
176
|
end
|
@@ -9,7 +9,11 @@ module Hobo
|
|
9
9
|
|
10
10
|
array = params_hash_to_array(array_or_hash)
|
11
11
|
array.map! do |record_hash_or_string|
|
12
|
-
|
12
|
+
if association.conditions.nil?
|
13
|
+
finder = association.member_class
|
14
|
+
else
|
15
|
+
finder = association.member_class.scoped :conditions => association.conditions
|
16
|
+
end
|
13
17
|
find_or_create_and_update(owner, association_name, finder, record_hash_or_string) do |id|
|
14
18
|
# The block is required to either locate find an existing record in the collection, or build a new one
|
15
19
|
if id
|
@@ -24,45 +24,36 @@ module Hobo
|
|
24
24
|
|
25
25
|
def self.def_state(name, on_enter)
|
26
26
|
name = name.to_sym
|
27
|
-
|
28
|
-
|
29
|
-
class_eval "def #{name}_state?; state_name == :#{name} end"
|
30
|
-
end
|
27
|
+
class_eval "def #{name}_state?; state_name == :#{name} end"
|
28
|
+
states[name] = Lifecycles::State.new(name, on_enter)
|
31
29
|
end
|
32
30
|
|
33
31
|
|
34
32
|
def self.def_creator(name, on_create, options)
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
end
|
45
|
-
}
|
46
|
-
|
47
|
-
end
|
33
|
+
class_eval %{
|
34
|
+
def self.#{name}(user, attributes=nil)
|
35
|
+
create(:#{name}, user, attributes)
|
36
|
+
end
|
37
|
+
def self.can_#{name}?(user, attributes=nil)
|
38
|
+
can_create?(:#{name}, user)
|
39
|
+
end
|
40
|
+
}
|
41
|
+
Creator.new(self, name.to_s, on_create, options)
|
48
42
|
end
|
49
43
|
|
50
44
|
def self.def_transition(name, start_state, end_states, on_transition, options)
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
}
|
64
|
-
|
65
|
-
end
|
45
|
+
class_eval %{
|
46
|
+
def #{name}!(user, attributes=nil)
|
47
|
+
transition(:#{name}, user, attributes)
|
48
|
+
end
|
49
|
+
def can_#{name}?(user, attributes=nil)
|
50
|
+
can_transition?(:#{name}, user)
|
51
|
+
end
|
52
|
+
def valid_for_#{name}?
|
53
|
+
valid_for_transition?(:#{name})
|
54
|
+
end
|
55
|
+
}
|
56
|
+
Transition.new(self, name.to_s, start_state, end_states, on_transition, options)
|
66
57
|
end
|
67
58
|
|
68
59
|
def self.state_names
|
data/lib/hobo/model.rb
CHANGED
@@ -57,7 +57,6 @@ module Hobo
|
|
57
57
|
|
58
58
|
WillPaginate::Finder::ClassMethods.class_eval do
|
59
59
|
def paginate_with_hobo_metadata(*args, &block)
|
60
|
-
# using 'returning' here triggers a full load
|
61
60
|
collection = paginate_without_hobo_metadata(*args, &block)
|
62
61
|
collection.member_class = self
|
63
62
|
collection.origin = try.proxy_owner
|
@@ -564,7 +564,7 @@ module Hobo
|
|
564
564
|
|
565
565
|
|
566
566
|
def create_response(new_action, options={}, &b)
|
567
|
-
flash_notice (ht( :"#{@this.class.name.pluralize.underscore}.messages.create.success", :default=>["The #{@this.class.
|
567
|
+
flash_notice (ht( :"#{@this.class.name.pluralize.underscore}.messages.create.success", :default=>["The #{@this.class.view_hints.model_name.downcase} was created successfully"])) if valid?
|
568
568
|
|
569
569
|
response_block(&b) or
|
570
570
|
if valid?
|
@@ -602,7 +602,7 @@ module Hobo
|
|
602
602
|
|
603
603
|
def update_response(in_place_edit_field=nil, options={}, &b)
|
604
604
|
|
605
|
-
flash_notice (ht(:"#{@this.class.name.pluralize.underscore}.messages.update.success", :default=>["Changes to the #{@this.class.
|
605
|
+
flash_notice (ht(:"#{@this.class.name.pluralize.underscore}.messages.update.success", :default=>["Changes to the #{@this.class.view_hints.model_name.downcase} were saved"])) if valid?
|
606
606
|
|
607
607
|
response_block(&b) or
|
608
608
|
if valid?
|
@@ -255,7 +255,7 @@ module Hobo
|
|
255
255
|
type = klass.attr_type(field)
|
256
256
|
if type.nil? #a virtual attribute from an SQL alias, e.g., 'total' from 'COUNT(*) AS total'
|
257
257
|
colspec = "#{field}" # don't prepend the table name
|
258
|
-
elsif type.respond_to?(:
|
258
|
+
elsif type.respond_to?(:name_attribute) && (name = type.name_attribute)
|
259
259
|
include = field
|
260
260
|
colspec = "#{type.table_name}.#{name}"
|
261
261
|
else
|
data/lib/hobo/view_hints.rb
CHANGED
@@ -3,7 +3,11 @@ module Hobo
|
|
3
3
|
class ViewHints
|
4
4
|
|
5
5
|
def self.enable
|
6
|
-
ActiveSupport::Dependencies.
|
6
|
+
if ActiveSupport::Dependencies.respond_to?(:autoload_paths)
|
7
|
+
ActiveSupport::Dependencies.autoload_paths |= [ "#{RAILS_ROOT}/app/viewhints" ]
|
8
|
+
else
|
9
|
+
ActiveSupport::Dependencies.load_paths |= [ "#{RAILS_ROOT}/app/viewhints" ]
|
10
|
+
end
|
7
11
|
end
|
8
12
|
|
9
13
|
def self.setter(name, default=nil, &block)
|
data/taglibs/rapid_forms.dryml
CHANGED
@@ -102,8 +102,6 @@ AJAX based submission can be enabled by simply adding an `update` attribute. e.g
|
|
102
102
|
<div part="comments"><collection:comments/></div>
|
103
103
|
<form with="&Comment.new" update="comments"/>
|
104
104
|
|
105
|
-
`<form>` support all of the standard ajax attributes.
|
106
|
-
|
107
105
|
### Additional Notes
|
108
106
|
|
109
107
|
- Hobo automatically inserts an `auth_token` hidden field if forgery protection is enabled
|
@@ -112,6 +110,19 @@ AJAX based submission can be enabled by simply adding an `update` attribute. e.g
|
|
112
110
|
validation error occurs.
|
113
111
|
|
114
112
|
- `<form>` supports all of the standrd ajax attributes - (see the main taglib docs for Rapid Forms)
|
113
|
+
|
114
|
+
- `<form>` resets `last_if` if it does not have permission to display the form. The `<else>` clause may be used to display alternate content. For example:
|
115
|
+
|
116
|
+
<form>...</form>
|
117
|
+
<else>You do not have permission to edit this form</else>
|
118
|
+
|
119
|
+
or on a standard generated page using a default form:
|
120
|
+
|
121
|
+
<some-page>
|
122
|
+
<after-form:>
|
123
|
+
<else>You do not have permission to edit this form</else>
|
124
|
+
</after-form:>
|
125
|
+
</some-page>
|
115
126
|
|
116
127
|
### Attributes
|
117
128
|
|
@@ -992,8 +1003,8 @@ end
|
|
992
1003
|
<input type="hidden" class="empty-input" id="#{param_name_for_this}" name="#{param_name_for_this}" value="" disabled="&(!this.empty? || minimum>0)" />
|
993
1004
|
<fake-field-context fake-field="-1" context="&template">
|
994
1005
|
<div param="empty-message">
|
995
|
-
<ht key="#{this.class.
|
996
|
-
No <%= this.class.
|
1006
|
+
<ht key="#{this.class.name.tableize}.collection.empty_message">
|
1007
|
+
No <%= this.class.name.titleize.downcase.pluralize %>.
|
997
1008
|
</ht>
|
998
1009
|
</div>
|
999
1010
|
<div class="buttons">
|
@@ -36,7 +36,26 @@ Then in your pages you can call the tag like this
|
|
36
36
|
</def>
|
37
37
|
|
38
38
|
|
39
|
-
<!-- Renders a single item in a `<navigation>`
|
39
|
+
<!-- Renders a single item in a [`<navigation>`](/api_tag_defs/navigation).
|
40
|
+
|
41
|
+
`<nav-item>` is basically an [`<a>`](/api_tag_defs/a) tag wrapped in an `<li>` tag. The attributes for [`<a>`](/api_tag_defs/a) may all be used on this tag, and work the same way.
|
42
|
+
|
43
|
+
Example 1: explicit links. Note that we're using explicit routes for clarity. Named routes are better.
|
44
|
+
|
45
|
+
<navigation current="home">
|
46
|
+
<nav-item href="/">Home</nav-item>
|
47
|
+
<nav-item href="/logout">Logout</nav-item>
|
48
|
+
</navigation>
|
49
|
+
|
50
|
+
Example 2: navigation based on a collection of items. Each item will be transformed into a link as described in [`<a>`](/api_tag_defs/a).
|
51
|
+
|
52
|
+
<navigation with="&links">
|
53
|
+
<repeat>
|
54
|
+
<nav-item/>
|
55
|
+
</repeat>
|
56
|
+
</navigation>
|
57
|
+
|
58
|
+
-->
|
40
59
|
<def tag="nav-item" attrs="name">
|
41
60
|
<% body = parameters.default
|
42
61
|
body = h(this.to_s) if body.blank?
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hobo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 19
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 1
|
7
8
|
- 0
|
8
|
-
-
|
9
|
-
version: 1.0.
|
9
|
+
- 2
|
10
|
+
version: 1.0.2
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Tom Locke
|
@@ -14,63 +15,85 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2010-
|
18
|
+
date: 2010-11-12 00:00:00 -05:00
|
18
19
|
default_executable: hobo
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: rails
|
22
23
|
prerelease: false
|
23
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
24
26
|
requirements:
|
25
27
|
- - ">="
|
26
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
27
30
|
segments:
|
28
31
|
- 2
|
29
32
|
- 2
|
30
33
|
- 2
|
31
34
|
version: 2.2.2
|
35
|
+
- - <
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
hash: 7
|
38
|
+
segments:
|
39
|
+
- 3
|
40
|
+
- 0
|
41
|
+
- 0
|
42
|
+
version: 3.0.0
|
32
43
|
type: :runtime
|
33
44
|
version_requirements: *id001
|
34
45
|
- !ruby/object:Gem::Dependency
|
35
46
|
name: will_paginate
|
36
47
|
prerelease: false
|
37
48
|
requirement: &id002 !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
38
50
|
requirements:
|
39
51
|
- - ">="
|
40
52
|
- !ruby/object:Gem::Version
|
53
|
+
hash: 21
|
41
54
|
segments:
|
42
55
|
- 2
|
43
56
|
- 3
|
44
57
|
- 11
|
45
58
|
version: 2.3.11
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
hash: 7
|
62
|
+
segments:
|
63
|
+
- 2
|
64
|
+
version: "2"
|
46
65
|
type: :runtime
|
47
66
|
version_requirements: *id002
|
48
67
|
- !ruby/object:Gem::Dependency
|
49
68
|
name: hobosupport
|
50
69
|
prerelease: false
|
51
70
|
requirement: &id003 !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
52
72
|
requirements:
|
53
73
|
- - "="
|
54
74
|
- !ruby/object:Gem::Version
|
75
|
+
hash: 19
|
55
76
|
segments:
|
56
77
|
- 1
|
57
78
|
- 0
|
58
|
-
-
|
59
|
-
version: 1.0.
|
79
|
+
- 2
|
80
|
+
version: 1.0.2
|
60
81
|
type: :runtime
|
61
82
|
version_requirements: *id003
|
62
83
|
- !ruby/object:Gem::Dependency
|
63
84
|
name: hobofields
|
64
85
|
prerelease: false
|
65
86
|
requirement: &id004 !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
66
88
|
requirements:
|
67
89
|
- - "="
|
68
90
|
- !ruby/object:Gem::Version
|
91
|
+
hash: 19
|
69
92
|
segments:
|
70
93
|
- 1
|
71
94
|
- 0
|
72
|
-
-
|
73
|
-
version: 1.0.
|
95
|
+
- 2
|
96
|
+
version: 1.0.2
|
74
97
|
type: :runtime
|
75
98
|
version_requirements: *id004
|
76
99
|
description:
|
@@ -79,9 +102,8 @@ executables:
|
|
79
102
|
- hobo
|
80
103
|
extensions: []
|
81
104
|
|
82
|
-
extra_rdoc_files:
|
83
|
-
|
84
|
-
- README
|
105
|
+
extra_rdoc_files: []
|
106
|
+
|
85
107
|
files:
|
86
108
|
- CHANGES.txt
|
87
109
|
- LICENSE.txt
|
@@ -270,23 +292,27 @@ rdoc_options:
|
|
270
292
|
require_paths:
|
271
293
|
- lib
|
272
294
|
required_ruby_version: !ruby/object:Gem::Requirement
|
295
|
+
none: false
|
273
296
|
requirements:
|
274
297
|
- - ">="
|
275
298
|
- !ruby/object:Gem::Version
|
299
|
+
hash: 3
|
276
300
|
segments:
|
277
301
|
- 0
|
278
302
|
version: "0"
|
279
303
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
304
|
+
none: false
|
280
305
|
requirements:
|
281
306
|
- - ">="
|
282
307
|
- !ruby/object:Gem::Version
|
308
|
+
hash: 3
|
283
309
|
segments:
|
284
310
|
- 0
|
285
311
|
version: "0"
|
286
312
|
requirements: []
|
287
313
|
|
288
314
|
rubyforge_project: hobo
|
289
|
-
rubygems_version: 1.3.
|
315
|
+
rubygems_version: 1.3.7
|
290
316
|
signing_key:
|
291
317
|
specification_version: 3
|
292
318
|
summary: The web app builder for Rails
|