site_map 0.2.5 → 0.2.6
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/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
|