nanoc 4.3.7 → 4.3.8

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.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/Appraisals +11 -0
  3. data/Gemfile +6 -6
  4. data/Gemfile.lock +32 -18
  5. data/NEWS.md +14 -0
  6. data/Rakefile +30 -1
  7. data/lib/nanoc.rb +3 -0
  8. data/lib/nanoc/base/checksummer.rb +28 -0
  9. data/lib/nanoc/base/compilation/compiler.rb +34 -20
  10. data/lib/nanoc/base/compilation/filter.rb +1 -1
  11. data/lib/nanoc/base/context.rb +5 -0
  12. data/lib/nanoc/base/entities/item_rep.rb +2 -13
  13. data/lib/nanoc/base/services.rb +1 -0
  14. data/lib/nanoc/base/services/compiler_loader.rb +2 -2
  15. data/lib/nanoc/{extra → base/services}/pruner.rb +56 -48
  16. data/lib/nanoc/checking.rb +11 -0
  17. data/lib/nanoc/{extra/checking → checking}/check.rb +3 -3
  18. data/lib/nanoc/checking/checks.rb +20 -0
  19. data/lib/nanoc/{extra/checking → checking}/checks/css.rb +2 -2
  20. data/lib/nanoc/{extra/checking → checking}/checks/external_links.rb +2 -2
  21. data/lib/nanoc/{extra/checking → checking}/checks/html.rb +2 -2
  22. data/lib/nanoc/{extra/checking → checking}/checks/internal_links.rb +2 -2
  23. data/lib/nanoc/{extra/checking → checking}/checks/mixed_content.rb +2 -2
  24. data/lib/nanoc/{extra/checking → checking}/checks/stale.rb +4 -3
  25. data/lib/nanoc/{extra/checking → checking}/checks/w3c_validator.rb +2 -2
  26. data/lib/nanoc/{extra/checking → checking}/dsl.rb +2 -2
  27. data/lib/nanoc/{extra/checking → checking}/issue.rb +1 -1
  28. data/lib/nanoc/{extra/checking → checking}/runner.rb +4 -4
  29. data/lib/nanoc/cli/cleaning_stream.rb +1 -1
  30. data/lib/nanoc/cli/commands/check.rb +1 -1
  31. data/lib/nanoc/cli/commands/compile.rb +62 -56
  32. data/lib/nanoc/cli/commands/deploy.rb +4 -4
  33. data/lib/nanoc/cli/commands/prune.rb +2 -2
  34. data/lib/nanoc/cli/commands/show-plugins.rb +4 -4
  35. data/lib/nanoc/data_sources/filesystem.rb +3 -1
  36. data/lib/nanoc/{extra/filesystem_tools.rb → data_sources/filesystem/tools.rb} +20 -15
  37. data/lib/nanoc/deploying.rb +8 -0
  38. data/lib/nanoc/{extra → deploying}/deployer.rb +2 -2
  39. data/lib/nanoc/deploying/deployers.rb +10 -0
  40. data/lib/nanoc/{extra → deploying}/deployers/fog.rb +3 -3
  41. data/lib/nanoc/{extra → deploying}/deployers/rsync.rb +3 -3
  42. data/lib/nanoc/extra.rb +9 -5
  43. data/lib/nanoc/filters/colorize_syntax.rb +15 -4
  44. data/lib/nanoc/filters/rdoc.rb +0 -5
  45. data/lib/nanoc/helpers/capturing.rb +2 -1
  46. data/lib/nanoc/rule_dsl/recording_executor.rb +7 -1
  47. data/lib/nanoc/spec.rb +10 -34
  48. data/lib/nanoc/version.rb +1 -1
  49. data/nanoc.gemspec +2 -1
  50. data/test/base/test_context.rb +6 -0
  51. data/test/base/test_dependency_tracker.rb +0 -18
  52. data/test/base/test_item_rep.rb +2 -2
  53. data/test/{extra/checking → checking}/checks/test_css.rb +4 -4
  54. data/test/{extra/checking → checking}/checks/test_external_links.rb +8 -8
  55. data/test/{extra/checking → checking}/checks/test_html.rb +3 -3
  56. data/test/{extra/checking → checking}/checks/test_internal_links.rb +9 -9
  57. data/test/{extra/checking → checking}/checks/test_mixed_content.rb +9 -9
  58. data/test/{extra/checking → checking}/checks/test_stale.rb +3 -3
  59. data/test/{extra/checking → checking}/test_check.rb +4 -4
  60. data/test/{extra/checking → checking}/test_dsl.rb +5 -5
  61. data/test/{extra/checking → checking}/test_runner.rb +4 -4
  62. data/test/data_sources/test_filesystem.rb +0 -18
  63. data/test/{extra → data_sources}/test_filesystem_tools.rb +13 -13
  64. data/test/{extra/deployers → deploying}/test_fog.rb +8 -8
  65. data/test/{extra/deployers → deploying}/test_rsync.rb +7 -7
  66. data/test/filters/{test_colorize_syntax.rb → colorize_syntax/test_coderay.rb} +1 -177
  67. data/test/filters/colorize_syntax/test_common.rb +81 -0
  68. data/test/filters/colorize_syntax/test_pygmentize.rb +35 -0
  69. data/test/filters/colorize_syntax/test_pygments.rb +17 -0
  70. data/test/filters/colorize_syntax/test_simon.rb +20 -0
  71. data/test/filters/test_less.rb +0 -55
  72. metadata +55 -43
  73. data/ChangeLog +0 -3
  74. data/doc/yardoc_handlers/identifier.rb +0 -30
  75. data/doc/yardoc_templates/default/layout/html/footer.erb +0 -19
  76. data/lib/nanoc/extra/checking.rb +0 -11
  77. data/lib/nanoc/extra/checking/checks.rb +0 -20
  78. data/lib/nanoc/extra/deployers.rb +0 -10
  79. data/tasks/doc.rake +0 -16
  80. data/tasks/rubocop.rake +0 -6
  81. data/tasks/test.rake +0 -25
  82. data/test/base/temp_filename_factory_spec.rb +0 -66
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6d052e7d5720a345ca133515b628b273f7ab649f
4
- data.tar.gz: aeba9202e6a052fc7f43743a95bd5d624cbd3da8
3
+ metadata.gz: 8471fc905ae1f77b95c08da9253b6f4dcf20c85c
4
+ data.tar.gz: a944c679e283c221ec1c3f67270ceee7805f472a
5
5
  SHA512:
6
- metadata.gz: 873ae8427b92df4ca6e3cdffd6636ecb860ecfd092085f9a657725cce83e9cc839287b9860b76100c083cba1bd831eddc50f7e6bbe9bcc77d3290d5dee060607
7
- data.tar.gz: '094be294404797042fb05beb21497887b828aa6ad58b37d76b29e110d90ecf60685394aee6a5d03d3debc119f69f928faf955ee6e5ec05323737c78466bd17ef'
6
+ metadata.gz: 6e5e7d17725da1b15847d97fdead9b4f734c9b0865060124a84e8c8a5e0a832267ebe4575a781daa959657b36cf55b81b2e0b6a49f9e3afd8ba77d0438d4c1af
7
+ data.tar.gz: 648f66ee103dcf20b6b91f974528b4ce17cdc3f7c2c64de3df45e6377d306e3724f3874689e5706edf515022ec89caa8862901a1373d8b61c2a7bb71696492c0
@@ -0,0 +1,11 @@
1
+ appraise 'rouge-1' do
2
+ group :plugins do
3
+ gem 'rouge', '~> 1.0'
4
+ end
5
+ end
6
+
7
+ appraise 'rouge-2' do
8
+ group :plugins do
9
+ gem 'rouge', '~> 2.0'
10
+ end
11
+ end
data/Gemfile CHANGED
@@ -2,22 +2,22 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'json', '~> 2.0'
6
-
7
5
  group :devel do
8
6
  gem 'contracts', '~> 0.14'
9
7
  gem 'coveralls', require: false
10
- gem 'guard-rake'
11
8
  gem 'fuubar'
9
+ gem 'guard-rake'
10
+ gem 'json', '~> 2.0'
12
11
  gem 'minitest', '~> 5.0'
13
12
  gem 'mocha'
14
13
  gem 'pry'
15
14
  gem 'rake'
16
- gem 'rdoc'
17
- gem 'rspec'
15
+ gem 'rdoc', '~> 5.0'
18
16
  gem 'rspec-mocks'
17
+ gem 'rspec'
19
18
  gem 'rubocop'
20
19
  gem 'simplecov', require: false
20
+ gem 'timecop'
21
21
  gem 'vcr'
22
22
  gem 'webmock'
23
23
  gem 'yard'
@@ -44,7 +44,7 @@ group :plugins do
44
44
  gem 'nokogiri', '~> 1.6'
45
45
  gem 'pandoc-ruby'
46
46
  gem 'parallel'
47
- gem 'pygments.rb', platforms: [:ruby, :mswin]
47
+ gem 'pygments.rb', github: 'tmm1/pygments.rb', platforms: [:ruby, :mswin]
48
48
  gem 'rack'
49
49
  gem 'rainpress'
50
50
  gem 'rdiscount', '~> 2.2', platforms: [:ruby, :mswin]
@@ -1,7 +1,15 @@
1
+ GIT
2
+ remote: git://github.com/tmm1/pygments.rb.git
3
+ revision: 4ed8701d65f6db7d8778cc56291999a0a87c7eda
4
+ specs:
5
+ pygments.rb (0.6.3)
6
+ posix-spawn (~> 0.3.6)
7
+ yajl-ruby (~> 1.2)
8
+
1
9
  PATH
2
10
  remote: .
3
11
  specs:
4
- nanoc (4.3.7)
12
+ nanoc (4.3.8)
5
13
  cri (~> 2.3)
6
14
  hamster (~> 3.0)
7
15
  parallel (~> 1.9)
@@ -12,13 +20,18 @@ GEM
12
20
  specs:
13
21
  CFPropertyList (2.3.3)
14
22
  RedCloth (4.3.2)
15
- addressable (2.4.0)
23
+ addressable (2.5.0)
24
+ public_suffix (~> 2.0, >= 2.0.2)
16
25
  adsf (1.2.1)
17
26
  rack (>= 1.0.0)
27
+ appraisal (2.1.0)
28
+ bundler
29
+ rake
30
+ thor (>= 0.14.0)
18
31
  ast (2.3.0)
19
32
  bluecloth (2.2.0)
20
33
  builder (3.2.2)
21
- chunky_png (1.3.7)
34
+ chunky_png (1.3.8)
22
35
  coderay (1.1.1)
23
36
  coffee-script (2.4.1)
24
37
  coffee-script-source
@@ -129,7 +142,7 @@ GEM
129
142
  multi_json (~> 1.10)
130
143
  fog-local (0.3.1)
131
144
  fog-core (~> 1.27)
132
- fog-openstack (0.1.15)
145
+ fog-openstack (0.1.17)
133
146
  fog-core (>= 1.40)
134
147
  fog-json (>= 1.0)
135
148
  ipaddress (>= 0.8)
@@ -137,10 +150,10 @@ GEM
137
150
  fog-core (~> 1.27)
138
151
  fog-json (~> 1.0)
139
152
  fog-xml (~> 0.1)
140
- fog-profitbricks (2.0.1)
153
+ fog-profitbricks (3.0.0)
141
154
  fog-core (~> 1.42)
142
155
  fog-json (~> 1.0)
143
- fog-rackspace (0.1.1)
156
+ fog-rackspace (0.1.2)
144
157
  fog-core (>= 1.35)
145
158
  fog-json (>= 1.0)
146
159
  fog-xml (>= 0.1)
@@ -174,7 +187,7 @@ GEM
174
187
  fog-voxel (0.1.0)
175
188
  fog-core
176
189
  fog-xml
177
- fog-vsphere (1.5.0)
190
+ fog-vsphere (1.5.1)
178
191
  fog-core
179
192
  rbvmomi (~> 1.9)
180
193
  fog-xenserver (0.2.3)
@@ -206,7 +219,7 @@ GEM
206
219
  handlebars (0.8.0)
207
220
  handlebars-source (~> 4.0.5)
208
221
  therubyracer (~> 0.12.1)
209
- handlebars-source (4.0.5)
222
+ handlebars-source (4.0.6)
210
223
  hashdiff (0.3.0)
211
224
  inflecto (0.0.2)
212
225
  ipaddress (0.8.3)
@@ -244,15 +257,13 @@ GEM
244
257
  parallel (1.9.0)
245
258
  parser (2.3.1.4)
246
259
  ast (~> 2.2)
247
- posix-spawn (0.3.11)
260
+ posix-spawn (0.3.12)
248
261
  powerpack (0.1.1)
249
262
  pry (0.10.4)
250
263
  coderay (~> 1.1.0)
251
264
  method_source (~> 0.8.1)
252
265
  slop (~> 3.4)
253
- pygments.rb (0.6.3)
254
- posix-spawn (~> 0.3.6)
255
- yajl-ruby (~> 1.2.0)
266
+ public_suffix (2.0.4)
256
267
  rack (2.0.1)
257
268
  rainbow (2.1.0)
258
269
  rainpress (1.0)
@@ -266,10 +277,10 @@ GEM
266
277
  nokogiri (~> 1.5)
267
278
  trollop (~> 2.1)
268
279
  rdiscount (2.2.0.1)
269
- rdoc (4.2.1)
280
+ rdoc (5.0.0)
270
281
  redcarpet (3.3.4)
271
282
  ref (2.0.0)
272
- rouge (2.0.6)
283
+ rouge (2.0.7)
273
284
  rspec (3.5.0)
274
285
  rspec-core (~> 3.5.0)
275
286
  rspec-expectations (~> 3.5.0)
@@ -283,7 +294,7 @@ GEM
283
294
  diff-lcs (>= 1.2.0, < 2.0)
284
295
  rspec-support (~> 3.5.0)
285
296
  rspec-support (3.5.0)
286
- rubocop (0.44.1)
297
+ rubocop (0.45.0)
287
298
  parser (>= 2.3.1.1, < 3.0)
288
299
  powerpack (~> 0.1)
289
300
  rainbow (>= 1.99.1, < 3.0)
@@ -312,6 +323,7 @@ GEM
312
323
  ref
313
324
  thor (0.19.1)
314
325
  tilt (2.0.5)
326
+ timecop (0.8.1)
315
327
  tins (1.12.0)
316
328
  trollop (2.1.2)
317
329
  typogruby (1.0.18)
@@ -328,7 +340,7 @@ GEM
328
340
  crack (>= 0.3.2)
329
341
  hashdiff
330
342
  xml-simple (1.1.5)
331
- yajl-ruby (1.2.1)
343
+ yajl-ruby (1.3.0)
332
344
  yard (0.9.5)
333
345
  yuicompressor (1.3.3)
334
346
 
@@ -338,6 +350,7 @@ PLATFORMS
338
350
  DEPENDENCIES
339
351
  RedCloth
340
352
  adsf
353
+ appraisal (~> 2.1)
341
354
  bluecloth
342
355
  builder
343
356
  bundler (>= 1.7.10, < 2.0)
@@ -367,12 +380,12 @@ DEPENDENCIES
367
380
  pandoc-ruby
368
381
  parallel
369
382
  pry
370
- pygments.rb
383
+ pygments.rb!
371
384
  rack
372
385
  rainpress
373
386
  rake
374
387
  rdiscount (~> 2.2)
375
- rdoc
388
+ rdoc (~> 5.0)
376
389
  redcarpet
377
390
  rouge
378
391
  rspec
@@ -382,6 +395,7 @@ DEPENDENCIES
382
395
  sass
383
396
  simplecov
384
397
  slim
398
+ timecop
385
399
  typogruby
386
400
  uglifier
387
401
  vcr
data/NEWS.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Nanoc news
2
2
 
3
+ ## 4.3.8 (2016-11-18)
4
+
5
+ Enhancements:
6
+
7
+ * Improved support for Rouge 1.x and 2.x (#880) [Rémi Barraquand]
8
+ * Added `#include` to the `nanoc shell` command (#973)
9
+ * Improved speed of full and incremental compilations (#977, #985)
10
+
11
+ Fixes:
12
+
13
+ * Made routing rules and `#write` calls accept an identifier, and not just a string (#976)
14
+ * Removed GC speed-up hacks, which became counterproductive in Ruby 2.2 (#975)
15
+ * Fixed issue which caused items to be always recompiled if `rep`/`item_rep` or `self` are used in those items’ rules (#982)
16
+
3
17
  ## 4.3.7 (2016-10-29)
4
18
 
5
19
  Fixes:
data/Rakefile CHANGED
@@ -1,3 +1,32 @@
1
- Rake.add_rakelib 'tasks'
1
+ require 'rubocop/rake_task'
2
+ require 'rspec/core/rake_task'
3
+ require 'rake/testtask'
4
+ require 'coveralls/rake/task'
5
+
6
+ RuboCop::RakeTask.new(:rubocop) do |task|
7
+ task.options = %w(--display-cop-names --format simple)
8
+ task.patterns = ['bin/nanoc', 'lib/**/*.rb', 'spec/**/*.rb', 'test/**/*.rb']
9
+ end
10
+
11
+ Coveralls::RakeTask.new
12
+
13
+ SUBDIRS = %w(* base cli data_sources extra filters helpers).freeze
14
+
15
+ namespace :test do
16
+ SUBDIRS.each do |dir|
17
+ Rake::TestTask.new(dir == '*' ? 'all' : dir) do |t|
18
+ t.test_files = Dir["test/#{dir}/**/*_spec.rb"] + Dir["test/#{dir}/**/test_*.rb"]
19
+ t.libs = ['./lib', '.']
20
+ t.ruby_opts = ['-r./test/helper']
21
+ end
22
+ end
23
+ end
24
+
25
+ RSpec::Core::RakeTask.new(:spec) do |t|
26
+ t.verbose = false
27
+ end
28
+
29
+ desc 'Run all tests and specs'
30
+ task test: [:spec, :'test:all', :'coveralls:push']
2
31
 
3
32
  task default: [:test, :rubocop]
@@ -27,6 +27,7 @@ require 'ref'
27
27
  # Load general requirements
28
28
  require 'digest'
29
29
  require 'enumerator'
30
+ require 'fiber'
30
31
  require 'fileutils'
31
32
  require 'forwardable'
32
33
  require 'pathname'
@@ -41,6 +42,8 @@ require 'English'
41
42
  # Load Nanoc
42
43
  require 'nanoc/version'
43
44
  require 'nanoc/base'
45
+ require 'nanoc/checking'
46
+ require 'nanoc/deploying'
44
47
  require 'nanoc/extra'
45
48
  require 'nanoc/data_sources'
46
49
  require 'nanoc/filters'
@@ -72,6 +72,8 @@ module Nanoc::Int
72
72
  HashUpdateBehavior
73
73
  when Nanoc::Int::Item, Nanoc::Int::Layout
74
74
  DocumentUpdateBehavior
75
+ when Nanoc::Int::ItemRep
76
+ ItemRepUpdateBehavior
75
77
  when NilClass, TrueClass, FalseClass
76
78
  NoUpdateBehavior
77
79
  when Time
@@ -84,12 +86,29 @@ module Nanoc::Int
84
86
  StringUpdateBehavior
85
87
  when Nanoc::View
86
88
  UnwrapUpdateBehavior
89
+ when Nanoc::RuleDSL::RuleContext
90
+ RuleContextUpdateBehavior
87
91
  else
88
92
  RescueUpdateBehavior
89
93
  end
90
94
  end
91
95
  end
92
96
 
97
+ class RuleContextUpdateBehavior
98
+ def self.update(obj, digest)
99
+ digest.update('item=')
100
+ yield(obj.item)
101
+ digest.update(',rep=')
102
+ yield(obj.rep)
103
+ digest.update(',items=')
104
+ yield(obj.items)
105
+ digest.update(',layouts=')
106
+ yield(obj.layouts)
107
+ digest.update(',config=')
108
+ yield(obj.config)
109
+ end
110
+ end
111
+
93
112
  class UpdateBehavior
94
113
  def self.update(_obj, _digest)
95
114
  raise NotImpementedError
@@ -174,6 +193,15 @@ module Nanoc::Int
174
193
  end
175
194
  end
176
195
 
196
+ class ItemRepUpdateBehavior < UpdateBehavior
197
+ def self.update(obj, digest)
198
+ digest.update('item=')
199
+ yield(obj.item)
200
+ digest.update(',name=')
201
+ yield(obj.name)
202
+ end
203
+ end
204
+
177
205
  class PathnameUpdateBehavior < UpdateBehavior
178
206
  def self.update(obj, digest)
179
207
  filename = obj.to_s
@@ -183,7 +183,7 @@ module Nanoc::Int
183
183
 
184
184
  def prune
185
185
  if site.config[:prune][:auto_prune]
186
- Nanoc::Extra::Pruner.new(site, exclude: prune_config_exclude).run
186
+ Nanoc::Pruner.new(site.config, reps, exclude: prune_config_exclude).run
187
187
  end
188
188
  end
189
189
 
@@ -227,30 +227,44 @@ module Nanoc::Int
227
227
  #
228
228
  # @return [void]
229
229
  def compile_rep(rep)
230
- dependency_tracker = Nanoc::Int::DependencyTracker.new(@dependency_store)
230
+ @fibers ||= {}
231
+ @fibers[rep] ||=
232
+ Fiber.new do
233
+ begin
234
+ dependency_tracker = Nanoc::Int::DependencyTracker.new(@dependency_store)
235
+ dependency_tracker.enter(rep.item)
236
+
237
+ if can_reuse_content_for_rep?(rep)
238
+ Nanoc::Int::NotificationCenter.post(:cached_content_used, rep)
239
+ rep.snapshot_contents = compiled_content_cache[rep]
240
+ else
241
+ recalculate_content_for_rep(rep, dependency_tracker)
242
+ end
243
+
244
+ rep.compiled = true
245
+ compiled_content_cache[rep] = rep.snapshot_contents
246
+
247
+ @fibers.delete(rep)
248
+ ensure
249
+ dependency_tracker.exit(rep.item)
250
+ end
251
+ end
231
252
 
232
- Nanoc::Int::NotificationCenter.post(:compilation_started, rep)
233
- Nanoc::Int::NotificationCenter.post(:processing_started, rep)
234
- dependency_tracker.enter(rep.item)
253
+ fiber = @fibers[rep]
254
+ while fiber.alive?
255
+ Nanoc::Int::NotificationCenter.post(:processing_started, rep)
256
+ Nanoc::Int::NotificationCenter.post(:compilation_started, rep)
257
+ res = fiber.resume
235
258
 
236
- if can_reuse_content_for_rep?(rep)
237
- Nanoc::Int::NotificationCenter.post(:cached_content_used, rep)
238
- rep.snapshot_contents = compiled_content_cache[rep]
239
- else
240
- recalculate_content_for_rep(rep, dependency_tracker)
259
+ if res.is_a?(Nanoc::Int::Errors::UnmetDependency)
260
+ Nanoc::Int::NotificationCenter.post(:compilation_suspended, rep, res)
261
+ Nanoc::Int::NotificationCenter.post(:processing_ended, rep)
262
+ raise(res)
263
+ end
241
264
  end
242
265
 
243
- rep.compiled = true
244
- compiled_content_cache[rep] = rep.snapshot_contents
245
-
246
- Nanoc::Int::NotificationCenter.post(:processing_ended, rep)
247
266
  Nanoc::Int::NotificationCenter.post(:compilation_ended, rep)
248
- rescue => e
249
- rep.forget_progress
250
- Nanoc::Int::NotificationCenter.post(:compilation_failed, rep, e)
251
- raise e
252
- ensure
253
- dependency_tracker.exit(rep.item)
267
+ Nanoc::Int::NotificationCenter.post(:processing_ended, rep)
254
268
  end
255
269
 
256
270
  # @return [Boolean]
@@ -200,7 +200,7 @@ module Nanoc
200
200
  # Raise unmet dependency error if necessary
201
201
  items.each do |item|
202
202
  rep = orig_items.sample._context.reps[item].find { |r| !r.compiled? }
203
- raise Nanoc::Int::Errors::UnmetDependency.new(rep) if rep
203
+ Fiber.yield(Nanoc::Int::Errors::UnmetDependency.new(rep)) if rep
204
204
  end
205
205
  end
206
206
  end
@@ -40,5 +40,10 @@ module Nanoc::Int
40
40
  def get_binding
41
41
  binding
42
42
  end
43
+
44
+ def include(mod)
45
+ metaclass = class << self; self; end
46
+ metaclass.instance_eval { include(mod) }
47
+ end
43
48
  end
44
49
  end
@@ -89,7 +89,8 @@ module Nanoc::Int
89
89
  end
90
90
  is_usable_snapshot = @snapshot_contents[snapshot_name] && (compiled? || !is_still_moving)
91
91
  unless is_usable_snapshot
92
- raise Nanoc::Int::Errors::UnmetDependency.new(self)
92
+ Fiber.yield(Nanoc::Int::Errors::UnmetDependency.new(self))
93
+ return compiled_content(snapshot: snapshot)
93
94
  end
94
95
 
95
96
  @snapshot_contents[snapshot_name].string
@@ -133,18 +134,6 @@ module Nanoc::Int
133
134
  @paths[snapshot]
134
135
  end
135
136
 
136
- contract C::None => nil
137
- # Resets the compilation progress for this item representation. This is
138
- # necessary when an unmet dependency is detected during compilation.
139
- #
140
- # @api private
141
- #
142
- # @return [void]
143
- def forget_progress
144
- initialize_content
145
- nil
146
- end
147
-
148
137
  # Returns an object that can be used for uniquely identifying objects.
149
138
  #
150
139
  # @api private