Skip to content

Commit

Permalink
use an options object, rather than loads of arguments
Browse files Browse the repository at this point in the history
  • Loading branch information
phpnode committed Jul 5, 2014
1 parent 2ced4f9 commit 32ee39a
Showing 1 changed file with 27 additions and 30 deletions.
57 changes: 27 additions & 30 deletions lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,16 @@ exports.Collection = require('./collection');
* Compile a template from a string.
*
* @param {String} input The string to compile.
* @param {String} name The view name.
* @param {Function} Template The class for the template.
* @param {Object} minify Minifier options.
* @param {Object} options The options for the compiler.
* @return {Template} The template instance.
*/
exports.string = function (input, name, Template, minify) {
name = name || '';
Template = Template || exports.Template;
exports.string = function (input, options) {
options = options || {};
options.name = options.name || '';
options.Template = options.Template || exports.Template;

if (minify) {
input = minifier.minify(input, typeof minify === 'object' ? minify : {
if (options.minify) {
input = minifier.minify(input, typeof options.minify === 'object' ? options.minify : {
collapseWhitespace: true,
collapseBooleanAttributes: true
});
Expand All @@ -41,47 +40,47 @@ exports.string = function (input, name, Template, minify) {
var compiled = this.codegen.generate(this.compiler.compile(input));

var module = {exports: {
name: name,
name: options.name,
source: input,
compiledSource: compiled
}};

(new Function('module', 'exports', compiled))(module, module.exports); // jshint ignore: line
return new Template(module.exports);
return new options.Template(module.exports);
};

/**
* Compile a template from a file.
*
* @param {String} filename The filename to compile.
* @param {String} name The view name.
* @param {Function} Template The class for the template.
* @param {Object} minify Minifier options.
* @param {Object} options The options for the compiler.
* @return {Template} The template instance.
*/
exports.file = function (filename, name, Template, minify) {
exports.file = function (filename, options) {
var content = fs.readFileSync(filename, 'utf8');
return exports.string(content, name || filename, Template, minify);
options = options || {};
options.name = options.name || filename;
return exports.string(content, options);
};

/**
* Compile a directory of templates and return a template collection.
*
* @param {String} dirname The directory containing the templates.
* @param {String} extname The file extension for the templates, defaults to `.html`.
* @param {Function} Template The template class to use.
* @param {Object} minify Minifier options.
* @param {Object} options The options for the compiler.
* @return {Collection} A collection of templates.
*/
exports.dir = function (dirname, extname, Template, minify) {
exports.dir = function (dirname, options) {
dirname = path.resolve(dirname);
extname = extname || '.html';
var files = findAllFiles(dirname, extname).reduce(function (list, filename) {
options = options || {};
options.extname = options.extname || '.html';
var files = findAllFiles(dirname, options.extname).reduce(function (list, filename) {
var name = filename.slice(dirname.length);
if (name.charAt(0) === '/' || name.charAt(0) === '\\') {
name = name.slice(1);
}
list[name] = exports.file(filename, name, Template, minify);
options.name = name;
list[name] = exports.file(filename, options);
return list;
}, {});
return new exports.Collection(files);
Expand All @@ -96,10 +95,10 @@ exports.dir = function (dirname, extname, Template, minify) {
*/
exports.express = function (dirname, options) {
options = options || {};
var collection = exports.dir(dirname, options.extname, options.Template, options.minify),
var collection = exports.dir(dirname, options),
prefixLength = dirname.length;
if (options.watch) {
exports.watch(dirname, collection);
exports.watch(dirname, collection, options);
}
return function (filename, data, done) {
var result = fast.try(function () {
Expand All @@ -120,16 +119,14 @@ exports.express = function (dirname, options) {
*
* @param {String} dirname The base path for the collection.
* @param {Collection} collection The collection to watch.
* @param {Object} options The options for the collection.
*/
exports.watch = function (dirname, collection) {
var options = {
persistent: false
};
exports.watch = function (dirname, collection, options) {
dirname = path.resolve(dirname);
watch(dirname, options, function (filename) {
watch(dirname, {persistent: false}, function (filename) {
var result = fast.try(function () {
var viewname = filename.slice(dirname.length + 1);
collection.set(viewname, exports.file(filename));
collection.set(viewname, exports.file(filename, options));
});
if (result instanceof Error) {
console.error(result);
Expand Down

0 comments on commit 32ee39a

Please sign in to comment.