Skip to content

Instantly share code, notes, and snippets.

@aaronj1335
Created October 15, 2013 14:44
Show Gist options
  • Select an option

  • Save aaronj1335/6992679 to your computer and use it in GitHub Desktop.

Select an option

Save aaronj1335/6992679 to your computer and use it in GitHub Desktop.
define([
'msgme/user-preferences'
], function(userPreferences) {
describe('user preferences', function () {
afterEach(function () {
userPreferences.clear();
});
describe('module', function () {
it('is a function that returns a promise', function () {
expect(userPreferences).to.be.a(Function);
expect(userPreferences()).to.have.property('then');
});
it('resolves to a RecordModel-like instance', function (done) {
userPreferences().then(function(prefs) {
expect(prefs).to.have.property('save');
expect(prefs).to.have.property('del');
done();
});
});
});
});
});
define([
'waterfall/record',
'msgme/ko',
'msgme/viewmodel/mapping',
'json!widgets/shared-strings.json'
], function (record, ko, mapping, sharedStrings) {
var recordModel;
var version = sharedStrings.version;
var KEY = 'waterfall-mobile-user-prefs-' + version.major + '.' +
version.minor + '.' + version.patch;
function LocalRecordModel() {
mapping.RecordModel.apply(this, arguments);
}
LocalRecordModel.prototype.save = function () {
localStorage.setItem(KEY, ko.mapping.toJS(this));
return $.Deferred().resolve(this);
};
LocalRecordModel.prototype.del = function () {
accessor.clear();
return $.Deferred().resolve();
};
LocalRecordModel.create = function() {
return new LocalRecordModel(
new record.Record(localStorage.getItem(KEY) || {}, {url: 'local'}));
};
function accessor() {
if (!recordModel) {
recordModel = LocalRecordModel.create();
}
return $.Deferred().resolve(recordModel);
}
accessor.clear = function () {
recordModel = null;
localStorage.removeItem(KEY);
};
return accessor;
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment