nanoc 4.11.11 → 4.11.12

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 481798e39546d0e6b7e7a2a98832958b1666d8ee34b68d3dea32cd59fd99cfe0
4
- data.tar.gz: 01b653399a15957f5562bdb10757e75efa2f8368d1d37f336836804827de02d7
3
+ metadata.gz: 022d4d52cb5ae57bd458ef8d4272d255a4845cec76627311020dbd4680143d03
4
+ data.tar.gz: 21f357e65efed5e243627a2c9aaab4e688c0cd8ec2c7d1d0d789317435f853d8
5
5
  SHA512:
6
- metadata.gz: f64c2863d201a92188b92df86808d629fe498365a900d02e8658978159fb027167a009e69924b6381ddfda11653b9511de463dde6c8766e7df3c96b57591fbaa
7
- data.tar.gz: 61f913a10ccd33ce05431194be1edfdea46c5513789399cf9e3594118477ffac5b94a22c7d2ba840744af2bf1722362ce97483aec34e9cf5bbf64e2f17d289f5
6
+ metadata.gz: d8d8d5e86ff63450ce7e4d9a80cb7c850468ebc96aebe5e0a0245dc4464a6b65a4757929ef587119942e7961e8e397e250e54f32b41b1a7afc0989857a19c48e
7
+ data.tar.gz: 36309e62ab8c585dab399ac8f5c09fe56c8ce10c19c3df86a317f07a0fd3a0d4f89eca2f0d943f4a1c918978c65f74f8ffff7d61acb8f958b33daf7c7789495b
data/NEWS.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Nanoc news
2
2
 
3
+ ## 4.11.12 (2019-09-21)
4
+
5
+ Fixes:
6
+
7
+ * Fixed an issue with the output diff, where some hunks would not appear (#1457)
8
+
3
9
  ## 4.11.11 (2019-09-07)
4
10
 
5
11
  Fixes:
@@ -150,12 +150,6 @@ module Nanoc
150
150
  end
151
151
  end
152
152
 
153
- class UndefinedFilterForLayout < Generic
154
- def initialize(layout)
155
- super("There is no filter defined for the layout #{layout.identifier}")
156
- end
157
- end
158
-
159
153
  class AmbiguousMetadataAssociation < Generic
160
154
  def initialize(content_filenames, meta_filename)
161
155
  super("There are multiple content files (#{content_filenames.sort.join(', ')}) that could match the file containing metadata (#{meta_filename}).")
@@ -1,12 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'services/compilation_context'
4
3
  require_relative 'services/compiler'
5
4
  require_relative 'services/compiler_loader'
6
5
  require_relative 'services/executor'
7
6
  require_relative 'services/filter'
8
7
  require_relative 'services/item_rep_builder'
9
- require_relative 'services/item_rep_router'
10
8
  require_relative 'services/item_rep_selector'
11
9
  require_relative 'services/item_rep_writer'
12
10
  require_relative 'services/pruner'
@@ -93,7 +93,7 @@ module Nanoc
93
93
  end
94
94
 
95
95
  def compilation_context(reps:)
96
- Nanoc::Int::CompilationContext.new(
96
+ Nanoc::Core::CompilationContext.new(
97
97
  action_provider: @action_provider,
98
98
  reps: reps,
99
99
  site: @site,
@@ -10,7 +10,7 @@ module Nanoc
10
10
  end
11
11
 
12
12
  def filter(filter_name, filter_args = {})
13
- filter = filter_for_filtering(@rep, filter_name)
13
+ filter = filter_for_filtering(filter_name)
14
14
 
15
15
  begin
16
16
  Nanoc::Core::NotificationCenter.post(:filtering_started, @rep, filter_name)
@@ -36,11 +36,13 @@ module Nanoc
36
36
 
37
37
  def layout(layout_identifier, extra_filter_args = nil)
38
38
  layout = find_layout(layout_identifier)
39
- filter_name, filter_args = *@compilation_context.filter_name_and_args_for_layout(layout)
39
+ filter_name_and_args = @compilation_context.filter_name_and_args_for_layout(layout)
40
+ filter_name = filter_name_and_args.name
40
41
  if filter_name.nil?
41
42
  raise ::Nanoc::Core::Error, "Cannot find rule for layout matching #{layout_identifier}"
42
43
  end
43
44
 
45
+ filter_args = filter_name_and_args.args
44
46
  filter_args = filter_args.merge(extra_filter_args || {})
45
47
  filter_args.freeze
46
48
 
@@ -50,9 +52,8 @@ module Nanoc
50
52
 
51
53
  # Create filter
52
54
  klass = Nanoc::Filter.named!(filter_name)
53
- view_context = @compilation_context.create_view_context(@dependency_tracker)
54
55
  layout_view = Nanoc::LayoutView.new(layout, view_context)
55
- filter = klass.new(assigns_for(@rep).merge(layout: layout_view))
56
+ filter = klass.new(assigns.merge(layout: layout_view))
56
57
 
57
58
  # Visit
58
59
  @dependency_tracker.bounce(layout, raw_content: true)
@@ -79,8 +80,8 @@ module Nanoc
79
80
  Nanoc::Core::NotificationCenter.post(:snapshot_created, @rep, snapshot_name)
80
81
  end
81
82
 
82
- def assigns_for(rep)
83
- @compilation_context.assigns_for(rep, @dependency_tracker)
83
+ def assigns
84
+ view_context.assigns_for(@rep, site: @compilation_context.site)
84
85
  end
85
86
 
86
87
  def layouts
@@ -89,7 +90,7 @@ module Nanoc
89
90
 
90
91
  def find_layout(arg)
91
92
  req_id = arg.__nanoc_cleaned_identifier
92
- layout = layouts.find { |l| l.identifier == req_id }
93
+ layout = layouts[req_id]
93
94
  return layout if layout
94
95
 
95
96
  if use_globs?
@@ -101,22 +102,33 @@ module Nanoc
101
102
  raise Nanoc::Int::Errors::UnknownLayout.new(arg)
102
103
  end
103
104
 
104
- def filter_for_filtering(rep, filter_name)
105
+ def filter_for_filtering(filter_name)
105
106
  klass = Nanoc::Filter.named!(filter_name)
106
107
 
107
108
  last = @compilation_context.compiled_content_store.get_current(@rep)
108
109
  if klass.from_binary? && !last.binary?
109
- raise Nanoc::Int::Errors::CannotUseBinaryFilter.new(rep, klass)
110
+ raise Nanoc::Int::Errors::CannotUseBinaryFilter.new(@rep, klass)
110
111
  elsif !klass.from_binary? && last.binary?
111
- raise Nanoc::Int::Errors::CannotUseTextualFilter.new(rep, klass)
112
+ raise Nanoc::Int::Errors::CannotUseTextualFilter.new(@rep, klass)
112
113
  end
113
114
 
114
- klass.new(assigns_for(rep))
115
+ klass.new(assigns)
115
116
  end
116
117
 
117
118
  def use_globs?
118
119
  @compilation_context.site.config[:string_pattern_type] == 'glob'
119
120
  end
121
+
122
+ def view_context
123
+ @_view_context ||=
124
+ Nanoc::Core::ViewContextForCompilation.new(
125
+ reps: @compilation_context.reps,
126
+ items: @compilation_context.site.items,
127
+ dependency_tracker: @dependency_tracker,
128
+ compilation_context: @compilation_context,
129
+ compiled_content_store: @compilation_context.compiled_content_store,
130
+ )
131
+ end
120
132
  end
121
133
  end
122
134
  end
@@ -22,7 +22,7 @@ module Nanoc
22
22
  end
23
23
  end
24
24
 
25
- action_sequences = Nanoc::Int::ItemRepRouter.new(@reps, @action_provider, @site).run
25
+ action_sequences = Nanoc::Core::ItemRepRouter.new(@reps, @action_provider, @site).run
26
26
 
27
27
  @reps.each do |rep|
28
28
  rep.snapshot_defs = self.class.snapshot_defs_for(action_sequences[rep])
@@ -3,10 +3,6 @@
3
3
  require_relative 'views/mixins/document_view_mixin'
4
4
  require_relative 'views/mixins/mutable_document_view_mixin'
5
5
 
6
- require_relative 'views/view_context_for_compilation'
7
- require_relative 'views/view_context_for_pre_compilation'
8
- require_relative 'views/view_context_for_shell'
9
-
10
6
  require_relative 'views/view'
11
7
 
12
8
  require_relative 'views/basic_item_rep_view'
@@ -2,7 +2,15 @@
2
2
 
3
3
  module Nanoc
4
4
  class View
5
+ include Nanoc::Core::ContractsSupport
6
+
5
7
  # @api private
8
+ # TODO: disallow nil
9
+ contract C::Maybe[C::Or[
10
+ Nanoc::Core::ViewContextForCompilation,
11
+ Nanoc::Core::ViewContextForPreCompilation,
12
+ Nanoc::Core::ViewContextForShell
13
+ ]] => C::Any
6
14
  def initialize(context)
7
15
  @context = context
8
16
  end
@@ -35,8 +35,11 @@ module Nanoc::Checking
35
35
  compiler = Nanoc::Int::Compiler.new_for(site)
36
36
  res = compiler.run_until_reps_built
37
37
  reps = res.fetch(:reps)
38
- compilation_context = compiler.compilation_context(reps: reps)
39
- view_context = compilation_context.create_view_context(Nanoc::Core::DependencyTracker::Null.new)
38
+ view_context =
39
+ Nanoc::Core::ViewContextForShell.new(
40
+ items: site.items,
41
+ reps: reps,
42
+ )
40
43
 
41
44
  context = {
42
45
  items: Nanoc::PostCompileItemCollectionView.new(site.items, view_context),
@@ -21,29 +21,27 @@ module Nanoc::CLI::Commands::CompileListeners
21
21
 
22
22
  diffs = Diff::LCS.diff(lines_a, lines_b)
23
23
 
24
- # Find hunks
25
- hunks = []
24
+ output = +''
25
+ output << "--- #{@path}\n"
26
+ output << "+++ #{@path}\n"
27
+
28
+ prev_hunk = hunk = nil
26
29
  file_length_difference = 0
27
30
  diffs.each do |piece|
28
- hunk = Diff::LCS::Hunk.new(lines_a, lines_b, piece, 3, file_length_difference)
29
- file_length_difference = hunk.file_length_difference
30
- hunks << hunk
31
- end
31
+ begin
32
+ hunk = Diff::LCS::Hunk.new(lines_a, lines_b, piece, 3, file_length_difference)
33
+ file_length_difference = hunk.file_length_difference
32
34
 
33
- # Merge hunks
34
- merged_hunks = []
35
- hunks.each do |hunk|
36
- merged = merged_hunks.any? && hunk.merge(merged_hunks.last)
37
- merged_hunks << hunk unless merged
38
- end
35
+ next unless prev_hunk
36
+ next if hunk.merge(prev_hunk)
39
37
 
40
- # Output hunks
41
- output = +''
42
- output << "--- #{@path}\n"
43
- output << "+++ #{@path}\n"
44
- merged_hunks.each do |hunk|
45
- output << hunk.diff(:unified) << "\n"
38
+ output << prev_hunk.diff(:unified) << "\n"
39
+ ensure
40
+ prev_hunk = hunk
41
+ end
46
42
  end
43
+ last = prev_hunk.diff(:unified)
44
+ output << last << "\n"
47
45
 
48
46
  output
49
47
  end
@@ -36,7 +36,7 @@ module Nanoc::CLI::Commands
36
36
  end
37
37
 
38
38
  def self.view_context_for(site)
39
- Nanoc::ViewContextForShell.new(
39
+ Nanoc::Core::ViewContextForShell.new(
40
40
  items: site.items,
41
41
  reps: reps_for(site),
42
42
  )
@@ -40,7 +40,9 @@ module Nanoc::Helpers
40
40
  }.merge(other_assigns)
41
41
 
42
42
  # Get filter name
43
- filter_name, filter_args = *@config._context.compilation_context.filter_name_and_args_for_layout(layout)
43
+ filter_name_and_args = @config._context.compilation_context.filter_name_and_args_for_layout(layout)
44
+ filter_name = filter_name_and_args.name
45
+ filter_args = filter_name_and_args.args
44
46
  raise Nanoc::Int::Errors::CannotDetermineFilter.new(layout.identifier) if filter_name.nil?
45
47
 
46
48
  # Get filter class
@@ -60,7 +60,7 @@ module Nanoc::RuleDSL
60
60
  reps = res.fetch(:reps)
61
61
 
62
62
  view_context =
63
- Nanoc::ViewContextForCompilation.new(
63
+ Nanoc::Core::ViewContextForCompilation.new(
64
64
  reps: reps,
65
65
  items: site.items,
66
66
  dependency_tracker: dependency_tracker,
@@ -77,7 +77,7 @@ module Nanoc::RuleDSL
77
77
  # @api private
78
78
  def new_preprocessor_context(site)
79
79
  view_context =
80
- Nanoc::ViewContextForPreCompilation.new(items: site.items)
80
+ Nanoc::Core::ViewContextForPreCompilation.new(items: site.items)
81
81
 
82
82
  Nanoc::Core::Context.new(
83
83
  config: Nanoc::MutableConfigView.new(site.config, view_context),
@@ -54,7 +54,7 @@ module Nanoc::RuleDSL
54
54
 
55
55
  def new_action_sequence_for_rep(rep)
56
56
  view_context =
57
- Nanoc::ViewContextForPreCompilation.new(items: @site.items)
57
+ Nanoc::Core::ViewContextForPreCompilation.new(items: @site.items)
58
58
 
59
59
  recorder = Nanoc::RuleDSL::ActionRecorder.new(rep)
60
60
  rule = @rules_collection.compilation_rule_for(rep)
@@ -132,7 +132,7 @@ module Nanoc::RuleDSL
132
132
  return nil if routing_rule.nil?
133
133
 
134
134
  view_context =
135
- Nanoc::ViewContextForPreCompilation.new(items: @site.items)
135
+ Nanoc::Core::ViewContextForPreCompilation.new(items: @site.items)
136
136
 
137
137
  basic_path =
138
138
  routing_rule.apply_to(
@@ -7,7 +7,7 @@ module Nanoc::RuleDSL
7
7
  contract Nanoc::Core::ItemRep, C::KeywordArgs[
8
8
  site: Nanoc::Core::Site,
9
9
  recorder: Nanoc::RuleDSL::ActionRecorder,
10
- view_context: Nanoc::ViewContextForPreCompilation,
10
+ view_context: Nanoc::Core::ViewContextForPreCompilation,
11
11
  ] => C::Any
12
12
  def apply_to(rep, site:, recorder:, view_context:)
13
13
  context = Nanoc::RuleDSL::CompilationRuleContext.new(
@@ -8,7 +8,7 @@ module Nanoc::RuleDSL
8
8
  rep: Nanoc::Core::ItemRep,
9
9
  site: Nanoc::Core::Site,
10
10
  recorder: Nanoc::RuleDSL::ActionRecorder,
11
- view_context: Nanoc::ViewContextForPreCompilation,
11
+ view_context: Nanoc::Core::ViewContextForPreCompilation,
12
12
  ] => C::Any
13
13
  def initialize(rep:, site:, recorder:, view_context:)
14
14
  @_recorder = recorder
@@ -16,7 +16,7 @@ module Nanoc::RuleDSL
16
16
 
17
17
  contract Nanoc::Core::ItemRep, C::KeywordArgs[
18
18
  site: Nanoc::Core::Site,
19
- view_context: Nanoc::ViewContextForPreCompilation,
19
+ view_context: Nanoc::Core::ViewContextForPreCompilation,
20
20
  ] => C::Any
21
21
  def apply_to(rep, site:, view_context:)
22
22
  context = Nanoc::RuleDSL::RoutingRuleContext.new(
@@ -7,7 +7,7 @@ module Nanoc::RuleDSL
7
7
  contract C::KeywordArgs[
8
8
  rep: Nanoc::Core::ItemRep,
9
9
  site: Nanoc::Core::Site,
10
- view_context: Nanoc::ViewContextForPreCompilation,
10
+ view_context: Nanoc::Core::ViewContextForPreCompilation,
11
11
  ] => C::Any
12
12
  def initialize(rep:, site:, view_context:)
13
13
  super({
@@ -161,7 +161,7 @@ module Nanoc
161
161
 
162
162
  def view_context
163
163
  compilation_context =
164
- Nanoc::Int::CompilationContext.new(
164
+ Nanoc::Core::CompilationContext.new(
165
165
  action_provider: @action_provider,
166
166
  reps: @reps,
167
167
  site: site,
@@ -169,7 +169,7 @@ module Nanoc
169
169
  compiled_content_store: @compiled_content_store,
170
170
  )
171
171
 
172
- Nanoc::ViewContextForCompilation.new(
172
+ Nanoc::Core::ViewContextForCompilation.new(
173
173
  reps: @reps,
174
174
  items: @items,
175
175
  dependency_tracker: @dependency_tracker,
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Nanoc
4
4
  # The current Nanoc version.
5
- VERSION = '4.11.11'
5
+ VERSION = '4.11.12'
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.11
4
+ version: 4.11.12
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-09-07 00:00:00.000000000 Z
11
+ date: 2019-09-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: 4.11.11
75
+ version: 4.11.12
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: 4.11.11
82
+ version: 4.11.12
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: parallel
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -174,7 +174,6 @@ files:
174
174
  - lib/nanoc/base/repos/config_loader.rb
175
175
  - lib/nanoc/base/repos/site_loader.rb
176
176
  - lib/nanoc/base/services.rb
177
- - lib/nanoc/base/services/compilation_context.rb
178
177
  - lib/nanoc/base/services/compiler.rb
179
178
  - lib/nanoc/base/services/compiler/phases.rb
180
179
  - lib/nanoc/base/services/compiler/phases/abstract.rb
@@ -201,7 +200,6 @@ files:
201
200
  - lib/nanoc/base/services/executor.rb
202
201
  - lib/nanoc/base/services/filter.rb
203
202
  - lib/nanoc/base/services/item_rep_builder.rb
204
- - lib/nanoc/base/services/item_rep_router.rb
205
203
  - lib/nanoc/base/services/item_rep_selector.rb
206
204
  - lib/nanoc/base/services/item_rep_writer.rb
207
205
  - lib/nanoc/base/services/outdatedness_checker.rb
@@ -241,9 +239,6 @@ files:
241
239
  - lib/nanoc/base/views/post_compile_item_rep_view.rb
242
240
  - lib/nanoc/base/views/post_compile_item_view.rb
243
241
  - lib/nanoc/base/views/view.rb
244
- - lib/nanoc/base/views/view_context_for_compilation.rb
245
- - lib/nanoc/base/views/view_context_for_pre_compilation.rb
246
- - lib/nanoc/base/views/view_context_for_shell.rb
247
242
  - lib/nanoc/checking.rb
248
243
  - lib/nanoc/checking/check.rb
249
244
  - lib/nanoc/checking/checks.rb
@@ -1,79 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Nanoc
4
- module Int
5
- class CompilationContext
6
- include Nanoc::Core::ContractsSupport
7
-
8
- attr_reader :site
9
- attr_reader :compiled_content_cache
10
- attr_reader :compiled_content_store
11
-
12
- C_COMPILED_CONTENT_CACHE =
13
- C::Or[
14
- Nanoc::Core::CompiledContentCache,
15
- Nanoc::Core::TextualCompiledContentCache,
16
- Nanoc::Core::BinaryCompiledContentCache,
17
- ]
18
-
19
- contract C::KeywordArgs[
20
- action_provider: Nanoc::Core::ActionProvider,
21
- reps: Nanoc::Core::ItemRepRepo,
22
- site: Nanoc::Core::Site,
23
- compiled_content_cache: C_COMPILED_CONTENT_CACHE,
24
- compiled_content_store: Nanoc::Core::CompiledContentStore,
25
- ] => C::Any
26
- def initialize(action_provider:, reps:, site:, compiled_content_cache:, compiled_content_store:)
27
- @action_provider = action_provider
28
- @reps = reps
29
- @site = site
30
- @compiled_content_cache = compiled_content_cache
31
- @compiled_content_store = compiled_content_store
32
- end
33
-
34
- # FIXME: Expand contract
35
- contract Nanoc::Core::Layout => C::Any
36
- def filter_name_and_args_for_layout(layout)
37
- seq = @action_provider.action_sequence_for(layout)
38
- if seq.nil? || seq.size != 1 || !seq[0].is_a?(Nanoc::Core::ProcessingActions::Filter)
39
- raise Nanoc::Int::Errors::UndefinedFilterForLayout.new(layout)
40
- end
41
-
42
- [seq[0].filter_name, seq[0].params]
43
- end
44
-
45
- contract Nanoc::Core::DependencyTracker => C::Named['Nanoc::ViewContextForCompilation']
46
- def create_view_context(dependency_tracker)
47
- Nanoc::ViewContextForCompilation.new(
48
- reps: @reps,
49
- items: @site.items,
50
- dependency_tracker: dependency_tracker,
51
- compilation_context: self,
52
- compiled_content_store: @compiled_content_store,
53
- )
54
- end
55
-
56
- contract Nanoc::Core::ItemRep, Nanoc::Core::DependencyTracker => Hash
57
- def assigns_for(rep, dependency_tracker)
58
- last_content = @compiled_content_store.get_current(rep)
59
- content_or_filename_assigns =
60
- if last_content.binary?
61
- { filename: last_content.filename }
62
- else
63
- { content: last_content.string }
64
- end
65
-
66
- view_context = create_view_context(dependency_tracker)
67
-
68
- content_or_filename_assigns.merge(
69
- item: Nanoc::CompilationItemView.new(rep.item, view_context),
70
- rep: Nanoc::CompilationItemRepView.new(rep, view_context),
71
- item_rep: Nanoc::CompilationItemRepView.new(rep, view_context),
72
- items: Nanoc::ItemCollectionWithRepsView.new(@site.items, view_context),
73
- layouts: Nanoc::LayoutCollectionView.new(@site.layouts, view_context),
74
- config: Nanoc::ConfigView.new(@site.config, view_context),
75
- )
76
- end
77
- end
78
- end
79
- end
@@ -1,99 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Nanoc
4
- module Int
5
- # Assigns paths to reps.
6
- #
7
- # @api private
8
- class ItemRepRouter
9
- include Nanoc::Core::ContractsSupport
10
-
11
- class IdenticalRoutesError < ::Nanoc::Error
12
- def initialize(output_path, rep_a, rep_b)
13
- super("The item representations #{rep_a} and #{rep_b} are both routed to #{output_path}.")
14
- end
15
- end
16
-
17
- class RouteWithoutSlashError < ::Nanoc::Error
18
- def initialize(output_path, rep)
19
- super("The item representation #{rep} is routed to #{output_path}, which does not start with a slash, as required.")
20
- end
21
- end
22
-
23
- contract Nanoc::Core::ItemRepRepo, Nanoc::Core::ActionProvider, Nanoc::Core::Site => C::Any
24
- def initialize(reps, action_provider, site)
25
- @reps = reps
26
- @action_provider = action_provider
27
- @site = site
28
- end
29
-
30
- def run
31
- action_sequences = {}
32
- assigned_paths = {}
33
- @reps.each do |rep|
34
- # Sigh. We route reps twice, because the first time, the paths might not have converged
35
- # yet. This isn’t ideal, but it’s the only way to work around the divergence issues that
36
- # I can think of. For details, see
37
- # https://github.com/nanoc/nanoc/pull/1085#issuecomment-280628426.
38
-
39
- @action_provider.action_sequence_for(rep).paths.each do |(snapshot_names, paths)|
40
- route_rep(rep, paths, snapshot_names, {})
41
- end
42
-
43
- seq = @action_provider.action_sequence_for(rep)
44
- action_sequences[rep] = seq
45
- seq.paths.each do |(snapshot_names, paths)|
46
- route_rep(rep, paths, snapshot_names, assigned_paths)
47
- end
48
-
49
- # TODO: verify that paths converge
50
- end
51
-
52
- action_sequences
53
- end
54
-
55
- contract Nanoc::Core::ItemRep, C::IterOf[String], C::IterOf[Symbol], C::HashOf[String => Nanoc::Core::ItemRep] => C::Any
56
- def route_rep(rep, paths, snapshot_names, assigned_paths)
57
- # Encode
58
- paths = paths.map { |path| path.encode('UTF-8') }
59
-
60
- # Validate format
61
- paths.each do |path|
62
- unless path.start_with?('/')
63
- raise RouteWithoutSlashError.new(path, rep)
64
- end
65
- end
66
-
67
- # Validate uniqueness
68
- paths.each do |path|
69
- if assigned_paths.include?(path)
70
- # TODO: Include snapshot names in error message
71
- reps = [assigned_paths[path], rep].sort_by { |r| [r.item.identifier, r.name] }
72
- raise IdenticalRoutesError.new(path, *reps)
73
- end
74
- end
75
- paths.each do |path|
76
- assigned_paths[path] = rep
77
- end
78
-
79
- # Assign
80
- snapshot_names.each do |snapshot_name|
81
- rep.raw_paths[snapshot_name] = paths.map { |path| @site.config.output_dir + path }
82
- rep.paths[snapshot_name] = paths.map { |path| strip_index_filename(path) }
83
- end
84
- end
85
-
86
- contract String => String
87
- def strip_index_filename(basic_path)
88
- @site.config[:index_filenames].each do |index_filename|
89
- slashed_index_filename = '/' + index_filename
90
- if basic_path.end_with?(slashed_index_filename)
91
- return basic_path[0..-index_filename.length - 1]
92
- end
93
- end
94
-
95
- basic_path
96
- end
97
- end
98
- end
99
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Nanoc
4
- # @api private
5
- class ViewContextForCompilation
6
- include Nanoc::Core::ContractsSupport
7
-
8
- attr_reader :reps
9
- attr_reader :items
10
- attr_reader :dependency_tracker
11
- attr_reader :compilation_context
12
- attr_reader :compiled_content_store
13
-
14
- contract C::KeywordArgs[
15
- reps: Nanoc::Core::ItemRepRepo,
16
- items: Nanoc::Core::IdentifiableCollection,
17
- dependency_tracker: Nanoc::Core::DependencyTracker,
18
- compilation_context: C::Any,
19
- compiled_content_store: Nanoc::Core::CompiledContentStore,
20
- ] => C::Any
21
- def initialize(reps:, items:, dependency_tracker:, compilation_context:, compiled_content_store:)
22
- @reps = reps
23
- @items = items
24
- @dependency_tracker = dependency_tracker
25
- @compilation_context = compilation_context
26
- @compiled_content_store = compiled_content_store
27
- end
28
- end
29
- end
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Nanoc
4
- # @api private
5
- class ViewContextForPreCompilation
6
- include Nanoc::Core::ContractsSupport
7
-
8
- attr_reader :items
9
- attr_reader :dependency_tracker
10
-
11
- contract C::KeywordArgs[items: Nanoc::Core::IdentifiableCollection] => C::Any
12
- def initialize(items:)
13
- @items = items
14
-
15
- @dependency_tracker = Nanoc::Core::DependencyTracker::Null.new
16
- end
17
- end
18
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Nanoc
4
- # @api private
5
- class ViewContextForShell
6
- include Nanoc::Core::ContractsSupport
7
-
8
- attr_reader :items
9
- attr_reader :reps
10
- attr_reader :dependency_tracker
11
-
12
- contract C::KeywordArgs[
13
- items: Nanoc::Core::IdentifiableCollection,
14
- reps: Nanoc::Core::ItemRepRepo,
15
- ] => C::Any
16
- def initialize(items:, reps:)
17
- @items = items
18
- @reps = reps
19
-
20
- @dependency_tracker = Nanoc::Core::DependencyTracker::Null.new
21
- end
22
- end
23
- end