ember-cli-copyable
Advanced tools
Comparing version 0.9.5 to 0.9.6
import Ember from 'ember'; | ||
import DS from 'ember-data'; | ||
var Copyable = Ember.Mixin.create({ | ||
export default Ember.Mixin.create({ | ||
copyable: true, | ||
@@ -19,45 +19,44 @@ copy: function(options) { | ||
case 'undefined': | ||
copy.set(attr, _this.get(attr)); | ||
break; | ||
copy.set(attr, _this.get(attr)); | ||
break; | ||
case 'null': | ||
copy.set(attr, null); | ||
break; | ||
copy.set(attr, null); | ||
break; | ||
default: | ||
copy.set(attr, options[attr]); | ||
copy.set(attr, options[attr]); | ||
} | ||
}); | ||
model.eachRelationship(function(rel, meta) { | ||
if (!_this.get(rel)) { | ||
return; | ||
} | ||
model.eachRelationship(function(relName, meta) { | ||
var rel = _this.get(relName); | ||
if (!rel) { return; } | ||
var overwrite; | ||
var passedOptions = {}; | ||
switch(Ember.typeOf(options[rel])) { | ||
switch(Ember.typeOf(options[relName])) { | ||
case 'null': | ||
return; | ||
return; | ||
case 'instance': | ||
overwrite = options[rel]; | ||
break; | ||
overwrite = options[relName]; | ||
break; | ||
case 'object': | ||
passedOptions = options[rel]; | ||
break; | ||
passedOptions = options[relName]; | ||
break; | ||
case 'array': | ||
overwrite = options[rel]; | ||
break; | ||
overwrite = options[relName]; | ||
break; | ||
default: | ||
} | ||
if (_this.get(rel).constructor === DS.PromiseObject) { | ||
if (rel.constructor === DS.PromiseObject) { | ||
queue.pushObject(_this.get(rel).then(function(obj) { | ||
queue.push(rel.then(function(obj) { | ||
if (obj && obj.get('copyable')) { | ||
return obj.copy(passedOptions).then(function(objCopy) { | ||
copy.set(rel, overwrite || objCopy); | ||
copy.set(relName, overwrite || objCopy); | ||
}); | ||
} else { | ||
copy.set(rel, overwrite || obj); | ||
copy.set(relName, overwrite || obj); | ||
} | ||
@@ -68,38 +67,36 @@ | ||
} else if (_this.get(rel).constructor === DS.PromiseManyArray) { | ||
} else if (rel.constructor === DS.PromiseManyArray) { | ||
if (overwrite) { | ||
copy.get(rel).pushObjects(overwrite); | ||
copy.get(relName).pushObjects(overwrite); | ||
} else { | ||
queue.pushObject(_this.get(rel).then(function(array) { | ||
array.forEach(function(obj) { | ||
if (obj.get('copyable')) { | ||
return obj.copy(passedOptions).then(function(objCopy) { | ||
copy.get(rel).pushObject(objCopy); | ||
}); | ||
} else { | ||
copy.get(rel).pushObject(obj); | ||
} | ||
queue.push(rel.then(function(array) { | ||
var resolvedCopies = | ||
array.map(function(obj) { | ||
if (obj.get('copyable')) { | ||
return obj.copy(passedOptions); | ||
} else { | ||
return obj; | ||
} | ||
}); | ||
return Ember.RSVP.all(resolvedCopies).then(function(copies){ | ||
copy.get(relName).pushObjects(copies); | ||
}); | ||
})); | ||
} | ||
} else { | ||
if (meta.kind === 'belongsTo') { | ||
var obj = _this.get(rel); | ||
var obj = rel; | ||
if (obj && obj.get('copyable')) { | ||
queue.pushObject( obj.copy(passedOptions).then(function(objCopy) { | ||
copy.set(rel, overwrite || objCopy); | ||
queue.push( obj.copy(passedOptions).then(function(objCopy) { | ||
copy.set(relName, overwrite || objCopy); | ||
})); | ||
} else { | ||
copy.set(rel, overwrite || obj); | ||
copy.set(relName, overwrite || obj); | ||
} | ||
} else { | ||
var objs = _this.get(rel); | ||
var objs = rel; | ||
@@ -117,6 +114,6 @@ if (objs.get('content')) { | ||
if (overwrite) { | ||
copy.get(rel).pushObjects(overwrite); | ||
copy.get(relName).pushObjects(overwrite); | ||
} else { | ||
queue.pushObject( Ember.RSVP.all(copies).then( function(resolvedCopies) { | ||
copy.get(rel).pushObjects(resolvedCopies); | ||
queue.push( Ember.RSVP.all(copies).then( function(resolvedCopies) { | ||
copy.get(relName).pushObjects(resolvedCopies); | ||
})); | ||
@@ -127,3 +124,3 @@ } | ||
} else { | ||
copy.get(rel).pushObjects(overwrite || objs); | ||
copy.get(relName).pushObjects(overwrite || objs); | ||
} | ||
@@ -143,2 +140,1 @@ } | ||
export default Copyable; |
{ | ||
"name": "ember-cli-copyable", | ||
"version": "0.9.5", | ||
"version": "0.9.6", | ||
"description": "Deeply copies your records including their relations. The mixin is smart enough to resolve not loaded relations and is configurable to what should be shallow/deeply copied or excluded entirely.", | ||
@@ -5,0 +5,0 @@ "directories": { |
14123