/*1* ecstatic.js: Top-level plugin exposing ecstatic's static server to flatiron app2*3* (C) 2012, Nodejitsu, Inc.4* MIT LICENSE5*6*/78var path = require('path'),9flatiron = require('../../flatiron'),10common = flatiron.common,11ecstatic;1213try {14//15// Attempt to require ecstatic.16//17ecstatic = require('ecstatic');18}19catch (ex) {20//21// Do nothing since this is a progressive enhancement22//23console.warn('flatiron.plugins.ecstatic requires the `ecstatic` module from npm');24console.warn('install using `npm install ecstatic`.');25console.trace();26process.exit(1);27}2829exports.name = 'ecstatic';3031exports.attach = function (options) {32var app = this;3334options = options || {};3536//37// Accept string `options`38//39if (typeof options === 'string') {40options = { root: options };41}4243//44// Attempt to merge defaults passed to `app.use(flatiron.plugins.ecstatic)`45// with any additional configuration that may have been loaded46options = common.mixin(47{},48options,49app.config.get('ecstatic') || {}50);5152app.config.set('ecstatic', options);5354//55// `app.static` api to be used by other plugins56// to server static files57//58app.static = function (dir) {59app.http.before = app.http.before.concat(ecstatic(dir, options));60}6162// * `options.dir`: Explicit path to assets directory63// * `options.root`: Relative root to the assets directory ('/app/assets')64// * `app.root`: Relative root to the assets directory ('/app/assets')65if (options.dir || options.root || app.root) {66app._ecstaticDir = options.dir67|| path.join(options.root || app.root, 'app', 'assets');6869//70// Serve ecstaticDir using middleware in union71//72app.static(app._ecstaticDir);73}74}757677