Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Smart asset packaging for Rails, Sinatra, and Stasis
Ruby JavaScript CSS
Branch: master
Failed to load latest commit information.
bin Switching back to Closure Compiler and YUI Compressor
lib Switching back to Closure Compiler and YUI Compressor
recipes
spec
.gitignore Using file size and Murmur3 file hashing to determine if packages sho…
.travis.yml Revert "Removing framework envs from travis.yml"
Gemfile Removing bundler from lib file
LICENSE New system for specifying gem versions, gemspec info, activating gems
README.md
Rakefile Trying to fix Travis again
smart_asset.gemspec Version 0.6.0 [skip ci]

README.md

SmartAsset

Smart asset packaging for Rails, Sinatra, and Stasis.

Build Status

Features

Similar to AssetPackager, but with the following changes:

  • Uses file size and hashing to determine if a new compressed package should be created
  • Closure Compiler for javascript compression
  • YUI Compressor for css compression
  • Framework agnostic (adapters provided for Rails 2, Rails 3, Sinatra, and Stasis)

Installation

Install gem

gem install smart_asset

Install

Rails 2

config/environment.rb

config.gem 'smart_asset'

Rails 3

Gemfile

gem 'smart_asset'

Sinatra

require 'sinatra/base'
require 'smart_asset'

class Application < Sinatra::Base
  include SmartAsset::Adapters::Sinatra
end

Create Configuration File

config/assets.yml

javascripts:
  package_1:
    - jquery/jquery
    - underscore
  package_2:
    - front_page
stylesheets:
  package_1:
    - blueprint/blueprint
    - 960
  package_2:
    - front_page

By default, SmartAsset will look for assets in public/javascripts and public/stylesheets.

Create Packaged Assets

cd to your project and run

smart_asset

Only the assets that have changed are repackaged.

Include Packages in Your Template

<%= javascript_include_merged :package_1, :package_2 %>
<%= stylesheet_link_merged :package_1, :package_2 %>

Migrating from AssetPackager

  • rm vendor/plugins/asset_packager
  • Install SmartAsset
  • Move config/asset_packages.yml to config/assets.yml
  • Instead of running rake asset:packager:build_all, run smart_asset

Other Options

config/assets.yml

You may add extra options to your config/assets.yml file.

Below are the default values (excluding asset_host):

# Append random numbers to script paths on each request
append_random:
  development: true

# Asset host URL (defaults to ActionController::Base.asset_host or nil)
asset_host:
  production: http://assets%d.mydomain.com

# How many asset hosts you have (use if asset_host defined with %d)
asset_host_count: 4

# Public directory
public: public

# Package destination directory (within the public directory)
destination:
  javascripts: javascripts/packaged
  stylesheets: stylesheets/packaged

# Asset source directories (within the public directory)
sources:
  javascripts: javascripts
  stylesheets: stylesheets

smart_asset

You may use environment variables with the smart_asset command to alter its behavior.

DEBUG=1
Output commands that are running, leave the tmp file around for inspection

PACKAGE=package_1
Only compress a specific package

MODIFIED='12/1/2010 12:00'
Use a default modified time other than Time.now for non-version controlled files

WARN=1
Get compression warnings

Example:

WARN=1 smart_asset

Running Specs

Forks and contributions to this project are much appreciated, but please make sure the specs run!

To run the basic specs:

spec spec

There are also framework specs to make sure the helpers work in Rails 2, Rails 3, and Sinatra 1:

spec/run
Something went wrong with that request. Please try again.