A helper is a module with functions that can be used during filtering.

Helpers need to be activated before they can be used. To activate a helper, call either use_helper or include with the name of the helper as the argument, like this (in a file in the lib/ directory, such as lib/helpers.rb):

use_helper Nanoc::Helpers::Blogging

Take a look at the helpers reference for a list of helpers that are included with Nanoc.

Writing helpers

To write a helper, create a file in the lib/ directory of the site. In that file, declare a module, and put your helper methods inside that module.

For example, the file lib/random_text.rb could contain this:

module RandomTextHelper
  def random_text
    "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do" \
    "eiusmod tempor incididunt ut labore et dolore magna aliqua."

To activate this helper, call use_helper, for instance in lib/helpers.rb:

use_helper RandomTextHelper

The methods provided by this helper can now be used during filtering. For example, the default layout, assuming it is filtered using ERB, can now generate random text like this:

<p><%= random_text %></p>

Pitfall: helper load order

Files in the lib/ directory are loaded alphabetically. This can cause Nanoc to try to activate a helper before it is loaded.

For example, this situation will arise if helpers live in a lib/helpers/ directory, with the lib/helpers.rb file containing the #use_helper calls:

% tree lib
├── helpers.rb
└── helpers
    ├── link_to_id.rb
    └── toc.rb

The lib/helpers.rb file will be loaded before anything in lib/helpers/, and will thus result in an error such as NameError: uninitialized constant LinkToId.

To resolve this problem, rename lib/helpers.rb to lib/helpers_.rb, so that it gets loaded after the helpers have loaded:

% tree lib
├── helpers
│   ├── link_to_id.rb
│   └── toc.rb
└── helpers_.rb