simple-navigation 3.14.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +10 -2
  5. data/CHANGELOG.md +400 -0
  6. data/Guardfile +4 -2
  7. data/README.md +1 -1
  8. data/gemfiles/.bundle/config +2 -0
  9. data/gemfiles/rails-3-2-stable.gemfile +10 -0
  10. data/gemfiles/rails-4-1-stable.gemfile +6 -0
  11. data/gemfiles/rails-4-2-stable.gemfile +7 -0
  12. data/generators/navigation_config/navigation_config_generator.rb +0 -1
  13. data/generators/navigation_config/templates/config/navigation.rb +18 -15
  14. data/lib/simple_navigation.rb +25 -42
  15. data/lib/simple_navigation/adapters/rails.rb +1 -24
  16. data/lib/simple_navigation/adapters/sinatra.rb +2 -11
  17. data/lib/simple_navigation/config_file.rb +36 -0
  18. data/lib/simple_navigation/config_file_finder.rb +42 -0
  19. data/lib/simple_navigation/{core/configuration.rb → configuration.rb} +7 -1
  20. data/lib/simple_navigation/{rendering/helpers.rb → helpers.rb} +0 -4
  21. data/lib/simple_navigation/{core/item.rb → item.rb} +76 -85
  22. data/lib/simple_navigation/{core/item_adapter.rb → item_adapter.rb} +3 -17
  23. data/lib/simple_navigation/{core/item_container.rb → item_container.rb} +23 -14
  24. data/lib/simple_navigation/{core/items_provider.rb → items_provider.rb} +0 -0
  25. data/lib/simple_navigation/railtie.rb +7 -0
  26. data/lib/simple_navigation/renderer.rb +12 -0
  27. data/lib/simple_navigation/{rendering/renderer → renderer}/base.rb +1 -1
  28. data/lib/simple_navigation/{rendering/renderer → renderer}/breadcrumbs.rb +0 -0
  29. data/lib/simple_navigation/{rendering/renderer → renderer}/json.rb +2 -0
  30. data/lib/simple_navigation/{rendering/renderer → renderer}/links.rb +0 -0
  31. data/lib/simple_navigation/{rendering/renderer → renderer}/list.rb +0 -0
  32. data/lib/simple_navigation/{rendering/renderer → renderer}/text.rb +0 -0
  33. data/lib/simple_navigation/version.rb +1 -1
  34. data/simple-navigation.gemspec +5 -4
  35. data/spec/fake_app/config/navigation.rb +6 -0
  36. data/spec/fake_app/rails_app.rb +35 -0
  37. data/spec/initializers/coveralls.rb +3 -0
  38. data/spec/initializers/have_css_matcher.rb +8 -3
  39. data/spec/initializers/memfs.rb +7 -0
  40. data/spec/initializers/rails.rb +4 -0
  41. data/spec/initializers/rspec.rb +7 -0
  42. data/spec/integration/rendering_navigation_spec.rb +12 -0
  43. data/spec/{lib/simple_navigation → simple_navigation}/adapters/padrino_spec.rb +0 -2
  44. data/spec/{lib/simple_navigation → simple_navigation}/adapters/rails_spec.rb +36 -93
  45. data/spec/{lib/simple_navigation → simple_navigation}/adapters/sinatra_spec.rb +4 -6
  46. data/spec/simple_navigation/config_file_finder_spec.rb +50 -0
  47. data/spec/simple_navigation/config_file_spec.rb +25 -0
  48. data/spec/{lib/simple_navigation/core → simple_navigation}/configuration_spec.rb +29 -19
  49. data/spec/{lib/simple_navigation/rendering → simple_navigation}/helpers_spec.rb +10 -13
  50. data/spec/{lib/simple_navigation/core → simple_navigation}/item_adapter_spec.rb +14 -11
  51. data/spec/{lib/simple_navigation/core → simple_navigation}/item_container_spec.rb +130 -42
  52. data/spec/simple_navigation/item_spec.rb +467 -0
  53. data/spec/{lib/simple_navigation/core → simple_navigation}/items_provider_spec.rb +1 -3
  54. data/spec/{lib/simple_navigation/rendering → simple_navigation}/renderer/base_spec.rb +34 -36
  55. data/spec/{lib/simple_navigation/rendering → simple_navigation}/renderer/breadcrumbs_spec.rb +4 -7
  56. data/spec/{lib/simple_navigation/rendering → simple_navigation}/renderer/json_spec.rb +5 -11
  57. data/spec/{lib/simple_navigation/rendering → simple_navigation}/renderer/links_spec.rb +5 -8
  58. data/spec/{lib/simple_navigation/rendering → simple_navigation}/renderer/list_spec.rb +4 -7
  59. data/spec/{lib/simple_navigation/rendering → simple_navigation}/renderer/text_spec.rb +4 -7
  60. data/spec/simple_navigation_spec.rb +190 -0
  61. data/spec/spec_helper.rb +29 -35
  62. metadata +103 -68
  63. data/CHANGELOG +0 -292
  64. data/lib/simple_navigation/core.rb +0 -5
  65. data/lib/simple_navigation/rails_controller_methods.rb +0 -164
  66. data/lib/simple_navigation/rendering.rb +0 -12
  67. data/rails/init.rb +0 -1
  68. data/spec/lib/simple_navigation/core/item_spec.rb +0 -703
  69. data/spec/lib/simple_navigation/rails_controller_methods_spec.rb +0 -270
  70. data/spec/lib/simple_navigation_spec.rb +0 -300
@@ -1,4 +1,5 @@
1
1
  require 'forwardable'
2
+ require 'ostruct'
2
3
 
3
4
  module SimpleNavigation
4
5
  # This class acts as an adapter to items that are not defined using the DSL
@@ -30,7 +31,7 @@ module SimpleNavigation
30
31
  attr_reader :item
31
32
 
32
33
  def initialize(item)
33
- @item = item.is_a?(Hash) ? to_object(item) : item
34
+ @item = item.is_a?(Hash) ? OpenStruct.new(item) : item
34
35
  end
35
36
 
36
37
  # Returns the options for this item. If the wrapped item does not implement
@@ -47,22 +48,7 @@ module SimpleNavigation
47
48
 
48
49
  # Converts this Item into a SimpleNavigation::Item
49
50
  def to_simple_navigation_item(item_container)
50
- SimpleNavigation::Item.new(item_container, key, name, url, options, items)
51
- end
52
-
53
- protected
54
-
55
- # Converts the specified hash into an object. Each key will be added
56
- # as method.
57
- def to_object(hash)
58
- mod = Module.new do
59
- hash.each_pair do |key, value|
60
- define_method key do
61
- value
62
- end
63
- end
64
- end
65
- Object.new.extend(mod)
51
+ SimpleNavigation::Item.new(item_container, key, name, url, options)
66
52
  end
67
53
  end
68
54
  end
@@ -59,22 +59,18 @@ module SimpleNavigation
59
59
  # set a regexp which is matched againstthe current URI.
60
60
  #
61
61
  # The <tt>block</tt> - if specified - will hold the item's sub_navigation.
62
- def item(key, name, url_or_options = {}, options_or_nil = {}, &block)
63
- options = url_or_options.is_a?(Hash) ? url_or_options : options_or_nil
62
+ def item(key, name, url = nil, options = {}, &block)
64
63
  return unless should_add_item?(options)
65
- items << SimpleNavigation::Item.new(self,
66
- key,
67
- name,
68
- url_or_options,
69
- options_or_nil,
70
- nil,
71
- &block)
64
+ item = Item.new(self, key, name, url, options, &block)
65
+ add_item item, options
72
66
  end
73
67
 
74
68
  def items=(new_items)
75
- @items += new_items.map { |item| ItemAdapter.new(item) }
76
- .keep_if { |item| should_add_item?(item.options) }
77
- .map { |item| item.to_simple_navigation_item(self) }
69
+ new_items.each do |item|
70
+ item_adapter = ItemAdapter.new(item)
71
+ next unless should_add_item?(item_adapter.options)
72
+ add_item item_adapter.to_simple_navigation_item(self), item_adapter.options
73
+ end
78
74
  end
79
75
 
80
76
  # Returns the Item with the specified key, nil otherwise.
@@ -148,6 +144,19 @@ module SimpleNavigation
148
144
 
149
145
  private
150
146
 
147
+ def add_item(item, options)
148
+ items << item
149
+ modify_dom_attributes(options)
150
+ end
151
+
152
+ def modify_dom_attributes(options)
153
+ return unless container_options = options[:container]
154
+ self.dom_attributes = container_options.fetch(:attributes) { dom_attributes }
155
+ self.dom_class = container_options.fetch(:class) { dom_class }
156
+ self.dom_id = container_options.fetch(:id) { dom_id }
157
+ self.selected_class = container_options.fetch(:selected_class) { selected_class }
158
+ end
159
+
151
160
  # FIXME: raise an exception if :rederer is a symbol and it is not registred
152
161
  # in SimpleNavigation.registered_renderers
153
162
  def renderer_instance(options)
@@ -166,8 +175,8 @@ module SimpleNavigation
166
175
  end
167
176
 
168
177
  def should_add_item?(options)
169
- [options.delete(:if)].flatten.compact.all? { |m| evaluate_method(m) } &&
170
- [options.delete(:unless)].flatten.compact.none? { |m| evaluate_method(m) }
178
+ [options[:if]].flatten.compact.all? { |m| evaluate_method(m) } &&
179
+ [options[:unless]].flatten.compact.none? { |m| evaluate_method(m) }
171
180
  end
172
181
 
173
182
  def evaluate_method(method)
@@ -0,0 +1,7 @@
1
+ module SimpleNavigation
2
+ class Railtie < ::Rails::Railtie
3
+ initializer 'simple_navigation.register' do |app|
4
+ SimpleNavigation.register
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,12 @@
1
+ require 'simple_navigation/helpers'
2
+ require 'simple_navigation/renderer/base'
3
+
4
+ module SimpleNavigation
5
+ module Renderer
6
+ autoload :List, 'simple_navigation/renderer/list'
7
+ autoload :Links, 'simple_navigation/renderer/links'
8
+ autoload :Breadcrumbs, 'simple_navigation/renderer/breadcrumbs'
9
+ autoload :Text, 'simple_navigation/renderer/text'
10
+ autoload :Json, 'simple_navigation/renderer/json'
11
+ end
12
+ end
@@ -95,7 +95,7 @@ module SimpleNavigation
95
95
  class: item.selected_class
96
96
  }.reject { |_, v| v.nil? }
97
97
 
98
- link_options = item.html_options[:link]
98
+ link_options = item.link_html_options
99
99
 
100
100
  return special_options unless link_options
101
101
 
@@ -1,3 +1,5 @@
1
+ require 'json'
2
+
1
3
  module SimpleNavigation
2
4
  module Renderer
3
5
  # Renders the navigation items as a object tree serialized as a json string,
@@ -1,3 +1,3 @@
1
1
  module SimpleNavigation
2
- VERSION = '3.14.0'
2
+ VERSION = '4.0.0'
3
3
  end
@@ -6,7 +6,7 @@ require 'simple_navigation/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'simple-navigation'
8
8
  spec.version = SimpleNavigation::VERSION
9
- spec.authors = ['Andi Schacke', 'Mark J. Titorenko']
9
+ spec.authors = ['Andi Schacke', 'Mark J. Titorenko', 'Simon Courtois']
10
10
  spec.email = ['andi@codeplant.ch']
11
11
  spec.description = "With the simple-navigation gem installed you can easily " \
12
12
  "create multilevel navigations for your Rails, Sinatra or "\
@@ -29,12 +29,13 @@ Gem::Specification.new do |spec|
29
29
 
30
30
  spec.add_runtime_dependency 'activesupport', '>= 2.3.2'
31
31
 
32
- spec.add_development_dependency 'actionpack', '>= 2.3.2'
33
32
  spec.add_development_dependency 'bundler', '~> 1.5'
33
+ spec.add_development_dependency 'capybara'
34
34
  spec.add_development_dependency 'coveralls', '~> 0.7'
35
35
  spec.add_development_dependency 'guard-rspec', '~> 4.2'
36
- spec.add_development_dependency 'json_spec', '~> 1.1'
36
+ spec.add_development_dependency 'memfs', '~> 0.4.1'
37
37
  spec.add_development_dependency 'rake'
38
38
  spec.add_development_dependency 'rdoc'
39
- spec.add_development_dependency 'rspec', '~> 2.0'
39
+ spec.add_development_dependency 'rspec', '~> 3.0'
40
+ spec.add_development_dependency 'tzinfo', '>= 0'
40
41
  end
@@ -0,0 +1,6 @@
1
+ SimpleNavigation::Configuration.run do |navigation|
2
+ navigation.items do |nav|
3
+ nav.item :item_1, 'Item 1', '/item_1'
4
+ nav.item :item_2, 'Item 2', '/item_2'
5
+ end
6
+ end
@@ -0,0 +1,35 @@
1
+ ENV['RAILS_ENV'] ||= 'test'
2
+
3
+ require 'action_controller/railtie'
4
+ require 'simple_navigation'
5
+
6
+ module RailsApp
7
+ class Application < Rails::Application
8
+ config.active_support.deprecation = :log
9
+ config.cache_classes = true
10
+ config.eager_load = false
11
+ config.root = __dir__
12
+ config.secret_token = 'x'*100
13
+ config.session_store :cookie_store, key: '_myapp_session'
14
+ end
15
+
16
+ class TestsController < ActionController::Base
17
+ def base
18
+ render inline: <<-END
19
+ <!DOCTYPE html>
20
+ <html>
21
+ <body>
22
+ <%= render_navigation %>
23
+ </body>
24
+ </html>
25
+ END
26
+ end
27
+ end
28
+ end
29
+
30
+ Rails.backtrace_cleaner.remove_silencers!
31
+ RailsApp::Application.initialize!
32
+
33
+ RailsApp::Application.routes.draw do
34
+ get '/base_spec' => 'rails_app/tests#base'
35
+ end
@@ -0,0 +1,3 @@
1
+ require 'coveralls'
2
+
3
+ Coveralls.wear!
@@ -1,13 +1,18 @@
1
1
  RSpec::Matchers.define :have_css do |expected, times|
2
2
  match do |actual|
3
- HTML::Selector.new(expected).select(actual).should have_at_least(times || 1).entry
3
+ selector = HTML::Selector.new(expected).select(actual)
4
+ if times
5
+ expect(selector.size).to eq times
6
+ else
7
+ expect(selector.size).to be >= 1
8
+ end
4
9
  end
5
10
 
6
- failure_message_for_should do |actual|
11
+ failure_message do |actual|
7
12
  "expected #{actual.to_s} to have #{times || 1} elements matching '#{expected}'"
8
13
  end
9
14
 
10
- failure_message_for_should_not do |actual|
15
+ failure_message_when_negated do |actual|
11
16
  "expected #{actual.to_s} not to have #{times || 1} elements matching '#{expected}'"
12
17
  end
13
18
  end
@@ -0,0 +1,7 @@
1
+ require 'memfs'
2
+
3
+ RSpec.configure do |config|
4
+ config.around(memfs: true) do |example|
5
+ MemFs.activate { example.run }
6
+ end
7
+ end
@@ -0,0 +1,4 @@
1
+ begin
2
+ require 'rails'
3
+ rescue LoadError
4
+ end
@@ -0,0 +1,7 @@
1
+ RSpec.configure do |config|
2
+ config.expect_with(:rspec) do |c|
3
+ c.syntax = :expect
4
+ end
5
+
6
+ config.order = :random
7
+ end
@@ -0,0 +1,12 @@
1
+ RSpec.feature 'Rendering navigation' do
2
+ background do
3
+ SimpleNavigation.set_env(RailsApp::Application.root, 'test')
4
+ end
5
+
6
+ scenario 'Rendering basic navigation', type: :feature do
7
+ visit '/base_spec'
8
+
9
+ expect(page).to have_content('Item 1')
10
+ expect(page).to have_content('Item 2')
11
+ end
12
+ end
@@ -1,5 +1,3 @@
1
- require 'spec_helper'
2
-
3
1
  module SimpleNavigation
4
2
  module Adapters
5
3
  describe Padrino do
@@ -1,10 +1,8 @@
1
- require 'spec_helper'
2
-
3
1
  module SimpleNavigation
4
2
  module Adapters
5
3
  describe Rails do
6
4
  let(:action_controller) { ActionController::Base }
7
- let(:adapter) { SimpleNavigation::Adapters::Rails.new(context) }
5
+ let(:adapter) { Rails.new(context) }
8
6
  let(:context) { double(:context, controller: controller) }
9
7
  let(:controller) { double(:controller) }
10
8
  let(:request) { double(:request) }
@@ -12,10 +10,11 @@ module SimpleNavigation
12
10
  let(:template) { double(:template, request: request) }
13
11
 
14
12
  describe '.register' do
15
- before { action_controller.stub(:include) }
13
+ before { allow(action_controller).to receive(:include) }
16
14
 
17
15
  it 'calls set_env' do
18
- expect(simple_navigation).to receive(:set_env).with('./', 'test')
16
+ app_path = RailsApp::Application.root
17
+ expect(simple_navigation).to receive(:set_env).with(app_path, 'test')
19
18
  simple_navigation.register
20
19
  end
21
20
 
@@ -25,19 +24,25 @@ module SimpleNavigation
25
24
  simple_navigation.register
26
25
  end
27
26
 
28
- it 'installs the helper methods in the controller' do
29
- expect(action_controller).to receive(:helper_method).with(:render_navigation)
30
- expect(action_controller).to receive(:helper_method).with(:active_navigation_item_name)
31
- expect(action_controller).to receive(:helper_method).with(:active_navigation_item_key)
32
- expect(action_controller).to receive(:helper_method).with(:active_navigation_item)
33
- expect(action_controller).to receive(:helper_method).with(:active_navigation_item_container)
34
- simple_navigation.register
27
+ shared_examples 'installing helper method' do |method|
28
+ it "installs the #{method} method as helper method" do
29
+ simple_navigation.register
30
+
31
+ helper_methods = action_controller.send(:_helper_methods)
32
+ expect(helper_methods).to include(method)
33
+ end
35
34
  end
35
+
36
+ it_behaves_like 'installing helper method', :render_navigation
37
+ it_behaves_like 'installing helper method', :active_navigation_item_name
38
+ it_behaves_like 'installing helper method', :active_navigation_item_key
39
+ it_behaves_like 'installing helper method', :active_navigation_item
40
+ it_behaves_like 'installing helper method', :active_navigation_item_container
36
41
  end
37
42
 
38
43
  describe '#initialize' do
39
44
  context "when the controller's template is set" do
40
- before { controller.stub(instance_variable_get: template) }
45
+ before { allow(controller).to receive_messages(instance_variable_get: template) }
41
46
 
42
47
  it "sets the adapter's request accordingly" do
43
48
  expect(adapter.request).to be request
@@ -45,7 +50,7 @@ module SimpleNavigation
45
50
  end
46
51
 
47
52
  context "when the controller's template is not set" do
48
- before { controller.stub(instance_variable_get: nil) }
53
+ before { allow(controller).to receive_messages(instance_variable_get: nil) }
49
54
 
50
55
  it "sets the adapter's request to nil" do
51
56
  expect(adapter.request).to be_nil
@@ -58,7 +63,7 @@ module SimpleNavigation
58
63
 
59
64
  context "when the controller's template is stored as instance var (Rails2)" do
60
65
  context "when the controller's template is set" do
61
- before { controller.stub(instance_variable_get: template) }
66
+ before { allow(controller).to receive_messages(instance_variable_get: template) }
62
67
 
63
68
  it "sets the adapter's template accordingly" do
64
69
  expect(adapter.template).to be template
@@ -66,7 +71,7 @@ module SimpleNavigation
66
71
  end
67
72
 
68
73
  context "when the controller's template is not set" do
69
- before { controller.stub(instance_variable_get: nil) }
74
+ before { allow(controller).to receive_messages(instance_variable_get: nil) }
70
75
 
71
76
  it "set the adapter's template to nil" do
72
77
  expect(adapter.template).to be_nil
@@ -76,7 +81,7 @@ module SimpleNavigation
76
81
 
77
82
  context "when the controller's template is stored as view_context (Rails3)" do
78
83
  context 'and the template is set' do
79
- before { controller.stub(view_context: template) }
84
+ before { allow(controller).to receive_messages(view_context: template) }
80
85
 
81
86
  it "sets the adapter's template accordingly" do
82
87
  expect(adapter.template).to be template
@@ -84,7 +89,7 @@ module SimpleNavigation
84
89
  end
85
90
 
86
91
  context 'and the template is not set' do
87
- before { controller.stub(view_context: nil) }
92
+ before { allow(controller).to receive_messages(view_context: nil) }
88
93
 
89
94
  it "sets the adapter's template to nil" do
90
95
  expect(adapter.template).to be_nil
@@ -92,10 +97,10 @@ module SimpleNavigation
92
97
  end
93
98
  end
94
99
  end
95
-
100
+
96
101
  describe '#request_uri' do
97
102
  context "when the adapter's request is set" do
98
- before { adapter.stub(request: request) }
103
+ before { allow(adapter).to receive_messages(request: request) }
99
104
 
100
105
  context 'and request.fullpath is defined' do
101
106
  let(:request) { double(:request, fullpath: '/fullpath') }
@@ -108,7 +113,7 @@ module SimpleNavigation
108
113
  context 'and request.fullpath is not defined' do
109
114
  let(:request) { double(:request, request_uri: '/request_uri') }
110
115
 
111
- before { adapter.stub(request: request) }
116
+ before { allow(adapter).to receive_messages(request: request) }
112
117
 
113
118
  it "sets the adapter's request_uri to the request.request_uri" do
114
119
  expect(adapter.request_uri).to eq '/request_uri'
@@ -117,19 +122,19 @@ module SimpleNavigation
117
122
  end
118
123
 
119
124
  context "when the adapter's request is not set" do
120
- before { adapter.stub(request: nil) }
125
+ before { allow(adapter).to receive_messages(request: nil) }
121
126
 
122
127
  it "sets the adapter's request_uri to an empty string" do
123
128
  expect(adapter.request_uri).to eq ''
124
129
  end
125
130
  end
126
131
  end
127
-
132
+
128
133
  describe '#request_path' do
129
134
  context "when the adapter's request is set" do
130
135
  let(:request) { double(:request, path: '/request_path') }
131
136
 
132
- before { adapter.stub(request: request) }
137
+ before { allow(adapter).to receive_messages(request: request) }
133
138
 
134
139
  it "sets the adapter's request_path to the request.path" do
135
140
  expect(adapter.request_path).to eq '/request_path'
@@ -137,7 +142,7 @@ module SimpleNavigation
137
142
  end
138
143
 
139
144
  context "when the adapter's request is not set" do
140
- before { adapter.stub(request: nil) }
145
+ before { allow(adapter).to receive_messages(request: nil) }
141
146
 
142
147
  it "sets the adapter's request_path to an empty string" do
143
148
  expect(adapter.request_path).to eq ''
@@ -189,7 +194,7 @@ module SimpleNavigation
189
194
 
190
195
  describe '#current_page?' do
191
196
  context "when the adapter's template is set" do
192
- before { adapter.stub(template: template) }
197
+ before { allow(adapter).to receive_messages(template: template) }
193
198
 
194
199
  it 'delegates the call to the template' do
195
200
  expect(template).to receive(:current_page?).with(:page)
@@ -198,7 +203,7 @@ module SimpleNavigation
198
203
  end
199
204
 
200
205
  context "when the adapter's template is not set" do
201
- before { adapter.stub(template: nil) }
206
+ before { allow(adapter).to receive_messages(template: nil) }
202
207
 
203
208
  it 'returns false' do
204
209
  expect(adapter).not_to be_current_page(:page)
@@ -210,7 +215,7 @@ module SimpleNavigation
210
215
  let(:options) { double(:options) }
211
216
 
212
217
  context "when the adapter's template is set" do
213
- before { adapter.stub(template: template, html_safe: 'safe_text') }
218
+ before { allow(adapter).to receive_messages(template: template, html_safe: 'safe_text') }
214
219
 
215
220
  context 'with considering item names as safe' do
216
221
  before { SimpleNavigation.config.consider_item_names_as_safe = true }
@@ -232,11 +237,10 @@ module SimpleNavigation
232
237
  end
233
238
  end
234
239
 
235
-
236
240
  end
237
241
 
238
242
  context "when the adapter's template is not set" do
239
- before { adapter.stub(template: nil) }
243
+ before { allow(adapter).to receive_messages(template: nil) }
240
244
 
241
245
  it 'returns nil' do
242
246
  expect(adapter.link_to('text', 'url', options)).to be_nil
@@ -248,7 +252,7 @@ module SimpleNavigation
248
252
  let(:options) { double(:options) }
249
253
 
250
254
  context "when the adapter's template is set" do
251
- before { adapter.stub(template: template, html_safe: 'safe_text') }
255
+ before { allow(adapter).to receive_messages(template: template, html_safe: 'safe_text') }
252
256
 
253
257
  it 'delegates the call to the template (with html_safe text)' do
254
258
  expect(template).to receive(:content_tag)
@@ -258,7 +262,7 @@ module SimpleNavigation
258
262
  end
259
263
 
260
264
  context "when the adapter's template is not set" do
261
- before { adapter.stub(template: nil) }
265
+ before { allow(adapter).to receive_messages(template: nil) }
262
266
 
263
267
  it 'returns nil' do
264
268
  expect(adapter.content_tag(:div, 'text', options)).to be_nil
@@ -266,67 +270,6 @@ module SimpleNavigation
266
270
  end
267
271
  end
268
272
 
269
- describe '#extract_controller_from' do
270
- context 'when context responds to controller' do
271
- it 'returns the controller' do
272
- expect(adapter.send(:extract_controller_from, context)).to be controller
273
- end
274
- end
275
-
276
- context 'when context does not respond to controller' do
277
- let(:context) { double(:context) }
278
-
279
- it 'returns the context' do
280
- expect(adapter.send(:extract_controller_from, context)).to be context
281
- end
282
- end
283
- end
284
-
285
- describe '#html_safe' do
286
- let(:input) { double(:input) }
287
-
288
- context 'when input responds to html_safe' do
289
- let(:safe) { double(:safe) }
290
-
291
- before { input.stub(html_safe: safe) }
292
-
293
- it 'returns the html safe version of the input' do
294
- expect(adapter.send(:html_safe, input)).to be safe
295
- end
296
- end
297
-
298
- context 'when input does not respond to html_safe' do
299
- it 'returns the input' do
300
- expect(adapter.send(:html_safe, input)).to be input
301
- end
302
- end
303
- end
304
-
305
- describe '#link_title' do
306
- let(:name) { double(:name, html_safe: safe) }
307
- let(:safe) { double(:safe) }
308
-
309
- context 'when config option consider_item_names_as_safe is true' do
310
- before { SimpleNavigation.config.consider_item_names_as_safe = true }
311
- after { SimpleNavigation.config.consider_item_names_as_safe = false }
312
-
313
- it 'uses the html_safe version of the name' do
314
- expect(adapter.send(:link_title, name)).to be safe
315
- end
316
- end
317
-
318
- # TODO: Does it make sense ?
319
- context 'when config option consider_item_names_as_safe is false (default)' do
320
- before do
321
- SimpleNavigation.config.consider_item_names_as_safe = false
322
- adapter.stub(template: template)
323
- end
324
-
325
- it 'uses the item name' do
326
- expect(adapter.send(:link_title, name)).to be name
327
- end
328
- end
329
- end
330
273
  end
331
274
  end
332
275
  end