GithubHelp home page GithubHelp logo

arguguard's Introduction

arguguard

Strict argument validation with testable errors

Install

Install with npm

$ npm i arguguard --save-dev

Usage

arguguard takes three arguments.

arguguard(label, [description1, description2, ...], arguments)

  1. A string label such as myFunction() that will be used in error reporting
  2. An array of descriptions. Each description can either be one of 4 things
    1. A lower case string (ex. "number" or "boolean") in which a typeof check will be performed
    2. An upper case string (ex. "Object" or "MyClass") in which a instanceof check will be performed
    3. An [] (ex. "[]number" or "[]MyClass") in which case the top level argument must be an array, and every instance of that array must pass either a typeof or instanceof check
    4. An instance of the Validator class (require('arguguard/lib/Validator'))
  3. The arguments to test.
var arguguard = require('arguguard')
var Validator = require('arguguard/lib/Validator')
var aboveThreeValidator = new Validator('AboveThree', (number) => { return number > 3 })

function myFunction(myNumber, myClass, arrayofMyClass, myBigNumber) {
  arguguard('myFunction()', ['number', 'MyClass', '[]MyClass', aboveThreeValidator], arguments)
}

myFunction()
>> Arguguard:User:ArgumentsLengthError: myFunction() arguments.length should be "4", received "0"

myFunction(1, myClass, [myClass, myClass], 4, callback)
>> Arguguard:User:ArgumentsLengthError: myFunction() arguments.length should be "4", received "5"

myFunction('1', myClass, [myClass, myClass], 4)
>> Arguguard:User:ArgumentTypeError: myFunction() arguments[0] type should be "number", received "string"

myFunction(1, {}, [myClass, myClass], 4)
>> Arguguard:User:ArgumentInstanceError: myFunction() arguments[1] constructor should be "MyClass", received "Object"

myFunction(1, myClass, myClass, 4)
>> Arguguard:User:ArgumentInstanceError: myFunction() arguments[2] constructor should be "Array", received "MyClass"

myFunction(1, myClass, [myClass, MyClass], 4)
>> Arguguard:User:ArgumentInstanceError: myFunction() arguments[2][1] constructor should be "MyClass", received "Function"

myFunction(1, myClass, [myClass, myClass], 3)
>> Arguguard:User:ValidationError:AboveThree: myFunction() arguments[3] should be "above 3", received "3"

myFunction(1, myClass, [myClass, myClass], 4)
>> 

Api Errors

The arguguard api is defensively programmed and will throw errors if called with the wrong arguments

arguguard(['number', MyClass, [MyClass]], arguments)
>> Arguguard:Api:ArgumentsLengthError: arguguard() arguments.length should be "3", received "2"

arguguard('myFunction()', ['number', MyClass, [MyClass]], arguments)
>> 

Settings

Disable (Get a speed boost)

arguguard.options.disabled = true

Allow for Synonymous Constructors (such as when you have two versions of a dependency)

arguguard.options.allowSynonymousConstructors = true

Running tests

Install dev dependencies:

$ npm i -d && npm test

Contributing

Pull requests and stars are always welcome. For bugs and feature requests, please create an issue

Author


License

Copyright © 2017 Licensed under the MIT license.


This file was generated by readme-generator on January 21, 2017.

arguguard's People

Contributors

aakilfernandes avatar

Watchers

James Cloos avatar  avatar Nchinda Nchinda avatar

Forkers

pinkdiamond1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.