@@ -2,6 +2,33 @@ var Metalsmith = require('metalsmith')
22var async = require ( 'async' )
33var render = require ( 'consolidate' ) . handlebars . render
44var path = require ( 'path' )
5+ var getOptions = require ( './options' )
6+ var askQuestions = require ( './ask' )
7+
8+ /**
9+ * Generate a template given a `src` and `dest`.
10+ *
11+ * @param {String } name
12+ * @param {String } src
13+ * @param {String } dest
14+ * @param {Function } done
15+ */
16+
17+ module . exports = function generate ( name , src , dest , done ) {
18+ var opts = getOptions ( name , src )
19+ Metalsmith ( path . join ( src , 'template' ) )
20+ . use ( function ( files , metalsmith , done ) {
21+ askQuestions ( opts . schema , metalsmith . metadata ( ) , done )
22+ } )
23+ . use ( renderTemplateFiles )
24+ . clean ( false )
25+ . source ( '.' ) // start from template root instead of `./src` which is Metalsmith's default for `source`
26+ . destination ( dest )
27+ . build ( function ( err ) {
28+ if ( err ) throw err
29+ done ( )
30+ } )
31+ }
532
633/**
734 * Template in place plugin.
@@ -15,47 +42,16 @@ function renderTemplateFiles (files, metalsmith, done) {
1542 var keys = Object . keys ( files )
1643 var metalsmithMetadata = metalsmith . metadata ( )
1744
18- async . each ( keys , run , done )
19-
20- function run ( file , done ) {
45+ async . each ( keys , function ( file , next ) {
2146 var str = files [ file ] . contents . toString ( )
22-
2347 // do not attempt to render files that do not have mustaches
2448 if ( ! / { { ( [ ^ { } ] + ) } } / g. test ( str ) ) {
25- return done ( )
49+ return next ( )
2650 }
27-
2851 render ( str , metalsmithMetadata , function ( err , res ) {
29- if ( err ) return done ( err )
52+ if ( err ) return next ( err )
3053 files [ file ] . contents = new Buffer ( res )
31- done ( )
54+ next ( )
3255 } )
33- }
34- }
35-
36- module . exports = function ( ask ) {
37- /**
38- * Generate a template given a `src` and `dest`.
39- *
40- * @param {String } src
41- * @param {String } dest
42- * @param {Function } fn
43- */
44-
45- function generate ( src , dest , fn ) {
46- var template = path . join ( src , 'template' )
47-
48- Metalsmith ( template )
49- . use ( ask )
50- . use ( renderTemplateFiles )
51- . clean ( false )
52- . source ( '.' ) // start from template root instead of `./src` which is Metalsmith's default for `source`
53- . destination ( dest )
54- . build ( function ( err ) {
55- if ( err ) throw err
56- fn ( )
57- } )
58- }
59-
60- return generate
56+ } , done )
6157}
0 commit comments