simple-navigation 2.7.3 → 3.0.0.beta1

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 (46) hide show
  1. data/CHANGELOG +14 -4
  2. data/README +1 -2
  3. data/Rakefile +1 -0
  4. data/VERSION.yml +4 -4
  5. data/generators/navigation_config/templates/config/navigation.rb +14 -14
  6. data/lib/simple_navigation.rb +69 -151
  7. data/lib/simple_navigation/adapters.rb +9 -0
  8. data/lib/simple_navigation/adapters/base.rb +37 -0
  9. data/lib/simple_navigation/adapters/padrino.rb +20 -0
  10. data/lib/simple_navigation/adapters/rails.rb +93 -0
  11. data/lib/simple_navigation/adapters/sinatra.rb +76 -0
  12. data/lib/simple_navigation/core.rb +5 -0
  13. data/lib/simple_navigation/{configuration.rb → core/configuration.rb} +14 -19
  14. data/lib/simple_navigation/{item.rb → core/item.rb} +10 -11
  15. data/lib/simple_navigation/{item_adapter.rb → core/item_adapter.rb} +11 -7
  16. data/lib/simple_navigation/{item_container.rb → core/item_container.rb} +14 -21
  17. data/lib/simple_navigation/{items_provider.rb → core/items_provider.rb} +7 -7
  18. data/lib/simple_navigation/{controller_methods.rb → rails_controller_methods.rb} +67 -5
  19. data/lib/simple_navigation/rendering.rb +10 -0
  20. data/lib/simple_navigation/{helpers.rb → rendering/helpers.rb} +16 -18
  21. data/lib/simple_navigation/{renderer → rendering/renderer}/base.rb +20 -37
  22. data/lib/simple_navigation/{renderer → rendering/renderer}/breadcrumbs.rb +7 -7
  23. data/lib/simple_navigation/{renderer → rendering/renderer}/links.rb +7 -7
  24. data/lib/simple_navigation/{renderer → rendering/renderer}/list.rb +6 -6
  25. data/rails/init.rb +1 -5
  26. data/spec/lib/simple_navigation/adapters/padrino_spec.rb +29 -0
  27. data/spec/lib/simple_navigation/adapters/rails_spec.rb +269 -0
  28. data/spec/lib/simple_navigation/adapters/sinatra_spec.rb +60 -0
  29. data/spec/lib/simple_navigation/{configuration_spec.rb → core/configuration_spec.rb} +7 -18
  30. data/spec/lib/simple_navigation/{item_adapter_spec.rb → core/item_adapter_spec.rb} +11 -11
  31. data/spec/lib/simple_navigation/{item_container_spec.rb → core/item_container_spec.rb} +29 -46
  32. data/spec/lib/simple_navigation/{item_spec.rb → core/item_spec.rb} +30 -64
  33. data/spec/lib/simple_navigation/{items_provider_spec.rb → core/items_provider_spec.rb} +7 -7
  34. data/spec/lib/simple_navigation/rails_controller_methods_spec.rb +251 -0
  35. data/spec/lib/simple_navigation/{helpers_spec.rb → rendering/helpers_spec.rb} +34 -53
  36. data/spec/lib/simple_navigation/{renderer → rendering/renderer}/base_spec.rb +11 -62
  37. data/spec/lib/simple_navigation/{renderer → rendering/renderer}/breadcrumbs_spec.rb +9 -51
  38. data/spec/lib/simple_navigation/rendering/renderer/links_spec.rb +59 -0
  39. data/spec/lib/simple_navigation/{renderer → rendering/renderer}/list_spec.rb +17 -58
  40. data/spec/lib/simple_navigation_spec.rb +51 -298
  41. data/spec/spec_helper.rb +16 -5
  42. metadata +67 -48
  43. data/lib/simple_navigation/initializer.rb +0 -21
  44. data/lib/simple_navigation/railtie.rb +0 -7
  45. data/spec/lib/simple_navigation/controller_methods_spec.rb +0 -90
  46. data/spec/lib/simple_navigation/renderer/links_spec.rb +0 -121
@@ -1,19 +1,19 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper'
1
+ require File.dirname(__FILE__) + '/../../../../spec_helper'
2
2
  require 'html/document' unless defined? HTML::Document
3
3
 
4
4
  describe SimpleNavigation::Renderer::Breadcrumbs do
5
-
5
+
6
6
  describe 'render' do
7
-
7
+
8
8
  def render(current_nav=nil, options={:level => :all})
9
9
  primary_navigation = primary_container
10
10
  select_item(current_nav) if current_nav
11
- @renderer = SimpleNavigation::Renderer::Breadcrumbs.new(options)
11
+ setup_renderer_for SimpleNavigation::Renderer::Breadcrumbs, :rails, options
12
12
  HTML::Document.new(@renderer.render(primary_navigation)).root
13
13
  end
14
-
14
+
15
15
  context 'regarding result' do
16
-
16
+
17
17
  it "should render a div-tag around the items" do
18
18
  HTML::Selector.new('div').select(render).should have(1).entries
19
19
  end
@@ -29,7 +29,7 @@ describe SimpleNavigation::Renderer::Breadcrumbs do
29
29
  HTML::Selector.new('div a').select(render).should have(0).entries
30
30
  end
31
31
  end
32
-
32
+
33
33
  context 'with current_navigation set' do
34
34
  before :all do
35
35
  @selection = HTML::Selector.new('div a').select(render(:invoices))
@@ -46,55 +46,13 @@ describe SimpleNavigation::Renderer::Breadcrumbs do
46
46
  end
47
47
  end
48
48
  end
49
-
50
-
49
+
50
+
51
51
  context 'nested sub_navigation' do
52
52
  it "should add an a tag for each selected item" do
53
53
  HTML::Selector.new('div a').select(render(:subnav1)).should have(2).entries
54
54
  end
55
55
  end
56
56
  end
57
-
58
- context 'regarding method calls' do
59
-
60
- context 'regarding the list_content' do
61
- before(:each) do
62
- @primary_navigation = primary_container
63
- @list_content = stub(:list_content)
64
- @list_items = stub(:list_items, :join => @list_content)
65
- @items.stub!(:inject => @list_items)
66
- @renderer = SimpleNavigation::Renderer::Breadcrumbs.new(options)
67
- end
68
-
69
- it "should join the list_items" do
70
- @list_items.should_receive(:join)
71
- end
72
-
73
- it "should html_saferize the list_content" do
74
- @renderer.should_receive(:html_safe).with(@list_content)
75
- end
76
-
77
- after(:each) do
78
- @renderer.render(@primary_navigation)
79
- end
80
- end
81
-
82
- context 'regarding the items' do
83
- before(:each) do
84
- @primary_navigation = primary_container
85
- select_item(:invoices)
86
- @renderer = SimpleNavigation::Renderer::Breadcrumbs.new(options)
87
- end
88
-
89
- it "should call html_safe on every rendered item's name" do
90
- @items.each do |item|
91
- @renderer.should_receive(:html_safe).with(item.name) if item.selected?
92
- end
93
- @renderer.should_receive(:html_safe).with(anything).twice()
94
- @renderer.render(@primary_navigation)
95
- end
96
- end
97
-
98
- end
99
57
  end
100
58
  end
@@ -0,0 +1,59 @@
1
+ require File.dirname(__FILE__) + '/../../../../spec_helper'
2
+ require 'html/document' unless defined? HTML::Document
3
+
4
+ describe SimpleNavigation::Renderer::Links do
5
+
6
+
7
+ describe 'render' do
8
+
9
+
10
+ def render(current_nav=nil, options={:level => :all})
11
+ primary_navigation = primary_container
12
+ select_item(current_nav) if current_nav
13
+ setup_renderer_for SimpleNavigation::Renderer::Links, :rails, options
14
+ HTML::Document.new(@renderer.render(primary_navigation)).root
15
+ end
16
+
17
+ context 'regarding result' do
18
+
19
+ it "should render a div-tag around the items" do
20
+ HTML::Selector.new('div').select(render).should have(1).entries
21
+ end
22
+ it "the rendered div-tag should have the specified dom_id" do
23
+ HTML::Selector.new('div#nav_dom_id').select(render).should have(1).entries
24
+ end
25
+ it "the rendered div-tag should have the specified class" do
26
+ HTML::Selector.new('div.nav_dom_class').select(render).should have(1).entries
27
+ end
28
+ it "should render an a-tag for each item" do
29
+ HTML::Selector.new('a').select(render).should have(3).entries
30
+ end
31
+ it "should pass the specified html_options to the a element" do
32
+ HTML::Selector.new('a[style=float:right]').select(render).should have(1).entries
33
+ end
34
+ it "should give the a-tag the id specified in the html_options" do
35
+ HTML::Selector.new('a#my_id').select(render).should have(1).entries
36
+ end
37
+ it "should give the a-tag the default id (stringified key) if no id is specified in the html_options" do
38
+ HTML::Selector.new('a#invoices').select(render).should have(1).entries
39
+ end
40
+ it "should not apply the the default id where there is an id specified in the html_options" do
41
+ HTML::Selector.new('a#users').select(render).should be_empty
42
+ end
43
+
44
+ context 'with current_navigation set' do
45
+ it "should mark the matching a-item as selected (with the css_class specified in configuration)" do
46
+ HTML::Selector.new('a.selected').select(render(:invoices)).should have(1).entries
47
+ end
48
+ end
49
+
50
+ context 'without current_navigation set' do
51
+ it "should not mark any of the items as selected" do
52
+ HTML::Selector.new('a.selected').select(render).should be_empty
53
+ end
54
+ end
55
+
56
+ end
57
+
58
+ end
59
+ end
@@ -1,19 +1,19 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper'
1
+ require File.dirname(__FILE__) + '/../../../../spec_helper'
2
2
  require 'html/document' unless defined? HTML::Document
3
3
 
4
4
  describe SimpleNavigation::Renderer::List do
5
-
5
+
6
6
  describe 'render' do
7
-
7
+
8
8
  def render(current_nav=nil, options={:level => :all})
9
9
  primary_navigation = primary_container
10
10
  select_item(current_nav) if current_nav
11
- @renderer = SimpleNavigation::Renderer::List.new(options)
11
+ setup_renderer_for SimpleNavigation::Renderer::List, :rails, options
12
12
  HTML::Document.new(@renderer.render(primary_navigation)).root
13
13
  end
14
-
14
+
15
15
  context 'regarding result' do
16
-
16
+
17
17
  it "should render a ul-tag around the items" do
18
18
  HTML::Selector.new('ul').select(render).should have(1).entries
19
19
  end
@@ -41,7 +41,7 @@ describe SimpleNavigation::Renderer::List do
41
41
  it "should not apply the the default id where there is an id specified in the html_options" do
42
42
  HTML::Selector.new('ul li#users').select(render).should be_empty
43
43
  end
44
-
44
+
45
45
  context 'with current_navigation set' do
46
46
  it "should mark the matching li-item as selected (with the css_class specified in configuration)" do
47
47
  HTML::Selector.new('li.selected').select(render(:invoices)).should have(1).entries
@@ -49,9 +49,9 @@ describe SimpleNavigation::Renderer::List do
49
49
  it "should also mark the links inside the selected li's as selected" do
50
50
  HTML::Selector.new('li.selected a.selected').select(render(:invoices)).should have(1).entries
51
51
  end
52
-
52
+
53
53
  end
54
-
54
+
55
55
  context 'without current_navigation set' do
56
56
  it "should not mark any of the items as selected" do
57
57
  HTML::Selector.new('li.selected').select(render).should be_empty
@@ -60,7 +60,7 @@ describe SimpleNavigation::Renderer::List do
60
60
  HTML::Selector.new('a.selected').select(render).should be_empty
61
61
  end
62
62
  end
63
-
63
+
64
64
  context 'nested sub_navigation' do
65
65
  it "should nest the current_primary's subnavigation inside the selected li-element" do
66
66
  HTML::Selector.new('li.selected ul li').select(render(:invoices)).should have(2).entries
@@ -74,23 +74,23 @@ describe SimpleNavigation::Renderer::List do
74
74
  HTML::Selector.new('#invoices #subnav2').select(render(:users, :level => :all, :expand_all => false)).should be_empty
75
75
  end
76
76
  end
77
-
77
+
78
78
  context 'expand_all => true' do
79
79
  it "should render the invoices submenu even if the user-primary is active" do
80
80
  HTML::Selector.new('#invoices #subnav1').select(render(:users, :level => :all, :expand_all => true)).should have(1).entry
81
81
  HTML::Selector.new('#invoices #subnav2').select(render(:users, :level => :all, :expand_all => true)).should have(1).entry
82
82
  end
83
83
  end
84
-
84
+
85
85
  end
86
-
86
+
87
87
  context 'skip_if_empty' do
88
-
88
+
89
89
  def render_container(options={})
90
- @renderer = SimpleNavigation::Renderer::List.new(options)
90
+ setup_renderer_for SimpleNavigation::Renderer::List, :rails, options
91
91
  HTML::Document.new(@renderer.render(@container)).root
92
92
  end
93
-
93
+
94
94
  context 'container is empty' do
95
95
  before(:each) do
96
96
  @container = SimpleNavigation::ItemContainer.new(0)
@@ -106,7 +106,7 @@ describe SimpleNavigation::Renderer::List do
106
106
  end
107
107
  end
108
108
  end
109
-
109
+
110
110
  context 'container is not empty' do
111
111
  before(:each) do
112
112
  @container = primary_container
@@ -125,46 +125,5 @@ describe SimpleNavigation::Renderer::List do
125
125
  end
126
126
  end
127
127
 
128
- context 'regarding method calls' do
129
-
130
- context 'regarding the list_content' do
131
- before(:each) do
132
- @primary_navigation = primary_container
133
- @list_content = stub(:list_content)
134
- @list_items = stub(:list_items, :join => @list_content)
135
- @items.stub!(:inject => @list_items)
136
- @renderer = SimpleNavigation::Renderer::List.new(options)
137
- end
138
-
139
- it "should join the list_items" do
140
- @list_items.should_receive(:join)
141
- end
142
-
143
- it "should html_saferize the list_content" do
144
- @renderer.should_receive(:html_safe).with(@list_content)
145
- end
146
-
147
- after(:each) do
148
- @renderer.render(@primary_navigation)
149
- end
150
- end
151
-
152
- context 'regarding the items' do
153
- before(:each) do
154
- @primary_navigation = primary_container
155
- @renderer = SimpleNavigation::Renderer::List.new(options)
156
- end
157
-
158
- it "should call html_safe on every item's name" do
159
- @items.each do |item|
160
- @renderer.should_receive(:html_safe).with(item.name)
161
- end
162
- @renderer.should_receive(:html_safe).with(anything)
163
- @renderer.render(@primary_navigation)
164
- end
165
- end
166
-
167
- end
168
-
169
128
  end
170
129
  end
@@ -1,7 +1,11 @@
1
1
  require File.dirname(__FILE__) + '/../spec_helper'
2
2
 
3
3
  describe SimpleNavigation do
4
-
4
+
5
+ before(:each) do
6
+ SimpleNavigation.config_file_path = 'path_to_config'
7
+ end
8
+
5
9
  describe 'config_file_name' do
6
10
  context 'for :default navigation_context' do
7
11
  it "should return the name of the default config file" do
@@ -18,33 +22,6 @@ describe SimpleNavigation do
18
22
  end
19
23
  end
20
24
 
21
- describe 'config_file_paths_sentence' do
22
- context 'no paths are set' do
23
- before(:each) do
24
- SimpleNavigation.config_file_paths = []
25
- end
26
- it {SimpleNavigation.config_file_paths_sentence.should == ''}
27
- end
28
- context 'one path is set' do
29
- before(:each) do
30
- SimpleNavigation.config_file_paths = ['first_path']
31
- end
32
- it {SimpleNavigation.config_file_paths_sentence.should == 'first_path'}
33
- end
34
- context 'two paths are set' do
35
- before(:each) do
36
- SimpleNavigation.config_file_paths = ['first_path', 'second_path']
37
- end
38
- it {SimpleNavigation.config_file_paths_sentence.should == 'first_path or second_path'}
39
- end
40
- context 'three pahts are set' do
41
- before(:each) do
42
- SimpleNavigation.config_file_paths = ['first_path', 'second_path', 'third_path']
43
- end
44
- it {SimpleNavigation.config_file_paths_sentence.should == 'first_path, second_path, or third_path'}
45
- end
46
- end
47
-
48
25
  describe 'config_file_path=' do
49
26
  before(:each) do
50
27
  SimpleNavigation.config_file_paths = ['existing_path']
@@ -122,161 +99,19 @@ describe SimpleNavigation do
122
99
  it {SimpleNavigation.config_file?.should be_false}
123
100
  end
124
101
  end
125
-
126
- describe 'set_template_from' do
127
- before(:each) do
128
- @context = stub :context
129
- SimpleNavigation.stub!(:extract_controller_from => @controller)
130
- end
131
- context 'regarding setting the controller' do
132
- it "should set the controller" do
133
- @controller = Object.new
134
- SimpleNavigation.should_receive(:extract_controller_from).with(@context).and_return(@controller)
135
- SimpleNavigation.should_receive(:controller=).with(@controller)
136
- SimpleNavigation.set_template_from @context
137
- end
138
- end
139
- context 'regarding setting the template' do
140
- before(:each) do
141
- @template = stub :template
142
- @controller = Object.new
143
- SimpleNavigation.stub!(:controller => @controller)
144
- end
145
- context 'template is stored in controller as instance_var (Rails2)' do
146
- context 'template is set' do
147
- before(:each) do
148
- @controller.stub!(:instance_variable_get => @template)
149
- end
150
- it {SimpleNavigation.should_receive(:template=).with(@template)}
151
- end
152
- context 'template is not set' do
153
- before(:each) do
154
- @controller.stub!(:instance_variable_get => nil)
155
- end
156
- it {SimpleNavigation.should_receive(:template=).with(nil)}
157
- end
158
- end
159
- context 'template is stored in controller as view_context (Rails3)' do
160
- context 'template is set' do
161
- before(:each) do
162
- @controller.stub!(:view_context => @template)
163
- end
164
- it {SimpleNavigation.should_receive(:template=).with(@template)}
165
- end
166
- context 'template is not set' do
167
- before(:each) do
168
- @controller.stub!(:view_context => nil)
169
- end
170
- it {SimpleNavigation.should_receive(:template=).with(nil)}
171
- end
172
- end
173
- after(:each) do
174
- SimpleNavigation.set_template_from @context
175
- end
176
-
177
- end
178
- end
179
-
180
- describe 'self.init_rails' do
181
- before(:each) do
182
- SimpleNavigation.config_file_paths = []
183
- SimpleNavigation.stub!(:default_config_file_path => 'default_path')
184
- ActionController::Base.stub!(:include)
185
- end
186
- context 'SimpleNavigation.config_file_path is already set' do
187
- before(:each) do
188
- SimpleNavigation.config_file_path = 'my_path'
189
- end
190
- it "should have both the default_path and the new path" do
191
- SimpleNavigation.init_rails
192
- SimpleNavigation.config_file_paths.should == ['my_path', 'default_path']
193
- end
194
- end
195
- context 'SimpleNavigation.config_file_paths are not set' do
196
- it "should set the config_file_path to the default" do
197
- SimpleNavigation.init_rails
198
- SimpleNavigation.config_file_paths.should == ['default_path']
199
- end
200
- end
201
- it "should extend the ActionController::Base" do
202
- ActionController::Base.should_receive(:include).with(SimpleNavigation::ControllerMethods)
203
- SimpleNavigation.init_rails
204
- end
205
- end
206
102
 
207
103
  describe 'self.default_config_file_path' do
208
- it {SimpleNavigation.default_config_file_path.should == './config'}
209
- end
210
-
211
- describe 'self.extract_controller_from' do
212
104
  before(:each) do
213
- @nav_context = stub(:nav_context)
214
- end
215
-
216
- context 'object responds to controller' do
217
- before(:each) do
218
- @controller = stub(:controller)
219
- @nav_context.stub!(:controller).and_return(@controller)
220
- end
221
-
222
- it "should return the controller" do
223
- SimpleNavigation.send(:extract_controller_from, @nav_context).should == @controller
224
- end
225
-
226
- end
227
-
228
- context 'object does not respond to controller' do
229
- it "should return the nav_context" do
230
- SimpleNavigation.send(:extract_controller_from, @nav_context).should == @nav_context
231
- end
232
- end
233
- end
234
-
235
- describe 'context_for_eval' do
236
- context 'controller is present' do
237
- before(:each) do
238
- @controller = stub(:controller)
239
- SimpleNavigation.stub!(:controller => @controller)
240
- end
241
- context 'template is present' do
242
- before(:each) do
243
- @template = stub(:template)
244
- SimpleNavigation.stub!(:template => @template)
245
- end
246
- it {SimpleNavigation.context_for_eval.should == @template}
247
- end
248
- context 'template is not present' do
249
- before(:each) do
250
- SimpleNavigation.stub!(:template => nil)
251
- end
252
- it {SimpleNavigation.context_for_eval.should == @controller}
253
- end
254
- end
255
- context 'controller is not present' do
256
- before(:each) do
257
- SimpleNavigation.stub!(:controller => nil)
258
- end
259
- context 'template is present' do
260
- before(:each) do
261
- @template = stub(:template)
262
- SimpleNavigation.stub!(:template => @template)
263
- end
264
- it {SimpleNavigation.context_for_eval.should == @template}
265
- end
266
- context 'template is not present' do
267
- before(:each) do
268
- SimpleNavigation.stub!(:template => nil)
269
- end
270
- it {lambda {SimpleNavigation.context_for_eval}.should raise_error}
271
- end
105
+ SimpleNavigation.stub!(:root => 'root')
272
106
  end
107
+ it {SimpleNavigation.default_config_file_path.should == 'root/config'}
273
108
  end
274
109
 
275
110
  describe 'regarding renderers' do
276
111
  it "should have registered the builtin renderers by default" do
277
112
  SimpleNavigation.registered_renderers.should_not be_empty
278
113
  end
279
-
114
+
280
115
  describe 'register_renderer' do
281
116
  before(:each) do
282
117
  @renderer = stub(:renderer)
@@ -286,9 +121,25 @@ describe SimpleNavigation do
286
121
  SimpleNavigation.registered_renderers[:my_renderer].should == @renderer
287
122
  end
288
123
  end
289
-
124
+
290
125
  end
291
126
 
127
+ describe 'set_env' do
128
+ before(:each) do
129
+ SimpleNavigation.config_file_paths = []
130
+ SimpleNavigation.stub!(:default_config_file_path => 'default_path')
131
+ SimpleNavigation.set_env('root', 'my_env')
132
+ end
133
+ it "should set the root" do
134
+ SimpleNavigation.root.should == 'root'
135
+ end
136
+ it "should set the environment" do
137
+ SimpleNavigation.environment.should == 'my_env'
138
+ end
139
+ it "should add the default-config path to the list of config_file_paths" do
140
+ SimpleNavigation.config_file_paths.should == ['default_path']
141
+ end
142
+ end
292
143
 
293
144
  describe 'load_config' do
294
145
  context 'config_file_path is set' do
@@ -340,9 +191,9 @@ describe SimpleNavigation do
340
191
  SimpleNavigation.config_file_path = 'path_to_config'
341
192
  File.stub!(:exists? => true)
342
193
  end
343
- context "RAILS_ENV undefined" do
194
+ context "environment undefined" do
344
195
  before(:each) do
345
- SimpleNavigation.rails_env = nil
196
+ SimpleNavigation.stub!(:environment => nil)
346
197
  end
347
198
  it "should load the config file twice" do
348
199
  IO.should_receive(:read).twice
@@ -350,11 +201,11 @@ describe SimpleNavigation do
350
201
  SimpleNavigation.load_config
351
202
  end
352
203
  end
353
- context "RAILS_ENV defined" do
204
+ context "environment defined" do
354
205
  before(:each) do
355
- SimpleNavigation.rails_env = 'production'
206
+ SimpleNavigation.stub!(:environment => 'production')
356
207
  end
357
- context "RAILS_ENV=production" do
208
+ context "environment=production" do
358
209
  it "should load the config file only once" do
359
210
  IO.should_receive(:read).once
360
211
  SimpleNavigation.load_config
@@ -362,9 +213,9 @@ describe SimpleNavigation do
362
213
  end
363
214
  end
364
215
 
365
- context "RAILS_ENV=development" do
216
+ context "environment=development" do
366
217
  before(:each) do
367
- SimpleNavigation.rails_env = 'development'
218
+ SimpleNavigation.stub!(:environment => 'development')
368
219
  end
369
220
  it "should load the config file twice" do
370
221
  IO.should_receive(:read).twice
@@ -373,9 +224,9 @@ describe SimpleNavigation do
373
224
  end
374
225
  end
375
226
 
376
- context "RAILS_ENV=test" do
227
+ context "environment=test" do
377
228
  before(:each) do
378
- SimpleNavigation.rails_env = 'test'
229
+ SimpleNavigation.stub!(:environment => 'test')
379
230
  end
380
231
  it "should load the config file twice" do
381
232
  IO.should_receive(:read).twice
@@ -390,59 +241,10 @@ describe SimpleNavigation do
390
241
  end
391
242
  end
392
243
 
393
- describe 'request' do
394
- context 'template is set' do
395
- before(:each) do
396
- @request = stub(:request)
397
- SimpleNavigation.stub!(:template => stub(:template, :request => @request))
398
- end
399
- it {SimpleNavigation.request.should == @request}
400
- end
401
- context 'template is not set' do
402
- it {SimpleNavigation.request.should be_nil}
403
- end
404
- end
405
-
406
- describe 'request_uri' do
407
- context 'request is set' do
408
- context 'fullpath is defined on request' do
409
- before(:each) do
410
- @request = stub(:request, :fullpath => '/fullpath')
411
- SimpleNavigation.stub!(:request => @request)
412
- end
413
- it {SimpleNavigation.request_uri.should == '/fullpath'}
414
- end
415
- context 'fullpath is not defined on request' do
416
- before(:each) do
417
- @request = stub(:request, :request_uri => '/request_uri')
418
- SimpleNavigation.stub!(:request => @request)
419
- end
420
- it {SimpleNavigation.request_uri.should == '/request_uri'}
421
- end
422
- end
423
- context 'request is not set' do
424
- before(:each) do
425
- SimpleNavigation.stub!(:request => nil)
426
- end
427
- it {SimpleNavigation.request_uri.should == ''}
428
- end
429
- end
430
-
431
244
  describe 'config' do
432
245
  it {SimpleNavigation.config.should == SimpleNavigation::Configuration.instance}
433
246
  end
434
247
 
435
- describe 'current_navigation_for' do
436
- before(:each) do
437
- @controller = stub(:controller)
438
- SimpleNavigation.stub!(:controller => @controller)
439
- end
440
- it "should access the correct instance_var in the controller" do
441
- @controller.should_receive(:instance_variable_get).with(:@sn_current_navigation_1)
442
- SimpleNavigation.current_navigation_for(1)
443
- end
444
- end
445
-
446
248
  describe 'active_item_container_for' do
447
249
  before(:each) do
448
250
  @primary = stub(:primary)
@@ -472,77 +274,28 @@ describe SimpleNavigation do
472
274
  end
473
275
  end
474
276
 
475
- describe 'handle_explicit_navigation' do
476
- def args(*args)
477
- SimpleNavigation.stub!(:explicit_navigation_args => args.compact.empty? ? nil : args)
478
- end
479
-
480
- before(:each) do
481
- @controller = stub(:controller)
482
- SimpleNavigation.stub!(:controller => @controller)
483
- end
484
-
485
- context 'with explicit navigation set' do
486
- context 'list of navigations' do
487
- before(:each) do
488
- args :first, :second, :third
489
- end
490
- it "should set the correct instance var in the controller" do
491
- @controller.should_receive(:instance_variable_set).with(:@sn_current_navigation_3, :third)
492
- SimpleNavigation.handle_explicit_navigation
493
- end
494
- end
495
- context 'single navigation' do
496
- context 'specified key is a valid navigation item' do
497
- before(:each) do
498
- @primary = stub(:primary, :level_for_item => 2)
499
- SimpleNavigation.stub!(:primary_navigation => @primary)
500
- args :key
501
- end
502
- it "should set the correct instance var in the controller" do
503
- @controller.should_receive(:instance_variable_set).with(:@sn_current_navigation_2, :key)
504
- SimpleNavigation.handle_explicit_navigation
505
- end
506
- end
507
- context 'specified key is an invalid navigation item' do
508
- before(:each) do
509
- @primary = stub(:primary, :level_for_item => nil)
510
- SimpleNavigation.stub!(:primary_navigation => @primary)
511
- args :key
512
- end
513
- it "should not raise an ArgumentError" do
514
- lambda {SimpleNavigation.handle_explicit_navigation}.should_not raise_error(ArgumentError)
515
- end
516
- end
517
- end
518
- context 'hash with level' do
519
- before(:each) do
520
- args :level_2 => :key
521
- end
522
- it "should set the correct instance var in the controller" do
523
- @controller.should_receive(:instance_variable_set).with(:@sn_current_navigation_2, :key)
524
- SimpleNavigation.handle_explicit_navigation
525
- end
526
- end
527
- context 'hash with multiple_levels' do
528
- before(:each) do
529
- args :level_2 => :key, :level_1 => :bla
530
- end
531
- it "should set the correct instance var in the controller" do
532
- @controller.should_receive(:instance_variable_set).with(:@sn_current_navigation_2, :key)
533
- SimpleNavigation.handle_explicit_navigation
534
- end
277
+ describe 'load_adapter' do
278
+ context 'Rails' do
279
+ before(:each) do
280
+ SimpleNavigation.stub!(:framework => :rails)
281
+ SimpleNavigation.load_adapter
535
282
  end
283
+ it {SimpleNavigation.adapter_class.should == SimpleNavigation::Adapters::Rails}
536
284
  end
537
- context 'without explicit navigation set' do
285
+ context 'Padrino' do
538
286
  before(:each) do
539
- args nil
287
+ SimpleNavigation.stub!(:framework => :padrino)
288
+ SimpleNavigation.load_adapter
540
289
  end
541
- it "should not set the current_navigation instance var in the controller" do
542
- @controller.should_not_receive(:instance_variable_set)
543
- SimpleNavigation.handle_explicit_navigation
290
+ it {SimpleNavigation.adapter_class.should == SimpleNavigation::Adapters::Padrino}
291
+ end
292
+ context 'Sinatra' do
293
+ before(:each) do
294
+ SimpleNavigation.stub!(:framework => :sinatra)
295
+ SimpleNavigation.load_adapter
544
296
  end
297
+ it {SimpleNavigation.adapter_class.should == SimpleNavigation::Adapters::Sinatra}
545
298
  end
546
299
  end
547
-
300
+
548
301
  end