simple-navigation 2.6.0 → 2.7.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.
- data/CHANGELOG +7 -1
- data/VERSION.yml +1 -1
- data/generators/navigation_config/templates/config/navigation.rb +11 -0
- data/lib/simple_navigation/controller_methods.rb +2 -0
- data/lib/simple_navigation/item.rb +6 -2
- data/lib/simple_navigation/item_container.rb +4 -1
- data/spec/lib/simple_navigation/controller_methods_spec.rb +6 -4
- data/spec/lib/simple_navigation/item_spec.rb +63 -2
- metadata +3 -3
data/CHANGELOG
CHANGED
@@ -1,9 +1,15 @@
|
|
1
|
+
*2.7.0
|
2
|
+
|
3
|
+
* added new option :highlights_on to item definition in config-file. Specify a regexp which is matched against the current_uri to determine if an item is active or not. Replaces explicit highlighting in controllers.
|
4
|
+
* deprecated explicit highlighting in the controllers.
|
5
|
+
|
6
|
+
|
1
7
|
*2.6.0
|
2
8
|
|
3
9
|
* added rendering option 'skip_if_empty' to Renderer::List to avoid rendering of empty ul-tags
|
4
10
|
* added breadcrumbs renderer incl. specs. A big thanks to Markus Schirp.
|
5
11
|
* added ability to register a renderer / specify your renderer as symbol in render_navigation
|
6
|
-
* renderer can be specified in render_navigation. Credits to Andi
|
12
|
+
* renderer can be specified in render_navigation. Credits to Andi Bade from Galaxy Cats.
|
7
13
|
|
8
14
|
*2.5.4
|
9
15
|
|
data/VERSION.yml
CHANGED
@@ -28,6 +28,17 @@ SimpleNavigation::Configuration.run do |navigation|
|
|
28
28
|
# name - will be displayed in the rendered navigation. This can also be a call to your I18n-framework.
|
29
29
|
# url - the address that the generated item links to. You can also use url_helpers (named routes, restful routes helper, url_for etc.)
|
30
30
|
# options - can be used to specify attributes that will be included in the rendered navigation item (e.g. id, class etc.)
|
31
|
+
# some special options that can be set:
|
32
|
+
# :if - Specifies a proc to call to determine if the item should
|
33
|
+
# be rendered (e.g. <tt>:if => Proc.new { current_user.admin? }</tt>). The
|
34
|
+
# proc should evaluate to a true or false value and is evaluated in the context of the view.
|
35
|
+
# :unless - Specifies a proc to call to determine if the item should not
|
36
|
+
# be rendered (e.g. <tt>:unless => Proc.new { current_user.admin? }</tt>). The
|
37
|
+
# proc should evaluate to a true or false value and is evaluated in the context of the view.
|
38
|
+
# :method - Specified the http-method for the generated link - default is :get.
|
39
|
+
# :highlights_on - if autohighlighting is turned off and/or you want to explicitly specify
|
40
|
+
# when the item should be highlighted, you can set a regexp which is matched
|
41
|
+
# against the current URI.
|
31
42
|
#
|
32
43
|
primary.item :key_1, 'name', url, options
|
33
44
|
|
@@ -56,6 +56,7 @@ module SimpleNavigation
|
|
56
56
|
#
|
57
57
|
# The specified symbol must match the keys for your navigation items in your config/navigation.rb file.
|
58
58
|
def navigation(*args)
|
59
|
+
ActiveSupport::Deprecation.warn("Setting the active navigation in the controllers has been deprecated. Please use the new :highlights_on option in the config file for explicit highlighting")
|
59
60
|
self.class_eval do
|
60
61
|
define_method :sn_set_navigation do
|
61
62
|
current_navigation(*args)
|
@@ -72,6 +73,7 @@ module SimpleNavigation
|
|
72
73
|
#
|
73
74
|
# The specified symbol must match the keys for your navigation items in your config/navigation.rb file.
|
74
75
|
def current_navigation(*args)
|
76
|
+
ActiveSupport::Deprecation.warn("Setting the active navigation in the controllers has been deprecated. Please use the new :highlights_on option in the config file for explicit highlighting")
|
75
77
|
@sn_current_navigation_args = args
|
76
78
|
end
|
77
79
|
end
|
@@ -2,7 +2,7 @@ module SimpleNavigation
|
|
2
2
|
|
3
3
|
# Represents an item in your navigation. Gets generated by the item method in the config-file.
|
4
4
|
class Item
|
5
|
-
attr_reader :key, :name, :url, :sub_navigation, :method
|
5
|
+
attr_reader :key, :name, :url, :sub_navigation, :method, :highlights_on
|
6
6
|
attr_writer :html_options
|
7
7
|
|
8
8
|
# see ItemContainer#item
|
@@ -14,6 +14,7 @@ module SimpleNavigation
|
|
14
14
|
@method = options.delete(:method)
|
15
15
|
@name = name
|
16
16
|
@url = url
|
17
|
+
@highlights_on = options.delete(:highlights_on)
|
17
18
|
@html_options = options
|
18
19
|
if sub_nav_block || items
|
19
20
|
@sub_navigation = ItemContainer.new(@container.level + 1)
|
@@ -63,7 +64,10 @@ module SimpleNavigation
|
|
63
64
|
|
64
65
|
# Returns true if the item's url matches the request's current url.
|
65
66
|
def selected_by_url?
|
66
|
-
if
|
67
|
+
if highlights_on
|
68
|
+
raise ArgumentError, ':highlights_on must be a regexp' unless highlights_on.instance_of?(Regexp)
|
69
|
+
SimpleNavigation.template.request.request_uri =~ highlights_on
|
70
|
+
elsif auto_highlight?
|
67
71
|
!!(root_path_match? || (SimpleNavigation.template && SimpleNavigation.template.current_page?(url)))
|
68
72
|
else
|
69
73
|
false
|
@@ -22,13 +22,16 @@ module SimpleNavigation
|
|
22
22
|
# The <tt>url</tt> is the address that the generated item points to. You can also use url_helpers (named routes, restful routes helper, url_for etc.)
|
23
23
|
#
|
24
24
|
# The <tt>options</tt> can be used to specify the following things:
|
25
|
-
# * <tt>html_attributes</tt> - will be included in the rendered navigation item (e.g. id, class etc.)
|
25
|
+
# * <tt>any html_attributes</tt> - will be included in the rendered navigation item (e.g. id, class etc.)
|
26
26
|
# * <tt>:if</tt> - Specifies a proc to call to determine if the item should
|
27
27
|
# be rendered (e.g. <tt>:if => Proc.new { current_user.admin? }</tt>). The
|
28
28
|
# proc should evaluate to a true or false value and is evaluated in the context of the view.
|
29
29
|
# * <tt>:unless</tt> - Specifies a proc to call to determine if the item should not
|
30
30
|
# be rendered (e.g. <tt>:unless => Proc.new { current_user.admin? }</tt>). The
|
31
31
|
# proc should evaluate to a true or false value and is evaluated in the context of the view.
|
32
|
+
# * <tt>:method</tt> - Specified the http-method for the generated link - default is :get.
|
33
|
+
# * <tt>:highlights_on</tt> - if autohighlighting is turned off and/or you want to explicitly specify
|
34
|
+
# when the item should be highlighted, you can set a regexp which is matched againstthe current URI.
|
32
35
|
#
|
33
36
|
# The <tt>block</tt> - if specified - will hold the item's sub_navigation.
|
34
37
|
def item(key, name, url, options={}, &block)
|
@@ -41,8 +41,10 @@ describe SimpleNavigation::ControllerMethods do
|
|
41
41
|
describe 'navigation' do
|
42
42
|
|
43
43
|
def call_navigation(key1, key2=nil)
|
44
|
-
|
45
|
-
|
44
|
+
ActiveSupport::Deprecation.silence do
|
45
|
+
@controller.class_eval do
|
46
|
+
navigation key1, key2
|
47
|
+
end
|
46
48
|
end
|
47
49
|
end
|
48
50
|
|
@@ -74,11 +76,11 @@ describe SimpleNavigation::ControllerMethods do
|
|
74
76
|
|
75
77
|
describe 'current_navigation' do
|
76
78
|
it "should set the sn_current_navigation_args as specified" do
|
77
|
-
@controller.current_navigation(:first)
|
79
|
+
ActiveSupport::Deprecation.silence {@controller.current_navigation(:first)}
|
78
80
|
@controller.instance_variable_get(:@sn_current_navigation_args).should == [:first]
|
79
81
|
end
|
80
82
|
it "should set the sn_current_navigation_args as specified" do
|
81
|
-
@controller.current_navigation(:first, :second)
|
83
|
+
ActiveSupport::Deprecation.silence {@controller.current_navigation(:first, :second)}
|
82
84
|
@controller.instance_variable_get(:@sn_current_navigation_args).should == [:first, :second]
|
83
85
|
end
|
84
86
|
end
|
@@ -45,7 +45,7 @@ describe SimpleNavigation::Item do
|
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
48
|
-
context 'method' do
|
48
|
+
context ':method option' do
|
49
49
|
context 'defined' do
|
50
50
|
before(:each) do
|
51
51
|
@options = {:method => :delete}
|
@@ -65,6 +65,28 @@ describe SimpleNavigation::Item do
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
end
|
68
|
+
|
69
|
+
context ':highlights_on option' do
|
70
|
+
context 'defined' do
|
71
|
+
before(:each) do
|
72
|
+
@highlights_on = stub(:option)
|
73
|
+
@options = {:highlights_on => @highlights_on}
|
74
|
+
@item = SimpleNavigation::Item.new(@item_container, :my_key, 'name', 'url', @options)
|
75
|
+
end
|
76
|
+
it 'should set the method as instance_var' do
|
77
|
+
@item.highlights_on.should == @highlights_on
|
78
|
+
end
|
79
|
+
it 'should set the html-options without the method' do
|
80
|
+
@item.instance_variable_get(:@html_options).key?(:highlights_on).should be_false
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context 'undefined' do
|
85
|
+
it 'should set the instance-var to nil' do
|
86
|
+
@item.highlights_on.should be_nil
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
68
90
|
end
|
69
91
|
|
70
92
|
describe 'selected?' do
|
@@ -181,7 +203,7 @@ describe SimpleNavigation::Item do
|
|
181
203
|
it {@item.html_options[:id].should == 'my_id'}
|
182
204
|
end
|
183
205
|
|
184
|
-
context 'with no id
|
206
|
+
context 'with no id defined in options (using default id)' do
|
185
207
|
before(:each) do
|
186
208
|
@item.html_options = {}
|
187
209
|
end
|
@@ -257,6 +279,45 @@ describe SimpleNavigation::Item do
|
|
257
279
|
end
|
258
280
|
|
259
281
|
describe 'selected_by_url?' do
|
282
|
+
context ':highlights_on option is set' do
|
283
|
+
before(:each) do
|
284
|
+
@item.stub!(:highlights_on => /^\/current/)
|
285
|
+
@template = stub(:template, :request => stub(:request, :request_uri => '/current_url'))
|
286
|
+
SimpleNavigation.stub!(:template => @template)
|
287
|
+
end
|
288
|
+
it "should not check for autohighlighting" do
|
289
|
+
@item.should_not_receive(:auto_highlight?)
|
290
|
+
@item.send(:selected_by_url?)
|
291
|
+
end
|
292
|
+
context ':highlights_on is a regexp' do
|
293
|
+
context 'regexp matches current_url' do
|
294
|
+
it {@item.send(:selected_by_url?).should be_true}
|
295
|
+
end
|
296
|
+
context 'regexp does not match current_url' do
|
297
|
+
before(:each) do
|
298
|
+
@item.stub!(:highlights_on => /^\/no_match/)
|
299
|
+
end
|
300
|
+
it {@item.send(:selected_by_url?).should be_false}
|
301
|
+
end
|
302
|
+
end
|
303
|
+
context ':highlights_on is not a regexp' do
|
304
|
+
before(:each) do
|
305
|
+
@item.stub!(:highlights_on => "not a regexp")
|
306
|
+
end
|
307
|
+
it "should raise an error" do
|
308
|
+
lambda {@item.send(:selected_by_url?).should raise_error(ArgumentError)}
|
309
|
+
end
|
310
|
+
end
|
311
|
+
end
|
312
|
+
context ':highlights_on option is not set' do
|
313
|
+
before(:each) do
|
314
|
+
@item.stub!(:highlights_on => nil)
|
315
|
+
end
|
316
|
+
it "should check for autohighlighting" do
|
317
|
+
@item.should_receive(:auto_highlight?)
|
318
|
+
@item.send(:selected_by_url?)
|
319
|
+
end
|
320
|
+
end
|
260
321
|
context 'auto_highlight is turned on' do
|
261
322
|
before(:each) do
|
262
323
|
@item.stub!(:auto_highlight? => true)
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 2
|
7
|
-
-
|
7
|
+
- 7
|
8
8
|
- 0
|
9
|
-
version: 2.
|
9
|
+
version: 2.7.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Andi Schacke
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-07-30 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|