nanoc 4.5.1 → 4.5.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 963a654167126da5b235c766f7e80032c6497ca7
4
- data.tar.gz: d89d08f5f6415db09415371dfa025b54ce67ca30
3
+ metadata.gz: 64b516baea97186cbb7ad99448ae7c02e9ce9ab2
4
+ data.tar.gz: 0ff4539f5c80a3c1f75838b7cb60014d3ab13a0a
5
5
  SHA512:
6
- metadata.gz: 2e9ee6b3b3b960be731c3b4b0dac5364c6b7e52364cf8ea78701b70178bbc7ab127a98f0e7fe7ec318a0cd4177840ada2d71a8f7378fdab9debc38de897a24d1
7
- data.tar.gz: af88ecb08d44f280983a7e2abed64109597244d6c353451103acc8e67e93b51e62e4f2102d9965ae387106c8467d9d8ad9b15d63258fded42602a692cb9428e6
6
+ metadata.gz: 75b0aa1a6e74954ae178edbb234d46090310344ec13f00fde190cc0ab6822c136662a57c46f418fb68310a30ab194491ad42c3283a5e3f488913e7ccfa473c80
7
+ data.tar.gz: 242c70e3aa96b2730ce5614ee2d7a371cce65a8df888d40e8fc45b15f7deb73742643a5e509cdae79b6fd7a4ff8e3b6985fe2128b67d1e9087f784908d8ed65c
@@ -1,6 +1,6 @@
1
1
  GIT
2
2
  remote: git://github.com/bbatsov/rubocop.git
3
- revision: 29ffb9ae6a9c21da55c370dd41463faf58209937
3
+ revision: c8d652dfa521526ff91cbf769e0d3551d50e1f3e
4
4
  specs:
5
5
  rubocop (0.46.0)
6
6
  parser (>= 2.3.3.1, < 3.0)
@@ -27,7 +27,7 @@ GIT
27
27
  PATH
28
28
  remote: .
29
29
  specs:
30
- nanoc (4.5.1)
30
+ nanoc (4.5.2)
31
31
  cri (~> 2.3)
32
32
  ddplugin (~> 1.0)
33
33
  hamster (~> 3.0)
@@ -251,7 +251,7 @@ GEM
251
251
  rb-fsevent (~> 0.9, >= 0.9.4)
252
252
  rb-inotify (~> 0.9, >= 0.9.7)
253
253
  ruby_dep (~> 1.2)
254
- lumberjack (1.0.10)
254
+ lumberjack (1.0.11)
255
255
  m (1.5.0)
256
256
  method_source (>= 0.6.7)
257
257
  rake (>= 0.9.2.2)
@@ -354,7 +354,7 @@ GEM
354
354
  crack (>= 0.3.2)
355
355
  hashdiff
356
356
  xml-simple (1.1.5)
357
- yard (0.9.6)
357
+ yard (0.9.7)
358
358
  yard-contracts (0.1.5)
359
359
  contracts (~> 0.7)
360
360
  yard (~> 0.8)
data/NEWS.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Nanoc news
2
2
 
3
+ ## 4.5.2 (2017-01-11)
4
+
5
+ Fixes:
6
+
7
+ * Fixed handling of periods in full identifiers (#1022, #1059)
8
+ * Fixed “cannot layout binary items” error message (#1058)
9
+ * Fixed escaping of URLs in sitemaps (#1052, #1054)
10
+
3
11
  ## 4.5.1 (2017-01-09)
4
12
 
5
13
  Fixes:
@@ -39,6 +39,7 @@ require 'tempfile'
39
39
  require 'thread'
40
40
  require 'time'
41
41
  require 'yaml'
42
+ require 'uri'
42
43
  require 'English'
43
44
 
44
45
  # Load Nanoc
@@ -125,7 +125,7 @@ module Nanoc::Int
125
125
  # @param [Nanoc::Int::ItemRep] rep The item representation that was attempted
126
126
  # to be laid out
127
127
  def initialize(rep)
128
- super("The {rep.item.identifier}” item (rep “#{rep.name}”) cannot be laid out because it is a binary item. If you are getting this error for an item that should be textual instead of binary, make sure that its extension is included in the text_extensions array in the site configuration.")
128
+ super("The “#{rep.item.identifier}” item (rep “#{rep.name}”) cannot be laid out because it is a binary item. If you are getting this error for an item that should be textual instead of binary, make sure that its extension is included in the text_extensions array in the site configuration.")
129
129
  end
130
130
  end
131
131
 
@@ -302,9 +302,9 @@ module Nanoc::DataSources
302
302
 
303
303
  regex =
304
304
  if filename =~ /(^|\/)index(\.[^\/]+)?$/
305
- @config && @config[:allow_periods_in_identifiers] ? /\/?(index)?(\.[^\/\.]+)?$/ : /\/?index(\.[^\/]+)?$/
305
+ allow_periods_in_identifiers? ? /\/?(index)?(\.[^\/\.]+)?$/ : /\/?index(\.[^\/]+)?$/
306
306
  else
307
- @config && @config[:allow_periods_in_identifiers] ? /\.[^\/\.]+$/ : /\.[^\/]+$/
307
+ allow_periods_in_identifiers? ? /\.[^\/\.]+$/ : /\.[^\/]+$/
308
308
  end
309
309
  Nanoc::Identifier.new(filename.sub(regex, ''), type: :legacy)
310
310
  end
@@ -329,13 +329,21 @@ module Nanoc::DataSources
329
329
  #
330
330
  # @return [Regex]
331
331
  def extension_regex
332
- if @config && @config[:allow_periods_in_identifiers]
332
+ if allow_periods_in_identifiers?
333
333
  /(\.[^\/\.]+$)/
334
334
  else
335
335
  /(\.[^\/]+$)/
336
336
  end
337
337
  end
338
338
 
339
+ def allow_periods_in_identifiers?
340
+ if @config
341
+ @config[:allow_periods_in_identifiers] || @config[:identifier_type] == 'full'
342
+ else
343
+ false
344
+ end
345
+ end
346
+
339
347
  # @return [ParseResult]
340
348
  def parse(content_filename, meta_filename)
341
349
  if meta_filename
@@ -30,7 +30,7 @@ module Nanoc::Helpers
30
30
  reps.reject! { |r| !select_proc[r] } if select_proc
31
31
  reps.sort_by { |r| r.name.to_s }.each do |rep|
32
32
  xml.url do
33
- xml.loc @config[:base_url] + rep.path
33
+ xml.loc URI.escape(@config[:base_url] + rep.path)
34
34
  xml.lastmod item[:mtime].__nanoc_to_iso8601_date unless item[:mtime].nil?
35
35
  xml.changefreq item[:changefreq] unless item[:changefreq].nil?
36
36
  xml.priority item[:priority] unless item[:priority].nil?
@@ -1,4 +1,4 @@
1
1
  module Nanoc
2
2
  # The current Nanoc version.
3
- VERSION = '4.5.1'.freeze
3
+ VERSION = '4.5.2'.freeze
4
4
  end
@@ -383,7 +383,10 @@ describe Nanoc::Int::Executor do
383
383
  let(:content) { Nanoc::Int::BinaryContent.new(File.expand_path('donkey.md')) }
384
384
 
385
385
  it 'raises' do
386
- expect { subject }.to raise_error(Nanoc::Int::Errors::CannotLayoutBinaryItem)
386
+ expect { subject }.to raise_error(
387
+ Nanoc::Int::Errors::CannotLayoutBinaryItem,
388
+ 'The “/index.md” item (rep “donkey”) cannot be laid out because it is a binary item. If you are getting this error for an item that should be textual instead of binary, make sure that its extension is included in the text_extensions array in the site configuration.',
389
+ )
387
390
  end
388
391
  end
389
392
 
@@ -0,0 +1,24 @@
1
+ describe 'GH-1022', site: true, stdio: true do
2
+ before do
3
+ File.write('content/ubuntu-16.10-server-amd64.iso.txt', 'torrent contents')
4
+ File.write('content/ubuntu-16.10-server-amd64.iso.yaml', 'distro: Ubuntu')
5
+
6
+ File.write('layouts/default.erb', '<%= @item[:distro] %> / <%= yield %>')
7
+
8
+ File.write('Rules', <<EOS)
9
+ compile '/**/*' do
10
+ layout '/default.*'
11
+ write item.identifier
12
+ end
13
+
14
+ layout '/*.erb', :erb
15
+ EOS
16
+ end
17
+
18
+ it 'recompiles all reps of a changed item' do
19
+ Nanoc::CLI.run(%w(compile))
20
+
21
+ expect(File.file?('output/ubuntu-16.10-server-amd64.iso.txt')).to be
22
+ expect(File.read('output/ubuntu-16.10-server-amd64.iso.txt')).to eq('Ubuntu / torrent contents')
23
+ end
24
+ end
@@ -649,6 +649,32 @@ class Nanoc::DataSources::FilesystemTest < Nanoc::TestCase
649
649
  end
650
650
  end
651
651
 
652
+ def test_basename_of_with_full_style_identifiers
653
+ # Create data source
654
+ config = { identifier_type: 'full' }
655
+ data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, config)
656
+
657
+ # Get input and expected output
658
+ expected = {
659
+ '/' => '/',
660
+ '/foo' => '/foo',
661
+ '/foo.html' => '/foo',
662
+ '/foo.xyz.html' => '/foo.xyz',
663
+ '/foo/bar' => '/foo/bar',
664
+ '/foo/bar.html' => '/foo/bar',
665
+ '/foo/bar.xyz.html' => '/foo/bar.xyz',
666
+ }
667
+
668
+ # Check
669
+ expected.each_pair do |input, expected_output|
670
+ actual_output = data_source.send(:basename_of, input)
671
+ assert_equal(
672
+ expected_output, actual_output,
673
+ "basename_of(#{input.inspect}) should equal #{expected_output.inspect}, not #{actual_output.inspect}"
674
+ )
675
+ end
676
+ end
677
+
652
678
  def test_basename_of_allowing_periods_in_identifiers
653
679
  # Create data source
654
680
  data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, allow_periods_in_identifiers: true)
@@ -186,6 +186,33 @@ class Nanoc::Helpers::XMLSitemapTest < Nanoc::TestCase
186
186
  end
187
187
  end
188
188
 
189
+ def test_url_escape
190
+ if_have 'builder', 'nokogiri' do
191
+ # Create items
192
+ @items = Nanoc::Int::IdentifiableCollection.new({})
193
+ item = Nanoc::ItemWithRepsView.new(Nanoc::Int::Item.new('some content 1', {}, '/george/'), @view_context)
194
+ @items << item
195
+ create_item_rep(item.unwrap, :default, '/cool projects/проверка')
196
+
197
+ # Create sitemap item
198
+ @item = Nanoc::ItemWithRepsView.new(Nanoc::Int::Item.new('sitemap content', {}, '/sitemap/'), @view_context)
199
+
200
+ # Create site
201
+ @config = Nanoc::ConfigView.new({ base_url: 'http://example.com' }, nil)
202
+
203
+ # Build sitemap
204
+ res = xml_sitemap(items: @items)
205
+
206
+ # Check
207
+ doc = Nokogiri::XML(res)
208
+ urlsets = doc.css('> urlset')
209
+ assert_equal 1, urlsets.size
210
+ urls = urlsets.css('> url')
211
+ assert_equal 1, urls.size
212
+ assert_equal 'http://example.com/cool%20projects/%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0', urls[0].css('> loc').inner_text
213
+ end
214
+ end
215
+
189
216
  protected
190
217
 
191
218
  def create_item_rep(item, name, path)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nanoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.5.1
4
+ version: 4.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Denis Defreyne
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-09 00:00:00.000000000 Z
11
+ date: 2017-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cri
@@ -405,6 +405,7 @@ files:
405
405
  - spec/nanoc/integration/outdatedness_integration_spec.rb
406
406
  - spec/nanoc/integration/partial_recompilation_spec.rb
407
407
  - spec/nanoc/regressions/gh_1015_spec.rb
408
+ - spec/nanoc/regressions/gh_1022_spec.rb
408
409
  - spec/nanoc/regressions/gh_1031_spec.rb
409
410
  - spec/nanoc/regressions/gh_1035_spec.rb
410
411
  - spec/nanoc/regressions/gh_1040_spec.rb