text: 'use strict';
  
  module.exports = function (grunt) {
    // Show elapsed time at the end
    require('time-grunt')(grunt);
    // Load all grunt tasks
    require('load-grunt-tasks')(grunt);
  
    // Project configuration.
    grunt.initConfig({
      // Bump version, tag and push
      // Usage: $ grunt bump:major || grunt bump:minor || grunt bump:patch
      // Then:  $ npm publish
      bump: {
        options: {
          files: [
          'package.json'
          ],
          commit: true,
          commitMessage: 'release(%VERSION%)',
          commitFiles: ['package.json'],
          createTag: true,
          tagName: 'v%VERSION%',
          tagMessage: 'Version %VERSION%',
          push: true,
          pushTo: 'origin master'
        }
      },
  
      nodeunit: {
        files: ['test/**/*_test.js']
      },
      
      jshint: {
        options: {
          jshintrc: '.jshintrc',
          reporter: require('jshint-stylish')
        },
        gruntfile: {
          src: 'Gruntfile.js'
        },
        lib: {
          src: ['lib/**/*.js']
        },
        test: {
          src: ['test/**/*.js']
        }
      },
      
      watch: {
        gruntfile: {
          files: '<%= jshint.gruntfile.src %>',
          tasks: ['jshint:gruntfile']
        },
        lib: {
          files: '<%= jshint.lib.src %>',
          tasks: ['jshint:lib', 'nodeunit']
        },
        test: {
          files: '<%= jshint.test.src %>',
          tasks: ['jshint:test', 'nodeunit']
        }
      }
    });
  
    // Default task.
    grunt.registerTask('default', [
      'jshint', 
      'nodeunit'
      ]);
  
    // Test task.
    grunt.registerTask('test', [
      'jshint', 
      'nodeunit'
      ]);
  };
  