Module: Webgen

Defined in:
lib/webgen/website.rb,
lib/webgen/cli.rb,
lib/webgen/tag.rb,
lib/webgen/node.rb,
lib/webgen/page.rb,
lib/webgen/path.rb,
lib/webgen/tree.rb,
lib/webgen/cache.rb,
lib/webgen/common.rb,
lib/webgen/logger.rb,
lib/webgen/output.rb,
lib/webgen/source.rb,
lib/webgen/context.rb,
lib/webgen/version.rb,
lib/webgen/loggable.rb,
lib/webgen/languages.rb,
lib/webgen/blackboard.rb,
lib/webgen/deprecated.rb,
lib/webgen/webgentask.rb,
lib/webgen/context/tags.rb,
lib/webgen/configuration.rb,
lib/webgen/context/nodes.rb,
lib/webgen/sourcehandler.rb,
lib/webgen/websiteaccess.rb,
lib/webgen/context/render.rb,
lib/webgen/websitemanager.rb,
lib/webgen/contentprocessor.rb,
lib/webgen/source/filesystem.rb,
lib/webgen/source/tararchive.rb

Overview

The Webgen namespace houses all classes/modules used by webgen.

webgen

webgen is a command line application for generating a web site from templates and content files. Despite this fact, the implementation also provides adequate support for using webgen as a library and full support for extending it.

Extending webgen

webgen can be extended very easily. Any file called init.rb put into the ext/ directory of the website or into one of its sub-directories is automatically loaded on Website#init.

You can extend webgen in several ways. However, no magic or special knowledge is needed since webgen relies on the power of Ruby itself. So, for example, an extension is just a normal Ruby class. Most extension types provide a Base module for mixing into an extension which provides default implementations for needed methods.

Following are links to detailed descriptions on how to develop specific types of extensions:

Webgen::Source

Information on how to implement a class that provides source paths for webgen. For example, one could implement a source class that uses a database as backend.

Webgen::Output

Information on how to implement a class that writes content to an output location. The default output class just writes to the file system. One could, for example, implement an output class that writes the generated files to multiple locations or to a remote server.

Webgen::ContentProcessor

Information on how to develop an extension that processes the content. For example, markup-to-HTML converters are implemented as content processors in webgen.

Webgen::SourceHandler::Base

Information on how to implement a class that handles objects of type source Path and creates Node instances. For example, Webgen::SourceHandler::Page handles the conversion of .page files to .html files.

Webgen::Tag::Base

Information on how to implement a webgen tag. webgen tags are used to provide an easy way for users to include dynamic content such as automatically generated menus.

Blackboard services

The Blackboard class provides an easy communication facility between objects. It implements the Observer pattern on the one side and allows the definition of services on the other side. One advantage of a service over the direct use of an object instance method is that the caller does not need to how to find the object that provides the service. It justs uses the Website#blackboard instance. An other advantage is that one can easily exchange the place where the service was defined without breaking extensions that rely on it.

Following is a list of all services available in the stock webgen distribution by the name and the method that implements it (which is useful for looking up the parameters of service).

:create_fragment_nodes

SourceHandler::Fragment#create_fragment_nodes

:templates_for_node

SourceHandler::Template#templates_for_node

:parse_html_headers

SourceHandler::Fragment#parse_html_headers

:output_instance

Output.instance

:content_processor_names

ContentProcessor.list

:content_processor

ContentProcessor.for_name

:create_sitemap

Common::Sitemap#create_sitemap

:create_directories

SourceHandler::Directory#create_directories

:create_nodes

SourceHandler::Main#create_nodes

:create_nodes_from_paths

SourceHandler::Main#create_nodes_from_paths

:source_paths

SourceHandler::Main#find_all_source_paths

Following is the list of all messages that can be listened to:

:node_flagged

See Node#flag

:node_unflagged

See Node#unflag

:node_changed?

See Node#changed?

:node_meta_info_changed?

See Node#meta_info_changed?

:before_node_created

Sent by the :create_nodes service before a node is created (handled by a source handler) with the parent and the path as arguments.

:after_node_created

Sent by the :create_nodes service after a node has been created with the created node as argument.

:before_node_deleted

See Tree#delete_node

Other places to look at

Here is a list of modules/classes that are primarily used throughout webgen or provide useful methods for developing extensions:

Common, Tree, Node, Path, Cache, Page

Defined Under Namespace

Modules: CLI, Common, ContentProcessor, LanguageManager, Loggable, Output, Source, SourceHandler, Tag, WebsiteAccess Classes: Blackboard, Cache, Configuration, Context, Language, Logger, Node, Page, Path, Tree, WebgenTask, Website, WebsiteManager

Constant Summary collapse

VERSION =

The version of webgen.

'0.5.9'

Class Method Summary collapse

Class Method Details

.const_missing(const) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
# File 'lib/webgen/deprecated.rb', line 36

def self.const_missing(const)
  if const.to_s == 'Block'
    warn("Deprecation warning (~ #{caller.first}): Webgen::Block name will be removed in one of the next releases - use Webgen::Page::Block instead!")
    Webgen::Page::Block
  elsif const.to_s == "WebgenPageFormatError"
    warn("Deprecation warning (~ #{caller.first}): Webgen::WebgenPageFormatError name will be removed in one of the next releases - use Webgen::Page::FormatError instead!")
    Webgen::Page::FormatError
  else
    super
  end
end

.data_dirObject

Returns the data directory for webgen.



145
146
147
148
149
150
151
152
153
# File 'lib/webgen/website.rb', line 145

def self.data_dir
  unless defined?(@@data_dir)
    require 'rbconfig'
    @@data_dir = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'data', 'webgen'))
    @@data_dir = File.expand_path(File.join(Config::CONFIG["datadir"], "webgen")) if !File.exists?(@@data_dir)
    raise "Could not find webgen data directory! This is a bug, report it please!" unless File.directory?(@@data_dir)
  end
  @@data_dir
end