nanoc 4.11.8 → 4.11.9

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