Cocktail Extension Trait: Configurable
JavaScript
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
test/unit
.gitignore
.jshintrc
.npmignore
.travis.yml
Gruntfile.js
README.md
package.json

README.md

cocktail-trait-configurable

A CocktailJS Trait Extension

Build Status NPM version

A trait to add configure(options) method that will call setters on each options key.

Install

npm install cocktail --save
npm install cocktail-trait-configurable --save

Trait requires (glue code)

None

Usage

MyClass.js

var cocktail     = require('cocktail'),
	Configurable = require('cocktail-trait-configurable');
	
cocktail.mix({
    '@exports': module,
    '@as'     : 'class',

    '@traits' : [Configurable],
    
    '@properties': {
    	property1: 'default value',
    	property2: 0
    },

    constructor: function(config) {
        //we can use configurable method in the constructor
        this.configure(config);
    }
    
});

index.js

var MyClass = require('./MyClass'),
    options, obj, obj2;

options = {
    property1: 'value from options', 
    property2: false, 
    discarded: 'this should be discarded!'
});

obj = new MyClass();

//use the configure method publicly
obj.configure(options);

console.log(obj.getProperty1()); //'value from options'
console.log(obj.getProperty2()); //false

//or in the constructor
obj2 = new MyClass(options);

console.log(obj2.getProperty1()); //'value from options'
console.log(obj2.getProperty2()); //false

Configuring the Configurable Trait

Since version 1.1.0 we can use Configurable.withOptions to return a configured Configurable Trait. This returns a trait that will look into the given options for the setter name given a key. If the key is not found, then it will default to set{Key} method.

Example: The class will use addItems instead of setItems since we want to add items to our items properties and will allow to pass an array or a single element.

MyClass.js

var cocktail     = require('cocktail'),
    Configurable = require('cocktail-trait-configurable');
    
cocktail.mix({
    '@exports': module,
    '@as'     : 'class',

    '@traits' : [
        Configurable.withOptions({ items: 'addItems' })
    ],
    
    '@properties': {
        prop: 'default value'
    },

    constructor: function() {
        this.items = [];
    },

    addItems: function (items) {
        this.items.concat(items);
    }

});

index.js

var MyClass = require('./MyClass'),
    options, obj, obj2;

options = {
    prop: 'value from options', 
    discarded: 'this should be discarded!',
    items: [1,2,3,4]
});

obj = new MyClass();

//use the configure method publicly
obj.configure(options);

console.log(obj.getProp()); //'value from options'
console.log(obj.items); // [1,2,3,4]

API

The following methods will be publicly available on the host class:

  • configure(options): calls every available setter per each key defined in the the options object.
    • options: {Object} the object with values that are going to be applied.