nanoc 4.1.0a1 → 4.1.0b1
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 +4 -4
- data/NEWS.md +10 -0
- data/lib/nanoc/base/checksummer.rb +2 -1
- data/lib/nanoc/base/compilation/compiler.rb +33 -43
- data/lib/nanoc/base/compilation/outdatedness_checker.rb +4 -8
- data/lib/nanoc/base/entities/rule_memory.rb +5 -1
- data/lib/nanoc/base/entities.rb +0 -1
- data/lib/nanoc/base/services/action_provider.rb +22 -0
- data/lib/nanoc/base/services/compiler_loader.rb +5 -14
- data/lib/nanoc/base/services/executor.rb +1 -1
- data/lib/nanoc/base/services/item_rep_builder.rb +4 -12
- data/lib/nanoc/base/services/item_rep_router.rb +3 -4
- data/lib/nanoc/base/services.rb +1 -5
- data/lib/nanoc/base.rb +0 -3
- data/lib/nanoc/cli/commands/create-site.rb +2 -5
- data/lib/nanoc/cli/commands/show-rules.rb +9 -1
- data/lib/nanoc/helpers/rendering.rb +1 -1
- data/lib/nanoc/rule_dsl/action_provider.rb +76 -0
- data/lib/nanoc/{base/compilation → rule_dsl}/compiler_dsl.rb +9 -9
- data/lib/nanoc/{base/services → rule_dsl}/recording_executor.rb +6 -11
- data/lib/nanoc/{base/compilation → rule_dsl}/rule.rb +3 -3
- data/lib/nanoc/{base/compilation → rule_dsl}/rule_context.rb +2 -2
- data/lib/nanoc/{base/services → rule_dsl}/rule_memory_calculator.rb +16 -11
- data/lib/nanoc/{base/entities → rule_dsl}/rules_collection.rb +1 -1
- data/lib/nanoc/{base/services → rule_dsl}/rules_loader.rb +2 -2
- data/lib/nanoc/rule_dsl.rb +8 -0
- data/lib/nanoc/version.rb +1 -1
- data/lib/nanoc.rb +1 -0
- data/test/base/test_compiler.rb +45 -147
- data/test/filters/test_erb.rb +1 -1
- data/test/helper.rb +2 -2
- data/test/rule_dsl/test_action_provider.rb +70 -0
- data/test/{base → rule_dsl}/test_compiler_dsl.rb +25 -86
- data/test/{base → rule_dsl}/test_rule.rb +1 -1
- data/test/rule_dsl/test_rules_collection.rb +89 -0
- metadata +17 -16
- data/lib/nanoc/base/services/postprocessor.rb +0 -26
- data/lib/nanoc/base/services/preprocessor.rb +0 -26
- data/nanoc-4.0.2.gem +0 -0
- data/tags +0 -1175
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 97c006e6e64be4a26d31842364fcc8a5377264a3
|
4
|
+
data.tar.gz: 96a6fb9d6ca291ddbdc8efe52564326a1691e601
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3966392f10098cc3d5d386d8e7004b130f11c9b54365542b4912fdba467c1847c00f4cc3861ae2de7d5f5c2286117a5498770772694d0e147de77ba5a07ac11e
|
7
|
+
data.tar.gz: 34175a88270c6c092c22ac8a30b90674489bf98d971a7984c3731653ff3b3f259e8dcbcc76fd247c187a85509c40593a45ca247808b8eb9fd029ca22946c9c9e
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
nanoc (4.1.
|
4
|
+
nanoc (4.1.0b1)
|
5
5
|
cri (~> 2.3)
|
6
6
|
|
7
7
|
GEM
|
@@ -9,7 +9,7 @@ GEM
|
|
9
9
|
specs:
|
10
10
|
CFPropertyList (2.3.2)
|
11
11
|
RedCloth (4.2.9)
|
12
|
-
addressable (2.
|
12
|
+
addressable (2.4.0)
|
13
13
|
adsf (1.2.0)
|
14
14
|
rack (>= 1.0.0)
|
15
15
|
ast (2.1.0)
|
@@ -137,7 +137,7 @@ GEM
|
|
137
137
|
fog-core
|
138
138
|
fog-json
|
139
139
|
fog-xml
|
140
|
-
fog-sakuracloud (1.
|
140
|
+
fog-sakuracloud (1.5.0)
|
141
141
|
fog-core
|
142
142
|
fog-json
|
143
143
|
fog-serverlove (0.1.2)
|
@@ -267,7 +267,7 @@ GEM
|
|
267
267
|
ruby-progressbar (1.7.5)
|
268
268
|
rubypants (0.2.0)
|
269
269
|
safe_yaml (1.0.4)
|
270
|
-
sass (3.4.
|
270
|
+
sass (3.4.20)
|
271
271
|
shellany (0.0.1)
|
272
272
|
simplecov (0.11.1)
|
273
273
|
docile (~> 1.1.0)
|
data/NEWS.md
CHANGED
@@ -83,7 +83,8 @@ module Nanoc::Int
|
|
83
83
|
digest.update(obj.to_i.to_s)
|
84
84
|
when Nanoc::Identifier
|
85
85
|
update(obj.to_s, digest)
|
86
|
-
|
86
|
+
# TODO: Use RuleMemory rather than RulesCollection
|
87
|
+
when Nanoc::RuleDSL::RulesCollection, Nanoc::Int::CodeSnippet
|
87
88
|
update(obj.data, digest)
|
88
89
|
when Nanoc::Int::TextualContent
|
89
90
|
update(obj.string, digest)
|
@@ -48,9 +48,6 @@ module Nanoc::Int
|
|
48
48
|
# @return [Array] The compilation stack
|
49
49
|
attr_reader :stack
|
50
50
|
|
51
|
-
# @api private
|
52
|
-
attr_reader :rules_collection
|
53
|
-
|
54
51
|
# @api private
|
55
52
|
attr_reader :compiled_content_cache
|
56
53
|
|
@@ -61,7 +58,7 @@ module Nanoc::Int
|
|
61
58
|
attr_reader :rule_memory_store
|
62
59
|
|
63
60
|
# @api private
|
64
|
-
attr_reader :
|
61
|
+
attr_reader :action_provider
|
65
62
|
|
66
63
|
# @api private
|
67
64
|
attr_reader :dependency_store
|
@@ -72,41 +69,25 @@ module Nanoc::Int
|
|
72
69
|
# @api private
|
73
70
|
attr_reader :reps
|
74
71
|
|
75
|
-
def initialize(site,
|
72
|
+
def initialize(site, compiled_content_cache:, checksum_store:, rule_memory_store:, action_provider:, dependency_store:, outdatedness_checker:, reps:)
|
76
73
|
@site = site
|
77
|
-
@rules_collection = rules_collection
|
78
74
|
|
79
75
|
@compiled_content_cache = compiled_content_cache
|
80
76
|
@checksum_store = checksum_store
|
81
77
|
@rule_memory_store = rule_memory_store
|
82
|
-
@rule_memory_calculator = rule_memory_calculator
|
83
78
|
@dependency_store = dependency_store
|
84
79
|
@outdatedness_checker = outdatedness_checker
|
85
80
|
@reps = reps
|
81
|
+
@action_provider = action_provider
|
86
82
|
|
87
83
|
@stack = []
|
88
84
|
end
|
89
85
|
|
90
|
-
# 1. Load site
|
91
|
-
# 2. Load rules
|
92
|
-
# 3. Preprocess
|
93
|
-
# 4. Build item reps
|
94
|
-
# 5. Compile
|
95
|
-
# 6. Postprocess
|
96
|
-
|
97
|
-
# TODO: move elsewhere
|
98
86
|
def run_all
|
99
|
-
|
100
|
-
Nanoc::Int::Preprocessor.new(site: @site, rules_collection: @rules_collection).run
|
101
|
-
|
102
|
-
# Build reps
|
87
|
+
@action_provider.preprocess(@site)
|
103
88
|
build_reps
|
104
|
-
|
105
|
-
# Compile
|
106
89
|
run
|
107
|
-
|
108
|
-
# Postprocess
|
109
|
-
Nanoc::Int::Postprocessor.new(create_view_context, site: @site, rules_collection: @rules_collection).run
|
90
|
+
@action_provider.postprocess(@site, @reps)
|
110
91
|
end
|
111
92
|
|
112
93
|
def run
|
@@ -139,11 +120,13 @@ module Nanoc::Int
|
|
139
120
|
def store
|
140
121
|
# Calculate rule memory
|
141
122
|
(@reps.to_a + @site.layouts.to_a).each do |obj|
|
142
|
-
rule_memory_store[obj] =
|
123
|
+
rule_memory_store[obj] = action_provider.memory_for(obj).serialize
|
143
124
|
end
|
144
125
|
|
145
126
|
# Calculate checksums
|
146
|
-
|
127
|
+
objects_to_checksum =
|
128
|
+
site.items.to_a + site.layouts.to_a + site.code_snippets + [site.config]
|
129
|
+
objects_to_checksum.each do |obj|
|
147
130
|
checksum_store[obj] = Nanoc::Int::Checksummer.calc(obj)
|
148
131
|
end
|
149
132
|
|
@@ -151,18 +134,9 @@ module Nanoc::Int
|
|
151
134
|
stores.each(&:store)
|
152
135
|
end
|
153
136
|
|
154
|
-
# Returns all objects managed by the site (items, layouts, code snippets,
|
155
|
-
# site configuration and the rules).
|
156
|
-
#
|
157
|
-
# @api private
|
158
|
-
def objects
|
159
|
-
site.items.to_a + site.layouts.to_a + site.code_snippets +
|
160
|
-
[site.config, rules_collection]
|
161
|
-
end
|
162
|
-
|
163
137
|
def build_reps
|
164
138
|
builder = Nanoc::Int::ItemRepBuilder.new(
|
165
|
-
site,
|
139
|
+
site, action_provider, @reps)
|
166
140
|
builder.run
|
167
141
|
end
|
168
142
|
|
@@ -198,6 +172,16 @@ module Nanoc::Int
|
|
198
172
|
Nanoc::ViewContext.new(reps: @reps, items: @site.items)
|
199
173
|
end
|
200
174
|
|
175
|
+
# @api private
|
176
|
+
def filter_name_and_args_for_layout(layout)
|
177
|
+
mem = action_provider.memory_for(layout)
|
178
|
+
if mem.nil? || mem.size != 1 || !mem[0].is_a?(Nanoc::Int::RuleMemoryActions::Filter)
|
179
|
+
# FIXME: Provide a nicer error message
|
180
|
+
raise Nanoc::Int::Errors::Generic, "No rule memory found for #{layout.identifier}"
|
181
|
+
end
|
182
|
+
[mem[0].filter_name, mem[0].params]
|
183
|
+
end
|
184
|
+
|
201
185
|
private
|
202
186
|
|
203
187
|
def compile_reps
|
@@ -207,7 +191,7 @@ module Nanoc::Int
|
|
207
191
|
|
208
192
|
# Assign snapshots
|
209
193
|
@reps.each do |rep|
|
210
|
-
rep.snapshot_defs =
|
194
|
+
rep.snapshot_defs = action_provider.snapshots_defs_for(rep)
|
211
195
|
end
|
212
196
|
|
213
197
|
# Find item reps to compile and compile them
|
@@ -264,12 +248,18 @@ module Nanoc::Int
|
|
264
248
|
def recalculate_content_for_rep(rep)
|
265
249
|
executor = Nanoc::Int::Executor.new(self)
|
266
250
|
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
251
|
+
action_provider.memory_for(rep).each do |action|
|
252
|
+
case action
|
253
|
+
when Nanoc::Int::RuleMemoryActions::Filter
|
254
|
+
executor.filter(rep, action.filter_name, action.params)
|
255
|
+
when Nanoc::Int::RuleMemoryActions::Layout
|
256
|
+
executor.layout(rep, action.layout_identifier, action.params)
|
257
|
+
when Nanoc::Int::RuleMemoryActions::Snapshot
|
258
|
+
executor.snapshot(rep, action.snapshot_name, final: action.final?, path: action.path)
|
259
|
+
else
|
260
|
+
raise "Internal inconsistency: unknown action #{action.inspect}"
|
261
|
+
end
|
262
|
+
end
|
273
263
|
end
|
274
264
|
|
275
265
|
# Clears the list of dependencies for items that will be recompiled.
|
@@ -7,9 +7,7 @@ module Nanoc::Int
|
|
7
7
|
|
8
8
|
attr_reader :checksum_store
|
9
9
|
attr_reader :dependency_store
|
10
|
-
attr_reader :rule_memory_calculator
|
11
10
|
attr_reader :rule_memory_store
|
12
|
-
attr_reader :rules_collection
|
13
11
|
attr_reader :site
|
14
12
|
|
15
13
|
Reasons = Nanoc::Int::OutdatednessReasons
|
@@ -17,17 +15,15 @@ module Nanoc::Int
|
|
17
15
|
# @param [Nanoc::Int::Site] site
|
18
16
|
# @param [Nanoc::Int::ChecksumStore] checksum_store
|
19
17
|
# @param [Nanoc::Int::DependencyStore] dependency_store
|
20
|
-
# @param [Nanoc::Int::RulesCollection] rules_collection
|
21
18
|
# @param [Nanoc::Int::RuleMemoryStore] rule_memory_store
|
22
|
-
# @param [Nanoc::Int::
|
19
|
+
# @param [Nanoc::Int::ActionProvider] action_provider
|
23
20
|
# @param [Nanoc::Int::ItemRepRepo] reps
|
24
|
-
def initialize(site:, checksum_store:, dependency_store:,
|
21
|
+
def initialize(site:, checksum_store:, dependency_store:, rule_memory_store:, action_provider:, reps:)
|
25
22
|
@site = site
|
26
23
|
@checksum_store = checksum_store
|
27
24
|
@dependency_store = dependency_store
|
28
|
-
@rules_collection = rules_collection
|
29
25
|
@rule_memory_store = rule_memory_store
|
30
|
-
@
|
26
|
+
@action_provider = action_provider
|
31
27
|
@reps = reps
|
32
28
|
|
33
29
|
@basic_outdatedness_reasons = {}
|
@@ -172,7 +168,7 @@ module Nanoc::Int
|
|
172
168
|
# @return [Boolean] true if the rule memory for the given item
|
173
169
|
# represenation has changed, false otherwise
|
174
170
|
def rule_memory_differs_for(obj)
|
175
|
-
!rule_memory_store[obj].eql?(
|
171
|
+
!rule_memory_store[obj].eql?(@action_provider.memory_for(obj).serialize)
|
176
172
|
end
|
177
173
|
memoize :rule_memory_differs_for
|
178
174
|
|
@@ -24,7 +24,7 @@ module Nanoc::Int
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def add_snapshot(snapshot_name, final, path)
|
27
|
-
will_add_snapshot(snapshot_name)
|
27
|
+
will_add_snapshot(snapshot_name) if final
|
28
28
|
@actions << Nanoc::Int::RuleMemoryActions::Snapshot.new(snapshot_name, final, path)
|
29
29
|
end
|
30
30
|
|
@@ -32,6 +32,10 @@ module Nanoc::Int
|
|
32
32
|
@actions.select { |a| a.is_a?(Nanoc::Int::RuleMemoryActions::Snapshot) }
|
33
33
|
end
|
34
34
|
|
35
|
+
def any_layouts?
|
36
|
+
@actions.any? { |a| a.is_a?(Nanoc::Int::RuleMemoryActions::Layout) }
|
37
|
+
end
|
38
|
+
|
35
39
|
def serialize
|
36
40
|
map(&:serialize)
|
37
41
|
end
|
data/lib/nanoc/base/entities.rb
CHANGED
@@ -11,6 +11,5 @@ require_relative 'entities/pattern'
|
|
11
11
|
require_relative 'entities/rule_memory'
|
12
12
|
require_relative 'entities/rule_memory_action'
|
13
13
|
require_relative 'entities/rule_memory_actions'
|
14
|
-
require_relative 'entities/rules_collection'
|
15
14
|
require_relative 'entities/site'
|
16
15
|
require_relative 'entities/snapshot_def'
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Nanoc::Int
|
2
|
+
# @private
|
3
|
+
class ActionProvider
|
4
|
+
extend Nanoc::Int::PluginRegistry::PluginMethods
|
5
|
+
|
6
|
+
def self.for(_site)
|
7
|
+
raise NotImplementedError
|
8
|
+
end
|
9
|
+
|
10
|
+
def rep_names_for(_item)
|
11
|
+
raise NotImplementedError
|
12
|
+
end
|
13
|
+
|
14
|
+
def memory_for(_rep)
|
15
|
+
raise NotImplementedError
|
16
|
+
end
|
17
|
+
|
18
|
+
def snapshots_defs_for(_rep)
|
19
|
+
raise NotImplementedError
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -2,14 +2,8 @@ module Nanoc::Int
|
|
2
2
|
# @api private
|
3
3
|
class CompilerLoader
|
4
4
|
def load(site)
|
5
|
-
rules_collection = Nanoc::Int::RulesCollection.new
|
6
|
-
|
7
5
|
rule_memory_store = Nanoc::Int::RuleMemoryStore.new
|
8
6
|
|
9
|
-
rule_memory_calculator =
|
10
|
-
Nanoc::Int::RuleMemoryCalculator.new(
|
11
|
-
rules_collection: rules_collection, site: site)
|
12
|
-
|
13
7
|
dependency_store =
|
14
8
|
Nanoc::Int::DependencyStore.new(site.items.to_a + site.layouts.to_a)
|
15
9
|
|
@@ -18,14 +12,15 @@ module Nanoc::Int
|
|
18
12
|
|
19
13
|
item_rep_repo = Nanoc::Int::ItemRepRepo.new
|
20
14
|
|
15
|
+
action_provider = Nanoc::Int::ActionProvider.named(:rule_dsl).for(site)
|
16
|
+
|
21
17
|
outdatedness_checker =
|
22
18
|
Nanoc::Int::OutdatednessChecker.new(
|
23
19
|
site: site,
|
24
20
|
checksum_store: checksum_store,
|
25
21
|
dependency_store: dependency_store,
|
26
|
-
rules_collection: rules_collection,
|
27
22
|
rule_memory_store: rule_memory_store,
|
28
|
-
|
23
|
+
action_provider: action_provider,
|
29
24
|
reps: item_rep_repo,
|
30
25
|
)
|
31
26
|
|
@@ -33,17 +28,13 @@ module Nanoc::Int
|
|
33
28
|
compiled_content_cache: Nanoc::Int::CompiledContentCache.new,
|
34
29
|
checksum_store: checksum_store,
|
35
30
|
rule_memory_store: rule_memory_store,
|
36
|
-
rule_memory_calculator: rule_memory_calculator,
|
37
31
|
dependency_store: dependency_store,
|
38
32
|
outdatedness_checker: outdatedness_checker,
|
39
33
|
reps: item_rep_repo,
|
34
|
+
action_provider: action_provider,
|
40
35
|
}
|
41
36
|
|
42
|
-
|
43
|
-
|
44
|
-
Nanoc::Int::RulesLoader.new(site.config, rules_collection).load
|
45
|
-
|
46
|
-
compiler
|
37
|
+
Nanoc::Int::Compiler.new(site, params)
|
47
38
|
end
|
48
39
|
end
|
49
40
|
end
|
@@ -55,7 +55,7 @@ module Nanoc
|
|
55
55
|
|
56
56
|
def layout(rep, layout_identifier, extra_filter_args = nil)
|
57
57
|
layout = find_layout(layout_identifier)
|
58
|
-
filter_name, filter_args =
|
58
|
+
filter_name, filter_args = *@compiler.filter_name_and_args_for_layout(layout)
|
59
59
|
if filter_name.nil?
|
60
60
|
raise Nanoc::Int::Errors::Generic, "Cannot find rule for layout matching #{layout_identifier}"
|
61
61
|
end
|
@@ -3,28 +3,20 @@ module Nanoc::Int
|
|
3
3
|
class ItemRepBuilder
|
4
4
|
attr_reader :reps
|
5
5
|
|
6
|
-
def initialize(site,
|
6
|
+
def initialize(site, action_provider, reps)
|
7
7
|
@site = site
|
8
|
-
@
|
9
|
-
@rule_memory_calculator = rule_memory_calculator
|
8
|
+
@action_provider = action_provider
|
10
9
|
@reps = reps
|
11
10
|
end
|
12
11
|
|
13
12
|
def run
|
14
13
|
@site.items.each do |item|
|
15
|
-
rep_names_for(item).each do |rep_name|
|
14
|
+
@action_provider.rep_names_for(item).each do |rep_name|
|
16
15
|
@reps << Nanoc::Int::ItemRep.new(item, rep_name)
|
17
16
|
end
|
18
17
|
end
|
19
18
|
|
20
|
-
Nanoc::Int::ItemRepRouter.new(@reps, @
|
21
|
-
end
|
22
|
-
|
23
|
-
def rep_names_for(item)
|
24
|
-
matching_rules = @rules_collection.item_compilation_rules_for(item)
|
25
|
-
raise Nanoc::Int::Errors::NoMatchingCompilationRuleFound.new(item) if matching_rules.empty?
|
26
|
-
|
27
|
-
matching_rules.map(&:rep_name).uniq
|
19
|
+
Nanoc::Int::ItemRepRouter.new(@reps, @action_provider, @site).run
|
28
20
|
end
|
29
21
|
end
|
30
22
|
end
|
@@ -9,17 +9,16 @@ module Nanoc::Int
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
def initialize(reps, rule_memory_calculator, site)
|
12
|
+
def initialize(reps, action_provider, site)
|
14
13
|
@reps = reps
|
15
|
-
@
|
14
|
+
@action_provider = action_provider
|
16
15
|
@site = site
|
17
16
|
end
|
18
17
|
|
19
18
|
def run
|
20
19
|
paths_to_reps = {}
|
21
20
|
@reps.each do |rep|
|
22
|
-
mem = @
|
21
|
+
mem = @action_provider.memory_for(rep)
|
23
22
|
mem.snapshot_actions.each do |snapshot_action|
|
24
23
|
route_rep(rep, snapshot_action, paths_to_reps)
|
25
24
|
end
|
data/lib/nanoc/base/services.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require_relative 'services/action_provider'
|
1
2
|
require_relative 'services/compiler_loader'
|
2
3
|
require_relative 'services/executor'
|
3
4
|
require_relative 'services/item_rep_builder'
|
@@ -5,9 +6,4 @@ require_relative 'services/item_rep_router'
|
|
5
6
|
require_relative 'services/item_rep_selector'
|
6
7
|
require_relative 'services/item_rep_writer'
|
7
8
|
require_relative 'services/notification_center'
|
8
|
-
require_relative 'services/preprocessor'
|
9
|
-
require_relative 'services/postprocessor'
|
10
|
-
require_relative 'services/recording_executor'
|
11
|
-
require_relative 'services/rule_memory_calculator'
|
12
|
-
require_relative 'services/rules_loader'
|
13
9
|
require_relative 'services/temp_filename_factory'
|
data/lib/nanoc/base.rb
CHANGED
@@ -15,13 +15,10 @@ module Nanoc::Int
|
|
15
15
|
|
16
16
|
# Load compilation classes
|
17
17
|
autoload 'Compiler', 'nanoc/base/compilation/compiler'
|
18
|
-
autoload 'CompilerDSL', 'nanoc/base/compilation/compiler_dsl'
|
19
18
|
autoload 'DependencyTracker', 'nanoc/base/compilation/dependency_tracker'
|
20
19
|
autoload 'ItemRepRepo', 'nanoc/base/compilation/item_rep_repo'
|
21
20
|
autoload 'OutdatednessChecker', 'nanoc/base/compilation/outdatedness_checker'
|
22
21
|
autoload 'OutdatednessReasons', 'nanoc/base/compilation/outdatedness_reasons'
|
23
|
-
autoload 'Rule', 'nanoc/base/compilation/rule'
|
24
|
-
autoload 'RuleContext', 'nanoc/base/compilation/rule_context'
|
25
22
|
end
|
26
23
|
|
27
24
|
require_relative 'base/core_ext'
|
@@ -124,9 +124,6 @@ end
|
|
124
124
|
# layout '/default.*'
|
125
125
|
#end
|
126
126
|
|
127
|
-
compile '/**/*' do
|
128
|
-
end
|
129
|
-
|
130
127
|
route '/**/*.{html,md}' do
|
131
128
|
if item.identifier =~ '/index.*'
|
132
129
|
'/index.html'
|
@@ -135,8 +132,8 @@ route '/**/*.{html,md}' do
|
|
135
132
|
end
|
136
133
|
end
|
137
134
|
|
138
|
-
|
139
|
-
item.identifier.to_s
|
135
|
+
compile '/**/*' do
|
136
|
+
write item.identifier.to_s
|
140
137
|
end
|
141
138
|
|
142
139
|
layout '/**/*', :erb
|
@@ -11,9 +11,17 @@ module Nanoc::CLI::Commands
|
|
11
11
|
require_site
|
12
12
|
|
13
13
|
@c = Nanoc::CLI::ANSIStringColorizer
|
14
|
-
@rules = site.compiler.rules_collection
|
15
14
|
@reps = site.compiler.reps
|
16
15
|
|
16
|
+
action_provider = site.compiler.action_provider
|
17
|
+
unless action_provider.respond_to?(:rules_collection)
|
18
|
+
raise(
|
19
|
+
::Nanoc::Int::Errors::GenericTrivial,
|
20
|
+
'The show-rules command can only be used for sites with the Rule DSL action provider.',
|
21
|
+
)
|
22
|
+
end
|
23
|
+
@rules = action_provider.rules_collection
|
24
|
+
|
17
25
|
site.items.sort_by(&:identifier).each { |e| explain_item(e) }
|
18
26
|
site.layouts.sort_by(&:identifier).each { |e| explain_layout(e) }
|
19
27
|
end
|
@@ -99,7 +99,7 @@ module Nanoc::Helpers
|
|
99
99
|
}.merge(other_assigns)
|
100
100
|
|
101
101
|
# Get filter name
|
102
|
-
filter_name, filter_args =
|
102
|
+
filter_name, filter_args = *@site.unwrap.compiler.filter_name_and_args_for_layout(layout)
|
103
103
|
raise Nanoc::Int::Errors::CannotDetermineFilter.new(layout.identifier) if filter_name.nil?
|
104
104
|
|
105
105
|
# Get filter class
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module Nanoc::RuleDSL
|
2
|
+
class ActionProvider < Nanoc::Int::ActionProvider
|
3
|
+
identifier :rule_dsl
|
4
|
+
|
5
|
+
# @api private
|
6
|
+
attr_reader :rules_collection
|
7
|
+
|
8
|
+
def self.for(site)
|
9
|
+
rules_collection = Nanoc::RuleDSL::RulesCollection.new
|
10
|
+
|
11
|
+
rule_memory_calculator =
|
12
|
+
Nanoc::RuleDSL::RuleMemoryCalculator.new(
|
13
|
+
rules_collection: rules_collection, site: site)
|
14
|
+
|
15
|
+
action_provider = new(rules_collection, rule_memory_calculator)
|
16
|
+
|
17
|
+
Nanoc::RuleDSL::RulesLoader.new(site.config, rules_collection).load
|
18
|
+
|
19
|
+
action_provider
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize(rules_collection, rule_memory_calculator)
|
23
|
+
@rules_collection = rules_collection
|
24
|
+
@rule_memory_calculator = rule_memory_calculator
|
25
|
+
end
|
26
|
+
|
27
|
+
def rep_names_for(item)
|
28
|
+
matching_rules = @rules_collection.item_compilation_rules_for(item)
|
29
|
+
raise Nanoc::Int::Errors::NoMatchingCompilationRuleFound.new(item) if matching_rules.empty?
|
30
|
+
|
31
|
+
matching_rules.map(&:rep_name).uniq
|
32
|
+
end
|
33
|
+
|
34
|
+
def memory_for(rep)
|
35
|
+
@rule_memory_calculator[rep]
|
36
|
+
end
|
37
|
+
|
38
|
+
def snapshots_defs_for(rep)
|
39
|
+
@rule_memory_calculator.snapshots_defs_for(rep)
|
40
|
+
end
|
41
|
+
|
42
|
+
def preprocess(site)
|
43
|
+
ctx = new_preprocessor_context(site)
|
44
|
+
|
45
|
+
@rules_collection.preprocessors.each_value do |preprocessor|
|
46
|
+
ctx.instance_eval(&preprocessor)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def postprocess(site, reps)
|
51
|
+
view_context = Nanoc::ViewContext.new(reps: reps, items: site.items)
|
52
|
+
ctx = new_postprocessor_context(site, view_context)
|
53
|
+
|
54
|
+
@rules_collection.postprocessors.each_value do |postprocessor|
|
55
|
+
ctx.instance_eval(&postprocessor)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# @api private
|
60
|
+
def new_preprocessor_context(site)
|
61
|
+
Nanoc::Int::Context.new(
|
62
|
+
config: Nanoc::MutableConfigView.new(site.config, nil),
|
63
|
+
items: Nanoc::MutableItemCollectionView.new(site.items, nil),
|
64
|
+
layouts: Nanoc::MutableLayoutCollectionView.new(site.layouts, nil),
|
65
|
+
)
|
66
|
+
end
|
67
|
+
|
68
|
+
# @api private
|
69
|
+
def new_postprocessor_context(site, view_context)
|
70
|
+
Nanoc::Int::Context.new(
|
71
|
+
config: Nanoc::ConfigView.new(site.config, view_context),
|
72
|
+
items: Nanoc::PostCompileItemCollectionView.new(site.items, view_context),
|
73
|
+
)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module Nanoc::
|
1
|
+
module Nanoc::RuleDSL
|
2
2
|
# Contains methods that will be executed by the site’s `Rules` file.
|
3
3
|
#
|
4
4
|
# @api private
|
@@ -14,7 +14,7 @@ module Nanoc::Int
|
|
14
14
|
#
|
15
15
|
# @api private
|
16
16
|
#
|
17
|
-
# @param [Nanoc::
|
17
|
+
# @param [Nanoc::RuleDSL::RulesCollection] rules_collection The collection of
|
18
18
|
# rules to modify when loading this DSL
|
19
19
|
#
|
20
20
|
# @param [Hash] config The site configuration
|
@@ -71,7 +71,7 @@ module Nanoc::Int
|
|
71
71
|
def compile(identifier, rep: :default, &block)
|
72
72
|
raise ArgumentError.new('#compile requires a block') unless block_given?
|
73
73
|
|
74
|
-
rule = Nanoc::
|
74
|
+
rule = Nanoc::RuleDSL::Rule.new(create_pattern(identifier), rep, block)
|
75
75
|
@rules_collection.add_item_compilation_rule(rule)
|
76
76
|
end
|
77
77
|
|
@@ -109,7 +109,7 @@ module Nanoc::Int
|
|
109
109
|
def route(identifier, rep: :default, snapshot: :last, &block)
|
110
110
|
raise ArgumentError.new('#route requires a block') unless block_given?
|
111
111
|
|
112
|
-
rule = Nanoc::
|
112
|
+
rule = Nanoc::RuleDSL::Rule.new(create_pattern(identifier), rep, block, snapshot_name: snapshot)
|
113
113
|
@rules_collection.add_item_routing_rule(rule)
|
114
114
|
end
|
115
115
|
|
@@ -170,7 +170,7 @@ module Nanoc::Int
|
|
170
170
|
raise ArgumentError.new('#passthrough does not require a block') if block_given?
|
171
171
|
|
172
172
|
compilation_block = proc {}
|
173
|
-
compilation_rule = Nanoc::
|
173
|
+
compilation_rule = Nanoc::RuleDSL::Rule.new(create_pattern(identifier), rep, compilation_block)
|
174
174
|
@rules_collection.add_item_compilation_rule(compilation_rule)
|
175
175
|
|
176
176
|
# Create routing rule
|
@@ -185,7 +185,7 @@ module Nanoc::Int
|
|
185
185
|
item[:extension].nil? || (item[:content_filename].nil? && item.identifier =~ %r{#{item[:extension]}/$}) ? item.identifier.chop : item.identifier.chop + '.' + item[:extension]
|
186
186
|
end
|
187
187
|
end
|
188
|
-
routing_rule = Nanoc::
|
188
|
+
routing_rule = Nanoc::RuleDSL::Rule.new(create_pattern(identifier), rep, routing_block, snapshot_name: :last)
|
189
189
|
@rules_collection.add_item_routing_rule(routing_rule)
|
190
190
|
end
|
191
191
|
|
@@ -210,10 +210,10 @@ module Nanoc::Int
|
|
210
210
|
def ignore(identifier, rep: :default)
|
211
211
|
raise ArgumentError.new('#ignore does not require a block') if block_given?
|
212
212
|
|
213
|
-
compilation_rule = Nanoc::
|
213
|
+
compilation_rule = Nanoc::RuleDSL::Rule.new(create_pattern(identifier), rep, proc {})
|
214
214
|
@rules_collection.add_item_compilation_rule(compilation_rule)
|
215
215
|
|
216
|
-
routing_rule = Nanoc::
|
216
|
+
routing_rule = Nanoc::RuleDSL::Rule.new(create_pattern(identifier), rep, proc {}, snapshot_name: :last)
|
217
217
|
@rules_collection.add_item_routing_rule(routing_rule)
|
218
218
|
end
|
219
219
|
|
@@ -233,7 +233,7 @@ module Nanoc::Int
|
|
233
233
|
filename = ["#{name}", "#{name}.rb", "./#{name}", "./#{name}.rb"].find { |f| File.file?(f) }
|
234
234
|
raise Nanoc::Int::Errors::NoRulesFileFound.new if filename.nil?
|
235
235
|
|
236
|
-
Nanoc::
|
236
|
+
Nanoc::RuleDSL::RulesLoader.new(@config, @rules_collection).parse(filename)
|
237
237
|
end
|
238
238
|
|
239
239
|
# Creates a postprocessor block that will be executed after all data is
|