Sha256: 0ae246deae3ce13a427dfd40b1976bb03d3104959637794c5acb9bf3ac96445d
Contents?: true
Size: 1.71 KB
Versions: 6
Compression:
Stored size: 1.71 KB
Contents
// Backbone Factory JS // https://github.com/SupportBee/Backbone-Factory (function(){ window.BackboneFactory = { factories: {}, sequences: {}, define: function(factory_name, klass, defaults){ // Check for arguments' sanity if(factory_name.match(/[^\w-_]+/)){ throw "Factory name should not contain spaces or other funky characters"; } if(defaults === undefined) defaults = function(){return {}}; // The object creator this.factories[factory_name] = function(options){ if(options === undefined) options = function(){return {}}; arguments = _.extend({}, {id: BackboneFactory.next("_" + factory_name + "_id")}, defaults.call(), options.call()); return new klass(arguments); }; // Lets define a sequence for id BackboneFactory.define_sequence("_"+ factory_name +"_id", function(n){ return n }); }, create: function(factory_name, options){ if(this.factories[factory_name] === undefined){ throw "Factory with name " + factory_name + " does not exist"; } return this.factories[factory_name].apply(null, [options]); }, define_sequence: function(sequence_name, callback){ this.sequences[sequence_name] = {} this.sequences[sequence_name]['counter'] = 0; this.sequences[sequence_name]['callback'] = callback; }, next: function(sequence_name){ if(this.sequences[sequence_name] === undefined){ throw "Sequence with name " + sequence_name + " does not exist"; } this.sequences[sequence_name]['counter'] += 1; return this.sequences[sequence_name]['callback'].apply(null, [this.sequences[sequence_name]['counter']]); //= callback; } } })();
Version data entries
6 entries across 6 versions & 1 rubygems