nanoc 4.1.0a1 → 4.1.0b1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|