Skip to content

Latest commit

 

History

History
89 lines (72 loc) · 3.29 KB

adapters.md

File metadata and controls

89 lines (72 loc) · 3.29 KB

Adapters

Adapters expose a consistent interface to a persistent storage implementation. A Lawnchair build enqueues adapters and mixes in the first one valid for the current environment. This pattern is common in mobile scenarios, for example, a Lawnchair built with the DOM and Gears adapters will gracefully degrade through all available Android persistence solutions.

touchdb-couchdb sync your lawnchair data between devices and the cloud
blackberry-persistent-store great for phonegap
dom localStorage (often called dom storage) **default adapter**
window-name oldest hack in the book **default fallback**
gears-sqlite for android < 2.x
ie-userdata for older versions of ie
webkit-sqlite deprecated but still perhaps useful
indexed-db the new direction of HTML5 (say that 3 times fast)
html5-filesystem a persistent and sandboxed filesystem
memory in memory reference implementation

If you require an adapter that's not listed here it is trivial to implement your own. Adapters have the following interface:

:::JavaScript
// adapter name as a string
adapter 

// boolean; true if the adapter is valid for the current environment
valid 

// ctor call and callback. 'name' is the most common option 
init ([options], callback)

// returns all the keys in the store
keys (callback)     

// save an object
save (obj, callback) 

// batch save array of objs
batch(array, callback)

// retrieve obj (or array of objs) and apply callback to each
get (key|array, callback) 

// check if an obj exists in the collection
exists (key, callback)

// returns all the objs to the callback as an array
all (callback)

// remove a doc or collection of em
remove (key|array, callback)

// destroy everything
nuke (callback)

The tests ensure adapters are consistent no matter what the underlying store is. If you are writing an adapter check out ./tests/lawnchair-spec.js. The memory adapter is probably the simplest implementation to learn from. Note, all Lawnchair methods accept a callback as a last parameter. This is deliberate, most modern clientside storages only have async style interfaces, for a good reason, your code won't block the main thread aiding in the perception of performance. That callback will be scoped to the Lawnchair instance. Make use of fn and lambda methods to allow for terse callbacks.