semantic_navigation 0.0.14 → 0.1.0

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.
Files changed (34) hide show
  1. data/Changelog.md +6 -1
  2. data/README.md +3 -3
  3. data/lib/generators/semantic_navigation/breadcrumb_renderer/breadcrumb_renderer_generator.rb +19 -0
  4. data/lib/generators/semantic_navigation/breadcrumb_renderer/templates/breadcrumb_renderer.rb +62 -0
  5. data/lib/generators/semantic_navigation/install/install_generator.rb +2 -2
  6. data/lib/generators/semantic_navigation/install/templates/semantic_navigation.rb +5 -5
  7. data/lib/generators/semantic_navigation/list_renderer/list_renderer_generator.rb +19 -0
  8. data/lib/generators/semantic_navigation/list_renderer/templates/list_renderer.rb +64 -0
  9. data/lib/semantic_navigation/configuration.rb +10 -10
  10. data/lib/semantic_navigation/core.rb +8 -4
  11. data/lib/semantic_navigation/core/base.rb +8 -8
  12. data/lib/semantic_navigation/core/leaf.rb +5 -33
  13. data/lib/semantic_navigation/core/name_methods.rb +24 -0
  14. data/lib/semantic_navigation/core/navigation.rb +23 -12
  15. data/lib/semantic_navigation/core/node.rb +6 -34
  16. data/lib/semantic_navigation/core/url_methods.rb +24 -0
  17. data/lib/semantic_navigation/railtie.rb +17 -7
  18. data/lib/semantic_navigation/renderers/acts_as_breadcrumb.rb +8 -8
  19. data/lib/semantic_navigation/renderers/acts_as_list.rb +34 -33
  20. data/lib/semantic_navigation/renderers/bread_crumb.rb +5 -5
  21. data/lib/semantic_navigation/renderers/list.rb +9 -9
  22. data/lib/semantic_navigation/renderers/render_helpers.rb +19 -32
  23. data/lib/semantic_navigation/twitter_bootstrap/breadcrumb.rb +8 -8
  24. data/lib/semantic_navigation/twitter_bootstrap/list.rb +15 -15
  25. data/lib/semantic_navigation/twitter_bootstrap/tabs.rb +14 -14
  26. data/lib/semantic_navigation/version.rb +1 -1
  27. data/spec/lib/semantic_navigation/configuration_spec.rb +50 -42
  28. data/spec/lib/semantic_navigation/core/navigation_spec.rb +58 -0
  29. data/spec/lib/semantic_navigation/helper_methods_spec.rb +31 -31
  30. data/spec/lib/semantic_navigation/twitter_bootstrap/breadcrumb_spec.rb +46 -46
  31. data/spec/lib/semantic_navigation/twitter_bootstrap/list_spec.rb +49 -49
  32. data/spec/lib/semantic_navigation_spec.rb +4 -1
  33. metadata +14 -9
  34. data/spec/lib/semantic_navigation/custom_renderer.rb +0 -3
@@ -10,7 +10,7 @@ describe SemanticNavigation::HelperMethods do
10
10
 
11
11
  describe "#navigation_for" do
12
12
 
13
- before :each do
13
+ before :each do
14
14
  SemanticNavigation::Configuration.stub!(:new).and_return (@config_instance = mock)
15
15
  end
16
16
 
@@ -41,43 +41,43 @@ describe SemanticNavigation::HelperMethods do
41
41
 
42
42
  it 'should return name for an active item' do
43
43
  SemanticNavigation::Configuration.navigate :some_menu do
44
- item :first, '/first', :name => 'First'
45
- item :second, '/second', :name => 'Second'
46
- end
47
- @view_instance.should_receive(:current_page?).with('/first').and_return false
48
- @view_instance.should_receive(:current_page?).with('/second').and_return true
49
- result = @view_instance.active_item_for :some_menu
50
- result.should == 'Second'
44
+ item :first, '/first', :name => 'First'
45
+ item :second, '/second', :name => 'Second'
46
+ end
47
+ @view_instance.should_receive(:current_page?).with('/first').and_return false
48
+ @view_instance.should_receive(:current_page?).with('/second').and_return true
49
+ result = @view_instance.active_item_for :some_menu
50
+ result.should == 'Second'
51
51
  end
52
52
 
53
53
  it 'should return name for a last level' do
54
54
  SemanticNavigation::Configuration.navigate :some_menu do
55
- item :first_node, '/first_node', :name => 'First node' do
56
- item :first, '/first', :name => 'First'
57
- end
58
- item :second_node, 'second_node', :name => 'Second node' do
59
- item :second, '/second', :name => 'Second'
60
- end
61
- end
62
- @view_instance.should_receive(:current_page?).exactly(4).times.and_return(false, false,true,false) # First, First node, Second, Second node
63
- result = @view_instance.active_item_for :some_menu
64
- result.should == 'Second'
65
- end
55
+ item :first_node, '/first_node', :name => 'First node' do
56
+ item :first, '/first', :name => 'First'
57
+ end
58
+ item :second_node, 'second_node', :name => 'Second node' do
59
+ item :second, '/second', :name => 'Second'
60
+ end
61
+ end
62
+ @view_instance.should_receive(:current_page?).exactly(4).times.and_return(false, false,true,false) # First, First node, Second, Second node
63
+ result = @view_instance.active_item_for :some_menu
64
+ result.should == 'Second'
65
+ end
66
66
 
67
67
  it 'should return name for a requested level' do
68
68
  SemanticNavigation::Configuration.navigate :some_menu do
69
- item :first_node, '/first_node', :name => 'First node' do
70
- item :first, '/first', :name => 'First'
71
- end
72
- item :second_node, 'second_node', :name => 'Second node' do
73
- item :second, '/second', :name => 'Second'
74
- end
75
- end
76
- @view_instance.should_receive(:current_page?).exactly(4).times.and_return(false, false,true,false) # First, First node, Second, Second node
77
- result = @view_instance.active_item_for :some_menu, 1
78
- result.should == 'Second node'
79
- end
69
+ item :first_node, '/first_node', :name => 'First node' do
70
+ item :first, '/first', :name => 'First'
71
+ end
72
+ item :second_node, 'second_node', :name => 'Second node' do
73
+ item :second, '/second', :name => 'Second'
74
+ end
75
+ end
76
+ @view_instance.should_receive(:current_page?).exactly(4).times.and_return(false, false,true,false) # First, First node, Second, Second node
77
+ result = @view_instance.active_item_for :some_menu, 1
78
+ result.should == 'Second node'
79
+ end
80
80
 
81
81
  end
82
82
 
83
- end
83
+ end
@@ -2,33 +2,33 @@ require 'spec_helper'
2
2
 
3
3
  describe SemanticNavigation::TwitterBootstrap::Breadcrumb do
4
4
  before :each do
5
- class ViewObject
6
- attr_accessor :output_buffer
7
- include ActionView::Helpers::TagHelper
8
- include SemanticNavigation::HelperMethods
9
- include ActionView::Helpers::UrlHelper
10
- end
5
+ class ViewObject
6
+ attr_accessor :output_buffer
7
+ include ActionView::Helpers::TagHelper
8
+ include SemanticNavigation::HelperMethods
9
+ include ActionView::Helpers::UrlHelper
10
+ end
11
11
  @configuration = SemanticNavigation::Configuration
12
- @configuration.register_renderer :bootstrap_breadcrumb, SemanticNavigation::TwitterBootstrap::Breadcrumb
13
- @view_object = ViewObject.new
12
+ @configuration.register_renderer :bootstrap_breadcrumb, SemanticNavigation::TwitterBootstrap::Breadcrumb
13
+ @view_object = ViewObject.new
14
14
  end
15
15
 
16
16
  it 'should render empty ul tag for empty navigation' do
17
-
17
+
18
18
  @configuration.run do
19
19
  navigate :menu do
20
20
  end
21
21
  end
22
-
22
+
23
23
  result = @view_object.navigation_for :menu, :as => :bootstrap_breadcrumb
24
24
  result.should == "<ul class=\"breadcrumb\"></ul>"
25
- end
25
+ end
26
26
 
27
27
  it 'should render one level navigation breadcrumb' do
28
28
  @configuration.run do
29
29
  navigate :menu do
30
- item :url1, 'url1', :name => 'url1'
31
- item :url2, 'url2', :name => 'url2'
30
+ item :url1, 'url1', :name => 'url1'
31
+ item :url2, 'url2', :name => 'url2'
32
32
  end
33
33
  end
34
34
 
@@ -45,12 +45,12 @@ describe SemanticNavigation::TwitterBootstrap::Breadcrumb do
45
45
  it 'should render one multilevel navigation breadcrumb' do
46
46
  @configuration.run do
47
47
  navigate :menu do
48
- item :url1, 'url1', :name => 'url1' do
48
+ item :url1, 'url1', :name => 'url1' do
49
49
  item :suburl1, 'suburl1', :name => 'suburl1'
50
- end
51
- item :url2, 'url2', :name => 'url2' do
50
+ end
51
+ item :url2, 'url2', :name => 'url2' do
52
52
  item :suburl2, 'suburl2', :name => 'suburl2'
53
- end
53
+ end
54
54
  end
55
55
  end
56
56
 
@@ -69,17 +69,17 @@ it 'should render one multilevel navigation breadcrumb' do
69
69
  "suburl1",
70
70
  "</li>",
71
71
  "</ul>"].join
72
- end
72
+ end
73
73
 
74
74
  it 'should render last item as link if :last_as_link => true' do
75
75
  @configuration.run do
76
76
  navigate :menu do
77
- item :url1, 'url1', :name => 'url1' do
77
+ item :url1, 'url1', :name => 'url1' do
78
78
  item :suburl1, 'suburl1', :name => 'suburl1'
79
- end
80
- item :url2, 'url2', :name => 'url2' do
79
+ end
80
+ item :url2, 'url2', :name => 'url2' do
81
81
  item :suburl2, 'suburl2', :name => 'suburl2'
82
- end
82
+ end
83
83
  end
84
84
  end
85
85
 
@@ -99,18 +99,18 @@ it 'should render one multilevel navigation breadcrumb' do
99
99
  "suburl1",
100
100
  "</a>",
101
101
  "</li>",
102
- "</ul>"].join
102
+ "</ul>"].join
103
103
  end
104
104
 
105
105
  it 'should render only root level' do
106
106
  @configuration.run do
107
107
  navigate :menu do
108
- item :url1, 'url1', :name => 'url1' do
108
+ item :url1, 'url1', :name => 'url1' do
109
109
  item :suburl1, 'suburl1', :name => 'suburl1'
110
- end
111
- item :url2, 'url2', :name => 'url2' do
110
+ end
111
+ item :url2, 'url2', :name => 'url2' do
112
112
  item :suburl2, 'suburl2', :name => 'suburl2'
113
- end
113
+ end
114
114
  end
115
115
  end
116
116
 
@@ -121,18 +121,18 @@ it 'should render one multilevel navigation breadcrumb' do
121
121
  "<li>",
122
122
  "url1",
123
123
  "</li>",
124
- "</ul>"].join
124
+ "</ul>"].join
125
125
  end
126
126
 
127
127
  it 'should render second level' do
128
128
  @configuration.run do
129
129
  navigate :menu do
130
- item :url1, 'url1', :name => 'url1' do
130
+ item :url1, 'url1', :name => 'url1' do
131
131
  item :suburl1, 'suburl1', :name => 'suburl1'
132
- end
133
- item :url2, 'url2', :name => 'url2' do
132
+ end
133
+ item :url2, 'url2', :name => 'url2' do
134
134
  item :suburl2, 'suburl2', :name => 'suburl2'
135
- end
135
+ end
136
136
  end
137
137
  end
138
138
 
@@ -143,22 +143,22 @@ it 'should render one multilevel navigation breadcrumb' do
143
143
  "<li>",
144
144
  "suburl1",
145
145
  "</li>",
146
- "</ul>"].join
146
+ "</ul>"].join
147
147
  end
148
148
 
149
149
  it 'should render the exact levels' do
150
150
  @configuration.run do
151
151
  navigate :menu do
152
- item :url1, 'url1', :name => 'url1' do
152
+ item :url1, 'url1', :name => 'url1' do
153
153
  item :suburl1, 'suburl1', :name => 'suburl1' do
154
- item :subsub1, 'subsub1', :name => 'subsub1'
154
+ item :subsub1, 'subsub1', :name => 'subsub1'
155
155
  end
156
- end
157
- item :url2, 'url2', :name => 'url2' do
156
+ end
157
+ item :url2, 'url2', :name => 'url2' do
158
158
  item :suburl2, 'suburl2', :name => 'suburl2' do
159
- item :subsub2, 'subsub2', :name => 'subsub2'
159
+ item :subsub2, 'subsub2', :name => 'subsub2'
160
160
  end
161
- end
161
+ end
162
162
  end
163
163
  end
164
164
 
@@ -182,21 +182,21 @@ it 'should render one multilevel navigation breadcrumb' do
182
182
  it 'should render navigation except some item' do
183
183
  @configuration.run do
184
184
  navigate :menu do
185
- item :url1, 'url1', :name => 'url1' do
185
+ item :url1, 'url1', :name => 'url1' do
186
186
  item :suburl1, 'suburl1', :name => 'suburl1'
187
- end
188
- item :url2, 'url2', :name => 'url2' do
187
+ end
188
+ item :url2, 'url2', :name => 'url2' do
189
189
  item :suburl2, 'suburl2', :name => 'suburl2'
190
- end
190
+ end
191
191
  end
192
192
  end
193
-
193
+
194
194
  @view_object.should_receive(:current_page?).and_return(true, false, false, false)
195
195
  result = @view_object.navigation_for :menu, :except_for => [:suburl1], :as => :bootstrap_breadcrumb
196
196
  result.should == ["<ul class=\"breadcrumb\">",
197
197
  "<li>",
198
198
  "url1",
199
199
  "</li>",
200
- "</ul>"].join
200
+ "</ul>"].join
201
201
  end
202
- end
202
+ end
@@ -3,33 +3,33 @@ require 'spec_helper'
3
3
  describe SemanticNavigation::TwitterBootstrap::List do
4
4
 
5
5
  before :each do
6
- class ViewObject
7
- attr_accessor :output_buffer
8
- include ActionView::Helpers::TagHelper
9
- include SemanticNavigation::HelperMethods
10
- include ActionView::Helpers::UrlHelper
11
- end
6
+ class ViewObject
7
+ attr_accessor :output_buffer
8
+ include ActionView::Helpers::TagHelper
9
+ include SemanticNavigation::HelperMethods
10
+ include ActionView::Helpers::UrlHelper
11
+ end
12
12
  @configuration = SemanticNavigation::Configuration
13
- @configuration.register_renderer :bootstrap_list, SemanticNavigation::TwitterBootstrap::List
14
- @view_object = ViewObject.new
13
+ @configuration.register_renderer :bootstrap_list, SemanticNavigation::TwitterBootstrap::List
14
+ @view_object = ViewObject.new
15
15
  end
16
16
 
17
17
  it 'should render empty ul tag for empty navigation' do
18
-
18
+
19
19
  @configuration.run do
20
20
  navigate :menu do
21
21
  end
22
22
  end
23
-
23
+
24
24
  result = @view_object.navigation_for :menu, :as => :bootstrap_list
25
25
  result.should == "<ul class=\"nav nav-list\"></ul>"
26
- end
26
+ end
27
27
 
28
28
  it 'should render one level navigation' do
29
29
  @configuration.run do
30
30
  navigate :menu do
31
- item :url1, 'url1', :name => 'url1'
32
- item :url2, 'url2', :name => 'url2'
31
+ item :url1, 'url1', :name => 'url1'
32
+ item :url2, 'url2', :name => 'url2'
33
33
  end
34
34
  end
35
35
 
@@ -51,12 +51,12 @@ describe SemanticNavigation::TwitterBootstrap::List do
51
51
  it 'should render one multilevel navigation' do
52
52
  @configuration.run do
53
53
  navigate :menu do
54
- item :url1, 'url1', :name => 'url1' do
54
+ item :url1, 'url1', :name => 'url1' do
55
55
  item :suburl1, 'suburl1', :name => 'suburl1'
56
- end
57
- item :url2, 'url2', :name => 'url2' do
56
+ end
57
+ item :url2, 'url2', :name => 'url2' do
58
58
  item :suburl2, 'suburl2', :name => 'suburl2'
59
- end
59
+ end
60
60
  end
61
61
  end
62
62
 
@@ -87,17 +87,17 @@ it 'should render one multilevel navigation' do
87
87
  "</ul>",
88
88
  "</li>",
89
89
  "</ul>"].join
90
- end
90
+ end
91
91
 
92
92
  it 'should render only root level' do
93
93
  @configuration.run do
94
94
  navigate :menu do
95
- item :url1, 'url1', :name => 'url1' do
95
+ item :url1, 'url1', :name => 'url1' do
96
96
  item :suburl1, 'suburl1', :name => 'suburl1'
97
- end
98
- item :url2, 'url2', :name => 'url2' do
97
+ end
98
+ item :url2, 'url2', :name => 'url2' do
99
99
  item :suburl2, 'suburl2', :name => 'suburl2'
100
- end
100
+ end
101
101
  end
102
102
  end
103
103
 
@@ -113,18 +113,18 @@ it 'should render one multilevel navigation' do
113
113
  "url2",
114
114
  "</a>",
115
115
  "</li>",
116
- "</ul>"].join
116
+ "</ul>"].join
117
117
  end
118
118
 
119
119
  it 'should render second level if some item of first level is active' do
120
120
  @configuration.run do
121
121
  navigate :menu do
122
- item :url1, 'url1', :name => 'url1' do
122
+ item :url1, 'url1', :name => 'url1' do
123
123
  item :suburl1, 'suburl1', :name => 'suburl1'
124
- end
125
- item :url2, 'url2', :name => 'url2' do
124
+ end
125
+ item :url2, 'url2', :name => 'url2' do
126
126
  item :suburl2, 'suburl2', :name => 'suburl2'
127
- end
127
+ end
128
128
  end
129
129
  end
130
130
 
@@ -137,22 +137,22 @@ it 'should render one multilevel navigation' do
137
137
  "suburl1",
138
138
  "</a>",
139
139
  "</li>",
140
- "</ul>"].join
140
+ "</ul>"].join
141
141
  end
142
142
 
143
143
  it 'should render the exact levels' do
144
144
  @configuration.run do
145
145
  navigate :menu do
146
- item :url1, 'url1', :name => 'url1' do
146
+ item :url1, 'url1', :name => 'url1' do
147
147
  item :suburl1, 'suburl1', :name => 'suburl1' do
148
- item :subsub1, 'subsub1', :name => 'subsub1'
148
+ item :subsub1, 'subsub1', :name => 'subsub1'
149
149
  end
150
- end
151
- item :url2, 'url2', :name => 'url2' do
150
+ end
151
+ item :url2, 'url2', :name => 'url2' do
152
152
  item :suburl2, 'suburl2', :name => 'suburl2' do
153
- item :subsub2, 'subsub2', :name => 'subsub2'
153
+ item :subsub2, 'subsub2', :name => 'subsub2'
154
154
  end
155
- end
155
+ end
156
156
  end
157
157
  end
158
158
 
@@ -182,18 +182,18 @@ it 'should render one multilevel navigation' do
182
182
  "</li>",
183
183
  "</ul>",
184
184
  "</li>",
185
- "</ul>"].join
185
+ "</ul>"].join
186
186
  end
187
187
 
188
188
  it 'should render navigation except some item' do
189
189
  @configuration.run do
190
190
  navigate :menu do
191
- item :url1, 'url1', :name => 'url1' do
191
+ item :url1, 'url1', :name => 'url1' do
192
192
  item :suburl1, 'suburl1', :name => 'suburl1'
193
- end
194
- item :url2, 'url2', :name => 'url2' do
193
+ end
194
+ item :url2, 'url2', :name => 'url2' do
195
195
  item :suburl2, 'suburl2', :name => 'suburl2'
196
- end
196
+ end
197
197
  end
198
198
  end
199
199
 
@@ -211,18 +211,18 @@ it 'should render one multilevel navigation' do
211
211
  "</li>",
212
212
  "</ul>",
213
213
  "</li>",
214
- "</ul>"].join
214
+ "</ul>"].join
215
215
  end
216
216
 
217
217
  it 'should render navigation except some items' do
218
218
  @configuration.run do
219
219
  navigate :menu do
220
- item :url1, 'url1', :name => 'url1' do
220
+ item :url1, 'url1', :name => 'url1' do
221
221
  item :suburl1, 'suburl1', :name => 'suburl1'
222
- end
223
- item :url2, 'url2', :name => 'url2' do
222
+ end
223
+ item :url2, 'url2', :name => 'url2' do
224
224
  item :suburl2, 'suburl2', :name => 'suburl2'
225
- end
225
+ end
226
226
  end
227
227
  end
228
228
 
@@ -235,8 +235,8 @@ it 'should render one multilevel navigation' do
235
235
  "<ul>",
236
236
  "</ul>",
237
237
  "</li>",
238
- "</ul>"].join
239
- end
238
+ "</ul>"].join
239
+ end
240
240
 
241
241
  it 'should render divider' do
242
242
  @configuration.run do
@@ -283,7 +283,7 @@ it 'should render one multilevel navigation' do
283
283
  "item_name",
284
284
  "</a>",
285
285
  "</li>",
286
- "</ul>"].join
286
+ "</ul>"].join
287
287
  end
288
288
 
289
289
  it 'should render node with icon' do
@@ -310,7 +310,7 @@ it 'should render one multilevel navigation' do
310
310
  "</li>",
311
311
  "</ul>",
312
312
  "</li>",
313
- "</ul>"].join
313
+ "</ul>"].join
314
314
  end
315
315
 
316
- end
316
+ end