simple-navigation 3.13.0 → 4.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +10 -3
  5. data/CHANGELOG.md +420 -0
  6. data/Guardfile +4 -2
  7. data/LICENSE +1 -1
  8. data/README.md +30 -7
  9. data/Rakefile +25 -2
  10. data/gemfiles/.bundle/config +2 -0
  11. data/gemfiles/rails-3-2-stable.gemfile +11 -0
  12. data/gemfiles/rails-4-1-stable.gemfile +7 -0
  13. data/gemfiles/rails-4-2-stable.gemfile +7 -0
  14. data/generators/navigation_config/navigation_config_generator.rb +0 -1
  15. data/generators/navigation_config/templates/config/navigation.rb +18 -15
  16. data/lib/simple_navigation.rb +25 -42
  17. data/lib/simple_navigation/adapters/padrino.rb +2 -2
  18. data/lib/simple_navigation/adapters/rails.rb +1 -24
  19. data/lib/simple_navigation/adapters/sinatra.rb +2 -11
  20. data/lib/simple_navigation/config_file.rb +36 -0
  21. data/lib/simple_navigation/config_file_finder.rb +42 -0
  22. data/lib/simple_navigation/{core/configuration.rb → configuration.rb} +7 -1
  23. data/lib/simple_navigation/{rendering/helpers.rb → helpers.rb} +0 -4
  24. data/lib/simple_navigation/{core/item.rb → item.rb} +76 -83
  25. data/lib/simple_navigation/{core/item_adapter.rb → item_adapter.rb} +3 -17
  26. data/lib/simple_navigation/{core/item_container.rb → item_container.rb} +23 -14
  27. data/lib/simple_navigation/{core/items_provider.rb → items_provider.rb} +0 -0
  28. data/lib/simple_navigation/railtie.rb +7 -0
  29. data/lib/simple_navigation/renderer.rb +12 -0
  30. data/lib/simple_navigation/{rendering/renderer → renderer}/base.rb +1 -1
  31. data/lib/simple_navigation/{rendering/renderer → renderer}/breadcrumbs.rb +0 -0
  32. data/lib/simple_navigation/{rendering/renderer → renderer}/json.rb +2 -0
  33. data/lib/simple_navigation/{rendering/renderer → renderer}/links.rb +0 -0
  34. data/lib/simple_navigation/{rendering/renderer → renderer}/list.rb +0 -0
  35. data/lib/simple_navigation/{rendering/renderer → renderer}/text.rb +0 -0
  36. data/lib/simple_navigation/version.rb +1 -1
  37. data/simple-navigation.gemspec +6 -5
  38. data/spec/fake_app/config/navigation.rb +6 -0
  39. data/spec/fake_app/rails_app.rb +35 -0
  40. data/spec/initializers/coveralls.rb +3 -0
  41. data/spec/initializers/have_css_matcher.rb +8 -3
  42. data/spec/initializers/memfs.rb +7 -0
  43. data/spec/initializers/rails.rb +4 -0
  44. data/spec/initializers/rspec.rb +7 -0
  45. data/spec/integration/rendering_navigation_spec.rb +14 -0
  46. data/spec/{lib/simple_navigation → simple_navigation}/adapters/padrino_spec.rb +0 -2
  47. data/spec/{lib/simple_navigation → simple_navigation}/adapters/rails_spec.rb +43 -94
  48. data/spec/{lib/simple_navigation → simple_navigation}/adapters/sinatra_spec.rb +4 -6
  49. data/spec/simple_navigation/config_file_finder_spec.rb +50 -0
  50. data/spec/simple_navigation/config_file_spec.rb +25 -0
  51. data/spec/{lib/simple_navigation/core → simple_navigation}/configuration_spec.rb +29 -19
  52. data/spec/{lib/simple_navigation/rendering → simple_navigation}/helpers_spec.rb +10 -13
  53. data/spec/{lib/simple_navigation/core → simple_navigation}/item_adapter_spec.rb +14 -11
  54. data/spec/{lib/simple_navigation/core → simple_navigation}/item_container_spec.rb +130 -42
  55. data/spec/simple_navigation/item_spec.rb +475 -0
  56. data/spec/{lib/simple_navigation/core → simple_navigation}/items_provider_spec.rb +1 -3
  57. data/spec/{lib/simple_navigation/rendering → simple_navigation}/renderer/base_spec.rb +34 -36
  58. data/spec/{lib/simple_navigation/rendering → simple_navigation}/renderer/breadcrumbs_spec.rb +4 -7
  59. data/spec/{lib/simple_navigation/rendering → simple_navigation}/renderer/json_spec.rb +5 -11
  60. data/spec/{lib/simple_navigation/rendering → simple_navigation}/renderer/links_spec.rb +5 -8
  61. data/spec/{lib/simple_navigation/rendering → simple_navigation}/renderer/list_spec.rb +4 -7
  62. data/spec/{lib/simple_navigation/rendering → simple_navigation}/renderer/text_spec.rb +4 -7
  63. data/spec/simple_navigation_spec.rb +190 -0
  64. data/spec/spec_helper.rb +29 -35
  65. metadata +128 -113
  66. data/CHANGELOG +0 -288
  67. data/lib/simple_navigation/core.rb +0 -5
  68. data/lib/simple_navigation/rails_controller_methods.rb +0 -164
  69. data/lib/simple_navigation/rendering.rb +0 -12
  70. data/rails/init.rb +0 -1
  71. data/spec/lib/simple_navigation/core/item_spec.rb +0 -703
  72. data/spec/lib/simple_navigation/rails_controller_methods_spec.rb +0 -270
  73. data/spec/lib/simple_navigation_spec.rb +0 -300
@@ -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 "\
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
15
15
  "as explicit highlighting of the currently active " \
16
16
  "navigation through regular expressions."
17
17
  spec.summary = "simple-navigation is a ruby library for creating navigations "\
18
- "(with multiple levels) for your Rails2, Rails3, Rails4, Sinatra or " \
18
+ "(with multiple levels) for your Rails, Sinatra or " \
19
19
  "Padrino application."
20
20
  spec.homepage = 'http://github.com/codeplant/simple-navigation'
21
21
  spec.license = 'MIT'
@@ -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', html: {class: 'item_1'}, link_html: {id: 'link_1'}
4
+ nav.item :item_2, 'Item 2', '/item_2', html: {class: 'item_2'}, link_html: {id: 'link_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,14 @@
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
+ expect(page).to have_selector('li.item_1 a#link_1')
12
+ expect(page).to have_selector('li.item_2 a#link_2')
13
+ end
14
+ 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,10 +203,16 @@ 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
- expect(adapter).not_to be_current_page(:page)
209
+ expect(adapter.current_page?(:page)).to be_falsey
210
+ end
211
+ end
212
+
213
+ context 'when the given url is nil' do
214
+ it 'returns false' do
215
+ expect(adapter.current_page?(nil)).to be_falsey
205
216
  end
206
217
  end
207
218
  end
@@ -210,7 +221,7 @@ module SimpleNavigation
210
221
  let(:options) { double(:options) }
211
222
 
212
223
  context "when the adapter's template is set" do
213
- before { adapter.stub(template: template, html_safe: 'safe_text') }
224
+ before { allow(adapter).to receive_messages(template: template, html_safe: 'safe_text') }
214
225
 
215
226
  context 'with considering item names as safe' do
216
227
  before { SimpleNavigation.config.consider_item_names_as_safe = true }
@@ -232,11 +243,10 @@ module SimpleNavigation
232
243
  end
233
244
  end
234
245
 
235
-
236
246
  end
237
247
 
238
248
  context "when the adapter's template is not set" do
239
- before { adapter.stub(template: nil) }
249
+ before { allow(adapter).to receive_messages(template: nil) }
240
250
 
241
251
  it 'returns nil' do
242
252
  expect(adapter.link_to('text', 'url', options)).to be_nil
@@ -248,7 +258,7 @@ module SimpleNavigation
248
258
  let(:options) { double(:options) }
249
259
 
250
260
  context "when the adapter's template is set" do
251
- before { adapter.stub(template: template, html_safe: 'safe_text') }
261
+ before { allow(adapter).to receive_messages(template: template, html_safe: 'safe_text') }
252
262
 
253
263
  it 'delegates the call to the template (with html_safe text)' do
254
264
  expect(template).to receive(:content_tag)
@@ -258,7 +268,7 @@ module SimpleNavigation
258
268
  end
259
269
 
260
270
  context "when the adapter's template is not set" do
261
- before { adapter.stub(template: nil) }
271
+ before { allow(adapter).to receive_messages(template: nil) }
262
272
 
263
273
  it 'returns nil' do
264
274
  expect(adapter.content_tag(:div, 'text', options)).to be_nil
@@ -266,67 +276,6 @@ module SimpleNavigation
266
276
  end
267
277
  end
268
278
 
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
279
  end
331
280
  end
332
281
  end
@@ -1,16 +1,14 @@
1
- require 'spec_helper'
2
-
3
1
  describe SimpleNavigation::Adapters::Sinatra do
4
2
  let(:adapter) { SimpleNavigation::Adapters::Sinatra.new(context) }
5
3
  let(:context) { double(:context) }
6
4
  let(:request) { double(:request, fullpath: '/full?param=true', path: '/full') }
7
5
 
8
- before { context.stub(request: request) }
6
+ before { allow(context).to receive_messages(request: request) }
9
7
 
10
8
  describe '#context_for_eval' do
11
9
  context "when adapter's context is not set" do
12
10
  it 'raises an exception' do
13
- adapter.stub(context: nil)
11
+ allow(adapter).to receive_messages(context: nil)
14
12
  expect{ adapter.context_for_eval }.to raise_error
15
13
  end
16
14
  end
@@ -35,7 +33,7 @@ describe SimpleNavigation::Adapters::Sinatra do
35
33
  end
36
34
 
37
35
  describe '#current_page?' do
38
- before { request.stub(scheme: 'http', host_with_port: 'my_host:5000') }
36
+ before { allow(request).to receive_messages(scheme: 'http', host_with_port: 'my_host:5000') }
39
37
 
40
38
  shared_examples 'detecting current page' do |url, expected|
41
39
  context "when url is #{url}" do
@@ -59,7 +57,7 @@ describe SimpleNavigation::Adapters::Sinatra do
59
57
 
60
58
  context 'when URL is encoded' do
61
59
  before do
62
- request.stub(fullpath: '/full%20with%20spaces?param=true',
60
+ allow(request).to receive_messages(fullpath: '/full%20with%20spaces?param=true',
63
61
  path: '/full%20with%20spaces')
64
62
  end
65
63