From 59ff2282e07b5a9421483b8d8f764a5c3ac68bb1 Mon Sep 17 00:00:00 2001 From: Zach Orlovsky Date: Sat, 17 Dec 2016 17:30:38 +0300 Subject: [PATCH] automatically insert current year --- package.json | 1 + src/lissie.js | 7 ++++++- src/lissie.test.js | 22 ++++++++++++---------- yarn.lock | 6 ++++++ 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 0abca38..3beec20 100644 --- a/package.json +++ b/package.json @@ -73,6 +73,7 @@ }, "dependencies": { "chalk": "^1.1.3", + "deep-assign": "^2.0.0", "fullname": "^3.1.0", "lodash": "^4.17.2", "meow": "^3.7.0", diff --git a/src/lissie.js b/src/lissie.js index 374fb45..f5d578c 100644 --- a/src/lissie.js +++ b/src/lissie.js @@ -1,19 +1,24 @@ import { readFile, readdir } from 'fs' import path from 'path' import pify from 'pify' +import assign from 'deep-assign' const normalize = text => text.trim().toLowerCase().replace(' ', '-') export const list = () => pify(readdir)('licenses') export default (license = 'mit', options = {}) => { + const defaults = { + year: new Date().getFullYear() + } + const opts = assign({}, defaults, options) return pify(readFile)( path.join(__dirname, '..', 'licenses', normalize(license)), { encoding: 'utf8' } ) .then(text => text.replace( /\{year\}|\{author\}|\{project\}|\{email\}/gi, - matched => options[matched.replace(/\{|\}/gi, '')] || matched + matched => opts[matched.replace(/\{|\}/gi, '')] || matched )) .catch(({ code }) => { if (code === 'ENOENT') { diff --git a/src/lissie.test.js b/src/lissie.test.js index 53e0416..6f6fc5e 100644 --- a/src/lissie.test.js +++ b/src/lissie.test.js @@ -1,29 +1,31 @@ -import fs from 'fs' -import path from 'path' -import pify from 'pify' import test from 'ava' import { take } from 'lodash' import { stripIndent } from 'common-tags' import license from './lissie' +const head = x => take(x.split('\n'), 3).join('\n') + test('returns license text', async t => { - const expected = await pify(fs).readFile(path.join('licenses', 'mit'), { encoding: 'utf8' }) - t.is(await license(), expected) - t.is(await license('mit'), expected) + const expected = stripIndent` + The MIT License (MIT) + + Copyright (c) 2016 {author} +` + t.is(head(await license()), expected) + t.is(head(await license('mit')), expected) }) test('pass options', async t => { const mit = await license('mit', { - year: 2016, + year: 2015, author: 'Zach Orlovsky' }) const expected = stripIndent` The MIT License (MIT) - Copyright (c) 2016 Zach Orlovsky + Copyright (c) 2015 Zach Orlovsky ` - const head = take(mit.split('\n'), 3).join('\n') - t.is(head, expected) + t.is(head(mit), expected) }) test('normalize input', async t => { diff --git a/yarn.lock b/yarn.lock index baed7ce..43368a6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1371,6 +1371,12 @@ decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" +deep-assign@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/deep-assign/-/deep-assign-2.0.0.tgz#ebe06b1f07f08dae597620e3dd1622f371a1c572" + dependencies: + is-obj "^1.0.0" + deep-equal@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"