bootstrap-navbar 2.2.4 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a421815116b33ad3262adff74491b84a01e9c4c1
4
- data.tar.gz: 046bf583a2e69c7f74bb0c4a2a9ebfb30f0d6fc9
3
+ metadata.gz: 982a971198be58abfb4bca9437f239d32649042a
4
+ data.tar.gz: ce65e2dfd1f6a41baae61ae60ced9e19a3b0d649
5
5
  SHA512:
6
- metadata.gz: 3ffdf3ceb3ba44969ac9a10822fb7b5e68ae38ce39918a972e8911608fd1c07aa695966eec0cf812c8c022a7e60ee2d6575179f7d95faa631c47c88d0e65fe74
7
- data.tar.gz: 2d6bd5ffd751227cbfb499b7e998ce0eca545c2be247d4465664465e1a479dc219ab8d78ed3a34c68bf6920fdc0023a06793b61ad60794f8335ae590031a2cb3
6
+ metadata.gz: 440b131c834bccd2fa760c715e0a956a933ffad6f1d1e37ddf8f03e710bb4a2f53426285c378a579d1c63d39c54c9fbb46cf29812eb7c89f00596dc7f5d5554f
7
+ data.tar.gz: c801f1ba40965ef2479e8bf1d44bb9b4ded164891cb1a79f77e0eaa6db7e0c187083353aa95e271cb451f343f51f94452dd2fbb5b5ed76bba35ae34fb011a018
@@ -0,0 +1 @@
1
+ Gemfile.lock
@@ -1,6 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9
4
- - 2.0
5
- - 2.1
6
- - jruby
3
+ - 2.2.5
4
+ - 2.3.1
5
+ before_install:
6
+ - gem update --system
7
+ - gem update bundler
8
+ sudo: false
@@ -1,7 +1,15 @@
1
- ## 2.2.3
1
+ ## 2.3.0
2
+
3
+ * Add support for Bootstrap 4
4
+
5
+ ## 2.2.4
2
6
 
3
7
  * Never mark menu item with path "#" as active
4
8
 
9
+ ## 2.2.3
10
+
11
+ * Allow navbar dropdown to receive list item and link parameters
12
+
5
13
  ## 2.2.2
6
14
 
7
15
  * Fix marking menu items as active... again
data/README.md CHANGED
@@ -5,13 +5,13 @@
5
5
  [![Dependency Status](https://gemnasium.com/bootstrap-ruby/bootstrap-navbar.png)](https://gemnasium.com/bootstrap-ruby/bootstrap-navbar)
6
6
  [![Code Climate](https://codeclimate.com/github/bootstrap-ruby/bootstrap-navbar.png)](https://codeclimate.com/github/bootstrap-ruby/bootstrap-navbar)
7
7
 
8
- Helpers to generate a Twitter Bootstrap style navbar
8
+ Helpers to generate a Bootstrap style navbar
9
9
 
10
10
  ## Installation
11
11
 
12
12
  This gem only provides a helper module with methods to generate HTML. It can be used by other gems to make these helpers available to a framework's rendering engine, e.g.:
13
13
 
14
- * For Rails: https://github.com/julescopeland/Rails-Bootstrap-Navbar
14
+ * For Rails: https://github.com/bootstrap-ruby/rails-bootstrap-navbar
15
15
  * For [Middleman](http://middlemanapp.com/): https://github.com/bootstrap-ruby/middleman-bootstrap-navbar
16
16
 
17
17
  In short: __Unless you know what you're doing, do not use this gem directly in your app!__
@@ -28,7 +28,7 @@ BootstrapNavbar needs to know what version of Bootstrap it's dealing with since
28
28
 
29
29
  ```ruby
30
30
  BootstrapNavbar.configure do |config|
31
- config.bootstrap_version = '3.0.0'
31
+ config.bootstrap_version = '4.0.0'
32
32
  end
33
33
  ```
34
34
 
@@ -67,11 +67,13 @@ ActionView::Base.send :include, BootstrapNavbar::Helpers
67
67
 
68
68
  ## Usage
69
69
 
70
- Since the navbar format changed quite a bit between Bootstrap 2.x and 3.x, generating them using this gem is quite different as well. Check out the Wiki pages for detailed instructions:
70
+ Since the navbar format differs quite a bit between Bootstrap 2, 3 and 4, generating them using this gem works quite differently as well. Check out the Wiki pages for detailed instructions:
71
71
 
72
- [Usage with Bootstrap 2.x](https://github.com/bootstrap-ruby/bootstrap-navbar/wiki/Usage-with-Bootstrap-2.x)
72
+ [Usage with Bootstrap 2](https://github.com/bootstrap-ruby/bootstrap-navbar/wiki/Usage-with-Bootstrap-2)
73
73
 
74
- [Usage with Bootstrap 3.x](https://github.com/bootstrap-ruby/bootstrap-navbar/wiki/Usage-with-Bootstrap-3.x)
74
+ [Usage with Bootstrap 3](https://github.com/bootstrap-ruby/bootstrap-navbar/wiki/Usage-with-Bootstrap-3)
75
+
76
+ [Usage with Bootstrap 4](https://github.com/bootstrap-ruby/bootstrap-navbar/wiki/Usage-with-Bootstrap-4)
75
77
 
76
78
  ## Changes
77
79
 
@@ -11,9 +11,9 @@ Gem::Specification.new do |gem|
11
11
  gem.platform = Gem::Platform::RUBY
12
12
  gem.author = 'Manuel Meurer'
13
13
  gem.email = 'manuel@krautcomputing.com'
14
- gem.summary = 'Helpers to generate a Twitter Bootstrap style navbar'
15
- gem.description = 'Helpers to generate a Twitter Bootstrap style navbar'
16
- gem.homepage = 'http://krautcomputing.github.io/bootstrap-navbar'
14
+ gem.summary = 'Helpers to generate a Bootstrap style navbar'
15
+ gem.description = 'Helpers to generate a Bootstrap style navbar'
16
+ gem.homepage = 'http://bootstrap-ruby.github.io/bootstrap-navbar'
17
17
  gem.license = 'MIT'
18
18
 
19
19
  gem.files = `git ls-files`.split($/)
@@ -26,8 +26,6 @@ Gem::Specification.new do |gem|
26
26
  gem.add_development_dependency 'rspec-html-matchers', '~> 0.6'
27
27
  gem.add_development_dependency 'guard-rspec', '~> 4.2'
28
28
  gem.add_development_dependency 'padrino-helpers', '~> 0.12'
29
- # Listen >= 2.0.0 only works with Ruby >= 1.9.3
30
- gem.add_development_dependency 'listen', '< 2.0.0' if RUBY_VERSION < '1.9.3'
31
29
  gem.add_development_dependency 'bootstrap-sass', '3.0.2.0'
32
30
  gem.add_runtime_dependency 'gem_config', '~> 0.3'
33
31
  end
@@ -13,3 +13,4 @@ require_relative 'bootstrap-navbar/version'
13
13
  require_relative 'bootstrap-navbar/helpers'
14
14
  require_relative 'bootstrap-navbar/helpers/bootstrap2'
15
15
  require_relative 'bootstrap-navbar/helpers/bootstrap3'
16
+ require_relative 'bootstrap-navbar/helpers/bootstrap4'
@@ -10,8 +10,8 @@ module BootstrapNavbar::Helpers::Bootstrap2
10
10
  def navbar_group(options = {}, &block)
11
11
  options = options.dup
12
12
  css_classes = %w(nav).tap do |css_classes|
13
- css_classes << "pull-#{options.delete(:pull)}" if options.has_key?(:pull)
14
- css_classes << options.delete(:class) if options.has_key?(:class)
13
+ css_classes << "pull-#{options.delete(:pull)}" if options.key?(:pull)
14
+ css_classes << options.delete(:class) if options.key?(:class)
15
15
  end
16
16
  attributes = attributes_for_tag({ class: css_classes.join(' ') }.merge(options))
17
17
  prepare_html <<-HTML.chomp!
@@ -28,7 +28,7 @@ HTML
28
28
  link_options = link_options.nil? ? {} : link_options.dup
29
29
  list_item_css_classes = [].tap do |css_classes|
30
30
  css_classes << 'active' if current_url_or_sub_url?(path)
31
- css_classes << list_item_options.delete(:class) if list_item_options.has_key?(:class)
31
+ css_classes << list_item_options.delete(:class) if list_item_options.key?(:class)
32
32
  end
33
33
  list_item_attributes = attributes_for_tag(
34
34
  { class: list_item_css_classes.join(' ') }
@@ -59,7 +59,7 @@ HTML
59
59
  def navbar_sub_dropdown(name, list_item_options = {}, link_options = {}, &block)
60
60
  list_item_options, link_options = list_item_options.dup, link_options.dup
61
61
  list_item_css_classes = %w(dropdown-submenu).tap do |css_classes|
62
- css_classes << list_item_options.delete(:class) if list_item_options.has_key?(:class)
62
+ css_classes << list_item_options.delete(:class) if list_item_options.key?(:class)
63
63
  end
64
64
  list_item_attributes = attributes_for_tag({ class: list_item_css_classes.join(' ') }.merge(list_item_options))
65
65
  link_attributes = attributes_for_tag(link_options)
@@ -105,9 +105,9 @@ HTML
105
105
  def wrapper(options, html_options, &block)
106
106
  options, html_options = options.dup, html_options.dup
107
107
  position = case
108
- when options.has_key?(:static)
108
+ when options.key?(:static)
109
109
  "static-#{options[:static]}"
110
- when options.has_key?(:fixed)
110
+ when options.key?(:fixed)
111
111
  "fixed-#{options[:fixed]}"
112
112
  end
113
113
  css_classes = %w(navbar).tap do |css_classes|
@@ -1,7 +1,7 @@
1
1
  module BootstrapNavbar::Helpers::Bootstrap3
2
2
  def navbar(options = {}, &block)
3
3
  options = options.dup
4
- container = options.has_key?(:container) ? options.delete(:container) : true
4
+ container = options.key?(:container) ? options.delete(:container) : true
5
5
  wrapper options do
6
6
  if container
7
7
  container(container, &block)
@@ -15,7 +15,7 @@ module BootstrapNavbar::Helpers::Bootstrap3
15
15
  options = options.dup
16
16
  brand, brand_link = options.delete(:brand), options.delete(:brand_link)
17
17
  css_classes = %w(navbar-header).tap do |css_classes|
18
- css_classes << options.delete(:class) if options.has_key?(:class)
18
+ css_classes << options.delete(:class) if options.key?(:class)
19
19
  end
20
20
  attributes = attributes_for_tag(options.reverse_merge(class: css_classes.join(' ')))
21
21
  prepare_html <<-HTML.chomp!
@@ -35,7 +35,7 @@ HTML
35
35
  def navbar_collapse(options = {}, &block)
36
36
  options = options.dup
37
37
  css_classes = %w(collapse navbar-collapse).tap do |css_classes|
38
- css_classes << options.delete(:class) if options.has_key?(:class)
38
+ css_classes << options.delete(:class) if options.key?(:class)
39
39
  end
40
40
  attributes = attributes_for_tag(options.reverse_merge(class: css_classes.join(' '), id: 'navbar-collapsable'))
41
41
  prepare_html <<-HTML.chomp!
@@ -48,8 +48,8 @@ HTML
48
48
  def navbar_group(options = {}, &block)
49
49
  options = options.dup
50
50
  css_classes = %w(nav navbar-nav).tap do |css_classes|
51
- css_classes << "navbar-#{options.delete(:align)}" if options.has_key?(:align)
52
- css_classes << options.delete(:class) if options.has_key?(:class)
51
+ css_classes << "navbar-#{options.delete(:align)}" if options.key?(:align)
52
+ css_classes << options.delete(:class) if options.key?(:class)
53
53
  end
54
54
  attributes = attributes_for_tag(options.reverse_merge(class: css_classes.join(' ')))
55
55
  prepare_html <<-HTML.chomp!
@@ -66,7 +66,7 @@ HTML
66
66
  link_options = link_options.nil? ? {} : link_options.dup
67
67
  list_item_css_classes = [].tap do |css_classes|
68
68
  css_classes << 'active' if current_url_or_sub_url?(url)
69
- css_classes << list_item_options.delete(:class) if list_item_options.has_key?(:class)
69
+ css_classes << list_item_options.delete(:class) if list_item_options.key?(:class)
70
70
  end
71
71
  list_item_attributes = attributes_for_tag(
72
72
  { class: list_item_css_classes.join(' ') }
@@ -86,8 +86,8 @@ HTML
86
86
  def navbar_form(url, options = {}, &block)
87
87
  options = options.dup
88
88
  css_classes = %w(navbar-form).tap do |css_classes|
89
- css_classes << "navbar-#{options.delete(:align)}" if options.has_key?(:align)
90
- css_classes << options.delete(:class) if options.has_key?(:class)
89
+ css_classes << "navbar-#{options.delete(:align)}" if options.key?(:align)
90
+ css_classes << options.delete(:class) if options.key?(:class)
91
91
  end
92
92
  role = options.delete(:role) || 'form'
93
93
  attributes = attributes_for_tag(options.reverse_merge(class: css_classes.join(' '), role: role))
@@ -103,7 +103,7 @@ HTML
103
103
  options = options.dup
104
104
  text ||= capture(&block)
105
105
  css_classes = %w(navbar-text).tap do |css_classes|
106
- css_classes << options.delete(:class) if options.has_key?(:class)
106
+ css_classes << options.delete(:class) if options.key?(:class)
107
107
  end
108
108
  attributes = attributes_for_tag(options.reverse_merge(class: css_classes.join(' ')))
109
109
  prepare_html <<-HTML.chomp!
@@ -114,7 +114,7 @@ HTML
114
114
  def navbar_button(text, options = {})
115
115
  options = options.dup
116
116
  css_classes = %w(btn navbar-btn).tap do |css_classes|
117
- css_classes << options.delete(:class) if options.has_key?(:class)
117
+ css_classes << options.delete(:class) if options.key?(:class)
118
118
  end
119
119
  type = options.delete(:type) || 'button'
120
120
  attributes = attributes_for_tag(options.reverse_merge(class: css_classes.join(' '), type: type))
@@ -179,9 +179,9 @@ HTML
179
179
  options = options.dup
180
180
  css_classes = %w(navbar).tap do |css_classes|
181
181
  css_classes << "navbar-#{options.delete(:inverse) ? 'inverse' : 'default'}"
182
- css_classes << "navbar-fixed-#{options.delete(:fixed)}" if options.has_key?(:fixed)
182
+ css_classes << "navbar-fixed-#{options.delete(:fixed)}" if options.key?(:fixed)
183
183
  css_classes << 'navbar-static-top' if options.delete(:static)
184
- css_classes << options.delete(:class) if options.has_key?(:class)
184
+ css_classes << options.delete(:class) if options.key?(:class)
185
185
  end
186
186
  role = options.delete(:role) || 'navigation'
187
187
  attributes = attributes_for_tag(options.reverse_merge(class: css_classes.join(' '), role: role))
@@ -0,0 +1,137 @@
1
+ module BootstrapNavbar::Helpers::Bootstrap4
2
+ def navbar(options = {}, &block)
3
+ options = options.dup
4
+ container = options.key?(:container) ? options.delete(:container) : false
5
+ wrapper options do
6
+ if container
7
+ container(&block)
8
+ else
9
+ capture(&block) if block_given?
10
+ end
11
+ end
12
+ end
13
+
14
+ def navbar_collapse(options = {}, &block)
15
+ options = options.dup
16
+ if options.key?(:toggleable)
17
+ toggleable = options.delete(:toggleable)
18
+ toggleable = 'xs' if toggleable == true
19
+ end
20
+ css_classes = %w(collapse).tap do |css_classes|
21
+ css_classes << options.delete(:class) if options.key?(:class)
22
+ css_classes << "navbar-toggleable-#{toggleable}" if toggleable
23
+ end
24
+ toggler_css_classes = %w(navbar-toggler).tap do |css_classes|
25
+ if toggleable
26
+ following_grid_size = case toggleable
27
+ when 'xs' then 'sm'
28
+ when 'sm' then 'md'
29
+ when 'md' then 'lg'
30
+ when 'lg' then 'xl'
31
+ else
32
+ fail %(Unexpected "toggleable" parameter: #{toggleable}. Must be "xs", "sm", "md", "lg" or `true` (equals "xs").)
33
+ end
34
+ css_classes << "hidden-#{following_grid_size}-up"
35
+ end
36
+ end
37
+ id = options.delete(:id) || 'navbar-collapsable'
38
+ attributes = attributes_for_tag(options.reverse_merge(class: css_classes.join(' '), id: id))
39
+ toggler_attributes = attributes_for_tag(
40
+ class: toggler_css_classes.join(' '),
41
+ type: 'button',
42
+ 'data-toggle' => 'collapse',
43
+ 'data-target' => "##{id}",
44
+ 'aria-controls' => id,
45
+ 'aria-expanded' => false,
46
+ 'aria-label' => 'Toggle navigation'
47
+ )
48
+ prepare_html <<-HTML.chomp!
49
+ <button#{toggler_attributes}>
50
+ &#9776;
51
+ </button>
52
+ <div#{attributes}>
53
+ #{capture(&block) if block_given?}
54
+ </div>
55
+ HTML
56
+ end
57
+
58
+ def navbar_group(options = {}, &block)
59
+ options = options.dup
60
+ css_classes = %w(nav navbar-nav).tap do |css_classes|
61
+ css_classes << options.delete(:class) if options.key?(:class)
62
+ end
63
+ attributes = attributes_for_tag(options.reverse_merge(class: css_classes.join(' ')))
64
+ prepare_html <<-HTML.chomp!
65
+ <ul#{attributes}>
66
+ #{capture(&block) if block_given?}
67
+ </ul>
68
+ HTML
69
+ end
70
+
71
+ def navbar_item(text, url = nil, list_item_options = nil, link_options = nil, &block)
72
+ text, url, list_item_options, link_options = capture(&block), text, url, list_item_options if block_given?
73
+ url ||= '#'
74
+ list_item_options = list_item_options.nil? ? {} : list_item_options.dup
75
+ link_options = link_options.nil? ? {} : link_options.dup
76
+ list_item_css_classes = %w(nav-item).tap do |css_classes|
77
+ css_classes << 'active' if current_url_or_sub_url?(url)
78
+ css_classes << list_item_options.delete(:class) if list_item_options.key?(:class)
79
+ end
80
+ link_css_classes = %w(nav-link).tap do |css_classes|
81
+ css_classes << link_options.delete(:class) if link_options.key?(:class)
82
+ end
83
+ list_item_attributes = attributes_for_tag(
84
+ { class: list_item_css_classes.join(' ') }
85
+ .delete_if { |k, v| v.empty? }
86
+ .merge(list_item_options)
87
+ )
88
+ link_attributes = attributes_for_tag(
89
+ { class: link_css_classes.join(' ') }
90
+ .delete_if { |k, v| v.empty? }
91
+ .merge(link_options)
92
+ )
93
+ prepare_html <<-HTML.chomp!
94
+ <li#{list_item_attributes}>
95
+ <a href="#{url}"#{link_attributes}>
96
+ #{text}
97
+ </a>
98
+ </li>
99
+ HTML
100
+ end
101
+
102
+ private
103
+
104
+ def container(&block)
105
+ prepare_html <<-HTML.chomp!
106
+ <div class="container">
107
+ #{capture(&block) if block_given?}
108
+ </div>
109
+ HTML
110
+ end
111
+
112
+ def brand_link(text, url = nil)
113
+ prepare_html <<-HTML.chomp!
114
+ <a href="#{url || '/'}" class="navbar-brand">
115
+ #{text}
116
+ </a>
117
+ HTML
118
+ end
119
+
120
+ def wrapper(options, &block)
121
+ options = options.dup
122
+ css_classes = %w(navbar).tap do |css_classes|
123
+ css_classes << "navbar-#{options.key?(:color_scheme) ? options.delete(:color_scheme) : 'dark'}"
124
+ css_classes << "bg-#{options.delete(:bg) || 'primary'}" unless options[:bg] == false
125
+ css_classes << "navbar-#{options.delete(:placement)}" if options.key?(:placement)
126
+ css_classes << options.delete(:class) if options.key?(:class)
127
+ end
128
+ brand = brand_link(options[:brand], options[:brand_url]) if options[:brand]
129
+ attributes = attributes_for_tag(options.reverse_merge(class: css_classes.join(' ')))
130
+ prepare_html <<-HTML.chomp!
131
+ <nav#{attributes}>
132
+ #{brand}
133
+ #{capture(&block) if block_given?}
134
+ </nav>
135
+ HTML
136
+ end
137
+ end
@@ -1,3 +1,3 @@
1
1
  module BootstrapNavbar
2
- VERSION = '2.2.4'
2
+ VERSION = '2.3.0'
3
3
  end
@@ -0,0 +1,161 @@
1
+ require 'spec_helper'
2
+
3
+ describe BootstrapNavbar::Helpers::Bootstrap4 do
4
+ before do
5
+ BootstrapNavbar.configure do |config|
6
+ config.current_url_method = '"/"'
7
+ config.bootstrap_version = '4.0.0'
8
+ end
9
+ end
10
+
11
+ it 'includes the correct module' do
12
+ expect(renderer.class.ancestors).to_not include(BootstrapNavbar::Helpers::Bootstrap3)
13
+ expect(renderer.class.ancestors).to_not include(BootstrapNavbar::Helpers::Bootstrap2)
14
+ expect(renderer.class.ancestors).to include(BootstrapNavbar::Helpers::Bootstrap4)
15
+ end
16
+
17
+ describe '#navbar' do
18
+ context 'without parameters' do
19
+ it 'generates the correct HTML' do
20
+ expect(renderer.navbar { 'foo' }).to have_tag(:nav, with: { class: 'navbar navbar-dark bg-primary' }, text: /foo/)
21
+ end
22
+ end
23
+
24
+ context 'with "color_scheme" parameter' do
25
+ it 'generates the correct HTML' do
26
+ expect(renderer.navbar(color_scheme: 'light')).to have_tag(:nav, with: { class: 'navbar navbar-light bg-primary' })
27
+ expect(renderer.navbar(color_scheme: 'dark')).to have_tag(:nav, with: { class: 'navbar navbar-dark bg-primary' })
28
+ end
29
+ end
30
+
31
+ context 'with "bg" parameter' do
32
+ it 'generates the correct HTML' do
33
+ expect(renderer.navbar(bg: 'primary')).to have_tag(:nav, with: { class: 'navbar navbar-dark bg-primary' })
34
+ expect(renderer.navbar(bg: 'inverse')).to have_tag(:nav, with: { class: 'navbar navbar-dark bg-inverse' })
35
+ expect(renderer.navbar(bg: false)).to have_tag(:nav, with: { class: 'navbar navbar-dark' }, without: { class: 'bg-primary' })
36
+ end
37
+ end
38
+
39
+ context 'with "placement" parameter' do
40
+ it 'generates the correct HTML' do
41
+ %w(full fixed-top fixed-bottom).each do |placement|
42
+ expect(renderer.navbar(placement: placement)).to have_tag(:nav, with: { class: "navbar navbar-dark bg-primary navbar-#{placement}" })
43
+ end
44
+ end
45
+ end
46
+
47
+ context 'with "container" parameter' do
48
+ it 'generates the correct HTML' do
49
+ expect(renderer.navbar(container: true)).to have_tag(:nav, with: { class: 'navbar navbar-dark bg-primary' }) do
50
+ with_tag :div, with: { class: 'container' }
51
+ end
52
+ expect(renderer.navbar(container: false)).to have_tag(:nav, with: { class: 'navbar navbar-dark bg-primary' }) do
53
+ without_tag :div, with: { class: 'container' }
54
+ end
55
+ end
56
+ end
57
+
58
+ context 'with "class" parameter' do
59
+ it 'generates the correct HTML' do
60
+ expect(renderer.navbar(class: 'foo')).to have_tag(:nav, with: { class: 'navbar navbar-dark bg-primary foo' })
61
+ end
62
+ end
63
+
64
+ context 'with "brand" parameter' do
65
+ it 'generates the correct HTML' do
66
+ expect(renderer.navbar(brand: 'Huhu')).to have_tag(:nav, with: { class: 'navbar navbar-dark bg-primary' }) do
67
+ with_tag :a, with: { class: 'navbar-brand' }, text: /Huhu/
68
+ end
69
+ expect(renderer.navbar(brand: false)).to have_tag(:nav, with: { class: 'navbar navbar-dark bg-primary' }) do
70
+ without_tag :a, with: { class: 'navbar-brand' }
71
+ end
72
+ end
73
+ end
74
+
75
+ context 'with "brand_url" parameter' do
76
+ it 'generates the correct HTML' do
77
+ expect(renderer.navbar(brand: true, brand_url: '/huhu')).to have_tag(:nav, with: { class: 'navbar navbar-dark bg-primary' }) do
78
+ with_tag :a, with: { class: 'navbar-brand', href: '/huhu' }
79
+ end
80
+ end
81
+ end
82
+ end
83
+
84
+ describe '#navbar_collapse' do
85
+ context 'without parameters' do
86
+ it 'generates the correct HTML' do
87
+ output = renderer.navbar_collapse { 'foo' }
88
+ expect(output).to have_tag :div, with: { class: 'collapse', id: 'navbar-collapsable' }, text: /foo/
89
+ button_attributes = {
90
+ class: 'navbar-toggler',
91
+ type: 'button',
92
+ 'data-toggle' => 'collapse',
93
+ 'data-target' => "#navbar-collapsable",
94
+ 'aria-controls' => 'navbar-collapsable',
95
+ 'aria-expanded' => false,
96
+ 'aria-label' => 'Toggle navigation'
97
+ }
98
+ expect(output).to have_tag :button, with: button_attributes
99
+ end
100
+ end
101
+
102
+ context 'with "toggleable" parameter' do
103
+ it 'generates the correct HTML' do
104
+ output = renderer.navbar_collapse(toggleable: true) { 'foo' }
105
+ expect(output).to have_tag :div, with: { class: 'collapse navbar-toggleable-xs', id: 'navbar-collapsable' }, text: /foo/
106
+ button_attributes = {
107
+ class: 'navbar-toggler hidden-sm-up',
108
+ type: 'button',
109
+ 'data-toggle' => 'collapse',
110
+ 'data-target' => "#navbar-collapsable",
111
+ 'aria-controls' => 'navbar-collapsable',
112
+ 'aria-expanded' => false,
113
+ 'aria-label' => 'Toggle navigation'
114
+ }
115
+ expect(output).to have_tag :button, with: button_attributes
116
+ end
117
+ end
118
+ end
119
+
120
+ describe '#navbar_group' do
121
+ context 'without parameters' do
122
+ it 'generates the correct HTML' do
123
+ expect(renderer.navbar_group).to have_tag(:ul, with: { class: 'nav navbar-nav' })
124
+ end
125
+ end
126
+
127
+ context 'with "class" parameter' do
128
+ it 'generates the correct HTML' do
129
+ expect(renderer.navbar_group(class: 'foo')).to have_tag(:ul, with: { class: 'nav navbar-nav foo' })
130
+ end
131
+ end
132
+ end
133
+
134
+ describe '#navbar_item' do
135
+ it_behaves_like 'marking the navbar items as active correctly'
136
+
137
+ context 'with block' do
138
+ it 'generates the correct HTML' do
139
+ expect(renderer.navbar_item('/foo', { class: 'list-item' }, class: 'link') { 'link-text' }).to have_tag(:li, with: { class: 'nav-item list-item' }) do
140
+ with_tag :a, with: { href: '/foo', class: 'nav-link link' }, text: /link-text/
141
+ end
142
+ end
143
+ end
144
+
145
+ context 'without current URL' do
146
+ it 'generates the correct HTML' do
147
+ BootstrapNavbar.configuration.current_url_method = '"/foo"'
148
+ expect(renderer.navbar_item('foo', '/')).to have_tag(:li, without: { class: 'active' }) do
149
+ with_tag :a, with: { href: '/' }, text: /foo/
150
+ end
151
+ expect(renderer.navbar_item('foo', '/bar')).to have_tag(:li, without: { class: 'active' }) do
152
+ with_tag :a, with: { href: '/bar' }, text: /foo/
153
+ end
154
+ BootstrapNavbar.configuration.current_url_method = '"/"'
155
+ expect(renderer.navbar_item('foo', '/foo')).to have_tag(:li, without: { class: 'active' }) do
156
+ with_tag :a, with: { href: '/foo' }, text: /foo/
157
+ end
158
+ end
159
+ end
160
+ end
161
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bootstrap-navbar
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.4
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Manuel Meurer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-07 00:00:00.000000000 Z
11
+ date: 2016-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -108,12 +108,13 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0.3'
111
- description: Helpers to generate a Twitter Bootstrap style navbar
111
+ description: Helpers to generate a Bootstrap style navbar
112
112
  email: manuel@krautcomputing.com
113
113
  executables: []
114
114
  extensions: []
115
115
  extra_rdoc_files: []
116
116
  files:
117
+ - ".gitignore"
117
118
  - ".travis.yml"
118
119
  - CHANGELOG.md
119
120
  - Gemfile
@@ -126,13 +127,15 @@ files:
126
127
  - lib/bootstrap-navbar/helpers.rb
127
128
  - lib/bootstrap-navbar/helpers/bootstrap2.rb
128
129
  - lib/bootstrap-navbar/helpers/bootstrap3.rb
130
+ - lib/bootstrap-navbar/helpers/bootstrap4.rb
129
131
  - lib/bootstrap-navbar/version.rb
130
132
  - spec/bootstrap-navbar/helpers/bootstrap2_spec.rb
131
133
  - spec/bootstrap-navbar/helpers/bootstrap3_spec.rb
134
+ - spec/bootstrap-navbar/helpers/bootstrap4_spec.rb
132
135
  - spec/bootstrap-navbar/helpers_spec.rb
133
136
  - spec/spec_helper.rb
134
137
  - spec/support/helpers.rb
135
- homepage: http://krautcomputing.github.io/bootstrap-navbar
138
+ homepage: http://bootstrap-ruby.github.io/bootstrap-navbar
136
139
  licenses:
137
140
  - MIT
138
141
  metadata: {}
@@ -152,13 +155,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
155
  version: '0'
153
156
  requirements: []
154
157
  rubyforge_project:
155
- rubygems_version: 2.4.5
158
+ rubygems_version: 2.6.6
156
159
  signing_key:
157
160
  specification_version: 4
158
- summary: Helpers to generate a Twitter Bootstrap style navbar
161
+ summary: Helpers to generate a Bootstrap style navbar
159
162
  test_files:
160
163
  - spec/bootstrap-navbar/helpers/bootstrap2_spec.rb
161
164
  - spec/bootstrap-navbar/helpers/bootstrap3_spec.rb
165
+ - spec/bootstrap-navbar/helpers/bootstrap4_spec.rb
162
166
  - spec/bootstrap-navbar/helpers_spec.rb
163
167
  - spec/spec_helper.rb
164
168
  - spec/support/helpers.rb