lolita 3.1.2 → 3.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/History.rdoc +8 -0
- data/VERSION +1 -1
- data/app/controllers/lolita/rest_controller.rb +2 -2
- data/app/views/components/lolita/configuration/field/_label.html.erb +1 -1
- data/app/views/components/lolita/navigation/_display.html.erb +1 -7
- data/app/views/components/lolita/navigation/_tree.html.erb +24 -0
- data/app/views/layouts/lolita/application.html.erb +1 -1
- data/lib/lolita/hooks.rb +25 -18
- data/lib/lolita/navigation/branch.rb +111 -0
- data/lib/lolita/navigation/tree.rb +102 -0
- data/lib/lolita/rails/routes.rb +12 -6
- data/lolita.gemspec +3 -2
- data/spec/navigation/branch_spec.rb +30 -27
- data/spec/navigation/tree_spec.rb +13 -21
- metadata +4 -3
data/History.rdoc
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
=== Version 3.1.3 /
|
2
|
+
* Enhancements
|
3
|
+
* Lolita::Navigation::Tree and Lolita::Navigation::Branch added (Arturs Meisters)
|
4
|
+
* Main navigation tree generate from resources (Arturs Meisters)
|
5
|
+
|
6
|
+
* Bug fixes
|
7
|
+
* Hooks #let_content fixed to change after first block. (Arturs Meisters)
|
8
|
+
|
1
9
|
=== Version 3.1.2 / 2011-04-14
|
2
10
|
* Enhancements
|
3
11
|
* Hooks for Lolita::RestController addeed (Arturs Meisters)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.1.
|
1
|
+
3.1.3
|
@@ -47,7 +47,7 @@ class Lolita::RestController < ApplicationController
|
|
47
47
|
flash.now[:alert] = I18n.t "lolita.shared.destroy_alert"
|
48
48
|
end
|
49
49
|
self.run(:after_destroy)
|
50
|
-
redirect_to
|
50
|
+
redirect_to lolita_resources_path
|
51
51
|
end
|
52
52
|
|
53
53
|
def index
|
@@ -95,7 +95,7 @@ class Lolita::RestController < ApplicationController
|
|
95
95
|
end
|
96
96
|
|
97
97
|
def respond_html_400
|
98
|
-
response.headers["Validation"] = '
|
98
|
+
response.headers["Validation"] = 'false'
|
99
99
|
flash.now[:alert] = I18n.t "lolita.shared.save_alert"
|
100
100
|
show_form
|
101
101
|
end
|
@@ -1 +1 @@
|
|
1
|
-
<%= label resource_name,
|
1
|
+
<%= label resource_name, field.name, raw(field.title), :id=>"field_#{field.__id__}_label" %>
|
@@ -1,9 +1,3 @@
|
|
1
1
|
<nav>
|
2
|
-
|
3
|
-
<% Lolita.resources.each do |name,mapping| %>
|
4
|
-
<li <%=mapping.to==resource_class ? "class='active'" : ""%> >
|
5
|
-
<%= link_to mapping.name.to_s.humanize, lolita_resources_path(mapping) %>
|
6
|
-
</li>
|
7
|
-
<% end %>
|
8
|
-
</ul>
|
2
|
+
<%= render_component :"lolita/navigation",:tree, :tree=>tree %>
|
9
3
|
</nav>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<ul>
|
2
|
+
<%tree.branches.each do |branch|
|
3
|
+
if branch.object.is_a?(Lolita::Mapping)
|
4
|
+
branch.options[:url]||=lolita_resources_path(branch.object)
|
5
|
+
active=branch.object.to==resource_class
|
6
|
+
else
|
7
|
+
|
8
|
+
branch.options[:url]=if branch.options[:url].respond_to?(:call)
|
9
|
+
self.instance_eval(&(branch.options[:url]))
|
10
|
+
else
|
11
|
+
branch.options[:url]
|
12
|
+
end
|
13
|
+
active=branch.options[:url]==request.path
|
14
|
+
end
|
15
|
+
|
16
|
+
%>
|
17
|
+
<li <%=active ? "class='active'" : ""%>>
|
18
|
+
<%= link_to branch.title, branch.options[:url] %>
|
19
|
+
<% if branch.children.branches.any? %>
|
20
|
+
<%= render_component(:"lolita/navigation",:tree,:tree=>branch.children) %>
|
21
|
+
<% end %>
|
22
|
+
</li>
|
23
|
+
<% end %>
|
24
|
+
</ul>
|
@@ -29,7 +29,7 @@
|
|
29
29
|
<div id="container">
|
30
30
|
<%= render_component :"lolita/shared", :header %>
|
31
31
|
<div id="main" role="main">
|
32
|
-
<%= render_component :"lolita/navigation",:display %>
|
32
|
+
<%= render_component :"lolita/navigation",:display,:tree=>Lolita::Navigation::Tree[:"left_side_navigation"] %>
|
33
33
|
<div id="content" class="<%= content_classes %>">
|
34
34
|
<%= yield %>
|
35
35
|
</div>
|
data/lib/lolita/hooks.rb
CHANGED
@@ -126,6 +126,10 @@ module Lolita
|
|
126
126
|
@callbacks={}
|
127
127
|
end
|
128
128
|
|
129
|
+
def add_hooks *names
|
130
|
+
add_hook *names
|
131
|
+
end
|
132
|
+
|
129
133
|
# This method is used to add hooks for class. It accept one or more hook names.
|
130
134
|
# ====Example
|
131
135
|
# add_hook :before_save
|
@@ -154,17 +158,17 @@ module Lolita
|
|
154
158
|
# ====Example
|
155
159
|
# MyClass.run(:before_save,:after_save,:scope=>MyClass.new)
|
156
160
|
# # this will call callbacks in MyClass instance scope, that means that self will be MyClass instance.
|
157
|
-
def run(
|
161
|
+
def run(hook_name,*args,&block)
|
158
162
|
|
159
163
|
result=nil
|
160
|
-
options=
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
end
|
164
|
+
options=args ? args.extract_options! : {}
|
165
|
+
|
166
|
+
raise Lolita::HookNotFound, "Hook #{hook_name} is not defined for #{self}." unless self.has_hook?(hook_name)
|
167
|
+
in_hooks_scope(options[:scope],options[:run_scope]) do
|
168
|
+
callback=get_callback(hook_name)
|
169
|
+
result=run_callback(callback,&block)
|
167
170
|
end
|
171
|
+
|
168
172
|
result
|
169
173
|
end
|
170
174
|
|
@@ -188,8 +192,10 @@ module Lolita
|
|
188
192
|
# let_content # execute callback block(-s) in same scope as run is executed.
|
189
193
|
# end
|
190
194
|
def let_content
|
191
|
-
if
|
195
|
+
if self.given_callback_content.respond_to?(:call)
|
192
196
|
run_block(self.given_callback_content)
|
197
|
+
elsif self.given_callback_content
|
198
|
+
self.given_callback_content
|
193
199
|
end
|
194
200
|
end
|
195
201
|
|
@@ -239,19 +245,20 @@ module Lolita
|
|
239
245
|
|
240
246
|
# Run blocks from <em>blocks</em> Array. Also it set #given_callback_content if block is given, this
|
241
247
|
# will allow to call #let_content. Each block is runned with #run_block.
|
248
|
+
# After first run result of first block become #given_callback_content, and when next block
|
249
|
+
# call #let_content, this string will be returned for that block
|
242
250
|
def run_blocks blocks,&given_block
|
243
251
|
result=""
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
252
|
+
|
253
|
+
self.given_callback_content=block_given? ? given_block : nil
|
254
|
+
|
255
|
+
if blocks && !blocks.empty?
|
256
|
+
blocks.each do |block|
|
249
257
|
result << (run_block(block,&given_block)).to_s
|
250
|
-
|
251
|
-
self.given_callback_content=nil
|
258
|
+
self.given_callback_content=result
|
252
259
|
end
|
253
|
-
|
254
|
-
|
260
|
+
elsif block_given?
|
261
|
+
self.given_callback_content=nil
|
255
262
|
result << run_block(given_block).to_s
|
256
263
|
end
|
257
264
|
result
|
@@ -2,6 +2,117 @@ module Lolita
|
|
2
2
|
module Navigation
|
3
3
|
class Branch
|
4
4
|
|
5
|
+
attr_accessor :title,:name,:object
|
6
|
+
attr_reader :level,:options,:tree,:parent
|
7
|
+
|
8
|
+
def initialize(*args)
|
9
|
+
|
10
|
+
@options=args ? args.extract_options! : {}
|
11
|
+
set_object(args||[])
|
12
|
+
set_default_values
|
13
|
+
assign_attributes_from_options
|
14
|
+
end
|
15
|
+
|
16
|
+
def tree=(new_tree)
|
17
|
+
raise ArgumentError, "Tree already assigned" if self.tree || !new_tree.is_a?(Lolita::Navigation::Tree)
|
18
|
+
@tree=new_tree
|
19
|
+
end
|
20
|
+
|
21
|
+
def children
|
22
|
+
@children||=Lolita::Navigation::Tree.new("#{name}_children_tree")
|
23
|
+
@children
|
24
|
+
end
|
25
|
+
|
26
|
+
def index
|
27
|
+
self.tree.get_branch_index(self)
|
28
|
+
end
|
29
|
+
|
30
|
+
def siblings
|
31
|
+
index=self.index
|
32
|
+
{
|
33
|
+
:before=>self.tree.branches[index-1],
|
34
|
+
:after=>self.tree.branches[index+1]
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
def append(*args)
|
39
|
+
move_to(:append,*args)
|
40
|
+
end
|
41
|
+
|
42
|
+
def after(*args)
|
43
|
+
move_to(:after,*args)
|
44
|
+
end
|
45
|
+
|
46
|
+
def before(*args)
|
47
|
+
move_to(:before,*args)
|
48
|
+
end
|
49
|
+
|
50
|
+
def prepend(*args)
|
51
|
+
move_to(:prepend,*args)
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.get_or_create(*args)
|
55
|
+
options=args ? args.extract_options! : {}
|
56
|
+
args||=[]
|
57
|
+
possible_object=args[0]
|
58
|
+
|
59
|
+
if possible_object.is_a?(String)
|
60
|
+
self.new(possible_object,options.merge(:title=>possible_object))
|
61
|
+
elsif possible_object.is_a?(self)
|
62
|
+
possible_object
|
63
|
+
else
|
64
|
+
self.new(possible_object,options)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def get_or_create(*args)
|
69
|
+
self.class.get_or_create(*args)
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
def move_to(position,*args)
|
75
|
+
branch=get_or_create(*args)
|
76
|
+
raise ArgumentError("Can't #{position} without branch.") unless branch
|
77
|
+
if [:before,:after].include?(position) && !branch.tree
|
78
|
+
raise ArgumentError, "Can't move in not-existing tree!"
|
79
|
+
end
|
80
|
+
new_branch=case position
|
81
|
+
when :append
|
82
|
+
self.children.append(branch)
|
83
|
+
when :prepend
|
84
|
+
self.children.prepend(branch)
|
85
|
+
when :after
|
86
|
+
branch.tree.before(branch,self)
|
87
|
+
when :before
|
88
|
+
branch.tree.after(branch,self)
|
89
|
+
end
|
90
|
+
new_branch.instance_variable_set(:"@level",new_branch.level+([:append,:prepend].include?(position) ? 1 : 0))
|
91
|
+
new_branch
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
def set_object(args)
|
96
|
+
@object=if args[0].is_a?(Lolita::Navigation::Tree)
|
97
|
+
@level=0
|
98
|
+
args[0]
|
99
|
+
else
|
100
|
+
args[0]
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def set_default_values
|
105
|
+
@name||="branch_#{self.__id__}"
|
106
|
+
@level||=0
|
107
|
+
end
|
108
|
+
|
109
|
+
def assign_attributes_from_options
|
110
|
+
@options.each{|key,value|
|
111
|
+
if self.respond_to?(:"#{key}=")
|
112
|
+
self.send(:"#{key}=",@options.delete(key))
|
113
|
+
end
|
114
|
+
}
|
115
|
+
end
|
5
116
|
end
|
6
117
|
end
|
7
118
|
end
|
@@ -1,6 +1,108 @@
|
|
1
1
|
module Lolita
|
2
2
|
module Navigation
|
3
3
|
class Tree
|
4
|
+
include Enumerable
|
5
|
+
include Lolita::Hooks
|
6
|
+
|
7
|
+
class<<self
|
8
|
+
def remember(tree)
|
9
|
+
@@trees||={}
|
10
|
+
@@trees[tree.name.to_sym]=tree
|
11
|
+
end
|
12
|
+
|
13
|
+
def [](name)
|
14
|
+
@@trees||={}
|
15
|
+
@@trees[name]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
add_hooks :before_branch_added, :after_branch_added
|
20
|
+
|
21
|
+
attr_reader :name,:root,:default_position,:branches
|
22
|
+
|
23
|
+
def initialize(name)
|
24
|
+
@name=name
|
25
|
+
@default_possition=:append
|
26
|
+
@branches=[]
|
27
|
+
end
|
28
|
+
|
29
|
+
def each
|
30
|
+
@branches.each do |branch|
|
31
|
+
yield branch
|
32
|
+
if branch.children.any?
|
33
|
+
branch.children.each do |child|
|
34
|
+
yield child
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def method_missing method_name, *args
|
41
|
+
@branches.send(method_name.to_sym,*args)
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
def append(*branch)
|
46
|
+
adding_branch(*branch) do |fixed_branch|
|
47
|
+
@branches<<fixed_branch
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def prepend(*branch)
|
52
|
+
adding_branch(*branch) do |fixed_branch|
|
53
|
+
@branches.unshift(fixed_branch)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def after(given_branch,*other_branch)
|
58
|
+
index=get_branch_index(given_branch)
|
59
|
+
|
60
|
+
adding_branch(*other_branch) do |fixed_branch|
|
61
|
+
put_in_branches(fixed_branch,index)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def before(given_branch,*other_branch)
|
66
|
+
index=get_branch_index(given_branch)
|
67
|
+
|
68
|
+
adding_branch(*other_branch) do |fixed_branch|
|
69
|
+
put_in_branches(fixed_branch,index-1)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def get_branch_index(given_branch)
|
74
|
+
@branches.each_with_index{|branch,index|
|
75
|
+
return index if given_branch==branch
|
76
|
+
}
|
77
|
+
raise ArgumentError, "Branch #{given_branch.inspect} not exists in #{self.inspect}"
|
78
|
+
end
|
79
|
+
|
80
|
+
private
|
81
|
+
|
82
|
+
def adding_branch *branch
|
83
|
+
self.run(:before_branch_added,*branch)
|
84
|
+
fixed_branch=fix_branch(*branch)
|
85
|
+
yield fixed_branch
|
86
|
+
@last_branch=fixed_branch
|
87
|
+
self.run(:after_branch_added,fixed_branch)
|
88
|
+
fixed_branch
|
89
|
+
end
|
90
|
+
|
91
|
+
def fix_branch(*branch)
|
92
|
+
unless branch[0].is_a?(Lolita::Navigation::Branch)
|
93
|
+
options=branch.extract_options!
|
94
|
+
Lolita::Navigation::Branch.get_or_create(*branch,options.merge(:tree=>self))
|
95
|
+
else
|
96
|
+
branch[0].tree=self
|
97
|
+
branch[0]
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def put_in_branches branch,index
|
102
|
+
before_part=@branches.slice(0,index+1) || []
|
103
|
+
after_part=@branches.slice(index+1,@branches.size-index) || []
|
104
|
+
@branches=before_part+[branch]+after_part
|
105
|
+
end
|
4
106
|
|
5
107
|
end
|
6
108
|
end
|
data/lib/lolita/rails/routes.rb
CHANGED
@@ -1,13 +1,18 @@
|
|
1
1
|
module ActionDispatch::Routing
|
2
2
|
|
3
|
-
class RouteSet
|
4
|
-
# alias_method_chain :draw, :lolita
|
3
|
+
class RouteSet
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
def draw_with_lolita *args,&block
|
6
|
+
unless Lolita::Navigation::Tree[:"left_side_navigation"]
|
7
|
+
tree=Lolita::Navigation::Tree.new(:"left_side_navigation")
|
8
|
+
Lolita::Navigation::Tree.remember(tree)
|
9
|
+
end
|
10
|
+
draw_without_lolita *args,&block
|
11
|
+
end
|
12
|
+
|
13
|
+
alias_method_chain :draw, :lolita
|
10
14
|
end
|
15
|
+
|
11
16
|
class Mapper
|
12
17
|
|
13
18
|
# Every module, that is used with lolita and has routes, need to have
|
@@ -51,6 +56,7 @@ class RouteSet
|
|
51
56
|
mapping=Lolita.add_mapping(resource,options)
|
52
57
|
Lolita.resources[mapping.name]=mapping
|
53
58
|
target_class=mapping.to
|
59
|
+
Lolita::Navigation::Tree[:"left_side_navigation"].append(mapping,:title=>mapping.name.to_s.humanize)
|
54
60
|
all_resource_classes<<target_class
|
55
61
|
|
56
62
|
lolita_scope mapping.name do
|
data/lolita.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{lolita}
|
8
|
-
s.version = "3.1.
|
8
|
+
s.version = "3.1.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["ITHouse (Latvia) and Arturs Meisters"]
|
12
|
-
s.date = %q{2011-04-
|
12
|
+
s.date = %q{2011-04-15}
|
13
13
|
s.description = %q{Great Rails CMS, that turns your business logic into good-looking, fully functional workspace. }
|
14
14
|
s.email = %q{support@ithouse.lv}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -72,6 +72,7 @@ Gem::Specification.new do |s|
|
|
72
72
|
"app/views/components/lolita/configuration/tab/default/_display.html.erb",
|
73
73
|
"app/views/components/lolita/configuration/tabs/_display.html.erb",
|
74
74
|
"app/views/components/lolita/navigation/_display.html.erb",
|
75
|
+
"app/views/components/lolita/navigation/_tree.html.erb",
|
75
76
|
"app/views/components/lolita/shared/_flash.html.erb",
|
76
77
|
"app/views/components/lolita/shared/_header.html.erb",
|
77
78
|
"app/views/components/lolita/shared/_right_sidebar.html.erb",
|
@@ -15,8 +15,8 @@ describe Lolita::Navigation::Branch do
|
|
15
15
|
branch.name.should match(/branch/)
|
16
16
|
end
|
17
17
|
|
18
|
-
it "should
|
19
|
-
branch.level.should
|
18
|
+
it "should have level 0 when branch is not in tree" do
|
19
|
+
branch.level.should == 0
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should have options, that may containe any values needed" do
|
@@ -30,27 +30,6 @@ describe Lolita::Navigation::Branch do
|
|
30
30
|
branch.tree=Object.new
|
31
31
|
}.should raise_error(ArgumentError)
|
32
32
|
end
|
33
|
-
|
34
|
-
context "relationships" do
|
35
|
-
|
36
|
-
it "should have parent" do
|
37
|
-
branch=tree.add(Object)
|
38
|
-
branch.parent.should == tree.root
|
39
|
-
end
|
40
|
-
|
41
|
-
it "should have childern" do
|
42
|
-
branch.append(Lolita::Navigation::Branch.new)
|
43
|
-
branch.children.class.should == Lolita::Navigation::Tree
|
44
|
-
branch.children.should have(1).item
|
45
|
-
end
|
46
|
-
|
47
|
-
it "should have siblings" do
|
48
|
-
tree.add(Object)
|
49
|
-
branch=tree.add(String)
|
50
|
-
branch.siblings[:before].should_not be_nil
|
51
|
-
branch.siblings[:after].should be_nil
|
52
|
-
end
|
53
|
-
end
|
54
33
|
end
|
55
34
|
|
56
35
|
describe "adding" do
|
@@ -60,7 +39,7 @@ describe Lolita::Navigation::Branch do
|
|
60
39
|
new_branch.append(Lolita::Navigation::Branch.new)
|
61
40
|
new_branch.append(Object)
|
62
41
|
new_branch.append("Pages")
|
63
|
-
new_branch.children.should have(3).items
|
42
|
+
new_branch.children.branches.should have(3).items
|
64
43
|
end
|
65
44
|
|
66
45
|
it "should prepend to exsiting branch" do
|
@@ -70,11 +49,35 @@ describe Lolita::Navigation::Branch do
|
|
70
49
|
end
|
71
50
|
|
72
51
|
it "should add before and after branch" do
|
73
|
-
branch=tree.
|
74
|
-
|
75
|
-
|
52
|
+
branch=tree.append(Object)
|
53
|
+
first_branch=Lolita::Navigation::Branch.new
|
54
|
+
debugger
|
55
|
+
first_branch.before(branch)
|
56
|
+
last_branch=Lolita::Navigation::Branch.new
|
57
|
+
last_branch.after(branch)
|
76
58
|
branch.siblings.values.compact.should have(2).items
|
77
59
|
end
|
78
60
|
end
|
79
61
|
|
62
|
+
describe "relationships" do
|
63
|
+
let(:branch){Lolita::Navigation::Branch.new}
|
64
|
+
|
65
|
+
it "should have parent" do
|
66
|
+
branch=tree.append(Object)
|
67
|
+
branch.parent.should == tree.root
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should have childern" do
|
71
|
+
branch.append(Lolita::Navigation::Branch.new)
|
72
|
+
branch.children.class.should == Lolita::Navigation::Tree
|
73
|
+
branch.children.branches.should have(1).item
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should have siblings" do
|
77
|
+
tree.append(Object)
|
78
|
+
branch=tree.append(String)
|
79
|
+
branch.siblings[:before].should_not be_nil
|
80
|
+
branch.siblings[:after].should be_nil
|
81
|
+
end
|
82
|
+
end
|
80
83
|
end
|
@@ -18,16 +18,13 @@ describe Lolita::Navigation::Tree do
|
|
18
18
|
|
19
19
|
end
|
20
20
|
|
21
|
-
describe "
|
22
|
-
it "should
|
23
|
-
tree.
|
24
|
-
tree.root.level.should == 0
|
21
|
+
describe "adding" do
|
22
|
+
it "should append" do
|
23
|
+
tree.append(Lolita::Navigation::Branch.new)
|
25
24
|
end
|
26
|
-
end
|
27
25
|
|
28
|
-
context "#add" do
|
29
26
|
it "should accept object, position and options" do
|
30
|
-
tree.
|
27
|
+
tree.append(Object.new,:url=>"/mypath")
|
31
28
|
tree.should have(1).branch
|
32
29
|
end
|
33
30
|
end
|
@@ -38,7 +35,7 @@ describe Lolita::Navigation::Tree do
|
|
38
35
|
|
39
36
|
it "should iterate through all branches" do
|
40
37
|
0.upto(3){|i|
|
41
|
-
tree.
|
38
|
+
tree.append(Object.new,:url=>"/#{i}",:name=>"branch#{i}")
|
42
39
|
}
|
43
40
|
tree.each_with_index do |branch,index|
|
44
41
|
branch.name.should == "branch#{index}"
|
@@ -46,37 +43,32 @@ describe Lolita::Navigation::Tree do
|
|
46
43
|
end
|
47
44
|
|
48
45
|
it "should itereate in each level" do
|
49
|
-
parent_branch=tree.root
|
50
46
|
branch=empty_branch
|
51
47
|
0.upto(5){|i|
|
52
|
-
|
48
|
+
tree.append(branch)
|
53
49
|
parent_branch=branch
|
54
50
|
branch=Lolita::Navigation::Branch.new(Object,:url=>"/")
|
55
51
|
}
|
56
|
-
level_counter=
|
57
|
-
tree.
|
58
|
-
|
59
|
-
level.should == level_counter
|
60
|
-
level_counter+=1
|
52
|
+
level_counter=0
|
53
|
+
tree.each do |branch|
|
54
|
+
branch.level.should == level_counter
|
61
55
|
end
|
62
56
|
end
|
63
57
|
end
|
64
58
|
|
65
59
|
it "should have callbacks" do
|
66
60
|
Lolita::Navigation::Tree.should respond_to(:hooks)
|
67
|
-
hook_names=[:
|
61
|
+
hook_names=[:before_branch_added,:after_branch_added]
|
68
62
|
(Lolita::Navigation::Tree.hooks - hook_names).should be_empty
|
69
63
|
end
|
70
64
|
|
71
65
|
it "should have way to add branches based on earlier added branches" do
|
72
66
|
tree.after_branch_added do
|
73
|
-
self.
|
74
|
-
|
75
|
-
branch.append(Object,:url=>"/")
|
76
|
-
end
|
67
|
+
unless self.detect{|branch| branch.options[:url]=="/"}
|
68
|
+
self.append(Object,:url=>"/")
|
77
69
|
end
|
78
70
|
end
|
79
|
-
tree.
|
71
|
+
tree.append(Object,:url=>"/mypath")
|
80
72
|
tree.should have(2).branches
|
81
73
|
end
|
82
74
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: lolita
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 3.1.
|
5
|
+
version: 3.1.3
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- ITHouse (Latvia) and Arturs Meisters
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-04-
|
13
|
+
date: 2011-04-15 00:00:00 +03:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -232,6 +232,7 @@ files:
|
|
232
232
|
- app/views/components/lolita/configuration/tab/default/_display.html.erb
|
233
233
|
- app/views/components/lolita/configuration/tabs/_display.html.erb
|
234
234
|
- app/views/components/lolita/navigation/_display.html.erb
|
235
|
+
- app/views/components/lolita/navigation/_tree.html.erb
|
235
236
|
- app/views/components/lolita/shared/_flash.html.erb
|
236
237
|
- app/views/components/lolita/shared/_header.html.erb
|
237
238
|
- app/views/components/lolita/shared/_right_sidebar.html.erb
|
@@ -482,7 +483,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
482
483
|
requirements:
|
483
484
|
- - ">="
|
484
485
|
- !ruby/object:Gem::Version
|
485
|
-
hash:
|
486
|
+
hash: 1019725473
|
486
487
|
segments:
|
487
488
|
- 0
|
488
489
|
version: "0"
|