alternatex / store
Lightweight storage wrapper
Installs: 39
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 0
Open Issues: 0
Language:JavaScript
Requires
- php: >=5.3.0
- jackalope/jackalope-jackrabbit: 1.0.*@dev
- justinrainbow/json-schema: ~1.3
- michelf/php-markdown: *
Requires (Dev)
- phpunit/phpunit: 3.7.*
This package is not auto-updated.
Last update: 2025-01-13 16:13:56 UTC
README
A lightweight datastore wrapper providing CRUD operations for arbitrary objects.
Index
- Quickstart
- Client API
- Server API
- Repositories * File Stores * CSV * JSON * Serialized
- Documentation
- Roadmap
- License
Quickstart
Embedding
Require.js
require(["store"], function(Store) { // ... });
HTML
<script src="src/client/store.js"></script>
Client API
Store
Configure
Defaults are configured as follows:
Store.configure({ url: "http://localhost/datastore.php", ttl: 3600 });
Note
configure()
alters the prototype object, hence modifications are propagated to instances on property level given that the respective instance properties have not been modified previously.
Create
var objectStore = new Store({ namespace: 'object' });
Object
Create
Preset
var object = objectStore.create({ country: 'USA', firstname: 'Stephen', lastname: 'Colbert' });
Barebone
var object = objectStore.create(); object.set('country', 'USA'); object.set('firstname', 'Jon'); object.set('lastname', 'Stewart');
Read
List
objectStore.list();
Single
objectStore.get('8c0c1ff0-d0fe-38b7-376a-b0b1d53bd557');
Update
Instance
object.update();
Datastore
objectStore.update(object);
Delete
Instance
object.remove();
Datastore
objectStore.remove(object);
Summary
<script src="src/client/store.js"></script> <script> (function(){ // local variables var object, objectId, objectStore, objects; // configure store defaults Store.configure({ url: "http://localhost/store/examples/server.php", ttl: 3600 }); // create new store objectStore = new Store({ namespace: 'object' }); // create new store bound object object = objectStore.create({ country: 'US', firstname: 'Stephen', lastname: 'Colbert' }); // update on insert objectStore.update(object).done(function(object){ // wrap json object object = objectStore.create(object); // update properties object.set('firstname', 'Jon'); object.set('lastname', 'Stewart'); // extract objectId = object.get('id'); // update object objectStore.update(object).done(function(object){ // fetch object w/previously retrieved objectId objectStore.get(objectId).done(function(object){ // wrap json object object = objectStore.create(object); // say hi console.log(object.get('firstname') + " " + object.get('lastname')); }); }); }); // collect update promises objects = []; // create some objects Store.times(10, function(count){ // store update promises objects.push(objectStore.create({ title: 'No.' + count, abstract: 'Lorem Ipsum [...]', text: 'Lorem Ipsum Si Amet They Say', author: 'me', lastmod: new Date().getTime() }).update()); }); // when all objects have been updated Store.when(objects).done(function(objects){ // fetch all objects objects = objectStore.list(); // print when object have been retrieved Store.when(objects).done(function(objects){ // log each objects.forEach(function(object, index){ console.log(index, object); }); }); }); // fetch object object = objectStore.get(objectId); // process fetched object Store.when(object).done(function(object){ // execute on success console.info("done", object); }).fail(function(objects){ // execute on fail console.error("fail", objects); }).always(function(objects){ // always execute this block console.log("always", objects); }); })(); </script> <!-- example html input --> <form method="POST" action="//localhost/store/examples/server.php/resources/update" enctype="multipart/form-data"> <input type="hidden" name="namespace" value="resources"/> <input type="hidden" name="action" value="update"/> <input type="hidden" name="instance[type]" value="type"/> <input type="hidden" name="instance[name]" value="name"/> <input type="hidden" name="instance[option][key]" value="key"/> <input type="hidden" name="instance[option][value]" value="value"/> <input type="hidden" name="instance[option][lists][whitelist][]" value="good.host.com"/> <input type="hidden" name="instance[option][lists][blacklist][]" value="evil.host.com"/> <input type="file" name="instance[file]"/> <button>Update</button> </form>
Routes
...
Server API
Repositories
File Stores
Collections stored on a file basis.
Limitations
Built with prototyping in mind. Won't scale.
CSV
...
JSON
Supports embedding binary data base64 encoded.
Serialized
Stores data using PHPs serialize()
function. Supports embedding binary data base64 encoded.
Documentation
Roadmap
- Access Control
- Synchronization
- JSON Schema
- Generators
License
Released under two licenses: new BSD, and MIT. You may pick the license that best suits your development needs.