nanoc 4.11.8 → 4.11.9

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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS.md +8 -0
  3. data/lib/nanoc.rb +4 -1
  4. data/lib/nanoc/base.rb +0 -1
  5. data/lib/nanoc/base/errors.rb +4 -49
  6. data/lib/nanoc/base/repos.rb +0 -15
  7. data/lib/nanoc/base/repos/site_loader.rb +1 -1
  8. data/lib/nanoc/base/services.rb +0 -2
  9. data/lib/nanoc/base/services/compiler.rb +1 -1
  10. data/lib/nanoc/base/services/compiler/phases/recalculate.rb +1 -1
  11. data/lib/nanoc/base/services/compiler/stages/build_reps.rb +1 -1
  12. data/lib/nanoc/base/services/compiler/stages/cleanup.rb +1 -1
  13. data/lib/nanoc/base/services/compiler/stages/load_stores.rb +1 -1
  14. data/lib/nanoc/base/services/compiler_loader.rb +6 -6
  15. data/lib/nanoc/base/services/outdatedness_checker.rb +10 -10
  16. data/lib/nanoc/base/services/outdatedness_rules/attributes_modified.rb +4 -4
  17. data/lib/nanoc/base/services/outdatedness_rules/code_snippets_modified.rb +2 -2
  18. data/lib/nanoc/base/services/outdatedness_rules/content_modified.rb +2 -2
  19. data/lib/nanoc/base/services/outdatedness_rules/item_collection_extended.rb +3 -3
  20. data/lib/nanoc/base/services/outdatedness_rules/layout_collection_extended.rb +3 -3
  21. data/lib/nanoc/base/services/outdatedness_rules/not_written.rb +2 -2
  22. data/lib/nanoc/base/services/outdatedness_rules/rules_modified.rb +3 -3
  23. data/lib/nanoc/base/services/outdatedness_rules/uses_always_outdated_filter.rb +2 -2
  24. data/lib/nanoc/base/services/pruner.rb +1 -1
  25. data/lib/nanoc/base/views/view_context_for_compilation.rb +1 -1
  26. data/lib/nanoc/base/views/view_context_for_pre_compilation.rb +1 -1
  27. data/lib/nanoc/base/views/view_context_for_shell.rb +2 -2
  28. data/lib/nanoc/checking/check.rb +17 -1
  29. data/lib/nanoc/cli/commands/shell.rb +1 -1
  30. data/lib/nanoc/cli/error_handler.rb +1 -1
  31. data/lib/nanoc/filters/handlebars.rb +2 -2
  32. data/lib/nanoc/filters/sass/importer.rb +3 -2
  33. data/lib/nanoc/rule_dsl/action_provider.rb +1 -1
  34. data/lib/nanoc/spec.rb +4 -4
  35. data/lib/nanoc/version.rb +1 -1
  36. metadata +5 -21
  37. data/lib/nanoc/base/entities.rb +0 -7
  38. data/lib/nanoc/base/entities/outdatedness_reasons.rb +0 -88
  39. data/lib/nanoc/base/entities/outdatedness_status.rb +0 -27
  40. data/lib/nanoc/base/repos/action_sequence_store.rb +0 -50
  41. data/lib/nanoc/base/repos/binary_compiled_content_cache.rb +0 -128
  42. data/lib/nanoc/base/repos/checksum_store.rb +0 -74
  43. data/lib/nanoc/base/repos/compiled_content_cache.rb +0 -68
  44. data/lib/nanoc/base/repos/compiled_content_store.rb +0 -77
  45. data/lib/nanoc/base/repos/dependency_store.rb +0 -204
  46. data/lib/nanoc/base/repos/item_rep_repo.rb +0 -37
  47. data/lib/nanoc/base/repos/outdatedness_store.rb +0 -55
  48. data/lib/nanoc/base/repos/prefixed_data_source.rb +0 -31
  49. data/lib/nanoc/base/repos/store.rb +0 -114
  50. data/lib/nanoc/base/repos/textual_compiled_content_cache.rb +0 -82
  51. data/lib/nanoc/base/services/dependency_tracker.rb +0 -63
  52. data/lib/nanoc/base/services/outdatedness_rule.rb +0 -34
@@ -3,19 +3,19 @@
3
3
  module Nanoc
4
4
  module Int
5
5
  module OutdatednessRules
6
- class RulesModified < Nanoc::Int::OutdatednessRule
6
+ class RulesModified < Nanoc::Core::OutdatednessRule
7
7
  affects_props :compiled_content, :path
8
8
 
9
9
  def apply(obj, outdatedness_checker)
10
10
  # Check rules of obj itself
11
11
  if rules_modified?(obj, outdatedness_checker)
12
- return Nanoc::Int::OutdatednessReasons::RulesModified
12
+ return Nanoc::Core::OutdatednessReasons::RulesModified
13
13
  end
14
14
 
15
15
  # Check rules of layouts used by obj
16
16
  layouts = layouts_touched_by(obj, outdatedness_checker)
17
17
  if layouts.any? { |layout| rules_modified?(layout, outdatedness_checker) }
18
- return Nanoc::Int::OutdatednessReasons::RulesModified
18
+ return Nanoc::Core::OutdatednessReasons::RulesModified
19
19
  end
20
20
 
21
21
  nil
@@ -3,13 +3,13 @@
3
3
  module Nanoc
4
4
  module Int
5
5
  module OutdatednessRules
6
- class UsesAlwaysOutdatedFilter < Nanoc::Int::OutdatednessRule
6
+ class UsesAlwaysOutdatedFilter < Nanoc::Core::OutdatednessRule
7
7
  affects_props :raw_content, :attributes, :path
8
8
 
9
9
  def apply(obj, outdatedness_checker)
10
10
  seq = outdatedness_checker.action_sequence_for(obj)
11
11
  if any_always_outdated?(seq)
12
- Nanoc::Int::OutdatednessReasons::UsesAlwaysOutdatedFilter
12
+ Nanoc::Core::OutdatednessReasons::UsesAlwaysOutdatedFilter
13
13
  end
14
14
  end
15
15
 
@@ -10,7 +10,7 @@ module Nanoc
10
10
 
11
11
  # @param [Nanoc::Core::Configuration] config
12
12
  #
13
- # @param [Nanoc::Int::ItemRepRepo] reps
13
+ # @param [Nanoc::Core::ItemRepRepo] reps
14
14
  #
15
15
  # @param [Boolean] dry_run true if the files to be deleted
16
16
  # should only be printed instead of actually deleted, false if the files
@@ -12,7 +12,7 @@ module Nanoc
12
12
  attr_reader :compiled_content_store
13
13
 
14
14
  contract C::KeywordArgs[
15
- reps: Nanoc::Int::ItemRepRepo,
15
+ reps: Nanoc::Core::ItemRepRepo,
16
16
  items: Nanoc::Core::IdentifiableCollection,
17
17
  dependency_tracker: C::Any,
18
18
  compilation_context: C::Any,
@@ -12,7 +12,7 @@ module Nanoc
12
12
  def initialize(items:)
13
13
  @items = items
14
14
 
15
- @dependency_tracker = Nanoc::Int::DependencyTracker::Null.new
15
+ @dependency_tracker = Nanoc::Core::DependencyTracker::Null.new
16
16
  end
17
17
  end
18
18
  end
@@ -11,13 +11,13 @@ module Nanoc
11
11
 
12
12
  contract C::KeywordArgs[
13
13
  items: Nanoc::Core::IdentifiableCollection,
14
- reps: Nanoc::Int::ItemRepRepo,
14
+ reps: Nanoc::Core::ItemRepRepo,
15
15
  ] => C::Any
16
16
  def initialize(items:, reps:)
17
17
  @items = items
18
18
  @reps = reps
19
19
 
20
- @dependency_tracker = Nanoc::Int::DependencyTracker::Null.new
20
+ @dependency_tracker = Nanoc::Core::DependencyTracker::Null.new
21
21
  end
22
22
  end
23
23
  end
@@ -12,6 +12,8 @@ module Nanoc::Checking
12
12
  class Check < Nanoc::Core::Context
13
13
  extend DDPlugin::Plugin
14
14
 
15
+ DDMemoize.activate(self)
16
+
15
17
  attr_reader :issues
16
18
 
17
19
  def self.define(ident, &block)
@@ -34,7 +36,7 @@ module Nanoc::Checking
34
36
  res = compiler.run_until_reps_built
35
37
  reps = res.fetch(:reps)
36
38
  compilation_context = compiler.compilation_context(reps: reps)
37
- view_context = compilation_context.create_view_context(Nanoc::Int::DependencyTracker::Null.new)
39
+ view_context = compilation_context.create_view_context(Nanoc::Core::DependencyTracker::Null.new)
38
40
 
39
41
  context = {
40
42
  items: Nanoc::PostCompileItemCollectionView.new(site.items, view_context),
@@ -66,6 +68,20 @@ module Nanoc::Checking
66
68
  @issues << Issue.new(desc, subject, self.class)
67
69
  end
68
70
 
71
+ # @private
72
+ def output_filenames
73
+ super.reject { |f| excluded_patterns.any? { |pat| pat.match?(f) } }
74
+ end
75
+
76
+ # @private
77
+ memoized def excluded_patterns
78
+ @config
79
+ .fetch(:checks, {})
80
+ .fetch(:all, {})
81
+ .fetch(:exclude_files, [])
82
+ .map { |pattern| Regexp.new(pattern) }
83
+ end
84
+
69
85
  # @private
70
86
  def output_html_filenames
71
87
  output_filenames.select { |f| File.extname(f) =~ /\A\.x?html?\z/ }
@@ -28,7 +28,7 @@ module Nanoc::CLI::Commands
28
28
  end
29
29
 
30
30
  def self.reps_for(site)
31
- Nanoc::Int::ItemRepRepo.new.tap do |reps|
31
+ Nanoc::Core::ItemRepRepo.new.tap do |reps|
32
32
  action_provider = Nanoc::Core::ActionProvider.named(site.config.action_provider).for(site)
33
33
  builder = Nanoc::Int::ItemRepBuilder.new(site, action_provider, reps)
34
34
  builder.run
@@ -192,7 +192,6 @@ module Nanoc::CLI
192
192
  'escape' => 'escape',
193
193
  'fog' => 'fog',
194
194
  'haml' => 'haml',
195
- 'handlebars' => 'hbs',
196
195
  'json' => 'json',
197
196
  'kramdown' => 'kramdown',
198
197
  'less' => 'less',
@@ -212,6 +211,7 @@ module Nanoc::CLI
212
211
  'rdiscount' => 'rdiscount',
213
212
  'redcarpet' => 'redcarpet',
214
213
  'redcloth' => 'RedCloth',
214
+ 'ruby-handlebars' => 'hbs',
215
215
  'rubypants' => 'rubypants',
216
216
  'sass' => 'sass',
217
217
  'slim' => 'slim',
@@ -5,7 +5,7 @@ module Nanoc::Filters
5
5
  class Handlebars < Nanoc::Filter
6
6
  identifier :handlebars
7
7
 
8
- requires 'handlebars'
8
+ requires 'ruby-handlebars'
9
9
 
10
10
  # Runs the content through
11
11
  # [Handlebars](http://handlebarsjs.com/) using
@@ -24,7 +24,7 @@ module Nanoc::Filters
24
24
  context[:layout] = assigns[:layout].attributes
25
25
  end
26
26
 
27
- handlebars = ::Handlebars::Context.new
27
+ handlebars = ::Handlebars::Handlebars.new
28
28
  template = handlebars.compile(content)
29
29
  template.call(context)
30
30
  end
@@ -67,8 +67,9 @@ module Nanoc::Filters::SassCommon
67
67
  @raw_filename_to_item_map[config.object_id] ||=
68
68
  {}.tap do |map|
69
69
  items.each do |item|
70
- if item.raw_filename
71
- path = Pathname.new(item.raw_filename).realpath.to_s
70
+ filename_without_registering_dependency = item._unwrap.content.filename
71
+ if filename_without_registering_dependency
72
+ path = Pathname.new(filename_without_registering_dependency).realpath.to_s
72
73
  map[path] = item
73
74
  end
74
75
  end
@@ -54,7 +54,7 @@ module Nanoc::RuleDSL
54
54
  end
55
55
 
56
56
  def postprocess(site, compiler)
57
- dependency_tracker = Nanoc::Int::DependencyTracker::Null.new
57
+ dependency_tracker = Nanoc::Core::DependencyTracker::Null.new
58
58
 
59
59
  res = compiler.run_until_reps_built
60
60
  reps = res.fetch(:reps)
@@ -42,7 +42,7 @@ module Nanoc
42
42
  end
43
43
 
44
44
  class HelperContext
45
- # @return [Nanoc::Int::DependencyTracker]
45
+ # @return [Nanoc::Core::DependencyTracker]
46
46
  attr_reader :dependency_tracker
47
47
 
48
48
  attr_reader :erbout
@@ -54,11 +54,11 @@ module Nanoc
54
54
  @erbout = +''
55
55
  @action_sequence = {}
56
56
  @config = Nanoc::Core::Configuration.new(dir: Dir.getwd).with_defaults
57
- @reps = Nanoc::Int::ItemRepRepo.new
57
+ @reps = Nanoc::Core::ItemRepRepo.new
58
58
  @items = Nanoc::Core::ItemCollection.new(@config)
59
59
  @layouts = Nanoc::Core::LayoutCollection.new(@config)
60
- @dependency_tracker = Nanoc::Int::DependencyTracker.new(Object.new)
61
- @compiled_content_store = Nanoc::Int::CompiledContentStore.new
60
+ @dependency_tracker = Nanoc::Core::DependencyTracker.new(Object.new)
61
+ @compiled_content_store = Nanoc::Core::CompiledContentStore.new
62
62
  @action_provider = new_action_provider
63
63
  end
64
64
 
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Nanoc
4
4
  # The current Nanoc version.
5
- VERSION = '4.11.8'
5
+ VERSION = '4.11.9'
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nanoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.11.8
4
+ version: 4.11.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Denis Defreyne
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-08 00:00:00.000000000 Z
11
+ date: 2019-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - '='
60
60
  - !ruby/object:Gem::Version
61
- version: 4.11.8
61
+ version: 4.11.9
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - '='
67
67
  - !ruby/object:Gem::Version
68
- version: 4.11.8
68
+ version: 4.11.9
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: parallel
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -168,26 +168,12 @@ files:
168
168
  - lib/nanoc/base.rb
169
169
  - lib/nanoc/base/assertions.rb
170
170
  - lib/nanoc/base/changes_stream.rb
171
- - lib/nanoc/base/entities.rb
172
- - lib/nanoc/base/entities/outdatedness_reasons.rb
173
- - lib/nanoc/base/entities/outdatedness_status.rb
174
171
  - lib/nanoc/base/error.rb
175
172
  - lib/nanoc/base/errors.rb
176
173
  - lib/nanoc/base/feature.rb
177
174
  - lib/nanoc/base/repos.rb
178
- - lib/nanoc/base/repos/action_sequence_store.rb
179
- - lib/nanoc/base/repos/binary_compiled_content_cache.rb
180
- - lib/nanoc/base/repos/checksum_store.rb
181
- - lib/nanoc/base/repos/compiled_content_cache.rb
182
- - lib/nanoc/base/repos/compiled_content_store.rb
183
175
  - lib/nanoc/base/repos/config_loader.rb
184
- - lib/nanoc/base/repos/dependency_store.rb
185
- - lib/nanoc/base/repos/item_rep_repo.rb
186
- - lib/nanoc/base/repos/outdatedness_store.rb
187
- - lib/nanoc/base/repos/prefixed_data_source.rb
188
176
  - lib/nanoc/base/repos/site_loader.rb
189
- - lib/nanoc/base/repos/store.rb
190
- - lib/nanoc/base/repos/textual_compiled_content_cache.rb
191
177
  - lib/nanoc/base/services.rb
192
178
  - lib/nanoc/base/services/compilation_context.rb
193
179
  - lib/nanoc/base/services/compiler.rb
@@ -214,7 +200,6 @@ files:
214
200
  - lib/nanoc/base/services/compiler/stages/store_post_compilation_state.rb
215
201
  - lib/nanoc/base/services/compiler/stages/store_pre_compilation_state.rb
216
202
  - lib/nanoc/base/services/compiler_loader.rb
217
- - lib/nanoc/base/services/dependency_tracker.rb
218
203
  - lib/nanoc/base/services/executor.rb
219
204
  - lib/nanoc/base/services/filter.rb
220
205
  - lib/nanoc/base/services/item_rep_builder.rb
@@ -222,7 +207,6 @@ files:
222
207
  - lib/nanoc/base/services/item_rep_selector.rb
223
208
  - lib/nanoc/base/services/item_rep_writer.rb
224
209
  - lib/nanoc/base/services/outdatedness_checker.rb
225
- - lib/nanoc/base/services/outdatedness_rule.rb
226
210
  - lib/nanoc/base/services/outdatedness_rules.rb
227
211
  - lib/nanoc/base/services/outdatedness_rules/attributes_modified.rb
228
212
  - lib/nanoc/base/services/outdatedness_rules/code_snippets_modified.rb
@@ -401,7 +385,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
401
385
  - !ruby/object:Gem::Version
402
386
  version: '0'
403
387
  requirements: []
404
- rubygems_version: 3.0.4
388
+ rubygems_version: 3.0.6
405
389
  signing_key:
406
390
  specification_version: 4
407
391
  summary: A static-site generator with a focus on flexibility.
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Re-exported from Nanoc::Core
4
- Nanoc::Identifier = Nanoc::Core::Identifier
5
-
6
- require_relative 'entities/outdatedness_status'
7
- require_relative 'entities/outdatedness_reasons'
@@ -1,88 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Nanoc
4
- module Int
5
- # Module that contains all outdatedness reasons.
6
- #
7
- # @api private
8
- module OutdatednessReasons
9
- # A generic outdatedness reason. An outdatedness reason is basically a
10
- # descriptive message that explains why a given object is outdated.
11
- class Generic
12
- # @return [String] A descriptive message for this outdatedness reason
13
- attr_reader :message
14
-
15
- # @return [Nanoc::Core::DependencyProps]
16
- attr_reader :props
17
-
18
- # @param [String] message The descriptive message for this outdatedness
19
- # reason
20
- def initialize(message, props = Nanoc::Core::DependencyProps.new)
21
- @message = message
22
- @props = props
23
- end
24
- end
25
-
26
- CodeSnippetsModified = Generic.new(
27
- 'The code snippets have been modified since the last time the site was compiled.',
28
- Nanoc::Core::DependencyProps.new(raw_content: true, attributes: true, compiled_content: true, path: true),
29
- )
30
-
31
- DependenciesOutdated = Generic.new(
32
- 'This item uses content or attributes that have changed since the last time the site was compiled.',
33
- )
34
-
35
- NotWritten = Generic.new(
36
- 'This item representation has not yet been written to the output directory (but it does have a path).',
37
- Nanoc::Core::DependencyProps.new(raw_content: true, attributes: true, compiled_content: true, path: true),
38
- )
39
-
40
- RulesModified = Generic.new(
41
- 'The rules file has been modified since the last time the site was compiled.',
42
- Nanoc::Core::DependencyProps.new(compiled_content: true, path: true),
43
- )
44
-
45
- ContentModified = Generic.new(
46
- 'The content of this item has been modified since the last time the site was compiled.',
47
- Nanoc::Core::DependencyProps.new(raw_content: true, compiled_content: true),
48
- )
49
-
50
- class DocumentCollectionExtended < Generic
51
- attr_reader :objects
52
-
53
- def initialize(objects)
54
- super(
55
- 'New items/layouts have been added to the site.',
56
- Nanoc::Core::DependencyProps.new(raw_content: true),
57
- )
58
-
59
- @objects = objects
60
- end
61
- end
62
-
63
- class ItemCollectionExtended < DocumentCollectionExtended
64
- end
65
-
66
- class LayoutCollectionExtended < DocumentCollectionExtended
67
- end
68
-
69
- class AttributesModified < Generic
70
- attr_reader :attributes
71
-
72
- def initialize(attributes)
73
- super(
74
- 'The attributes of this item have been modified since the last time the site was compiled.',
75
- Nanoc::Core::DependencyProps.new(attributes: true, compiled_content: true),
76
- )
77
-
78
- @attributes = attributes
79
- end
80
- end
81
-
82
- UsesAlwaysOutdatedFilter = Generic.new(
83
- 'This item rep uses one or more filters that cannot track dependencies, and will thus always be considered as outdated.',
84
- Nanoc::Core::DependencyProps.new(raw_content: true, attributes: true, compiled_content: true),
85
- )
86
- end
87
- end
88
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Nanoc
4
- module Int
5
- # @api private
6
- class OutdatednessStatus
7
- attr_reader :reasons
8
- attr_reader :props
9
-
10
- def initialize(reasons: [], props: Nanoc::Core::DependencyProps.new)
11
- @reasons = reasons
12
- @props = props
13
- end
14
-
15
- def useful_to_apply?(rule)
16
- (rule.affected_props - @props.active).any?
17
- end
18
-
19
- def update(reason)
20
- self.class.new(
21
- reasons: @reasons + [reason],
22
- props: @props.merge(reason.props),
23
- )
24
- end
25
- end
26
- end
27
- end
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Nanoc
4
- module Int
5
- # Stores action sequences for objects that can be run through a rule (item
6
- # representations and layouts).
7
- #
8
- # @api private
9
- class ActionSequenceStore < ::Nanoc::Int::Store
10
- include Nanoc::Core::ContractsSupport
11
-
12
- contract C::KeywordArgs[config: Nanoc::Core::Configuration] => C::Any
13
- def initialize(config:)
14
- super(Nanoc::Int::Store.tmp_path_for(config: config, store_name: 'rule_memory'), 1)
15
-
16
- @action_sequences = {}
17
- end
18
-
19
- # @param [Nanoc::Core::ItemRep, Nanoc::Core::Layout] obj The item representation or
20
- # the layout to get the action sequence for
21
- #
22
- # @return [Array] The action sequence for the given object
23
- def [](obj)
24
- @action_sequences[obj.reference]
25
- end
26
-
27
- # @param [Nanoc::Core::ItemRep, Nanoc::Core::Layout] obj The item representation or
28
- # the layout to set the action sequence for
29
- #
30
- # @param [Array] action_sequence The new action sequence to be stored
31
- #
32
- # @return [void]
33
- def []=(obj, action_sequence)
34
- @action_sequences[obj.reference] = action_sequence
35
- end
36
-
37
- protected
38
-
39
- # @see Nanoc::Int::Store#data
40
- def data
41
- @action_sequences
42
- end
43
-
44
- # @see Nanoc::Int::Store#data=
45
- def data=(new_data)
46
- @action_sequences = new_data
47
- end
48
- end
49
- end
50
- end