Ooze ====


A model event wrapper. The spiritual successor to gedi

Ooze lets you wrap an object in an evented getter/setter API.

var someModel = {
    // properties.

var Ooze = require('ooze'),
    model = new Ooze(someModel);

Instantiating Ooze returns a scope object, that can be used to access the object.

// Simple

// Deeper into the object
// Simple
model.set('property', 'value');

// Deeper into the object
model.set('property.childProp', 'value');
// Simple
model.on('property', function(property){...});

// Multiple paths (Space seperated)
model.on('property anotherProperty someOtherOne.childProp.grandchildProp', function(property, another, grandchild){...});

handlers will be called with 'this' as the event:

model.on('property', function(property){
    var event = this;

handlers will be called if any of the bound paths changes.

Model events will ONLY be raised if a change is made via Ooze. Changing values directly will not trigger handlers!

var propertyModel = model.scopeTo('property');

// Calls to propertyModel will all be scoped to the 'property' path.

propertyModel.set('childProp', 3);

// The above is equivilent to:
model.set('property.childProp', 3);
var getterSetter = model.bind('property');

// Get (no arguments)

// The above is equivilent to:

// Set (pass an argument)

// The above is equivilent to:
model.set('property', 3);
model.run(['some.path', 'another.path:path2'], function(scope){
    scope.path = 5;
    scope.path2 = 10;

Note that you can alias keys to any identifyer using :, otherwise the last key in the path will be used.