text: 'use strict';
  
  module.exports = function(grunt) {
  
      //Project configuration.
      grunt.initConfig({
  
          jshint: {
              files: ['test/unit/**/*.js', 'test/intergration/**/*.js', 'lib/**/*.js', '!node_modules/*', '!test/helpers/**/*.js'],
              options: {
                  jshintrc: '.jshintrc',
                  reporter: require('jshint-stylish')
              }
          },
  
          jsbeautifier: {
              files: ['lib/**/*.js', 'test/unit/**/*.js', 'Gruntfile.js'],
              options: {
                  config: '.jsbeautify'
              }
          },
  
          uglify: {
              options: {
                  sourceMap: true,
                  compress: {
                      drop_console: true
                  }
              },
              prod: {
                  files: {
                      'classie.min.js': ['lib/**/*.js']
                  }
              }
          },
  
          browserify: {
              options: {
                  debug: true
              },
              test: {
                  files: {
                      'test/browserified.js': ['test/unit/**/*.js']
                  }
              }
          },
  
          coverage: {
              options: {
                  thresholds: {
                      'statements': 90,
                      'branches': 90,
                      'lines': 90,
                      'functions': 90
                  },
                  dir: 'coverage',
                  root: 'test'
              }
          },
  
          plato: {
              lint: {
                  options: {
                      jshint: grunt.file.readJSON('.jshintrc'),
                      dir: "test/coverage",
                      title: grunt.file.readJSON('package.json').name,
                      complexity: {
                          minmi: true,
                          forin: true,
                          logicalot: false
                      }
                  },
                  files: {
                      'test/coverage': ['lib/**/*.js']
                  }
              },
          },
          watch: {
              options: {
                  livereload: true,
              },
              jshint: {
                  tasks: ['jshint'],
                  files: ['test/unit/**/*.js', 'test/intergration/**/*.js', 'lib/**/*.js', '!node_modules/*', '!test/helpers/**/*.js']
              },
              uglify: {
                  tasks: ['uglify'],
                  files: ['lib/*.js']
              },
              jsbeautifier: {
                  tasks: ['jsbeautifier'],
                  files: ['test/unit/**/*.js', 'test/intergration/**/*.js', 'lib/**/*.js', '!node_modules/*', '!test/helpers/**/*.js']
              }
          }
  
      });
  
      //automatically load deps from package.jso
      for (var key in grunt.file.readJSON("package.json").devDependencies) {
          if (key.indexOf("grunt") === 0 && key !== "grunt") {
              grunt.loadNpmTasks(key);
          }
      }
  
      require('time-grunt')(grunt);
  
      grunt.registerTask('cover', ['plato']);
      grunt.registerTask('test', ['browserify:test']);
      grunt.registerTask('default', ['watch']);
  };
  