nanoc 4.0.0a1 → 4.0.0a2
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 +4 -4
- data/Gemfile.lock +9 -4
- data/NEWS.md +13 -0
- data/lib/nanoc/base.rb +2 -0
- data/lib/nanoc/base/compilation/compiler.rb +0 -1
- data/lib/nanoc/base/compilation/compiler_dsl.rb +21 -7
- data/lib/nanoc/base/compilation/item_rep_proxy.rb +10 -1
- data/lib/nanoc/base/compilation/rule.rb +10 -12
- data/lib/nanoc/base/compilation/rules_collection.rb +2 -2
- data/lib/nanoc/base/pattern.rb +63 -0
- data/lib/nanoc/base/source_data/data_source.rb +33 -18
- data/lib/nanoc/base/source_data/identifier.rb +65 -3
- data/lib/nanoc/base/source_data/item.rb +1 -1
- data/lib/nanoc/base/source_data/item_array.rb +17 -2
- data/lib/nanoc/base/source_data/layout.rb +1 -1
- data/lib/nanoc/base/source_data/site.rb +4 -3
- data/lib/nanoc/base/views/config.rb +22 -0
- data/lib/nanoc/base/views/item.rb +76 -0
- data/lib/nanoc/base/views/item_collection.rb +46 -4
- data/lib/nanoc/base/views/item_rep.rb +23 -0
- data/lib/nanoc/base/views/layout.rb +4 -0
- data/lib/nanoc/base/views/layout_collection.rb +7 -1
- data/lib/nanoc/base/views/mutable_config.rb +5 -0
- data/lib/nanoc/base/views/mutable_item.rb +15 -0
- data/lib/nanoc/base/views/mutable_item_collection.rb +25 -0
- data/lib/nanoc/base/views/mutable_layout.rb +5 -0
- data/lib/nanoc/base/views/mutable_layout_collection.rb +20 -2
- data/lib/nanoc/cli/cleaning_stream.rb +15 -0
- data/lib/nanoc/cli/commands/create-site.rb +17 -35
- data/lib/nanoc/cli/commands/shell.rb +7 -4
- data/lib/nanoc/data_sources.rb +0 -1
- data/lib/nanoc/data_sources/filesystem.rb +75 -76
- data/lib/nanoc/data_sources/filesystem_unified.rb +4 -27
- data/lib/nanoc/data_sources/filesystem_verbose.rb +4 -21
- data/lib/nanoc/version.rb +1 -1
- data/nanoc.gemspec +1 -1
- data/test/base/test_compiler.rb +35 -15
- data/test/base/test_compiler_dsl.rb +32 -30
- data/test/base/test_data_source.rb +2 -2
- data/test/base/test_item_array.rb +10 -1
- data/test/base/test_rule.rb +2 -2
- data/test/base/test_site.rb +32 -0
- data/test/cli/commands/test_create_site.rb +7 -1
- data/test/cli/commands/test_prune.rb +2 -2
- data/test/data_sources/test_filesystem.rb +29 -9
- data/test/data_sources/test_filesystem_unified.rb +48 -68
- data/test/helper.rb +1 -0
- data/test/helpers/test_breadcrumbs.rb +4 -4
- data/test/test_gem.rb +0 -1
- metadata +4 -5
- data/lib/nanoc/data_sources/static.rb +0 -62
- data/test/data_sources/test_static.rb +0 -93
data/test/helper.rb
CHANGED
@@ -4,7 +4,7 @@ class Nanoc::Helpers::BreadcrumbsTest < Nanoc::TestCase
|
|
4
4
|
include Nanoc::Helpers::Breadcrumbs
|
5
5
|
|
6
6
|
def test_breadcrumbs_trail_at_root
|
7
|
-
@items = Nanoc::Int::ItemArray.new
|
7
|
+
@items = Nanoc::Int::ItemArray.new({})
|
8
8
|
@items << Nanoc::Int::Item.new('root', {}, '/')
|
9
9
|
@item = @items.last
|
10
10
|
|
@@ -12,7 +12,7 @@ class Nanoc::Helpers::BreadcrumbsTest < Nanoc::TestCase
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def test_breadcrumbs_trail_with_1_parent
|
15
|
-
@items = Nanoc::Int::ItemArray.new
|
15
|
+
@items = Nanoc::Int::ItemArray.new({})
|
16
16
|
@items << Nanoc::Int::Item.new('parent', {}, '/')
|
17
17
|
@items << Nanoc::Int::Item.new('child', {}, '/foo/')
|
18
18
|
@item = @items.last
|
@@ -21,7 +21,7 @@ class Nanoc::Helpers::BreadcrumbsTest < Nanoc::TestCase
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def test_breadcrumbs_trail_with_many_parents
|
24
|
-
@items = Nanoc::Int::ItemArray.new
|
24
|
+
@items = Nanoc::Int::ItemArray.new({})
|
25
25
|
@items << Nanoc::Int::Item.new('grandparent', {}, '/')
|
26
26
|
@items << Nanoc::Int::Item.new('parent', {}, '/foo/')
|
27
27
|
@items << Nanoc::Int::Item.new('child', {}, '/foo/bar/')
|
@@ -31,7 +31,7 @@ class Nanoc::Helpers::BreadcrumbsTest < Nanoc::TestCase
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def test_breadcrumbs_trail_with_nils
|
34
|
-
@items = Nanoc::Int::ItemArray.new
|
34
|
+
@items = Nanoc::Int::ItemArray.new({})
|
35
35
|
@items << Nanoc::Int::Item.new('grandparent', {}, '/')
|
36
36
|
@items << Nanoc::Int::Item.new('child', {}, '/foo/bar/')
|
37
37
|
@item = @items.last
|
data/test/test_gem.rb
CHANGED
@@ -25,7 +25,6 @@ class Nanoc::GemTest < Nanoc::TestCase
|
|
25
25
|
|
26
26
|
# Check output
|
27
27
|
assert_match(/Successfully built RubyGem\s+Name: nanoc\s+Version: .*\s+File: nanoc-.*\.gem\s+/, stdout.string)
|
28
|
-
assert_equal '', stderr.string
|
29
28
|
ensure
|
30
29
|
Dir['nanoc-*.gem'].each { |f| FileUtils.rm(f) }
|
31
30
|
end
|
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.0.
|
4
|
+
version: 4.0.0a2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Denis Defreyne
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cri
|
@@ -98,6 +98,7 @@ files:
|
|
98
98
|
- lib/nanoc/base/errors.rb
|
99
99
|
- lib/nanoc/base/memoization.rb
|
100
100
|
- lib/nanoc/base/notification_center.rb
|
101
|
+
- lib/nanoc/base/pattern.rb
|
101
102
|
- lib/nanoc/base/plugin_registry.rb
|
102
103
|
- lib/nanoc/base/result_data/item_rep.rb
|
103
104
|
- lib/nanoc/base/source_data/code_snippet.rb
|
@@ -147,7 +148,6 @@ files:
|
|
147
148
|
- lib/nanoc/data_sources/filesystem.rb
|
148
149
|
- lib/nanoc/data_sources/filesystem_unified.rb
|
149
150
|
- lib/nanoc/data_sources/filesystem_verbose.rb
|
150
|
-
- lib/nanoc/data_sources/static.rb
|
151
151
|
- lib/nanoc/extra.rb
|
152
152
|
- lib/nanoc/extra/checking.rb
|
153
153
|
- lib/nanoc/extra/checking/check.rb
|
@@ -265,7 +265,6 @@ files:
|
|
265
265
|
- test/data_sources/test_filesystem.rb
|
266
266
|
- test/data_sources/test_filesystem_unified.rb
|
267
267
|
- test/data_sources/test_filesystem_verbose.rb
|
268
|
-
- test/data_sources/test_static.rb
|
269
268
|
- test/extra/checking/checks/test_css.rb
|
270
269
|
- test/extra/checking/checks/test_external_links.rb
|
271
270
|
- test/extra/checking/checks/test_html.rb
|
@@ -343,7 +342,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
343
342
|
requirements:
|
344
343
|
- - ">="
|
345
344
|
- !ruby/object:Gem::Version
|
346
|
-
version:
|
345
|
+
version: 2.0.0
|
347
346
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
348
347
|
requirements:
|
349
348
|
- - ">"
|
@@ -1,62 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module Nanoc::DataSources
|
4
|
-
# The static data source provides items from a single directory. Unlike the
|
5
|
-
# filesystem data sources, static provides no additional item metadata. In
|
6
|
-
# addition, all items are treated as 'binary', regardless of their extension
|
7
|
-
# or content. As such, it is most useful for simple assets, not for normal
|
8
|
-
# content.
|
9
|
-
#
|
10
|
-
# The identifier for static items is the full item path. For example, if your
|
11
|
-
# static data source item_root is `static`, an item named `foo.css` would have
|
12
|
-
# the identifier `/static/foo.css/`. Note that, unlike the filesystem data
|
13
|
-
# sources, `foo/index.html` and `foo.yaml` receive no special treatment. They
|
14
|
-
# are simple static items, just like `foo.css`.
|
15
|
-
#
|
16
|
-
# The default data source directory is `static/`, but this can be overridden
|
17
|
-
# in the data source configuration:
|
18
|
-
#
|
19
|
-
# data_sources:
|
20
|
-
# - type: static
|
21
|
-
# prefix: assets
|
22
|
-
#
|
23
|
-
# Unless the `hide_items` configuration attribute is false, items from static
|
24
|
-
# data sources will have the :is_hidden attribute set by default, which will
|
25
|
-
# exclude them from the Blogging helper's atom feed generator, among other
|
26
|
-
# things.
|
27
|
-
#
|
28
|
-
# @api private
|
29
|
-
class Static < Nanoc::DataSource
|
30
|
-
identifier :static
|
31
|
-
|
32
|
-
def items
|
33
|
-
# Get prefix
|
34
|
-
prefix = config[:prefix] || 'static'
|
35
|
-
|
36
|
-
# Convert filenames to items
|
37
|
-
all_files_in(prefix).map do |filename|
|
38
|
-
attributes = {
|
39
|
-
extension: File.extname(filename)[1..-1],
|
40
|
-
filename: filename,
|
41
|
-
}
|
42
|
-
attributes[:is_hidden] = true unless config[:hide_items] == false
|
43
|
-
identifier = filename[(prefix.length + 1)..-1] + '/'
|
44
|
-
mtime = File.mtime(filename)
|
45
|
-
checksum = Pathname.new(filename).__nanoc_checksum
|
46
|
-
|
47
|
-
Nanoc::Int::Item.new(
|
48
|
-
filename,
|
49
|
-
attributes,
|
50
|
-
identifier,
|
51
|
-
binary: true, mtime: mtime, checksum: checksum
|
52
|
-
)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
protected
|
57
|
-
|
58
|
-
def all_files_in(dir_name)
|
59
|
-
Nanoc::Extra::FilesystemTools.all_files_in(dir_name, config[:extra_files])
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
@@ -1,93 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
class Nanoc::DataSources::StaticTest < Nanoc::TestCase
|
4
|
-
def new_data_source(params = nil)
|
5
|
-
# Mock site
|
6
|
-
site = Nanoc::Int::Site.new({})
|
7
|
-
|
8
|
-
# Create data source
|
9
|
-
data_source = Nanoc::DataSources::Static.new(site, nil, nil, params)
|
10
|
-
|
11
|
-
# Done
|
12
|
-
data_source
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_items_with_symlinks
|
16
|
-
skip_unless_symlinks_supported
|
17
|
-
|
18
|
-
# Create data source
|
19
|
-
data_source = new_data_source(prefix: 'foo')
|
20
|
-
|
21
|
-
# Create sample files
|
22
|
-
FileUtils.mkdir_p('foo')
|
23
|
-
FileUtils.mkdir_p('foo-outside-1')
|
24
|
-
FileUtils.mkdir_p('foo-outside-2')
|
25
|
-
File.open('foo/a.png', 'w') { |io| io.write('random binary data') }
|
26
|
-
File.open('foo-outside-1/b.png', 'w') { |io| io.write('more binary data') }
|
27
|
-
File.open('foo-outside-2/c.png', 'w') { |io| io.write('yet more binary data') }
|
28
|
-
|
29
|
-
# Create symlinks
|
30
|
-
File.symlink('../foo-outside-1', 'foo/1')
|
31
|
-
File.symlink('../foo-outside-2/c.png', 'foo/c.png')
|
32
|
-
|
33
|
-
# Check all files
|
34
|
-
expected_filenames = ['foo/a.png', 'foo/1/b.png', 'foo/c.png'].sort
|
35
|
-
actual_filenames = Nanoc::Extra::FilesystemTools.all_files_in('foo', nil).sort
|
36
|
-
assert_equal expected_filenames, actual_filenames
|
37
|
-
|
38
|
-
# Check items
|
39
|
-
items = data_source.send(:items).sort_by(&:identifier)
|
40
|
-
actual_item_identifiers = items.map(&:identifier).map(&:to_s).sort
|
41
|
-
expected_item_identifiers = %w( /a.png/ /1/b.png/ /c.png/ ).sort
|
42
|
-
assert_equal expected_item_identifiers, actual_item_identifiers
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_items
|
46
|
-
# Create data source
|
47
|
-
data_source = new_data_source(prefix: 'foo')
|
48
|
-
|
49
|
-
# Create sample files
|
50
|
-
FileUtils.mkdir_p('foo')
|
51
|
-
FileUtils.mkdir_p('foo/a/b')
|
52
|
-
File.open('foo/bar.png', 'w') { |io| io.write('random binary data') }
|
53
|
-
File.open('foo/b.c.css', 'w') { |io| io.write('more binary data') }
|
54
|
-
File.open('foo/a/b/c.gif', 'w') { |io| io.write('yet more binary data') }
|
55
|
-
|
56
|
-
# Get expected and actual output
|
57
|
-
expected_out = [
|
58
|
-
Nanoc::Int::Item.new(
|
59
|
-
'foo/bar.png',
|
60
|
-
{ extension: 'png', filename: 'foo/bar.png' },
|
61
|
-
'/bar.png/',
|
62
|
-
binary: true,
|
63
|
-
mtime: File.mtime('foo/bar.png'),
|
64
|
-
checksum: Pathname.new('foo/bar.png').__nanoc_checksum
|
65
|
-
),
|
66
|
-
Nanoc::Int::Item.new(
|
67
|
-
'foo/b.c.css',
|
68
|
-
{ extension: 'css', filename: 'foo/b.c.css' },
|
69
|
-
'/b.c.css/',
|
70
|
-
binary: true,
|
71
|
-
mtime: File.mtime('foo/b.c.css'),
|
72
|
-
checksum: Pathname.new('foo/b.c.css').__nanoc_checksum
|
73
|
-
),
|
74
|
-
Nanoc::Int::Item.new(
|
75
|
-
'foo/a/b/c.gif',
|
76
|
-
{ extension: 'gif', filename: 'foo/a/b/c.gif' },
|
77
|
-
'/a/b/c.gif/',
|
78
|
-
binary: true,
|
79
|
-
mtime: File.mtime('foo/a/b/c.gif'),
|
80
|
-
checksum: Pathname.new('foo/a/b/c.gif').__nanoc_checksum
|
81
|
-
)
|
82
|
-
].sort_by(&:identifier)
|
83
|
-
|
84
|
-
actual_out = data_source.send(:items).sort_by(&:identifier)
|
85
|
-
|
86
|
-
(0..expected_out.size - 1).each do |i|
|
87
|
-
assert_equal expected_out[i].raw_content, actual_out[i].raw_content, 'content must match'
|
88
|
-
assert_equal expected_out[i].identifier, actual_out[i].identifier, 'identifier must match'
|
89
|
-
assert_equal expected_out[i].attributes[:mtime], actual_out[i].attributes[:mtime], 'mtime must match'
|
90
|
-
assert_equal expected_out[i].raw_filename, actual_out[i].raw_filename, 'file paths must match'
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|