lib/nanoc/base/entities/site.rb in nanoc-4.2.0 vs lib/nanoc/base/entities/site.rb in nanoc-4.2.1
- old
+ new
@@ -1,10 +1,13 @@
module Nanoc::Int
# @api private
class Site
+ include Nanoc::Int::ContractsSupport
+
attr_accessor :compiler
+ contract C::KeywordArgs[config: Nanoc::Int::Configuration, code_snippets: C::RespondTo[:each], items: C::RespondTo[:each], layouts: C::RespondTo[:each]] => C::Any
# @param [Nanoc::Int::Configuration] config
# @param [Enumerable<Nanoc::Int::CodeSnippet>] code_snippets
# @param [Enumerable<Nanoc::Int::Item>] items
# @param [Enumerable<Nanoc::Int::Layout>] layouts
def initialize(config:, code_snippets:, items:, layouts:)
@@ -15,19 +18,22 @@
ensure_identifier_uniqueness(@items, 'item')
ensure_identifier_uniqueness(@layouts, 'layout')
end
+ contract C::None => self
# Compiles the site.
#
# @return [void]
#
# @since 3.2.0
def compile
compiler.run_all
+ self
end
+ contract C::None => Nanoc::Int::Compiler
# Returns the compiler for this site. Will create a new compiler if none
# exists yet.
#
# @return [Nanoc::Int::Compiler] The compiler for this site
def compiler
@@ -37,26 +43,30 @@
attr_reader :code_snippets
attr_reader :config
attr_reader :items
attr_reader :layouts
+ contract C::None => self
# Prevents all further modifications to itself, its items, its layouts etc.
#
# @return [void]
def freeze
config.freeze
items.freeze
layouts.freeze
code_snippets.__nanoc_freeze_recursively
+ self
end
+ contract C::RespondTo[:each], String => self
def ensure_identifier_uniqueness(objects, type)
seen = Set.new
objects.each do |obj|
if seen.include?(obj.identifier)
raise Nanoc::Int::Errors::DuplicateIdentifier.new(obj.identifier, type)
end
seen << obj.identifier
end
+ self
end
end
end