Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/stutrek/releasable
Adds retain/release to any object, letting you know when you can clean up.
https://github.com/stutrek/releasable
Last synced: about 1 month ago
JSON representation
Adds retain/release to any object, letting you know when you can clean up.
- Host: GitHub
- URL: https://github.com/stutrek/releasable
- Owner: stutrek
- Created: 2013-07-31T21:29:25.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2014-05-16T03:31:10.000Z (over 10 years ago)
- Last Synced: 2024-10-10T02:09:53.695Z (about 1 month ago)
- Language: JavaScript
- Homepage:
- Size: 148 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Releasable
This adds retain/release functionality to any object. This allows you to clean up objects that need to be sent to many parts of an application. One example of usefulness is when you need to continuously update an object, perhaps through ajax polling, but want to stop when the object is no longer needed.
## Creating a Releasable
### Basic
* `releaseable.mixin( object, releasedCallback )` - Makes an object releaseable. Calls `releasedCallback( object )` when the object can be released.### Advanced
* `releaseable.mixin( object, releasedCallback [, retainedCallback, everyReleaseCallback] )` - Makes an object releaseable, with optional additional callbacks.
* `releaseable.create( releasedCallback [, retainedCallback, everyReleaseCallback] )` - Same as releaseable.mixin( {}, ...).When `release()` has been called on a releasable as many times as `retain()`, releasedCallback will be called with the target as the only argument. At this time nobody should be watching your object and it is safe to remove it from your cache, stop polling, etc.
## Using a Releasable
When the releasable methods have been added to an object, you can call the releasable methods on it.
* `object.retain()` - Tells the source of this object that it should continue to update this object.
* `object.release()` - When everyone that has retained this object has released it, the source of this object will be notified so it can stop updates.## Sample Module that Creates Releasables
```javascript
var releasable = require('releaseable/releaseable');var myCache = {};
function removeFromCache( obj ) {
delete myCache[obj.name];
}function createObject( name ) {
if( myCache[name] ) {
return myCache[name];
}var myObject = {
name: name
};releaseable.mixin( myObject, removeFromCache );
// myObject now has:
// myObject.retain();
// myObject.release();myCache[name] = myObject;
return myObject;
}
```