Description
Stasis plugin for asset stamping, before/after_all, blogs, front-matter yaml, multi templates, sitemaps, and trailing slashes.
Installation
$ gem install homeostasis
In your controller:
require 'rubygems'
require 'homeostasis'
This requires the current directory to be under git
version control.
Asset Stamping
By default, assets matching /\.(jpg|png|gif|css|js)$/i
will be stamped.
So if your root directory is like this:
background.jpg
index.html.haml
script.js
styles.css
You'll end up with something like this:
background.sha1.jpg
index.html
script.sha1.js
styles.sha1.css
Generated files in the public
directory will go through a global search and
replace. By default, it'll only do this on html
, css
, and js
files.
You can configure this with the replace_matcher
option. You can also
configure the regex for asset matching with matcher
:
Homeostasis::Asset.config(
:replace_matcher => /.(html|css|js)$/i,
:matcher => /myregex$/i)
You can concatenate multiple assets into a single file:
Homeostasis::Asset.concat 'all.js', %w(jquery.js mine.js)
Homeostasis::Asset.concat 'all.css', %w(reset.css mine.css)
Before and After All Events
In your controller:
before_all do
# called exactly once before all files are rendered
end
after_all do
# called exactly once after all files are rendered
end
Blog
In your controller:
Homeostasis::Blog.config(
:directory => 'blog', # directory of posts, required
:path => '', # post path prefix, defaults to directory - '' for none
:url => 'http://example.com', # site url, required
:title => 'Blog Title',
:desc => 'Blog Description for RSS feed')
Post files should be in the format yyyy-mm-dd-permalink.*
. Use YAML
front-matter for any metadata you want. date
and path
will be added
automatically for you.
---
title: Title Goes Here
---
You'll have to create your own blog/index.html
. Use the blog_posts
helper
to construct it:
- blog_posts.each do |post|
%span.date post['date'].strftime("%m/%d/%Y")
%a{:href => post['path']}= post['title']
Front-Matter YAML
In your views:
---
title: Lorem Ipsum
desc: Quick fox over lazy dog.
---
%div
Page continues as normal here
%h1= front['title']
%p= front['desc']
You can configure which files to check in controller.rb
. Here's the default:
Homeostasis::Front.config(:matcher => /\.erb|\.haml|\.html|\.md$/)
Just start the file with YAML inside a comment with 2-space indentation. The
data will be available from the front
method in your views and controller.
There's also a front_site
helper which contains the data for all pages for
cross-page access.
Note that path
is automatically assigned if left blank. Its value will be
the public path to the page.
Multi Templates
Use multiple file extensions and have Tilt automatically process them. The
filename example.html.md.erb
will first run through an ERB processor, then
a Markdown processor:
# Sample Markdown <%= 1 + 2 %>
Will become:
<h1>Sample Markdown 3</h1>
Sitemap
A sitemap will automatically be generated in public/sitemap.xml
. You'll need
to set the root URL for this to happen:
Homeostasis::Sitemap.config(
:url => 'http://example.com', # required
:lastmod => false # default is true
)
loc
and lastmod
will be generated for each page. Use front-yaml to set the
changefreq
or priority
:
---
changefreq: monthly
priority: 0.9
---
Use the key private
to avoid generating an entry:
---
private: true
---
Trailing Slash
This turns every page into a directory with an index.html
file. So instead
of:
index.html
blog.html
about.html
You'll get:
index.html
blog/index.html
about/index.html
This works well with an htaccess
file that automatically appends trailing
slashes to URLs.
TODO
- fix work on templates without front-matter yaml
- fix filenames like 'jquery-1.9.1.js'
- fix images in RSS
- fix Stasis'
render
to work with Front/Multi plugins (maybe override Tilt#render? instead of using hooks) - fix Asset plugin to provide asset helper method instead of global gsub
- fix configurations to use config method instead of hashes (for more type checks)
- fix Yaml front matter, don't parse if error (maybe warning instead?)
- add standard gem directory structure
- add plugin architecture to make each optional
- add minification
- add tilt 2.0 support
License
Copyright Hugh Bien - http://hughbien.com. Released under BSD License, see LICENSE.md for more info.