Skip to content

Instantly share code, notes, and snippets.

@patrickng
Created October 8, 2014 17:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save patrickng/5d36eb9ada2d353ff98e to your computer and use it in GitHub Desktop.
Save patrickng/5d36eb9ada2d353ff98e to your computer and use it in GitHub Desktop.
'use strict';
var _ = require('lodash');
var path = require('path');
module.exports = function(grunt) {
// load the recipe template from the desired path
var projectTemplate = grunt.file.read('./src/templates/pages/project.hbs');
// expand the data files and loop over each filepath
var pages = _.flatten(_.map(grunt.file.expand('./src/data/*.json'), function(filepath) {
// read in the data file
var data = grunt.file.readJSON(filepath);
data.title = data.project.projectTitle;
data.description = data.project.meta.description;
// create a 'page' object to add to the 'pages' collection
return {
// the filename will determine how the page is named later
filename: path.basename(filepath, path.extname(filepath)),
// the data from the json file
data: data,
// add the recipe template as the page content
content: projectTemplate
};
}));
// Project configuration.
grunt.initConfig({
config: {
src: 'src',
dist: 'dist'
},
assemble: {
pages: {
options: {
flatten: true,
assets: '<%= config.dist %>/assets',
layout: '<%= config.src %>/templates/layouts/default.hbs',
data: '<%= config.src %>/data/*.{json,yml}',
partials: '<%= config.src %>/templates/partials/*.hbs',
// add the pages array from above to the pages collection on the assemble options
pages: pages
},
files: [
// currently we need to trick grunt and assemble into putting the pages file into the correct
// place using this pattern
{
dest: './dist/',
src: '!*'
}
]
}
}
});
grunt.loadNpmTasks('assemble');
grunt.registerTask('default', [
'assemble'
]);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment