nanoc 4.11.11 → 4.11.12

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