Static sites made powerful
Install via RubyGems:
$ gem install stasisAt its most essential, Stasis takes a directory tree with supported template files and renders them.
Example directory structure:
project/
index.html.haml
images/
image.pngRun stasis:
$ cd project
$ stasisStasis creates a public directory:
project/
index.html.haml
images/
image.png
public/
index.html
images/
image.pngindex.html.haml becomes public/index.html.
Unrecognized extensions are copied as-is (image.png).
Controllers contain Ruby code that executes once before all templates render.
Example directory structure:
project/
controller.rb
index.html.haml
styles/
controller.rb
style.css.sassYou may have a controller at any directory level.
Use before blocks within controller.rb to execute code before a template renders.
controller.rb:
before 'index.html.haml' do
@something = true
end@something is now available to the index.html.haml template.
The before method can take any number of paths and/or regular expressions:
before 'index.html.haml', /.*html\.erb/ do
@something = true
endlayout.html.haml:
%html
%body= yieldIn controller.rb, set the default layout:
layout 'layout.html.haml'Set the layout for a particular template:
layout 'index.html.haml' => 'layout.html.haml'Use a regular expression:
layout /.*html.haml/ => 'layout.html.haml'Set the layout from a before block:
before 'index.html.haml' do
layout 'layout.html.haml'
endWithin a template:
%html
%body= render '_partial.html.haml'Within a before block:
before 'index.html.haml' do
@partial = render '_partial.html.haml'
endText:
render :text => 'Hello'Local variables:
render 'index.html.haml', :locals => { :x => true }Include a block for the template to yield to:
render 'index.html.haml' { 'Hello' }The instead method changes the output of the template being rendered:
before 'index.html.haml' do
instead render('subdirectory/index.html.haml')
endcontroller.rb:
helpers do
def say_hello
'Hello'
end
endThe say_hello method is now available to all before blocks and templates.
Use the ignore method in controller.rb to ignore certain paths.
Ignore filenames with an underscore at the beginning:
ignore /\/_.*/Use the priority method in controller.rb to change the file process order.
Copy .txt files before rendering the index.html.erb template:
priority /.*txt/ => 2, 'index.html.erb' => 1The default priority is 0 for all files.
Always execute the stasis command in the root directory of your project.
Development mode (auto-regenerate on save):
$ stasis -dSpecify a port to start an HTTP server:
$ stasis -d 3000Only render specific files or directories:
$ stasis -o index.html.haml,subdirectoryChange the public (destination) directory:
$ stasis -p ../publicInstantiate a Stasis object:
stasis = Stasis.new('/path/to/project/root')Optionally specify a destination directory:
stasis = Stasis.new('/project', '/html')Render all templates:
stasis.renderRender a specific template or directory:
stasis.render('index.html.haml', 'subdirectory')Stasis uses Tilt to support the following template engines:
ENGINE FILE EXTENSIONS
-------------------------- -----------------------
ERB .erb, .rhtml
Interpolated String .str
Erubis .erb, .rhtml, .erubis
Haml .haml
Sass .sass
Scss .scss
Less CSS .less
Builder .builder
Liquid .liquid
RDiscount .markdown, .mkd, .md
Redcarpet .markdown, .mkd, .md
BlueCloth .markdown, .mkd, .md
Kramdown .markdown, .mkd, .md
Maruku .markdown, .mkd, .md
RedCloth .textile
RDoc .rdoc
Radius .radius
Markaby .mab
Nokogiri .nokogiri
CoffeeScript .coffee
Creole (Wiki markup) .wiki, .creole
WikiCloth (Wiki markup) .wiki, .mediawiki, .mw
Yajl .yajlTake a look at the Stasis project that automatically generated this web site from the project README.
No open issues yet, or sync has not completed.