bob-gray/solv

View on GitHub
Gruntfile.js

Summary

Maintainability
B
6 hrs
Test Coverage
/*jshint node:true*/
"use strict";

module.exports = function (grunt) {
    registerTasks(grunt);
    configureTasks(grunt);
    loadTasks(grunt);
};

function registerTasks (grunt) {
    grunt.registerTask("default", [
        "lint",
        "complexity",
        "test"
    ]);

    grunt.registerTask("lint", [
        "jshint"
    ]);

    grunt.registerTask("test", [
        "karma:local"
    ]);

    grunt.registerTask("coverage", [
        "karma:coverage"
    ]);

    grunt.registerTask("start-watch", [
        "karma:watch:start",
        "watch"
    ]);

    grunt.registerTask("build", [
        "lint",
        "complexity",
        "karma:phantom",
        "karma:sauce"
    ]);

    grunt.registerTask("document", [
        "clean:docs",
        "api_meta"
    ]);
}

function configureTasks (grunt) {
    var pkg = grunt.file.readJSON("package.json");

    pkg.versionMajorMinor = pkg.version.replace(/^(\d+\.\d+).*$/, "$1");

    grunt.initConfig({
        pkg: pkg,
        watch: {
            all: {
                files: [
                    "src/**/*.js",
                    "tests/spec/**/*.js"
                ],
                tasks: [
                    "lint",
                    "karma:watch:run"
                ]
            }
        },
        connect: {
            server: {
                options: {
                    base: "",
                    port: 9999
                }
            }
        },
        jshint: {
            options: {
                jshintrc: ".jshintrc"
            },
            lib: {
                src: [
                    "src/**/*.js"
                ]
            },
            tests: {
                src: [
                    "tests/runner.js",
                    "tests/karma/runner.js",
                    "tests/spec/**/*.js",
                    "Gruntfile.js",
                    "karma.conf.js"
                ]
            }
        },
        complexity: {
            options: {
                breakOnErrors: true,
                errorsOnly: false,
                cyclomatic: 5,
                halstead: 10,
                maintainability: 95,
                hideComplexFunctions: true
            },
            lib: {
                src: [
                    "src/**/*.js"
                ]
            },
            tests: {
                src: [
                    "tests/runner.js",
                    "tests/karma/runner.js",
                    "tests/spec/**/*.js"
                ]
            }
        },
        karma: {
            options: {
                configFile: "karma.conf.js"
            },
            local: {},
            watch: {
                singleRun: false,
                background: true
            },
            phantom: {
                browsers: [
                    "PhantomJS"
                ],
                preprocessors: {
                    "src/**/*js": [
                        "coverage"
                    ]
                },
                reporters: [
                    "dots",
                    "coverage"
                ],
                coverageReporter: {
                    type: "lcovonly",
                    dir: "coverage"
                }
            },
            coverage: {
                preprocessors: {
                    "src/**/*.js": [
                        "coverage"
                    ]
                },
                reporters: [
                    "dots",
                    "coverage"
                ],
                coverageReporter: {
                    type: "html",
                    dir: "coverage"
                }
            },
            sauce: {
                reporters: [
                    "dots",
                    "saucelabs"
                ],
                browsers: [
                    "sauce_chrome",
                    "sauce_firefox",
                    "sauce_safari",
                    "sauce_ie_11",
                    "sauce_edge"
                ],
                captureTimeout: 120000
            }
        },
        coveralls: {
            options: {
                coverageDir: "coverage",
                recursive: true
            }
        },
        version: {
            bump: {
                src: [
                    "package.json",
                    "bower.json"
                ]
            }
        },
        api_meta: {
            docs: {
                src: ["./src"],
                dest: "./docs/v<%= pkg.versionMajorMinor %>/",
                usage: "./tests/spec/**/*-test.js"
            }
        },
        clean: {
            docs: ["<%= api_meta.docs.dest %>"]
        }
    });
}

function loadTasks (grunt) {
    var devDepends = grunt.config("pkg.devDependencies");

    Object.keys(devDepends).forEach(function loadIfGruntPlugin (name) {
        if (hasGruntPrefix(name)) {
            grunt.loadNpmTasks(name);
        }
    });
}

function hasGruntPrefix (name) {
    return name.indexOf("grunt-") === 0;
}