diff --git a/src/backend.memory.js b/src/backend.memory.js index 6fcdc5ee..53556463 100644 --- a/src/backend.memory.js +++ b/src/backend.memory.js @@ -168,7 +168,7 @@ this.recline.Backend.Memory = this.recline.Backend.Memory || {}; }; this.transform = function(editFunc) { - var toUpdate = costco.mapDocs(this.data, editFunc); + var toUpdate = recline.Data.Transform.mapDocs(this.data, editFunc); // TODO: very inefficient -- could probably just walk the documents and updates in tandem and update _.each(toUpdate.updates, function(record, idx) { self.data[idx] = record; diff --git a/src/data.transform.js b/src/data.transform.js index 24e40ff4..f7c64fba 100644 --- a/src/data.transform.js +++ b/src/data.transform.js @@ -1,68 +1,67 @@ +this.recline = this.recline || {}; +this.recline.Data = this.recline.Data || {}; + +(function(my) { // adapted from https://github.com/harthur/costco. heather rules -var costco = function() { - - function evalFunction(funcString) { - try { - eval("var editFunc = " + funcString); - } catch(e) { - return {errorMessage: e+""}; - } - return editFunc; - } - - function previewTransform(docs, editFunc, currentColumn) { - var preview = []; - var updated = mapDocs($.extend(true, {}, docs), editFunc); - for (var i = 0; i < updated.docs.length; i++) { - var before = docs[i] - , after = updated.docs[i] - ; - if (!after) after = {}; - if (currentColumn) { - preview.push({before: before[currentColumn], after: after[currentColumn]}); - } else { - preview.push({before: before, after: after}); - } - } - return preview; - } +my.Transform = {}; - function mapDocs(docs, editFunc) { - var edited = [] - , deleted = [] - , failed = [] - ; - - var updatedDocs = _.map(docs, function(doc) { - try { - var updated = editFunc(_.clone(doc)); - } catch(e) { - failed.push(doc); - return; - } - if(updated === null) { - updated = {_deleted: true}; - edited.push(updated); - deleted.push(doc); - } - else if(updated && !_.isEqual(updated, doc)) { - edited.push(updated); - } - return updated; - }); - - return { - updates: edited, - docs: updatedDocs, - deletes: deleted, - failed: failed - }; +my.Transform.evalFunction = function(funcString) { + try { + eval("var editFunc = " + funcString); + } catch(e) { + return {errorMessage: e+""}; } + return editFunc; +}; + +my.Transform.previewTransform = function(docs, editFunc, currentColumn) { + var preview = []; + var updated = my.Transform.mapDocs($.extend(true, {}, docs), editFunc); + for (var i = 0; i < updated.docs.length; i++) { + var before = docs[i] + , after = updated.docs[i] + ; + if (!after) after = {}; + if (currentColumn) { + preview.push({before: before[currentColumn], after: after[currentColumn]}); + } else { + preview.push({before: before, after: after}); + } + } + return preview; +}; + +my.Transform.mapDocs = function(docs, editFunc) { + var edited = [] + , deleted = [] + , failed = [] + ; + + var updatedDocs = _.map(docs, function(doc) { + try { + var updated = editFunc(_.clone(doc)); + } catch(e) { + failed.push(doc); + return; + } + if(updated === null) { + updated = {_deleted: true}; + edited.push(updated); + deleted.push(doc); + } + else if(updated && !_.isEqual(updated, doc)) { + edited.push(updated); + } + return updated; + }); return { - evalFunction: evalFunction, - previewTransform: previewTransform, - mapDocs: mapDocs + updates: edited, + docs: updatedDocs, + deletes: deleted, + failed: failed }; -}(); +}; + +}(this.recline.Data)) diff --git a/src/view.transform.js b/src/view.transform.js index 9fe8cc7a..4b6d9b3f 100644 --- a/src/view.transform.js +++ b/src/view.transform.js @@ -57,7 +57,7 @@ my.Transform = Backbone.View.extend({ onSubmit: function(e) { var self = this; var funcText = this.el.find('.expression-preview-code').val(); - var editFunc = costco.evalFunction(funcText); + var editFunc = recline.Data.Transform.evalFunction(funcText); if (editFunc.errorMessage) { this.trigger('recline:flash', {message: "Error with function! " + editFunc.errorMessage}); return; @@ -97,13 +97,13 @@ my.Transform = Backbone.View.extend({ // if you don't setTimeout it won't grab the latest character if you call e.target.value window.setTimeout( function() { var errors = self.el.find('.expression-preview-parsing-status'); - var editFunc = costco.evalFunction(e.target.value); + var editFunc = recline.Data.Transform.evalFunction(e.target.value); if (!editFunc.errorMessage) { errors.text('No syntax error.'); var docs = self.model.records.map(function(doc) { return doc.toJSON(); }); - var previewData = costco.previewTransform(docs, editFunc); + var previewData = recline.Data.Transform.previewTransform(docs, editFunc); var $el = self.el.find('.expression-preview-container'); var fields = self.model.fields.toJSON(); var rows = _.map(previewData.slice(0,4), function(row) {