logic-validator

1.0.2 • Public • Published

logic-validator

A lightweight, dependency free, declarative, OOP node.js module for validating your code entities

Installation

    npm i --save logic-validator

Usages

Lets say for example that your are writing a program that manages the events of a conference hall.

Events are considered valid if:

  • The start date is before the end date.
  • The number of invitations is less than max number invitations ( which is 600 ).

Without using logic-validator your validation function would probably look something like this:

    function validate(event) {
        if (event.startDate < event.endDate) {
            return true;
        }
        if (event.numberOfInvetations < 600) {
            return true;
        } 
        return false
    }

Using logic-validator turns it to something like this:

    // taken from examples/1/validators/event.validator.js
    
    class EventValidator extends Validator{
        constructor(event) {
            super(
                new AndCondition([
                    new StartDateIsBeforeEndDate(event.startDate, event.endDate),
                    new NumberOfInvitationsIsLessThanMaximum(event.numberOfInvetations, maxNumberOfInvitations)
                ])
            );
        }
    }

Where is The validate Function?

The validate function is derived from the Validator class, so don't worry about it. Calling the validate from the outside looks like this:

    // taken from examples/1/main.js

    let validValidator = new EventValidator(validEvent);
    
    console.log(`valid: ${validValidator.validate()}`);

The example above uses costume conditions (such as StartDateIsBeforeEndDate and NumberOfInvitationsIsLessThanMaximum). There is also a way to write the example using generic conditions:

    class EventValidator extends Validator{
        constructor(event) {
            super(
                new AndCondition([
                    new LessThan(event.startDate, event.endDate),
                    new LessThan(event.numberOfInvetations, maxNumberOfInvitations)
                ])
            );
        }
    }

Requiring The Package

Calling require('logic-validator') returns an object with the following classes as properties:

  • Validator.
  • Condition.
  • AndCondition.
  • OrCondition.

Creating a Complex Validator

You can also create validators with more complex conditions:

    class EventValidator extends Validator{
        constructor(event) {
            super(
                new AndCondition([
                    new StartDateIsBeforeEndDate(event.startDate, event.endDate),
                    new NumberOfInvitationsIsLessThanMaximum(event.numberOfInvetations, maxNumberOfInvitations),
                    new OrCondition([
                        new LessThan(event.startDate, event.endDate),
                        new LessThan(event.numberOfInvetations, maxNumberOfInvitations)                        
                    ])
                ])
            );
        }
    }

Creating Costume Conditions

The StartDateIsBeforeEndDate and the NumberOfInvitationsIsLessThanMaximum are a costume conditions. Costume conditions help making the validation process readable and reusable. In order to create a costume condition all you need to do is derive from Condition class:

    //taken from examples/1/conditions/StartDateIsBeforeEndDate.js
    
    class StartDateIsBeforeEndDate extends Condition {
        
        constructor(startDate, endDate){
            super();
            this.startDate = startDate;
            this.endDate = endDate;
        }
        
        validate(){
            return this.startDate < this.endDate;
        }
    
    }

The validate function is where the validation logic is placed.

More Information

For more information and for the full code of the examples used in this file, take a look at the examples/ dir.

Contributing

This package is a design proposal more than an out of the box solution, so please feel free to fork it, tweak it and twist it.

If you think others can enjoy your contribution, please open a PR.

Enjoy :)

Package Sidebar

Install

npm i logic-validator

Weekly Downloads

2

Version

1.0.2

License

MIT

Last publish

Collaborators

  • itai421