site_map 0.2.5 → 0.2.6
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/site_map/helpers/mapping.rb +25 -13
- data/lib/site_map/version.rb +1 -1
- data/lib/site_map/view_node.rb +68 -8
- metadata +1 -1
@@ -3,6 +3,13 @@ module SiteMap
|
|
3
3
|
|
4
4
|
module Mapping
|
5
5
|
|
6
|
+
DEFAULT_ALIAS = {
|
7
|
+
:index => [:new, :create],
|
8
|
+
:new => [:create],
|
9
|
+
:show => [:edit, :update, :destroy],
|
10
|
+
:edit => [:update]
|
11
|
+
}
|
12
|
+
|
6
13
|
def group(new_index, options={})
|
7
14
|
view_node = self.add_node(new_index, :group, options)
|
8
15
|
yield view_node if block_given?
|
@@ -19,23 +26,28 @@ module SiteMap
|
|
19
26
|
end
|
20
27
|
|
21
28
|
def collection(resource, options={})
|
22
|
-
|
23
|
-
new_index = base_index.gsub(':action', 'index').to_sym
|
24
|
-
view_node = self.add_node(new_index, :view, options)
|
25
|
-
[:new, :create].each do |action|
|
26
|
-
action_index = base_index.gsub(':action', action.to_s).to_sym
|
27
|
-
view_node.alias(action_index, new_index)
|
28
|
-
end
|
29
|
+
view_node = self.collection_view(resource, :index, options)
|
29
30
|
yield view_node if block_given?
|
30
31
|
end
|
32
|
+
def collection_view(resource, action, options={})
|
33
|
+
options.merge!({:resource => resource.to_sym, :action => action.to_sym})
|
34
|
+
view_node = self.add_node([resource, action].join('__').to_sym, :collection, options)
|
35
|
+
DEFAULT_ALIAS[action].each do |action|
|
36
|
+
view_node.alias([resource, action].join('__').to_sym, view_node.index)
|
37
|
+
end
|
38
|
+
block_given? ? (yield view_node) : view_node
|
39
|
+
end
|
31
40
|
def member(resource, options={})
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
41
|
+
view_node = self.member_view(resource, :show, options)
|
42
|
+
yield view_node if block_given?
|
43
|
+
end
|
44
|
+
def member_view(resource, action, options={})
|
45
|
+
options.merge!({:resource => resource.to_sym, :action => action.to_sym})
|
46
|
+
view_node = self.add_node([resource, action].join('__').to_sym, :member, options)
|
47
|
+
DEFAULT_ALIAS[action].each do |action|
|
48
|
+
view_node.alias([resource, action].join('__').to_sym, view_node.index)
|
38
49
|
end
|
50
|
+
block_given? ? (yield view_node) : view_node
|
39
51
|
end
|
40
52
|
|
41
53
|
protected
|
data/lib/site_map/version.rb
CHANGED
data/lib/site_map/view_node.rb
CHANGED
@@ -3,10 +3,22 @@ module SiteMap
|
|
3
3
|
|
4
4
|
class ViewNode
|
5
5
|
include SiteMap::Helpers::Mapping
|
6
|
-
ATTRIBUTES = [ :map, :index, :label, :url, :visible, :parent, :type ]
|
6
|
+
ATTRIBUTES = [ :map, :index, :label, :url, :visible, :resource, :parent, :type ]
|
7
7
|
ATTRIBUTES.each{|attribute| attr_reader attribute }
|
8
8
|
|
9
|
-
TYPES = [ :view, :group ]
|
9
|
+
TYPES = [ :view, :group, :member, :collection ]
|
10
|
+
LABEL_ACTION_TEMPLATES = {
|
11
|
+
:index => ":resource List",
|
12
|
+
:new => "New :resource",
|
13
|
+
:show => "::resource_name",
|
14
|
+
:edit => "Edit ::resource_name"
|
15
|
+
}
|
16
|
+
URL_ACTION_TEMPLATES = {
|
17
|
+
:index => ":resource_path",
|
18
|
+
:new => "new_:resource_path",
|
19
|
+
:show => ":resource_path(@:resource)",
|
20
|
+
:edit => "edit_:resource_path(@:resource)"
|
21
|
+
}
|
10
22
|
|
11
23
|
def initialize(index, map, type, options={})
|
12
24
|
raise(ArgumentError, "index, map and type arguements required") unless index && map && type
|
@@ -24,14 +36,10 @@ module SiteMap
|
|
24
36
|
end
|
25
37
|
|
26
38
|
def label
|
27
|
-
@label ? @label :
|
39
|
+
@label ? @label : self.default_label
|
28
40
|
end
|
29
41
|
def url
|
30
|
-
|
31
|
-
self.children.empty? ? @url : self.children.first.url
|
32
|
-
else
|
33
|
-
@url
|
34
|
-
end
|
42
|
+
@url ? @url : self.default_url
|
35
43
|
end
|
36
44
|
def visible
|
37
45
|
@visible ? @visible : 'true'
|
@@ -75,6 +83,58 @@ module SiteMap
|
|
75
83
|
|
76
84
|
protected
|
77
85
|
|
86
|
+
def default_label
|
87
|
+
case(@type)
|
88
|
+
when :group
|
89
|
+
self.title_string(@index)
|
90
|
+
when :collection
|
91
|
+
self.resource_label((@action == :new ? self.single_string : self.title_string))
|
92
|
+
when :member
|
93
|
+
self.resource_label(self.single_string)
|
94
|
+
else
|
95
|
+
@index.to_s
|
96
|
+
end
|
97
|
+
end
|
98
|
+
def default_url
|
99
|
+
case(@type)
|
100
|
+
when :group
|
101
|
+
self.children.empty? ? @url : self.children.first.url
|
102
|
+
when :collection
|
103
|
+
self.resource_url
|
104
|
+
when :member
|
105
|
+
self.resource_url
|
106
|
+
else
|
107
|
+
@url
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def resource_label(resource_text)
|
112
|
+
LABEL_ACTION_TEMPLATES[@action].gsub(':resource', resource_text)
|
113
|
+
end
|
114
|
+
def resource_url
|
115
|
+
resource_text = if @type == :collection
|
116
|
+
parent_sym = if [:member, :collection].include?(self.parent.type)
|
117
|
+
self.single_string(self.parent.resource)
|
118
|
+
elsif self.parent.type == :group
|
119
|
+
self.parent.index
|
120
|
+
end
|
121
|
+
resource_with_parent = [parent_sym, (@action == :new ? self.single_string : @resource.to_s)].compact.join('_')
|
122
|
+
resourced_url = URL_ACTION_TEMPLATES[@action].gsub(':resource', resource_with_parent)
|
123
|
+
[resourced_url, ("(@#{parent_sym})" if parent_sym)].compact.join
|
124
|
+
else
|
125
|
+
URL_ACTION_TEMPLATES[@action].gsub(':resource', self.single_string)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def single_string(string = nil)
|
130
|
+
string ||= @resource
|
131
|
+
string.to_s.respond_to?(:singularize) ? string.to_s.singularize : string.to_s
|
132
|
+
end
|
133
|
+
def title_string(string = nil)
|
134
|
+
string ||= @resource
|
135
|
+
string.to_s.respond_to?(:titleize) ? string.to_s.titleize : string.to_s
|
136
|
+
end
|
137
|
+
|
78
138
|
def view_node_params(new_index, type, options)
|
79
139
|
[new_index, self.map, type, options.merge(:parent => self)]
|
80
140
|
end
|