Modules – Exercise (RMP)
by Colin Cheevers
JavaScript
/**
* Modules – Exercise (RMP)
*
* Use the Revealing Module Pattern to encapsulate logic into re-usable modules
*
* 1. convert Item and Collection objects into modules
* 2. import them into App module
* 3. use same tests as previous exercise
* 4. might be easier to fork your previous exercise solution and modify
*/
var App = (function (Collection, Item) {
return {
Collection: Collection,
Item: Item
};
})(Collection, Item);
var Collection = (function () {
function Collection(id) {
this.id = id;
this.items = [];
}
Collection.prototype.add = function(Item){
var totalNow = this.items.push(Item);
}
Collection.prototype.remove = function(Item){
var pos = this.items.indexOf(Item);
this.items.splice(pos, 1);
}
Collection.prototype.size = function(){
return this.items.length;
}
Collection.prototype.contains = function(Item){
return this.items.indexOf(Item) !== -1;
}
Collection.prototype.filter = function (fn) {
return this.items.filter(fn);
};
return Collection;
} ());
var Item = (function (Collection) {
function Item(id) {
this.id = id;
this.data = new Collection(this.id + 'Data');
}
Item.prototype.getById = function (id) {
return this.data.filter(function (item) {
return item.id === id;
}).pop();
}
Item.prototype.get = function (key) {
var item = this.getById(key);
return item ? item.value : undefined;
};
Item.prototype.set = function (key, value) {
var item = this.getById(key);
if (!item) {
item = {
id: key,
value: value
};
this.data.add(item);
}
item.value = value;
};
return Item;
} (Collection));
var collection1 = new Collection('collection1');
var collection2 = new Collection('collection2');
var item1 = new Item('item1');
var item2 = new Item('item2');
var item3 = new Item('item3');
item1.set('name', 'foo');
item2.set('name',...