Parent

Class/Module Index [+]

Quicksearch

Nanoc::Site

The in-memory representation of a nanoc site. It holds references to the following site data:

In addition, each site has a {config} hash which stores the site configuration.

The physical representation of a {Nanoc::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.

Constants

DEFAULT_CONFIG

The default configuration for a site. A site's configuration overrides these options: when a {Nanoc::Site} is created with a configuration that lacks some options, the default value will be taken from `DEFAULT_CONFIG`.

DEFAULT_DATA_SOURCE_CONFIG

The default configuration for a data source. A data source's configuration overrides these options.

Public Class Methods

config_filename_for_cwd() click to toggle source

@return [String] filename of the nanoc config file in the current working directory, or nil if there is none

@api private

# File lib/nanoc/base/source_data/site.rb, line 289
def self.config_filename_for_cwd
  filenames = %( nanoc.yaml config.yaml )
  filenames.find { |f| File.file?(f) }
end
cwd_is_nanoc_site?() click to toggle source

@return [Boolean] true if the current working directory is a nanoc site, false otherwise

@api private

# File lib/nanoc/base/source_data/site.rb, line 282
def self.cwd_is_nanoc_site?
  !self.config_filename_for_cwd.nil?
end
new(dir_or_config_hash) click to toggle source

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.
# File lib/nanoc/base/source_data/site.rb, line 47
def initialize(dir_or_config_hash)
  build_config(dir_or_config_hash)
end

Public Instance Methods

captures_store() click to toggle source

@api private

# File lib/nanoc/helpers/capturing.rb, line 60
def captures_store
  @captures_store ||= CapturesStore.new
end
captures_store_compiled_items() click to toggle source

@api private

# File lib/nanoc/helpers/capturing.rb, line 65
def captures_store_compiled_items
  require 'set'
  @captures_store_compiled_items ||= Set.new
end
code_snippets() click to toggle source

Returns this site’s code snippets.

@return [Array<Nanoc::CodeSnippet>] The list of code snippets in this

site
# File lib/nanoc/base/source_data/site.rb, line 109
def code_snippets
  load
  @code_snippets
end
compile() click to toggle source

Compiles the site.

@return [void]

@since 3.2.0

# File lib/nanoc/base/source_data/site.rb, line 56
def compile
  compiler.run
end
compiler() click to toggle source

Returns the compiler for this site. Will create a new compiler if none exists yet.

@return [Nanoc::Compiler] The compiler for this site

# File lib/nanoc/base/source_data/site.rb, line 64
def compiler
  @compiler ||= Compiler.new(self)
end
config() click to toggle source

Returns the site configuration. It has the following keys:

  • `text_extensions` (`Array<String>`) - A list of file extensions that will cause nanoc to threat the file as textual instead of binary. When the data source finds a content file with an extension that is included in this list, it will be marked as textual.

  • `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.

  • `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 `/`.

  • `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.

  • `enable_output_diff` (`Boolean`) - True when diffs should be generated for the compiled content of this site; false otherwise.

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).

  • `: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).

  • `: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.

@return [Hash] The site configuration

# File lib/nanoc/base/source_data/site.rb, line 171
def config
  @config
end
data_sources() click to toggle source

Returns the data sources for this site. Will create a new data source if none exists yet.

@return [Array<Nanoc::DataSource>] The list of data sources for this

site

@raise [Nanoc::Errors::UnknownDataSource] if the site configuration

specifies an unknown data source
# File lib/nanoc/base/source_data/site.rb, line 76
def data_sources
  load_code_snippets

  @data_sources ||= begin
    @config[:data_sources].map do |data_source_hash|
      # Get data source class
      data_source_class = Nanoc::DataSource.named(data_source_hash[:type])
      raise Nanoc::Errors::UnknownDataSource.new(data_source_hash[:type]) if data_source_class.nil?

      # Warn about deprecated data sources
      # TODO [in nanoc 4.0] remove me
      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,
        data_source_hash[:items_root],
        data_source_hash[:layouts_root],
        data_source_hash.merge(data_source_hash[:config] || {})
      )
    end
  end
end
freeze() click to toggle source

Prevents all further modifications to itself, its items, its layouts etc.

@return [void]

# File lib/nanoc/base/source_data/site.rb, line 216
def freeze
  config.freeze_recursively
  items.each         { |i|  i.freeze  }
  layouts.each       { |l|  l.freeze  }
  code_snippets.each { |cs| cs.freeze }
end
items() click to toggle source

Returns this site’s items.

@return [Array<Nanoc::Item>] The list of items in this site

# File lib/nanoc/base/source_data/site.rb, line 117
def items
  load
  @items
end
layouts() click to toggle source

Returns this site’s layouts.

@return [Array<Nanoc::Layouts>] The list of layout in this site

# File lib/nanoc/base/source_data/site.rb, line 125
def layouts
  load
  @layouts
end
load() click to toggle source

Loads the site data. It is not necessary to call this method explicitly; it will be called when it is necessary.

@api private

@return [void]

# File lib/nanoc/base/source_data/site.rb, line 235
def load
  return if @loaded || @loading
  @loading = true

  # Load all data
  load_code_snippets
  data_sources.each { |ds| ds.use }
  load_items
  load_layouts
  data_sources.each { |ds| ds.unuse }
  setup_child_parent_links

  # Load compiler too
  # FIXME this should not be necessary
  compiler.load

  @loaded = true
rescue => e
  unload
  raise e
ensure
  @loading = false
end
load_data(force=false) click to toggle source

@deprecated It is no longer necessary to explicitly load site data. It

is safe to remove all {#load_data} calls.
# File lib/nanoc/base/source_data/site.rb, line 225
def load_data(force=false)
  warn 'It is no longer necessary to call Nanoc::Site#load_data. This method no longer has any effect. All calls to this method can be safely removed.'
end
unload() click to toggle source

Undoes the effects of {load}. Used when {load} raises an exception.

@api private

# File lib/nanoc/base/source_data/site.rb, line 262
def unload
  return if @unloading
  @unloading = true

  @items_loaded = false
  @items = []
  @layouts_loaded = false
  @layouts = []
  @code_snippets_loaded = false
  @code_snippets = []

  compiler.unload

  @loaded = false
  @unloading = false
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.