0.0
No commit activity in last 3 years
No release in over 3 years
Provides asset stamping using git revisions, environments, and a few view helpers.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

>= 0
>= 0
 Project Readme

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.