nanoc 4.9.0 → 4.9.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/NEWS.md +16 -0
- data/lib/nanoc/base/entities/configuration.rb +6 -0
- data/lib/nanoc/base/services/action_provider.rb +1 -1
- data/lib/nanoc/base/services/checksummer.rb +1 -1
- data/lib/nanoc/base/services/compiler_loader.rb +1 -1
- data/lib/nanoc/base/services/pruner.rb +9 -1
- data/lib/nanoc/base/views/basic_item_rep_collection_view.rb +1 -1
- data/lib/nanoc/base/views/basic_item_rep_view.rb +5 -5
- data/lib/nanoc/base/views/basic_item_view.rb +8 -8
- data/lib/nanoc/base/views/compilation_item_rep_view.rb +3 -3
- data/lib/nanoc/base/views/compilation_item_view.rb +1 -1
- data/lib/nanoc/base/views/config_view.rb +6 -6
- data/lib/nanoc/base/views/identifiable_collection_view.rb +6 -6
- data/lib/nanoc/base/views/mixins/document_view_mixin.rb +15 -15
- data/lib/nanoc/base/views/mixins/mutable_document_view_mixin.rb +4 -4
- data/lib/nanoc/base/views/post_compile_item_rep_view.rb +3 -3
- data/lib/nanoc/base/views/post_compile_item_view.rb +2 -2
- data/lib/nanoc/base/views/view.rb +2 -2
- data/lib/nanoc/checking/checks/stale.rb +1 -1
- data/lib/nanoc/cli/commands/create-site.rb +8 -88
- data/lib/nanoc/cli/commands/shell.rb +5 -2
- data/lib/nanoc/cli/commands/show-rules.rb +1 -1
- data/lib/nanoc/cli/logger.rb +5 -3
- data/lib/nanoc/filters/relativize_paths.rb +21 -6
- data/lib/nanoc/helpers/blogging.rb +8 -2
- data/lib/nanoc/helpers/capturing.rb +4 -4
- data/lib/nanoc/helpers/filtering.rb +2 -2
- data/lib/nanoc/helpers/rendering.rb +1 -1
- data/lib/nanoc/rule_dsl/action_provider.rb +3 -3
- data/lib/nanoc/spec.rb +3 -3
- data/lib/nanoc/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9ab127f94d9ffc710fc374831e36f805e16e1fd1bf1dcadfc65d48ce8009d4f8
|
4
|
+
data.tar.gz: 4f167936c1d475ce4625875ec5788d99d1f0e22fb0499644e5c632d26bfe0ef1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ce94577815ee770cb5e572d232357a60fd4447ab68c101d0a6215e9b45c1f25866433ac90e478475dbccf92cbbf97d5a01c1b6a40198a715a6e5364f68f6064
|
7
|
+
data.tar.gz: 38dec7119c8a3239ec8ab5a2922fe4aca8857645446100f6601bffebe75c6ff2414d0b0886bebc633b95f7df8c12ef25a6d59926e1101cc63917584ad13170de
|
data/NEWS.md
CHANGED
@@ -1,5 +1,21 @@
|
|
1
1
|
# Nanoc news
|
2
2
|
|
3
|
+
## 4.9.1 (2018-02-22)
|
4
|
+
|
5
|
+
Fixes:
|
6
|
+
|
7
|
+
* Fixed issue which could cause terminal output to be jumbled up (#1312, #1316)
|
8
|
+
* Made pruner ignore `output_dir` configuration attribute when checking for excludes (#1313, #1317)
|
9
|
+
* Fixed handling of interrupts (SIGINT) in the `shell` command (#1309, #1318)
|
10
|
+
* Added workaround for `relativize_paths` mangling `gcse:search` elements (#1319, #1320)
|
11
|
+
|
12
|
+
Enhancements:
|
13
|
+
|
14
|
+
* Allowed overriding `<id>` and `<link rel="alternate">` elements in Atom feed generator (#1301) [Ian Young]
|
15
|
+
* Made `sh` an alias for the `shell` command (#1308)
|
16
|
+
* Simplified the default configuration (#1311)
|
17
|
+
* Removed routing rules from newly-created sites (#1310)
|
18
|
+
|
3
19
|
## 4.9.0 (2018-01-31)
|
4
20
|
|
5
21
|
Features:
|
@@ -33,6 +33,7 @@ module Nanoc::Int
|
|
33
33
|
enable_output_diff: false,
|
34
34
|
prune: { auto_prune: false, exclude: ['.git', '.hg', '.svn', 'CVS'] },
|
35
35
|
string_pattern_type: 'glob',
|
36
|
+
action_provider: 'rule_dsl',
|
36
37
|
}.freeze
|
37
38
|
|
38
39
|
# @return [String, nil] The active environment for the configuration
|
@@ -158,6 +159,11 @@ module Nanoc::Int
|
|
158
159
|
self[:output_dir]
|
159
160
|
end
|
160
161
|
|
162
|
+
contract C::None => Symbol
|
163
|
+
def action_provider
|
164
|
+
self[:action_provider].to_sym
|
165
|
+
end
|
166
|
+
|
161
167
|
contract C::None => C::IterOf[String]
|
162
168
|
def output_dirs
|
163
169
|
envs = @wrapped.fetch(ENVIRONMENTS_CONFIG_KEY, {})
|
@@ -14,7 +14,7 @@ module Nanoc::Int
|
|
14
14
|
checksum_store =
|
15
15
|
Nanoc::Int::ChecksumStore.new(config: site.config, objects: objects)
|
16
16
|
|
17
|
-
action_provider ||= Nanoc::Int::ActionProvider.named(
|
17
|
+
action_provider ||= Nanoc::Int::ActionProvider.named(site.config.action_provider).for(site)
|
18
18
|
|
19
19
|
outdatedness_store =
|
20
20
|
Nanoc::Int::OutdatednessStore.new(config: site.config)
|
@@ -43,10 +43,18 @@ module Nanoc
|
|
43
43
|
#
|
44
44
|
# @return [Boolean] true if the given file is excluded, false otherwise
|
45
45
|
def filename_excluded?(filename)
|
46
|
-
pathname = Pathname.new(filename)
|
46
|
+
pathname = Pathname.new(strip_output_dir(filename))
|
47
47
|
@exclude.any? { |e| pathname_components(pathname).include?(e) }
|
48
48
|
end
|
49
49
|
|
50
|
+
def strip_output_dir(filename)
|
51
|
+
if filename.start_with?(@config[:output_dir])
|
52
|
+
filename[@config[:output_dir].size..-1]
|
53
|
+
else
|
54
|
+
filename
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
50
58
|
def pathname_components(pathname)
|
51
59
|
components = []
|
52
60
|
tmp = pathname
|
@@ -14,7 +14,7 @@ module Nanoc
|
|
14
14
|
end
|
15
15
|
|
16
16
|
# @api private
|
17
|
-
def
|
17
|
+
def _unwrap
|
18
18
|
@item_rep
|
19
19
|
end
|
20
20
|
|
@@ -41,7 +41,7 @@ module Nanoc
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def snapshot?(name)
|
44
|
-
@context.dependency_tracker.bounce(
|
44
|
+
@context.dependency_tracker.bounce(_unwrap.item, compiled_content: true)
|
45
45
|
@item_rep.snapshot?(name)
|
46
46
|
end
|
47
47
|
|
@@ -55,7 +55,7 @@ module Nanoc
|
|
55
55
|
#
|
56
56
|
# @return [String] The item rep’s path.
|
57
57
|
def path(snapshot: :last)
|
58
|
-
@context.dependency_tracker.bounce(
|
58
|
+
@context.dependency_tracker.bounce(_unwrap.item, path: true)
|
59
59
|
@item_rep.path(snapshot: snapshot)
|
60
60
|
end
|
61
61
|
|
@@ -68,8 +68,8 @@ module Nanoc
|
|
68
68
|
|
69
69
|
# @api private
|
70
70
|
def binary?
|
71
|
-
snapshot_def =
|
72
|
-
raise Nanoc::Int::Errors::NoSuchSnapshot.new(
|
71
|
+
snapshot_def = _unwrap.snapshot_defs.find { |sd| sd.name == :last }
|
72
|
+
raise Nanoc::Int::Errors::NoSuchSnapshot.new(_unwrap, :last) if snapshot_def.nil?
|
73
73
|
snapshot_def.binary?
|
74
74
|
end
|
75
75
|
|
@@ -9,11 +9,11 @@ module Nanoc
|
|
9
9
|
#
|
10
10
|
# @return [Enumerable<Nanoc::CompilationItemView>]
|
11
11
|
def children
|
12
|
-
unless
|
13
|
-
raise Nanoc::Int::Errors::CannotGetParentOrChildrenOfNonLegacyItem.new(
|
12
|
+
unless _unwrap.identifier.legacy?
|
13
|
+
raise Nanoc::Int::Errors::CannotGetParentOrChildrenOfNonLegacyItem.new(_unwrap.identifier)
|
14
14
|
end
|
15
15
|
|
16
|
-
children_pattern = Nanoc::Int::Pattern.from(
|
16
|
+
children_pattern = Nanoc::Int::Pattern.from(_unwrap.identifier.to_s + '*/')
|
17
17
|
children = @context.items.select { |i| children_pattern.match?(i.identifier) }
|
18
18
|
|
19
19
|
children.map { |i| self.class.new(i, @context) }.freeze
|
@@ -26,11 +26,11 @@ module Nanoc
|
|
26
26
|
#
|
27
27
|
# @return [nil] if the item has no parent
|
28
28
|
def parent
|
29
|
-
unless
|
30
|
-
raise Nanoc::Int::Errors::CannotGetParentOrChildrenOfNonLegacyItem.new(
|
29
|
+
unless _unwrap.identifier.legacy?
|
30
|
+
raise Nanoc::Int::Errors::CannotGetParentOrChildrenOfNonLegacyItem.new(_unwrap.identifier)
|
31
31
|
end
|
32
32
|
|
33
|
-
parent_identifier = '/' +
|
33
|
+
parent_identifier = '/' + _unwrap.identifier.components[0..-2].join('/') + '/'
|
34
34
|
parent_identifier = '/' if parent_identifier == '//'
|
35
35
|
|
36
36
|
parent = @context.items[parent_identifier]
|
@@ -40,12 +40,12 @@ module Nanoc
|
|
40
40
|
|
41
41
|
# @return [Boolean] True if the item is binary, false otherwise
|
42
42
|
def binary?
|
43
|
-
|
43
|
+
_unwrap.content.binary?
|
44
44
|
end
|
45
45
|
|
46
46
|
# @api private
|
47
47
|
def raw_filename
|
48
|
-
|
48
|
+
_unwrap.content.filename
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
@@ -15,7 +15,7 @@ module Nanoc
|
|
15
15
|
#
|
16
16
|
# @return [String] The item rep’s raw path.
|
17
17
|
def raw_path(snapshot: :last)
|
18
|
-
@context.dependency_tracker.bounce(
|
18
|
+
@context.dependency_tracker.bounce(_unwrap.item, compiled_content: true)
|
19
19
|
|
20
20
|
res = @item_rep.raw_path(snapshot: snapshot)
|
21
21
|
|
@@ -42,8 +42,8 @@ module Nanoc
|
|
42
42
|
#
|
43
43
|
# @return [String] The content at the given snapshot.
|
44
44
|
def compiled_content(snapshot: nil)
|
45
|
-
@context.dependency_tracker.bounce(
|
46
|
-
@context.snapshot_repo.compiled_content(rep:
|
45
|
+
@context.dependency_tracker.bounce(_unwrap.item, compiled_content: true)
|
46
|
+
@context.snapshot_repo.compiled_content(rep: _unwrap, snapshot: snapshot)
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
@@ -39,7 +39,7 @@ module Nanoc
|
|
39
39
|
#
|
40
40
|
# @return [Nanoc::BasicItemRepCollectionView]
|
41
41
|
def reps
|
42
|
-
Nanoc::CompilationItemRepCollectionView.new(@context.reps[
|
42
|
+
Nanoc::CompilationItemRepCollectionView.new(@context.reps[_unwrap], @context)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
@@ -12,13 +12,13 @@ module Nanoc
|
|
12
12
|
end
|
13
13
|
|
14
14
|
# @api private
|
15
|
-
def
|
15
|
+
def _unwrap
|
16
16
|
@config
|
17
17
|
end
|
18
18
|
|
19
19
|
# @see Hash#fetch
|
20
20
|
def fetch(key, fallback = NONE, &_block)
|
21
|
-
@context.dependency_tracker.bounce(
|
21
|
+
@context.dependency_tracker.bounce(_unwrap, attributes: [key])
|
22
22
|
@config.fetch(key) do
|
23
23
|
if !fallback.equal?(NONE)
|
24
24
|
fallback
|
@@ -32,25 +32,25 @@ module Nanoc
|
|
32
32
|
|
33
33
|
# @see Hash#key?
|
34
34
|
def key?(key)
|
35
|
-
@context.dependency_tracker.bounce(
|
35
|
+
@context.dependency_tracker.bounce(_unwrap, attributes: [key])
|
36
36
|
@config.key?(key)
|
37
37
|
end
|
38
38
|
|
39
39
|
# @see Hash#[]
|
40
40
|
def [](key)
|
41
|
-
@context.dependency_tracker.bounce(
|
41
|
+
@context.dependency_tracker.bounce(_unwrap, attributes: [key])
|
42
42
|
@config[key]
|
43
43
|
end
|
44
44
|
|
45
45
|
# @see Hash#each
|
46
46
|
def each(&block)
|
47
|
-
@context.dependency_tracker.bounce(
|
47
|
+
@context.dependency_tracker.bounce(_unwrap, attributes: true)
|
48
48
|
@config.each(&block)
|
49
49
|
end
|
50
50
|
|
51
51
|
# @see Hash#dig
|
52
52
|
def dig(*keys)
|
53
|
-
@context.dependency_tracker.bounce(
|
53
|
+
@context.dependency_tracker.bounce(_unwrap, attributes: keys.take(1))
|
54
54
|
@config.dig(*keys)
|
55
55
|
end
|
56
56
|
end
|
@@ -13,7 +13,7 @@ module Nanoc
|
|
13
13
|
end
|
14
14
|
|
15
15
|
# @api private
|
16
|
-
def
|
16
|
+
def _unwrap
|
17
17
|
@objects
|
18
18
|
end
|
19
19
|
|
@@ -32,14 +32,14 @@ module Nanoc
|
|
32
32
|
#
|
33
33
|
# @return [self]
|
34
34
|
def each
|
35
|
-
@context.dependency_tracker.bounce(
|
35
|
+
@context.dependency_tracker.bounce(_unwrap, raw_content: true)
|
36
36
|
@objects.each { |i| yield view_class.new(i, @context) }
|
37
37
|
self
|
38
38
|
end
|
39
39
|
|
40
40
|
# @return [Integer]
|
41
41
|
def size
|
42
|
-
@context.dependency_tracker.bounce(
|
42
|
+
@context.dependency_tracker.bounce(_unwrap, raw_content: true)
|
43
43
|
@objects.size
|
44
44
|
end
|
45
45
|
|
@@ -50,7 +50,7 @@ module Nanoc
|
|
50
50
|
# @return [Enumerable]
|
51
51
|
def find_all(arg = NOTHING, &block)
|
52
52
|
if NOTHING.equal?(arg)
|
53
|
-
@context.dependency_tracker.bounce(
|
53
|
+
@context.dependency_tracker.bounce(_unwrap, raw_content: true)
|
54
54
|
return @objects.select(&block).map { |i| view_class.new(i, @context) }
|
55
55
|
end
|
56
56
|
|
@@ -64,7 +64,7 @@ module Nanoc
|
|
64
64
|
true
|
65
65
|
end
|
66
66
|
|
67
|
-
@context.dependency_tracker.bounce(
|
67
|
+
@context.dependency_tracker.bounce(_unwrap, raw_content: prop_attribute)
|
68
68
|
@objects.find_all(arg).map { |i| view_class.new(i, @context) }
|
69
69
|
end
|
70
70
|
|
@@ -101,7 +101,7 @@ module Nanoc
|
|
101
101
|
true
|
102
102
|
end
|
103
103
|
|
104
|
-
@context.dependency_tracker.bounce(
|
104
|
+
@context.dependency_tracker.bounce(_unwrap, raw_content: prop_attribute)
|
105
105
|
res = @objects[arg]
|
106
106
|
res && view_class.new(res, @context)
|
107
107
|
end
|
@@ -12,7 +12,7 @@ module Nanoc
|
|
12
12
|
end
|
13
13
|
|
14
14
|
# @api private
|
15
|
-
def
|
15
|
+
def _unwrap
|
16
16
|
@document
|
17
17
|
end
|
18
18
|
|
@@ -33,28 +33,28 @@ module Nanoc
|
|
33
33
|
|
34
34
|
# @return [Nanoc::Identifier]
|
35
35
|
def identifier
|
36
|
-
|
36
|
+
_unwrap.identifier
|
37
37
|
end
|
38
38
|
|
39
39
|
# @see Hash#[]
|
40
40
|
def [](key)
|
41
|
-
@context.dependency_tracker.bounce(
|
42
|
-
|
41
|
+
@context.dependency_tracker.bounce(_unwrap, attributes: [key])
|
42
|
+
_unwrap.attributes[key]
|
43
43
|
end
|
44
44
|
|
45
45
|
# @return [Hash]
|
46
46
|
def attributes
|
47
47
|
# TODO: Refine dependencies
|
48
|
-
@context.dependency_tracker.bounce(
|
49
|
-
|
48
|
+
@context.dependency_tracker.bounce(_unwrap, attributes: true)
|
49
|
+
_unwrap.attributes
|
50
50
|
end
|
51
51
|
|
52
52
|
# @see Hash#fetch
|
53
53
|
def fetch(key, fallback = NONE, &_block)
|
54
|
-
@context.dependency_tracker.bounce(
|
54
|
+
@context.dependency_tracker.bounce(_unwrap, attributes: [key])
|
55
55
|
|
56
|
-
if
|
57
|
-
|
56
|
+
if _unwrap.attributes.key?(key)
|
57
|
+
_unwrap.attributes[key]
|
58
58
|
elsif !fallback.equal?(NONE)
|
59
59
|
fallback
|
60
60
|
elsif block_given?
|
@@ -66,23 +66,23 @@ module Nanoc
|
|
66
66
|
|
67
67
|
# @see Hash#key?
|
68
68
|
def key?(key)
|
69
|
-
@context.dependency_tracker.bounce(
|
70
|
-
|
69
|
+
@context.dependency_tracker.bounce(_unwrap, attributes: [key])
|
70
|
+
_unwrap.attributes.key?(key)
|
71
71
|
end
|
72
72
|
|
73
73
|
# @api private
|
74
74
|
def reference
|
75
|
-
|
75
|
+
_unwrap.reference
|
76
76
|
end
|
77
77
|
|
78
78
|
# @api private
|
79
79
|
def raw_content
|
80
|
-
@context.dependency_tracker.bounce(
|
81
|
-
|
80
|
+
@context.dependency_tracker.bounce(_unwrap, raw_content: true)
|
81
|
+
_unwrap.content.string
|
82
82
|
end
|
83
83
|
|
84
84
|
def inspect
|
85
|
-
"<#{self.class} identifier=#{
|
85
|
+
"<#{self.class} identifier=#{_unwrap.identifier}>"
|
86
86
|
end
|
87
87
|
end
|
88
88
|
end
|
@@ -16,7 +16,7 @@ module Nanoc
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def raw_content=(arg)
|
19
|
-
|
19
|
+
_unwrap.content = Nanoc::Int::Content.create(arg)
|
20
20
|
end
|
21
21
|
|
22
22
|
# Sets the value for the given attribute.
|
@@ -35,14 +35,14 @@ module Nanoc
|
|
35
35
|
raise DisallowedAttributeValueError.new(value)
|
36
36
|
end
|
37
37
|
|
38
|
-
|
38
|
+
_unwrap.set_attribute(key, value)
|
39
39
|
end
|
40
40
|
|
41
41
|
# Sets the identifier to the given argument.
|
42
42
|
#
|
43
43
|
# @param [String, Nanoc::Identifier] arg
|
44
44
|
def identifier=(arg)
|
45
|
-
|
45
|
+
_unwrap.identifier = Nanoc::Identifier.from(arg)
|
46
46
|
end
|
47
47
|
|
48
48
|
# Updates the attributes based on the given hash.
|
@@ -51,7 +51,7 @@ module Nanoc
|
|
51
51
|
#
|
52
52
|
# @return [self]
|
53
53
|
def update_attributes(hash)
|
54
|
-
hash.each { |k, v|
|
54
|
+
hash.each { |k, v| _unwrap.set_attribute(k, v) }
|
55
55
|
self
|
56
56
|
end
|
57
57
|
end
|
@@ -8,17 +8,17 @@ module Nanoc
|
|
8
8
|
|
9
9
|
def compiled_content(snapshot: nil)
|
10
10
|
compilation_context = @context.compilation_context
|
11
|
-
snapshot_contents = compilation_context.compiled_content_cache[
|
11
|
+
snapshot_contents = compilation_context.compiled_content_cache[_unwrap]
|
12
12
|
|
13
13
|
snapshot_name = snapshot || (snapshot_contents[:pre] ? :pre : :last)
|
14
14
|
|
15
15
|
unless snapshot_contents[snapshot_name]
|
16
|
-
raise Nanoc::Int::Errors::NoSuchSnapshot.new(
|
16
|
+
raise Nanoc::Int::Errors::NoSuchSnapshot.new(_unwrap, snapshot_name)
|
17
17
|
end
|
18
18
|
|
19
19
|
content = snapshot_contents[snapshot_name]
|
20
20
|
if content.binary?
|
21
|
-
raise Nanoc::Int::Errors::CannotGetCompiledContentOfBinaryItem.new(
|
21
|
+
raise Nanoc::Int::Errors::CannotGetCompiledContentOfBinaryItem.new(_unwrap)
|
22
22
|
end
|
23
23
|
|
24
24
|
content.string
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Nanoc
|
4
4
|
class PostCompileItemView < Nanoc::CompilationItemView
|
5
5
|
def reps
|
6
|
-
Nanoc::PostCompileItemRepCollectionView.new(@context.reps[
|
6
|
+
Nanoc::PostCompileItemRepCollectionView.new(@context.reps[_unwrap], @context)
|
7
7
|
end
|
8
8
|
|
9
9
|
# @deprecated Use {#modified_reps} instead
|
@@ -12,7 +12,7 @@ module Nanoc
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def modified_reps
|
15
|
-
reps.select { |rep| rep.
|
15
|
+
reps.select { |rep| rep._unwrap.modified? }
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -13,7 +13,7 @@ module Nanoc
|
|
13
13
|
end
|
14
14
|
|
15
15
|
# @api private
|
16
|
-
def
|
16
|
+
def _unwrap
|
17
17
|
raise NotImplementedError
|
18
18
|
end
|
19
19
|
|
@@ -23,7 +23,7 @@ module Nanoc
|
|
23
23
|
#
|
24
24
|
# @see Object#frozen?
|
25
25
|
def frozen?
|
26
|
-
|
26
|
+
_unwrap.frozen?
|
27
27
|
end
|
28
28
|
|
29
29
|
def inspect
|
@@ -18,103 +18,30 @@ module Nanoc::CLI::Commands
|
|
18
18
|
end
|
19
19
|
|
20
20
|
DEFAULT_CONFIG = <<~EOS unless defined? DEFAULT_CONFIG
|
21
|
-
# The syntax to use for patterns in the Rules file. Can be either `"glob"`
|
22
|
-
# (default) or `"legacy"`. The former will enable glob patterns, which behave
|
23
|
-
# like Ruby’s File.fnmatch. The latter will enable Nanoc 3.x-style patterns.
|
24
|
-
string_pattern_type: glob
|
25
|
-
|
26
21
|
# A list of file extensions that Nanoc will consider to be textual rather than
|
27
22
|
# binary. If an item with an extension not in this list is found, the file
|
28
23
|
# will be considered as binary.
|
29
24
|
text_extensions: #{array_to_yaml(Nanoc::Int::Configuration::DEFAULT_CONFIG[:text_extensions])}
|
30
25
|
|
31
|
-
# The path to the directory where all generated files will be written to. This
|
32
|
-
# can be an absolute path starting with a slash, but it can also be path
|
33
|
-
# relative to the site directory.
|
34
|
-
output_dir: #{Nanoc::Int::Configuration::DEFAULT_CONFIG[:output_dir]}
|
35
|
-
|
36
|
-
# A list of index filenames, i.e. names of files that will be served by a web
|
37
|
-
# server when a directory is requested. Usually, index files are named
|
38
|
-
# “index.html”, but depending on the web server, this may be something else,
|
39
|
-
# such as “default.htm”. This list is used by Nanoc to generate pretty URLs.
|
40
|
-
index_filenames: #{array_to_yaml(Nanoc::Int::Configuration::DEFAULT_CONFIG[:index_filenames])}
|
41
|
-
|
42
|
-
# Whether or not to generate a diff of the compiled content when compiling a
|
43
|
-
# site. The diff will contain the differences between the compiled content
|
44
|
-
# before and after the last site compilation.
|
45
|
-
enable_output_diff: false
|
46
|
-
|
47
26
|
prune:
|
48
|
-
# Whether to automatically remove files not managed by Nanoc from the output
|
49
|
-
# directory.
|
50
27
|
auto_prune: true
|
51
28
|
|
52
|
-
# Which files and directories you want to exclude from pruning. If you version
|
53
|
-
# your output directory, you should probably exclude VCS directories such as
|
54
|
-
# .git, .svn etc.
|
55
|
-
exclude: [ '.git', '.hg', '.svn', 'CVS' ]
|
56
|
-
|
57
|
-
# The data sources where Nanoc loads its data from. This is an array of
|
58
|
-
# hashes; each array element represents a single data source. By default,
|
59
|
-
# there is only a single data source that reads data from the “content/” and
|
60
|
-
# “layout/” directories in the site directory.
|
61
29
|
data_sources:
|
62
|
-
-
|
63
|
-
# The type is the identifier of the data source.
|
64
|
-
type: #{Nanoc::Int::Configuration::DEFAULT_DATA_SOURCE_CONFIG[:type]}
|
65
|
-
|
66
|
-
# The path where items should be mounted (comparable to mount points in
|
67
|
-
# Unix-like systems). This is “/” by default, meaning that items will have
|
68
|
-
# “/” prefixed to their identifiers. If the items root were “/en/”
|
69
|
-
# instead, an item at content/about.html would have an identifier of
|
70
|
-
# “/en/about/” instead of just “/about/”.
|
71
|
-
items_root: #{Nanoc::Int::Configuration::DEFAULT_DATA_SOURCE_CONFIG[:items_root]}
|
72
|
-
|
73
|
-
# The path where layouts should be mounted. The layouts root behaves the
|
74
|
-
# same as the items root, but applies to layouts rather than items.
|
75
|
-
layouts_root: #{Nanoc::Int::Configuration::DEFAULT_DATA_SOURCE_CONFIG[:layouts_root]}
|
76
|
-
|
77
|
-
# The encoding to use for input files. If your input files are not in
|
78
|
-
# UTF-8 (which they should be!), change this.
|
30
|
+
- type: filesystem
|
79
31
|
encoding: utf-8
|
80
|
-
|
81
|
-
# The kind of identifier to use for items and layouts. The default is
|
82
|
-
# “full”, meaning that identifiers include file extensions. This can also
|
83
|
-
# be “legacy”, primarily used by older Nanoc sites.
|
84
|
-
identifier_type: full
|
85
|
-
|
86
|
-
# Configuration for the “check” command, which run unit tests on the site.
|
87
|
-
checks:
|
88
|
-
# Configuration for the “internal_links” checker, which checks whether all
|
89
|
-
# internal links are valid.
|
90
|
-
internal_links:
|
91
|
-
# A list of patterns, specified as regular expressions, to exclude from the check.
|
92
|
-
# If an internal link matches this pattern, the validity check will be skipped.
|
93
|
-
# E.g.:
|
94
|
-
# exclude: ['^/server_status']
|
95
|
-
exclude: []
|
96
|
-
|
97
|
-
# Configuration for the “external_links” checker, which checks whether all
|
98
|
-
# external links are valid.
|
99
|
-
external_links:
|
100
|
-
# A list of patterns, specified as regular expressions, to exclude from the check.
|
101
|
-
# If an external link matches this pattern, the validity check will be skipped.
|
102
|
-
# E.g.:
|
103
|
-
# exclude: ['^http://example.com$']
|
104
|
-
exclude: []
|
105
|
-
|
106
|
-
# A list of file patterns, specified as regular expressions, to exclude from the check.
|
107
|
-
# If a file matches this pattern, the links from this file will not be checked.
|
108
|
-
# E.g.:
|
109
|
-
# exclude_files: ['blog/page']
|
110
|
-
exclude_files: []
|
111
32
|
EOS
|
112
33
|
|
113
34
|
DEFAULT_RULES = <<~EOS unless defined? DEFAULT_RULES
|
114
35
|
#!/usr/bin/env ruby
|
115
36
|
|
37
|
+
compile '/index.html' do
|
38
|
+
layout '/default.*'
|
39
|
+
write '/index.html'
|
40
|
+
end
|
41
|
+
|
116
42
|
compile '/**/*.html' do
|
117
43
|
layout '/default.*'
|
44
|
+
write item.identifier.without_ext + '/index.html'
|
118
45
|
end
|
119
46
|
|
120
47
|
# This is an example rule that matches Markdown (.md) files, and filters them
|
@@ -124,16 +51,9 @@ EOS
|
|
124
51
|
#compile '/**/*.md' do
|
125
52
|
# filter :kramdown
|
126
53
|
# layout '/default.*'
|
54
|
+
# write item.identifier.without_ext + '/index.html'
|
127
55
|
#end
|
128
56
|
|
129
|
-
route '/**/*.{html,md}' do
|
130
|
-
if item.identifier =~ '/index.*'
|
131
|
-
'/index.html'
|
132
|
-
else
|
133
|
-
item.identifier.without_ext + '/index.html'
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
57
|
compile '/**/*' do
|
138
58
|
write item.identifier.to_s
|
139
59
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
usage 'shell'
|
4
4
|
summary 'open a shell on the Nanoc environment'
|
5
|
-
aliases 'console'
|
5
|
+
aliases 'console', 'sh'
|
6
6
|
description "
|
7
7
|
Open an IRB shell on a context that contains @items, @layouts, and @config.
|
8
8
|
"
|
@@ -13,6 +13,9 @@ module Nanoc::CLI::Commands
|
|
13
13
|
def run
|
14
14
|
require 'pry'
|
15
15
|
|
16
|
+
# Needed to make pry behave properly sometimes -- see nanoc/nanoc#1309
|
17
|
+
Signal.trap('SIGINT') { raise Interrupt }
|
18
|
+
|
16
19
|
@site = load_site
|
17
20
|
Nanoc::Int::Compiler.new_for(@site).run_until_preprocessed if options[:preprocess]
|
18
21
|
|
@@ -25,7 +28,7 @@ module Nanoc::CLI::Commands
|
|
25
28
|
|
26
29
|
def self.reps_for(site)
|
27
30
|
Nanoc::Int::ItemRepRepo.new.tap do |reps|
|
28
|
-
action_provider = Nanoc::Int::ActionProvider.named(
|
31
|
+
action_provider = Nanoc::Int::ActionProvider.named(site.config.action_provider).for(site)
|
29
32
|
builder = Nanoc::Int::ItemRepBuilder.new(site, action_provider, reps)
|
30
33
|
builder.run
|
31
34
|
end
|
@@ -15,7 +15,7 @@ module Nanoc::CLI::Commands
|
|
15
15
|
res = Nanoc::Int::Compiler.new_for(site).run_until_reps_built
|
16
16
|
reps = res.fetch(:reps)
|
17
17
|
|
18
|
-
action_provider = Nanoc::Int::ActionProvider.named(
|
18
|
+
action_provider = Nanoc::Int::ActionProvider.named(site.config.action_provider).for(site)
|
19
19
|
rules = action_provider.rules_collection
|
20
20
|
|
21
21
|
items = site.items.sort_by(&:identifier)
|
data/lib/nanoc/cli/logger.rb
CHANGED
@@ -28,6 +28,7 @@ module Nanoc::CLI
|
|
28
28
|
|
29
29
|
def initialize
|
30
30
|
@level = :high
|
31
|
+
@mutex = Mutex.new
|
31
32
|
end
|
32
33
|
|
33
34
|
# Logs a file-related action.
|
@@ -63,11 +64,12 @@ module Nanoc::CLI
|
|
63
64
|
#
|
64
65
|
# @return [void]
|
65
66
|
def log(level, message, io = $stdout)
|
66
|
-
# Don't log when logging is disabled
|
67
67
|
return if @level == :off
|
68
|
+
return if @level != :low && @level != level
|
68
69
|
|
69
|
-
|
70
|
-
|
70
|
+
@mutex.synchronize do
|
71
|
+
io.puts(message)
|
72
|
+
end
|
71
73
|
end
|
72
74
|
end
|
73
75
|
end
|
@@ -10,6 +10,8 @@ module Nanoc::Filters
|
|
10
10
|
|
11
11
|
SELECTORS = ['*/@href', '*/@src', 'object/@data', 'param[@name="movie"]/@content', 'form/@action', 'comment()'].freeze
|
12
12
|
|
13
|
+
GCSE_SEARCH_WORKAROUND = 'nanoc__gcse_search__f7ac3462f628a053f86fe6563c0ec98f1fe45cee'
|
14
|
+
|
13
15
|
# Relativizes all paths in the given content, which can be HTML, XHTML, XML
|
14
16
|
# or CSS. This filter is quite useful if a site needs to be hosted in a
|
15
17
|
# subdirectory instead of a subdomain. In HTML, all `href` and `src`
|
@@ -106,6 +108,8 @@ module Nanoc::Filters
|
|
106
108
|
# Ensure that all prefixes are strings
|
107
109
|
namespaces = namespaces.reduce({}) { |new, (prefix, uri)| new.merge(prefix.to_s => uri) }
|
108
110
|
|
111
|
+
content = apply_gcse_search_workaround(content)
|
112
|
+
|
109
113
|
doc = content =~ /<html[\s>]/ ? klass.parse(content) : klass.fragment(content)
|
110
114
|
selector = selectors.map { |sel| "descendant-or-self::#{sel}" }.join('|')
|
111
115
|
doc.xpath(selector, namespaces).each do |node|
|
@@ -116,12 +120,23 @@ module Nanoc::Filters
|
|
116
120
|
end
|
117
121
|
end
|
118
122
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
123
|
+
output =
|
124
|
+
case type
|
125
|
+
when :html5
|
126
|
+
doc.to_html(save_with: nokogiri_save_options)
|
127
|
+
else
|
128
|
+
doc.send("to_#{type}", save_with: nokogiri_save_options)
|
129
|
+
end
|
130
|
+
|
131
|
+
revert_gcse_search_workaround(output)
|
132
|
+
end
|
133
|
+
|
134
|
+
def apply_gcse_search_workaround(content)
|
135
|
+
content.gsub('gcse:search', GCSE_SEARCH_WORKAROUND)
|
136
|
+
end
|
137
|
+
|
138
|
+
def revert_gcse_search_workaround(content)
|
139
|
+
content.gsub(GCSE_SEARCH_WORKAROUND, 'gcse:search')
|
125
140
|
end
|
126
141
|
|
127
142
|
def nokogiri_process_comment(node, doc, selectors, namespaces, klass, type)
|
@@ -29,6 +29,8 @@ module Nanoc::Helpers
|
|
29
29
|
|
30
30
|
attr_accessor :config
|
31
31
|
|
32
|
+
attr_accessor :alt_link
|
33
|
+
attr_accessor :id
|
32
34
|
attr_accessor :limit
|
33
35
|
attr_accessor :relevant_articles
|
34
36
|
attr_accessor :preserve_order
|
@@ -110,14 +112,14 @@ module Nanoc::Helpers
|
|
110
112
|
xml.instruct!
|
111
113
|
xml.feed(xmlns: 'http://www.w3.org/2005/Atom', 'xml:base' => root_url) do
|
112
114
|
# Add primary attributes
|
113
|
-
xml.id root_url
|
115
|
+
xml.id(id || root_url)
|
114
116
|
xml.title title
|
115
117
|
|
116
118
|
# Add date
|
117
119
|
xml.updated(updated.__nanoc_to_iso8601_time)
|
118
120
|
|
119
121
|
# Add links
|
120
|
-
xml.link(rel: 'alternate', href: root_url)
|
122
|
+
xml.link(rel: 'alternate', href: (alt_link || root_url))
|
121
123
|
xml.link(rel: 'self', href: feed_url)
|
122
124
|
|
123
125
|
# Add author information
|
@@ -175,6 +177,8 @@ module Nanoc::Helpers
|
|
175
177
|
# @option params [Boolean] :preserve_order
|
176
178
|
# @option params [Proc] :content_proc
|
177
179
|
# @option params [Proc] :excerpt_proc
|
180
|
+
# @option params [String] :alt_link
|
181
|
+
# @option params [String] :id
|
178
182
|
# @option params [String] :title
|
179
183
|
# @option params [String] :author_name
|
180
184
|
# @option params [String] :author_uri
|
@@ -189,6 +193,8 @@ module Nanoc::Helpers
|
|
189
193
|
builder = AtomFeedBuilder.new(@config, @item)
|
190
194
|
|
191
195
|
# Fill builder
|
196
|
+
builder.alt_link = params[:alt_link]
|
197
|
+
builder.id = params[:id]
|
192
198
|
builder.limit = params[:limit] || 5
|
193
199
|
builder.relevant_articles = params[:articles] || articles || []
|
194
200
|
builder.preserve_order = params.fetch(:preserve_order, false)
|
@@ -21,7 +21,7 @@ module Nanoc::Helpers
|
|
21
21
|
|
22
22
|
# Get existing contents and prep for store
|
23
23
|
snapshot_repo = @item._context.snapshot_repo
|
24
|
-
rep = @item.reps[:default].
|
24
|
+
rep = @item.reps[:default]._unwrap
|
25
25
|
capture_name = "__capture_#{@name}".to_sym
|
26
26
|
old_content_string =
|
27
27
|
case existing_behavior
|
@@ -59,12 +59,12 @@ module Nanoc::Helpers
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def run
|
62
|
-
rep = @requested_item.reps[:default].
|
62
|
+
rep = @requested_item.reps[:default]._unwrap
|
63
63
|
|
64
64
|
# Create dependency
|
65
|
-
if @item.nil? || @requested_item != @item.
|
65
|
+
if @item.nil? || @requested_item != @item._unwrap
|
66
66
|
dependency_tracker = @config._context.dependency_tracker
|
67
|
-
dependency_tracker.bounce(@requested_item.
|
67
|
+
dependency_tracker.bounce(@requested_item._unwrap, compiled_content: true)
|
68
68
|
|
69
69
|
unless rep.compiled?
|
70
70
|
Fiber.yield(Nanoc::Int::Errors::UnmetDependency.new(rep))
|
@@ -30,9 +30,9 @@ module Nanoc::Helpers
|
|
30
30
|
filter = klass.new(assigns)
|
31
31
|
|
32
32
|
# Filter captured data
|
33
|
-
Nanoc::Int::NotificationCenter.post(:filtering_started, @item_rep.
|
33
|
+
Nanoc::Int::NotificationCenter.post(:filtering_started, @item_rep._unwrap, filter_name)
|
34
34
|
filtered_data = filter.setup_and_run(data, arguments)
|
35
|
-
Nanoc::Int::NotificationCenter.post(:filtering_ended, @item_rep.
|
35
|
+
Nanoc::Int::NotificationCenter.post(:filtering_ended, @item_rep._unwrap, filter_name)
|
36
36
|
|
37
37
|
# Append filtered data to buffer
|
38
38
|
buffer = eval('_erbout', block.binding)
|
@@ -18,7 +18,7 @@ module Nanoc::Helpers
|
|
18
18
|
layout_view = @layouts[identifier]
|
19
19
|
layout_view ||= @layouts[identifier.__nanoc_cleaned_identifier]
|
20
20
|
raise Nanoc::Int::Errors::UnknownLayout.new(identifier) if layout_view.nil?
|
21
|
-
layout = layout_view.
|
21
|
+
layout = layout_view._unwrap
|
22
22
|
|
23
23
|
# Visit
|
24
24
|
dependency_tracker = @config._context.dependency_tracker
|
@@ -34,8 +34,8 @@ module Nanoc::RuleDSL
|
|
34
34
|
matching_rules.map(&:rep_name).uniq
|
35
35
|
end
|
36
36
|
|
37
|
-
def action_sequence_for(
|
38
|
-
@action_sequence_calculator[
|
37
|
+
def action_sequence_for(obj)
|
38
|
+
@action_sequence_calculator[obj]
|
39
39
|
end
|
40
40
|
|
41
41
|
def need_preprocessing?
|
@@ -50,7 +50,7 @@ module Nanoc::RuleDSL
|
|
50
50
|
end
|
51
51
|
|
52
52
|
site.data_source =
|
53
|
-
Nanoc::Int::InMemDataSource.new(ctx.items.
|
53
|
+
Nanoc::Int::InMemDataSource.new(ctx.items._unwrap, ctx.layouts._unwrap, site.data_source)
|
54
54
|
end
|
55
55
|
|
56
56
|
def postprocess(site, compiler)
|
data/lib/nanoc/spec.rb
CHANGED
@@ -98,7 +98,7 @@ module Nanoc
|
|
98
98
|
# @param [String] path The path of the `:last` snapshot of this item representation
|
99
99
|
# @param [Symbol] rep The rep name to create
|
100
100
|
def create_rep(item, path, rep = :default)
|
101
|
-
rep = Nanoc::Int::ItemRep.new(item.
|
101
|
+
rep = Nanoc::Int::ItemRep.new(item._unwrap, rep)
|
102
102
|
rep.paths[:last] = [path]
|
103
103
|
@reps << rep
|
104
104
|
self
|
@@ -112,11 +112,11 @@ module Nanoc
|
|
112
112
|
end
|
113
113
|
|
114
114
|
def item=(item)
|
115
|
-
@item = item ? item.
|
115
|
+
@item = item ? item._unwrap : nil
|
116
116
|
end
|
117
117
|
|
118
118
|
def item_rep=(item_rep)
|
119
|
-
@item_rep = item_rep ? item_rep.
|
119
|
+
@item_rep = item_rep ? item_rep._unwrap : nil
|
120
120
|
end
|
121
121
|
|
122
122
|
# @return [Nanoc::MutableConfigView]
|
data/lib/nanoc/version.rb
CHANGED
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.9.
|
4
|
+
version: 4.9.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Denis Defreyne
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-02-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -423,7 +423,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
423
423
|
version: '0'
|
424
424
|
requirements: []
|
425
425
|
rubyforge_project:
|
426
|
-
rubygems_version: 2.7.
|
426
|
+
rubygems_version: 2.7.6
|
427
427
|
signing_key:
|
428
428
|
specification_version: 4
|
429
429
|
summary: A static-site generator with a focus on flexibility.
|