synthesis

synthesis =========

synthesis

Synthesis borrows from Objective C's property concept. It cuts down on boilerplate code by automatically generating property accessors and mutators for an object.

var $synthesize = require('vnodelib').load('synthesis');

function MyObject()
{
}

$synthesize(MyObject, 'foo');                 // Creates a read/write property for 'foo'.
$synthesize(MyObject, 'bar', 'read');         // Creates a read-only property for 'bar'.
$synthesize(MyObject, 'baz', 'write');        // Creates a write-only property for 'baz'.
$synthesize(MyObject, 'qux', 'read-write');   // Creates a read/write property for 'qux'.

module.exports = MyObject;

Generated functions may be used like this:

var myObject = new MyObject();

myObject.setFoo('hello');
var fooValue = myObject.getFoo();

Internally, the property may be accessed like this:

this.foo;
this['foo'];

var propName = 'foo';
this[propName];

Synthesis is also compatible with JS.class:

var $synthesize = require('vnodelib').load('synthesis');

require('jsclass');
JS.require('JS.Class');

var JSClassTestObject = new JS.Class(
{
    // my functions and stuff in here
});

$synthesize(JSClassTestObject, 'foo');
$synthesize(JSClassTestObject, 'bar', 'read');
$synthesize(JSClassTestObject, 'baz', 'write');
$synthesize(JSClassTestObject, 'qux', 'read-write');