nanoc 4.11.0 → 4.11.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (154) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS.md +6 -0
  3. data/lib/nanoc.rb +4 -7
  4. data/lib/nanoc/base.rb +3 -3
  5. data/lib/nanoc/base/assertions.rb +1 -1
  6. data/lib/nanoc/base/entities.rb +2 -20
  7. data/lib/nanoc/base/entities/action_sequence.rb +60 -64
  8. data/lib/nanoc/base/entities/checksum_collection.rb +23 -21
  9. data/lib/nanoc/base/entities/dependency.rb +24 -22
  10. data/lib/nanoc/base/entities/outdatedness_reasons.rb +74 -72
  11. data/lib/nanoc/base/entities/outdatedness_status.rb +19 -17
  12. data/lib/nanoc/base/entities/props.rb +119 -117
  13. data/lib/nanoc/base/entities/site.rb +46 -50
  14. data/lib/nanoc/base/errors.rb +183 -198
  15. data/lib/nanoc/base/repos.rb +4 -2
  16. data/lib/nanoc/base/repos/action_sequence_store.rb +44 -42
  17. data/lib/nanoc/base/repos/aggregate_data_source.rb +24 -22
  18. data/lib/nanoc/base/repos/checksum_store.rb +51 -49
  19. data/lib/nanoc/base/repos/compiled_content_cache.rb +47 -45
  20. data/lib/nanoc/base/repos/compiled_content_store.rb +76 -0
  21. data/lib/nanoc/base/repos/config_loader.rb +74 -72
  22. data/lib/nanoc/base/repos/dependency_store.rb +174 -172
  23. data/lib/nanoc/base/repos/in_mem_data_source.rb +17 -15
  24. data/lib/nanoc/base/repos/item_rep_repo.rb +26 -24
  25. data/lib/nanoc/base/repos/outdatedness_store.rb +50 -48
  26. data/lib/nanoc/base/repos/prefixed_data_source.rb +21 -19
  27. data/lib/nanoc/base/repos/site_loader.rb +75 -73
  28. data/lib/nanoc/base/repos/store.rb +93 -91
  29. data/lib/nanoc/base/services.rb +7 -3
  30. data/lib/nanoc/base/services/action_provider.rb +23 -21
  31. data/lib/nanoc/base/services/action_sequence_builder.rb +42 -34
  32. data/lib/nanoc/base/services/compilation_context.rb +49 -47
  33. data/lib/nanoc/base/services/compiler.rb +177 -170
  34. data/lib/nanoc/base/services/compiler/phases.rb +8 -1
  35. data/lib/nanoc/base/services/compiler/phases/abstract.rb +44 -38
  36. data/lib/nanoc/base/services/compiler/phases/cache.rb +34 -28
  37. data/lib/nanoc/base/services/compiler/phases/mark_done.rb +17 -11
  38. data/lib/nanoc/base/services/compiler/phases/notify.rb +21 -0
  39. data/lib/nanoc/base/services/compiler/phases/recalculate.rb +37 -31
  40. data/lib/nanoc/base/services/compiler/phases/resume.rb +47 -48
  41. data/lib/nanoc/base/services/compiler/phases/write.rb +65 -59
  42. data/lib/nanoc/base/services/compiler/stage.rb +27 -8
  43. data/lib/nanoc/base/services/compiler/stages.rb +7 -1
  44. data/lib/nanoc/base/services/compiler/stages/build_reps.rb +25 -19
  45. data/lib/nanoc/base/services/compiler/stages/calculate_checksums.rb +34 -28
  46. data/lib/nanoc/base/services/compiler/stages/cleanup.rb +33 -27
  47. data/lib/nanoc/base/services/compiler/stages/compile_reps.rb +79 -69
  48. data/lib/nanoc/base/services/compiler/stages/determine_outdatedness.rb +46 -40
  49. data/lib/nanoc/base/services/compiler/stages/forget_outdated_dependencies.rb +15 -9
  50. data/lib/nanoc/base/services/compiler/stages/load_stores.rb +28 -22
  51. data/lib/nanoc/base/services/compiler/stages/postprocess.rb +16 -10
  52. data/lib/nanoc/base/services/compiler/stages/preprocess.rb +25 -19
  53. data/lib/nanoc/base/services/compiler/stages/prune.rb +23 -17
  54. data/lib/nanoc/base/services/compiler/stages/store_post_compilation_state.rb +15 -9
  55. data/lib/nanoc/base/services/compiler/stages/store_pre_compilation_state.rb +26 -20
  56. data/lib/nanoc/base/services/compiler_loader.rb +26 -24
  57. data/lib/nanoc/base/services/dependency_tracker.rb +47 -45
  58. data/lib/nanoc/base/services/executor.rb +16 -15
  59. data/lib/nanoc/base/services/filter.rb +37 -5
  60. data/lib/nanoc/base/services/instrumentor.rb +12 -10
  61. data/lib/nanoc/base/services/item_rep_builder.rb +21 -19
  62. data/lib/nanoc/base/services/item_rep_router.rb +72 -70
  63. data/lib/nanoc/base/services/item_rep_selector.rb +48 -46
  64. data/lib/nanoc/base/services/item_rep_writer.rb +58 -53
  65. data/lib/nanoc/base/services/outdatedness_checker.rb +181 -179
  66. data/lib/nanoc/base/services/outdatedness_rule.rb +23 -21
  67. data/lib/nanoc/base/services/outdatedness_rules.rb +5 -3
  68. data/lib/nanoc/base/services/outdatedness_rules/attributes_modified.rb +28 -24
  69. data/lib/nanoc/base/services/outdatedness_rules/code_snippets_modified.rb +20 -16
  70. data/lib/nanoc/base/services/outdatedness_rules/content_modified.rb +13 -9
  71. data/lib/nanoc/base/services/outdatedness_rules/item_collection_extended.rb +12 -8
  72. data/lib/nanoc/base/services/outdatedness_rules/layout_collection_extended.rb +12 -8
  73. data/lib/nanoc/base/services/outdatedness_rules/not_written.rb +10 -6
  74. data/lib/nanoc/base/services/outdatedness_rules/rules_modified.rb +39 -35
  75. data/lib/nanoc/base/services/outdatedness_rules/uses_always_outdated_filter.rb +19 -15
  76. data/lib/nanoc/base/services/pruner.rb +2 -2
  77. data/lib/nanoc/base/views.rb +7 -0
  78. data/lib/nanoc/base/views/basic_item_view.rb +1 -1
  79. data/lib/nanoc/base/views/compilation_item_rep_view.rb +2 -2
  80. data/lib/nanoc/base/views/identifiable_collection_view.rb +2 -2
  81. data/lib/nanoc/base/views/mixins/document_view_mixin.rb +1 -1
  82. data/lib/nanoc/base/views/mixins/mutable_document_view_mixin.rb +5 -5
  83. data/lib/nanoc/base/views/mutable_item_collection_view.rb +3 -3
  84. data/lib/nanoc/base/views/mutable_layout_collection_view.rb +2 -2
  85. data/lib/nanoc/base/views/view_context_for_compilation.rb +6 -6
  86. data/lib/nanoc/base/views/view_context_for_pre_compilation.rb +2 -2
  87. data/lib/nanoc/base/views/view_context_for_shell.rb +2 -2
  88. data/lib/nanoc/checking/check.rb +1 -1
  89. data/lib/nanoc/cli/commands/compile_listeners/abstract.rb +24 -7
  90. data/lib/nanoc/cli/commands/compile_listeners/debug_printer.rb +79 -15
  91. data/lib/nanoc/cli/commands/compile_listeners/diff_generator.rb +4 -7
  92. data/lib/nanoc/cli/commands/compile_listeners/file_action_printer.rb +15 -24
  93. data/lib/nanoc/cli/commands/compile_listeners/timing_recorder.rb +22 -18
  94. data/lib/nanoc/cli/commands/create-site.rb +2 -7
  95. data/lib/nanoc/cli/commands/shell.rb +1 -1
  96. data/lib/nanoc/cli/commands/show-data.rb +9 -9
  97. data/lib/nanoc/cli/logger.rb +1 -1
  98. data/lib/nanoc/data_sources/filesystem.rb +8 -8
  99. data/lib/nanoc/filters/erb.rb +1 -1
  100. data/lib/nanoc/filters/erubi.rb +1 -1
  101. data/lib/nanoc/filters/erubis.rb +1 -1
  102. data/lib/nanoc/filters/haml.rb +1 -1
  103. data/lib/nanoc/filters/sass.rb +1 -1
  104. data/lib/nanoc/filters/slim.rb +1 -1
  105. data/lib/nanoc/helpers/breadcrumbs.rb +2 -2
  106. data/lib/nanoc/helpers/capturing.rb +9 -8
  107. data/lib/nanoc/helpers/filtering.rb +2 -2
  108. data/lib/nanoc/helpers/rendering.rb +1 -1
  109. data/lib/nanoc/rule_dsl.rb +10 -0
  110. data/lib/nanoc/rule_dsl/action_provider.rb +3 -3
  111. data/lib/nanoc/rule_dsl/action_recorder.rb +3 -3
  112. data/lib/nanoc/rule_dsl/action_sequence_calculator.rb +7 -7
  113. data/lib/nanoc/rule_dsl/compilation_rule.rb +2 -2
  114. data/lib/nanoc/rule_dsl/compilation_rule_context.rb +9 -9
  115. data/lib/nanoc/rule_dsl/compiler_dsl.rb +4 -4
  116. data/lib/nanoc/rule_dsl/routing_rule.rb +3 -3
  117. data/lib/nanoc/rule_dsl/rule.rb +5 -5
  118. data/lib/nanoc/rule_dsl/rule_context.rb +3 -3
  119. data/lib/nanoc/rule_dsl/rules_collection.rb +4 -4
  120. data/lib/nanoc/spec.rb +15 -15
  121. data/lib/nanoc/version.rb +1 -1
  122. metadata +10 -111
  123. data/lib/nanoc/base/contracts_support.rb +0 -130
  124. data/lib/nanoc/base/core_ext.rb +0 -5
  125. data/lib/nanoc/base/core_ext/array.rb +0 -50
  126. data/lib/nanoc/base/core_ext/hash.rb +0 -54
  127. data/lib/nanoc/base/core_ext/string.rb +0 -16
  128. data/lib/nanoc/base/entities/code_snippet.rb +0 -53
  129. data/lib/nanoc/base/entities/configuration-schema.json +0 -122
  130. data/lib/nanoc/base/entities/configuration.rb +0 -206
  131. data/lib/nanoc/base/entities/content.rb +0 -112
  132. data/lib/nanoc/base/entities/context.rb +0 -70
  133. data/lib/nanoc/base/entities/directed_graph.rb +0 -195
  134. data/lib/nanoc/base/entities/document.rb +0 -125
  135. data/lib/nanoc/base/entities/identifiable_collection.rb +0 -141
  136. data/lib/nanoc/base/entities/identifier.rb +0 -222
  137. data/lib/nanoc/base/entities/item.rb +0 -10
  138. data/lib/nanoc/base/entities/item_collection.rb +0 -14
  139. data/lib/nanoc/base/entities/item_rep.rb +0 -91
  140. data/lib/nanoc/base/entities/layout.rb +0 -10
  141. data/lib/nanoc/base/entities/layout_collection.rb +0 -14
  142. data/lib/nanoc/base/entities/lazy_value.rb +0 -43
  143. data/lib/nanoc/base/entities/pattern.rb +0 -85
  144. data/lib/nanoc/base/entities/processing_action.rb +0 -21
  145. data/lib/nanoc/base/entities/processing_actions.rb +0 -5
  146. data/lib/nanoc/base/entities/processing_actions/filter.rb +0 -36
  147. data/lib/nanoc/base/entities/processing_actions/layout.rb +0 -36
  148. data/lib/nanoc/base/entities/processing_actions/snapshot.rb +0 -46
  149. data/lib/nanoc/base/entities/snapshot_def.rb +0 -22
  150. data/lib/nanoc/base/repos/data_source.rb +0 -168
  151. data/lib/nanoc/base/repos/snapshot_repo.rb +0 -67
  152. data/lib/nanoc/base/services/checksummer.rb +0 -274
  153. data/lib/nanoc/base/services/notification_center.rb +0 -87
  154. data/lib/nanoc/base/services/temp_filename_factory.rb +0 -52
@@ -1,141 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Nanoc::Int
4
- # @api private
5
- class IdentifiableCollection
6
- DDMemoize.activate(self)
7
-
8
- include Nanoc::Int::ContractsSupport
9
- include Enumerable
10
-
11
- extend Forwardable
12
-
13
- def_delegator :@objects, :each
14
- def_delegator :@objects, :size
15
-
16
- def initialize(*)
17
- raise 'IdentifiableCollection is abstract and cannot be instantiated'
18
- end
19
-
20
- contract C::Or[Hash, C::Named['Nanoc::Int::Configuration']], C::IterOf[C::RespondTo[:identifier]], C::Maybe[String] => C::Any
21
- def initialize_basic(config, objects = [], name = nil)
22
- @config = config
23
- @objects = Hamster::Vector.new(objects)
24
- @name = name
25
- end
26
-
27
- contract C::None => String
28
- def inspect
29
- "<#{self.class}>"
30
- end
31
-
32
- contract C::None => self
33
- def freeze
34
- @objects.freeze
35
- @objects.each(&:freeze)
36
- build_mapping
37
- super
38
- end
39
-
40
- contract C::Any => C::Maybe[C::RespondTo[:identifier]]
41
- def [](arg)
42
- if frozen?
43
- get_memoized(arg)
44
- else
45
- get_unmemoized(arg)
46
- end
47
- end
48
-
49
- contract C::Any => C::IterOf[C::RespondTo[:identifier]]
50
- def find_all(arg)
51
- if frozen?
52
- find_all_memoized(arg)
53
- else
54
- find_all_unmemoized(arg)
55
- end
56
- end
57
-
58
- contract C::None => C::ArrayOf[C::RespondTo[:identifier]]
59
- def to_a
60
- @objects.to_a
61
- end
62
-
63
- contract C::None => C::Bool
64
- def empty?
65
- @objects.empty?
66
- end
67
-
68
- contract C::RespondTo[:identifier] => self
69
- def add(obj)
70
- self.class.new(@config, @objects.add(obj))
71
- end
72
-
73
- contract C::Func[C::RespondTo[:identifier] => C::Any] => self
74
- def reject(&block)
75
- self.class.new(@config, @objects.reject(&block))
76
- end
77
-
78
- contract C::Any => C::Maybe[C::RespondTo[:identifier]]
79
- def object_with_identifier(identifier)
80
- if frozen?
81
- @mapping[identifier.to_s]
82
- else
83
- @objects.find { |i| i.identifier == identifier }
84
- end
85
- end
86
-
87
- protected
88
-
89
- contract C::Any => C::Maybe[C::RespondTo[:identifier]]
90
- def get_unmemoized(arg)
91
- case arg
92
- when Nanoc::Identifier
93
- object_with_identifier(arg)
94
- when String
95
- object_with_identifier(arg) || object_matching_glob(arg)
96
- when Regexp
97
- @objects.find { |i| i.identifier.to_s =~ arg }
98
- else
99
- raise ArgumentError, "don’t know how to fetch objects by #{arg.inspect}"
100
- end
101
- end
102
-
103
- contract C::Any => C::Maybe[C::RespondTo[:identifier]]
104
- memoized def get_memoized(arg)
105
- get_unmemoized(arg)
106
- end
107
-
108
- contract C::Any => C::IterOf[C::RespondTo[:identifier]]
109
- def find_all_unmemoized(arg)
110
- pat = Nanoc::Int::Pattern.from(arg)
111
- select { |i| pat.match?(i.identifier) }
112
- end
113
-
114
- contract C::Any => C::IterOf[C::RespondTo[:identifier]]
115
- memoized def find_all_memoized(arg)
116
- find_all_unmemoized(arg)
117
- end
118
-
119
- def object_matching_glob(glob)
120
- if use_globs?
121
- pat = Nanoc::Int::Pattern.from(glob)
122
- @objects.find { |i| pat.match?(i.identifier) }
123
- else
124
- nil
125
- end
126
- end
127
-
128
- def build_mapping
129
- @mapping = {}
130
- @objects.each do |object|
131
- @mapping[object.identifier.to_s] = object
132
- end
133
- @mapping.freeze
134
- end
135
-
136
- contract C::None => C::Bool
137
- def use_globs?
138
- @config[:string_pattern_type] == 'glob'
139
- end
140
- end
141
- end
@@ -1,222 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Nanoc
4
- class Identifier
5
- include Comparable
6
- include Nanoc::Int::ContractsSupport
7
-
8
- # @api private
9
- class InvalidIdentifierError < ::Nanoc::Error
10
- def initialize(string)
11
- super("Invalid identifier (does not start with a slash): #{string.inspect}")
12
- end
13
- end
14
-
15
- # @api private
16
- class InvalidFullIdentifierError < ::Nanoc::Error
17
- def initialize(string)
18
- super("Invalid full identifier (ends with a slash): #{string.inspect}")
19
- end
20
- end
21
-
22
- # @api private
23
- class InvalidTypeError < ::Nanoc::Error
24
- def initialize(type)
25
- super("Invalid type for identifier: #{type.inspect} (can be :full or :legacy)")
26
- end
27
- end
28
-
29
- # @api private
30
- class InvalidPrefixError < ::Nanoc::Error
31
- def initialize(string)
32
- super("Invalid prefix (does not start with a slash): #{string.inspect}")
33
- end
34
- end
35
-
36
- # @api private
37
- class UnsupportedLegacyOperationError < ::Nanoc::Error
38
- def initialize
39
- super('Cannot use this method on legacy identifiers')
40
- end
41
- end
42
-
43
- # @api private
44
- class NonCoercibleObjectError < ::Nanoc::Error
45
- def initialize(obj)
46
- super("#{obj.inspect} cannot be converted into a Nanoc::Identifier")
47
- end
48
- end
49
-
50
- contract C::Any => self
51
- def self.from(obj)
52
- case obj
53
- when Nanoc::Identifier
54
- obj
55
- when String
56
- Nanoc::Identifier.new(obj)
57
- else
58
- raise NonCoercibleObjectError.new(obj)
59
- end
60
- end
61
-
62
- contract String, C::KeywordArgs[type: C::Optional[Symbol]] => C::Any
63
- def initialize(string, type: :full)
64
- @type = type
65
-
66
- case @type
67
- when :legacy
68
- @string = "/#{string}/".gsub(/^\/+|\/+$/, '/').freeze
69
- when :full
70
- raise InvalidIdentifierError.new(string) if string !~ /\A\//
71
- raise InvalidFullIdentifierError.new(string) if string =~ /\/\z/
72
-
73
- @string = string.dup.freeze
74
- else
75
- raise InvalidTypeError.new(@type)
76
- end
77
- end
78
-
79
- contract C::Any => C::Bool
80
- def ==(other)
81
- case other
82
- when Nanoc::Identifier, String
83
- to_s == other.to_s
84
- else
85
- false
86
- end
87
- end
88
-
89
- contract C::Any => C::Bool
90
- def eql?(other)
91
- other.is_a?(self.class) && to_s == other.to_s
92
- end
93
-
94
- contract C::None => C::Num
95
- def hash
96
- self.class.hash ^ to_s.hash
97
- end
98
-
99
- contract C::Any => C::Maybe[C::Num]
100
- def =~(other)
101
- Nanoc::Int::Pattern.from(other).match?(to_s) ? 0 : nil
102
- end
103
-
104
- contract C::Any => C::Bool
105
- def match?(other)
106
- Nanoc::Int::Pattern.from(other).match?(to_s)
107
- end
108
-
109
- contract C::Any => C::Num
110
- def <=>(other)
111
- to_s <=> other.to_s
112
- end
113
-
114
- contract C::None => C::Bool
115
- # Whether or not this is a full identifier (i.e.includes the extension).
116
- def full?
117
- @type == :full
118
- end
119
-
120
- contract C::None => C::Bool
121
- # Whether or not this is a legacy identifier (i.e. does not include the extension).
122
- def legacy?
123
- @type == :legacy
124
- end
125
-
126
- contract C::None => String
127
- # @return [String]
128
- def chop
129
- to_s.chop
130
- end
131
-
132
- contract String => String
133
- # @return [String]
134
- def +(other)
135
- to_s + other
136
- end
137
-
138
- contract String => self
139
- # @return [Nanoc::Identifier]
140
- def prefix(string)
141
- unless /\A\//.match?(string)
142
- raise InvalidPrefixError.new(string)
143
- end
144
-
145
- Nanoc::Identifier.new(string.sub(/\/+\z/, '') + @string, type: @type)
146
- end
147
-
148
- contract C::None => String
149
- # The identifier, as string, with the last extension removed
150
- def without_ext
151
- unless full?
152
- raise UnsupportedLegacyOperationError
153
- end
154
-
155
- extname = File.extname(@string)
156
-
157
- if !extname.empty?
158
- @string[0..-extname.size - 1]
159
- else
160
- @string
161
- end
162
- end
163
-
164
- contract C::None => C::Maybe[String]
165
- # The extension, without a leading dot
166
- def ext
167
- unless full?
168
- raise UnsupportedLegacyOperationError
169
- end
170
-
171
- s = File.extname(@string)
172
- s && s[1..-1]
173
- end
174
-
175
- contract C::None => String
176
- # The identifier, as string, with all extensions removed
177
- def without_exts
178
- extname = exts.join('.')
179
- if !extname.empty?
180
- @string[0..-extname.size - 2]
181
- else
182
- @string
183
- end
184
- end
185
-
186
- contract C::None => C::ArrayOf[String]
187
- # The list of extensions, without a leading dot
188
- def exts
189
- unless full?
190
- raise UnsupportedLegacyOperationError
191
- end
192
-
193
- s = File.basename(@string)
194
- s ? s.split('.', -1).drop(1) : []
195
- end
196
-
197
- contract C::None => C::ArrayOf[String]
198
- def components
199
- res = to_s.split('/')
200
- if res.empty?
201
- []
202
- else
203
- res[1..-1]
204
- end
205
- end
206
-
207
- contract C::None => String
208
- def to_s
209
- @string
210
- end
211
-
212
- contract C::None => String
213
- def to_str
214
- @string
215
- end
216
-
217
- contract C::None => String
218
- def inspect
219
- "<Nanoc::Identifier type=#{@type} #{to_s.inspect}>"
220
- end
221
- end
222
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Nanoc::Int
4
- # @api private
5
- class Item < ::Nanoc::Int::Document
6
- def reference
7
- "item:#{identifier}"
8
- end
9
- end
10
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Nanoc::Int
4
- # @api private
5
- class ItemCollection < IdentifiableCollection
6
- def initialize(config, objects = [])
7
- initialize_basic(config, objects, 'items')
8
- end
9
-
10
- def reference
11
- 'items'
12
- end
13
- end
14
- end
@@ -1,91 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Nanoc::Int
4
- # @api private
5
- class ItemRep
6
- include Nanoc::Int::ContractsSupport
7
-
8
- contract C::None => C::Bool
9
- attr_accessor :compiled
10
- alias compiled? compiled
11
-
12
- contract C::None => C::HashOf[Symbol => C::IterOf[String]]
13
- attr_reader :raw_paths
14
-
15
- contract C::None => C::HashOf[Symbol => C::IterOf[String]]
16
- attr_reader :paths
17
-
18
- contract C::None => Nanoc::Int::Item
19
- attr_reader :item
20
-
21
- contract C::None => Symbol
22
- attr_reader :name
23
-
24
- contract C::None => C::IterOf[C::Named['Nanoc::Int::SnapshotDef']]
25
- attr_accessor :snapshot_defs
26
-
27
- contract C::None => C::Bool
28
- attr_accessor :modified
29
- alias modified? modified
30
-
31
- contract Nanoc::Int::Item, Symbol => C::Any
32
- def initialize(item, name)
33
- # Set primary attributes
34
- @item = item
35
- @name = name
36
-
37
- # Set default attributes
38
- @raw_paths = {}
39
- @paths = {}
40
- @snapshot_defs = []
41
-
42
- # Reset flags
43
- @compiled = false
44
- @modified = false
45
- end
46
-
47
- contract C::HashOf[Symbol => C::IterOf[C::AbsolutePathString]] => C::HashOf[Symbol => C::IterOf[C::AbsolutePathString]]
48
- def raw_paths=(val)
49
- @raw_paths = val
50
- end
51
-
52
- contract C::HashOf[Symbol => C::IterOf[String]] => C::HashOf[Symbol => C::IterOf[String]]
53
- def paths=(val)
54
- @paths = val
55
- end
56
-
57
- contract Symbol => C::Bool
58
- def snapshot?(name)
59
- snapshot_defs.any? { |sd| sd.name == name }
60
- end
61
-
62
- contract C::KeywordArgs[snapshot: C::Optional[Symbol]] => C::Maybe[String]
63
- # Returns the item rep’s raw path. It includes the path to the output
64
- # directory and the full filename.
65
- def raw_path(snapshot: :last)
66
- @raw_paths.fetch(snapshot, []).first
67
- end
68
-
69
- contract C::KeywordArgs[snapshot: C::Optional[Symbol]] => C::Maybe[String]
70
- # Returns the item rep’s path, as used when being linked to. It starts
71
- # with a slash and it is relative to the output directory. It does not
72
- # include the path to the output directory. It will not include the
73
- # filename if the filename is an index filename.
74
- def path(snapshot: :last)
75
- @paths.fetch(snapshot, []).first
76
- end
77
-
78
- # Returns an object that can be used for uniquely identifying objects.
79
- def reference
80
- "item_rep:#{item.identifier}:#{name}"
81
- end
82
-
83
- def to_s
84
- "#{item.identifier} (rep name #{name.inspect})"
85
- end
86
-
87
- def inspect
88
- "<#{self.class} name=\"#{name}\" raw_path=\"#{raw_path}\" item.identifier=\"#{item.identifier}\">"
89
- end
90
- end
91
- end