nanoc 4.4.4 → 4.4.5
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 +4 -4
- data/Gemfile +1 -0
- data/Gemfile.lock +9 -8
- data/NEWS.md +10 -0
- data/lib/nanoc/base.rb +0 -3
- data/lib/nanoc/base/contracts_support.rb +55 -2
- data/lib/nanoc/base/core_ext/array.rb +0 -2
- data/lib/nanoc/base/core_ext/hash.rb +0 -2
- data/lib/nanoc/base/entities.rb +1 -0
- data/lib/nanoc/base/entities/context.rb +1 -4
- data/lib/nanoc/base/entities/directed_graph.rb +0 -10
- data/lib/nanoc/base/entities/identifiable_collection.rb +1 -2
- data/lib/nanoc/base/entities/identifier.rb +6 -8
- data/lib/nanoc/base/entities/item_rep.rb +12 -18
- data/lib/nanoc/base/{compilation → entities}/outdatedness_reasons.rb +0 -0
- data/lib/nanoc/base/entities/site.rb +3 -19
- data/lib/nanoc/base/errors.rb +9 -0
- data/lib/nanoc/base/memoization.rb +0 -2
- data/lib/nanoc/base/repos/checksum_store.rb +21 -14
- data/lib/nanoc/base/repos/compiled_content_cache.rb +11 -15
- data/lib/nanoc/base/repos/dependency_store.rb +8 -27
- data/lib/nanoc/base/services.rb +3 -0
- data/lib/nanoc/base/services/compiler.rb +379 -0
- data/lib/nanoc/base/services/compiler_loader.rb +3 -1
- data/lib/nanoc/base/services/executor.rb +27 -41
- data/lib/nanoc/base/services/item_rep_builder.rb +4 -0
- data/lib/nanoc/base/services/item_rep_writer.rb +5 -2
- data/lib/nanoc/base/{compilation → services}/outdatedness_checker.rb +1 -1
- data/lib/nanoc/base/views/post_compile_item_rep_view.rb +1 -1
- data/lib/nanoc/base/views/view_context.rb +3 -3
- data/lib/nanoc/checking/check.rb +1 -1
- data/lib/nanoc/checking/checks/external_links.rb +1 -1
- data/lib/nanoc/cli.rb +0 -4
- data/lib/nanoc/cli/commands/compile.rb +2 -2
- data/lib/nanoc/cli/commands/shell.rb +1 -1
- data/lib/nanoc/data_sources/filesystem.rb +10 -20
- data/lib/nanoc/data_sources/filesystem/errors.rb +55 -0
- data/lib/nanoc/filters/asciidoc.rb +0 -2
- data/lib/nanoc/filters/coffeescript.rb +0 -2
- data/lib/nanoc/filters/colorize_syntax.rb +0 -2
- data/lib/nanoc/filters/handlebars.rb +0 -2
- data/lib/nanoc/filters/mustache.rb +0 -2
- data/lib/nanoc/filters/redcarpet.rb +0 -4
- data/lib/nanoc/filters/slim.rb +0 -2
- data/lib/nanoc/filters/typogruby.rb +0 -2
- data/lib/nanoc/filters/xsl.rb +0 -2
- data/lib/nanoc/filters/yui_compressor.rb +0 -2
- data/lib/nanoc/helpers/capturing.rb +22 -19
- data/lib/nanoc/helpers/link_to.rb +3 -7
- data/lib/nanoc/helpers/rendering.rb +1 -1
- data/lib/nanoc/rule_dsl/action_provider.rb +2 -2
- data/lib/nanoc/rule_dsl/compiler_dsl.rb +0 -2
- data/lib/nanoc/rule_dsl/recording_executor.rb +6 -6
- data/lib/nanoc/rule_dsl/rule.rb +0 -2
- data/lib/nanoc/rule_dsl/rule_context.rb +3 -3
- data/lib/nanoc/rule_dsl/rule_memory_calculator.rb +5 -5
- data/lib/nanoc/spec.rb +1 -1
- data/lib/nanoc/version.rb +1 -1
- data/test/base/test_compiler.rb +3 -1
- data/test/base/test_dependency_tracker.rb +0 -19
- data/test/base/test_item_rep.rb +3 -0
- data/test/cli/commands/test_create_site.rb +1 -1
- data/test/data_sources/test_filesystem.rb +5 -5
- data/test/filters/test_coffeescript.rb +2 -0
- data/test/filters/test_handlebars.rb +4 -0
- data/test/filters/test_uglify_js.rb +4 -0
- data/test/filters/test_xsl.rb +1 -1
- data/test/helper.rb +6 -0
- data/test/helpers/test_capturing.rb +6 -1
- data/test/helpers/test_xml_sitemap.rb +1 -1
- metadata +6 -6
- data/lib/nanoc/base/compilation/compiler.rb +0 -295
- data/test/base/test_checksum_store.rb +0 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 863abf7fed2e1998046a921fe61e76d21bc0d4d3
|
4
|
+
data.tar.gz: 03a50e4fc4e75f74e0505c0664c352e5b2821d09
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5efd6d09aef769a17e8a1d66ee9557ca8b70dbdca303b36e2142e331d133904caf4b902b246d65d9b22ead0cb152746684bf0ae52436ce7c7bfa6de670a537af
|
7
|
+
data.tar.gz: 62b27f158e7d10f8faf730df0ce02bb931fc15d665e5ad4960ca006c2f917333dcc74ff8cd49532245b47f65648313095819c4bda84e4657e515585ea20a6686
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
GIT
|
2
2
|
remote: git://github.com/tmm1/pygments.rb.git
|
3
|
-
revision:
|
3
|
+
revision: a988d127d3270d21685d2ac2e586060bf43709f3
|
4
4
|
specs:
|
5
|
-
pygments.rb (1.
|
6
|
-
|
7
|
-
yajl-ruby (~> 1.2)
|
5
|
+
pygments.rb (1.1.0)
|
6
|
+
multi_json (>= 1.0.0)
|
8
7
|
|
9
8
|
PATH
|
10
9
|
remote: .
|
11
10
|
specs:
|
12
|
-
nanoc (4.4.
|
11
|
+
nanoc (4.4.5)
|
13
12
|
cri (~> 2.3)
|
14
13
|
hamster (~> 3.0)
|
15
14
|
parallel (~> 1.9)
|
@@ -257,7 +256,6 @@ GEM
|
|
257
256
|
parallel (1.10.0)
|
258
257
|
parser (2.3.3.1)
|
259
258
|
ast (~> 2.2)
|
260
|
-
posix-spawn (0.3.12)
|
261
259
|
powerpack (0.1.1)
|
262
260
|
pry (0.10.4)
|
263
261
|
coderay (~> 1.1.0)
|
@@ -304,7 +302,7 @@ GEM
|
|
304
302
|
ruby_dep (1.5.0)
|
305
303
|
rubypants (0.6.0)
|
306
304
|
safe_yaml (1.0.4)
|
307
|
-
sass (3.4.
|
305
|
+
sass (3.4.23)
|
308
306
|
shellany (0.0.1)
|
309
307
|
simplecov (0.12.0)
|
310
308
|
docile (~> 1.1.0)
|
@@ -340,8 +338,10 @@ GEM
|
|
340
338
|
crack (>= 0.3.2)
|
341
339
|
hashdiff
|
342
340
|
xml-simple (1.1.5)
|
343
|
-
yajl-ruby (1.3.0)
|
344
341
|
yard (0.9.5)
|
342
|
+
yard-contracts (0.1.5)
|
343
|
+
contracts (~> 0.7)
|
344
|
+
yard (~> 0.8)
|
345
345
|
yuicompressor (1.3.3)
|
346
346
|
|
347
347
|
PLATFORMS
|
@@ -402,6 +402,7 @@ DEPENDENCIES
|
|
402
402
|
w3c_validators
|
403
403
|
webmock
|
404
404
|
yard
|
405
|
+
yard-contracts
|
405
406
|
yuicompressor
|
406
407
|
|
407
408
|
BUNDLED WITH
|
data/NEWS.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
# Nanoc news
|
2
2
|
|
3
|
+
## 4.4.5 (2016-12-24)
|
4
|
+
|
5
|
+
Fixes:
|
6
|
+
|
7
|
+
* Prevented stale data from making it into the checksum store and thereby blowing up in memory (#1004, #1027)
|
8
|
+
* Fixed slow recompile after adding many items to a site (#1028)
|
9
|
+
* Fixed wrong capturing helper output when the output field separator (`$,`) is set
|
10
|
+
* Fixed issue that could cause items with multiple reps not to be recompiled when needed (#1031, #1032)
|
11
|
+
* Fixed error when fetching textual content of item whose `:last` snapshot is binary (#1035, #1036)
|
12
|
+
|
3
13
|
## 4.4.4 (2016-12-19)
|
4
14
|
|
5
15
|
Enhancements:
|
data/lib/nanoc/base.rb
CHANGED
@@ -1,8 +1,5 @@
|
|
1
1
|
# @api private
|
2
2
|
module Nanoc::Int
|
3
|
-
autoload 'Compiler', 'nanoc/base/compilation/compiler'
|
4
|
-
autoload 'OutdatednessChecker', 'nanoc/base/compilation/outdatedness_checker'
|
5
|
-
autoload 'OutdatednessReasons', 'nanoc/base/compilation/outdatedness_reasons'
|
6
3
|
end
|
7
4
|
|
8
5
|
require_relative 'base/core_ext'
|
@@ -29,17 +29,58 @@ module Nanoc::Int
|
|
29
29
|
Or = Ignorer.instance
|
30
30
|
Func = Ignorer.instance
|
31
31
|
RespondTo = Ignorer.instance
|
32
|
+
Named = Ignorer.instance
|
33
|
+
IterOf = Ignorer.instance
|
34
|
+
HashOf = Ignorer.instance
|
32
35
|
|
33
36
|
def contract(*args); end
|
34
37
|
end
|
35
38
|
|
36
39
|
module EnabledContracts
|
40
|
+
class AbstractContract
|
41
|
+
def self.[](*vals)
|
42
|
+
new(*vals)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class Named < AbstractContract
|
47
|
+
def initialize(name)
|
48
|
+
@name = name
|
49
|
+
end
|
50
|
+
|
51
|
+
def valid?(val)
|
52
|
+
val.is_a?(Kernel.const_get(@name))
|
53
|
+
end
|
54
|
+
|
55
|
+
def inspect
|
56
|
+
"#{self.class}(#{@name})"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
class IterOf < AbstractContract
|
61
|
+
def initialize(contract)
|
62
|
+
@contract = contract
|
63
|
+
end
|
64
|
+
|
65
|
+
def valid?(val)
|
66
|
+
val.respond_to?(:each) && val.all? { |v| Contract.valid?(v, @contract) }
|
67
|
+
end
|
68
|
+
|
69
|
+
def inspect
|
70
|
+
"#{self.class}(#{@contract})"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
37
74
|
def contract(*args)
|
38
75
|
Contract(*args)
|
39
76
|
end
|
40
77
|
end
|
41
78
|
|
42
|
-
def self.
|
79
|
+
def self.setup_once
|
80
|
+
@_contracts_support__setup ||= false
|
81
|
+
return @_contracts_support__should_enable if @_contracts_support__setup
|
82
|
+
@_contracts_support__setup = true
|
83
|
+
|
43
84
|
contracts_loadable =
|
44
85
|
begin
|
45
86
|
require 'contracts'
|
@@ -48,7 +89,19 @@ module Nanoc::Int
|
|
48
89
|
false
|
49
90
|
end
|
50
91
|
|
51
|
-
|
92
|
+
@_contracts_support__should_enable = contracts_loadable && !ENV.key?('DISABLE_CONTRACTS')
|
93
|
+
|
94
|
+
if @_contracts_support__should_enable
|
95
|
+
# FIXME: ugly
|
96
|
+
::Contracts.const_set('Named', EnabledContracts::Named)
|
97
|
+
::Contracts.const_set('IterOf', EnabledContracts::IterOf)
|
98
|
+
end
|
99
|
+
|
100
|
+
@_contracts_support__should_enable
|
101
|
+
end
|
102
|
+
|
103
|
+
def self.included(base)
|
104
|
+
should_enable = setup_once
|
52
105
|
|
53
106
|
if should_enable
|
54
107
|
unless base.include?(::Contracts::Core)
|
data/lib/nanoc/base/entities.rb
CHANGED
@@ -24,12 +24,9 @@ module Nanoc::Int
|
|
24
24
|
# end
|
25
25
|
# # => "I am Max Payne and I am hiding in a cheap motel."
|
26
26
|
def initialize(hash)
|
27
|
+
metaclass = class << self; self; end
|
27
28
|
hash.each_pair do |key, value|
|
28
|
-
# Build instance variable
|
29
29
|
instance_variable_set('@' + key.to_s, value)
|
30
|
-
|
31
|
-
# Define method
|
32
|
-
metaclass = (class << self; self; end)
|
33
30
|
metaclass.send(:define_method, key) { value }
|
34
31
|
end
|
35
32
|
end
|
@@ -84,8 +84,6 @@ module Nanoc::Int
|
|
84
84
|
# @param to End vertex of the edge
|
85
85
|
#
|
86
86
|
# @return [void]
|
87
|
-
#
|
88
|
-
# @since 3.2.0
|
89
87
|
def delete_edge(from, to)
|
90
88
|
@from_graph[from] ||= Set.new
|
91
89
|
@from_graph[from].delete(to)
|
@@ -105,8 +103,6 @@ module Nanoc::Int
|
|
105
103
|
# @param v The vertex to add to the graph
|
106
104
|
#
|
107
105
|
# @return [void]
|
108
|
-
#
|
109
|
-
# @since 3.2.0
|
110
106
|
def add_vertex(v)
|
111
107
|
return if @vertices.key?(v)
|
112
108
|
|
@@ -120,8 +116,6 @@ module Nanoc::Int
|
|
120
116
|
# @param from Vertex from which all edges should be removed
|
121
117
|
#
|
122
118
|
# @return [void]
|
123
|
-
#
|
124
|
-
# @since 3.2.0
|
125
119
|
def delete_edges_from(from)
|
126
120
|
return if @from_graph[from].nil?
|
127
121
|
|
@@ -154,8 +148,6 @@ module Nanoc::Int
|
|
154
148
|
# @param v Vertex to remove from the graph
|
155
149
|
#
|
156
150
|
# @return [void]
|
157
|
-
#
|
158
|
-
# @since 3.2.0
|
159
151
|
def delete_vertex(v)
|
160
152
|
delete_edges_to(v)
|
161
153
|
delete_edges_from(v)
|
@@ -232,8 +224,6 @@ module Nanoc::Int
|
|
232
224
|
# Returns all root vertices, i.e. vertices where no edge points to.
|
233
225
|
#
|
234
226
|
# @return [Set] The set of all root vertices in this graph.
|
235
|
-
#
|
236
|
-
# @since 3.2.0
|
237
227
|
def roots
|
238
228
|
@roots
|
239
229
|
end
|
@@ -11,8 +11,7 @@ module Nanoc::Int
|
|
11
11
|
def_delegator :@objects, :<<
|
12
12
|
def_delegator :@objects, :concat
|
13
13
|
|
14
|
-
|
15
|
-
contract C::Any => C::Any
|
14
|
+
contract C::Or[Hash, C::Named['Nanoc::Int::Configuration']] => C::Any
|
16
15
|
def initialize(config)
|
17
16
|
@config = config
|
18
17
|
|
@@ -98,15 +98,13 @@ module Nanoc
|
|
98
98
|
end
|
99
99
|
|
100
100
|
contract C::None => C::Bool
|
101
|
-
#
|
102
|
-
# the extension), false otherwise
|
101
|
+
# Whether or not this is a full identifier (i.e.includes the extension).
|
103
102
|
def full?
|
104
103
|
@type == :full
|
105
104
|
end
|
106
105
|
|
107
106
|
contract C::None => C::Bool
|
108
|
-
#
|
109
|
-
# include the extension), false otherwise
|
107
|
+
# Whether or not this is a legacy identifier (i.e. does not include the extension).
|
110
108
|
def legacy?
|
111
109
|
@type == :legacy
|
112
110
|
end
|
@@ -133,7 +131,7 @@ module Nanoc
|
|
133
131
|
end
|
134
132
|
|
135
133
|
contract C::None => String
|
136
|
-
#
|
134
|
+
# The identifier, as string, with the last extension removed
|
137
135
|
def without_ext
|
138
136
|
unless full?
|
139
137
|
raise UnsupportedLegacyOperationError
|
@@ -149,7 +147,7 @@ module Nanoc
|
|
149
147
|
end
|
150
148
|
|
151
149
|
contract C::None => C::Maybe[String]
|
152
|
-
#
|
150
|
+
# The extension, without a leading dot
|
153
151
|
def ext
|
154
152
|
unless full?
|
155
153
|
raise UnsupportedLegacyOperationError
|
@@ -160,7 +158,7 @@ module Nanoc
|
|
160
158
|
end
|
161
159
|
|
162
160
|
contract C::None => String
|
163
|
-
#
|
161
|
+
# The identifier, as string, with all extensions removed
|
164
162
|
def without_exts
|
165
163
|
extname = exts.join('.')
|
166
164
|
if !extname.empty?
|
@@ -171,7 +169,7 @@ module Nanoc
|
|
171
169
|
end
|
172
170
|
|
173
171
|
contract C::None => C::ArrayOf[String]
|
174
|
-
#
|
172
|
+
# The list of extensions, without a leading dot
|
175
173
|
def exts
|
176
174
|
unless full?
|
177
175
|
raise UnsupportedLegacyOperationError
|
@@ -42,7 +42,7 @@ module Nanoc::Int
|
|
42
42
|
@raw_paths = {}
|
43
43
|
@paths = {}
|
44
44
|
@snapshot_defs = []
|
45
|
-
|
45
|
+
@snapshot_contents = { last: @item.content }
|
46
46
|
|
47
47
|
# Reset flags
|
48
48
|
@compiled = false
|
@@ -64,18 +64,14 @@ module Nanoc::Int
|
|
64
64
|
# @return [String] The compiled content at the given snapshot (or the
|
65
65
|
# default snapshot if no snapshot is specified)
|
66
66
|
def compiled_content(snapshot: nil)
|
67
|
-
# Make sure we're not binary
|
68
|
-
if binary?
|
69
|
-
raise Nanoc::Int::Errors::CannotGetCompiledContentOfBinaryItem.new(self)
|
70
|
-
end
|
71
|
-
|
72
67
|
# Get name of last pre-layout snapshot
|
73
68
|
snapshot_name = snapshot || (@snapshot_contents[:pre] ? :pre : :last)
|
74
|
-
|
69
|
+
is_movable = [:pre, :post, :last].include?(snapshot_name)
|
75
70
|
|
76
71
|
# Check existance of snapshot
|
77
72
|
snapshot_def = snapshot_defs.reverse.find { |sd| sd.name == snapshot_name }
|
78
|
-
|
73
|
+
is_final = snapshot_def && snapshot_def.final?
|
74
|
+
if !is_movable && !is_final
|
79
75
|
raise Nanoc::Int::Errors::NoSuchSnapshot.new(self, snapshot_name)
|
80
76
|
end
|
81
77
|
|
@@ -85,7 +81,7 @@ module Nanoc::Int
|
|
85
81
|
when :post, :last
|
86
82
|
true
|
87
83
|
when :pre
|
88
|
-
|
84
|
+
!is_final
|
89
85
|
end
|
90
86
|
is_usable_snapshot = @snapshot_contents[snapshot_name] && (compiled? || !is_still_moving)
|
91
87
|
unless is_usable_snapshot
|
@@ -93,7 +89,13 @@ module Nanoc::Int
|
|
93
89
|
return compiled_content(snapshot: snapshot)
|
94
90
|
end
|
95
91
|
|
96
|
-
|
92
|
+
# Verify snapshot is not binary
|
93
|
+
snapshot_content = @snapshot_contents[snapshot_name]
|
94
|
+
if snapshot_content.binary?
|
95
|
+
raise Nanoc::Int::Errors::CannotGetCompiledContentOfBinaryItem.new(self)
|
96
|
+
end
|
97
|
+
|
98
|
+
snapshot_content.string
|
97
99
|
end
|
98
100
|
|
99
101
|
contract Symbol => C::Bool
|
@@ -101,8 +103,6 @@ module Nanoc::Int
|
|
101
103
|
#
|
102
104
|
# @return [Boolean] True if content exists for the snapshot with the
|
103
105
|
# given name, false otherwise
|
104
|
-
#
|
105
|
-
# @since 3.2.0
|
106
106
|
def snapshot?(snapshot_name)
|
107
107
|
!@snapshot_contents[snapshot_name].nil?
|
108
108
|
end
|
@@ -146,11 +146,5 @@ module Nanoc::Int
|
|
146
146
|
def inspect
|
147
147
|
"<#{self.class} name=\"#{name}\" binary=#{binary?} raw_path=\"#{raw_path}\" item.identifier=\"#{item.identifier}\">"
|
148
148
|
end
|
149
|
-
|
150
|
-
private
|
151
|
-
|
152
|
-
def initialize_content
|
153
|
-
@snapshot_contents = { last: @item.content }
|
154
|
-
end
|
155
149
|
end
|
156
150
|
end
|
File without changes
|
@@ -5,11 +5,7 @@ module Nanoc::Int
|
|
5
5
|
|
6
6
|
attr_accessor :compiler
|
7
7
|
|
8
|
-
contract C::KeywordArgs[config: Nanoc::Int::Configuration, code_snippets: C::
|
9
|
-
# @param [Nanoc::Int::Configuration] config
|
10
|
-
# @param [Enumerable<Nanoc::Int::CodeSnippet>] code_snippets
|
11
|
-
# @param [Enumerable<Nanoc::Int::Item>] items
|
12
|
-
# @param [Enumerable<Nanoc::Int::Layout>] layouts
|
8
|
+
contract C::KeywordArgs[config: Nanoc::Int::Configuration, code_snippets: C::IterOf[Nanoc::Int::CodeSnippet], items: C::IterOf[Nanoc::Int::Item], layouts: C::IterOf[Nanoc::Int::Layout]] => C::Any
|
13
9
|
def initialize(config:, code_snippets:, items:, layouts:)
|
14
10
|
@config = config
|
15
11
|
@code_snippets = code_snippets
|
@@ -21,21 +17,12 @@ module Nanoc::Int
|
|
21
17
|
end
|
22
18
|
|
23
19
|
contract C::None => self
|
24
|
-
# Compiles the site.
|
25
|
-
#
|
26
|
-
# @return [void]
|
27
|
-
#
|
28
|
-
# @since 3.2.0
|
29
20
|
def compile
|
30
21
|
compiler.run_all
|
31
22
|
self
|
32
23
|
end
|
33
24
|
|
34
|
-
contract C::None => Nanoc::Int::Compiler
|
35
|
-
# Returns the compiler for this site. Will create a new compiler if none
|
36
|
-
# exists yet.
|
37
|
-
#
|
38
|
-
# @return [Nanoc::Int::Compiler] The compiler for this site
|
25
|
+
contract C::None => C::Named['Nanoc::Int::Compiler']
|
39
26
|
def compiler
|
40
27
|
@compiler ||= Nanoc::Int::CompilerLoader.new.load(self)
|
41
28
|
end
|
@@ -46,9 +33,6 @@ module Nanoc::Int
|
|
46
33
|
attr_reader :layouts
|
47
34
|
|
48
35
|
contract C::None => self
|
49
|
-
# Prevents all further modifications to itself, its items, its layouts etc.
|
50
|
-
#
|
51
|
-
# @return [void]
|
52
36
|
def freeze
|
53
37
|
config.freeze
|
54
38
|
items.freeze
|
@@ -57,7 +41,7 @@ module Nanoc::Int
|
|
57
41
|
self
|
58
42
|
end
|
59
43
|
|
60
|
-
contract C::
|
44
|
+
contract C::IterOf[C::Or[Nanoc::Int::Item, Nanoc::Int::Layout]], String => self
|
61
45
|
def ensure_identifier_uniqueness(objects, type)
|
62
46
|
seen = Set.new
|
63
47
|
objects.each do |obj|
|