From 222a27de59ded33444eddb380667e85ce4c9361d Mon Sep 17 00:00:00 2001 From: ismay Date: Thu, 6 Aug 2015 17:04:12 +0200 Subject: [PATCH] Update eslint config --- .eslintrc | 1 - Makefile | 2 +- lib/helpers/check.js | 34 +++++++++++++++++++ lib/index.js | 79 +++++++++++++++++++++++++++++++------------- test/index.js | 40 ++++++++++++++++------ 5 files changed, 121 insertions(+), 35 deletions(-) create mode 100644 lib/helpers/check.js diff --git a/.eslintrc b/.eslintrc index 0be8323..b87edb4 100644 --- a/.eslintrc +++ b/.eslintrc @@ -8,7 +8,6 @@ rules: quotes: [2, "single", "avoid-escape"] # Relax rules to allow current code-style - curly: [2, "multi"] new-cap: 0 no-shadow: 0 no-unused-vars: 0 diff --git a/Makefile b/Makefile index b8ff528..f1aa0ea 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -eslint=node_modules/.bin/eslint lib/index.js test/index.js +eslint=node_modules/.bin/eslint lib/**/*.js test/index.js mocha=node_modules/.bin/mocha --reporter spec --harmony-generators node_modules: package.json diff --git a/lib/helpers/check.js b/lib/helpers/check.js new file mode 100644 index 0000000..f2a5446 --- /dev/null +++ b/lib/helpers/check.js @@ -0,0 +1,34 @@ +/** + * Dependencies + */ +var match = require('multimatch'); +var utf8 = require('is-utf8'); + +/** + * Expose `check` + */ +module.exports = check; + +/** + * Helper for checking whether a file should be processed. + * + * @param {Object} files + * @param {String} file + * @param {String} pattern + * @return {Boolean} + */ +function check(files, file, pattern){ + var data = files[file]; + + // Don't process binary files + if (!utf8(data.contents)) { + return false; + } + + // Only process files that match the pattern (if there is a pattern) + if (pattern && !match(file, pattern)[0]) { + return false; + } + + return true; +} diff --git a/lib/index.js b/lib/index.js index cd65eac..a841bd9 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,21 +1,27 @@ +/** + * Dependencies + */ var consolidate = require('consolidate'); var debug = require('debug')('metalsmith-layouts'); var each = require('async').each; var extend = require('extend'); -var match = require('multimatch'); var omit = require('lodash.omit'); -var utf8 = require('is-utf8'); + +/** + * Helpers + */ +var check = require('./helpers/check'); /** * Expose `plugin`. */ - module.exports = plugin; /** - * Settings. + * Settings + * + * Options supported by metalsmith-layouts */ - var settings = ['engine', 'directory', 'pattern', 'default']; /** @@ -30,56 +36,83 @@ var settings = ['engine', 'directory', 'pattern', 'default']; */ function plugin(opts){ + /** + * Init + */ opts = opts || {}; - if (typeof opts === 'string') opts = { engine: opts }; - if (!opts.engine) throw new Error('"engine" option required'); + // Accept string option to specify the engine + if (typeof opts === 'string') { + opts = {engine: opts}; + } + + // An engine should be specified + if (!opts.engine) { + throw new Error('"engine" option required'); + } + + // Throw an error for unsupported engines or typos + if (!consolidate[opts.engine]) { + throw new Error('Unknown template engine: "' + opts.engine + '"'); + } + + // Map options to local variables var engine = opts.engine; var dir = opts.directory || 'layouts'; var pattern = opts.pattern; var def = opts.default; + + // Move all unrecognised options to params var params = omit(opts, settings); - // Throw an error for unsupported engines or typos - if (!consolidate[engine]) throw new Error('Unknown template engine: "' + engine + '"'); - + /** + * Main plugin function + */ return function(files, metalsmith, done){ var metadata = metalsmith.metadata(); var matches = {}; - function check(file){ - var data = files[file]; - var lyt = data.layout || def; - if (!utf8(data.contents)) return false; - if (pattern && !match(file, pattern)[0]) return false; - if (!lyt) return false; - return true; - } - + /** + * Stringify files that pass the check, and store in matches + */ Object.keys(files).forEach(function(file){ - if (!check(file)) return; + if (!check(files, file, pattern)) { + return; + } + debug('stringifying file: %s', file); var data = files[file]; data.contents = data.contents.toString(); matches[file] = data; }); - each(Object.keys(matches), convert, done); - + /** + * Render files + */ function convert(file, done){ debug('converting file: %s', file); var data = files[file]; + + // Deep clone params (by passing 'true') var clonedParams = extend(true, {}, params); var clone = extend({}, clonedParams, metadata, data); var str = metalsmith.path(dir, data.layout || def); var render = consolidate[engine]; render(str, clone, function(err, str){ - if (err) return done(err); + if (err) { + return done(err); + } + data.contents = new Buffer(str); debug('converted file: %s', file); done(); }); } + + /** + * Render all matched files + */ + each(Object.keys(matches), convert, done); }; } diff --git a/test/index.js b/test/index.js index 7e2d3ca..c614e70 100644 --- a/test/index.js +++ b/test/index.js @@ -8,7 +8,9 @@ describe('metalsmith-layouts', function(){ Metalsmith('test/fixtures/basic') .use(layouts({ engine: 'swig' })) .build(function(err){ - if (err) return done(err); + if (err) { + return done(err); + } equal('test/fixtures/basic/expected', 'test/fixtures/basic/build'); done(); }); @@ -18,7 +20,9 @@ describe('metalsmith-layouts', function(){ Metalsmith('test/fixtures/basic') .use(layouts('swig')) .build(function(err){ - if (err) return done(err); + if (err) { + return done(err); + } equal('test/fixtures/basic/expected', 'test/fixtures/basic/build'); done(); }); @@ -28,7 +32,9 @@ describe('metalsmith-layouts', function(){ Metalsmith('test/fixtures/pattern') .use(layouts({ engine: 'swig', pattern: '*.md' })) .build(function(err){ - if (err) return done(err); + if (err) { + return done(err); + } equal('test/fixtures/pattern/expected', 'test/fixtures/pattern/build'); done(); }); @@ -38,7 +44,9 @@ describe('metalsmith-layouts', function(){ Metalsmith('test/fixtures/default') .use(layouts({ engine: 'swig', pattern: '*.md', default: 'default.html' })) .build(function(err){ - if (err) return done(err); + if (err) { + return done(err); + } equal('test/fixtures/pattern/expected', 'test/fixtures/pattern/build'); done(); }); @@ -48,7 +56,9 @@ describe('metalsmith-layouts', function(){ Metalsmith('test/fixtures/directory') .use(layouts({ engine: 'swig', directory: 'templates' })) .build(function(err){ - if (err) return done(err); + if (err) { + return done(err); + } equal('test/fixtures/directory/expected', 'test/fixtures/directory/build'); done(); }); @@ -59,7 +69,9 @@ describe('metalsmith-layouts', function(){ .metadata({ title: 'Global Title' }) .use(layouts({ engine: 'swig' })) .build(function(err){ - if (err) return done(err); + if (err) { + return done(err); + } equal('test/fixtures/metadata/expected', 'test/fixtures/metadata/build'); done(); }); @@ -69,7 +81,9 @@ describe('metalsmith-layouts', function(){ Metalsmith('test/fixtures/binary') .use(layouts({ engine: 'swig' })) .build(function(err){ - if (err) return done(err); + if (err) { + return done(err); + } equal('test/fixtures/binary/expected', 'test/fixtures/binary/build'); done(); }); @@ -79,7 +93,9 @@ describe('metalsmith-layouts', function(){ Metalsmith('test/fixtures/include') .use(layouts({ engine: 'swig' })) .build(function(err){ - if (err) return done(err); + if (err) { + return done(err); + } equal('test/fixtures/include/expected', 'test/fixtures/include/build'); done(); }); @@ -93,9 +109,13 @@ describe('metalsmith-layouts', function(){ })); instance.build(function(err){ - if (err) return done(err); + if (err) { + return done(err); + } instance.build(function(err){ - if (err) return done(err); + if (err) { + return done(err); + } equal('test/fixtures/partials/expected', 'test/fixtures/partials/build'); done(); });