nested-resources 0.0.1 → 0.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/Gemfile +2 -0
- data/README.rdoc +25 -8
- data/lib/nested-resources/nested-resources.rb +8 -7
- data/lib/nested-resources.rb +13 -3
- metadata +2 -2
data/Gemfile
CHANGED
data/README.rdoc
CHANGED
@@ -2,20 +2,19 @@
|
|
2
2
|
|
3
3
|
Your app has routes like this.
|
4
4
|
|
5
|
-
|
6
|
-
resources :
|
7
|
-
resources :items
|
8
|
-
end
|
5
|
+
resources :users do
|
6
|
+
resources :items
|
9
7
|
end
|
10
8
|
|
11
9
|
In Items controller.
|
12
10
|
You can write controller like this.
|
13
11
|
|
14
|
-
class
|
12
|
+
class ItemsController < ApplicationController
|
15
13
|
nested_controller :user # nested resource
|
16
14
|
|
17
15
|
def index
|
18
|
-
@
|
16
|
+
@user = nested(User) # find nested resource instance
|
17
|
+
@domains = @user.domains
|
19
18
|
|
20
19
|
respond_to do |format|
|
21
20
|
format.html # index.html.erb
|
@@ -29,16 +28,34 @@ You can write controller like this.
|
|
29
28
|
|
30
29
|
In views.
|
31
30
|
|
32
|
-
<%= nested
|
31
|
+
<%= nested(item_path(@item)) %> # => "/users/1/item"
|
33
32
|
|
34
33
|
In form view.
|
35
34
|
|
36
|
-
<%= form_for(nested
|
35
|
+
<%= form_for(nested(@item)) do |f| %> => [@user, @item]
|
37
36
|
...
|
38
37
|
<% end %>
|
39
38
|
|
40
39
|
= Install
|
41
40
|
|
41
|
+
Add to Gemfile
|
42
|
+
|
43
|
+
gem 'nested-resources'
|
44
|
+
|
45
|
+
Run bundle install
|
46
|
+
|
47
|
+
bundle install
|
48
|
+
|
42
49
|
= TIPS
|
43
50
|
|
51
|
+
Has nested path?
|
52
|
+
|
53
|
+
nested? User
|
54
|
+
=> true or false
|
55
|
+
|
56
|
+
Deep nested resources like /users/1/items/2/comments
|
57
|
+
|
58
|
+
nested_resources [:user, :item]
|
59
|
+
|
60
|
+
|
44
61
|
This project rocks and uses MIT-LICENSE.
|
@@ -6,11 +6,12 @@ module NestedResources
|
|
6
6
|
attr_reader :controller
|
7
7
|
attr_reader :resources
|
8
8
|
|
9
|
-
def initialize(params,
|
9
|
+
def initialize(params, resources)
|
10
10
|
@controller = params[:controller].split('/').last
|
11
11
|
@given = {}
|
12
|
+
@given_id = {}
|
12
13
|
resources = [] if resources.blank?
|
13
|
-
resources = [resources]
|
14
|
+
resources = [resources] unless resources.is_a?(Array)
|
14
15
|
@resources = resources.map{|v|
|
15
16
|
v = v.to_s.underscore if v.is_a?(Class)
|
16
17
|
v.to_sym
|
@@ -18,7 +19,7 @@ module NestedResources
|
|
18
19
|
params.each { |k,v|
|
19
20
|
@resources.each{|resource|
|
20
21
|
key = (resource.to_s+"_id").to_sym
|
21
|
-
@
|
22
|
+
@given_id[resource]= v if key == k.to_sym
|
22
23
|
}
|
23
24
|
}
|
24
25
|
end
|
@@ -28,7 +29,7 @@ module NestedResources
|
|
28
29
|
if path==controller
|
29
30
|
respath=""
|
30
31
|
@resources.each { |resource|
|
31
|
-
respath += resource.to_s.pluralize+"/"+@
|
32
|
+
respath += resource.to_s.pluralize+"/"+@given_id[resource].to_s+"/" unless @given_id[resource].blank?
|
32
33
|
}
|
33
34
|
respath+path
|
34
35
|
else
|
@@ -43,7 +44,7 @@ module NestedResources
|
|
43
44
|
res.each_index { |i|
|
44
45
|
if i==res.length-1
|
45
46
|
@resources.each{ |resource|
|
46
|
-
result.push
|
47
|
+
result.push instance(resource) unless @given_id[resource].blank?
|
47
48
|
}
|
48
49
|
end
|
49
50
|
result.push res[i]
|
@@ -56,12 +57,12 @@ module NestedResources
|
|
56
57
|
|
57
58
|
def instance(name)
|
58
59
|
name = name.to_s.underscore if name.is_a?(Class)
|
59
|
-
@given[name.to_sym]
|
60
|
+
@given[name.to_sym] ||= eval(name.to_s.camelize).find(@given_id[name.to_sym])
|
60
61
|
end
|
61
62
|
|
62
63
|
def exists?(name)
|
63
64
|
name = name.to_s.underscore if name.is_a?(Class)
|
64
|
-
!!@
|
65
|
+
!!@given_id[name.to_sym]
|
65
66
|
end
|
66
67
|
|
67
68
|
end
|
data/lib/nested-resources.rb
CHANGED
@@ -4,8 +4,18 @@ require 'action_view'
|
|
4
4
|
module NestedResources
|
5
5
|
require 'nested-resources/nested-resources'
|
6
6
|
module NestedResourcesHelper
|
7
|
-
def nested
|
8
|
-
|
7
|
+
def nested(obj = nil)
|
8
|
+
if obj.is_a?(Class)
|
9
|
+
@nested.instance(obj)
|
10
|
+
elsif obj
|
11
|
+
@nested.path(obj)
|
12
|
+
else
|
13
|
+
@nested
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def nested?(obj)
|
18
|
+
@nested.exists?(obj)
|
9
19
|
end
|
10
20
|
end
|
11
21
|
end
|
@@ -15,7 +25,7 @@ module ActionView::Helpers
|
|
15
25
|
end
|
16
26
|
|
17
27
|
class ActionController::Base
|
18
|
-
|
28
|
+
include NestedResources::NestedResourcesHelper
|
19
29
|
before_filter :nested_resources_filter
|
20
30
|
|
21
31
|
def self.nested_resources(*resources)
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: nested-resources
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.2
|
6
6
|
platform: ruby
|
7
7
|
authors: []
|
8
8
|
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-05-
|
13
|
+
date: 2011-05-13 00:00:00 Z
|
14
14
|
dependencies: []
|
15
15
|
|
16
16
|
description: Resolve Rails3 nested resources.
|