From fc7fdbbb6e9d7197e5a58a59477311c1c7b0ee1e Mon Sep 17 00:00:00 2001 From: zigomir Date: Sun, 28 Aug 2016 20:54:28 -0400 Subject: [PATCH] Add and document `inPlace` property. - users can generate more friendly `completeMessage` - document `destDirName` --- README.md | 18 ++++++++++++++++++ lib/generate.js | 4 +++- test/e2e/mock-meta-json/meta.json | 3 +++ test/e2e/mock-metadata-repo-js/meta.js | 3 +-- test/e2e/test.js | 22 ++++++++++++++++++---- 5 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 test/e2e/mock-meta-json/meta.json diff --git a/README.md b/README.md index 068859d8f2..13f0237756 100644 --- a/README.md +++ b/README.md @@ -163,6 +163,24 @@ Files under `test` will only be generated if the user answered yes to the prompt Note that the `dot` option for minimatch is set to `true` so glob patterns would also match dotfiles by default. +#### Additional data available in meta.{js,json} + +- `destDirName` - destination directory name + +```json +{ + "completeMessage": "To get started:\n\n cd {{destDirName}}\n npm install\n npm run dev" +} +``` + +- `inPlace` - generating template into current directory + +```json +{ + "completeMessage": "{{#inPlace}}To get started:\n\n npm install\n npm run dev.{{else}}To get started:\n\n cd {{destDirName}}\n npm install\n npm run dev.{{/inPlace}}" +} +``` + ### License [MIT](http://opensource.org/licenses/MIT) diff --git a/lib/generate.js b/lib/generate.js index 9fde8972fa..eab2114904 100644 --- a/lib/generate.js +++ b/lib/generate.js @@ -34,6 +34,7 @@ module.exports = function generate (name, src, dest, done) { var metalsmith = Metalsmith(path.join(src, 'template')) var data = Object.assign(metalsmith.metadata(), { destDirName: name, + inPlace: dest === process.cwd(), noEscape: true }) opts.helpers && Object.keys(opts.helpers).map(function (key) { @@ -50,6 +51,8 @@ module.exports = function generate (name, src, dest, done) { done(err) logMessage(opts.completeMessage, data) }) + + return data } /** @@ -108,7 +111,6 @@ function renderTemplateFiles (files, metalsmith, done) { * * @param {String} message * @param {Object} data - * @param {Function} cb */ function logMessage (message, data) { diff --git a/test/e2e/mock-meta-json/meta.json b/test/e2e/mock-meta-json/meta.json new file mode 100644 index 0000000000..c694f936f0 --- /dev/null +++ b/test/e2e/mock-meta-json/meta.json @@ -0,0 +1,3 @@ +{ + "completeMessage": "{{#inPlace}}To get started:\n\n npm install\n npm run dev.{{else}}To get started:\n\n cd {{destDirName}}\n npm install\n npm run dev.{{/inPlace}}" +} diff --git a/test/e2e/mock-metadata-repo-js/meta.js b/test/e2e/mock-metadata-repo-js/meta.js index 4309d083e2..f9478c27f1 100644 --- a/test/e2e/mock-metadata-repo-js/meta.js +++ b/test/e2e/mock-metadata-repo-js/meta.js @@ -1,4 +1,3 @@ - module.exports = { prompts: { description: { @@ -12,4 +11,4 @@ module.exports = { return str.toUpperCase() } } -} \ No newline at end of file +} diff --git a/test/e2e/test.js b/test/e2e/test.js index 6ec2580337..9365e5e49f 100644 --- a/test/e2e/test.js +++ b/test/e2e/test.js @@ -11,6 +11,7 @@ const extend = Object.assign || require('util')._extend const generate = require('../../lib/generate') const metadata = require('../../lib/options') +const MOCK_META_JSON_PATH = './test/e2e/mock-meta-json' const MOCK_TEMPLATE_REPO_PATH = './test/e2e/mock-template-repo' const MOCK_TEMPLATE_BUILD_PATH = path.resolve('./test/e2e/mock-template-build') const MOCK_METADATA_REPO_JS_PATH = './test/e2e/mock-metadata-repo-js' @@ -43,18 +44,16 @@ describe('vue-cli', () => { noEscape: true } - it('read metadata from json', done => { + it('read metadata from json', () => { const meta = metadata('test-pkg', MOCK_TEMPLATE_REPO_PATH) expect(meta).to.be.an('object') expect(meta.prompts).to.have.property('description') - done() }) - it('read metadata from js', done => { + it('read metadata from js', () => { const meta = metadata('test-pkg', MOCK_METADATA_REPO_JS_PATH) expect(meta).to.be.an('object') expect(meta.prompts).to.have.property('description') - done() }) it('helpers', done => { @@ -67,6 +66,21 @@ describe('vue-cli', () => { }) }) + it('adds additional data to meta data', () => { + const data = generate('test', MOCK_META_JSON_PATH, MOCK_TEMPLATE_BUILD_PATH) + expect(data.destDirName).to.equal('test') + expect(data.inPlace).to.equal(false) + }) + + it('sets `inPlace` to true when generating in same directory', () => { + const currentDir = process.cwd() + process.chdir(MOCK_TEMPLATE_BUILD_PATH) + const data = generate('test', MOCK_META_JSON_PATH, MOCK_TEMPLATE_BUILD_PATH) + expect(data.destDirName).to.equal('test') + expect(data.inPlace).to.equal(true) + process.chdir(currentDir) + }) + it('template generation', done => { monkeyPatchInquirer(answers) generate('test', MOCK_TEMPLATE_REPO_PATH, MOCK_TEMPLATE_BUILD_PATH, err => {