Security News
Research
Supply Chain Attack on Rspack npm Packages Injects Cryptojacking Malware
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
ember-cli-simple-store
Advanced tools
ember-cli addon that provides a simple identity map for ember.js web applications
ember-cli addon that provides a simple identity map for ember.js web applications
$ npm install ember-cli-simple-store --save-dev
//create a new person model
this.store.push("person", {id: 1, name: "toran"});
//update an existing person model
this.store.push("person", {id: 1, name: "brandon"});
//remove person model with id=123
this.store.remove("person", 123);
//find all person models
this.store.find("person");
//find a single person model with id=123
this.store.find("person", 123);
//find all person models with account_id=789
this.store.find("person", {account_id: 789});
//clear the entire identity map of all person model objects
this.store.clear("person");
Below I'll show how you can use the store with a simple ember object to find/add/remove/update
The full example below relies on a small xhr mixin PromiseMixin
import PromiseMixin from 'js/mixins/promise';
var Person = Ember.Object.extend({
firstName: '',
lastName: '',
phone: ''
}).reopenClass(PromiseMixin, {
find: function(store) {
return this.xhr('/api/people/', 'GET').then(function(response) {
response.forEach(function(person) {
store.push('person', person);
});
return store.find('person');
});
},
findById: function(store, id) {
return store.find('person', id);
},
insert: function(store, person) {
var self = this;
var hash = {data: JSON.stringify(person)};
return new Ember.RSVP.Promise(function(resolve,reject) {
return self.xhr("/api/people/", "POST", hash).then(function(persisted) {
var inserted = store.push('person', Person.create(persisted));
resolve(inserted);
}, function(err) {
reject(err);
});
});
},
update: function(person) {
var person_id = person.get("id");
var hash = {data: JSON.stringify(person)};
var endpoint = "/api/people/%@/".fmt(person_id);
return this.xhr(endpoint, "PUT", hash);
},
remove: function(store, person) {
var self = this;
var person_id = person.get("id");
var endpoint = "/api/people/%@/".fmt(person_id);
return new Ember.RSVP.Promise(function(resolve,reject) {
return self.xhr(endpoint, "DELETE").then(function(arg) {
store.remove('person', person_id);
resolve(arg);
}, function(err) {
reject(err);
});
});
}
});
export default Person;
With this simple reference implementation you can side step the relationship complexity by adding what you need in your route(s)
import Action from "js/models/action";
import Person from "js/models/person";
var PeoplePersonRoute = Ember.Route.extend({
model: function(params) {
var store = this.get("store");
var person = Person.findById(store, params.person_id);
var actions = Action.findByPerson(store, params.person_id);
return Ember.RSVP.hash({person: person, actions: actions});
},
setupController: function(controller, hash) {
controller.set("model", hash.person);
controller.set("actions", hash.actions);
}
});
This approach is not without it's tradeoffs (ie- additional http calls to fetch related data instead of using embedded json for example). I've personally found this is a great approach for apps that want to avoid the "kitchen-sink" problem.
Because this is a simple identity map you won't get a rich model object to inherit from that offers up save/remove/update/find. You can think of this store as the primitive in which to build something like that if and when you need it.
ember test
https://github.com/toranb/ember-store-example
Copyright © 2015 Toran Billups http://toranbillups.com
Licensed under the MIT License
FAQs
ember-cli addon that provides a simple identity map for ember.js web applications
The npm package ember-cli-simple-store receives a total of 16 weekly downloads. As such, ember-cli-simple-store popularity was classified as not popular.
We found that ember-cli-simple-store demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.
Security News
Sonar’s acquisition of Tidelift highlights a growing industry shift toward sustainable open source funding, addressing maintainer burnout and critical software dependencies.