lib/nanoc3/base/site.rb in nanoc3-3.1.0a2 vs lib/nanoc3/base/site.rb in nanoc3-3.1.0a3
- old
+ new
@@ -13,13 +13,14 @@
# configuration.
#
# A site also has several helper classes:
#
# * {#data_sources} (array of {Nanoc3::DataSource}) - A list of data sources
- # that are used for loading site data
+ # that are used for loading site data
+ #
# * {#compiler} ({Nanoc3::Compiler}) - The compiler that is used for
- # compiling items and their representations
+ # compiling items and their representations
#
# The physical representation of a {Nanoc3::Site} is usually a directory
# that contains a configuration file, site data, a rakefile, a rules file,
# etc. The way site data is stored depends on the data source.
class Site
@@ -36,67 +37,67 @@
# The default configuration for a site. A site's configuration overrides
# these options: when a {Nanoc3::Site} is created with a configuration
# that lacks some options, the default value will be taken from
# `DEFAULT_CONFIG`.
DEFAULT_CONFIG = {
+ :text_extensions => %w( css erb haml htm html less markdown md sass txt ),
:output_dir => 'output',
:data_sources => [ {} ],
:index_filenames => [ 'index.html' ]
}
# The site configuration. The configuration has the following keys:
#
# * `output_dir` ({String}) - The directory to which compiled items will
- # be written. This path is relative to the current working directory,
- # but can also be an absolute path.
+ # be written. This path is relative to the current working directory,
+ # but can also be an absolute path.
#
# * `data_sources` ({Array<Hash>}) - A list of data sources for this site.
- # See below for documentation on the structure of this list. By
- # default, there is only one data source of the filesystem type
- # mounted at `/`.
+ # See below for documentation on the structure of this list. By default,
+ # there is only one data source of the filesystem type mounted at `/`.
#
# * `index_filenames` ({Array<String>}) - A list of filenames that will be
- # stripped off full item paths to create cleaner URLs. For example,
- # `/about/` will be used instead of `/about/index.html`). The default
- # value should be okay in most cases.
+ # stripped off full item paths to create cleaner URLs. For example,
+ # `/about/` will be used instead of `/about/index.html`). The default
+ # value should be okay in most cases.
#
# The list of data sources consists of hashes with the following keys:
#
# * `:type` ({String}) - The type of data source, i.e. its identifier.
#
# * `:items_root` ({String}) - The prefix that should be given to all
- # items returned by the {#items} method (comparable to mount points
- # for filesystems in Unix-ish OSes).
+ # items returned by the {#items} method (comparable to mount points
+ # for filesystems in Unix-ish OSes).
#
# * `:layouts_root` ({String}) - The prefix that should be given to all
- # layouts returned by the {#layouts} method (comparable to mount
- # points for filesystems in Unix-ish OSes).
+ # layouts returned by the {#layouts} method (comparable to mount
+ # points for filesystems in Unix-ish OSes).
#
# * `:config` ({Hash}) - A hash containing the configuration for this data
- # source. nanoc itself does not use this hash. This is especially
- # useful for online data sources; for example, a Twitter data source
- # would need the username of the account from which to fetch tweets.
+ # source. nanoc itself does not use this hash. This is especially
+ # useful for online data sources; for example, a Twitter data source
+ # would need the username of the account from which to fetch tweets.
#
# @return [Hash] The site configuration
attr_reader :config
# @return [Time] The timestamp when the site configuration was last
- # modified
+ # modified
attr_reader :config_mtime
# @return [Time] The timestamp when the rules were last modified
attr_reader :rules_mtime
# @return [Proc] The code block that will be executed after all data is
- # loaded but before the site is compiled
+ # loaded but before the site is compiled
attr_accessor :preprocessor
# Creates a site object for the site specified by the given
# `dir_or_config_hash` argument.
#
# @param [Hash, String] dir_or_config_hash If a string, contains the path
- # to the site directory; if a hash, contains the site configuration.
+ # to the site directory; if a hash, contains the site configuration.
def initialize(dir_or_config_hash)
build_config(dir_or_config_hash)
@code_snippets_loaded = false
@items_loaded = false
@@ -113,25 +114,28 @@
# Returns the data sources for this site. Will create a new data source if
# none exists yet.
#
# @return [Array<Nanoc3::DataSource>] The list of data sources for this
- # site
+ # site
#
# @raise [Nanoc3::Errors::UnknownDataSource] if the site configuration
- # specifies an unknown data source
+ # specifies an unknown data source
def data_sources
@data_sources ||= begin
@config[:data_sources].map do |data_source_hash|
# Get data source class
data_source_class = Nanoc3::DataSource.named(data_source_hash[:type])
raise Nanoc3::Errors::UnknownDataSource.new(data_source_hash[:type]) if data_source_class.nil?
# Warn about deprecated data sources
# TODO [in nanoc 4.0] remove me
- if data_source_hash[:type] == 'filesystem'
- warn "Warning: the 'filesystem' data source has been renamed to 'filesystem_verbose'. Using 'filesystem' will work in nanoc 3.1.x, but it will likely not work anymore in a future release of nanoc. Please update your data source configuration and replace 'filesystem' with 'filesystem_verbose'."
+ case data_source_hash[:type]
+ when 'filesystem'
+ warn "Warning: the 'filesystem' data source has been renamed to 'filesystem_verbose'. Using 'filesystem' will work in nanoc 3.1.x, but it will likely not work anymore in a future release of nanoc. Please update your data source configuration and replace 'filesystem' with 'filesystem_verbose'."
+ when 'filesystem_combined', 'filesystem_compact'
+ warn "Warning: the 'filesystem_combined' and 'filesystem_compact' data source has been merged into the new 'filesystem_unified' data source. Using 'filesystem_combined' and 'filesystem_compact' will work in nanoc 3.1.x, but it will likely not work anymore in a future release of nanoc. Please update your data source configuration and replace 'filesystem_combined' and 'filesystem_compact with 'filesystem_unified'."
end
# Create data source
data_source_class.new(
self,
@@ -147,11 +151,11 @@
# with the site and fetch all site data. The site data is cached, so
# calling this method will not have any effect the second time, unless
# the `force` parameter is true.
#
# @param [Boolean] force If true, will force load the site data even if it
- # has been loaded before, to circumvent caching issues
+ # has been loaded before, to circumvent caching issues
#
# @return [void]
def load_data(force=false)
# Don't load data twice
return if instance_variable_defined?(:@data_loaded) && @data_loaded && !force
@@ -177,35 +181,35 @@
end
# Returns this site’s code snippets.
#
# @return [Array<Nanoc3::CodeSnippet>] The list of code snippets in this
- # site
+ # site
#
# @raise [Nanoc3::Errors::DataNotYetAvailable] if the site data hasn’t
- # been loaded yet (call {#load_data} to load the site data)
+ # been loaded yet (call {#load_data} to load the site data)
def code_snippets
raise Nanoc3::Errors::DataNotYetAvailable.new('Code snippets', false) unless @code_snippets_loaded
@code_snippets
end
# Returns this site’s items.
#
# @return [Array<Nanoc3::Item>] The list of items in this site
#
# @raise [Nanoc3::Errors::DataNotYetAvailable] if the site data hasn’t
- # been loaded yet (call {#load_data} to load the site data)
+ # been loaded yet (call {#load_data} to load the site data)
def items
raise Nanoc3::Errors::DataNotYetAvailable.new('Items', true) unless @items_loaded
@items
end
# Returns this site’s layouts.
#
# @return [Array<Nanoc3::Layouts>] The list of layout in this site
#
# @raise [Nanoc3::Errors::DataNotYetAvailable] if the site data hasn’t
- # been loaded yet (call {#load_data} to load the site data)
+ # been loaded yet (call {#load_data} to load the site data)
def layouts
raise Nanoc3::Errors::DataNotYetAvailable.new('Layouts', true) unless @layouts_loaded
@layouts
end