tigefa4u/tigefa4u.github.io

View on GitHub
_posts/2013-10-18-nanoc-3.md

Summary

Maintainability
Test Coverage
---
layout: post
title: "nanoc 3"
description: "nanoc is a simple but very flexible static site generator written in Ruby."
categories: ruby
tags: [github, ruby, gem]
---

**Please take a moment and [donate](http://pledgie.com/campaigns/9282) to nanoc. A lot of time has gone into developing nanoc, and I would like to keep the current pace. Your support will ensure that nanoc will continue to improve.**

# nanoc 3

nanoc is a simple but very flexible static site generator written in Ruby.
It operates on local files, and therefore does not run on the server. nanoc
`compiles` the local source files into HTML (usually), by evaluating eRuby,
Markdown, etc.

Note: This documentation looks best with Yardoc, not RDoc.

## Resources

The [nanoc web site](http://nanoc.ws) contains a few useful resources to help you get started with nanoc. If you need further assistance, the following places will help you out:

* The [discussion group](http://groups.google.com/group/nanoc)
* The [IRC channel](irc://chat.freenode.net/#nanoc)

## Versioning

nanoc uses [Semantic Versioning](http://semver.org/).

## Source Code Documentation

The source code is located in `lib/nanoc` and is structured in a few
directories:

* `base` contains the bare essentials necessary for nanoc to function
  * `source_data` contains raw, uncompiled content that will be compiled
  * `result_data` contains the compiled content
  * `compilation` contains the compilation functionality
* `cli` contains the commandline interface
* `data_sources` contains the standard data sources ({Nanoc::DataSource}
  subclasses), such as the filesystem data source
* `extra` contains stuff that is not needed by nanoc itself, but which may
  be used by helpers, data sources, filters or VCSes.
* `filters` contains the standard filters ({Nanoc::Filter} subclasses)
  such as ERB, Markdown, Haml,
* `helpers` contains helpers, which provide functionality some sites
  may find useful, such as the blogging and tagging helpers
* `tasks` contains rake tasks that perform a variety of functions such as
  validating HTML and CSS, uploading compiled files,

The namespaces (modules) are organised like this:

* {Nanoc} is the namespace for everything nanoc-related (obviously). The
  classes in `lib/nanoc/base` are part of this module (not `Nanoc::Base`)
* {Nanoc::CLI} containing everything related to the commandline tool.
* {Nanoc::DataSources} contains the data sources
* {Nanoc::Helpers} contains the helpers
* {Nanoc::Extra} contains useful stuff not needed by nanoc itself
* {Nanoc::Filters} contains the (textual) filters

The central class in nanoc is {Nanoc::Site}, so you should start there if
you want to explore nanoc from a technical perspective.

## Dependencies

nanoc has few dependencies. It is possible to use nanoc programmatically
without any dependencies at all, but if you want to use nanoc in a proper way,
you'll likely need some dependencies:

* The **commandline frontend** depends on `cri`.
* The **autocompiler** depends on `mime-types` and `rack`.
* Filters and helpers likely have dependencies on their own too.

If you're developing for nanoc, such as writing custom filters or helpers, you
may be interested in the development dependencies:

* For **documentation generation** you'll need `yard`.
* For **packaging** you'll need `rubygems` (1.3 or newer).
* For **testing** you'll need `mocha` and `minitest`.

## Contributors

(In alphabetical order)

* Ben Armston
* Colin Barrett
* Bil Bas
* Dmitry Bilunov
* Fabian Buch
* Devon Luke Buchanan
* Stefan Buhler
* Dan Callahan
* Brian Candler
* Jack Chu
* Michal Cichra
* Zaiste de Grengolada
* Vincent Driessen
* Chris Eppstein
* Jeff Forcier
* Riley Goodside
* Felix Hanley
* Justin Hileman
* Starr Horne
* Daniel Hofstetter
* Tuomas Kareinen
* Greg Karekinian
* Matt Keveney
* Kevin Lynagh
* Go Maeda
* Nikhil Marathe
* Daniel Mendler
* Stuart Montgomery
* Ale Munoz
* John Nishinaga
* Gregory Pakosz
* Nicky Peeters
* Christian Plessl
* Damien Pollet
* Sime Ramov
* Xavier Shay
* Arnau Siches
* Soryu
* Eric Sunshine
* Dennis Sutch
* Takashi Uchibe
* Matthias Vallentin
* Ruben Verborgh
* Scott Vokes
* Toon Willems

## Contact

You can reach me at <denis.defreyne@stoneship.org>.