xebec 2.6.1 → 2.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -13,6 +13,19 @@ module Xebec
13
13
  #
14
14
  # @see Xebec::NavBarRenderer
15
15
  attr_accessor :renderer_class
16
+
17
+ # Chooses the behavior of NavBarRenderers when dealing with
18
+ # the current item. By default, they are rendered in a span
19
+ # tag; however, if this flag is set to true, they will be
20
+ # rendered as links (as they would be if they weren't the
21
+ # current item). Even with this flag set, the current item
22
+ # will still get the CSS class set by
23
+ # currently_selected_nav_item_class.
24
+ #
25
+ # This setting can be overridden on a per-navbar basis.
26
+ #
27
+ # @see Xebec::NavBar#current_is_link
28
+ attr_accessor :current_is_link
16
29
 
17
30
  end
18
31
  self.currently_selected_nav_item_class = :current
@@ -10,6 +10,7 @@ module Xebec
10
10
  attr_reader :items
11
11
  attr_reader :html_attributes
12
12
  attr_accessor :current
13
+ attr_accessor :current_is_link
13
14
 
14
15
  # Create a new NavBar object.
15
16
  #
@@ -21,20 +22,22 @@ module Xebec
21
22
  @html_attributes = html_attributes || {}
22
23
  @items = []
23
24
  @current = nil
25
+ @current_is_link = Xebec.current_is_link
24
26
  end
25
27
 
26
28
  # Add a navigation item to this bar.
27
29
  #
28
30
  # @param [String, Symbol] name the name of the item
29
31
  # @param [String, Proc] href the URL of the item; optional
32
+ # @param [Hash] html_options additional html_options to be passed to link_to
30
33
  #
31
34
  # To customize the link text, set the internationalization key
32
35
  # <tt>navbar.{{nav bar name}}.{{nav item name}}</tt>.
33
36
  #
34
37
  # @see Xebec::NavBarHelper#nav_bar
35
38
  # @see Xebec::NavBarProxy#to_s
36
- def nav_item(name, href = nil)
37
- items << Xebec::NavItem.new(name, href)
39
+ def nav_item(name, href = nil, html_options = {})
40
+ items << Xebec::NavItem.new(name, href, html_options)
38
41
  end
39
42
 
40
43
  def empty?
@@ -94,10 +94,10 @@ module Xebec
94
94
  klass = '' << item.name.to_s
95
95
  klass << " #{Xebec.currently_selected_nav_item_class}" if is_current
96
96
  helper.content_tag(*list_item_tag(item, klass, text, href, is_current)) do
97
- if is_current
97
+ if is_current && !bar.current_is_link
98
98
  helper.content_tag :span, text
99
99
  else
100
- helper.link_to text, href
100
+ helper.link_to text, href, item.html_options
101
101
  end
102
102
  end
103
103
  end
@@ -2,18 +2,19 @@ module Xebec
2
2
 
3
3
  class NavItem
4
4
 
5
- attr_reader :name, :href
5
+ attr_reader :name, :href, :html_options
6
6
 
7
7
  # Create a new navigation item.
8
8
  #
9
9
  # @param [String, Symbol] name the name of the item
10
10
  # @param [String, Hash, ActiveRecord::Base] href whither the navigation item links;
11
11
  # defaults to the named route, "#{name}_path"
12
+ # @param [Hash] html_options to be passed to the link_to helper method
12
13
  #
13
14
  # @see ActionView::Helpers::UrlHelper#url_for
14
- def initialize(name, href = nil)
15
+ def initialize(name, href = nil, html_options = {})
15
16
  raise ArgumentError.new("#{name || '<nil>'} is not a valid name for a navigation item") if name.blank?
16
- @name, @href = name, href
17
+ @name, @href, @html_options = name, href, html_options
17
18
  end
18
19
 
19
20
  end
@@ -156,6 +156,19 @@ class NavBarRendererTest < Test::Unit::TestCase
156
156
  end
157
157
  end
158
158
  end
159
+
160
+ context 'with a NavBar that has a navigation item with html_options' do
161
+ setup do
162
+ @bar.nav_item :foo, 'http://foo.com', :method => :delete
163
+ end
164
+ should 'render a navigation bar with the appropriate items' do
165
+ assert_select_from @renderer.to_s, 'ul' do
166
+ assert_select 'li.foo' do
167
+ assert_select 'a[href="http://foo.com"][data-method=delete]', 'Foo'
168
+ end
169
+ end
170
+ end
171
+ end
159
172
 
160
173
  context 'with a NavBar that has a navigation item that links to the current page' do
161
174
  setup do
@@ -182,6 +195,26 @@ class NavBarRendererTest < Test::Unit::TestCase
182
195
  assert_select 'li.home.current span', 'Home'
183
196
  end
184
197
  end
198
+
199
+ context 'with current_is_link set' do
200
+ setup do
201
+ @bar.current_is_link = true
202
+ end
203
+
204
+ should 'render all items as links' do
205
+ assert_select_from @renderer.to_s, 'ul' do
206
+ assert_select 'li.home.current', 'Home' do
207
+ assert_select 'a', 1
208
+ end
209
+ end
210
+
211
+ assert_select_from @renderer.to_s, 'ul' do
212
+ assert_select 'li.sign_up' do
213
+ assert_select 'a[href="/sign_up"]', 'Sign Up'
214
+ end
215
+ end
216
+ end
217
+ end
185
218
  end
186
219
 
187
220
  context "with a NavBar that has a navigation item with an i18n'd title" do
@@ -16,6 +16,10 @@ class NavBarTest < Test::Unit::TestCase
16
16
  should 'use a specified name' do
17
17
  assert_equal 'fazbot', Xebec::NavBar.new('fazbot').name
18
18
  end
19
+
20
+ should 'have current_is_link set to false by default' do
21
+ assert !@bar.current_is_link
22
+ end
19
23
 
20
24
  should 'be empty by default' do
21
25
  assert @bar.empty?
@@ -45,5 +49,16 @@ class NavBarTest < Test::Unit::TestCase
45
49
  end
46
50
 
47
51
  end
52
+
53
+ context 'a NavBar with Xebec.current_is_link set to true' do
54
+ setup do
55
+ Xebec.current_is_link = true
56
+ @bar = Xebec::NavBar.new
57
+ end
58
+
59
+ should 'have_current_is_link set to true by default' do
60
+ assert @bar.current_is_link
61
+ end
62
+ end
48
63
 
49
64
  end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{xebec}
8
- s.version = "2.6.1"
8
+ s.version = "2.7.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["James A. Rosen"]
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xebec
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 2
7
- - 6
8
- - 1
9
- version: 2.6.1
4
+ prerelease:
5
+ version: 2.7.0
10
6
  platform: ruby
11
7
  authors:
12
8
  - James A. Rosen
@@ -14,8 +10,7 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2011-01-16 00:00:00 -08:00
18
- default_executable:
13
+ date: 2011-01-16 00:00:00 Z
19
14
  dependencies:
20
15
  - !ruby/object:Gem::Dependency
21
16
  name: shoulda
@@ -25,10 +20,6 @@ dependencies:
25
20
  requirements:
26
21
  - - ~>
27
22
  - !ruby/object:Gem::Version
28
- segments:
29
- - 2
30
- - 10
31
- - 3
32
23
  version: 2.10.3
33
24
  type: :development
34
25
  version_requirements: *id001
@@ -40,10 +31,6 @@ dependencies:
40
31
  requirements:
41
32
  - - ~>
42
33
  - !ruby/object:Gem::Version
43
- segments:
44
- - 0
45
- - 9
46
- - 8
47
34
  version: 0.9.8
48
35
  type: :development
49
36
  version_requirements: *id002
@@ -55,9 +42,6 @@ dependencies:
55
42
  requirements:
56
43
  - - ~>
57
44
  - !ruby/object:Gem::Version
58
- segments:
59
- - 3
60
- - 0
61
45
  version: "3.0"
62
46
  type: :development
63
47
  version_requirements: *id003
@@ -120,7 +104,6 @@ files:
120
104
  - test/title_enhanced_nav_bar_renderer_test.rb
121
105
  - test/web_app_theme_renderer_test.rb
122
106
  - xebec.gemspec
123
- has_rdoc: true
124
107
  homepage: http://github.com/jamesarosen/xebec
125
108
  licenses: []
126
109
 
@@ -139,21 +122,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
139
122
  requirements:
140
123
  - - ">="
141
124
  - !ruby/object:Gem::Version
142
- segments:
143
- - 0
144
125
  version: "0"
145
126
  required_rubygems_version: !ruby/object:Gem::Requirement
146
127
  none: false
147
128
  requirements:
148
129
  - - ">="
149
130
  - !ruby/object:Gem::Version
150
- segments:
151
- - 0
152
131
  version: "0"
153
132
  requirements: []
154
133
 
155
134
  rubyforge_project:
156
- rubygems_version: 1.3.7
135
+ rubygems_version: 1.8.10
157
136
  signing_key:
158
137
  specification_version: 3
159
138
  summary: Navigation helpers