nanoc 4.8.2 → 4.8.3

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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS.md +13 -1
  3. data/lib/nanoc/base/entities/document.rb +6 -1
  4. data/lib/nanoc/base/entities/identifier.rb +10 -3
  5. data/lib/nanoc/cli/command_runner.rb +27 -4
  6. data/lib/nanoc/cli/commands/view.rb +6 -2
  7. data/lib/nanoc/spec.rb +10 -0
  8. data/lib/nanoc/version.rb +1 -1
  9. data/spec/nanoc/base/entities/document_spec.rb +30 -0
  10. data/spec/nanoc/base/entities/identifier_spec.rb +13 -3
  11. data/spec/nanoc/base/item_rep_writer_spec.rb +1 -1
  12. data/spec/nanoc/base/services/executor_spec.rb +1 -1
  13. data/spec/nanoc/base/views/document_view_spec.rb +13 -13
  14. data/spec/nanoc/base/views/item_rep_view_spec.rb +15 -15
  15. data/spec/nanoc/base/views/item_view_spec.rb +21 -12
  16. data/spec/nanoc/base/views/layout_view_spec.rb +2 -2
  17. data/spec/nanoc/base/views/mutable_document_view_spec.rb +3 -3
  18. data/spec/nanoc/base/views/mutable_identifiable_collection_view_spec.rb +4 -4
  19. data/spec/nanoc/base/views/mutable_item_collection_view_spec.rb +5 -5
  20. data/spec/nanoc/base/views/mutable_item_view_spec.rb +3 -3
  21. data/spec/nanoc/base/views/mutable_layout_collection_view_spec.rb +5 -5
  22. data/spec/nanoc/base/views/mutable_layout_view_spec.rb +2 -2
  23. data/spec/nanoc/base/views/post_compile_item_rep_view_spec.rb +1 -1
  24. data/spec/nanoc/cli/command_runner_spec.rb +90 -0
  25. data/spec/nanoc/cli/commands/show_rules_spec.rb +1 -0
  26. data/spec/nanoc/cli/commands/view_spec.rb +13 -0
  27. data/spec/nanoc/cli_spec.rb +1 -1
  28. data/spec/nanoc/data_sources/filesystem_spec.rb +1 -1
  29. data/spec/nanoc/helpers/blogging_spec.rb +18 -18
  30. data/spec/nanoc/helpers/link_to_spec.rb +8 -8
  31. data/spec/spec_helper.rb +7 -8
  32. data/test/base/test_data_source.rb +8 -8
  33. data/test/base/test_item_array.rb +11 -11
  34. data/test/cli/commands/test_compile.rb +2 -2
  35. data/test/filters/test_handlebars.rb +3 -3
  36. data/test/filters/test_mustache.rb +2 -2
  37. data/test/filters/test_relativize_paths.rb +29 -29
  38. data/test/filters/test_sass.rb +1 -1
  39. data/test/filters/test_xsl.rb +6 -6
  40. data/test/helpers/test_capturing.rb +1 -1
  41. data/test/helpers/test_xml_sitemap.rb +15 -15
  42. metadata +4 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1d77db1ef0d5fababb5232e354b5e1bed88749d7
4
- data.tar.gz: 5b3cd5972c29fa74a0bea92a59212861e24eb5c7
3
+ metadata.gz: 7b1d74ffa8fb8b247dcda27d5663209908450d0e
4
+ data.tar.gz: e3df83ea0b47564aaa41837544282f5b9ae793b2
5
5
  SHA512:
6
- metadata.gz: 0a5d0f6f801a97f57efce1d06c872dada0ff50a9c3f88f068b4c5a617509b81e513473b08a5c5dabb864ede7e18d96d3c6c465c46a259d5f3f06411782134b1b
7
- data.tar.gz: 07a596f5a268ce116ac1d9dc1897ea0d1211bb051a5413965d2029d780008b3350668fe5224b4bb999eea52c505a83e3fc0b18db785ee7ea437470eda0fc37ae
6
+ metadata.gz: 02df11311b85cfe8d451e35afd31e6fae632ae468b2f79102dadb43be76881d15573a635c7b41c18f218d600294120f52790a9616b943c2b4d0fe449955668f1
7
+ data.tar.gz: 6f4c42e24182f4df836e10f4207c3fcb475462e439d2d0fd1e3e82a6bedda0d30a7e43ca0b82cd1ff4f03a793c8d078281cb42fdfdb15eee3c7fa28b15cfaa3b
data/NEWS.md CHANGED
@@ -1,8 +1,20 @@
1
1
  # Nanoc news
2
2
 
3
+ ## 4.8.3 (2017-08-30)
4
+
5
+ Fixes:
6
+
7
+ * Disallowed full identifiers from ending with a slash (#1206)
8
+ * Made `nanoc view` listen on 127.0.0.1, not 0.0.0.0, by default (#1205)
9
+
10
+ Enhancements:
11
+
12
+ * Made `nanoc view` print site URL (#1204)
13
+ * Made `nanoc` search for parent directory containing Nanoc site (#1210)
14
+
3
15
  ## 4.8.2 (2017-08-19)
4
16
 
5
- Fixed:
17
+ Fixes:
6
18
 
7
19
  * Fixed compatibility issue with guard-nanoc
8
20
 
@@ -15,7 +15,7 @@ module Nanoc
15
15
  end
16
16
 
17
17
  # @return [Nanoc::Identifier]
18
- attr_accessor :identifier
18
+ attr_reader :identifier
19
19
 
20
20
  # @return [String, nil]
21
21
  attr_accessor :checksum_data
@@ -81,6 +81,11 @@ module Nanoc
81
81
  raise NotImplementedError
82
82
  end
83
83
 
84
+ contract C::Or[Nanoc::Identifier, String] => Nanoc::Identifier
85
+ def identifier=(new_identifier)
86
+ @identifier = Nanoc::Identifier.from(new_identifier)
87
+ end
88
+
84
89
  contract C::None => String
85
90
  def inspect
86
91
  "<#{self.class} identifier=\"#{identifier}\">"
@@ -12,6 +12,13 @@ module Nanoc
12
12
  end
13
13
  end
14
14
 
15
+ # @api private
16
+ class InvalidFullIdentifierError < ::Nanoc::Error
17
+ def initialize(string)
18
+ super("Invalid full identifier (ends with a slash): #{string.inspect}")
19
+ end
20
+ end
21
+
15
22
  # @api private
16
23
  class InvalidTypeError < ::Nanoc::Error
17
24
  def initialize(type)
@@ -60,9 +67,9 @@ module Nanoc
60
67
  when :legacy
61
68
  @string = "/#{string}/".gsub(/^\/+|\/+$/, '/').freeze
62
69
  when :full
63
- if string !~ /\A\//
64
- raise InvalidIdentifierError.new(string)
65
- end
70
+ raise InvalidIdentifierError.new(string) if string !~ /\A\//
71
+ raise InvalidFullIdentifierError.new(string) if string =~ /\/\z/
72
+
66
73
  @string = string.dup.freeze
67
74
  else
68
75
  raise InvalidTypeError.new(@type)
@@ -43,17 +43,40 @@ module Nanoc::CLI
43
43
  end
44
44
  alias is_in_site_dir? in_site_dir?
45
45
 
46
+ def self.find_site_dir
47
+ start_here = Dir.pwd
48
+
49
+ here = start_here
50
+ until Nanoc::Int::SiteLoader.cwd_is_nanoc_site?
51
+ Dir.chdir('..')
52
+ return nil if Dir.pwd == here
53
+ here = Dir.pwd
54
+ end
55
+ here
56
+ ensure
57
+ Dir.chdir(start_here)
58
+ end
59
+
60
+ def self.enter_site_dir
61
+ dir = find_site_dir
62
+ if dir.nil?
63
+ raise ::Nanoc::Int::Errors::GenericTrivial, 'The current working directory, nor any of its parents, seems to be a Nanoc site.'
64
+ end
65
+
66
+ return if Dir.getwd == dir
67
+ $stderr.puts "Using Nanoc site in #{dir}"
68
+ Dir.chdir(dir)
69
+ end
70
+
46
71
  # Asserts that the current working directory contains a site and loads the site into memory.
47
72
  #
48
73
  # @return [void]
49
74
  def load_site(preprocess: false)
75
+ self.class.enter_site_dir
76
+
50
77
  $stderr.print 'Loading site… '
51
78
  $stderr.flush
52
79
 
53
- if site.nil?
54
- raise ::Nanoc::Int::Errors::GenericTrivial, 'The current working directory does not seem to be a Nanoc site.'
55
- end
56
-
57
80
  if preprocess
58
81
  site.compiler.action_provider.preprocess(site)
59
82
  end
@@ -9,7 +9,7 @@ description <<~EOS
9
9
  EOS
10
10
 
11
11
  required :H, :handler, 'specify the handler to use (webrick/mongrel/...)'
12
- required :o, :host, 'specify the host to listen on (default: 0.0.0.0)'
12
+ required :o, :host, 'specify the host to listen on (default: 127.0.0.1)'
13
13
  required :p, :port, 'specify the port to listen on (default: 3000)'
14
14
 
15
15
  module Nanoc::CLI::Commands
@@ -25,7 +25,7 @@ module Nanoc::CLI::Commands
25
25
  # Set options
26
26
  options_for_rack = {
27
27
  Port: (options[:port] || 3000).to_i,
28
- Host: (options[:host] || '0.0.0.0'),
28
+ Host: (options[:host] || '127.0.0.1'),
29
29
  }
30
30
 
31
31
  # Get handler
@@ -52,6 +52,10 @@ module Nanoc::CLI::Commands
52
52
  run Rack::File.new(site.config[:output_dir])
53
53
  end.to_app
54
54
 
55
+ # Print a link
56
+ url = "http://#{options_for_rack[:Host]}:#{options_for_rack[:Port]}/"
57
+ puts "View the site at #{url}"
58
+
55
59
  # Run autocompiler
56
60
  handler.run(app, options_for_rack)
57
61
  end
@@ -3,6 +3,16 @@
3
3
  module Nanoc
4
4
  # @api private
5
5
  module Spec
6
+ module Helper
7
+ def chdir(dir)
8
+ here = Dir.getwd
9
+ Dir.chdir(dir)
10
+ yield
11
+ ensure
12
+ Dir.chdir(here)
13
+ end
14
+ end
15
+
6
16
  class HelperContext
7
17
  # @return [Nanoc::Int::DependencyTracker]
8
18
  attr_reader :dependency_tracker
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Nanoc
4
4
  # The current Nanoc version.
5
- VERSION = '4.8.2'
5
+ VERSION = '4.8.3'
6
6
  end
@@ -225,4 +225,34 @@ shared_examples 'a document' do
225
225
  expect(subject.attributes).to eq(at: 'ribut')
226
226
  end
227
227
  end
228
+
229
+ describe '#identifier=' do
230
+ let(:document) { described_class.new('stuff', {}, '/foo.md') }
231
+
232
+ it 'allows changing to a string that contains a full identifier' do
233
+ expect { document.identifier = '/thing' }.not_to raise_error
234
+
235
+ expect(document.identifier).to eq('/thing')
236
+ expect(document.identifier).to be_full
237
+ end
238
+
239
+ it 'refuses changing to a string that does not contain a full identifier' do
240
+ expect { document.identifier = '/thing/' }
241
+ .to raise_error(Nanoc::Identifier::InvalidFullIdentifierError)
242
+ end
243
+
244
+ it 'allos changing to a full identifier' do
245
+ document.identifier = Nanoc::Identifier.new('/thing')
246
+
247
+ expect(document.identifier.to_s).to eq('/thing')
248
+ expect(document.identifier).to be_full
249
+ end
250
+
251
+ it 'allos changing to a legacy identifier' do
252
+ document.identifier = Nanoc::Identifier.new('/thing/', type: :legacy)
253
+
254
+ expect(document.identifier).to eq('/thing/')
255
+ expect(document.identifier).to be_legacy
256
+ end
257
+ end
228
258
  end
@@ -67,6 +67,16 @@ describe Nanoc::Identifier do
67
67
  .to raise_error(Nanoc::Identifier::InvalidIdentifierError)
68
68
  end
69
69
 
70
+ it 'refuses string ending with a slash' do
71
+ expect { described_class.new('/foo/') }
72
+ .to raise_error(Nanoc::Identifier::InvalidFullIdentifierError)
73
+ end
74
+
75
+ it 'refuses string with only slash' do
76
+ expect { described_class.new('/') }
77
+ .to raise_error(Nanoc::Identifier::InvalidFullIdentifierError)
78
+ end
79
+
70
80
  it 'has proper string representation' do
71
81
  expect(described_class.new('/foo').to_s).to eql('/foo')
72
82
  end
@@ -422,7 +432,7 @@ describe Nanoc::Identifier do
422
432
  end
423
433
 
424
434
  context 'full type' do
425
- let(:identifier) { described_class.new('/foo/', type: :full) }
435
+ let(:identifier) { described_class.new('/foo', type: :full) }
426
436
  it { is_expected.to eql(false) }
427
437
  end
428
438
  end
@@ -436,7 +446,7 @@ describe Nanoc::Identifier do
436
446
  end
437
447
 
438
448
  context 'full type' do
439
- let(:identifier) { described_class.new('/foo/', type: :full) }
449
+ let(:identifier) { described_class.new('/foo', type: :full) }
440
450
  it { is_expected.to eql(true) }
441
451
  end
442
452
  end
@@ -445,7 +455,7 @@ describe Nanoc::Identifier do
445
455
  subject { identifier.components }
446
456
 
447
457
  context 'no components' do
448
- let(:identifier) { described_class.new('/') }
458
+ let(:identifier) { described_class.new('/', type: :legacy) }
449
459
  it { is_expected.to eql([]) }
450
460
  end
451
461
 
@@ -4,7 +4,7 @@ describe Nanoc::Int::ItemRepWriter do
4
4
  describe '#write' do
5
5
  let(:raw_path) { 'output/blah.dat' }
6
6
 
7
- let(:item) { Nanoc::Int::Item.new(orig_content, {}, '/') }
7
+ let(:item) { Nanoc::Int::Item.new(orig_content, {}, '/foo') }
8
8
 
9
9
  let(:item_rep) do
10
10
  Nanoc::Int::ItemRep.new(item, :default).tap do |ir|
@@ -653,7 +653,7 @@ describe Nanoc::Int::Executor do
653
653
  let(:arg) { '/default' }
654
654
 
655
655
  let(:layouts) do
656
- [Nanoc::Int::Layout.new('head <%= @foo %> foot', {}, '/default/')]
656
+ [Nanoc::Int::Layout.new('head <%= @foo %> foot', {}, Nanoc::Identifier.new('/default/', type: :legacy))]
657
657
  end
658
658
 
659
659
  it { is_expected.to eq(layouts[0]) }
@@ -27,7 +27,7 @@ shared_examples 'a document view' do
27
27
  end
28
28
 
29
29
  describe '#frozen?' do
30
- let(:document) { entity_class.new('content', {}, '/asdf/') }
30
+ let(:document) { entity_class.new('content', {}, '/asdf') }
31
31
 
32
32
  subject { view.frozen? }
33
33
 
@@ -42,10 +42,10 @@ shared_examples 'a document view' do
42
42
  end
43
43
 
44
44
  describe '#== and #eql?' do
45
- let(:document) { entity_class.new('content', {}, '/asdf/') }
45
+ let(:document) { entity_class.new('content', {}, '/asdf') }
46
46
 
47
47
  context 'comparing with document with same identifier' do
48
- let(:other) { entity_class.new('content', {}, '/asdf/') }
48
+ let(:other) { entity_class.new('content', {}, '/asdf') }
49
49
 
50
50
  it 'is ==' do
51
51
  expect(view).to eq(other)
@@ -57,7 +57,7 @@ shared_examples 'a document view' do
57
57
  end
58
58
 
59
59
  context 'comparing with document with different identifier' do
60
- let(:other) { entity_class.new('content', {}, '/fdsa/') }
60
+ let(:other) { entity_class.new('content', {}, '/fdsa') }
61
61
 
62
62
  it 'is not ==' do
63
63
  expect(view).not_to eq(other)
@@ -69,7 +69,7 @@ shared_examples 'a document view' do
69
69
  end
70
70
 
71
71
  context 'comparing with document view with same identifier' do
72
- let(:other) { other_view_class.new(entity_class.new('content', {}, '/asdf/'), nil) }
72
+ let(:other) { other_view_class.new(entity_class.new('content', {}, '/asdf'), nil) }
73
73
 
74
74
  it 'is ==' do
75
75
  expect(view).to eq(other)
@@ -81,7 +81,7 @@ shared_examples 'a document view' do
81
81
  end
82
82
 
83
83
  context 'comparing with document view with different identifier' do
84
- let(:other) { other_view_class.new(entity_class.new('content', {}, '/fdsa/'), nil) }
84
+ let(:other) { other_view_class.new(entity_class.new('content', {}, '/fdsa'), nil) }
85
85
 
86
86
  it 'is not ==' do
87
87
  expect(view).not_to eq(other)
@@ -106,7 +106,7 @@ shared_examples 'a document view' do
106
106
  end
107
107
 
108
108
  describe '#[]' do
109
- let(:document) { entity_class.new('stuff', { animal: 'donkey' }, '/foo/') }
109
+ let(:document) { entity_class.new('stuff', { animal: 'donkey' }, '/foo') }
110
110
 
111
111
  subject { view[key] }
112
112
 
@@ -154,7 +154,7 @@ shared_examples 'a document view' do
154
154
  end
155
155
 
156
156
  describe '#attributes' do
157
- let(:document) { entity_class.new('stuff', { animal: 'donkey' }, '/foo/') }
157
+ let(:document) { entity_class.new('stuff', { animal: 'donkey' }, '/foo') }
158
158
 
159
159
  subject { view.attributes }
160
160
 
@@ -179,7 +179,7 @@ shared_examples 'a document view' do
179
179
  end
180
180
 
181
181
  describe '#fetch' do
182
- let(:document) { entity_class.new('stuff', { animal: 'donkey' }, '/foo/') }
182
+ let(:document) { entity_class.new('stuff', { animal: 'donkey' }, '/foo') }
183
183
 
184
184
  context 'with existant key' do
185
185
  let(:key) { :animal }
@@ -260,7 +260,7 @@ shared_examples 'a document view' do
260
260
  end
261
261
 
262
262
  describe '#key?' do
263
- let(:document) { entity_class.new('stuff', { animal: 'donkey' }, '/foo/') }
263
+ let(:document) { entity_class.new('stuff', { animal: 'donkey' }, '/foo') }
264
264
 
265
265
  subject { view.key?(key) }
266
266
 
@@ -308,15 +308,15 @@ shared_examples 'a document view' do
308
308
  end
309
309
 
310
310
  describe '#hash' do
311
- let(:document) { double(:document, identifier: '/foo/') }
311
+ let(:document) { double(:document, identifier: '/foo') }
312
312
 
313
313
  subject { view.hash }
314
314
 
315
- it { should == described_class.hash ^ '/foo/'.hash }
315
+ it { should == described_class.hash ^ '/foo'.hash }
316
316
  end
317
317
 
318
318
  describe '#raw_content' do
319
- let(:document) { entity_class.new('stuff', { animal: 'donkey' }, '/foo/') }
319
+ let(:document) { entity_class.new('stuff', { animal: 'donkey' }, '/foo') }
320
320
 
321
321
  subject { view.raw_content }
322
322
 
@@ -31,7 +31,7 @@ describe Nanoc::ItemRepView do
31
31
 
32
32
  describe '#frozen?' do
33
33
  let(:item_rep) { Nanoc::Int::ItemRep.new(item, :jacques) }
34
- let(:item) { Nanoc::Int::Item.new('asdf', {}, '/foo/') }
34
+ let(:item) { Nanoc::Int::Item.new('asdf', {}, '/foo') }
35
35
  let(:view) { described_class.new(item_rep, view_context) }
36
36
 
37
37
  subject { view.frozen? }
@@ -48,11 +48,11 @@ describe Nanoc::ItemRepView do
48
48
 
49
49
  describe '#== and #eql?' do
50
50
  let(:item_rep) { Nanoc::Int::ItemRep.new(item, :jacques) }
51
- let(:item) { Nanoc::Int::Item.new('asdf', {}, '/foo/') }
51
+ let(:item) { Nanoc::Int::Item.new('asdf', {}, '/foo') }
52
52
  let(:view) { described_class.new(item_rep, view_context) }
53
53
 
54
54
  context 'comparing with item rep with same identifier' do
55
- let(:other_item) { double(:other_item, identifier: '/foo/') }
55
+ let(:other_item) { double(:other_item, identifier: '/foo') }
56
56
  let(:other) { double(:other_item_rep, item: other_item, name: :jacques) }
57
57
 
58
58
  it 'is ==' do
@@ -65,7 +65,7 @@ describe Nanoc::ItemRepView do
65
65
  end
66
66
 
67
67
  context 'comparing with item rep with different identifier' do
68
- let(:other_item) { double(:other_item, identifier: '/bar/') }
68
+ let(:other_item) { double(:other_item, identifier: '/bar') }
69
69
  let(:other) { double(:other_item_rep, item: other_item, name: :jacques) }
70
70
 
71
71
  it 'is not ==' do
@@ -78,7 +78,7 @@ describe Nanoc::ItemRepView do
78
78
  end
79
79
 
80
80
  context 'comparing with item rep with different name' do
81
- let(:other_item) { double(:other_item, identifier: '/foo/') }
81
+ let(:other_item) { double(:other_item, identifier: '/foo') }
82
82
  let(:other) { double(:other_item_rep, item: other_item, name: :marvin) }
83
83
 
84
84
  it 'is not ==' do
@@ -91,7 +91,7 @@ describe Nanoc::ItemRepView do
91
91
  end
92
92
 
93
93
  context 'comparing with item rep with same identifier' do
94
- let(:other_item) { double(:other_item, identifier: '/foo/') }
94
+ let(:other_item) { double(:other_item, identifier: '/foo') }
95
95
  let(:other) { described_class.new(double(:other_item_rep, item: other_item, name: :jacques), view_context) }
96
96
 
97
97
  it 'is ==' do
@@ -104,7 +104,7 @@ describe Nanoc::ItemRepView do
104
104
  end
105
105
 
106
106
  context 'comparing with item rep with different identifier' do
107
- let(:other_item) { double(:other_item, identifier: '/bar/') }
107
+ let(:other_item) { double(:other_item, identifier: '/bar') }
108
108
  let(:other) { described_class.new(double(:other_item_rep, item: other_item, name: :jacques), view_context) }
109
109
 
110
110
  it 'is not equal' do
@@ -114,7 +114,7 @@ describe Nanoc::ItemRepView do
114
114
  end
115
115
 
116
116
  context 'comparing with item rep with different name' do
117
- let(:other_item) { double(:other_item, identifier: '/foo/') }
117
+ let(:other_item) { double(:other_item, identifier: '/foo') }
118
118
  let(:other) { described_class.new(double(:other_item_rep, item: other_item, name: :marvin), view_context) }
119
119
 
120
120
  it 'is not equal' do
@@ -124,7 +124,7 @@ describe Nanoc::ItemRepView do
124
124
  end
125
125
 
126
126
  context 'comparing with something that is not an item rep' do
127
- let(:other_item) { double(:other_item, identifier: '/foo/') }
127
+ let(:other_item) { double(:other_item, identifier: '/foo') }
128
128
  let(:other) { :donkey }
129
129
 
130
130
  it 'is not equal' do
@@ -136,12 +136,12 @@ describe Nanoc::ItemRepView do
136
136
 
137
137
  describe '#hash' do
138
138
  let(:item_rep) { Nanoc::Int::ItemRep.new(item, :jacques) }
139
- let(:item) { Nanoc::Int::Item.new('asdf', {}, '/foo/') }
139
+ let(:item) { Nanoc::Int::Item.new('asdf', {}, '/foo') }
140
140
  let(:view) { described_class.new(item_rep, view_context) }
141
141
 
142
142
  subject { view.hash }
143
143
 
144
- it { should == described_class.hash ^ Nanoc::Identifier.new('/foo/').hash ^ :jacques.hash }
144
+ it { should == described_class.hash ^ Nanoc::Identifier.new('/foo').hash ^ :jacques.hash }
145
145
  end
146
146
 
147
147
  describe '#snapshot?' do
@@ -349,7 +349,7 @@ describe Nanoc::ItemRepView do
349
349
 
350
350
  describe '#binary?' do
351
351
  let(:item_rep) { Nanoc::Int::ItemRep.new(item, :jacques) }
352
- let(:item) { Nanoc::Int::Item.new('asdf', {}, '/foo/') }
352
+ let(:item) { Nanoc::Int::Item.new('asdf', {}, '/foo') }
353
353
  let(:view) { described_class.new(item_rep, view_context) }
354
354
 
355
355
  subject { view.binary? }
@@ -383,7 +383,7 @@ describe Nanoc::ItemRepView do
383
383
 
384
384
  describe '#item' do
385
385
  let(:item_rep) { Nanoc::Int::ItemRep.new(item, :jacques) }
386
- let(:item) { Nanoc::Int::Item.new('asdf', {}, '/foo/') }
386
+ let(:item) { Nanoc::Int::Item.new('asdf', {}, '/foo') }
387
387
  let(:view) { described_class.new(item_rep, view_context) }
388
388
 
389
389
  subject { view.item }
@@ -399,11 +399,11 @@ describe Nanoc::ItemRepView do
399
399
 
400
400
  describe '#inspect' do
401
401
  let(:item_rep) { Nanoc::Int::ItemRep.new(item, :jacques) }
402
- let(:item) { Nanoc::Int::Item.new('asdf', {}, '/foo/') }
402
+ let(:item) { Nanoc::Int::Item.new('asdf', {}, '/foo') }
403
403
  let(:view) { described_class.new(item_rep, view_context) }
404
404
 
405
405
  subject { view.inspect }
406
406
 
407
- it { is_expected.to eql('<Nanoc::ItemRepView item.identifier=/foo/ name=jacques>') }
407
+ it { is_expected.to eql('<Nanoc::ItemRepView item.identifier=/foo name=jacques>') }
408
408
  end
409
409
  end