super_resources 1.0.0.rc2 → 1.0.0.rc3
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/lib/super_resources/nesting.rb +8 -11
- data/lib/super_resources/resources.rb +14 -1
- data/lib/super_resources/routing.rb +8 -4
- data/lib/super_resources/support/draper.rb +23 -0
- data/lib/super_resources/url_helpers.rb +40 -38
- data/lib/super_resources/version.rb +1 -1
- data/lib/super_resources.rb +2 -1
- metadata +3 -2
@@ -15,17 +15,6 @@ module SuperResources
|
|
15
15
|
|
16
16
|
protected
|
17
17
|
|
18
|
-
def method_missing(m, *args, &block)
|
19
|
-
case
|
20
|
-
when m == resource_params_name
|
21
|
-
resource
|
22
|
-
when i = symbols_for_association_chain.index(m)
|
23
|
-
association_chain[i]
|
24
|
-
else
|
25
|
-
super
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
18
|
def collection
|
30
19
|
memoize_collection { end_of_association_chain }
|
31
20
|
end
|
@@ -77,5 +66,13 @@ module SuperResources
|
|
77
66
|
def with_chain(object)
|
78
67
|
association_chain + [ object ]
|
79
68
|
end
|
69
|
+
|
70
|
+
def method_missing(method, *args, &block)
|
71
|
+
if index = symbols_for_association_chain.index(method)
|
72
|
+
association_chain[index]
|
73
|
+
else
|
74
|
+
super
|
75
|
+
end
|
76
|
+
end
|
80
77
|
end
|
81
78
|
end
|
@@ -3,7 +3,8 @@ module SuperResources
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
included do
|
6
|
-
helper_method :collection, :
|
6
|
+
helper_method :collection, :collection?, :resource, :resource?,
|
7
|
+
:resource_class, :parent, :nested?
|
7
8
|
end
|
8
9
|
|
9
10
|
protected
|
@@ -32,6 +33,10 @@ module SuperResources
|
|
32
33
|
@collection ||= block.call
|
33
34
|
end
|
34
35
|
|
36
|
+
def collection?
|
37
|
+
not resource?
|
38
|
+
end
|
39
|
+
|
35
40
|
def resource
|
36
41
|
memoize_resource { resource_class.send(finder_method, params[:id]) }
|
37
42
|
end
|
@@ -40,6 +45,10 @@ module SuperResources
|
|
40
45
|
@resource ||= block.call
|
41
46
|
end
|
42
47
|
|
48
|
+
def resource?
|
49
|
+
params[:id].present?
|
50
|
+
end
|
51
|
+
|
43
52
|
def finder_method
|
44
53
|
:find
|
45
54
|
end
|
@@ -71,5 +80,9 @@ module SuperResources
|
|
71
80
|
def destroy_resource
|
72
81
|
resource.destroy
|
73
82
|
end
|
83
|
+
|
84
|
+
def method_missing(method, *args, &block)
|
85
|
+
method == resource_instance_name ? resource : super
|
86
|
+
end
|
74
87
|
end
|
75
88
|
end
|
@@ -8,6 +8,10 @@ module SuperResources
|
|
8
8
|
Rails.application.routes || request.env['action_dispatch.routes']
|
9
9
|
end
|
10
10
|
|
11
|
+
def named_routes
|
12
|
+
routes.named_routes
|
13
|
+
end
|
14
|
+
|
11
15
|
def router
|
12
16
|
routes.router
|
13
17
|
end
|
@@ -16,6 +20,10 @@ module SuperResources
|
|
16
20
|
@route ||= recognize_route(request.path.present? ? request : mock_request)
|
17
21
|
end
|
18
22
|
|
23
|
+
def path_parameters
|
24
|
+
request.env['action_dispatch.request.path_parameters'].symbolize_keys
|
25
|
+
end
|
26
|
+
|
19
27
|
private
|
20
28
|
|
21
29
|
def recognize_route(request)
|
@@ -24,10 +32,6 @@ module SuperResources
|
|
24
32
|
end
|
25
33
|
end
|
26
34
|
|
27
|
-
def path_parameters
|
28
|
-
request.env['action_dispatch.request.path_parameters'].symbolize_keys
|
29
|
-
end
|
30
|
-
|
31
35
|
def mock_request
|
32
36
|
# used when there's no path in +request+. only seems to happen when
|
33
37
|
# testing controller actions
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module SuperResources
|
2
|
+
module Draper
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
protected
|
6
|
+
|
7
|
+
def decorator_class
|
8
|
+
resource_class.decorator_class
|
9
|
+
end
|
10
|
+
|
11
|
+
def resource
|
12
|
+
memoize_resource { decorator_class.decorate(super) }
|
13
|
+
end
|
14
|
+
|
15
|
+
def collection
|
16
|
+
memoize_collection { decorator_class.decorate_collection(super) }
|
17
|
+
end
|
18
|
+
|
19
|
+
def build_resource
|
20
|
+
memoize_resource { decorator_class.decorate(super) }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -3,59 +3,61 @@ module SuperResources
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
included do
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
helpers = %w(collection resource new_resource edit_resource)
|
7
|
+
|
8
|
+
helpers.each do |helper|
|
9
|
+
class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
|
10
|
+
def #{helper}_path(*args)
|
11
|
+
url_for(hash_for_#{helper}_path(*args))
|
12
|
+
end
|
13
|
+
|
14
|
+
def #{helper}_url(*args)
|
15
|
+
url_for(hash_for_#{helper}_url(*args))
|
16
|
+
end
|
17
|
+
|
18
|
+
def hash_for_#{helper}_path(*args)
|
19
|
+
hash_for_#{helper}_url(*args).merge(:only_path => true)
|
20
|
+
end
|
21
|
+
RUBY_EVAL
|
22
|
+
end
|
9
23
|
|
10
|
-
|
24
|
+
helper_methods = helpers.map do |helper|
|
25
|
+
[ :"#{helper}_path", :"hash_for_#{helper}_path",
|
26
|
+
:"#{helper}_url", :"hash_for_#{helper}_url" ]
|
27
|
+
end
|
11
28
|
|
12
|
-
|
13
|
-
symbols_for_association_chain + [resource_instance_name]
|
29
|
+
helper_method(*(helper_methods.flatten))
|
14
30
|
end
|
15
31
|
|
16
|
-
|
17
|
-
chain = symbols_for_association_chain + [resource_collection_name]
|
18
|
-
:"#{chain.join('_')}_url"
|
19
|
-
end
|
32
|
+
protected
|
20
33
|
|
21
|
-
|
22
|
-
:"#{full_association_chain_symbols.join('_')}_url"
|
23
|
-
end
|
34
|
+
# core stuff ..............................................................
|
24
35
|
|
25
|
-
def
|
26
|
-
:
|
36
|
+
def route_hash
|
37
|
+
path_parameters.except(:id, :action)
|
27
38
|
end
|
28
39
|
|
29
|
-
|
30
|
-
:"edit_#{resource_route}"
|
31
|
-
end
|
40
|
+
# route helpers ...........................................................
|
32
41
|
|
33
|
-
def
|
34
|
-
|
42
|
+
def hash_for_collection_url(options={})
|
43
|
+
route_hash.merge(options).merge(:action => 'index')
|
35
44
|
end
|
36
45
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
send(resource_route, *(association_chain + [object]))
|
42
|
-
else
|
43
|
-
collection_url # probably a new action
|
44
|
-
end
|
46
|
+
def hash_for_resource_url(*args)
|
47
|
+
options = args.extract_options!
|
48
|
+
route_hash.merge(options)
|
49
|
+
.merge(:action => 'show', :id => args.first || resource)
|
45
50
|
end
|
46
51
|
|
47
|
-
|
48
|
-
|
49
|
-
def new_resource_url
|
50
|
-
send(new_resource_route, *association_chain)
|
52
|
+
def hash_for_new_resource_url(options={})
|
53
|
+
route_hash.merge(options).merge(:action => 'new')
|
51
54
|
end
|
52
55
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
56
|
+
def hash_for_edit_resource_url(*args)
|
57
|
+
options = args.extract_options!
|
58
|
+
route_hash.merge(options)
|
59
|
+
.merge(:action => 'edit', :id => args.first || resource)
|
57
60
|
end
|
58
|
-
|
59
|
-
alias_method :edit_resource_path, :edit_resource_url
|
60
61
|
end
|
62
|
+
|
61
63
|
end
|
data/lib/super_resources.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: super_resources
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.rc3
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-03-07 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: railties
|
@@ -51,6 +51,7 @@ files:
|
|
51
51
|
- lib/super_resources/resources.rb
|
52
52
|
- lib/super_resources/routing.rb
|
53
53
|
- lib/super_resources/support/cancan.rb
|
54
|
+
- lib/super_resources/support/draper.rb
|
54
55
|
- lib/super_resources/support/has_scope.rb
|
55
56
|
- lib/super_resources/url_helpers.rb
|
56
57
|
- lib/super_resources/version.rb
|