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