ember-data-source 1.0.0.beta.9 → 1.0.0.beta.10

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,3 @@
1
- (function(e){var r,t,i,a;(function(){var e;if(!Array.isArray){e=function(e){return Object.prototype.toString.call(e)==="[object Array]"}}else{e=Array.isArray}var n={},s={},o={};var d=false;r=function(r,t,i){if(!e(t)){i=t;t=[]}n[r]={deps:t,callback:i}};function u(e,r,t){var a=e.length;var n=new Array(a);var s;var o;for(var d=0,u=a;d<u;d++){s=e[d];if(s==="exports"){o=n[d]=t}else{n[d]=i(c(s,r))}}return{deps:n,exports:o}}a=i=t=function(e){if(o[e]!==d&&s.hasOwnProperty(e)){return s[e]}if(!n[e]){throw new Error("Could not find module "+e)}var r=n[e];var t;var i;var a=false;s[e]={};try{t=u(r.deps,e,s[e]);i=r.callback.apply(this,t.deps);a=true}finally{if(!a){o[e]=d}}return t.exports?s[e]:s[e]=i};function c(e,r){if(e.charAt(0)!=="."){return e}var t=e.split("/");var i=r.split("/");var a;if(i.length===1){a=i}else{a=i.slice(0,-1)}for(var n=0,s=t.length;n<s;n++){var o=t[n];if(o===".."){a.pop()}else if(o==="."){continue}else{a.push(o)}}return a.join("/")}a.entries=a._eak_seen=n;a.clear=function(){a.entries=a._eak_seen=n={};s=o={}}})();r("activemodel-adapter",["activemodel-adapter/system","exports"],function(e,r){"use strict";var t=e.ActiveModelAdapter;var i=e.ActiveModelSerializer;r.ActiveModelAdapter=t;r.ActiveModelSerializer=i});r("activemodel-adapter/setup-container",["ember-data/system/container_proxy","activemodel-adapter/system/active_model_serializer","activemodel-adapter/system/active_model_adapter","exports"],function(e,r,t,i){"use strict";var a=e["default"];var n=r["default"];var s=t["default"];i["default"]=function o(e,r){var t=new a(e);t.registerDeprecations([{deprecated:"serializer:_ams",valid:"serializer:-active-model"},{deprecated:"adapter:_ams",valid:"adapter:-active-model"}]);e.register("serializer:-active-model",n);e.register("adapter:-active-model",s)}});r("activemodel-adapter/system",["activemodel-adapter/system/active_model_adapter","activemodel-adapter/system/active_model_serializer","exports"],function(e,r,t){"use strict";var i=e["default"];var a=r["default"];t.ActiveModelAdapter=i;t.ActiveModelSerializer=a});r("activemodel-adapter/system/active_model_adapter",["ember-data/adapters","ember-data/system/adapter","ember-inflector","activemodel-adapter/system/active_model_serializer","exports"],function(e,r,t,i,a){"use strict";var n=e.RESTAdapter;var s=r.InvalidError;var o=t.pluralize;var d=i["default"];var u=Ember.EnumerableUtils.forEach;var c=Ember.String.decamelize,l=Ember.String.underscore;var f=n.extend({defaultSerializer:"-active-model",pathForType:function(e){var r=c(e);var t=l(r);return o(t)},ajaxError:function(e){var r=this._super(e);if(e&&e.status===422){var t=Ember.$.parseJSON(e.responseText),i={};if(t.errors!==undefined){var a=t.errors;u(Ember.keys(a),function(e){i[Ember.String.camelize(e)]=a[e]})}return new s(i)}else{return r}}});a["default"]=f});r("activemodel-adapter/system/active_model_serializer",["ember-inflector","ember-data/serializers/rest_serializer","exports"],function(e,r,t){"use strict";var i=e.singularize;var a=r["default"];var n=Ember.get,s=Ember.EnumerableUtils.forEach,o=Ember.String.camelize,d=Ember.String.capitalize,u=Ember.String.decamelize,c=Ember.String.underscore;var l=a.extend({keyForAttribute:function(e){return u(e)},keyForRelationship:function(e,r){var t=u(e);if(r==="belongsTo"){return t+"_id"}else if(r==="hasMany"){return i(t)+"_ids"}else{return t}},serializeHasMany:Ember.K,serializeIntoHash:function(e,r,t,i){var a=c(u(r.typeKey));e[a]=this.serialize(t,i)},serializePolymorphicType:function(e,r,t){var i=t.key;var a=n(e,i);var s=c(i+"_type");if(Ember.isNone(a)){r[s]=null}else{r[s]=d(o(a.constructor.typeKey))}},normalize:function(e,r,t){this.normalizeLinks(r);return this._super(e,r,t)},normalizeLinks:function(e){if(e.links){var r=e.links;for(var t in r){var i=o(t);if(i!==t){r[i]=r[t];delete r[t]}}}},normalizeRelationships:function(e,r){if(this.keyForRelationship){e.eachRelationship(function(e,t){var i,a;if(t.options.polymorphic){i=this.keyForAttribute(e);a=r[i];if(a&&a.type){a.type=this.typeForRoot(a.type)}else if(a&&t.kind==="hasMany"){var n=this;s(a,function(e){e.type=n.typeForRoot(e.type)})}}else{i=this.keyForRelationship(e,t.kind);if(!r.hasOwnProperty(i)){return}a=r[i]}r[e]=a;if(e!==i){delete r[i]}},this)}}});t["default"]=l});r("ember-data",["ember-data/core","ember-data/ext/date","ember-data/system/store","ember-data/system/model","ember-data/system/changes","ember-data/system/adapter","ember-data/system/debug","ember-data/system/record_arrays","ember-data/system/record_array_manager","ember-data/adapters","ember-data/serializers/json_serializer","ember-data/serializers/rest_serializer","ember-inflector","ember-data/serializers/embedded_records_mixin","activemodel-adapter","ember-data/transforms","ember-data/system/relationships","ember-data/ember-initializer","ember-data/setup-container","ember-data/system/container_proxy","exports"],function(e,r,t,i,a,n,s,o,d,u,c,l,f,h,p,m,v,y,b,g,R){"use strict";Ember.RSVP.Promise.cast=Ember.RSVP.Promise.cast||Ember.RSVP.resolve;var E=e["default"];var _=t.Store;var F=t.PromiseArray;var A=t.PromiseObject;var T=i.Model;var z=i.Errors;var S=i.RootState;var x=i.attr;var C=a.AttributeChange;var M=a.RelationshipChange;var k=a.RelationshipChangeAdd;var O=a.RelationshipChangeRemove;var D=a.OneToManyChange;var P=a.ManyToNoneChange;var w=a.OneToOneChange;var I=a.ManyToManyChange;var N=n.InvalidError;var $=n.Adapter;var K=s["default"];var j=o.RecordArray;var L=o.FilteredRecordArray;var U=o.AdapterPopulatedRecordArray;var B=o.ManyArray;var V=d["default"];var H=u.RESTAdapter;var W=u.FixtureAdapter;var q=c["default"];var Q=l["default"];var X=h["default"];var J=p.ActiveModelAdapter;var G=p.ActiveModelSerializer;var Y=m.Transform;var Z=m.DateTransform;var er=m.NumberTransform;var rr=m.StringTransform;var tr=m.BooleanTransform;var ir=v.hasMany;var ar=v.belongsTo;var nr=b["default"];var sr=g["default"];E.Store=_;E.PromiseArray=F;E.PromiseObject=A;E.Model=T;E.RootState=S;E.attr=x;E.Errors=z;E.AttributeChange=C;E.RelationshipChange=M;E.RelationshipChangeAdd=k;E.OneToManyChange=D;E.ManyToNoneChange=D;E.OneToOneChange=w;E.ManyToManyChange=I;E.Adapter=$;E.InvalidError=N;E.DebugAdapter=K;E.RecordArray=j;E.FilteredRecordArray=L;E.AdapterPopulatedRecordArray=U;E.ManyArray=B;E.RecordArrayManager=V;E.RESTAdapter=H;E.FixtureAdapter=W;E.RESTSerializer=Q;E.JSONSerializer=q;E.Transform=Y;E.DateTransform=Z;E.StringTransform=rr;E.NumberTransform=er;E.BooleanTransform=tr;E.ActiveModelAdapter=J;E.ActiveModelSerializer=G;E.EmbeddedRecordsMixin=X;E.belongsTo=ar;E.hasMany=ir;E.ContainerProxy=sr;E._setupContainer=nr;Ember.lookup.DS=E;R["default"]=E});r("ember-data/adapters",["ember-data/adapters/fixture_adapter","ember-data/adapters/rest_adapter","exports"],function(e,r,t){"use strict";var i=e["default"];var a=r["default"];t.RESTAdapter=a;t.FixtureAdapter=i});r("ember-data/adapters/fixture_adapter",["ember-data/system/adapter","exports"],function(e,r){"use strict";var t=Ember.get;var i=Ember.String.fmt;var a=Ember.EnumerableUtils.indexOf;var n=0;var s=e["default"];r["default"]=s.extend({serializer:null,simulateRemoteResponse:true,latency:50,fixturesForType:function(e){if(e.FIXTURES){var r=Ember.A(e.FIXTURES);return r.map(function(e){var r=typeof e.id;if(r!=="number"&&r!=="string"){throw new Error(i("the id property must be defined as a number or string for fixture %@",[e]))}e.id=e.id+"";return e})}return null},queryFixtures:function(e,r,t){},updateFixtures:function(e,r){if(!e.FIXTURES){e.FIXTURES=[]}var t=e.FIXTURES;this.deleteLoadedFixture(e,r);t.push(r)},mockJSON:function(e,r,t){return e.serializerFor(r).serialize(t,{includeId:true})},generateIdForRecord:function(e){return"fixture-"+n++},find:function(e,r,t){var i=this.fixturesForType(r);var a;if(i){a=Ember.A(i).findBy("id",t)}if(a){return this.simulateRemoteCall(function(){return a},this)}},findMany:function(e,r,t){var i=this.fixturesForType(r);if(i){i=i.filter(function(e){return a(t,e.id)!==-1})}if(i){return this.simulateRemoteCall(function(){return i},this)}},findAll:function(e,r){var t=this.fixturesForType(r);return this.simulateRemoteCall(function(){return t},this)},findQuery:function(e,r,t,i){var a=this.fixturesForType(r);a=this.queryFixtures(a,t,r);if(a){return this.simulateRemoteCall(function(){return a},this)}},createRecord:function(e,r,t){var i=this.mockJSON(e,r,t);this.updateFixtures(r,i);return this.simulateRemoteCall(function(){return i},this)},updateRecord:function(e,r,t){var i=this.mockJSON(e,r,t);this.updateFixtures(r,i);return this.simulateRemoteCall(function(){return i},this)},deleteRecord:function(e,r,t){this.deleteLoadedFixture(r,t);return this.simulateRemoteCall(function(){return null})},deleteLoadedFixture:function(e,r){var t=this.findExistingFixture(e,r);if(t){var i=a(e.FIXTURES,t);e.FIXTURES.splice(i,1);return true}},findExistingFixture:function(e,r){var i=this.fixturesForType(e);var a=t(r,"id");return this.findFixtureById(i,a)},findFixtureById:function(e,r){return Ember.A(e).find(function(e){if(""+t(e,"id")===""+r){return true}else{return false}})},simulateRemoteCall:function(e,r){var i=this;return new Ember.RSVP.Promise(function(a){if(t(i,"simulateRemoteResponse")){Ember.run.later(function(){a(e.call(r))},t(i,"latency"))}else{Ember.run.schedule("actions",null,function(){a(e.call(r))})}},"DS: FixtureAdapter#simulateRemoteCall")}})});r("ember-data/adapters/rest_adapter",["ember-data/system/adapter","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.get;var a=Ember.ArrayPolyfills.forEach;r["default"]=t.extend({defaultSerializer:"-rest",coalesceFindRequests:false,find:function(e,r,t,i){return this.ajax(this.buildURL(r.typeKey,t,i),"GET")},findAll:function(e,r,t){var i;if(t){i={since:t}}return this.ajax(this.buildURL(r.typeKey),"GET",{data:i})},findQuery:function(e,r,t){return this.ajax(this.buildURL(r.typeKey),"GET",{data:t})},findMany:function(e,r,t,i){return this.ajax(this.buildURL(r.typeKey,t,i),"GET",{data:{ids:t}})},findHasMany:function(e,r,t){var a=i(this,"host");var n=i(r,"id");var s=r.constructor.typeKey;if(a&&t.charAt(0)==="/"&&t.charAt(1)!=="/"){t=a+t}return this.ajax(this.urlPrefix(t,this.buildURL(s,n)),"GET")},findBelongsTo:function(e,r,t){var a=i(r,"id");var n=r.constructor.typeKey;return this.ajax(this.urlPrefix(t,this.buildURL(n,a)),"GET")},createRecord:function(e,r,t){var i={};var a=e.serializerFor(r.typeKey);a.serializeIntoHash(i,r,t,{includeId:true});return this.ajax(this.buildURL(r.typeKey,null,t),"POST",{data:i})},updateRecord:function(e,r,t){var a={};var n=e.serializerFor(r.typeKey);n.serializeIntoHash(a,r,t);var s=i(t,"id");return this.ajax(this.buildURL(r.typeKey,s,t),"PUT",{data:a})},deleteRecord:function(e,r,t){var a=i(t,"id");return this.ajax(this.buildURL(r.typeKey,a,t),"DELETE")},buildURL:function(e,r,t){var a=[],n=i(this,"host"),s=this.urlPrefix();if(e){a.push(this.pathForType(e))}if(r&&!Ember.isArray(r)){a.push(r)}if(s){a.unshift(s)}a=a.join("/");if(!n&&a){a="/"+a}return a},urlPrefix:function(e,r){var t=i(this,"host");var a=i(this,"namespace");var n=[];if(e){if(e.charAt(0)==="/"){if(t){e=e.slice(1);n.push(t)}}else if(!/^http(s)?:\/\//.test(e)){n.push(r)}}else{if(t){n.push(t)}if(a){n.push(a)}}if(e){n.push(e)}return n.join("/")},_stripIDFromURL:function(e,r){var t=e.modelFor(r);var i=this.buildURL(t.typeKey,r.get("id"),r);var a=i.split("/");var s=a[a.length-1];var o=r.get("id");if(s===o){a[a.length-1]=""}else if(n(s,"?id="+o)){a[a.length-1]=s.substring(0,s.length-o.length-1)}return a.join("/")},groupRecordsForFindMany:function(e,r){var t=Ember.MapWithDefault.create({defaultValue:function(){return[]}});var i=this;a.call(r,function(r){var a=i._stripIDFromURL(e,r);t.get(a).push(r)});function n(r,t){var n=i._stripIDFromURL(e,r[0]);var s=0;var o=[[]];a.call(r,function(e){var r="&ids[]=".length+e.get("id.length");if(n.length+s+r>=t){s=0;o.push([])}s+=r;var i=o.length-1;o[i].push(e)});return o}var s=[];t.forEach(function(e,r){var t=2048;var i=n(r,t);a.call(i,function(e){s.push(e)})});return s},pathForType:function(e){var r=Ember.String.camelize(e);return Ember.String.pluralize(r)},ajaxError:function(e){if(e&&typeof e==="object"){e.then=null}return e},ajax:function(e,r,t){var i=this;return new Ember.RSVP.Promise(function(a,n){var s=i.ajaxOptions(e,r,t);s.success=function(e){Ember.run(null,a,e)};s.error=function(e,r,t){Ember.run(null,n,i.ajaxError(e))};Ember.$.ajax(s)},"DS: RESTAdapter#ajax "+r+" to "+e)},ajaxOptions:function(e,r,t){var n=t||{};n.url=e;n.type=r;n.dataType="json";n.context=this;if(n.data&&r!=="GET"){n.contentType="application/json; charset=utf-8";n.data=JSON.stringify(n.data)}var s=i(this,"headers");if(s!==undefined){n.beforeSend=function(e){a.call(Ember.keys(s),function(r){e.setRequestHeader(r,s[r])})}}return n}});function n(e,r){if(typeof String.prototype.endsWith!=="function"){return e.indexOf(r,e.length-r.length)!==-1}else{return e.endsWith(r)}}});r("ember-data/core",["exports"],function(e){"use strict";var r;if("undefined"===typeof r){r=Ember.Namespace.create({VERSION:"1.0.0-beta.9"});if(Ember.libraries){Ember.libraries.registerCoreLibrary("Ember Data",r.VERSION)}}e["default"]=r});r("ember-data/ember-initializer",["ember-data/setup-container"],function(e){"use strict";var r=e["default"];var t=Ember.K;Ember.onLoad("Ember.Application",function(e){e.initializer({name:"ember-data",initialize:r});e.initializer({name:"store",after:"ember-data",initialize:t});e.initializer({name:"activeModelAdapter",before:"store",initialize:t});e.initializer({name:"transforms",before:"store",initialize:t});e.initializer({name:"data-adapter",before:"store",initialize:t});e.initializer({name:"injectStore",before:"store",initialize:t})})});r("ember-data/ext/date",[],function(){"use strict";Ember.Date=Ember.Date||{};var e=Date.parse,r=[1,4,5,6,7,10,11];Ember.Date.parse=function(t){var i,a,n=0;if(a=/^(\d{4}|[+\-]\d{6})(?:-(\d{2})(?:-(\d{2}))?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{3}))?)?(?:(Z)|([+\-])(\d{2})(?::(\d{2}))?)?)?$/.exec(t)){for(var s=0,o;o=r[s];++s){a[o]=+a[o]||0}a[2]=(+a[2]||1)-1;a[3]=+a[3]||1;if(a[8]!=="Z"&&a[9]!==undefined){n=a[10]*60+a[11];if(a[9]==="+"){n=0-n}}i=Date.UTC(a[1],a[2],a[3],a[4],a[5]+n,a[6],a[7])}else{i=e?e(t):NaN}return i};if(Ember.EXTEND_PROTOTYPES===true||Ember.EXTEND_PROTOTYPES.Date){Date.parse=Ember.Date.parse}});r("ember-data/initializers/data_adapter",["ember-data/system/debug/debug_adapter","exports"],function(e,r){"use strict";var t=e["default"];r["default"]=function i(e){e.register("data-adapter:main",t)}});r("ember-data/initializers/store",["ember-data/serializers","ember-data/adapters","ember-data/system/container_proxy","ember-data/system/store","exports"],function(e,r,t,i,a){"use strict";var n=e.JSONSerializer;var s=e.RESTSerializer;var o=r.RESTAdapter;var d=t["default"];var u=i["default"];a["default"]=function c(e,r){e.register("store:main",e.lookupFactory("store:application")||r&&r.Store||u);var t=new d(e);t.registerDeprecations([{deprecated:"serializer:_default",valid:"serializer:-default"},{deprecated:"serializer:_rest",valid:"serializer:-rest"},{deprecated:"adapter:_rest",valid:"adapter:-rest"}]);e.register("serializer:-default",n);e.register("serializer:-rest",s);e.register("adapter:-rest",o);e.lookup("store:main")}});r("ember-data/initializers/store_injections",["exports"],function(e){"use strict";e["default"]=function r(e){e.injection("controller","store","store:main");e.injection("route","store","store:main");e.injection("serializer","store","store:main");e.injection("data-adapter","store","store:main")}});r("ember-data/initializers/transforms",["ember-data/transforms","exports"],function(e,r){"use strict";var t=e.BooleanTransform;var i=e.DateTransform;var a=e.StringTransform;var n=e.NumberTransform;r["default"]=function s(e){e.register("transform:boolean",t);e.register("transform:date",i);e.register("transform:number",n);e.register("transform:string",a)}});r("ember-data/serializers",["ember-data/serializers/json_serializer","ember-data/serializers/rest_serializer","exports"],function(e,r,t){"use strict";var i=e["default"];var a=r["default"];t.JSONSerializer=i;t.RESTSerializer=a});r("ember-data/serializers/embedded_records_mixin",["ember-inflector","exports"],function(e,r){"use strict";var t=Ember.get;var i=Ember.EnumerableUtils.forEach;var a=Ember.String.camelize;var n=e.pluralize;var s=Ember.Mixin.create({normalize:function(e,r,t){var i=this._super(e,r,t);return o(this,this.store,e,i)},keyForRelationship:function(e,r){if(this.hasDeserializeRecordsOption(e)){return this.keyForAttribute(e)}else{return this._super(e,r)||e}},serializeBelongsTo:function(e,r,i){var a=i.key;var n=this.get("attrs");if(this.noSerializeOptionSpecified(a)){this._super(e,r,i);return}var s=this.hasSerializeIdsOption(a);var o=this.hasSerializeRecordsOption(a);var d=e.get(a);var u;if(s){u=this.keyForRelationship(a,i.kind);if(!d){r[u]=null}else{r[u]=t(d,"id")}}else if(o){u=this.keyForAttribute(a);if(!d){r[u]=null}else{r[u]=d.serialize({includeId:true});this.removeEmbeddedForeignKey(e,d,i,r[u])}}},serializeHasMany:function(e,r,i){var a=i.key;var n=this.get("attrs");if(this.noSerializeOptionSpecified(a)){this._super(e,r,i);return}var s=this.hasSerializeIdsOption(a);var o=this.hasSerializeRecordsOption(a);var d;if(s){d=this.keyForRelationship(a,i.kind);r[d]=t(e,a).mapBy("id")}else if(o){d=this.keyForAttribute(a);r[d]=t(e,a).map(function(r){var t=r.serialize({includeId:true});this.removeEmbeddedForeignKey(e,r,i,t);return t},this)}},removeEmbeddedForeignKey:function(e,r,t,i){if(t.kind==="hasMany"){return}else if(t.kind==="belongsTo"){var a=e.constructor.inverseFor(t.key);if(a){var n=a.name;var s=this.store.serializerFor(r.constructor);var o=s.keyForRelationship(n,a.kind);if(o){delete i[o]}}}},hasEmbeddedAlwaysOption:function(e){var r=this.attrsOption(e);return r&&r.embedded==="always"},hasSerializeRecordsOption:function(e){var r=this.hasEmbeddedAlwaysOption(e);var t=this.attrsOption(e);return r||t&&t.serialize==="records"},hasSerializeIdsOption:function(e){var r=this.attrsOption(e);return r&&(r.serialize==="ids"||r.serialize==="id")},noSerializeOptionSpecified:function(e){var r=this.attrsOption(e);var t=this.hasSerializeRecordsOption(e);var i=this.hasSerializeIdsOption(e);return!(r&&(r.serialize||r.embedded))},hasDeserializeRecordsOption:function(e){var r=this.hasEmbeddedAlwaysOption(e);var t=this.attrsOption(e);return r||t&&t.deserialize==="records"},attrsOption:function(e){var r=this.get("attrs");return r&&(r[a(e)]||r[e])}});function o(e,r,t,i){t.eachRelationship(function(t,a){if(e.hasDeserializeRecordsOption(t)){var n=r.modelFor(a.type.typeKey);if(a.kind==="hasMany"){d(r,t,n,i)}if(a.kind==="belongsTo"){u(r,t,n,i)}}});return i}function d(e,r,t,a){if(!a[r]){return a}var n=[];var s=e.serializerFor(t.typeKey);i(a[r],function(r){var i=s.normalize(t,r,null);e.push(t,i);n.push(i.id)});a[r]=n;return a}function u(e,r,t,i){if(!i[r]){return i}var a=e.serializerFor(t.typeKey);var n=a.normalize(t,i[r],null);e.push(t,n);i[r]=n.id;return i}r["default"]=s});r("ember-data/serializers/json_serializer",["ember-data/system/changes","exports"],function(e,r){"use strict";var t=e.RelationshipChange;var i=Ember.get;var a=Ember.set;var n=Ember.isNone;var s=Ember.ArrayPolyfills.map;var o=Ember.merge;r["default"]=Ember.Object.extend({primaryKey:"id",applyTransforms:function(e,r){e.eachTransformedAttribute(function(e,t){if(!r.hasOwnProperty(e)){return}var i=this.transformFor(t);r[e]=i.deserialize(r[e])},this);return r},normalize:function(e,r){if(!r){return r}this.normalizeId(r);this.normalizeAttributes(e,r);this.normalizeRelationships(e,r);this.normalizeUsingDeclaredMapping(e,r);this.applyTransforms(e,r);return r},normalizePayload:function(e){return e},normalizeAttributes:function(e,r){var t,i;if(this.keyForAttribute){e.eachAttribute(function(e){t=this.keyForAttribute(e);if(e===t){return}if(!r.hasOwnProperty(t)){return}r[e]=r[t];delete r[t]},this)}},normalizeRelationships:function(e,r){var t,i;if(this.keyForRelationship){e.eachRelationship(function(e,i){t=this.keyForRelationship(e,i.kind);if(e===t){return}if(!r.hasOwnProperty(t)){return}r[e]=r[t];delete r[t]},this)}},normalizeUsingDeclaredMapping:function(e,r){var t=i(this,"attrs"),a,n;if(t){for(n in t){a=this._getMappedKey(n);if(!r.hasOwnProperty(a)){continue}if(a!==n){r[n]=r[a];delete r[a]}}}},normalizeId:function(e){var r=i(this,"primaryKey");if(r==="id"){return}e.id=e[r];delete e[r]},_getMappedKey:function(e){var r=i(this,"attrs");var t;if(r&&r[e]){t=r[e];if(t.key){t=t.key}if(typeof t==="string"){e=t}}return e},_canSerialize:function(e){var r=i(this,"attrs");return!r||!r[e]||r[e].serialize!==false},serialize:function(e,r){var t={};if(r&&r.includeId){var a=i(e,"id");if(a){t[i(this,"primaryKey")]=a}}e.eachAttribute(function(r,i){this.serializeAttribute(e,t,r,i)},this);e.eachRelationship(function(r,i){if(i.kind==="belongsTo"){this.serializeBelongsTo(e,t,i)}else if(i.kind==="hasMany"){this.serializeHasMany(e,t,i)}},this);return t},serializeIntoHash:function(e,r,t,i){o(e,this.serialize(t,i))},serializeAttribute:function(e,r,t,a){var n=a.type;if(this._canSerialize(t)){var s=i(e,t);if(n){var o=this.transformFor(n);s=o.serialize(s)}var d=this._getMappedKey(t);if(d===t&&this.keyForAttribute){d=this.keyForAttribute(t)}r[d]=s}},serializeBelongsTo:function(e,r,t){var a=t.key;if(this._canSerialize(a)){var s=i(e,a);var o=this._getMappedKey(a);if(o===a&&this.keyForRelationship){o=this.keyForRelationship(a,"belongsTo")}if(n(s)){r[o]=s}else{r[o]=i(s,"id")}if(t.options.polymorphic){this.serializePolymorphicType(e,r,t)}}},serializeHasMany:function(e,r,a){var n=a.key;if(this._canSerialize(n)){var s;s=this._getMappedKey(n);if(s===n&&this.keyForRelationship){s=this.keyForRelationship(n,"hasMany")}var o=t.determineRelationshipType(e.constructor,a);if(o==="manyToNone"||o==="manyToMany"){r[s]=i(e,n).mapBy("id")}}},serializePolymorphicType:Ember.K,extract:function(e,r,t,i,a){this.extractMeta(e,r,t);var n="extract"+a.charAt(0).toUpperCase()+a.substr(1);return this[n](e,r,t,i,a)},extractFindAll:function(e,r,t,i,a){return this.extractArray(e,r,t,i,a)},extractFindQuery:function(e,r,t,i,a){return this.extractArray(e,r,t,i,a)},extractFindMany:function(e,r,t,i,a){return this.extractArray(e,r,t,i,a)},extractFindHasMany:function(e,r,t,i,a){return this.extractArray(e,r,t,i,a)},extractCreateRecord:function(e,r,t,i,a){return this.extractSave(e,r,t,i,a)},extractUpdateRecord:function(e,r,t,i,a){return this.extractSave(e,r,t,i,a)},extractDeleteRecord:function(e,r,t,i,a){return this.extractSave(e,r,t,i,a)},extractFind:function(e,r,t,i,a){return this.extractSingle(e,r,t,i,a)},extractFindBelongsTo:function(e,r,t,i,a){return this.extractSingle(e,r,t,i,a)},extractSave:function(e,r,t,i,a){return this.extractSingle(e,r,t,i,a)},extractSingle:function(e,r,t,i,a){t=this.normalizePayload(t);return this.normalize(r,t)},extractArray:function(e,r,t,i,a){var n=this.normalizePayload(t);var o=this;return s.call(n,function(e){return o.normalize(r,e)})},extractMeta:function(e,r,t){if(t&&t.meta){e.metaForType(r,t.meta);delete t.meta}},keyForAttribute:function(e){return e},keyForRelationship:function(e,r){return e},transformFor:function(e,r){var t=this.container.lookup("transform:"+e);return t}})});r("ember-data/serializers/rest_serializer",["ember-data/serializers/json_serializer","ember-inflector/system/string","exports"],function(e,r,t){"use strict";var i=e["default"];var a=Ember.get;var n=Ember.set;var s=Ember.ArrayPolyfills.forEach;var o=Ember.ArrayPolyfills.map;var d=Ember.String.camelize;var u=r.singularize;function c(e){return e==null?null:e+""}t["default"]=i.extend({normalize:function(e,r,t){this.normalizeId(r);this.normalizeAttributes(e,r);this.normalizeRelationships(e,r);this.normalizeUsingDeclaredMapping(e,r);if(this.normalizeHash&&this.normalizeHash[t]){this.normalizeHash[t](r)}this.applyTransforms(e,r);return r},extractSingle:function(e,r,t,i){var a=this.normalizePayload(t);var n=r.typeKey;var o;for(var d in a){var u=this.typeForRoot(d);var l=e.modelFor(u);var f=l.typeKey===n;var h=a[d];if(f&&Ember.typeOf(h)!=="array"){o=this.normalize(r,h,d);continue}s.call(h,function(r){var t=this.typeForRoot(d);var a=e.modelFor(t);var n=e.serializerFor(a);r=n.normalize(a,r,d);var s=f&&!i&&!o;var u=f&&c(r.id)===i;if(s||u){o=r}else{e.push(t,r)}},this)}return o},extractArray:function(e,r,t){var i=this.normalizePayload(t);var a=r.typeKey;var n;for(var s in i){var d=s;var u=false;if(s.charAt(0)==="_"){u=true;d=s.substr(1)}var c=this.typeForRoot(d);var l=e.modelFor(c);var f=e.serializerFor(l);var h=!u&&l.typeKey===a;var p=o.call(i[s],function(e){return f.normalize(l,e,s)},this);if(h){n=p}else{e.pushMany(c,p)}}return n},pushPayload:function(e,r){var t=this.normalizePayload(r);for(var i in t){var a=this.typeForRoot(i);var n=e.modelFor(a);var s=e.serializerFor(n);var d=o.call(Ember.makeArray(t[i]),function(e){return s.normalize(n,e,i)},this);e.pushMany(a,d)}},typeForRoot:function(e){return d(u(e))},serialize:function(e,r){return this._super.apply(this,arguments)},serializeIntoHash:function(e,r,t,i){e[r.typeKey]=this.serialize(t,i)},serializePolymorphicType:function(e,r,t){var i=t.key;var n=a(e,i);i=this.keyForAttribute?this.keyForAttribute(i):i;if(Ember.isNone(n)){r[i+"Type"]=null}else{r[i+"Type"]=Ember.String.camelize(n.constructor.typeKey)}}})});r("ember-data/setup-container",["ember-data/initializers/store","ember-data/initializers/transforms","ember-data/initializers/store_injections","ember-data/initializers/data_adapter","activemodel-adapter/setup-container","exports"],function(e,r,t,i,a,n){"use strict";var s=e["default"];var o=r["default"];var d=t["default"];var u=i["default"];var c=a["default"];n["default"]=function l(e,r){u(e,r);o(e,r);d(e,r);s(e,r);c(e,r)}});r("ember-data/system/adapter",["exports"],function(e){"use strict";var r=Ember.get;var t=Ember.set;var i=Ember.ArrayPolyfills.map;var a=["description","fileName","lineNumber","message","name","number","stack"];function n(e){var r=Error.prototype.constructor.call(this,"The backend rejected the commit because it was invalid: "+Ember.inspect(e));this.errors=e;for(var t=0,i=a.length;t<i;t++){this[a[t]]=r[a[t]]}}n.prototype=Ember.create(Error.prototype);var s=Ember.Object.extend({find:Ember.required(Function),findAll:null,findQuery:null,generateIdForRecord:null,serialize:function(e,t){return r(e,"store").serializerFor(e.constructor.typeKey).serialize(e,t)},createRecord:Ember.required(Function),updateRecord:Ember.required(Function),deleteRecord:Ember.required(Function),coalesceFindRequests:true,groupRecordsForFindMany:function(e,r){return[r]}});e.InvalidError=n;e.Adapter=s;e["default"]=s});r("ember-data/system/changes",["ember-data/system/changes/relationship_change","exports"],function(e,r){"use strict";var t=e.RelationshipChange;var i=e.RelationshipChangeAdd;var a=e.RelationshipChangeRemove;var n=e.OneToManyChange;var s=e.ManyToNoneChange;var o=e.OneToOneChange;var d=e.ManyToManyChange;r.RelationshipChange=t;r.RelationshipChangeAdd=i;r.RelationshipChangeRemove=a;r.OneToManyChange=n;r.ManyToNoneChange=s;r.OneToOneChange=o;r.ManyToManyChange=d});r("ember-data/system/changes/relationship_change",["ember-data/system/model/model","ember-data/system/relationship-meta","exports"],function(e,r,t){"use strict";var i=e["default"];var a=r.isSyncRelationship;var n=Ember.get;var s=Ember.set;var o=Ember.EnumerableUtils.forEach;var d=function(e){this.parentRecord=e.parentRecord;this.childRecord=e.childRecord;this.firstRecord=e.firstRecord;this.firstRecordKind=e.firstRecordKind;this.firstRecordName=e.firstRecordName;this.secondRecord=e.secondRecord;this.secondRecordKind=e.secondRecordKind;this.secondRecordName=e.secondRecordName;this.changeType=e.changeType;this.store=e.store;this.committed={}};function u(e){d.call(this,e)}function c(e){d.call(this,e)}d.create=function(e){return new d(e)};u.create=function(e){return new u(e)};c.create=function(e){return new c(e)};var l={};var f={};var h={};var p={};var m={};d._createChange=function(e){if(e.changeType==="add"){return u.create(e)}if(e.changeType==="remove"){return c.create(e)}};d.determineRelationshipType=function(e,r){var t=r.key,i,a;var n=r.kind;var s=e.inverseFor(t);if(s){i=s.name;a=s.kind}if(!s){return n==="belongsTo"?"oneToNone":"manyToNone"}else{if(a==="belongsTo"){return n==="belongsTo"?"oneToOne":"manyToOne"}else{return n==="belongsTo"?"oneToMany":"manyToMany"}}};d.createChange=function(e,r,t,i){var a=e.constructor,n;n=d.determineRelationshipType(a,i);if(n==="oneToMany"){return l.createChange(e,r,t,i)}else if(n==="manyToOne"){return l.createChange(r,e,t,i)}else if(n==="oneToNone"){return f.createChange(e,r,t,i)}else if(n==="manyToNone"){return h.createChange(e,r,t,i)}else if(n==="oneToOne"){return p.createChange(e,r,t,i)}else if(n==="manyToMany"){return m.createChange(e,r,t,i)}};f.createChange=function(e,r,t,i){var a=i.key;var n=d._createChange({parentRecord:r,childRecord:e,firstRecord:e,store:t,changeType:i.changeType,firstRecordName:a,firstRecordKind:"belongsTo"});t.addRelationshipChangeFor(e,a,r,null,n);return n};h.createChange=function(e,r,t,i){var a=i.key;var n=d._createChange({parentRecord:e,childRecord:r,secondRecord:e,store:t,changeType:i.changeType,secondRecordName:i.key,secondRecordKind:"hasMany"});t.addRelationshipChangeFor(e,a,r,null,n);return n};m.createChange=function(e,r,t,i){var a=i.key;var n=d._createChange({parentRecord:r,childRecord:e,firstRecord:e,secondRecord:r,firstRecordKind:"hasMany",secondRecordKind:"hasMany",store:t,changeType:i.changeType,firstRecordName:a});t.addRelationshipChangeFor(e,a,r,null,n);return n};p.createChange=function(e,r,t,i){var a;if(i.parentType){a=i.parentType.inverseFor(i.key).name}else if(i.key){a=i.key}else{}var n=d._createChange({parentRecord:r,childRecord:e,firstRecord:e,secondRecord:r,firstRecordKind:"belongsTo",secondRecordKind:"belongsTo",store:t,changeType:i.changeType,firstRecordName:a});t.addRelationshipChangeFor(e,a,r,null,n);return n};p.maintainInvariant=function(e,r,t,i){if(e.changeType==="add"&&r.recordIsMaterialized(t)){var a=n(t,i);if(a){var s=p.createChange(t,a,r,{parentType:e.parentType,hasManyName:e.hasManyName,changeType:"remove",key:e.key});r.addRelationshipChangeFor(t,i,e.parentRecord,null,s);s.sync()}}};l.createChange=function(e,r,t,i){var a;if(i.parentType){a=i.parentType.inverseFor(i.key).name;l.maintainInvariant(i,t,e,a)}else if(i.key){a=i.key}else{}var n=d._createChange({parentRecord:r,childRecord:e,firstRecord:e,secondRecord:r,firstRecordKind:"belongsTo",secondRecordKind:"hasMany",store:t,changeType:i.changeType,firstRecordName:a});t.addRelationshipChangeFor(e,a,r,n.getSecondRecordName(),n);return n};l.maintainInvariant=function(e,r,t,i){if(e.changeType==="add"&&t){var a=n(t,i);if(a){var s=l.createChange(t,a,r,{parentType:e.parentType,hasManyName:e.hasManyName,changeType:"remove",key:e.key});r.addRelationshipChangeFor(t,i,e.parentRecord,s.getSecondRecordName(),s);s.sync()}}};d.prototype={getSecondRecordName:function(){var e=this.secondRecordName,r;if(!e){r=this.secondRecord;if(!r){return}var t=this.firstRecord.constructor;var i=t.inverseFor(this.firstRecordName);this.secondRecordName=i.name}return this.secondRecordName},getFirstRecordName:function(){return this.firstRecordName},destroy:function(){var e=this.childRecord;var r=this.getFirstRecordName();var t=this.getSecondRecordName();var i=this.store;i.removeRelationshipChangeFor(e,r,this.parentRecord,t,this.changeType)},getSecondRecord:function(){return this.secondRecord},getFirstRecord:function(){return this.firstRecord},coalesce:function(){var e=this.store.relationshipChangePairsFor(this.firstRecord);o(e,function(e){var r=e["add"];var t=e["remove"];if(r&&t){r.destroy();t.destroy()}})}};u.prototype=Ember.create(d.create({}));c.prototype=Ember.create(d.create({}));u.prototype.changeType="add";u.prototype.sync=function(){var e=this.getSecondRecordName();var r=this.getFirstRecordName();var t=this.getFirstRecord();var o=this.getSecondRecord();if(o instanceof i&&t instanceof i){if(this.secondRecordKind==="belongsTo"){o.suspendRelationshipObservers(function(){s(o,e,t)
2
- })}else if(this.secondRecordKind==="hasMany"&&a(o,e)){o.suspendRelationshipObservers(function(){var r=n(o,e);r.addObject(t)})}}if(t instanceof i&&o instanceof i&&n(t,r)!==o){if(this.firstRecordKind==="belongsTo"){t.suspendRelationshipObservers(function(){s(t,r,o)})}else if(this.firstRecordKind==="hasMany"&&a(o,e)){t.suspendRelationshipObservers(function(){var e=n(t,r);e.addObject(o)})}}this.coalesce()};c.prototype.changeType="remove";c.prototype.sync=function(){var e=this.getSecondRecordName();var r=this.getFirstRecordName();var t=this.getFirstRecord();var o=this.getSecondRecord();if(o instanceof i&&t instanceof i){if(this.secondRecordKind==="belongsTo"){o.suspendRelationshipObservers(function(){s(o,e,null)})}else if(this.secondRecordKind==="hasMany"&&a(o,e)){o.suspendRelationshipObservers(function(){var r=n(o,e);r.removeObject(t)})}}if(t instanceof i&&n(t,r)){if(this.firstRecordKind==="belongsTo"){t.suspendRelationshipObservers(function(){s(t,r,null)})}else if(this.firstRecordKind==="hasMany"&&a(t,r)){t.suspendRelationshipObservers(function(){var e=n(t,r);e.removeObject(o)})}}this.coalesce()};t.RelationshipChange=d;t.RelationshipChangeAdd=u;t.RelationshipChangeRemove=c;t.OneToManyChange=l;t.ManyToNoneChange=h;t.OneToOneChange=p;t.ManyToManyChange=m});r("ember-data/system/container_proxy",["exports"],function(e){"use strict";function r(e){this.container=e}r.prototype.aliasedFactory=function(e,r){var t=this;return{create:function(){if(r){r()}return t.container.lookup(e)}}};r.prototype.registerAlias=function(e,r,t){var i=this.aliasedFactory(r,t);return this.container.register(e,i)};r.prototype.registerDeprecation=function(e,r){var t=function(){};return this.registerAlias(e,r,t)};r.prototype.registerDeprecations=function(e){var r,t,i,a,n;for(r=e.length;r>0;r--){t=e[r-1];i=t["deprecated"];a=t["valid"];this.registerDeprecation(i,a)}};e["default"]=r});r("ember-data/system/debug",["ember-data/system/debug/debug_info","ember-data/system/debug/debug_adapter","exports"],function(e,r,t){"use strict";var i=r["default"];t["default"]=i});r("ember-data/system/debug/debug_adapter",["ember-data/system/model","exports"],function(e,r){"use strict";var t=e.Model;var i=Ember.get;var a=Ember.String.capitalize;var n=Ember.String.underscore;r["default"]=Ember.DataAdapter.extend({getFilters:function(){return[{name:"isNew",desc:"New"},{name:"isModified",desc:"Modified"},{name:"isClean",desc:"Clean"}]},detect:function(e){return e!==t&&t.detect(e)},columnsForType:function(e){var r=[{name:"id",desc:"Id"}];var t=0;var s=this;i(e,"attributes").forEach(function(e,i){if(t++>s.attributeLimit){return false}var o=a(n(e).replace("_"," "));r.push({name:e,desc:o})});return r},getRecords:function(e){return this.get("store").all(e)},getRecordColumnValues:function(e){var r=this,t=0;var a={id:i(e,"id")};e.eachAttribute(function(n){if(t++>r.attributeLimit){return false}var s=i(e,n);a[n]=s});return a},getRecordKeywords:function(e){var r=[];var t=Ember.A(["id"]);e.eachAttribute(function(e){t.push(e)});t.forEach(function(t){r.push(i(e,t))});return r},getRecordFilterValues:function(e){return{isNew:e.get("isNew"),isModified:e.get("isDirty")&&!e.get("isNew"),isClean:!e.get("isDirty")}},getRecordColor:function(e){var r="black";if(e.get("isNew")){r="green"}else if(e.get("isDirty")){r="blue"}return r},observeRecord:function(e,r){var t=Ember.A(),i=this;var a=Ember.A(["id","isNew","isDirty"]);e.eachAttribute(function(e){a.push(e)});a.forEach(function(a){var n=function(){r(i.wrapRecord(e))};Ember.addObserver(e,a,n);t.push(function(){Ember.removeObserver(e,a,n)})});var n=function(){t.forEach(function(e){e()})};return n}})});r("ember-data/system/debug/debug_info",["ember-data/system/model","exports"],function(e,r){"use strict";var t=e.Model;t.reopen({_debugInfo:function(){var e=["id"],r={belongsTo:[],hasMany:[]},t=[];this.eachAttribute(function(r,t){e.push(r)},this);this.eachRelationship(function(e,i){r[i.kind].push(e);t.push(e)});var i=[{name:"Attributes",properties:e,expand:true},{name:"Belongs To",properties:r.belongsTo,expand:true},{name:"Has Many",properties:r.hasMany,expand:true},{name:"Flags",properties:["isLoaded","isDirty","isSaving","isDeleted","isError","isNew","isValid"]}];return{propertyInfo:{includeOtherProperties:true,groups:i,expensiveProperties:t}}}});r["default"]=t});r("ember-data/system/model",["ember-data/system/model/model","ember-data/system/model/attributes","ember-data/system/model/states","ember-data/system/model/errors","exports"],function(e,r,t,i,a){"use strict";var n=e["default"];var s=r["default"];var o=t["default"];var d=i["default"];a.Model=n;a.RootState=o;a.attr=s;a.Errors=d});r("ember-data/system/model/attributes",["ember-data/system/model/model","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.get;t.reopenClass({attributes:Ember.computed(function(){var e=Ember.Map.create();this.eachComputedProperty(function(r,t){if(t.isAttribute){t.name=r;e.set(r,t)}});return e}).readOnly(),transformedAttributes:Ember.computed(function(){var e=Ember.Map.create();this.eachAttribute(function(r,t){if(t.type){e.set(r,t.type)}});return e}).readOnly(),eachAttribute:function(e,r){i(this,"attributes").forEach(function(t,i){e.call(r,t,i)},r)},eachTransformedAttribute:function(e,r){i(this,"transformedAttributes").forEach(function(t,i){e.call(r,t,i)})}});t.reopen({eachAttribute:function(e,r){this.constructor.eachAttribute(e,r)}});function a(e,r,t){if(typeof r.defaultValue==="function"){return r.defaultValue.apply(null,arguments)}else{return r.defaultValue}}function n(e,r){return e._attributes.hasOwnProperty(r)||e._inFlightAttributes.hasOwnProperty(r)||e._data.hasOwnProperty(r)}function s(e,r){if(e._attributes.hasOwnProperty(r)){return e._attributes[r]}else if(e._inFlightAttributes.hasOwnProperty(r)){return e._inFlightAttributes[r]}else{return e._data[r]}}r["default"]=function o(e,r){r=r||{};var t={type:e,isAttribute:true,options:r};return Ember.computed("data",function(e,t){if(arguments.length>1){var i=s(this,e);if(t!==i){this._attributes[e]=t;this.send("didSetProperty",{name:e,oldValue:i,originalValue:this._data[e],value:t})}return t}else if(n(this,e)){return s(this,e)}else{return a(this,r,e)}}).meta(t)}});r("ember-data/system/model/errors",["exports"],function(e){"use strict";var r=Ember.get;var t=Ember.isEmpty;var i=Ember.EnumerableUtils.map;e["default"]=Ember.Object.extend(Ember.Enumerable,Ember.Evented,{registerHandlers:function(e,r,t){this.on("becameInvalid",e,r);this.on("becameValid",e,t)},errorsByAttributeName:Ember.reduceComputed("content",{initialValue:function(){return Ember.MapWithDefault.create({defaultValue:function(){return Ember.A()}})},addedItem:function(e,r){e.get(r.attribute).pushObject(r);return e},removedItem:function(e,r){e.get(r.attribute).removeObject(r);return e}}),errorsFor:function(e){return r(this,"errorsByAttributeName").get(e)},messages:Ember.computed.mapBy("content","message"),content:Ember.computed(function(){return Ember.A()}),unknownProperty:function(e){var r=this.errorsFor(e);if(t(r)){return null}return r},nextObject:function(e,t,i){return r(this,"content").objectAt(e)},length:Ember.computed.oneWay("content.length").readOnly(),isEmpty:Ember.computed.not("length").readOnly(),add:function(e,t){var i=r(this,"isEmpty");t=this._findOrCreateMessages(e,t);r(this,"content").addObjects(t);this.notifyPropertyChange(e);this.enumerableContentDidChange();if(i&&!r(this,"isEmpty")){this.trigger("becameInvalid")}},_findOrCreateMessages:function(e,r){var t=this.errorsFor(e);return i(Ember.makeArray(r),function(r){return t.findBy("message",r)||{attribute:e,message:r}})},remove:function(e){if(r(this,"isEmpty")){return}var t=r(this,"content").rejectBy("attribute",e);r(this,"content").setObjects(t);this.notifyPropertyChange(e);this.enumerableContentDidChange();if(r(this,"isEmpty")){this.trigger("becameValid")}},clear:function(){if(r(this,"isEmpty")){return}r(this,"content").clear();this.enumerableContentDidChange();this.trigger("becameValid")},has:function(e){return!t(this.errorsFor(e))}})});r("ember-data/system/model/model",["ember-data/system/model/states","ember-data/system/model/errors","ember-data/system/store","exports"],function(e,r,i,a){"use strict";var n=e["default"];var s=r["default"];var o=i.PromiseObject;var d=Ember.get;var u=Ember.set;var c=Ember.merge;var l=Ember.RSVP.Promise;var f=Ember.ArrayPolyfills.forEach;var h;var p=Ember.computed("currentState",function(e,r){return d(d(this,"currentState"),e)}).readOnly();var m=Object.create(null);var v=Object.create(null);function y(e){return v[e]||(v[e]=e.split("."))}function b(e){return m[e]||(m[e]=y(e)[0])}var g=Ember.Object.extend(Ember.Evented,{_recordArrays:undefined,_relationships:undefined,_loadingRecordArrays:undefined,isEmpty:p,isLoading:p,isLoaded:p,isDirty:p,isSaving:p,isDeleted:p,isNew:p,isValid:p,dirtyType:p,isError:false,isReloading:false,clientId:null,id:null,currentState:n.empty,errors:Ember.computed(function(){var e=s.create();e.registerHandlers(this,function(){this.send("becameInvalid")},function(){this.send("becameValid")});return e}).readOnly(),serialize:function(e){var r=d(this,"store");return r.serialize(this,e)},toJSON:function(e){if(!h){h=t("ember-data/serializers/json_serializer")["default"]}var r=h.create({container:this.container});return r.serialize(this,e)},didLoad:Ember.K,didUpdate:Ember.K,didCreate:Ember.K,didDelete:Ember.K,becameInvalid:Ember.K,becameError:Ember.K,data:Ember.computed(function(){this._data=this._data||{};return this._data}).readOnly(),_data:null,init:function(){this._super();this._setup()},_setup:function(){this._changesToSync={};this._deferredTriggers=[];this._data={};this._attributes={};this._inFlightAttributes={};this._relationships={}},send:function(e,r){var t=d(this,"currentState");if(!t[e]){this._unhandledEvent(t,e,r)}return t[e](this,r)},transitionTo:function(e){var r=b(e);var t=d(this,"currentState");var i=t;do{if(i.exit){i.exit(this)}i=i.parentState}while(!i.hasOwnProperty(r));var a=y(e);var n=[],s=[],o,c;for(o=0,c=a.length;o<c;o++){i=i[a[o]];if(i.enter){s.push(i)}if(i.setup){n.push(i)}}for(o=0,c=s.length;o<c;o++){s[o].enter(this)}u(this,"currentState",i);for(o=0,c=n.length;o<c;o++){n[o].setup(this)}this.updateRecordArraysLater()},_unhandledEvent:function(e,r,t){var i="Attempted to handle event `"+r+"` ";i+="on "+String(this)+" while in state ";i+=e.stateName+". ";if(t!==undefined){i+="Called with "+Ember.inspect(t)+"."}throw new Ember.Error(i)},withTransaction:function(e){var r=d(this,"transaction");if(r){e(r)}},loadingData:function(e){this.send("loadingData",e)},loadedData:function(){this.send("loadedData")},notFound:function(){this.send("notFound")},pushedData:function(){this.send("pushedData")},deleteRecord:function(){this.send("deleteRecord")},destroyRecord:function(){this.deleteRecord();return this.save()},unloadRecord:function(){if(this.isDestroyed){return}this.send("unloadRecord")},clearRelationships:function(){this.eachRelationship(function(e,r){if(r.kind==="belongsTo"){u(this,e,null)}else if(r.kind==="hasMany"){var t=this._relationships[e];if(t){t.destroy()}}},this)},updateRecordArrays:function(){this._updatingRecordArraysLater=false;d(this,"store").dataWasUpdated(this.constructor,this)},_preloadData:function(e){var r=this;f.call(Ember.keys(e),function(t){var i=d(e,t);var a=r.constructor.metaForProperty(t);if(a.isRelationship){r._preloadRelationship(t,i)}else{d(r,"_data")[t]=i}})},_preloadRelationship:function(e,r){var t=this.constructor.metaForProperty(e);var i=t.type;if(t.kind==="hasMany"){this._preloadHasMany(e,r,i)}else{this._preloadBelongsTo(e,r,i)}},_preloadHasMany:function(e,r,t){var i=this;f.call(r,function(r){r=i._convertStringOrNumberIntoRecord(r,t);d(i,e).pushObject(r)})},_preloadBelongsTo:function(e,r,t){var i=this._convertStringOrNumberIntoRecord(r,t);u(this,e,i)},_convertStringOrNumberIntoRecord:function(e,r){if(Ember.typeOf(e)==="string"||Ember.typeOf(e)==="number"){return this.store.recordForId(r,e)}return e},changedAttributes:function(){var e=d(this,"_data");var r=d(this,"_attributes");var t={};var i;for(i in r){t[i]=[e[i],r[i]]}return t},adapterWillCommit:function(){this.send("willCommit")},adapterDidCommit:function(e){u(this,"isError",false);if(e){this._data=e}else{Ember.mixin(this._data,this._inFlightAttributes)}this._inFlightAttributes={};this.send("didCommit");this.updateRecordArraysLater();if(!e){return}this.suspendRelationshipObservers(function(){this.notifyPropertyChange("data")})},adapterDidDirty:function(){this.send("becomeDirty");this.updateRecordArraysLater()},dataDidChange:Ember.observer(function(){this.reloadHasManys()},"data"),reloadHasManys:function(){var e=d(this.constructor,"relationshipsByName");this.updateRecordArraysLater();e.forEach(function(e,r){if(this._data.links&&this._data.links[e]){return}if(r.kind==="hasMany"){this.hasManyDidChange(r.key)}},this)},hasManyDidChange:function(e){var r=this._relationships[e];if(r){var t=this._data[e]||[];u(r,"content",Ember.A(t));u(r,"isLoaded",true);r.trigger("didLoad")}},updateRecordArraysLater:function(){if(this._updatingRecordArraysLater){return}this._updatingRecordArraysLater=true;Ember.run.schedule("actions",this,this.updateRecordArrays)},setupData:function(e,r){if(r){Ember.merge(this._data,e)}else{this._data=e}var t=this._relationships;this.eachRelationship(function(r,i){if(e.links&&e.links[r]){return}if(i.options.async){t[r]=null}});if(e){this.pushedData()}this.suspendRelationshipObservers(function(){this.notifyPropertyChange("data")})},materializeId:function(e){u(this,"id",e)},materializeAttributes:function(e){c(this._data,e)},materializeAttribute:function(e,r){this._data[e]=r},updateHasMany:function(e,r){this._data[e]=r;this.hasManyDidChange(e)},updateBelongsTo:function(e,r){this._data[e]=r},rollback:function(){this._attributes={};if(d(this,"isError")){this._inFlightAttributes={};u(this,"isError",false)}if(!d(this,"isValid")){this._inFlightAttributes={}}this.send("rolledBack");this.suspendRelationshipObservers(function(){this.notifyPropertyChange("data")})},toStringExtension:function(){return d(this,"id")},suspendRelationshipObservers:function(e,r){var t=d(this.constructor,"relationshipNames").belongsTo;var i=this;try{this._suspendedRelationships=true;Ember._suspendObservers(i,t,null,"belongsToDidChange",function(){Ember._suspendBeforeObservers(i,t,null,"belongsToWillChange",function(){e.call(r||i)})})}finally{this._suspendedRelationships=false}},save:function(){var e="DS: Model#save "+this;var r=Ember.RSVP.defer(e);this.get("store").scheduleSave(this,r);this._inFlightAttributes=this._attributes;this._attributes={};return o.create({promise:r.promise})},reload:function(){u(this,"isReloading",true);var e=this;var r="DS: Model#reload of "+this;var t=new l(function(r){e.send("reloadRecord",r)},r).then(function(){e.set("isReloading",false);e.set("isError",false);return e},function(r){e.set("isError",true);throw r},"DS: Model#reload complete, update flags");return o.create({promise:t})},adapterDidUpdateAttribute:function(e,r){if(r!==undefined){this._data[e]=r;this.notifyPropertyChange(e)}else{this._data[e]=this._inFlightAttributes[e]}this.updateRecordArraysLater()},adapterDidInvalidate:function(e){var r=d(this,"errors");function t(t){if(e[t]){r.add(t,e[t])}}this.eachAttribute(t);this.eachRelationship(t)},adapterDidError:function(){this.send("becameError");u(this,"isError",true)},trigger:function(e){Ember.tryInvoke(this,e,[].slice.call(arguments,1));this._super.apply(this,arguments)},triggerLater:function(){if(this._deferredTriggers.push(arguments)!==1){return}Ember.run.schedule("actions",this,"_triggerDeferredTriggers")},_triggerDeferredTriggers:function(){for(var e=0,r=this._deferredTriggers.length;e<r;e++){this.trigger.apply(this,this._deferredTriggers[e])}this._deferredTriggers.length=0},willDestroy:function(){this._super();this.clearRelationships()},willMergeMixin:function(e){}});g.reopenClass({_create:g.create,create:function(){throw new Ember.Error("You should not call `create` on a model. Instead, call `store.createRecord` with the attributes you would like to set.")}});a["default"]=g});r("ember-data/system/model/states",["exports"],function(e){"use strict";var r=Ember.get;var t=Ember.set;function i(e){var r=Ember.keys(e);var t,i,a;for(t=0,i=r.length;t<i;t++){a=r[t];if(e.hasOwnProperty(a)&&e[a]){return true}}return false}function a(e,r){if(r.value===r.originalValue){delete e._attributes[r.name];e.send("propertyWasReset",r.name)}else if(r.value!==r.oldValue){e.send("becomeDirty")}e.updateRecordArraysLater()}var n={initialState:"uncommitted",isDirty:true,uncommitted:{didSetProperty:a,loadingData:Ember.K,propertyWasReset:function(e,r){var t=false;for(var i in e._attributes){t=true;break}if(!t){e.send("rolledBack")}},pushedData:Ember.K,becomeDirty:Ember.K,willCommit:function(e){e.transitionTo("inFlight")},reloadRecord:function(e,t){t(r(e,"store").reloadRecord(e))},rolledBack:function(e){e.transitionTo("loaded.saved")},becameInvalid:function(e){e.transitionTo("invalid")},rollback:function(e){e.rollback()}},inFlight:{isSaving:true,didSetProperty:a,becomeDirty:Ember.K,pushedData:Ember.K,unloadRecord:function(e){},willCommit:Ember.K,didCommit:function(e){var t=r(this,"dirtyType");e.transitionTo("saved");e.send("invokeLifecycleCallbacks",t)},becameInvalid:function(e){e.transitionTo("invalid");e.send("invokeLifecycleCallbacks")},becameError:function(e){e.transitionTo("uncommitted");e.triggerLater("becameError",e)}},invalid:{isValid:false,deleteRecord:function(e){e.transitionTo("deleted.uncommitted");e.clearRelationships()},didSetProperty:function(e,t){r(e,"errors").remove(t.name);a(e,t)},becomeDirty:Ember.K,willCommit:function(e){r(e,"errors").clear();e.transitionTo("inFlight")},rolledBack:function(e){r(e,"errors").clear()},becameValid:function(e){e.transitionTo("uncommitted")},invokeLifecycleCallbacks:function(e){e.triggerLater("becameInvalid",e)},exit:function(e){e._inFlightAttributes={}}}};function s(e){var r={},t;for(var i in e){t=e[i];if(t&&typeof t==="object"){r[i]=s(t)}else{r[i]=t}}return r}function o(e,r){for(var t in r){e[t]=r[t]}return e}function d(e){var r=s(n);return o(r,e)}var u=d({dirtyType:"created",isNew:true});u.uncommitted.rolledBack=function(e){e.transitionTo("deleted.saved")};var c=d({dirtyType:"updated"});u.uncommitted.deleteRecord=function(e){e.clearRelationships();e.transitionTo("deleted.saved")};u.uncommitted.rollback=function(e){n.uncommitted.rollback.apply(this,arguments);e.transitionTo("deleted.saved")};u.uncommitted.propertyWasReset=Ember.K;function l(e){}c.inFlight.unloadRecord=l;c.uncommitted.deleteRecord=function(e){e.transitionTo("deleted.uncommitted");e.clearRelationships()};var f={isEmpty:false,isLoading:false,isLoaded:false,isDirty:false,isSaving:false,isDeleted:false,isNew:false,isValid:true,rolledBack:Ember.K,unloadRecord:function(e){e.clearRelationships();e.transitionTo("deleted.saved")},propertyWasReset:Ember.K,empty:{isEmpty:true,loadingData:function(e,r){e._loadingPromise=r;e.transitionTo("loading")},loadedData:function(e){e.transitionTo("loaded.created.uncommitted");e.suspendRelationshipObservers(function(){e.notifyPropertyChange("data")})},pushedData:function(e){e.transitionTo("loaded.saved");e.triggerLater("didLoad")}},loading:{isLoading:true,exit:function(e){e._loadingPromise=null},pushedData:function(e){e.transitionTo("loaded.saved");e.triggerLater("didLoad");t(e,"isError",false)},becameError:function(e){e.triggerLater("becameError",e)},notFound:function(e){e.transitionTo("empty")}},loaded:{initialState:"saved",isLoaded:true,loadingData:Ember.K,saved:{setup:function(e){var r=e._attributes;var t=false;for(var i in r){if(r.hasOwnProperty(i)){t=true;break}}if(t){e.adapterDidDirty()}},didSetProperty:a,pushedData:Ember.K,becomeDirty:function(e){e.transitionTo("updated.uncommitted")},willCommit:function(e){e.transitionTo("updated.inFlight")},reloadRecord:function(e,t){t(r(e,"store").reloadRecord(e))},deleteRecord:function(e){e.transitionTo("deleted.uncommitted");e.clearRelationships()},unloadRecord:function(e){e.clearRelationships();e.transitionTo("deleted.saved")},didCommit:function(e){e.send("invokeLifecycleCallbacks",r(e,"lastDirtyType"))},notFound:Ember.K},created:u,updated:c},deleted:{initialState:"uncommitted",dirtyType:"deleted",isDeleted:true,isLoaded:true,isDirty:true,setup:function(e){e.updateRecordArrays()},uncommitted:{willCommit:function(e){e.transitionTo("inFlight")},rollback:function(e){e.rollback()},becomeDirty:Ember.K,deleteRecord:Ember.K,rolledBack:function(e){e.transitionTo("loaded.saved")}},inFlight:{isSaving:true,unloadRecord:l,willCommit:Ember.K,didCommit:function(e){e.transitionTo("saved");e.send("invokeLifecycleCallbacks")},becameError:function(e){e.transitionTo("uncommitted");e.triggerLater("becameError",e)}},saved:{isDirty:false,setup:function(e){var t=r(e,"store");t.dematerializeRecord(e)},invokeLifecycleCallbacks:function(e){e.triggerLater("didDelete",e);e.triggerLater("didCommit",e)},willCommit:Ember.K,didCommit:Ember.K}},invokeLifecycleCallbacks:function(e,r){if(r==="created"){e.triggerLater("didCreate",e)}else{e.triggerLater("didUpdate",e)}e.triggerLater("didCommit",e)}};function h(e,r,t){e=o(r?Ember.create(r):{},e);e.parentState=r;e.stateName=t;for(var i in e){if(!e.hasOwnProperty(i)||i==="parentState"||i==="stateName"){continue}if(typeof e[i]==="object"){e[i]=h(e[i],e,t+"."+i)}}return e}f=h(f,null,"root");e["default"]=f});r("ember-data/system/record_array_manager",["ember-data/system/record_arrays","exports"],function(e,r){"use strict";var t=e.RecordArray;var i=e.FilteredRecordArray;var a=e.AdapterPopulatedRecordArray;var n=e.ManyArray;var s=Ember.get;var o=Ember.set;var d=Ember.EnumerableUtils.forEach;r["default"]=Ember.Object.extend({init:function(){this.filteredRecordArrays=Ember.MapWithDefault.create({defaultValue:function(){return[]}});this.changedRecords=[];this._adapterPopulatedRecordArrays=[]},recordDidChange:function(e){if(this.changedRecords.push(e)!==1){return}Ember.run.schedule("actions",this,this.updateRecordArrays)},recordArraysForRecord:function(e){e._recordArrays=e._recordArrays||Ember.OrderedSet.create();return e._recordArrays},updateRecordArrays:function(){d(this.changedRecords,function(e){if(s(e,"isDeleted")){this._recordWasDeleted(e)}else{this._recordWasChanged(e)}},this);this.changedRecords.length=0},_recordWasDeleted:function(e){var r=e._recordArrays;if(!r){return}d(r,function(r){r.removeRecord(e)})},_recordWasChanged:function(e){var r=e.constructor;var t=this.filteredRecordArrays.get(r);var i;d(t,function(t){i=s(t,"filterFunction");this.updateRecordArray(t,i,r,e)},this);var a=e._loadingRecordArrays;if(a){for(var n=0,o=a.length;n<o;n++){a[n].loadedRecord()}e._loadingRecordArrays=[]}},updateRecordArray:function(e,r,t,i){var a;if(!r){a=true}else{a=r(i)}var n=this.recordArraysForRecord(i);if(a){if(!n.has(e)){e.pushRecord(i);n.add(e)}}else if(!a){n.remove(e);e.removeRecord(i)}},updateFilter:function(e,r,t){var i=this.store.typeMapFor(r);var a=i.records,n;for(var o=0,d=a.length;o<d;o++){n=a[o];if(!s(n,"isDeleted")&&!s(n,"isEmpty")){this.updateRecordArray(e,t,r,n)}}},createManyArray:function(e,r){var t=n.create({type:e,content:r,store:this.store});d(r,function(e){var r=this.recordArraysForRecord(e);r.add(t)},this);return t},createRecordArray:function(e){var r=t.create({type:e,content:Ember.A(),store:this.store,isLoaded:true});this.registerFilteredRecordArray(r,e);return r},createFilteredRecordArray:function(e,r,t){var a=i.create({query:t,type:e,content:Ember.A(),store:this.store,manager:this,filterFunction:r});this.registerFilteredRecordArray(a,e,r);return a},createAdapterPopulatedRecordArray:function(e,r){var t=a.create({type:e,query:r,content:Ember.A(),store:this.store,manager:this});this._adapterPopulatedRecordArrays.push(t);return t},registerFilteredRecordArray:function(e,r,t){var i=this.filteredRecordArrays.get(r);i.push(e);this.updateFilter(e,r,t)},registerWaitingRecordArray:function(e,r){var t=e._loadingRecordArrays||[];t.push(r);e._loadingRecordArrays=t},willDestroy:function(){this._super();d(l(u(this.filteredRecordArrays.values)),c);d(this._adapterPopulatedRecordArrays,c)}});function u(e){var r=[];var t=Ember.keys(e);for(var i=0;i<t.length;i++){r.push(e[t[i]])}return r}function c(e){e.destroy()}function l(e){var r=e.length;var t=Ember.A();for(var i=0;i<r;i++){t=t.concat(e[i])}return t}});r("ember-data/system/record_arrays",["ember-data/system/record_arrays/record_array","ember-data/system/record_arrays/filtered_record_array","ember-data/system/record_arrays/adapter_populated_record_array","ember-data/system/record_arrays/many_array","exports"],function(e,r,t,i,a){"use strict";var n=e["default"];var s=r["default"];var o=t["default"];var d=i["default"];a.RecordArray=n;a.FilteredRecordArray=s;a.AdapterPopulatedRecordArray=o;a.ManyArray=d});r("ember-data/system/record_arrays/adapter_populated_record_array",["ember-data/system/record_arrays/record_array","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.get;var a=Ember.set;function n(e){var r=Object.create(null);for(var t in e){r[t]=e[t]}return r}r["default"]=t.extend({query:null,replace:function(){var e=i(this,"type").toString();throw new Error("The result of a server query (on "+e+") is immutable.")},load:function(e){var r=i(this,"store");var t=i(this,"type");var a=r.pushMany(t,e);var s=r.metadataFor(t);this.setProperties({content:Ember.A(a),isLoaded:true,meta:n(s)});a.forEach(function(e){this.manager.recordArraysForRecord(e).add(this)},this);Ember.run.once(this,"trigger","didLoad")}})});r("ember-data/system/record_arrays/filtered_record_array",["ember-data/system/record_arrays/record_array","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.get;r["default"]=t.extend({filterFunction:null,isLoaded:true,replace:function(){var e=i(this,"type").toString();throw new Error("The result of a client-side filter (on "+e+") is immutable.")},_updateFilter:function(){var e=i(this,"manager");e.updateFilter(this,i(this,"type"),i(this,"filterFunction"))},updateFilter:Ember.observer(function(){Ember.run.once(this,this._updateFilter)},"filterFunction")})});r("ember-data/system/record_arrays/many_array",["ember-data/system/record_arrays/record_array","ember-data/system/changes","exports"],function(e,r,t){"use strict";var i=e["default"];var a=r.RelationshipChange;var n=Ember.get,s=Ember.set;var o=Ember.EnumerableUtils.map;function d(e){e.sync()}t["default"]=i.extend({init:function(){this._super.apply(this,arguments);this._changesToSync=Ember.OrderedSet.create()},name:null,owner:null,isPolymorphic:false,isLoaded:false,promise:null,loadingRecordsCount:function(e){this.loadingRecordsCount=e},loadedRecord:function(){this.loadingRecordsCount--;if(this.loadingRecordsCount===0){s(this,"isLoaded",true);this.trigger("didLoad")}},fetch:function(){var e=n(this,"content");var r=n(this,"store");var t=n(this,"owner");var i=e.filterBy("isEmpty",true);r.scheduleFetchMany(i,t)},replaceContent:function(e,r,t){t=o(t,function(e){return e},this);this._super(e,r,t)},arrangedContentDidChange:function(){Ember.run.once(this,"fetch")},arrayContentWillChange:function(e,r,t){var i=n(this,"owner");var s=n(this,"name");if(!i._suspendedRelationships){for(var o=e;o<e+r;o++){var d=n(this,"content").objectAt(o);var u=a.createChange(i,d,n(this,"store"),{parentType:i.constructor,changeType:"remove",kind:"hasMany",key:s});this._changesToSync.add(u)}}return this._super.apply(this,arguments)},arrayContentDidChange:function(e,r,t){this._super.apply(this,arguments);var i=n(this,"owner");var s=n(this,"name");var o=n(this,"store");if(!i._suspendedRelationships){for(var u=e;u<e+t;u++){var c=n(this,"content").objectAt(u);var l=a.createChange(i,c,o,{parentType:i.constructor,changeType:"add",kind:"hasMany",key:s});l.hasManyName=s;this._changesToSync.add(l)}this._changesToSync.forEach(d);this._changesToSync.clear()}},createRecord:function(e){var r=n(this,"owner");var t=n(r,"store");var i=n(this,"type");var a;a=t.createRecord.call(t,i,e);this.pushObject(a);return a}})});r("ember-data/system/record_arrays/record_array",["ember-data/system/store","exports"],function(e,r){"use strict";var t=e.PromiseArray;var i=Ember.get;var a=Ember.set;r["default"]=Ember.ArrayProxy.extend(Ember.Evented,{type:null,content:null,isLoaded:false,isUpdating:false,store:null,objectAtContent:function(e){var r=i(this,"content");return r.objectAt(e)},update:function(){if(i(this,"isUpdating")){return}var e=i(this,"store");var r=i(this,"type");return e.fetchAll(r,this)},addRecord:function(e){i(this,"content").addObject(e)},pushRecord:function(e){i(this,"content").pushObject(e)},removeRecord:function(e){i(this,"content").removeObject(e)},save:function(){var e="DS: RecordArray#save "+i(this,"type");var r=Ember.RSVP.all(this.invoke("save"),e).then(function(e){return Ember.A(e)},null,"DS: RecordArray#save apply Ember.NativeArray");return t.create({promise:r})},_dissociateFromOwnRecords:function(){var e=this;this.forEach(function(r){var t=r._recordArrays;if(t){t.remove(e)}})},willDestroy:function(){this._dissociateFromOwnRecords();this._super()}})});r("ember-data/system/relationship-meta",["ember-inflector/system","exports"],function(e,r){"use strict";var t=e.singularize;function i(e,r){var i,a;i=r.type||r.key;if(typeof i==="string"){if(r.kind==="hasMany"){i=t(i)}a=e.modelFor(i)}else{a=r.type}return a}r.typeForRelationshipMeta=i;function a(e,r){return{key:r.key,kind:r.kind,type:i(e,r),options:r.options,parentType:r.parentType,isRelationship:true}}r.relationshipFromMeta=a;function n(e,r){var t=Ember.meta(e);var i=t.descs[r];return i&&!i._meta.options.async}r.isSyncRelationship=n});r("ember-data/system/relationships",["./relationships/belongs_to","./relationships/has_many","ember-data/system/relationships/ext","exports"],function(e,r,t,i){"use strict";var a=e["default"];var n=r["default"];i.belongsTo=a;i.hasMany=n});r("ember-data/system/relationships/belongs_to",["ember-data/system/model","ember-data/system/store","ember-data/system/changes","ember-data/system/relationship-meta","exports"],function(e,r,t,i,a){"use strict";var n=Ember.get;var s=Ember.set;var o=Ember.isNone;var d=Ember.RSVP.Promise;var u=e.Model;var c=r.PromiseObject;var l=t.RelationshipChange;var f=i.relationshipFromMeta;var h=i.typeForRelationshipMeta;var p=i.isSyncRelationship;function m(e,r,t){return Ember.computed("data",function(e,r){var i=n(this,"data");var a=n(this,"store");var u="DS: Async belongsTo "+this+" : "+e;var l;t.key=e;if(arguments.length===2){return r===undefined?null:c.create({promise:d.cast(r,u)})}var h=i.links&&i.links[e];var p=i[e];if(!o(p)){var m=this.constructor.inverseFor(e);if(m&&m.kind==="belongsTo"){s(p,m.name,this)}l=a.findById(p.constructor,p.get("id"))||d.cast(p,u);return c.create({promise:l})}else if(h){l=a.findBelongsTo(this,h,f(a,t));return c.create({promise:l})}else{return null}}).meta(t)}function v(e,r){if(typeof e==="object"){r=e;e=undefined}else{}r=r||{};var t={type:e,isRelationship:true,options:r,kind:"belongsTo",key:null};if(r.async){return m(e,r,t)}return Ember.computed("data",function(r,t){var i=n(this,"data");var a=n(this,"store");var s,d;if(typeof e==="string"){d=a.modelFor(e)}else{d=e}if(arguments.length===2){return t===undefined?null:t}s=i[r];if(o(s)){return null}a.findById(s.constructor,s.get("id"));return s}).meta(t)}u.reopen({belongsToWillChange:Ember.beforeObserver(function(e,r){if(n(e,"isLoaded")&&p(e,r)){var t=n(e,r);if(t){var i=n(e,"store");var a=l.createChange(e,t,i,{key:r,kind:"belongsTo",changeType:"remove"});a.sync();this._changesToSync[r]=a}}}),belongsToDidChange:Ember.immediateObserver(function(e,r){if(n(e,"isLoaded")){var t=n(e,r);if(t){var i=n(e,"store");var a=l.createChange(e,t,i,{key:r,kind:"belongsTo",changeType:"add"});a.sync()}}delete this._changesToSync[r]})});a["default"]=v});r("ember-data/system/relationships/ext",["ember-inflector/system","ember-data/system/relationship-meta","ember-data/system/model"],function(e,r,t){"use strict";var i=e.singularize;var a=r.typeForRelationshipMeta;var n=r.relationshipFromMeta;
3
- var s=t.Model;var o=Ember.get;var d=Ember.set;s.reopen({didDefineProperty:function(e,r,t){if(t instanceof Ember.ComputedProperty){var i=t.meta();if(i.isRelationship&&i.kind==="belongsTo"){Ember.addObserver(e,r,null,"belongsToDidChange");Ember.addBeforeObserver(e,r,null,"belongsToWillChange")}i.parentType=e.constructor}}});s.reopenClass({typeForRelationship:function(e){var r=o(this,"relationshipsByName").get(e);return r&&r.type},inverseFor:function(e){var r=this.typeForRelationship(e);if(!r){return null}var t=this.metaForProperty(e).options;if(t.inverse===null){return null}var i,a,n;if(t.inverse){i=t.inverse;n=Ember.get(r,"relationshipsByName").get(i);a=n.kind}else{var s=d(this,r);if(s.length===0){return null}i=s[0].name;a=s[0].kind}function d(e,r,t){t=t||[];var i=o(r,"relationships");if(!i){return}var a=i.get(e);if(a){t.push.apply(t,i.get(e))}if(e.superclass){d(e.superclass,r,t)}return t}return{type:r,name:i,kind:a}},relationships:Ember.computed(function(){var e=new Ember.MapWithDefault({defaultValue:function(){return[]}});this.eachComputedProperty(function(r,t){if(t.isRelationship){t.key=r;var i=e.get(a(this.store,t));i.push({name:r,kind:t.kind})}});return e}).cacheable(false).readOnly(),relationshipNames:Ember.computed(function(){var e={hasMany:[],belongsTo:[]};this.eachComputedProperty(function(r,t){if(t.isRelationship){e[t.kind].push(r)}});return e}),relatedTypes:Ember.computed(function(){var e;var r=Ember.A();this.eachComputedProperty(function(t,i){if(i.isRelationship){i.key=t;e=a(this.store,i);if(!r.contains(e)){r.push(e)}}});return r}).cacheable(false).readOnly(),relationshipsByName:Ember.computed(function(){var e=Ember.Map.create();this.eachComputedProperty(function(r,t){if(t.isRelationship){t.key=r;var i=n(this.store,t);i.type=a(this.store,t);e.set(r,i)}});return e}).cacheable(false).readOnly(),fields:Ember.computed(function(){var e=Ember.Map.create();this.eachComputedProperty(function(r,t){if(t.isRelationship){e.set(r,t.kind)}else if(t.isAttribute){e.set(r,"attribute")}});return e}).readOnly(),eachRelationship:function(e,r){o(this,"relationshipsByName").forEach(function(t,i){e.call(r,t,i)})},eachRelatedType:function(e,r){o(this,"relatedTypes").forEach(function(t){e.call(r,t)})}});s.reopen({eachRelationship:function(e,r){this.constructor.eachRelationship(e,r)}})});r("ember-data/system/relationships/has_many",["ember-data/system/store","ember-data/system/relationship-meta","exports"],function(e,r,t){"use strict";var i=e.PromiseArray;var a=r.relationshipFromMeta;var n=r.typeForRelationshipMeta;var s=Ember.get;var o=Ember.set;var d=Ember.setProperties;var u=Ember.EnumerableUtils.map;function c(e,r,t){return Ember.computed("data",function(e){return f(this,e,r,function(r,i){t.key=e;var a=i[e];return r.findMany(this,i[e],n(r,t))})}).meta(t).readOnly()}function l(e,r,t){return Ember.computed("data",function(e){t.key=e;var s=f(this,e,r,function(r,i){var s=i.links&&i.links[e];var d;var c="DS: Async hasMany "+this+" : "+e;var l=Ember.RSVP.defer(c);if(s){d=r.findHasMany(this,s,a(r,t),l)}else{var f=i[e];var h=this.constructor.inverseFor(e);var p=this;if(h&&f){if(h.kind==="belongsTo"){u(f,function(e){o(e,h.name,p)})}}d=r.findMany(p,i[e],n(r,t),l)}o(d,"promise",l.promise);return d});var d=s.get("promise").then(function(){return s},null,"DS: Async hasMany records received");return i.create({promise:d})}).meta(t).readOnly()}function f(e,r,t,i){var a=e._relationships;if(a[r]){return a[r]}var n=s(e,"data");var o=s(e,"store");var u=a[r]=i.call(e,o,n);return d(u,{owner:e,name:r,isPolymorphic:t.polymorphic})}function h(e,r){if(typeof e==="object"){r=e;e=undefined}r=r||{};var t={type:e,isRelationship:true,options:r,kind:"hasMany",key:null};if(r.async){return l(e,r,t)}else{return c(e,r,t)}}t["default"]=h});r("ember-data/system/store",["ember-data/system/adapter","ember-inflector/system/string","exports"],function(e,r,i){"use strict";var a=e.InvalidError;var n=e.Adapter;var s=r.singularize;var o=Ember.get;var d=Ember.set;var u=Ember.run.once;var c=Ember.isNone;var l=Ember.EnumerableUtils.forEach;var f=Ember.EnumerableUtils.indexOf;var h=Ember.EnumerableUtils.map;var p=Ember.RSVP.Promise;var m=Ember.copy;var v,y,b,g,R;var E=Ember.String.camelize;function _(e){return e==null?null:e+""}v=Ember.Object.extend({init:function(){if(!g){g=t("ember-data/system/record_array_manager")["default"]}this.typeMaps={};this.recordArrayManager=g.create({store:this});this._relationshipChanges={};this._pendingSave=[];this._pendingFetch=Ember.Map.create()},adapter:"-rest",serialize:function(e,r){return this.serializerFor(e.constructor.typeKey).serialize(e,r)},defaultAdapter:Ember.computed("adapter",function(){var e=o(this,"adapter");if(typeof e==="string"){e=this.container.lookup("adapter:"+e)||this.container.lookup("adapter:application")||this.container.lookup("adapter:-rest")}if(DS.Adapter.detect(e)){e=e.create({container:this.container})}return e}),createRecord:function(e,r){var t=this.modelFor(e);var i=m(r)||{};if(c(i.id)){i.id=this._generateId(t)}i.id=_(i.id);var a=this.buildRecord(t,i.id);a.loadedData();a.setProperties(i);return a},_generateId:function(e){var r=this.adapterFor(e);if(r&&r.generateIdForRecord){return r.generateIdForRecord(this)}return null},deleteRecord:function(e){e.deleteRecord()},unloadRecord:function(e){e.unloadRecord()},find:function(e,r,t){if(arguments.length===1){return this.findAll(e)}if(Ember.typeOf(r)==="object"){return this.findQuery(e,r)}return this.findById(e,_(r),t)},findById:function(e,r,t){var i;var a=this.modelFor(e);var n=this.recordForId(a,r);if(t){n._preloadData(t)}if(o(n,"isEmpty")){i=this.scheduleFetch(n)}else if(o(n,"isLoading")){i=n._loadingPromise}return C(i||n,"DS: Store#findById "+a+" with id: "+r)},findByIds:function(e,r){var t=this;var i="DS: Store#findByIds "+e;return M(Ember.RSVP.all(h(r,function(r){return t.findById(e,r)})).then(Ember.A,null,"DS: Store#findByIds of "+e+" complete"))},fetchRecord:function(e){var r=e.constructor;var t=o(e,"id");var i=this.adapterFor(r);var a=$(i,this,r,t,e);return a},scheduleFetchMany:function(e){return Ember.RSVP.all(h(e,this.scheduleFetch,this))},scheduleFetch:function(e){var r=e.constructor;if(c(e)){return null}if(e._loadingPromise){return e._loadingPromise}var t=Ember.RSVP.defer("Fetching "+r+"with id: "+e.get("id"));var i={record:e,resolver:t};var a=t.promise;e.loadingData(a);if(!this._pendingFetch.get(r)){this._pendingFetch.set(r,[i])}else{this._pendingFetch.get(r).push(i)}Ember.run.scheduleOnce("afterRender",this,this.flushAllPendingFetches);return a},flushAllPendingFetches:function(){if(this.isDestroyed||this.isDestroying){return}this._pendingFetch.forEach(this._flushPendingFetchForType,this);this._pendingFetch=Ember.Map.create()},_flushPendingFetchForType:function(e,r){var t=this;var i=t.adapterFor(e);var a=!!i.findMany&&i.coalesceFindRequests;var n=Ember.A(r).mapBy("record");var s=Ember.A(r).mapBy("resolver");function o(e){e.resolver.resolve(t.fetchRecord(e.record))}function d(e){l(e,function(e){var t=Ember.A(r).findBy("record",e);if(t){var i=t.resolver;i.resolve(e)}})}function u(e){return function r(t){var i=e.without(t);f(i)}}function c(e){return function(r){f(e,r)}}function f(e,t){l(e,function(e){var i=Ember.A(r).findBy("record",e);if(i){var a=i.resolver;a.reject(t)}})}if(r.length===1){o(r[0])}else if(a){var h=i.groupRecordsForFindMany(this,n);l(h,function(a){var n=Ember.A(a);var s=n.mapBy("id");if(s.length>1){K(i,t,e,s,n).then(d).then(u(n)).then(null,c(n))}else if(s.length===1){var l=Ember.A(r).findBy("record",a[0]);o(l)}else{}})}else{l(r,o)}},getById:function(e,r){if(this.hasRecordForId(e,r)){return this.recordForId(e,r)}else{return null}},reloadRecord:function(e){var r=e.constructor;var t=this.adapterFor(r);var i=o(e,"id");return this.scheduleFetch(e)},hasRecordForId:function(e,r){var t=this.modelFor(e);var i=_(r);return!!this.typeMapFor(t).idToRecord[i]},recordForId:function(e,r){var t=this.modelFor(e);var i=_(r);var a=this.typeMapFor(t).idToRecord;var n=a[i];if(!n||!a[i]){n=this.buildRecord(t,i)}return n},findMany:function(e,r,t,i){var a=this.modelFor(t);var n=Ember.A(r);var s=n.filterProperty("isEmpty",true);var o=this.recordArrayManager.createManyArray(a,n);o.loadingRecordsCount=s.length;if(s.length){l(s,function(e){this.recordArrayManager.registerWaitingRecordArray(e,o)},this);i.resolve(this.scheduleFetchMany(s,e))}else{if(i){i.resolve()}o.set("isLoaded",true);u(o,"trigger","didLoad")}return o},findHasMany:function(e,r,t,i){var a=this.adapterFor(e.constructor);var n=this.recordArrayManager.createManyArray(t.type,Ember.A([]));i.resolve(j(a,this,e,r,t));return n},findBelongsTo:function(e,r,t){var i=this.adapterFor(e.constructor);return L(i,this,e,r,t)},findQuery:function(e,r){var t=this.modelFor(e);var i=this.recordArrayManager.createAdapterPopulatedRecordArray(t,r);var a=this.adapterFor(t);return M(B(a,this,t,r,i))},findAll:function(e){var r=this.modelFor(e);return this.fetchAll(r,this.all(r))},fetchAll:function(e,r){var t=this.adapterFor(e);var i=this.typeMapFor(e).metadata.since;d(r,"isUpdating",true);return M(U(t,this,e,i))},didUpdateAll:function(e){var r=this.typeMapFor(e).findAllCache;d(r,"isUpdating",false)},all:function(e){var r=this.modelFor(e);var t=this.typeMapFor(r);var i=t.findAllCache;if(i){return i}var a=this.recordArrayManager.createRecordArray(r);t.findAllCache=a;return a},unloadAll:function(e){var r=this.modelFor(e);var t=this.typeMapFor(r);var i=t.records.slice();var a;for(var n=0;n<i.length;n++){a=i[n];a.unloadRecord();a.destroy()}t.findAllCache=null},filter:function(e,r,t){var i;var a=arguments.length;var n;var s=a===3;if(s){i=this.findQuery(e,r)}else if(arguments.length===2){t=r}e=this.modelFor(e);if(s){n=this.recordArrayManager.createFilteredRecordArray(e,t,r)}else{n=this.recordArrayManager.createFilteredRecordArray(e,t)}i=i||p.cast(n);return M(i.then(function(){return n},null,"DS: Store#filter of "+e))},recordIsLoaded:function(e,r){if(!this.hasRecordForId(e,r)){return false}return!o(this.recordForId(e,r),"isEmpty")},metadataFor:function(e){e=this.modelFor(e);return this.typeMapFor(e).metadata},dataWasUpdated:function(e,r){this.recordArrayManager.recordDidChange(r)},scheduleSave:function(e,r){e.adapterWillCommit();this._pendingSave.push([e,r]);u(this,"flushPendingSave")},flushPendingSave:function(){var e=this._pendingSave.slice();this._pendingSave=[];l(e,function(e){var r=e[0],t=e[1];var i=this.adapterFor(r.constructor);var a;if(o(r,"currentState.stateName")==="root.deleted.saved"){return t.resolve(r)}else if(o(r,"isNew")){a="createRecord"}else if(o(r,"isDeleted")){a="deleteRecord"}else{a="updateRecord"}t.resolve(V(i,this,a,r))},this)},didSaveRecord:function(e,r){if(r){r=F(this,e.constructor,r,e);this.updateId(e,r)}e.adapterDidCommit(r)},recordWasInvalid:function(e,r){e.adapterDidInvalidate(r)},recordWasError:function(e){e.adapterDidError()},updateId:function(e,r){var t=o(e,"id");var i=_(r.id);this.typeMapFor(e.constructor).idToRecord[i]=e;d(e,"id",i)},typeMapFor:function(e){var r=o(this,"typeMaps");var t=Ember.guidFor(e);var i;i=r[t];if(i){return i}i={idToRecord:Object.create(null),records:[],metadata:Object.create(null),type:e};r[t]=i;return i},_load:function(e,r,t){var i=_(r.id);var a=this.recordForId(e,i);a.setupData(r,t);this.recordArrayManager.recordDidChange(a);return a},modelFor:function(e){var r;if(typeof e==="string"){var t=this.container.normalize("model:"+e);r=this.container.lookupFactory(t);if(!r){throw new Ember.Error("No model was found for '"+e+"'")}r.typeKey=this._normalizeTypeKey(t.split(":",2)[1])}else{r=e;if(r.typeKey){r.typeKey=this._normalizeTypeKey(r.typeKey)}}r.store=this;return r},push:function(e,r,t){var i=this.modelFor(e);r=F(this,i,r);this._load(i,r,t);return this.recordForId(i,r.id)},pushPayload:function(e,r){var t;var i;if(!r){i=e;t=D(this.container)}else{i=r;t=this.serializerFor(e)}t.pushPayload(this,i)},normalize:function(e,r){var t=this.serializerFor(e);var i=this.modelFor(e);return t.normalize(i,r)},update:function(e,r){return this.push(e,r,true)},pushMany:function(e,r){return h(r,function(r){return this.push(e,r)},this)},metaForType:function(e,r){var t=this.modelFor(e);Ember.merge(this.typeMapFor(t).metadata,r)},buildRecord:function(e,r,t){var i=this.typeMapFor(e);var a=i.idToRecord;var n=e._create({id:r,store:this,container:this.container});if(t){n.setupData(t)}if(r){a[r]=n}i.records.push(n);return n},dematerializeRecord:function(e){var r=e.constructor;var t=this.typeMapFor(r);var i=o(e,"id");e.updateRecordArrays();if(i){delete t.idToRecord[i]}var a=f(t.records,e);t.records.splice(a,1)},addRelationshipChangeFor:function(e,r,t,i,a){var n=e.clientId;var s=t?t:t;var o=r+i;var d=this._relationshipChanges;if(!(n in d)){d[n]={}}if(!(s in d[n])){d[n][s]={}}if(!(o in d[n][s])){d[n][s][o]={}}d[n][s][o][a.changeType]=a},removeRelationshipChangeFor:function(e,r,t,i,a){var n=e.clientId;var s=t?t.clientId:t;var o=this._relationshipChanges;var d=r+i;if(!(n in o)||!(s in o[n])||!(d in o[n][s])){return}delete o[n][s][d][a]},relationshipChangePairsFor:function(e){var r=[];if(!e){return r}var t=this._relationshipChanges[e.clientId];for(var i in t){if(t.hasOwnProperty(i)){for(var a in t[i]){if(t[i].hasOwnProperty(a)){r.push(t[i][a])}}}}return r},adapterFor:function(e){var r=this.container,t;if(r){t=r.lookup("adapter:"+e.typeKey)||r.lookup("adapter:application")}return t||o(this,"defaultAdapter")},serializerFor:function(e){e=this.modelFor(e);var r=this.adapterFor(e);return O(this.container,e.typeKey,r&&r.defaultSerializer)},willDestroy:function(){var e=this.typeMaps;var r=Ember.keys(e);var t=this;var i=h(r,a);this.recordArrayManager.destroy();l(i,this.unloadAll,this);function a(r){return e[r]["type"]}},_normalizeTypeKey:function(e){return E(s(e))}});function F(e,r,t,i){r.eachRelationship(function(r,a){if(t.links&&t.links[r]){if(i&&a.options.async){i._relationships[r]=null}return}var n=a.kind;var s=t[r];if(s==null){if(n==="hasMany"&&i){s=t[r]=i.get(r).toArray()}return}if(n==="belongsTo"){A(e,t,r,a,s)}else if(n==="hasMany"){z(e,t,r,a,s);S(i,r,s)}});return t}function A(e,r,i,a,n){if(!R){R=t("ember-data/system/model")["Model"]}if(c(n)||n instanceof R){return}var s;if(typeof n==="number"||typeof n==="string"){s=T(a,i,r);r[i]=e.recordForId(s,n)}else if(typeof n==="object"){r[i]=e.recordForId(n.type,n.id)}}function T(e,r,t){if(e.options.polymorphic){return t[r+"Type"]}else{return e.type}}function z(e,r,t,i,a){for(var n=0,s=a.length;n<s;n++){A(e,a,n,i,a[n])}}function S(e,r,t){if(e){var i=x(Ember.A(t),e.get(r).filterBy("isNew"));Ember.A(t).pushObjects(i)}}function x(e,r){var t=e.mapBy("id");return r.reject(function(e){return Ember.A(t).contains(e.id)})}b=Ember.ArrayProxy.extend(Ember.PromiseProxyMixin);y=Ember.ObjectProxy.extend(Ember.PromiseProxyMixin);function C(e,r){return y.create({promise:p.cast(e,r)})}function M(e,r){return b.create({promise:p.cast(e,r)})}function k(e){return e&&typeof e.then==="function"}function O(e,r,t){return e.lookup("serializer:"+r)||e.lookup("serializer:application")||e.lookup("serializer:"+t)||e.lookup("serializer:-default")}function D(e){return e.lookup("serializer:application")||e.lookup("serializer:-default")}function P(e,r){var t=e.serializer;var i=e.defaultSerializer;var a=e.container;if(a&&t===undefined){t=O(a,r.typeKey,i)}if(t===null||t===undefined){t={extract:function(e,r,t){return t}}}return t}function w(e){return!(o(e,"isDestroyed")||o(e,"isDestroying"))}function I(e,r){var t=e["finally"](function(){if(!r()){t._subscribers.length=0}});return t}function N(e){var r=Array.prototype.slice.call(arguments,1);return function(){return e.apply(undefined,r)}}function $(e,r,t,i,a){var n=e.find(r,t,i,a);var s=P(e,t);var o="DS: Handle Adapter#find of "+t+" with id: "+i;n=p.cast(n,o);n=I(n,N(w,r));return n.then(function(e){var a=s.extract(r,t,e,i,"find");return r.push(t,a)},function(e){var a=r.getById(t,i);if(a){a.notFound()}throw e},"DS: Extract payload of '"+t+"'")}function K(e,r,t,i,a){var n=e.findMany(r,t,i,a);var s=P(e,t);var o="DS: Handle Adapter#findMany of "+t;if(n===undefined){throw new Error("adapter.findMany returned undefined, this was very likely a mistake")}var d;n=p.cast(n,o);n=I(n,N(w,r));return n.then(function(e){var i=s.extract(r,t,e,null,"findMany");return r.pushMany(t,i)},null,"DS: Extract payload of "+t)}function j(e,r,t,i,a){var n=e.findHasMany(r,t,i,a);var s=P(e,a.type);var o="DS: Handle Adapter#findHasMany of "+t+" : "+a.type;n=p.cast(n,o);n=I(n,N(w,r));n=I(n,N(w,t));return n.then(function(e){var i=s.extract(r,a.type,e,null,"findHasMany");var n=r.pushMany(a.type,i);t.updateHasMany(a.key,n)},null,"DS: Extract payload of "+t+" : hasMany "+a.type)}function L(e,r,t,i,a){var n=e.findBelongsTo(r,t,i,a);var s=P(e,a.type);var o="DS: Handle Adapter#findBelongsTo of "+t+" : "+a.type;n=p.cast(n,o);n=I(n,N(w,r));n=I(n,N(w,t));return n.then(function(e){var t=s.extract(r,a.type,e,null,"findBelongsTo");var i=r.push(a.type,t);i.updateBelongsTo(a.key,i);return i},null,"DS: Extract payload of "+t+" : "+a.type)}function U(e,r,t,i){var a=e.findAll(r,t,i);var n=P(e,t);var s="DS: Handle Adapter#findAll of "+t;a=p.cast(a,s);a=I(a,N(w,r));return a.then(function(e){var i=n.extract(r,t,e,null,"findAll");r.pushMany(t,i);r.didUpdateAll(t);return r.all(t)},null,"DS: Extract payload of findAll "+t)}function B(e,r,t,i,a){var n=e.findQuery(r,t,i,a);var s=P(e,t);var o="DS: Handle Adapter#findQuery of "+t;n=p.cast(n,o);n=I(n,N(w,r));return n.then(function(e){var i=s.extract(r,t,e,null,"findQuery");a.load(i);return a},null,"DS: Extract payload of findQuery "+t)}function V(e,r,t,i){var n=i.constructor;var s=e[t](r,n,i);var d=P(e,n);var u="DS: Extract and notify about "+t+" completion of "+i;s=p.cast(s,u);s=I(s,N(w,r));s=I(s,N(w,i));return s.then(function(e){var a;if(e){a=d.extract(r,n,e,o(i,"id"),t)}else{a=e}r.didSaveRecord(i,a);return i},function(e){if(e instanceof a){r.recordWasInvalid(i,e.errors)}else{r.recordWasError(i,e)}throw e},u)}i.Store=v;i.PromiseArray=b;i.PromiseObject=y;i["default"]=v});r("ember-data/transforms",["ember-data/transforms/base","ember-data/transforms/number","ember-data/transforms/date","ember-data/transforms/string","ember-data/transforms/boolean","exports"],function(e,r,t,i,a,n){"use strict";var s=e["default"];var o=r["default"];var d=t["default"];var u=i["default"];var c=a["default"];n.Transform=s;n.NumberTransform=o;n.DateTransform=d;n.StringTransform=u;n.BooleanTransform=c});r("ember-data/transforms/base",["exports"],function(e){"use strict";e["default"]=Ember.Object.extend({serialize:Ember.required(),deserialize:Ember.required()})});r("ember-data/transforms/boolean",["ember-data/transforms/base","exports"],function(e,r){"use strict";var t=e["default"];r["default"]=t.extend({deserialize:function(e){var r=typeof e;if(r==="boolean"){return e}else if(r==="string"){return e.match(/^true$|^t$|^1$/i)!==null}else if(r==="number"){return e===1}else{return false}},serialize:function(e){return Boolean(e)}})});r("ember-data/transforms/date",["ember-data/transforms/base","exports"],function(e,r){"use strict";var t=e["default"];var i=Date.prototype.toISOString||function(){function e(e){if(e<10){return"0"+e}return e}return this.getUTCFullYear()+"-"+e(this.getUTCMonth()+1)+"-"+e(this.getUTCDate())+"T"+e(this.getUTCHours())+":"+e(this.getUTCMinutes())+":"+e(this.getUTCSeconds())+"."+(this.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5)+"Z"};if(Ember.SHIM_ES5){if(!Date.prototype.toISOString){Date.prototype.toISOString=i}}r["default"]=t.extend({deserialize:function(e){var r=typeof e;if(r==="string"){return new Date(Ember.Date.parse(e))}else if(r==="number"){return new Date(e)}else if(e===null||e===undefined){return e}else{return null}},serialize:function(e){if(e instanceof Date){return i.call(e)}else{return null}}})});r("ember-data/transforms/number",["ember-data/transforms/base","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.isEmpty;r["default"]=t.extend({deserialize:function(e){return i(e)?null:Number(e)},serialize:function(e){return i(e)?null:Number(e)}})});r("ember-data/transforms/string",["ember-data/transforms/base","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.isNone;r["default"]=t.extend({deserialize:function(e){return i(e)?null:String(e)},serialize:function(e){return i(e)?null:String(e)}})});r("ember-inflector",["./system","./helpers","./ext/string","exports"],function(e,r,t,i){"use strict";var a=e.Inflector;var n=e.defaultRules;var s=e.pluralize;var o=e.singularize;a.defaultRules=n;Ember.Inflector=a;Ember.String.pluralize=s;Ember.String.singularize=o;i["default"]=a;i.pluralize=s;i.singularize=o});r("ember-inflector/ext/string",["../system/string"],function(e){"use strict";var r=e.pluralize;var t=e.singularize;if(Ember.EXTEND_PROTOTYPES===true||Ember.EXTEND_PROTOTYPES.String){String.prototype.pluralize=function(){return r(this)};String.prototype.singularize=function(){return t(this)}}});r("ember-inflector/helpers",["./system/string"],function(e){"use strict";var r=e.singularize;var t=e.pluralize;Ember.Handlebars.helper("singularize",r);Ember.Handlebars.helper("pluralize",t)});r("ember-inflector/system",["./system/inflector","./system/string","./system/inflections","exports"],function(e,r,t,i){"use strict";var a=e["default"];var n=r.pluralize;var s=r.singularize;var o=t["default"];a.inflector=new a(o);i.Inflector=a;i.singularize=s;i.pluralize=n;i.defaultRules=o});r("ember-inflector/system/inflections",["exports"],function(e){"use strict";e["default"]={plurals:[[/$/,"s"],[/s$/i,"s"],[/^(ax|test)is$/i,"$1es"],[/(octop|vir)us$/i,"$1i"],[/(octop|vir)i$/i,"$1i"],[/(alias|status)$/i,"$1es"],[/(bu)s$/i,"$1ses"],[/(buffal|tomat)o$/i,"$1oes"],[/([ti])um$/i,"$1a"],[/([ti])a$/i,"$1a"],[/sis$/i,"ses"],[/(?:([^f])fe|([lr])f)$/i,"$1$2ves"],[/(hive)$/i,"$1s"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/(x|ch|ss|sh)$/i,"$1es"],[/(matr|vert|ind)(?:ix|ex)$/i,"$1ices"],[/^(m|l)ouse$/i,"$1ice"],[/^(m|l)ice$/i,"$1ice"],[/^(ox)$/i,"$1en"],[/^(oxen)$/i,"$1"],[/(quiz)$/i,"$1zes"]],singular:[[/s$/i,""],[/(ss)$/i,"$1"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)(sis|ses)$/i,"$1sis"],[/(^analy)(sis|ses)$/i,"$1sis"],[/([^f])ves$/i,"$1fe"],[/(hive)s$/i,"$1"],[/(tive)s$/i,"$1"],[/([lr])ves$/i,"$1f"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/(x|ch|ss|sh)es$/i,"$1"],[/^(m|l)ice$/i,"$1ouse"],[/(bus)(es)?$/i,"$1"],[/(o)es$/i,"$1"],[/(shoe)s$/i,"$1"],[/(cris|test)(is|es)$/i,"$1is"],[/^(a)x[ie]s$/i,"$1xis"],[/(octop|vir)(us|i)$/i,"$1us"],[/(alias|status)(es)?$/i,"$1"],[/^(ox)en/i,"$1"],[/(vert|ind)ices$/i,"$1ex"],[/(matr)ices$/i,"$1ix"],[/(quiz)zes$/i,"$1"],[/(database)s$/i,"$1"]],irregularPairs:[["person","people"],["man","men"],["child","children"],["sex","sexes"],["move","moves"],["cow","kine"],["zombie","zombies"]],uncountable:["equipment","information","rice","money","species","series","fish","sheep","jeans","police"]}});r("ember-inflector/system/inflector",["exports"],function(e){"use strict";var r=/^\s*$/;var t=/(\w+[_-])([a-z\d]+$)/;var i=/(\w+)([A-Z][a-z\d]*$)/;var a=/[A-Z][a-z\d]*$/;function n(e,r){for(var t=0,i=r.length;t<i;t++){e.uncountable[r[t].toLowerCase()]=true}}function s(e,r){var t;for(var i=0,a=r.length;i<a;i++){t=r[i];e.irregular[t[0].toLowerCase()]=t[1];e.irregular[t[1].toLowerCase()]=t[1];e.irregularInverse[t[1].toLowerCase()]=t[0];e.irregularInverse[t[0].toLowerCase()]=t[0]}}function o(e){e=e||{};e.uncountable=e.uncountable||d();e.irregularPairs=e.irregularPairs||d();var r=this.rules={plurals:e.plurals||[],singular:e.singular||[],irregular:d(),irregularInverse:d(),uncountable:d()};n(r,e.uncountable);s(r,e.irregularPairs);this.enableCache()}if(!Object.create&&!Object.create(null).hasOwnProperty){throw new Error("This browser does not support Object.create(null), please polyfil with es5-sham: http://git.io/yBU2rg")}function d(){var e=Object.create(null);e["_dict"]=null;delete e["_dict"];return e}o.prototype={enableCache:function(){this.purgeCache();this.singularize=function(e){this._cacheUsed=true;return this._sCache[e]||(this._sCache[e]=this._singularize(e))};this.pluralize=function(e){this._cacheUsed=true;return this._pCache[e]||(this._pCache[e]=this._pluralize(e))}},purgeCache:function(){this._cacheUsed=false;this._sCache=d();this._pCache=d()},disableCache:function(){this._sCache=null;this._pCache=null;this.singularize=function(e){return this._singularize(e)};this.pluralize=function(e){return this._pluralize(e)}},plural:function(e,r){if(this._cacheUsed){this.purgeCache()}this.rules.plurals.push([e,r.toLowerCase()])},singular:function(e,r){if(this._cacheUsed){this.purgeCache()}this.rules.singular.push([e,r.toLowerCase()])},uncountable:function(e){if(this._cacheUsed){this.purgeCache()}n(this.rules,[e.toLowerCase()])},irregular:function(e,r){if(this._cacheUsed){this.purgeCache()}s(this.rules,[[e,r]])},pluralize:function(e){return this._pluralize(e)},_pluralize:function(e){return this.inflect(e,this.rules.plurals,this.rules.irregular)},singularize:function(e){return this._singularize(e)},_singularize:function(e){return this.inflect(e,this.rules.singular,this.rules.irregularInverse)},inflect:function(e,n,s){var o,d,u,c,l,f,h,p,m,v,y,b,g;p=r.test(e);m=a.test(e);f="";if(p){return e}c=e.toLowerCase();l=t.exec(e)||i.exec(e);if(l){f=l[1];h=l[2].toLowerCase()}v=this.rules.uncountable[c]||this.rules.uncountable[h];if(v){return e}y=s&&(s[c]||s[h]);if(y){if(s[c]){return y}else{y=m?y.capitalize():y;return f+y}}for(var R=n.length,E=0;R>E;R--){o=n[R-1];g=o[0];if(g.test(e)){break}}o=o||[];g=o[0];d=o[1];u=e.replace(g,d);return u}};e["default"]=o});r("ember-inflector/system/string",["./inflector","exports"],function(e,r){"use strict";var t=e["default"];function i(e){return t.inflector.pluralize(e)}function a(e){return t.inflector.singularize(e)}r.pluralize=i;r.singularize=a});e.DS=t("ember-data")["default"]})(this);
1
+ (function(e){var r,t,i,a;(function(){var e={},n={},s={};var o=false;r=function(r,t,i){e[r]={deps:t,callback:i}};function u(e,r,t){var a=e.length;var n=new Array(a);var s;var o;for(var u=0,l=a;u<l;u++){s=e[u];if(s==="exports"){o=n[u]=t}else{n[u]=i(d(s,r))}}return{deps:n,exports:o}}a=i=t=function(r){if(s[r]!==o&&n.hasOwnProperty(r)){return n[r]}if(!e[r]){throw new Error("Could not find module "+r)}var t=e[r];var i;var a;var d=false;n[r]={};try{i=u(t.deps,r,n[r]);a=t.callback.apply(this,i.deps);d=true}finally{if(!d){s[r]=o}}return i.exports?n[r]:n[r]=a};function d(e,r){if(e.charAt(0)!=="."){return e}var t=e.split("/");var i=r.split("/");var a;if(i.length===1){a=i}else{a=i.slice(0,-1)}for(var n=0,s=t.length;n<s;n++){var o=t[n];if(o===".."){a.pop()}else if(o==="."){continue}else{a.push(o)}}return a.join("/")}a.entries=a._eak_seen=e;a.clear=function(){a.entries=a._eak_seen=e={};n=s={}}})();r("activemodel-adapter",["activemodel-adapter/system","exports"],function(e,r){"use strict";var t=e.ActiveModelAdapter;var i=e.ActiveModelSerializer;r.ActiveModelAdapter=t;r.ActiveModelSerializer=i});r("activemodel-adapter/setup-container",["ember-data/system/container_proxy","activemodel-adapter/system/active_model_serializer","activemodel-adapter/system/active_model_adapter","exports"],function(e,r,t,i){"use strict";var a=e["default"];var n=r["default"];var s=t["default"];i["default"]=function o(e,r){var t=new a(e);t.registerDeprecations([{deprecated:"serializer:_ams",valid:"serializer:-active-model"},{deprecated:"adapter:_ams",valid:"adapter:-active-model"}]);e.register("serializer:-active-model",n);e.register("adapter:-active-model",s)}});r("activemodel-adapter/system",["activemodel-adapter/system/active_model_adapter","activemodel-adapter/system/active_model_serializer","exports"],function(e,r,t){"use strict";var i=e["default"];var a=r["default"];t.ActiveModelAdapter=i;t.ActiveModelSerializer=a});r("activemodel-adapter/system/active_model_adapter",["ember-data/adapters","ember-data/system/adapter","ember-inflector","exports"],function(e,r,t,i){"use strict";var a=e.RESTAdapter;var n=r.InvalidError;var s=t.pluralize;var o=Ember.EnumerableUtils.forEach;var u=Ember.String.decamelize,d=Ember.String.underscore;var l=a.extend({defaultSerializer:"-active-model",pathForType:function(e){var r=u(e);var t=d(r);return s(t)},ajaxError:function(e){var r=this._super(e);if(e&&e.status===422){var t=Ember.$.parseJSON(e.responseText),i={};if(t.errors!==undefined){var a=t.errors;o(Ember.keys(a),function(e){i[Ember.String.camelize(e)]=a[e]})}return new n(i)}else{return r}}});i["default"]=l});r("activemodel-adapter/system/active_model_serializer",["ember-inflector","ember-data/serializers/rest_serializer","exports"],function(e,r,t){"use strict";var i=e.singularize;var a=r["default"];var n=Ember.get,s=Ember.EnumerableUtils.forEach,o=Ember.String.camelize,u=Ember.String.capitalize,d=Ember.String.decamelize,l=Ember.String.underscore;var c=a.extend({keyForAttribute:function(e){return d(e)},keyForRelationship:function(e,r){var t=d(e);if(r==="belongsTo"){return t+"_id"}else if(r==="hasMany"){return i(t)+"_ids"}else{return t}},serializeHasMany:Ember.K,serializeIntoHash:function(e,r,t,i){var a=l(d(r.typeKey));e[a]=this.serialize(t,i)},serializePolymorphicType:function(e,r,t){var i=t.key;var a=n(e,i);var s=l(i+"_type");if(Ember.isNone(a)){r[s]=null}else{r[s]=u(o(a.constructor.typeKey))}},normalize:function(e,r,t){this.normalizeLinks(r);return this._super(e,r,t)},normalizeLinks:function(e){if(e.links){var r=e.links;for(var t in r){var i=o(t);if(i!==t){r[i]=r[t];delete r[t]}}}},normalizeRelationships:function(e,r){if(this.keyForRelationship){e.eachRelationship(function(e,t){var i,a;if(t.options.polymorphic){i=this.keyForAttribute(e);a=r[i];if(a&&a.type){a.type=this.typeForRoot(a.type)}else if(a&&t.kind==="hasMany"){var n=this;s(a,function(e){e.type=n.typeForRoot(e.type)})}}else{i=this.keyForRelationship(e,t.kind);if(!r.hasOwnProperty(i)){return}a=r[i]}r[e]=a;if(e!==i){delete r[i]}},this)}}});t["default"]=c});r("ember-data",["ember-data/core","ember-data/ext/date","ember-data/system/promise_proxies","ember-data/system/store","ember-data/system/model","ember-data/system/adapter","ember-data/system/debug","ember-data/system/record_arrays","ember-data/system/record_array_manager","ember-data/adapters","ember-data/serializers/json_serializer","ember-data/serializers/rest_serializer","ember-inflector","ember-data/serializers/embedded_records_mixin","activemodel-adapter","ember-data/transforms","ember-data/system/relationships","ember-data/ember-initializer","ember-data/setup-container","ember-data/system/container_proxy","ember-data/system/relationships/relationship","exports"],function(e,r,t,i,a,n,s,o,u,d,l,c,f,h,p,m,y,v,b,g,E,R){"use strict";Ember.RSVP.Promise.cast=Ember.RSVP.Promise.cast||Ember.RSVP.resolve;var A=e["default"];var _=t.PromiseArray;var F=t.PromiseObject;var z=i.Store;var x=a.Model;var T=a.Errors;var S=a.RootState;var k=a.attr;var M=n.InvalidError;var D=n.Adapter;var P=s["default"];var O=o.RecordArray;var C=o.FilteredRecordArray;var w=o.AdapterPopulatedRecordArray;var $=o.ManyArray;var I=u["default"];var L=d.RESTAdapter;var j=d.FixtureAdapter;var K=l["default"];var B=c["default"];var N=h["default"];var U=p.ActiveModelAdapter;var V=p.ActiveModelSerializer;var H=m.Transform;var W=m.DateTransform;var q=m.NumberTransform;var Q=m.StringTransform;var X=m.BooleanTransform;var J=y.hasMany;var G=y.belongsTo;var Y=b["default"];var Z=g["default"];var er=E.Relationship;A.Store=z;A.PromiseArray=_;A.PromiseObject=F;A.Model=x;A.RootState=S;A.attr=k;A.Errors=T;A.Adapter=D;A.InvalidError=M;A.DebugAdapter=P;A.RecordArray=O;A.FilteredRecordArray=C;A.AdapterPopulatedRecordArray=w;A.ManyArray=$;A.RecordArrayManager=I;A.RESTAdapter=L;A.FixtureAdapter=j;A.RESTSerializer=B;A.JSONSerializer=K;A.Transform=H;A.DateTransform=W;A.StringTransform=Q;A.NumberTransform=q;A.BooleanTransform=X;A.ActiveModelAdapter=U;A.ActiveModelSerializer=V;A.EmbeddedRecordsMixin=N;A.belongsTo=G;A.hasMany=J;A.Relationship=er;A.ContainerProxy=Z;A._setupContainer=Y;Ember.lookup.DS=A;R["default"]=A});r("ember-data/adapters",["ember-data/adapters/fixture_adapter","ember-data/adapters/rest_adapter","exports"],function(e,r,t){"use strict";var i=e["default"];var a=r["default"];t.RESTAdapter=a;t.FixtureAdapter=i});r("ember-data/adapters/fixture_adapter",["ember-data/system/adapter","exports"],function(e,r){"use strict";var t=Ember.get;var i=Ember.String.fmt;var a=Ember.EnumerableUtils.indexOf;var n=0;var s=e["default"];r["default"]=s.extend({serializer:null,simulateRemoteResponse:true,latency:50,fixturesForType:function(e){if(e.FIXTURES){var r=Ember.A(e.FIXTURES);return r.map(function(e){var r=typeof e.id;if(r!=="number"&&r!=="string"){throw new Error(i("the id property must be defined as a number or string for fixture %@",[e]))}e.id=e.id+"";return e})}return null},queryFixtures:function(e,r,t){},updateFixtures:function(e,r){if(!e.FIXTURES){e.FIXTURES=[]}var t=e.FIXTURES;this.deleteLoadedFixture(e,r);t.push(r)},mockJSON:function(e,r,t){return e.serializerFor(r).serialize(t,{includeId:true})},generateIdForRecord:function(e){return"fixture-"+n++},find:function(e,r,t){var i=this.fixturesForType(r);var a;if(i){a=Ember.A(i).findBy("id",t)}if(a){return this.simulateRemoteCall(function(){return a},this)}},findMany:function(e,r,t){var i=this.fixturesForType(r);if(i){i=i.filter(function(e){return a(t,e.id)!==-1})}if(i){return this.simulateRemoteCall(function(){return i},this)}},findAll:function(e,r){var t=this.fixturesForType(r);return this.simulateRemoteCall(function(){return t},this)},findQuery:function(e,r,t,i){var a=this.fixturesForType(r);a=this.queryFixtures(a,t,r);if(a){return this.simulateRemoteCall(function(){return a},this)}},createRecord:function(e,r,t){var i=this.mockJSON(e,r,t);this.updateFixtures(r,i);return this.simulateRemoteCall(function(){return i},this)},updateRecord:function(e,r,t){var i=this.mockJSON(e,r,t);this.updateFixtures(r,i);return this.simulateRemoteCall(function(){return i},this)},deleteRecord:function(e,r,t){this.deleteLoadedFixture(r,t);return this.simulateRemoteCall(function(){return null})},deleteLoadedFixture:function(e,r){var t=this.findExistingFixture(e,r);if(t){var i=a(e.FIXTURES,t);e.FIXTURES.splice(i,1);return true}},findExistingFixture:function(e,r){var i=this.fixturesForType(e);var a=t(r,"id");return this.findFixtureById(i,a)},findFixtureById:function(e,r){return Ember.A(e).find(function(e){if(""+t(e,"id")===""+r){return true}else{return false}})},simulateRemoteCall:function(e,r){var i=this;return new Ember.RSVP.Promise(function(a){var n=Ember.copy(e.call(r),true);if(t(i,"simulateRemoteResponse")){Ember.run.later(function(){a(n)},t(i,"latency"))}else{Ember.run.schedule("actions",null,function(){a(n)})}},"DS: FixtureAdapter#simulateRemoteCall")}})});r("ember-data/adapters/rest_adapter",["ember-data/system/adapter","exports"],function(e,r){"use strict";var t=e.Adapter;var i=e.InvalidError;var a=Ember.get;var n=Ember.ArrayPolyfills.forEach;r["default"]=t.extend({defaultSerializer:"-rest",coalesceFindRequests:false,find:function(e,r,t,i){return this.ajax(this.buildURL(r.typeKey,t,i),"GET")},findAll:function(e,r,t){var i;if(t){i={since:t}}return this.ajax(this.buildURL(r.typeKey),"GET",{data:i})},findQuery:function(e,r,t){return this.ajax(this.buildURL(r.typeKey),"GET",{data:t})},findMany:function(e,r,t,i){return this.ajax(this.buildURL(r.typeKey,t,i),"GET",{data:{ids:t}})},findHasMany:function(e,r,t,i){var n=a(this,"host");var s=a(r,"id");var o=r.constructor.typeKey;if(n&&t.charAt(0)==="/"&&t.charAt(1)!=="/"){t=n+t}return this.ajax(this.urlPrefix(t,this.buildURL(o,s)),"GET")},findBelongsTo:function(e,r,t,i){var n=a(r,"id");var s=r.constructor.typeKey;return this.ajax(this.urlPrefix(t,this.buildURL(s,n)),"GET")},createRecord:function(e,r,t){var i={};var a=e.serializerFor(r.typeKey);a.serializeIntoHash(i,r,t,{includeId:true});return this.ajax(this.buildURL(r.typeKey,null,t),"POST",{data:i})},updateRecord:function(e,r,t){var i={};var n=e.serializerFor(r.typeKey);n.serializeIntoHash(i,r,t);var s=a(t,"id");return this.ajax(this.buildURL(r.typeKey,s,t),"PUT",{data:i})},deleteRecord:function(e,r,t){var i=a(t,"id");return this.ajax(this.buildURL(r.typeKey,i,t),"DELETE")},buildURL:function(e,r,t){var i=[],n=a(this,"host"),s=this.urlPrefix();if(e){i.push(this.pathForType(e))}if(r&&!Ember.isArray(r)){i.push(r)}if(s){i.unshift(s)}i=i.join("/");if(!n&&i){i="/"+i}return i},urlPrefix:function(e,r){var t=a(this,"host");var i=a(this,"namespace");var n=[];if(e){if(e.charAt(0)==="/"){if(t){e=e.slice(1);n.push(t)}}else if(!/^http(s)?:\/\//.test(e)){n.push(r)}}else{if(t){n.push(t)}if(i){n.push(i)}}if(e){n.push(e)}return n.join("/")},_stripIDFromURL:function(e,r){var t=e.modelFor(r);var i=this.buildURL(t.typeKey,r.get("id"),r);var a=i.split("/");var n=a[a.length-1];var o=r.get("id");if(n===o){a[a.length-1]=""}else if(s(n,"?id="+o)){a[a.length-1]=n.substring(0,n.length-o.length-1)}return a.join("/")},groupRecordsForFindMany:function(e,r){var t=Ember.MapWithDefault.create({defaultValue:function(){return[]}});var i=this;n.call(r,function(r){var a=i._stripIDFromURL(e,r);t.get(a).push(r)});function a(r,t){var a=i._stripIDFromURL(e,r[0]);var s=0;var o=[[]];n.call(r,function(e){var r="&ids[]=".length+e.get("id.length");if(a.length+s+r>=t){s=0;o.push([])}s+=r;var i=o.length-1;o[i].push(e)});return o}var s=[];t.forEach(function(e,r){var t=2048;var i=a(r,t);n.call(i,function(e){s.push(e)})});return s},pathForType:function(e){var r=Ember.String.camelize(e);return Ember.String.pluralize(r)},ajaxError:function(e,r){if(e&&typeof e==="object"){e.then=null}return e},ajaxSuccess:function(e,r){return r},ajax:function(e,r,t){var a=this;return new Ember.RSVP.Promise(function(n,s){var o=a.ajaxOptions(e,r,t);o.success=function(e,r,t){e=a.ajaxSuccess(t,e);if(e instanceof i){Ember.run(null,s,e)}else{Ember.run(null,n,e)}};o.error=function(e,r,t){Ember.run(null,s,a.ajaxError(e,e.responseText))};Ember.$.ajax(o)},"DS: RESTAdapter#ajax "+r+" to "+e)},ajaxOptions:function(e,r,t){var i=t||{};i.url=e;i.type=r;i.dataType="json";i.context=this;if(i.data&&r!=="GET"){i.contentType="application/json; charset=utf-8";i.data=JSON.stringify(i.data)}var s=a(this,"headers");if(s!==undefined){i.beforeSend=function(e){n.call(Ember.keys(s),function(r){e.setRequestHeader(r,s[r])})}}return i}});function s(e,r){if(typeof String.prototype.endsWith!=="function"){return e.indexOf(r,e.length-r.length)!==-1}else{return e.endsWith(r)}}});r("ember-data/core",["exports"],function(e){"use strict";var r;if("undefined"===typeof r){r=Ember.Namespace.create({VERSION:"1.0.0-beta.10"});if(Ember.libraries){Ember.libraries.registerCoreLibrary("Ember Data",r.VERSION)}}e["default"]=r});r("ember-data/ember-initializer",["ember-data/setup-container"],function(e){"use strict";var r=e["default"];var t=Ember.K;Ember.onLoad("Ember.Application",function(e){e.initializer({name:"ember-data",initialize:r});e.initializer({name:"store",after:"ember-data",initialize:t});e.initializer({name:"activeModelAdapter",before:"store",initialize:t});e.initializer({name:"transforms",before:"store",initialize:t});e.initializer({name:"data-adapter",before:"store",initialize:t});e.initializer({name:"injectStore",before:"store",initialize:t})})});r("ember-data/ext/date",[],function(){"use strict";Ember.Date=Ember.Date||{};var e=Date.parse,r=[1,4,5,6,7,10,11];Ember.Date.parse=function(t){var i,a,n=0;if(a=/^(\d{4}|[+\-]\d{6})(?:-(\d{2})(?:-(\d{2}))?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{3}))?)?(?:(Z)|([+\-])(\d{2})(?::(\d{2}))?)?)?$/.exec(t)){for(var s=0,o;o=r[s];++s){a[o]=+a[o]||0}a[2]=(+a[2]||1)-1;a[3]=+a[3]||1;if(a[8]!=="Z"&&a[9]!==undefined){n=a[10]*60+a[11];if(a[9]==="+"){n=0-n}}i=Date.UTC(a[1],a[2],a[3],a[4],a[5]+n,a[6],a[7])}else{i=e?e(t):NaN}return i};if(Ember.EXTEND_PROTOTYPES===true||Ember.EXTEND_PROTOTYPES.Date){Date.parse=Ember.Date.parse}});r("ember-data/initializers/data_adapter",["ember-data/system/debug/debug_adapter","exports"],function(e,r){"use strict";var t=e["default"];r["default"]=function i(e){e.register("data-adapter:main",t)}});r("ember-data/initializers/store",["ember-data/serializers","ember-data/adapters","ember-data/system/container_proxy","ember-data/system/store","exports"],function(e,r,t,i,a){"use strict";var n=e.JSONSerializer;var s=e.RESTSerializer;var o=r.RESTAdapter;var u=t["default"];var d=i["default"];a["default"]=function l(e,r){e.register("store:main",e.lookupFactory("store:application")||r&&r.Store||d);var t=new u(e);t.registerDeprecations([{deprecated:"serializer:_default",valid:"serializer:-default"},{deprecated:"serializer:_rest",valid:"serializer:-rest"},{deprecated:"adapter:_rest",valid:"adapter:-rest"}]);e.register("serializer:-default",n);e.register("serializer:-rest",s);e.register("adapter:-rest",o);e.lookup("store:main")}});r("ember-data/initializers/store_injections",["exports"],function(e){"use strict";e["default"]=function r(e){e.injection("controller","store","store:main");e.injection("route","store","store:main");e.injection("serializer","store","store:main");e.injection("data-adapter","store","store:main")}});r("ember-data/initializers/transforms",["ember-data/transforms","exports"],function(e,r){"use strict";var t=e.BooleanTransform;var i=e.DateTransform;var a=e.StringTransform;var n=e.NumberTransform;r["default"]=function s(e){e.register("transform:boolean",t);e.register("transform:date",i);e.register("transform:number",n);e.register("transform:string",a)}});r("ember-data/serializers",["ember-data/serializers/json_serializer","ember-data/serializers/rest_serializer","exports"],function(e,r,t){"use strict";var i=e["default"];var a=r["default"];t.JSONSerializer=i;t.RESTSerializer=a});r("ember-data/serializers/embedded_records_mixin",["exports"],function(e){"use strict";var r=Ember.get;var t=Ember.EnumerableUtils.forEach;var i=Ember.String.camelize;var a=Ember.Mixin.create({normalize:function(e,r,t){var i=this._super(e,r,t);return n(this,this.store,e,i)},keyForRelationship:function(e,r){if(this.hasDeserializeRecordsOption(e)){return this.keyForAttribute(e)}else{return this._super(e,r)||e}},serializeBelongsTo:function(e,t,i){var a=i.key;if(this.noSerializeOptionSpecified(a)){this._super(e,t,i);return}var n=this.hasSerializeIdsOption(a);var s=this.hasSerializeRecordsOption(a);var o=e.get(a);var u;if(n){u=this.keyForRelationship(a,i.kind);if(!o){t[u]=null}else{t[u]=r(o,"id")}}else if(s){u=this.keyForAttribute(a);if(!o){t[u]=null}else{t[u]=o.serialize({includeId:true});this.removeEmbeddedForeignKey(e,o,i,t[u])}}},serializeHasMany:function(e,t,i){var a=i.key;if(this.noSerializeOptionSpecified(a)){this._super(e,t,i);return}var n=this.hasSerializeIdsOption(a);var s=this.hasSerializeRecordsOption(a);var o;if(n){o=this.keyForRelationship(a,i.kind);t[o]=r(e,a).mapBy("id")}else if(s){o=this.keyForAttribute(a);t[o]=r(e,a).map(function(r){var t=r.serialize({includeId:true});this.removeEmbeddedForeignKey(e,r,i,t);return t},this)}},removeEmbeddedForeignKey:function(e,r,t,i){if(t.kind==="hasMany"){return}else if(t.kind==="belongsTo"){var a=e.constructor.inverseFor(t.key);if(a){var n=a.name;var s=this.store.serializerFor(r.constructor);var o=s.keyForRelationship(n,a.kind);if(o){delete i[o]}}}},hasEmbeddedAlwaysOption:function(e){var r=this.attrsOption(e);return r&&r.embedded==="always"},hasSerializeRecordsOption:function(e){var r=this.hasEmbeddedAlwaysOption(e);var t=this.attrsOption(e);return r||t&&t.serialize==="records"},hasSerializeIdsOption:function(e){var r=this.attrsOption(e);return r&&(r.serialize==="ids"||r.serialize==="id")},noSerializeOptionSpecified:function(e){var r=this.attrsOption(e);return!(r&&(r.serialize||r.embedded))},hasDeserializeRecordsOption:function(e){var r=this.hasEmbeddedAlwaysOption(e);var t=this.attrsOption(e);return r||t&&t.deserialize==="records"},attrsOption:function(e){var r=this.get("attrs");return r&&(r[i(e)]||r[e])}});function n(e,r,t,i){t.eachRelationship(function(t,a){if(e.hasDeserializeRecordsOption(t)){var n=r.modelFor(a.type.typeKey);if(a.kind==="hasMany"){if(a.options.polymorphic){o(r,t,i)}else{s(r,t,n,i)}}if(a.kind==="belongsTo"){u(r,t,n,i)}}});return i}function s(e,r,i,a){if(!a[r]){return a}var n=[];var s=e.serializerFor(i.typeKey);t(a[r],function(r){var t=s.normalize(i,r,null);e.push(i,t);n.push(t.id)});a[r]=n;return a}function o(e,i,a){if(!a[i]){return a}var n=[];t(a[i],function(t){var i=t.type;var a=e.serializerFor(i);var s=e.modelFor(i);var o=r(a,"primaryKey");var u=a.normalize(s,t,null);e.push(s,u);n.push({id:u[o],type:i})});a[i]=n;return a}function u(e,r,t,i){if(!i[r]){return i}var a=e.serializerFor(t.typeKey);var n=a.normalize(t,i[r],null);e.push(t,n);i[r]=n.id;return i}e["default"]=a});r("ember-data/serializers/json_serializer",["exports"],function(e){"use strict";var r=Ember.get;var t=Ember.isNone;var i=Ember.ArrayPolyfills.map;var a=Ember.merge;e["default"]=Ember.Object.extend({primaryKey:"id",applyTransforms:function(e,r){e.eachTransformedAttribute(function t(e,i){if(!r.hasOwnProperty(e)){return}var a=this.transformFor(i);r[e]=a.deserialize(r[e])},this);return r},normalize:function(e,r){if(!r){return r}this.normalizeId(r);this.normalizeAttributes(e,r);this.normalizeRelationships(e,r);this.normalizeUsingDeclaredMapping(e,r);this.applyTransforms(e,r);return r},normalizePayload:function(e){return e},normalizeAttributes:function(e,r){var t;if(this.keyForAttribute){e.eachAttribute(function(e){t=this.keyForAttribute(e);if(e===t){return}if(!r.hasOwnProperty(t)){return}r[e]=r[t];delete r[t]},this)}},normalizeRelationships:function(e,r){var t;if(this.keyForRelationship){e.eachRelationship(function(e,i){t=this.keyForRelationship(e,i.kind);if(e===t){return}if(!r.hasOwnProperty(t)){return}r[e]=r[t];delete r[t]},this)}},normalizeUsingDeclaredMapping:function(e,t){var i=r(this,"attrs"),a,n;if(i){for(n in i){a=this._getMappedKey(n);if(!t.hasOwnProperty(a)){continue}if(a!==n){t[n]=t[a];delete t[a]}}}},normalizeId:function(e){var t=r(this,"primaryKey");if(t==="id"){return}e.id=e[t];delete e[t]},_getMappedKey:function(e){var t=r(this,"attrs");var i;if(t&&t[e]){i=t[e];if(i.key){i=i.key}if(typeof i==="string"){e=i}}return e},_canSerialize:function(e){var t=r(this,"attrs");return!t||!t[e]||t[e].serialize!==false},serialize:function(e,t){var i={};if(t&&t.includeId){var a=r(e,"id");if(a){i[r(this,"primaryKey")]=a}}e.eachAttribute(function(r,t){this.serializeAttribute(e,i,r,t)},this);e.eachRelationship(function(r,t){if(t.kind==="belongsTo"){this.serializeBelongsTo(e,i,t)}else if(t.kind==="hasMany"){this.serializeHasMany(e,i,t)}},this);return i},serializeIntoHash:function(e,r,t,i){a(e,this.serialize(t,i))},serializeAttribute:function(e,t,i,a){var n=a.type;if(this._canSerialize(i)){var s=r(e,i);if(n){var o=this.transformFor(n);s=o.serialize(s)}var u=this._getMappedKey(i);if(u===i&&this.keyForAttribute){u=this.keyForAttribute(i)}t[u]=s}},serializeBelongsTo:function(e,i,a){var n=a.key;if(this._canSerialize(n)){var s=r(e,n);var o=this._getMappedKey(n);if(o===n&&this.keyForRelationship){o=this.keyForRelationship(n,"belongsTo")}if(t(s)){i[o]=s}else{i[o]=r(s,"id")}if(a.options.polymorphic){this.serializePolymorphicType(e,i,a)}}},serializeHasMany:function(e,t,i){var a=i.key;if(this._canSerialize(a)){var n;n=this._getMappedKey(a);if(n===a&&this.keyForRelationship){n=this.keyForRelationship(a,"hasMany")}var s=e.constructor.determineRelationshipType(i);if(s==="manyToNone"||s==="manyToMany"){t[n]=r(e,a).mapBy("id")}}},serializePolymorphicType:Ember.K,extract:function(e,r,t,i,a){this.extractMeta(e,r,t);var n="extract"+a.charAt(0).toUpperCase()+a.substr(1);return this[n](e,r,t,i,a)},extractFindAll:function(e,r,t,i,a){return this.extractArray(e,r,t,i,a)},extractFindQuery:function(e,r,t,i,a){return this.extractArray(e,r,t,i,a)},extractFindMany:function(e,r,t,i,a){return this.extractArray(e,r,t,i,a)},extractFindHasMany:function(e,r,t,i,a){return this.extractArray(e,r,t,i,a)},extractCreateRecord:function(e,r,t,i,a){return this.extractSave(e,r,t,i,a)},extractUpdateRecord:function(e,r,t,i,a){return this.extractSave(e,r,t,i,a)},extractDeleteRecord:function(e,r,t,i,a){return this.extractSave(e,r,t,i,a)},extractFind:function(e,r,t,i,a){return this.extractSingle(e,r,t,i,a)},extractFindBelongsTo:function(e,r,t,i,a){return this.extractSingle(e,r,t,i,a)},extractSave:function(e,r,t,i,a){return this.extractSingle(e,r,t,i,a)},extractSingle:function(e,r,t,i,a){t=this.normalizePayload(t);return this.normalize(r,t)},extractArray:function(e,r,t,a,n){var s=this.normalizePayload(t);var o=this;return i.call(s,function(e){return o.normalize(r,e)})},extractMeta:function(e,r,t){if(t&&t.meta){e.metaForType(r,t.meta);delete t.meta}},keyForAttribute:function(e){return e},keyForRelationship:function(e,r){return e},transformFor:function(e,r){var t=this.container.lookup("transform:"+e);return t}})});r("ember-data/serializers/rest_serializer",["ember-data/serializers/json_serializer","ember-inflector/system/string","exports"],function(e,r,t){"use strict";var i=e["default"];var a=Ember.get;var n=Ember.ArrayPolyfills.forEach;var s=Ember.ArrayPolyfills.map;var o=Ember.String.camelize;var u=r.singularize;function d(e){return e==null?null:e+""}t["default"]=i.extend({normalize:function(e,r,t){this.normalizeId(r);this.normalizeAttributes(e,r);this.normalizeRelationships(e,r);this.normalizeUsingDeclaredMapping(e,r);if(this.normalizeHash&&this.normalizeHash[t]){this.normalizeHash[t](r)}this.applyTransforms(e,r);return r},extractSingle:function(e,r,t,i){var a=this.normalizePayload(t);var s=r.typeKey;var o;for(var u in a){var l=this.typeForRoot(u);var c=e.modelFor(l);var f=c.typeKey===s;var h=a[u];if(f&&Ember.typeOf(h)!=="array"){o=this.normalize(r,h,u);continue}n.call(h,function(r){var t=this.typeForRoot(u);var a=e.modelFor(t);var n=e.serializerFor(a);r=n.normalize(a,r,u);var s=f&&!i&&!o;var l=f&&d(r.id)===i;if(s||l){o=r}else{e.push(t,r)}},this)}return o},extractArray:function(e,r,t){var i=this.normalizePayload(t);var a=r.typeKey;var n;for(var o in i){var u=o;var d=false;if(o.charAt(0)==="_"){d=true;u=o.substr(1)}var l=this.typeForRoot(u);var c=e.modelFor(l);var f=e.serializerFor(c);var h=!d&&c.typeKey===a;var p=s.call(i[o],function(e){return f.normalize(c,e,o)},this);if(h){n=p}else{e.pushMany(l,p)}}return n},pushPayload:function(e,r){var t=this.normalizePayload(r);for(var i in t){var a=this.typeForRoot(i);var n=e.modelFor(a);var o=e.serializerFor(n);var u=s.call(Ember.makeArray(t[i]),function(e){return o.normalize(n,e,i)},this);e.pushMany(a,u)}},typeForRoot:function(e){return o(u(e))},serialize:function(e,r){return this._super.apply(this,arguments)},serializeIntoHash:function(e,r,t,i){e[r.typeKey]=this.serialize(t,i)},serializePolymorphicType:function(e,r,t){var i=t.key;var n=a(e,i);i=this.keyForAttribute?this.keyForAttribute(i):i;if(Ember.isNone(n)){r[i+"Type"]=null}else{r[i+"Type"]=Ember.String.camelize(n.constructor.typeKey)}}})});r("ember-data/setup-container",["ember-data/initializers/store","ember-data/initializers/transforms","ember-data/initializers/store_injections","ember-data/initializers/data_adapter","activemodel-adapter/setup-container","exports"],function(e,r,t,i,a,n){"use strict";var s=e["default"];var o=r["default"];var u=t["default"];var d=i["default"];var l=a["default"];n["default"]=function c(e,r){d(e,r);o(e,r);u(e,r);s(e,r);l(e,r)}});r("ember-data/system/adapter",["exports"],function(e){"use strict";var r=Ember.get;var t=["description","fileName","lineNumber","message","name","number","stack"];function i(e){var r=Error.prototype.constructor.call(this,"The backend rejected the commit because it was invalid: "+Ember.inspect(e));this.errors=e;for(var i=0,a=t.length;i<a;i++){this[t[i]]=r[t[i]]}}i.prototype=Ember.create(Error.prototype);var a=Ember.Object.extend({find:Ember.required(Function),findAll:null,findQuery:null,generateIdForRecord:null,serialize:function(e,t){return r(e,"store").serializerFor(e.constructor.typeKey).serialize(e,t)},createRecord:Ember.required(Function),updateRecord:Ember.required(Function),deleteRecord:Ember.required(Function),coalesceFindRequests:true,groupRecordsForFindMany:function(e,r){return[r]}});e.InvalidError=i;e.Adapter=a;e["default"]=a});r("ember-data/system/container_proxy",["exports"],function(e){"use strict";function r(e){this.container=e}r.prototype.aliasedFactory=function(e,r){var t=this;return{create:function(){if(r){r()}return t.container.lookup(e)}}};r.prototype.registerAlias=function(e,r,t){var i=this.aliasedFactory(r,t);return this.container.register(e,i)};r.prototype.registerDeprecation=function(e,r){var t=function(){};return this.registerAlias(e,r,t)};r.prototype.registerDeprecations=function(e){var r,t,i,a;for(r=e.length;r>0;r--){t=e[r-1];i=t["deprecated"];a=t["valid"];this.registerDeprecation(i,a)}};e["default"]=r});r("ember-data/system/debug",["ember-data/system/debug/debug_info","ember-data/system/debug/debug_adapter","exports"],function(e,r,t){"use strict";var i=r["default"];t["default"]=i});r("ember-data/system/debug/debug_adapter",["ember-data/system/model","exports"],function(e,r){"use strict";var t=e.Model;var i=Ember.get;var a=Ember.String.capitalize;var n=Ember.String.underscore;r["default"]=Ember.DataAdapter.extend({getFilters:function(){return[{name:"isNew",desc:"New"},{name:"isModified",desc:"Modified"},{name:"isClean",desc:"Clean"}]},detect:function(e){return e!==t&&t.detect(e)},columnsForType:function(e){var r=[{name:"id",desc:"Id"}];var t=0;var s=this;i(e,"attributes").forEach(function(e,i){if(t++>s.attributeLimit){return false}var o=a(n(e).replace("_"," "));r.push({name:e,desc:o})});return r},getRecords:function(e){return this.get("store").all(e)},getRecordColumnValues:function(e){var r=this,t=0;var a={id:i(e,"id")};e.eachAttribute(function(n){if(t++>r.attributeLimit){return false}var s=i(e,n);a[n]=s});return a},getRecordKeywords:function(e){var r=[];var t=Ember.A(["id"]);e.eachAttribute(function(e){t.push(e)});t.forEach(function(t){r.push(i(e,t))});return r},getRecordFilterValues:function(e){return{isNew:e.get("isNew"),isModified:e.get("isDirty")&&!e.get("isNew"),isClean:!e.get("isDirty")}},getRecordColor:function(e){var r="black";if(e.get("isNew")){r="green"}else if(e.get("isDirty")){r="blue"}return r},observeRecord:function(e,r){var t=Ember.A(),i=this;var a=Ember.A(["id","isNew","isDirty"]);e.eachAttribute(function(e){a.push(e)});a.forEach(function(a){var n=function(){r(i.wrapRecord(e))};Ember.addObserver(e,a,n);t.push(function(){Ember.removeObserver(e,a,n)})});var n=function(){t.forEach(function(e){e()})};return n}})});r("ember-data/system/debug/debug_info",["ember-data/system/model","exports"],function(e,r){"use strict";var t=e.Model;t.reopen({_debugInfo:function(){var e=["id"],r={belongsTo:[],hasMany:[]},t=[];this.eachAttribute(function(r,t){e.push(r)},this);this.eachRelationship(function(e,i){r[i.kind].push(e);t.push(e)});var i=[{name:"Attributes",properties:e,expand:true},{name:"Belongs To",properties:r.belongsTo,expand:true},{name:"Has Many",properties:r.hasMany,expand:true},{name:"Flags",properties:["isLoaded","isDirty","isSaving","isDeleted","isError","isNew","isValid"]}];return{propertyInfo:{includeOtherProperties:true,groups:i,expensiveProperties:t}}}});r["default"]=t});r("ember-data/system/model",["ember-data/system/model/model","ember-data/system/model/attributes","ember-data/system/model/states","ember-data/system/model/errors","exports"],function(e,r,t,i,a){"use strict";var n=e["default"];var s=r["default"];var o=t["default"];var u=i["default"];a.Model=n;a.RootState=o;a.attr=s;a.Errors=u});r("ember-data/system/model/attributes",["ember-data/system/model/model","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.get;t.reopenClass({attributes:Ember.computed(function(){var e=Ember.Map.create();this.eachComputedProperty(function(r,t){if(t.isAttribute){t.name=r;e.set(r,t)}});return e}).readOnly(),transformedAttributes:Ember.computed(function(){var e=Ember.Map.create();this.eachAttribute(function(r,t){if(t.type){e.set(r,t.type)}});return e}).readOnly(),eachAttribute:function(e,r){i(this,"attributes").forEach(function(t,i){e.call(r,t,i)},r)},eachTransformedAttribute:function(e,r){i(this,"transformedAttributes").forEach(function(t,i){e.call(r,t,i)})}});t.reopen({eachAttribute:function(e,r){this.constructor.eachAttribute(e,r)}});function a(e,r,t){if(typeof r.defaultValue==="function"){return r.defaultValue.apply(null,arguments)}else{return r.defaultValue}}function n(e,r){return e._attributes.hasOwnProperty(r)||e._inFlightAttributes.hasOwnProperty(r)||e._data.hasOwnProperty(r)}function s(e,r){if(e._attributes.hasOwnProperty(r)){return e._attributes[r]}else if(e._inFlightAttributes.hasOwnProperty(r)){return e._inFlightAttributes[r]}else{return e._data[r]}}r["default"]=function o(e,r){r=r||{};var t={type:e,isAttribute:true,options:r};return Ember.computed("data",function(e,t){if(arguments.length>1){var i=s(this,e);if(t!==i){this._attributes[e]=t;this.send("didSetProperty",{name:e,oldValue:i,originalValue:this._data[e],value:t})}return t}else if(n(this,e)){return s(this,e)}else{return a(this,r,e)}}).meta(t)}});r("ember-data/system/model/errors",["exports"],function(e){"use strict";var r=Ember.get;var t=Ember.isEmpty;var i=Ember.EnumerableUtils.map;e["default"]=Ember.Object.extend(Ember.Enumerable,Ember.Evented,{registerHandlers:function(e,r,t){this.on("becameInvalid",e,r);this.on("becameValid",e,t)},errorsByAttributeName:Ember.reduceComputed("content",{initialValue:function(){return Ember.MapWithDefault.create({defaultValue:function(){return Ember.A()}})},addedItem:function(e,r){e.get(r.attribute).pushObject(r);return e},removedItem:function(e,r){e.get(r.attribute).removeObject(r);return e}}),errorsFor:function(e){return r(this,"errorsByAttributeName").get(e)},messages:Ember.computed.mapBy("content","message"),content:Ember.computed(function(){return Ember.A()}),unknownProperty:function(e){var r=this.errorsFor(e);if(t(r)){return null}return r},nextObject:function(e,t,i){return r(this,"content").objectAt(e)
2
+ },length:Ember.computed.oneWay("content.length").readOnly(),isEmpty:Ember.computed.not("length").readOnly(),add:function(e,t){var i=r(this,"isEmpty");t=this._findOrCreateMessages(e,t);r(this,"content").addObjects(t);this.notifyPropertyChange(e);this.enumerableContentDidChange();if(i&&!r(this,"isEmpty")){this.trigger("becameInvalid")}},_findOrCreateMessages:function(e,r){var t=this.errorsFor(e);return i(Ember.makeArray(r),function(r){return t.findBy("message",r)||{attribute:e,message:r}})},remove:function(e){if(r(this,"isEmpty")){return}var t=r(this,"content").rejectBy("attribute",e);r(this,"content").setObjects(t);this.notifyPropertyChange(e);this.enumerableContentDidChange();if(r(this,"isEmpty")){this.trigger("becameValid")}},clear:function(){if(r(this,"isEmpty")){return}r(this,"content").clear();this.enumerableContentDidChange();this.trigger("becameValid")},has:function(e){return!t(this.errorsFor(e))}})});r("ember-data/system/model/model",["ember-data/system/model/states","ember-data/system/model/errors","ember-data/system/promise_proxies","ember-data/system/relationships/relationship","exports"],function(e,r,i,a,n){"use strict";var s=e["default"];var o=r["default"];var u=i.PromiseObject;var d=a.createRelationshipFor;var l=Ember.get;var c=Ember.set;var f=Ember.merge;var h=Ember.RSVP.Promise;var p=Ember.ArrayPolyfills.forEach;var m=Ember.ArrayPolyfills.map;var y;var v=Ember.computed("currentState",function(e,r){return l(l(this,"currentState"),e)}).readOnly();var b=Object.create(null);var g=Object.create(null);function E(e){return g[e]||(g[e]=e.split("."))}function R(e){return b[e]||(b[e]=E(e)[0])}var A=Ember.Object.extend(Ember.Evented,{_recordArrays:undefined,_relationships:undefined,_loadingRecordArrays:undefined,isEmpty:v,isLoading:v,isLoaded:v,isDirty:v,isSaving:v,isDeleted:v,isNew:v,isValid:v,dirtyType:v,isError:false,isReloading:false,clientId:null,id:null,currentState:s.empty,errors:Ember.computed(function(){var e=o.create();e.registerHandlers(this,function(){this.send("becameInvalid")},function(){this.send("becameValid")});return e}).readOnly(),serialize:function(e){var r=l(this,"store");return r.serialize(this,e)},toJSON:function(e){if(!y){y=t("ember-data/serializers/json_serializer")["default"]}var r=y.create({container:this.container});return r.serialize(this,e)},didLoad:Ember.K,didUpdate:Ember.K,didCreate:Ember.K,didDelete:Ember.K,becameInvalid:Ember.K,becameError:Ember.K,data:Ember.computed(function(){this._data=this._data||{};return this._data}).readOnly(),_data:null,init:function(){this._super();this._setup()},_setup:function(){this._changesToSync={};this._deferredTriggers=[];this._data={};this._attributes={};this._inFlightAttributes={};this._relationships={};var e=this;this.constructor.eachRelationship(function(r,t){e._relationships[r]=d(e,t,e.store)})},send:function(e,r){var t=l(this,"currentState");if(!t[e]){this._unhandledEvent(t,e,r)}return t[e](this,r)},transitionTo:function(e){var r=R(e);var t=l(this,"currentState");var i=t;do{if(i.exit){i.exit(this)}i=i.parentState}while(!i.hasOwnProperty(r));var a=E(e);var n=[],s=[],o,u;for(o=0,u=a.length;o<u;o++){i=i[a[o]];if(i.enter){s.push(i)}if(i.setup){n.push(i)}}for(o=0,u=s.length;o<u;o++){s[o].enter(this)}c(this,"currentState",i);for(o=0,u=n.length;o<u;o++){n[o].setup(this)}this.updateRecordArraysLater()},_unhandledEvent:function(e,r,t){var i="Attempted to handle event `"+r+"` ";i+="on "+String(this)+" while in state ";i+=e.stateName+". ";if(t!==undefined){i+="Called with "+Ember.inspect(t)+"."}throw new Ember.Error(i)},withTransaction:function(e){var r=l(this,"transaction");if(r){e(r)}},loadingData:function(e){this.send("loadingData",e)},loadedData:function(){this.send("loadedData")},notFound:function(){this.send("notFound")},pushedData:function(){this.send("pushedData")},deleteRecord:function(){this.send("deleteRecord")},destroyRecord:function(){this.deleteRecord();return this.save()},unloadRecord:function(){if(this.isDestroyed){return}this.send("unloadRecord")},clearRelationships:function(){this.eachRelationship(function(e,r){var t=this._relationships[e];if(t){t.clear();t.destroy()}},this)},updateRecordArrays:function(){this._updatingRecordArraysLater=false;l(this,"store").dataWasUpdated(this.constructor,this)},_preloadData:function(e){var r=this;p.call(Ember.keys(e),function(t){var i=l(e,t);var a=r.constructor.metaForProperty(t);if(a.isRelationship){r._preloadRelationship(t,i)}else{l(r,"_data")[t]=i}})},_preloadRelationship:function(e,r){var t=this.constructor.metaForProperty(e);var i=t.type;if(t.kind==="hasMany"){this._preloadHasMany(e,r,i)}else{this._preloadBelongsTo(e,r,i)}},_preloadHasMany:function(e,r,t){var i=this;var a=m.call(r,function(e){return i._convertStringOrNumberIntoRecord(e,t)});this._relationships[e].updateRecordsFromAdapter(a)},_preloadBelongsTo:function(e,r,t){var i=this._convertStringOrNumberIntoRecord(r,t);this._relationships[e].setRecord(i)},_convertStringOrNumberIntoRecord:function(e,r){if(Ember.typeOf(e)==="string"||Ember.typeOf(e)==="number"){return this.store.recordForId(r,e)}return e},changedAttributes:function(){var e=l(this,"_data");var r=l(this,"_attributes");var t={};var i;for(i in r){t[i]=[e[i],r[i]]}return t},adapterWillCommit:function(){this.send("willCommit")},adapterDidCommit:function(e){c(this,"isError",false);if(e){this._data=e}else{Ember.mixin(this._data,this._inFlightAttributes)}this._inFlightAttributes={};this.send("didCommit");this.updateRecordArraysLater();if(!e){return}this.notifyPropertyChange("data")},adapterDidDirty:function(){this.send("becomeDirty");this.updateRecordArraysLater()},updateRecordArraysLater:function(){if(this._updatingRecordArraysLater){return}this._updatingRecordArraysLater=true;Ember.run.schedule("actions",this,this.updateRecordArrays)},setupData:function(e,r){if(r){Ember.merge(this._data,e)}else{this._data=e}if(e){this.pushedData()}this.notifyPropertyChange("data")},materializeId:function(e){c(this,"id",e)},materializeAttributes:function(e){f(this._data,e)},materializeAttribute:function(e,r){this._data[e]=r},rollback:function(){this._attributes={};if(l(this,"isError")){this._inFlightAttributes={};c(this,"isError",false)}if(!l(this,"isValid")){this._inFlightAttributes={}}this.send("rolledBack");this.notifyPropertyChange("data")},toStringExtension:function(){return l(this,"id")},save:function(){var e="DS: Model#save "+this;var r=Ember.RSVP.defer(e);this.get("store").scheduleSave(this,r);this._inFlightAttributes=this._attributes;this._attributes={};return u.create({promise:r.promise})},reload:function(){c(this,"isReloading",true);var e=this;var r="DS: Model#reload of "+this;var t=new h(function(r){e.send("reloadRecord",r)},r).then(function(){e.set("isReloading",false);e.set("isError",false);return e},function(r){e.set("isError",true);throw r},"DS: Model#reload complete, update flags");return u.create({promise:t})},adapterDidUpdateAttribute:function(e,r){if(r!==undefined){this._data[e]=r;this.notifyPropertyChange(e)}else{this._data[e]=this._inFlightAttributes[e]}this.updateRecordArraysLater()},adapterDidInvalidate:function(e){var r=l(this,"errors");function t(t){if(e[t]){r.add(t,e[t])}}this.eachAttribute(t);this.eachRelationship(t)},adapterDidError:function(){this.send("becameError");c(this,"isError",true)},trigger:function(e){Ember.tryInvoke(this,e,[].slice.call(arguments,1));this._super.apply(this,arguments)},triggerLater:function(){if(this._deferredTriggers.push(arguments)!==1){return}Ember.run.schedule("actions",this,"_triggerDeferredTriggers")},_triggerDeferredTriggers:function(){for(var e=0,r=this._deferredTriggers.length;e<r;e++){this.trigger.apply(this,this._deferredTriggers[e])}this._deferredTriggers.length=0},willDestroy:function(){this._super();this.clearRelationships()},willMergeMixin:function(e){}});A.reopenClass({_create:A.create,create:function(){throw new Ember.Error("You should not call `create` on a model. Instead, call `store.createRecord` with the attributes you would like to set.")}});n["default"]=A});r("ember-data/system/model/states",["exports"],function(e){"use strict";var r=Ember.get;var t=Ember.set;function i(e,r){if(r.value===r.originalValue){delete e._attributes[r.name];e.send("propertyWasReset",r.name)}else if(r.value!==r.oldValue){e.send("becomeDirty")}e.updateRecordArraysLater()}var a={initialState:"uncommitted",isDirty:true,uncommitted:{didSetProperty:i,loadingData:Ember.K,propertyWasReset:function(e,r){var t=Ember.keys(e._attributes);var i=t>0;if(!i){e.send("rolledBack")}},pushedData:Ember.K,becomeDirty:Ember.K,willCommit:function(e){e.transitionTo("inFlight")},reloadRecord:function(e,t){t(r(e,"store").reloadRecord(e))},rolledBack:function(e){e.transitionTo("loaded.saved")},becameInvalid:function(e){e.transitionTo("invalid")},rollback:function(e){e.rollback()}},inFlight:{isSaving:true,didSetProperty:i,becomeDirty:Ember.K,pushedData:Ember.K,unloadRecord:function(e){},willCommit:Ember.K,didCommit:function(e){var t=r(this,"dirtyType");e.transitionTo("saved");e.send("invokeLifecycleCallbacks",t)},becameInvalid:function(e){e.transitionTo("invalid");e.send("invokeLifecycleCallbacks")},becameError:function(e){e.transitionTo("uncommitted");e.triggerLater("becameError",e)}},invalid:{isValid:false,deleteRecord:function(e){e.transitionTo("deleted.uncommitted");e.clearRelationships()},didSetProperty:function(e,t){r(e,"errors").remove(t.name);i(e,t)},becomeDirty:Ember.K,willCommit:function(e){r(e,"errors").clear();e.transitionTo("inFlight")},rolledBack:function(e){r(e,"errors").clear()},becameValid:function(e){e.transitionTo("uncommitted")},invokeLifecycleCallbacks:function(e){e.triggerLater("becameInvalid",e)},exit:function(e){e._inFlightAttributes={}}}};function n(e){var r={},t;for(var i in e){t=e[i];if(t&&typeof t==="object"){r[i]=n(t)}else{r[i]=t}}return r}function s(e,r){for(var t in r){e[t]=r[t]}return e}function o(e){var r=n(a);return s(r,e)}var u=o({dirtyType:"created",isNew:true});u.uncommitted.rolledBack=function(e){e.transitionTo("deleted.saved")};var d=o({dirtyType:"updated"});u.uncommitted.deleteRecord=function(e){e.clearRelationships();e.transitionTo("deleted.saved")};u.uncommitted.rollback=function(e){a.uncommitted.rollback.apply(this,arguments);e.transitionTo("deleted.saved")};u.uncommitted.propertyWasReset=Ember.K;function l(e){}d.inFlight.unloadRecord=l;d.uncommitted.deleteRecord=function(e){e.transitionTo("deleted.uncommitted");e.clearRelationships()};var c={isEmpty:false,isLoading:false,isLoaded:false,isDirty:false,isSaving:false,isDeleted:false,isNew:false,isValid:true,rolledBack:Ember.K,unloadRecord:function(e){e.clearRelationships();e.transitionTo("deleted.saved")},propertyWasReset:Ember.K,empty:{isEmpty:true,loadingData:function(e,r){e._loadingPromise=r;e.transitionTo("loading")},loadedData:function(e){e.transitionTo("loaded.created.uncommitted");e.notifyPropertyChange("data")},pushedData:function(e){e.transitionTo("loaded.saved");e.triggerLater("didLoad")}},loading:{isLoading:true,exit:function(e){e._loadingPromise=null},pushedData:function(e){e.transitionTo("loaded.saved");e.triggerLater("didLoad");t(e,"isError",false)},becameError:function(e){e.triggerLater("becameError",e)},notFound:function(e){e.transitionTo("empty")}},loaded:{initialState:"saved",isLoaded:true,loadingData:Ember.K,saved:{setup:function(e){var r=e._attributes;var t=false;for(var i in r){if(r.hasOwnProperty(i)){t=true;break}}if(t){e.adapterDidDirty()}},didSetProperty:i,pushedData:Ember.K,becomeDirty:function(e){e.transitionTo("updated.uncommitted")},willCommit:function(e){e.transitionTo("updated.inFlight")},reloadRecord:function(e,t){t(r(e,"store").reloadRecord(e))},deleteRecord:function(e){e.transitionTo("deleted.uncommitted");e.clearRelationships()},unloadRecord:function(e){e.clearRelationships();e.transitionTo("deleted.saved")},didCommit:function(e){e.send("invokeLifecycleCallbacks",r(e,"lastDirtyType"))},notFound:Ember.K},created:u,updated:d},deleted:{initialState:"uncommitted",dirtyType:"deleted",isDeleted:true,isLoaded:true,isDirty:true,setup:function(e){e.updateRecordArrays()},uncommitted:{willCommit:function(e){e.transitionTo("inFlight")},rollback:function(e){e.rollback()},becomeDirty:Ember.K,deleteRecord:Ember.K,rolledBack:function(e){e.transitionTo("loaded.saved")}},inFlight:{isSaving:true,unloadRecord:l,willCommit:Ember.K,didCommit:function(e){e.transitionTo("saved");e.send("invokeLifecycleCallbacks")},becameError:function(e){e.transitionTo("uncommitted");e.triggerLater("becameError",e)}},saved:{isDirty:false,setup:function(e){var t=r(e,"store");t.dematerializeRecord(e)},invokeLifecycleCallbacks:function(e){e.triggerLater("didDelete",e);e.triggerLater("didCommit",e)},willCommit:Ember.K,didCommit:Ember.K}},invokeLifecycleCallbacks:function(e,r){if(r==="created"){e.triggerLater("didCreate",e)}else{e.triggerLater("didUpdate",e)}e.triggerLater("didCommit",e)}};function f(e,r,t){e=s(r?Ember.create(r):{},e);e.parentState=r;e.stateName=t;for(var i in e){if(!e.hasOwnProperty(i)||i==="parentState"||i==="stateName"){continue}if(typeof e[i]==="object"){e[i]=f(e[i],e,t+"."+i)}}return e}c=f(c,null,"root");e["default"]=c});r("ember-data/system/promise_proxies",["exports"],function(e){"use strict";var r=Ember.RSVP.Promise;var t=Ember.ArrayProxy.extend(Ember.PromiseProxyMixin);var i=Ember.ObjectProxy.extend(Ember.PromiseProxyMixin);var a=function(e,t){return i.create({promise:r.resolve(e,t)})};var n=function(e,i){return t.create({promise:r.resolve(e,i)})};e.PromiseArray=t;e.PromiseObject=i;e.promiseArray=n;e.promiseObject=a});r("ember-data/system/record_array_manager",["ember-data/system/record_arrays","exports"],function(e,r){"use strict";var t=e.RecordArray;var i=e.FilteredRecordArray;var a=e.AdapterPopulatedRecordArray;var n=e.ManyArray;var s=Ember.get;var o=Ember.EnumerableUtils.forEach;r["default"]=Ember.Object.extend({init:function(){this.filteredRecordArrays=Ember.MapWithDefault.create({defaultValue:function(){return[]}});this.changedRecords=[];this._adapterPopulatedRecordArrays=[]},recordDidChange:function(e){if(this.changedRecords.push(e)!==1){return}Ember.run.schedule("actions",this,this.updateRecordArrays)},recordArraysForRecord:function(e){e._recordArrays=e._recordArrays||Ember.OrderedSet.create();return e._recordArrays},updateRecordArrays:function(){o(this.changedRecords,function(e){if(s(e,"isDeleted")){this._recordWasDeleted(e)}else{this._recordWasChanged(e)}},this);this.changedRecords.length=0},_recordWasDeleted:function(e){var r=e._recordArrays;if(!r){return}o(r,function(r){r.removeRecord(e)})},_recordWasChanged:function(e){var r=e.constructor;var t=this.filteredRecordArrays.get(r);var i;o(t,function(t){i=s(t,"filterFunction");this.updateRecordArray(t,i,r,e)},this);var a=e._loadingRecordArrays;if(a){for(var n=0,u=a.length;n<u;n++){a[n].loadedRecord()}e._loadingRecordArrays=[]}},updateRecordArray:function(e,r,t,i){var a;if(!r){a=true}else{a=r(i)}var n=this.recordArraysForRecord(i);if(a){if(!n.has(e)){e.pushRecord(i);n.add(e)}}else if(!a){n.remove(e);e.removeRecord(i)}},updateFilter:function(e,r,t){var i=this.store.typeMapFor(r);var a=i.records,n;for(var o=0,u=a.length;o<u;o++){n=a[o];if(!s(n,"isDeleted")&&!s(n,"isEmpty")){this.updateRecordArray(e,t,r,n)}}},createManyArray:function(e,r){var t=n.create({type:e,content:r,store:this.store});o(r,function(e){var r=this.recordArraysForRecord(e);r.add(t)},this);return t},createRecordArray:function(e){var r=t.create({type:e,content:Ember.A(),store:this.store,isLoaded:true});this.registerFilteredRecordArray(r,e);return r},createFilteredRecordArray:function(e,r,t){var a=i.create({query:t,type:e,content:Ember.A(),store:this.store,manager:this,filterFunction:r});this.registerFilteredRecordArray(a,e,r);return a},createAdapterPopulatedRecordArray:function(e,r){var t=a.create({type:e,query:r,content:Ember.A(),store:this.store,manager:this});this._adapterPopulatedRecordArrays.push(t);return t},registerFilteredRecordArray:function(e,r,t){var i=this.filteredRecordArrays.get(r);i.push(e);this.updateFilter(e,r,t)},registerWaitingRecordArray:function(e,r){var t=e._loadingRecordArrays||[];t.push(r);e._loadingRecordArrays=t},willDestroy:function(){this._super();o(l(u(this.filteredRecordArrays.values)),d);o(this._adapterPopulatedRecordArrays,d)}});function u(e){var r=[];var t=Ember.keys(e);for(var i=0;i<t.length;i++){r.push(e[t[i]])}return r}function d(e){e.destroy()}function l(e){var r=e.length;var t=Ember.A();for(var i=0;i<r;i++){t=t.concat(e[i])}return t}});r("ember-data/system/record_arrays",["ember-data/system/record_arrays/record_array","ember-data/system/record_arrays/filtered_record_array","ember-data/system/record_arrays/adapter_populated_record_array","ember-data/system/record_arrays/many_array","exports"],function(e,r,t,i,a){"use strict";var n=e["default"];var s=r["default"];var o=t["default"];var u=i["default"];a.RecordArray=n;a.FilteredRecordArray=s;a.AdapterPopulatedRecordArray=o;a.ManyArray=u});r("ember-data/system/record_arrays/adapter_populated_record_array",["ember-data/system/record_arrays/record_array","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.get;function a(e){var r=Object.create(null);for(var t in e){r[t]=e[t]}return r}r["default"]=t.extend({query:null,replace:function(){var e=i(this,"type").toString();throw new Error("The result of a server query (on "+e+") is immutable.")},load:function(e){var r=i(this,"store");var t=i(this,"type");var n=r.pushMany(t,e);var s=r.metadataFor(t);this.setProperties({content:Ember.A(n),isLoaded:true,meta:a(s)});n.forEach(function(e){this.manager.recordArraysForRecord(e).add(this)},this);Ember.run.once(this,"trigger","didLoad")}})});r("ember-data/system/record_arrays/filtered_record_array",["ember-data/system/record_arrays/record_array","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.get;r["default"]=t.extend({filterFunction:null,isLoaded:true,replace:function(){var e=i(this,"type").toString();throw new Error("The result of a client-side filter (on "+e+") is immutable.")},_updateFilter:function(){var e=i(this,"manager");e.updateFilter(this,i(this,"type"),i(this,"filterFunction"))},updateFilter:Ember.observer(function(){Ember.run.once(this,this._updateFilter)},"filterFunction")})});r("ember-data/system/record_arrays/many_array",["ember-data/system/record_arrays/record_array","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.get,a=Ember.set;r["default"]=t.extend({init:function(){this._super.apply(this,arguments)},name:null,owner:null,isPolymorphic:false,isLoaded:false,relationship:null,promise:null,loadingRecordsCount:function(e){this.loadingRecordsCount=e},loadedRecord:function(){this.loadingRecordsCount--;if(this.loadingRecordsCount===0){a(this,"isLoaded",true);this.trigger("didLoad")}},replaceContent:function(e,r,t){var a;if(r>0){a=i(this,"content").slice(e,e+r);this.get("relationship").removeRecords(a)}if(t){this.get("relationship").addRecords(t,e)}},createRecord:function(e){var r=i(this,"store");var t=i(this,"type");var a;a=r.createRecord.call(r,t,e);this.pushObject(a);return a}})});r("ember-data/system/record_arrays/record_array",["ember-data/system/promise_proxies","exports"],function(e,r){"use strict";var t=e.PromiseArray;var i=Ember.get;r["default"]=Ember.ArrayProxy.extend(Ember.Evented,{type:null,content:null,isLoaded:false,isUpdating:false,store:null,objectAtContent:function(e){var r=i(this,"content");return r.objectAt(e)},update:function(){if(i(this,"isUpdating")){return}var e=i(this,"store");var r=i(this,"type");return e.fetchAll(r,this)},addRecord:function(e,r){var t=i(this,"content");if(r===undefined){t.addObject(e)}else{if(!t.contains(e)){t.insertAt(r,e)}}},pushRecord:function(e){i(this,"content").pushObject(e)},removeRecord:function(e){i(this,"content").removeObject(e)},save:function(){var e="DS: RecordArray#save "+i(this,"type");var r=Ember.RSVP.all(this.invoke("save"),e).then(function(e){return Ember.A(e)},null,"DS: RecordArray#save apply Ember.NativeArray");return t.create({promise:r})},_dissociateFromOwnRecords:function(){var e=this;this.forEach(function(r){var t=r._recordArrays;if(t){t.remove(e)}})},willDestroy:function(){this._dissociateFromOwnRecords();this._super()}})});r("ember-data/system/relationship-meta",["ember-inflector/system","exports"],function(e,r){"use strict";var t=e.singularize;function i(e,r){var i,a;i=r.type||r.key;if(typeof i==="string"){if(r.kind==="hasMany"){i=t(i)}a=e.modelFor(i)}else{a=r.type}return a}r.typeForRelationshipMeta=i;function a(e,r){return{key:r.key,kind:r.kind,type:i(e,r),options:r.options,parentType:r.parentType,isRelationship:true}}r.relationshipFromMeta=a});r("ember-data/system/relationships",["./relationships/belongs_to","./relationships/has_many","ember-data/system/relationships/ext","exports"],function(e,r,t,i){"use strict";var a=e["default"];var n=r["default"];i.belongsTo=a;i.hasMany=n});r("ember-data/system/relationships/belongs_to",["ember-data/system/model","exports"],function(e,r){"use strict";var t=e.Model;function i(e,r){if(typeof e==="object"){r=e;e=undefined}else{}r=r||{};var t={type:e,isRelationship:true,options:r,kind:"belongsTo",key:null};return Ember.computed(function(e,r){if(arguments.length>1){if(r===undefined){r=null}this._relationships[e].setRecord(r)}return this._relationships[e].getRecord()}).meta(t)}t.reopen({notifyBelongsToAdded:function(e,r){this.notifyPropertyChange(e)},notifyBelongsToRemoved:function(e){this.notifyPropertyChange(e)}});r["default"]=i});r("ember-data/system/relationships/ext",["ember-data/system/relationship-meta","ember-data/system/model"],function(e,r){"use strict";var t=e.typeForRelationshipMeta;var i=e.relationshipFromMeta;var a=r.Model;var n=Ember.get;a.reopen({didDefineProperty:function(e,r,t){if(t instanceof Ember.ComputedProperty){var i=t.meta();i.parentType=e.constructor}}});a.reopenClass({typeForRelationship:function(e){var r=n(this,"relationshipsByName").get(e);return r&&r.type},inverseFor:function(e){var r=this.typeForRelationship(e);if(!r){return null}var t=this.metaForProperty(e).options;if(t.inverse===null){return null}var i,a,s;if(t.inverse){i=t.inverse;s=Ember.get(r,"relationshipsByName").get(i);a=s.kind}else{var o=u(this,r);if(o.length===0){return null}i=o[0].name;a=o[0].kind}function u(e,r,t){t=t||[];var i=n(r,"relationships");if(!i){return}var a=i.get(e);if(a){t.push.apply(t,i.get(e))}if(e.superclass){u(e.superclass,r,t)}return t}return{type:r,name:i,kind:a}},relationships:Ember.computed(function(){var e=new Ember.MapWithDefault({defaultValue:function(){return[]}});this.eachComputedProperty(function(r,i){if(i.isRelationship){i.key=r;var a=e.get(t(this.store,i));a.push({name:r,kind:i.kind})}});return e}).cacheable(false).readOnly(),relationshipNames:Ember.computed(function(){var e={hasMany:[],belongsTo:[]};this.eachComputedProperty(function(r,t){if(t.isRelationship){e[t.kind].push(r)}});return e}),relatedTypes:Ember.computed(function(){var e;var r=Ember.A();this.eachComputedProperty(function(i,a){if(a.isRelationship){a.key=i;e=t(this.store,a);if(!r.contains(e)){r.push(e)}}});return r}).cacheable(false).readOnly(),relationshipsByName:Ember.computed(function(){var e=Ember.Map.create();this.eachComputedProperty(function(r,a){if(a.isRelationship){a.key=r;var n=i(this.store,a);n.type=t(this.store,a);e.set(r,n)}});return e}).cacheable(false).readOnly(),fields:Ember.computed(function(){var e=Ember.Map.create();this.eachComputedProperty(function(r,t){if(t.isRelationship){e.set(r,t.kind)}else if(t.isAttribute){e.set(r,"attribute")}});return e}).readOnly(),eachRelationship:function(e,r){n(this,"relationshipsByName").forEach(function(t,i){e.call(r,t,i)})},eachRelatedType:function(e,r){n(this,"relatedTypes").forEach(function(t){e.call(r,t)})},determineRelationshipType:function(e){var r=e.key;var t=e.kind;var i=this.inverseFor(r);var a,n;if(!i){return t==="belongsTo"?"oneToNone":"manyToNone"}a=i.name;n=i.kind;if(n==="belongsTo"){return t==="belongsTo"?"oneToOne":"manyToOne"}else{return t==="belongsTo"?"oneToMany":"manyToMany"}}});a.reopen({eachRelationship:function(e,r){this.constructor.eachRelationship(e,r)},relationshipFor:function(e){return n(this.constructor,"relationshipsByName").get(e)},inverseFor:function(e){return this.constructor.inverseFor(e)}})});r("ember-data/system/relationships/has_many",["ember-data/system/model","exports"],function(e,r){"use strict";var t=e.Model;function i(e,r){if(typeof e==="object"){r=e;e=undefined}r=r||{};var t={type:e,isRelationship:true,options:r,kind:"hasMany",key:null};return Ember.computed(function(e){var r=this._relationships[e];return r.getRecords()}).meta(t).readOnly()}t.reopen({notifyHasManyAdded:function(e,r,t){var i=this._relationships[e];var a=i.manyArray;a.addRecord(r,t);this.notifyPropertyChange(e)},notifyHasManyRemoved:function(e,r){var t=this._relationships[e];var i=t.manyArray;i.removeRecord(r)}});r["default"]=i});r("ember-data/system/relationships/relationship",["ember-data/system/promise_proxies","exports"],function(e,r){"use strict";var t=e.PromiseArray;var i=e.PromiseObject;var a=function(e,r,t,i){this.members=new Ember.OrderedSet;this.store=e;this.key=i.key;this.inverseKey=t;this.record=r;this.key=i.key;this.isAsync=i.options.async;this.relationshipMeta=i};a.prototype={constructor:a,hasFetchedLink:false,destroy:Ember.K,clear:function(){this.members.forEach(function(e){this.removeRecord(e)},this)},removeRecords:function(e){var r=this;e.forEach(function(e){r.removeRecord(e)})},addRecords:function(e,r){var t=this;e.forEach(function(e){t.addRecord(e,r);if(r!==undefined){r++}})},addRecord:function(e,r){if(!this.members.has(e)){this.members.add(e);this.notifyRecordRelationshipAdded(e,r);if(this.inverseKey){e._relationships[this.inverseKey].addRecord(this.record)}this.record.updateRecordArrays()}},removeRecord:function(e){if(this.members.has(e)){this.members.remove(e);this.notifyRecordRelationshipRemoved(e);if(this.inverseKey){var r=e._relationships[this.inverseKey];if(r){r.removeRecord(this.record)}}this.record.updateRecordArrays()}},updateLink:function(e){if(e!==this.link){this.link=e;this.hasFetchedLink=false;this.record.notifyPropertyChange(this.key)}},updateRecordsFromAdapter:function(e){this.computeChanges(e)}};var n=function(e,r,t,i){this._super$constructor(e,r,t,i);this.belongsToType=i.type;this.manyArray=e.recordArrayManager.createManyArray(this.belongsToType,Ember.A());this.manyArray.relationship=this;this.isPolymorphic=i.options.polymorphic;this.manyArray.isPolymorphic=this.isPolymorphic};n.prototype=Object.create(a.prototype);n.prototype.constructor=n;n.prototype._super$constructor=a;n.prototype.destroy=function(){this.manyArray.destroy()};n.prototype.notifyRecordRelationshipAdded=function(e,r){this.record.notifyHasManyAdded(this.key,e,r)};n.prototype.notifyRecordRelationshipRemoved=function(e){this.record.notifyHasManyRemoved(this.key,e)};n.prototype.computeChanges=function(e){var r=this.members;e=o(e);r.forEach(function(r){if(e.has(r))return;this.removeRecord(r)},this);var t=this.manyArray;e.forEach(function(e,r){if(t.objectAt(r)===e)return;this.removeRecord(e);this.addRecord(e,r)},this)};n.prototype.getRecords=function(){if(this.isAsync){var e=this;var r;if(this.link&&!this.hasFetchedLink){r=this.store.findHasMany(this.record,this.link,this.relationshipMeta).then(function(r){e.updateRecordsFromAdapter(r);e.hasFetchedLink=true;e.manyArray.set("isLoaded",true);return e.manyArray})}else{var i=this.manyArray;r=this.store.findMany(i.toArray()).then(function(){e.manyArray.set("isLoaded",true);return i})}return t.create({promise:r})}else{this.manyArray.set("isLoaded",true);return this.manyArray}};var s=function(e,r,t,i){this._super$constructor(e,r,t,i);this.members.add(r);this.record=r;this.key=i.key;this.inverseKey=t;this.inverseRecord=null};s.prototype=Object.create(a.prototype);s.prototype.constructor=s;s.prototype._super$constructor=a;s.prototype.setRecord=function(e){if(e){this.addRecord(e)}else if(this.inverseRecord){this.removeRecord(this.inverseRecord)}};s.prototype._super$addRecord=a.prototype.addRecord;s.prototype.addRecord=function(e){if(this.members.has(e)){return}var r=this.relationshipMeta.type;if(this.inverseRecord&&this.inverseKey){this.removeRecord(this.inverseRecord)}this.inverseRecord=e;this._super$addRecord(e)};s.prototype.notifyRecordRelationshipAdded=function(e){this.record.notifyBelongsToAdded(this.key,this)};s.prototype.notifyRecordRelationshipRemoved=function(e){this.record.notifyBelongsToRemoved(this.key,this)};s.prototype._super$removeRecord=a.prototype.removeRecord;s.prototype.removeRecord=function(e){if(!this.members.has(e)){return}this._super$removeRecord(e);this.inverseRecord=null};s.prototype.currentOtherSideFor=function(){return this.inverseRecord};s.prototype.getRecord=function(){if(this.isAsync){var e;if(this.link&&!this.hasFetchedLink){var r=this;e=this.store.findBelongsTo(this.record,this.link,this.relationshipMeta).then(function(e){r.addRecord(e);r.hasFetchedLink=true;return e})}else if(this.inverseRecord){e=this.store._findByRecord(this.inverseRecord)}else{e=Ember.RSVP.Promise.resolve(null)}return i.create({promise:e})}else{return this.inverseRecord}};function o(e){var r=new Ember.OrderedSet;if(e){for(var t=0,i=e.length;t<i;t++){r.add(e[t])}}return r}var u=function(e,r,t){var i;var a=e.constructor.inverseFor(r.key);if(a){i=a.name}if(r.kind==="hasMany"){return new n(t,e,i,r)}else{return new s(t,e,i,r)}};r.Relationship=a;r.ManyRelationship=n;r.BelongsToRelationship=s;r.createRelationshipFor=u});r("ember-data/system/store",["ember-data/system/adapter","ember-inflector/system/string","ember-data/system/promise_proxies","exports"],function(e,r,i,a){"use strict";var n=e.InvalidError;var s=e.Adapter;var o=r.singularize;var u=i.promiseArray;var d=i.promiseObject;var l=Ember.get;var c=Ember.set;var f=Ember.run.once;var h=Ember.isNone;var p=Ember.EnumerableUtils.forEach;var m=Ember.EnumerableUtils.indexOf;var y=Ember.EnumerableUtils.map;var v=Ember.RSVP.Promise;var b=Ember.copy;var g,E,R;var A=Ember.String.camelize;function _(e){return e==null?null:e+""}g=Ember.Object.extend({init:function(){if(!E){E=t("ember-data/system/record_array_manager")["default"]}this.typeMaps={};this.recordArrayManager=E.create({store:this});this._pendingSave=[];this._pendingFetch=Ember.Map.create()},adapter:"-rest",serialize:function(e,r){return this.serializerFor(e.constructor.typeKey).serialize(e,r)},defaultAdapter:Ember.computed("adapter",function(){var e=l(this,"adapter");if(typeof e==="string"){e=this.container.lookup("adapter:"+e)||this.container.lookup("adapter:application")||this.container.lookup("adapter:-rest")}if(DS.Adapter.detect(e)){e=e.create({container:this.container})}return e}),createRecord:function(e,r){var t=this.modelFor(e);var i=b(r)||{};if(h(i.id)){i.id=this._generateId(t)}i.id=_(i.id);var a=this.buildRecord(t,i.id);a.loadedData();a.setProperties(i);return a},_generateId:function(e){var r=this.adapterFor(e);if(r&&r.generateIdForRecord){return r.generateIdForRecord(this)}return null},deleteRecord:function(e){e.deleteRecord()},unloadRecord:function(e){e.unloadRecord()},find:function(e,r,t){if(arguments.length===1){return this.findAll(e)}if(Ember.typeOf(r)==="object"){return this.findQuery(e,r)}return this.findById(e,_(r),t)},findById:function(e,r,t){var i=this.modelFor(e);var a=this.recordForId(i,r);return this._findByRecord(a,t)},_findByRecord:function(e,r){var t;if(r){e._preloadData(r)}if(l(e,"isEmpty")){t=this.scheduleFetch(e)}else if(l(e,"isLoading")){t=e._loadingPromise}return d(t||e,"DS: Store#findByRecord "+e.typeKey+" with id: "+l(e,"id"))},findByIds:function(e,r){var t=this;return u(Ember.RSVP.all(y(r,function(r){return t.findById(e,r)})).then(Ember.A,null,"DS: Store#findByIds of "+e+" complete"))},fetchRecord:function(e){var r=e.constructor;var t=l(e,"id");var i=this.adapterFor(r);var a=C(i,this,r,t,e);return a},scheduleFetchMany:function(e){return Ember.RSVP.all(y(e,this.scheduleFetch,this))},scheduleFetch:function(e){var r=e.constructor;if(h(e)){return null}if(e._loadingPromise){return e._loadingPromise
3
+ }var t=Ember.RSVP.defer("Fetching "+r+"with id: "+e.get("id"));var i={record:e,resolver:t};var a=t.promise;e.loadingData(a);if(!this._pendingFetch.get(r)){this._pendingFetch.set(r,[i])}else{this._pendingFetch.get(r).push(i)}Ember.run.scheduleOnce("afterRender",this,this.flushAllPendingFetches);return a},flushAllPendingFetches:function(){if(this.isDestroyed||this.isDestroying){return}this._pendingFetch.forEach(this._flushPendingFetchForType,this);this._pendingFetch=Ember.Map.create()},_flushPendingFetchForType:function(e,r){var t=this;var i=t.adapterFor(e);var a=!!i.findMany&&i.coalesceFindRequests;var n=Ember.A(r).mapBy("record");function s(e){e.resolver.resolve(t.fetchRecord(e.record))}function o(e){p(e,function(e){var t=Ember.A(r).findBy("record",e);if(t){var i=t.resolver;i.resolve(e)}})}function u(e){return function r(t){var i=e.without(t);l(i)}}function d(e){return function(r){l(e,r)}}function l(e,t){p(e,function(e){var i=Ember.A(r).findBy("record",e);if(i){var a=i.resolver;a.reject(t)}})}if(r.length===1){s(r[0])}else if(a){var c=i.groupRecordsForFindMany(this,n);p(c,function(a){var n=Ember.A(a);var l=n.mapBy("id");if(l.length>1){w(i,t,e,l,n).then(o).then(u(n)).then(null,d(n))}else if(l.length===1){var c=Ember.A(r).findBy("record",a[0]);s(c)}else{}})}else{p(r,s)}},getById:function(e,r){if(this.hasRecordForId(e,r)){return this.recordForId(e,r)}else{return null}},reloadRecord:function(e){var r=e.constructor;var t=this.adapterFor(r);var i=l(e,"id");return this.scheduleFetch(e)},hasRecordForId:function(e,r){var t=this.modelFor(e);var i=_(r);return!!this.typeMapFor(t).idToRecord[i]},recordForId:function(e,r){var t=this.modelFor(e);var i=_(r);var a=this.typeMapFor(t).idToRecord;var n=a[i];if(!n||!a[i]){n=this.buildRecord(t,i)}return n},findMany:function(e){var r=this;return v.all(y(e,function(e){return r._findByRecord(e)}))},findHasMany:function(e,r,t){var i=this.adapterFor(e.constructor);return $(i,this,e,r,t)},findBelongsTo:function(e,r,t){var i=this.adapterFor(e.constructor);return I(i,this,e,r,t)},findQuery:function(e,r){var t=this.modelFor(e);var i=this.recordArrayManager.createAdapterPopulatedRecordArray(t,r);var a=this.adapterFor(t);return u(j(a,this,t,r,i))},findAll:function(e){var r=this.modelFor(e);return this.fetchAll(r,this.all(r))},fetchAll:function(e,r){var t=this.adapterFor(e);var i=this.typeMapFor(e).metadata.since;c(r,"isUpdating",true);return u(L(t,this,e,i))},didUpdateAll:function(e){var r=this.typeMapFor(e).findAllCache;c(r,"isUpdating",false)},all:function(e){var r=this.modelFor(e);var t=this.typeMapFor(r);var i=t.findAllCache;if(i){return i}var a=this.recordArrayManager.createRecordArray(r);t.findAllCache=a;return a},unloadAll:function(e){var r=this.modelFor(e);var t=this.typeMapFor(r);var i=t.records.slice();var a;for(var n=0;n<i.length;n++){a=i[n];a.unloadRecord();a.destroy()}t.findAllCache=null},filter:function(e,r,t){var i;var a=arguments.length;var n;var s=a===3;if(s){i=this.findQuery(e,r)}else if(arguments.length===2){t=r}e=this.modelFor(e);if(s){n=this.recordArrayManager.createFilteredRecordArray(e,t,r)}else{n=this.recordArrayManager.createFilteredRecordArray(e,t)}i=i||v.cast(n);return u(i.then(function(){return n},null,"DS: Store#filter of "+e))},recordIsLoaded:function(e,r){if(!this.hasRecordForId(e,r)){return false}return!l(this.recordForId(e,r),"isEmpty")},metadataFor:function(e){e=this.modelFor(e);return this.typeMapFor(e).metadata},dataWasUpdated:function(e,r){this.recordArrayManager.recordDidChange(r)},scheduleSave:function(e,r){e.adapterWillCommit();this._pendingSave.push([e,r]);f(this,"flushPendingSave")},flushPendingSave:function(){var e=this._pendingSave.slice();this._pendingSave=[];p(e,function(e){var r=e[0],t=e[1];var i=this.adapterFor(r.constructor);var a;if(l(r,"currentState.stateName")==="root.deleted.saved"){return t.resolve(r)}else if(l(r,"isNew")){a="createRecord"}else if(l(r,"isDeleted")){a="deleteRecord"}else{a="updateRecord"}t.resolve(K(i,this,a,r))},this)},didSaveRecord:function(e,r){if(r){r=F(this,e.constructor,r,e);B(this,e,r);this.updateId(e,r)}e.adapterDidCommit(r)},recordWasInvalid:function(e,r){e.adapterDidInvalidate(r)},recordWasError:function(e){e.adapterDidError()},updateId:function(e,r){var t=l(e,"id");var i=_(r.id);this.typeMapFor(e.constructor).idToRecord[i]=e;c(e,"id",i)},typeMapFor:function(e){var r=l(this,"typeMaps");var t=Ember.guidFor(e);var i;i=r[t];if(i){return i}i={idToRecord:Object.create(null),records:[],metadata:Object.create(null),type:e};r[t]=i;return i},_load:function(e,r,t){var i=_(r.id);var a=this.recordForId(e,i);a.setupData(r,t);this.recordArrayManager.recordDidChange(a);return a},modelFor:function(e){var r;if(typeof e==="string"){r=this.container.lookupFactory("model:"+e);if(!r){throw new Ember.Error("No model was found for '"+e+"'")}r.typeKey=r.typeKey||this._normalizeTypeKey(e)}else{r=e;if(r.typeKey){r.typeKey=this._normalizeTypeKey(r.typeKey)}}r.store=this;return r},push:function(e,r,t){var i=this.modelFor(e);r=F(this,i,r);this._load(i,r,t);var a=this.recordForId(i,r.id);B(this,a,r);return a},pushPayload:function(e,r){var t;var i;if(!r){i=e;t=k(this.container)}else{i=r;t=this.serializerFor(e)}t.pushPayload(this,i)},normalize:function(e,r){var t=this.serializerFor(e);var i=this.modelFor(e);return t.normalize(i,r)},update:function(e,r){return this.push(e,r,true)},pushMany:function(e,r){var t=r.length;var i=new Array(t);for(var a=0;a<t;a++){i[a]=this.push(e,r[a])}return i},metaForType:function(e,r){var t=this.modelFor(e);Ember.merge(this.typeMapFor(t).metadata,r)},buildRecord:function(e,r,t){var i=this.typeMapFor(e);var a=i.idToRecord;var n=e._create({id:r,store:this,container:this.container});if(t){n.setupData(t)}if(r){a[r]=n}i.records.push(n);return n},dematerializeRecord:function(e){var r=e.constructor;var t=this.typeMapFor(r);var i=l(e,"id");e.updateRecordArrays();if(i){delete t.idToRecord[i]}var a=m(t.records,e);t.records.splice(a,1)},adapterFor:function(e){var r=this.container,t;if(r){t=r.lookup("adapter:"+e.typeKey)||r.lookup("adapter:application")}return t||l(this,"defaultAdapter")},serializerFor:function(e){e=this.modelFor(e);var r=this.adapterFor(e);return S(this.container,e.typeKey,r&&r.defaultSerializer)},willDestroy:function(){var e=this.typeMaps;var r=Ember.keys(e);var t=y(r,i);this.recordArrayManager.destroy();p(t,this.unloadAll,this);function i(r){return e[r]["type"]}},_normalizeTypeKey:function(e){return A(o(e))}});function F(e,r,t,i){r.eachRelationship(function(r,i){var a=i.kind;var n=t[r];if(a==="belongsTo"){z(e,t,r,i,n)}else if(a==="hasMany"){T(e,t,r,i,n)}});return t}function z(e,r,i,a,n){if(!R){R=t("ember-data/system/model")["Model"]}if(h(n)||n instanceof R){return}var s;if(typeof n==="number"||typeof n==="string"){s=x(a,i,r);r[i]=e.recordForId(s,n)}else if(typeof n==="object"){r[i]=e.recordForId(n.type,n.id)}}function x(e,r,t){if(e.options.polymorphic){return t[r+"Type"]}else{return e.type}}function T(e,r,t,i,a){if(!Ember.isArray(a)){return}for(var n=0,s=a.length;n<s;n++){z(e,a,n,i,a[n])}}function S(e,r,t){return e.lookup("serializer:"+r)||e.lookup("serializer:application")||e.lookup("serializer:"+t)||e.lookup("serializer:-default")}function k(e){return e.lookup("serializer:application")||e.lookup("serializer:-default")}function M(e,r){var t=e.serializer;var i=e.defaultSerializer;var a=e.container;if(a&&t===undefined){t=S(a,r.typeKey,i)}if(t===null||t===undefined){t={extract:function(e,r,t){return t}}}return t}function D(e){return!(l(e,"isDestroyed")||l(e,"isDestroying"))}function P(e,r){var t=e["finally"](function(){if(!r()){t._subscribers.length=0}});return t}function O(e){var r=Array.prototype.slice.call(arguments,1);return function(){return e.apply(undefined,r)}}function C(e,r,t,i,a){var n=e.find(r,t,i,a);var s=M(e,t);var o="DS: Handle Adapter#find of "+t+" with id: "+i;n=v.cast(n,o);n=P(n,O(D,r));return n.then(function(e){var a=s.extract(r,t,e,i,"find");return r.push(t,a)},function(e){var a=r.getById(t,i);if(a){a.notFound()}throw e},"DS: Extract payload of '"+t+"'")}function w(e,r,t,i,a){var n=e.findMany(r,t,i,a);var s=M(e,t);var o="DS: Handle Adapter#findMany of "+t;if(n===undefined){throw new Error("adapter.findMany returned undefined, this was very likely a mistake")}n=v.cast(n,o);n=P(n,O(D,r));return n.then(function(e){var i=s.extract(r,t,e,null,"findMany");return r.pushMany(t,i)},null,"DS: Extract payload of "+t)}function $(e,r,t,i,a){var n=e.findHasMany(r,t,i,a);var s=M(e,a.type);var o="DS: Handle Adapter#findHasMany of "+t+" : "+a.type;n=v.cast(n,o);n=P(n,O(D,r));n=P(n,O(D,t));return n.then(function(e){var t=s.extract(r,a.type,e,null,"findHasMany");var i=r.pushMany(a.type,t);return i},null,"DS: Extract payload of "+t+" : hasMany "+a.type)}function I(e,r,t,i,a){var n=e.findBelongsTo(r,t,i,a);var s=M(e,a.type);var o="DS: Handle Adapter#findBelongsTo of "+t+" : "+a.type;n=v.cast(n,o);n=P(n,O(D,r));n=P(n,O(D,t));return n.then(function(e){var t=s.extract(r,a.type,e,null,"findBelongsTo");var i=r.push(a.type,t);return i},null,"DS: Extract payload of "+t+" : "+a.type)}function L(e,r,t,i){var a=e.findAll(r,t,i);var n=M(e,t);var s="DS: Handle Adapter#findAll of "+t;a=v.cast(a,s);a=P(a,O(D,r));return a.then(function(e){var i=n.extract(r,t,e,null,"findAll");r.pushMany(t,i);r.didUpdateAll(t);return r.all(t)},null,"DS: Extract payload of findAll "+t)}function j(e,r,t,i,a){var n=e.findQuery(r,t,i,a);var s=M(e,t);var o="DS: Handle Adapter#findQuery of "+t;n=v.cast(n,o);n=P(n,O(D,r));return n.then(function(e){var i=s.extract(r,t,e,null,"findQuery");a.load(i);return a},null,"DS: Extract payload of findQuery "+t)}function K(e,r,t,i){var a=i.constructor;var s=e[t](r,a,i);var o=M(e,a);var u="DS: Extract and notify about "+t+" completion of "+i;s=v.cast(s,u);s=P(s,O(D,r));s=P(s,O(D,i));return s.then(function(e){var n;if(e){n=o.extract(r,a,e,l(i,"id"),t)}else{n=e}r.didSaveRecord(i,n);return i},function(e){if(e instanceof n){r.recordWasInvalid(i,e.errors)}else{r.recordWasError(i,e)}throw e},u)}function B(e,r,t){var i=r.constructor;i.eachRelationship(function(e,i){var a=i.kind;var n=t[e];var s=r._relationships[e];if(t.links&&t.links[e]){s.updateLink(t.links[e])}if(a==="belongsTo"){if(n===undefined){return}s.setRecord(n)}else if(a==="hasMany"&&n){s.updateRecordsFromAdapter(n)}})}a.Store=g;a["default"]=g});r("ember-data/transforms",["ember-data/transforms/base","ember-data/transforms/number","ember-data/transforms/date","ember-data/transforms/string","ember-data/transforms/boolean","exports"],function(e,r,t,i,a,n){"use strict";var s=e["default"];var o=r["default"];var u=t["default"];var d=i["default"];var l=a["default"];n.Transform=s;n.NumberTransform=o;n.DateTransform=u;n.StringTransform=d;n.BooleanTransform=l});r("ember-data/transforms/base",["exports"],function(e){"use strict";e["default"]=Ember.Object.extend({serialize:Ember.required(),deserialize:Ember.required()})});r("ember-data/transforms/boolean",["ember-data/transforms/base","exports"],function(e,r){"use strict";var t=e["default"];r["default"]=t.extend({deserialize:function(e){var r=typeof e;if(r==="boolean"){return e}else if(r==="string"){return e.match(/^true$|^t$|^1$/i)!==null}else if(r==="number"){return e===1}else{return false}},serialize:function(e){return Boolean(e)}})});r("ember-data/transforms/date",["ember-data/transforms/base","exports"],function(e,r){"use strict";var t=e["default"];var i=Date.prototype.toISOString||function(){function e(e){if(e<10){return"0"+e}return e}return this.getUTCFullYear()+"-"+e(this.getUTCMonth()+1)+"-"+e(this.getUTCDate())+"T"+e(this.getUTCHours())+":"+e(this.getUTCMinutes())+":"+e(this.getUTCSeconds())+"."+(this.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5)+"Z"};if(Ember.SHIM_ES5){if(!Date.prototype.toISOString){Date.prototype.toISOString=i}}r["default"]=t.extend({deserialize:function(e){var r=typeof e;if(r==="string"){return new Date(Ember.Date.parse(e))}else if(r==="number"){return new Date(e)}else if(e===null||e===undefined){return e}else{return null}},serialize:function(e){if(e instanceof Date){return i.call(e)}else{return null}}})});r("ember-data/transforms/number",["ember-data/transforms/base","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.isEmpty;r["default"]=t.extend({deserialize:function(e){return i(e)?null:Number(e)},serialize:function(e){return i(e)?null:Number(e)}})});r("ember-data/transforms/string",["ember-data/transforms/base","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.isNone;r["default"]=t.extend({deserialize:function(e){return i(e)?null:String(e)},serialize:function(e){return i(e)?null:String(e)}})});r("ember-inflector",["./system","./helpers","./ext/string","exports"],function(e,r,t,i){"use strict";var a=e.Inflector;var n=e.defaultRules;var s=e.pluralize;var o=e.singularize;a.defaultRules=n;Ember.Inflector=a;Ember.String.pluralize=s;Ember.String.singularize=o;i["default"]=a;i.pluralize=s;i.singularize=o});r("ember-inflector/ext/string",["../system/string"],function(e){"use strict";var r=e.pluralize;var t=e.singularize;if(Ember.EXTEND_PROTOTYPES===true||Ember.EXTEND_PROTOTYPES.String){String.prototype.pluralize=function(){return r(this)};String.prototype.singularize=function(){return t(this)}}});r("ember-inflector/helpers",["./system/string"],function(e){"use strict";var r=e.singularize;var t=e.pluralize;Ember.Handlebars.helper("singularize",r);Ember.Handlebars.helper("pluralize",t)});r("ember-inflector/system",["./system/inflector","./system/string","./system/inflections","exports"],function(e,r,t,i){"use strict";var a=e["default"];var n=r.pluralize;var s=r.singularize;var o=t["default"];a.inflector=new a(o);i.Inflector=a;i.singularize=s;i.pluralize=n;i.defaultRules=o});r("ember-inflector/system/inflections",["exports"],function(e){"use strict";e["default"]={plurals:[[/$/,"s"],[/s$/i,"s"],[/^(ax|test)is$/i,"$1es"],[/(octop|vir)us$/i,"$1i"],[/(octop|vir)i$/i,"$1i"],[/(alias|status)$/i,"$1es"],[/(bu)s$/i,"$1ses"],[/(buffal|tomat)o$/i,"$1oes"],[/([ti])um$/i,"$1a"],[/([ti])a$/i,"$1a"],[/sis$/i,"ses"],[/(?:([^f])fe|([lr])f)$/i,"$1$2ves"],[/(hive)$/i,"$1s"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/(x|ch|ss|sh)$/i,"$1es"],[/(matr|vert|ind)(?:ix|ex)$/i,"$1ices"],[/^(m|l)ouse$/i,"$1ice"],[/^(m|l)ice$/i,"$1ice"],[/^(ox)$/i,"$1en"],[/^(oxen)$/i,"$1"],[/(quiz)$/i,"$1zes"]],singular:[[/s$/i,""],[/(ss)$/i,"$1"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)(sis|ses)$/i,"$1sis"],[/(^analy)(sis|ses)$/i,"$1sis"],[/([^f])ves$/i,"$1fe"],[/(hive)s$/i,"$1"],[/(tive)s$/i,"$1"],[/([lr])ves$/i,"$1f"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/(x|ch|ss|sh)es$/i,"$1"],[/^(m|l)ice$/i,"$1ouse"],[/(bus)(es)?$/i,"$1"],[/(o)es$/i,"$1"],[/(shoe)s$/i,"$1"],[/(cris|test)(is|es)$/i,"$1is"],[/^(a)x[ie]s$/i,"$1xis"],[/(octop|vir)(us|i)$/i,"$1us"],[/(alias|status)(es)?$/i,"$1"],[/^(ox)en/i,"$1"],[/(vert|ind)ices$/i,"$1ex"],[/(matr)ices$/i,"$1ix"],[/(quiz)zes$/i,"$1"],[/(database)s$/i,"$1"]],irregularPairs:[["person","people"],["man","men"],["child","children"],["sex","sexes"],["move","moves"],["cow","kine"],["zombie","zombies"]],uncountable:["equipment","information","rice","money","species","series","fish","sheep","jeans","police"]}});r("ember-inflector/system/inflector",["exports"],function(e){"use strict";var r=/^\s*$/;var t=/(\w+[_-])([a-z\d]+$)/;var i=/(\w+)([A-Z][a-z\d]*$)/;var a=/[A-Z][a-z\d]*$/;function n(e,r){for(var t=0,i=r.length;t<i;t++){e.uncountable[r[t].toLowerCase()]=true}}function s(e,r){var t;for(var i=0,a=r.length;i<a;i++){t=r[i];e.irregular[t[0].toLowerCase()]=t[1];e.irregular[t[1].toLowerCase()]=t[1];e.irregularInverse[t[1].toLowerCase()]=t[0];e.irregularInverse[t[0].toLowerCase()]=t[0]}}function o(e){e=e||{};e.uncountable=e.uncountable||u();e.irregularPairs=e.irregularPairs||u();var r=this.rules={plurals:e.plurals||[],singular:e.singular||[],irregular:u(),irregularInverse:u(),uncountable:u()};n(r,e.uncountable);s(r,e.irregularPairs);this.enableCache()}if(!Object.create&&!Object.create(null).hasOwnProperty){throw new Error("This browser does not support Object.create(null), please polyfil with es5-sham: http://git.io/yBU2rg")}function u(){var e=Object.create(null);e["_dict"]=null;delete e["_dict"];return e}o.prototype={enableCache:function(){this.purgeCache();this.singularize=function(e){this._cacheUsed=true;return this._sCache[e]||(this._sCache[e]=this._singularize(e))};this.pluralize=function(e){this._cacheUsed=true;return this._pCache[e]||(this._pCache[e]=this._pluralize(e))}},purgeCache:function(){this._cacheUsed=false;this._sCache=u();this._pCache=u()},disableCache:function(){this._sCache=null;this._pCache=null;this.singularize=function(e){return this._singularize(e)};this.pluralize=function(e){return this._pluralize(e)}},plural:function(e,r){if(this._cacheUsed){this.purgeCache()}this.rules.plurals.push([e,r.toLowerCase()])},singular:function(e,r){if(this._cacheUsed){this.purgeCache()}this.rules.singular.push([e,r.toLowerCase()])},uncountable:function(e){if(this._cacheUsed){this.purgeCache()}n(this.rules,[e.toLowerCase()])},irregular:function(e,r){if(this._cacheUsed){this.purgeCache()}s(this.rules,[[e,r]])},pluralize:function(e){return this._pluralize(e)},_pluralize:function(e){return this.inflect(e,this.rules.plurals,this.rules.irregular)},singularize:function(e){return this._singularize(e)},_singularize:function(e){return this.inflect(e,this.rules.singular,this.rules.irregularInverse)},inflect:function(e,n,s){var o,u,d,l,c,f,h,p,m,y,v,b,g;p=r.test(e);m=a.test(e);f="";if(p){return e}l=e.toLowerCase();c=t.exec(e)||i.exec(e);if(c){f=c[1];h=c[2].toLowerCase()}y=this.rules.uncountable[l]||this.rules.uncountable[h];if(y){return e}v=s&&(s[l]||s[h]);if(v){if(s[l]){return v}else{v=m?v.capitalize():v;return f+v}}for(var E=n.length,R=0;E>R;E--){o=n[E-1];g=o[0];if(g.test(e)){break}}o=o||[];g=o[0];u=o[1];d=e.replace(g,u);return d}};e["default"]=o});r("ember-inflector/system/string",["./inflector","exports"],function(e,r){"use strict";var t=e["default"];function i(e){return t.inflector.pluralize(e)}function a(e){return t.inflector.singularize(e)}r.pluralize=i;r.singularize=a});e.DS=t("ember-data")["default"]})(this);
@@ -38,13 +38,12 @@ define("activemodel-adapter/system",
38
38
  __exports__.ActiveModelSerializer = ActiveModelSerializer;
39
39
  });
40
40
  define("activemodel-adapter/system/active_model_adapter",
41
- ["ember-data/adapters","ember-data/system/adapter","ember-inflector","activemodel-adapter/system/active_model_serializer","exports"],
42
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
41
+ ["ember-data/adapters","ember-data/system/adapter","ember-inflector","exports"],
42
+ function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
43
43
  "use strict";
44
44
  var RESTAdapter = __dependency1__.RESTAdapter;
45
45
  var InvalidError = __dependency2__.InvalidError;
46
46
  var pluralize = __dependency3__.pluralize;
47
- var ActiveModelSerializer = __dependency4__["default"];
48
47
 
49
48
  /**
50
49
  @module ember-data
@@ -503,8 +502,8 @@ define("activemodel-adapter/system/active_model_serializer",
503
502
  __exports__["default"] = ActiveModelSerializer;
504
503
  });
505
504
  define("ember-data",
506
- ["ember-data/core","ember-data/ext/date","ember-data/system/store","ember-data/system/model","ember-data/system/changes","ember-data/system/adapter","ember-data/system/debug","ember-data/system/record_arrays","ember-data/system/record_array_manager","ember-data/adapters","ember-data/serializers/json_serializer","ember-data/serializers/rest_serializer","ember-inflector","ember-data/serializers/embedded_records_mixin","activemodel-adapter","ember-data/transforms","ember-data/system/relationships","ember-data/ember-initializer","ember-data/setup-container","ember-data/system/container_proxy","exports"],
507
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __dependency16__, __dependency17__, __dependency18__, __dependency19__, __dependency20__, __exports__) {
505
+ ["ember-data/core","ember-data/ext/date","ember-data/system/promise_proxies","ember-data/system/store","ember-data/system/model","ember-data/system/adapter","ember-data/system/debug","ember-data/system/record_arrays","ember-data/system/record_array_manager","ember-data/adapters","ember-data/serializers/json_serializer","ember-data/serializers/rest_serializer","ember-inflector","ember-data/serializers/embedded_records_mixin","activemodel-adapter","ember-data/transforms","ember-data/system/relationships","ember-data/ember-initializer","ember-data/setup-container","ember-data/system/container_proxy","ember-data/system/relationships/relationship","exports"],
506
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __dependency16__, __dependency17__, __dependency18__, __dependency19__, __dependency20__, __dependency21__, __exports__) {
508
507
  "use strict";
509
508
  /**
510
509
  Ember Data
@@ -518,21 +517,13 @@ define("ember-data",
518
517
 
519
518
  var DS = __dependency1__["default"];
520
519
 
521
- var Store = __dependency3__.Store;
522
520
  var PromiseArray = __dependency3__.PromiseArray;
523
521
  var PromiseObject = __dependency3__.PromiseObject;
524
- var Model = __dependency4__.Model;
525
- var Errors = __dependency4__.Errors;
526
- var RootState = __dependency4__.RootState;
527
- var attr = __dependency4__.attr;
528
- var AttributeChange = __dependency5__.AttributeChange;
529
- var RelationshipChange = __dependency5__.RelationshipChange;
530
- var RelationshipChangeAdd = __dependency5__.RelationshipChangeAdd;
531
- var RelationshipChangeRemove = __dependency5__.RelationshipChangeRemove;
532
- var OneToManyChange = __dependency5__.OneToManyChange;
533
- var ManyToNoneChange = __dependency5__.ManyToNoneChange;
534
- var OneToOneChange = __dependency5__.OneToOneChange;
535
- var ManyToManyChange = __dependency5__.ManyToManyChange;
522
+ var Store = __dependency4__.Store;
523
+ var Model = __dependency5__.Model;
524
+ var Errors = __dependency5__.Errors;
525
+ var RootState = __dependency5__.RootState;
526
+ var attr = __dependency5__.attr;
536
527
  var InvalidError = __dependency6__.InvalidError;
537
528
  var Adapter = __dependency6__.Adapter;
538
529
  var DebugAdapter = __dependency7__["default"];
@@ -560,6 +551,7 @@ define("ember-data",
560
551
  var setupContainer = __dependency19__["default"];
561
552
 
562
553
  var ContainerProxy = __dependency20__["default"];
554
+ var Relationship = __dependency21__.Relationship;
563
555
 
564
556
  DS.Store = Store;
565
557
  DS.PromiseArray = PromiseArray;
@@ -570,14 +562,6 @@ define("ember-data",
570
562
  DS.attr = attr;
571
563
  DS.Errors = Errors;
572
564
 
573
- DS.AttributeChange = AttributeChange;
574
- DS.RelationshipChange = RelationshipChange;
575
- DS.RelationshipChangeAdd = RelationshipChangeAdd;
576
- DS.OneToManyChange = OneToManyChange;
577
- DS.ManyToNoneChange = OneToManyChange;
578
- DS.OneToOneChange = OneToOneChange;
579
- DS.ManyToManyChange = ManyToManyChange;
580
-
581
565
  DS.Adapter = Adapter;
582
566
  DS.InvalidError = InvalidError;
583
567
 
@@ -609,6 +593,8 @@ define("ember-data",
609
593
  DS.belongsTo = belongsTo;
610
594
  DS.hasMany = hasMany;
611
595
 
596
+ DS.Relationship = Relationship;
597
+
612
598
  DS.ContainerProxy = ContainerProxy;
613
599
 
614
600
  DS._setupContainer = setupContainer;
@@ -960,15 +946,16 @@ define("ember-data/adapters/fixture_adapter",
960
946
  var adapter = this;
961
947
 
962
948
  return new Ember.RSVP.Promise(function(resolve) {
949
+ var value = Ember.copy(callback.call(context), true);
963
950
  if (get(adapter, 'simulateRemoteResponse')) {
964
951
  // Schedule with setTimeout
965
952
  Ember.run.later(function() {
966
- resolve(callback.call(context));
953
+ resolve(value);
967
954
  }, get(adapter, 'latency'));
968
955
  } else {
969
956
  // Asynchronous, but at the of the runloop with zero latency
970
957
  Ember.run.schedule('actions', null, function() {
971
- resolve(callback.call(context));
958
+ resolve(value);
972
959
  });
973
960
  }
974
961
  }, "DS: FixtureAdapter#simulateRemoteCall");
@@ -983,7 +970,8 @@ define("ember-data/adapters/rest_adapter",
983
970
  @module ember-data
984
971
  */
985
972
 
986
- var Adapter = __dependency1__["default"];
973
+ var Adapter = __dependency1__.Adapter;
974
+ var InvalidError = __dependency1__.InvalidError;
987
975
  var get = Ember.get;
988
976
  var forEach = Ember.ArrayPolyfills.forEach;
989
977
 
@@ -1370,7 +1358,7 @@ define("ember-data/adapters/rest_adapter",
1370
1358
  @param {String} url
1371
1359
  @return {Promise} promise
1372
1360
  */
1373
- findHasMany: function(store, record, url) {
1361
+ findHasMany: function(store, record, url, relationship) {
1374
1362
  var host = get(this, 'host');
1375
1363
  var id = get(record, 'id');
1376
1364
  var type = record.constructor.typeKey;
@@ -1409,7 +1397,7 @@ define("ember-data/adapters/rest_adapter",
1409
1397
  @param {String} url
1410
1398
  @return {Promise} promise
1411
1399
  */
1412
- findBelongsTo: function(store, record, url) {
1400
+ findBelongsTo: function(store, record, url, relationship) {
1413
1401
  var id = get(record, 'id');
1414
1402
  var type = record.constructor.typeKey;
1415
1403
 
@@ -1700,9 +1688,10 @@ define("ember-data/adapters/rest_adapter",
1700
1688
 
1701
1689
  @method ajaxError
1702
1690
  @param {Object} jqXHR
1691
+ @param {Object} responseText
1703
1692
  @return {Object} jqXHR
1704
1693
  */
1705
- ajaxError: function(jqXHR) {
1694
+ ajaxError: function(jqXHR, responseText) {
1706
1695
  if (jqXHR && typeof jqXHR === 'object') {
1707
1696
  jqXHR.then = null;
1708
1697
  }
@@ -1710,6 +1699,32 @@ define("ember-data/adapters/rest_adapter",
1710
1699
  return jqXHR;
1711
1700
  },
1712
1701
 
1702
+ /**
1703
+ Takes an ajax response, and returns the json payload.
1704
+
1705
+ By default this hook just returns the jsonPayload passed to it.
1706
+ You might want to override it in two cases:
1707
+
1708
+ 1. Your API might return useful results in the request headers.
1709
+ If you need to access these, you can override this hook to copy them
1710
+ from jqXHR to the payload object so they can be processed in you serializer.
1711
+
1712
+
1713
+ 2. Your API might return errors as successful responses with status code
1714
+ 200 and an Errors text or object. You can return a DS.InvalidError from
1715
+ this hook and it will automatically reject the promise and put your record
1716
+ into the invald state.
1717
+
1718
+ @method ajaxError
1719
+ @param {Object} jqXHR
1720
+ @param {Object} jsonPayload
1721
+ @return {Object} jqXHR
1722
+ */
1723
+
1724
+ ajaxSuccess: function(jqXHR, jsonPayload) {
1725
+ return jsonPayload;
1726
+ },
1727
+
1713
1728
  /**
1714
1729
  Takes a URL, an HTTP method and a hash of data, and makes an
1715
1730
  HTTP request.
@@ -1740,12 +1755,17 @@ define("ember-data/adapters/rest_adapter",
1740
1755
  return new Ember.RSVP.Promise(function(resolve, reject) {
1741
1756
  var hash = adapter.ajaxOptions(url, type, options);
1742
1757
 
1743
- hash.success = function(json) {
1744
- Ember.run(null, resolve, json);
1758
+ hash.success = function(json, textStatus, jqXHR) {
1759
+ json = adapter.ajaxSuccess(jqXHR, json);
1760
+ if (json instanceof InvalidError) {
1761
+ Ember.run(null, reject, json);
1762
+ } else {
1763
+ Ember.run(null, resolve, json);
1764
+ }
1745
1765
  };
1746
1766
 
1747
1767
  hash.error = function(jqXHR, textStatus, errorThrown) {
1748
- Ember.run(null, reject, adapter.ajaxError(jqXHR));
1768
+ Ember.run(null, reject, adapter.ajaxError(jqXHR, jqXHR.responseText));
1749
1769
  };
1750
1770
 
1751
1771
  Ember.$.ajax(hash);
@@ -1813,11 +1833,11 @@ define("ember-data/core",
1813
1833
  /**
1814
1834
  @property VERSION
1815
1835
  @type String
1816
- @default '1.0.0-beta.9'
1836
+ @default '1.0.0-beta.10'
1817
1837
  @static
1818
1838
  */
1819
1839
  DS = Ember.Namespace.create({
1820
- VERSION: '1.0.0-beta.9'
1840
+ VERSION: '1.0.0-beta.10'
1821
1841
  });
1822
1842
 
1823
1843
  if (Ember.libraries) {
@@ -2088,15 +2108,13 @@ define("ember-data/serializers",
2088
2108
  __exports__.RESTSerializer = RESTSerializer;
2089
2109
  });
2090
2110
  define("ember-data/serializers/embedded_records_mixin",
2091
- ["ember-inflector","exports"],
2092
- function(__dependency1__, __exports__) {
2111
+ ["exports"],
2112
+ function(__exports__) {
2093
2113
  "use strict";
2094
2114
  var get = Ember.get;
2095
2115
  var forEach = Ember.EnumerableUtils.forEach;
2096
2116
  var camelize = Ember.String.camelize;
2097
2117
 
2098
- var pluralize = __dependency1__.pluralize;
2099
-
2100
2118
  /**
2101
2119
  ## Using Embedded Records
2102
2120
 
@@ -2115,6 +2133,11 @@ define("ember-data/serializers/embedded_records_mixin",
2115
2133
  }
2116
2134
  })
2117
2135
  ```
2136
+ Note that this use of `{embedded: 'always'}` is unrelated to
2137
+ the `{embedded: 'always'}` that is defined as an option on `DS.attr` as part of
2138
+ defining a model while working with the ActiveModelSerializer. Nevertheless,
2139
+ using `{embedded: 'always'}` as an option to DS.attr is not a valid way to setup
2140
+ embedded records.
2118
2141
 
2119
2142
  The `attrs` option for a resource `{embedded: 'always'}` is shorthand for:
2120
2143
 
@@ -2148,7 +2171,11 @@ define("ember-data/serializers/embedded_records_mixin",
2148
2171
 
2149
2172
  ### Model Relationships
2150
2173
 
2151
- Embedded records must have a model defined to be extracted and serialized.
2174
+ Embedded records must have a model defined to be extracted and serialized. Note that
2175
+ when defining any relationships on your model such as `belongsTo` and `hasMany`, you
2176
+ should not both specify `async:true` and also indicate through the serializer's
2177
+ `attrs` attribute that the related model should be embedded. If a model is
2178
+ declared embedded, then do not use `async:true`.
2152
2179
 
2153
2180
  To successfully extract and serialize embedded records the model relationships
2154
2181
  must be setup correcty See the
@@ -2160,9 +2187,9 @@ define("ember-data/serializers/embedded_records_mixin",
2160
2187
 
2161
2188
  ### Example JSON payloads, Models and Serializers
2162
2189
 
2163
- **When customizing a serializer it is imporant to grok what the cusomizations
2164
- are, please read the docs for the methods this mixin provides, in case you need
2165
- to modify to fit your specific needs.**
2190
+ **When customizing a serializer it is important to grok what the customizations
2191
+ are. Please read the docs for the methods this mixin provides, in case you need
2192
+ to modify it to fit your specific needs.**
2166
2193
 
2167
2194
  For example review the docs for each method of this mixin:
2168
2195
  * [normalize](/api/data/classes/DS.EmbeddedRecordsMixin.html#method_normalize)
@@ -2265,7 +2292,6 @@ define("ember-data/serializers/embedded_records_mixin",
2265
2292
  */
2266
2293
  serializeBelongsTo: function(record, json, relationship) {
2267
2294
  var attr = relationship.key;
2268
- var attrs = this.get('attrs');
2269
2295
  if (this.noSerializeOptionSpecified(attr)) {
2270
2296
  this._super(record, json, relationship);
2271
2297
  return;
@@ -2375,7 +2401,6 @@ define("ember-data/serializers/embedded_records_mixin",
2375
2401
  */
2376
2402
  serializeHasMany: function(record, json, relationship) {
2377
2403
  var attr = relationship.key;
2378
- var attrs = this.get('attrs');
2379
2404
  if (this.noSerializeOptionSpecified(attr)) {
2380
2405
  this._super(record, json, relationship);
2381
2406
  return;
@@ -2450,8 +2475,6 @@ define("ember-data/serializers/embedded_records_mixin",
2450
2475
  // checks config for attrs option to serialize records
2451
2476
  noSerializeOptionSpecified: function(attr) {
2452
2477
  var option = this.attrsOption(attr);
2453
- var serializeRecords = this.hasSerializeRecordsOption(attr);
2454
- var serializeIds = this.hasSerializeIdsOption(attr);
2455
2478
  return !(option && (option.serialize || option.embedded));
2456
2479
  },
2457
2480
 
@@ -2478,7 +2501,12 @@ define("ember-data/serializers/embedded_records_mixin",
2478
2501
  if (serializer.hasDeserializeRecordsOption(key)) {
2479
2502
  var embeddedType = store.modelFor(relationship.type.typeKey);
2480
2503
  if (relationship.kind === "hasMany") {
2481
- extractEmbeddedHasMany(store, key, embeddedType, partial);
2504
+ if (relationship.options.polymorphic) {
2505
+ extractEmbeddedHasManyPolymorphic(store, key, partial);
2506
+ }
2507
+ else {
2508
+ extractEmbeddedHasMany(store, key, embeddedType, partial);
2509
+ }
2482
2510
  }
2483
2511
  if (relationship.kind === "belongsTo") {
2484
2512
  extractEmbeddedBelongsTo(store, key, embeddedType, partial);
@@ -2508,6 +2536,28 @@ define("ember-data/serializers/embedded_records_mixin",
2508
2536
  return hash;
2509
2537
  }
2510
2538
 
2539
+ function extractEmbeddedHasManyPolymorphic(store, key, hash) {
2540
+ if (!hash[key]) {
2541
+ return hash;
2542
+ }
2543
+
2544
+ var ids = [];
2545
+
2546
+ forEach(hash[key], function(data) {
2547
+ var typeKey = data.type;
2548
+ var embeddedSerializer = store.serializerFor(typeKey);
2549
+ var embeddedType = store.modelFor(typeKey);
2550
+ var primaryKey = get(embeddedSerializer, 'primaryKey');
2551
+
2552
+ var embeddedRecord = embeddedSerializer.normalize(embeddedType, data, null);
2553
+ store.push(embeddedType, embeddedRecord);
2554
+ ids.push({ id: embeddedRecord[primaryKey], type: typeKey });
2555
+ });
2556
+
2557
+ hash[key] = ids;
2558
+ return hash;
2559
+ }
2560
+
2511
2561
  function extractEmbeddedBelongsTo(store, key, embeddedType, hash) {
2512
2562
  if (!hash[key]) {
2513
2563
  return hash;
@@ -2525,12 +2575,10 @@ define("ember-data/serializers/embedded_records_mixin",
2525
2575
  __exports__["default"] = EmbeddedRecordsMixin;
2526
2576
  });
2527
2577
  define("ember-data/serializers/json_serializer",
2528
- ["ember-data/system/changes","exports"],
2529
- function(__dependency1__, __exports__) {
2578
+ ["exports"],
2579
+ function(__exports__) {
2530
2580
  "use strict";
2531
- var RelationshipChange = __dependency1__.RelationshipChange;
2532
2581
  var get = Ember.get;
2533
- var set = Ember.set;
2534
2582
  var isNone = Ember.isNone;
2535
2583
  var map = Ember.ArrayPolyfills.map;
2536
2584
  var merge = Ember.merge;
@@ -2640,7 +2688,7 @@ define("ember-data/serializers/json_serializer",
2640
2688
  @return {Object} data The transformed data object
2641
2689
  */
2642
2690
  applyTransforms: function(type, data) {
2643
- type.eachTransformedAttribute(function(key, type) {
2691
+ type.eachTransformedAttribute(function applyTransform(key, type) {
2644
2692
  if (!data.hasOwnProperty(key)) { return; }
2645
2693
 
2646
2694
  var transform = this.transformFor(type);
@@ -2726,7 +2774,7 @@ define("ember-data/serializers/json_serializer",
2726
2774
  @private
2727
2775
  */
2728
2776
  normalizeAttributes: function(type, hash) {
2729
- var payloadKey, key;
2777
+ var payloadKey;
2730
2778
 
2731
2779
  if (this.keyForAttribute) {
2732
2780
  type.eachAttribute(function(key) {
@@ -2745,7 +2793,7 @@ define("ember-data/serializers/json_serializer",
2745
2793
  @private
2746
2794
  */
2747
2795
  normalizeRelationships: function(type, hash) {
2748
- var payloadKey, key;
2796
+ var payloadKey;
2749
2797
 
2750
2798
  if (this.keyForRelationship) {
2751
2799
  type.eachRelationship(function(key, relationship) {
@@ -3164,7 +3212,7 @@ define("ember-data/serializers/json_serializer",
3164
3212
  payloadKey = this.keyForRelationship(key, "hasMany");
3165
3213
  }
3166
3214
 
3167
- var relationshipType = RelationshipChange.determineRelationshipType(record.constructor, relationship);
3215
+ var relationshipType = record.constructor.determineRelationshipType(relationship);
3168
3216
 
3169
3217
  if (relationshipType === 'manyToNone' || relationshipType === 'manyToMany') {
3170
3218
  json[payloadKey] = get(record, key).mapBy('id');
@@ -3574,7 +3622,6 @@ define("ember-data/serializers/rest_serializer",
3574
3622
 
3575
3623
  var JSONSerializer = __dependency1__["default"];
3576
3624
  var get = Ember.get;
3577
- var set = Ember.set;
3578
3625
  var forEach = Ember.ArrayPolyfills.forEach;
3579
3626
  var map = Ember.ArrayPolyfills.map;
3580
3627
  var camelize = Ember.String.camelize;
@@ -4255,7 +4302,7 @@ define("ember-data/serializers/rest_serializer",
4255
4302
 
4256
4303
  /**
4257
4304
  You can use this method to customize the root keys serialized into the JSON.
4258
- By default the REST Serializer sends the typeKey of a model, whih is a camelized
4305
+ By default the REST Serializer sends the typeKey of a model, which is a camelized
4259
4306
  version of the name.
4260
4307
 
4261
4308
  For example, your server may expect underscored root objects.
@@ -4332,8 +4379,6 @@ define("ember-data/system/adapter",
4332
4379
  */
4333
4380
 
4334
4381
  var get = Ember.get;
4335
- var set = Ember.set;
4336
- var map = Ember.ArrayPolyfills.map;
4337
4382
 
4338
4383
  var errorProps = [
4339
4384
  'description',
@@ -4790,465 +4835,6 @@ define("ember-data/system/adapter",
4790
4835
  __exports__.Adapter = Adapter;
4791
4836
  __exports__["default"] = Adapter;
4792
4837
  });
4793
- define("ember-data/system/changes",
4794
- ["ember-data/system/changes/relationship_change","exports"],
4795
- function(__dependency1__, __exports__) {
4796
- "use strict";
4797
- /**
4798
- @module ember-data
4799
- */
4800
-
4801
- var RelationshipChange = __dependency1__.RelationshipChange;
4802
- var RelationshipChangeAdd = __dependency1__.RelationshipChangeAdd;
4803
- var RelationshipChangeRemove = __dependency1__.RelationshipChangeRemove;
4804
- var OneToManyChange = __dependency1__.OneToManyChange;
4805
- var ManyToNoneChange = __dependency1__.ManyToNoneChange;
4806
- var OneToOneChange = __dependency1__.OneToOneChange;
4807
- var ManyToManyChange = __dependency1__.ManyToManyChange;
4808
-
4809
- __exports__.RelationshipChange = RelationshipChange;
4810
- __exports__.RelationshipChangeAdd = RelationshipChangeAdd;
4811
- __exports__.RelationshipChangeRemove = RelationshipChangeRemove;
4812
- __exports__.OneToManyChange = OneToManyChange;
4813
- __exports__.ManyToNoneChange = ManyToNoneChange;
4814
- __exports__.OneToOneChange = OneToOneChange;
4815
- __exports__.ManyToManyChange = ManyToManyChange;
4816
- });
4817
- define("ember-data/system/changes/relationship_change",
4818
- ["ember-data/system/model/model","ember-data/system/relationship-meta","exports"],
4819
- function(__dependency1__, __dependency2__, __exports__) {
4820
- "use strict";
4821
- /**
4822
- @module ember-data
4823
- */
4824
-
4825
- var Model = __dependency1__["default"];
4826
- var isSyncRelationship = __dependency2__.isSyncRelationship;
4827
-
4828
- var get = Ember.get;
4829
- var set = Ember.set;
4830
- var forEach = Ember.EnumerableUtils.forEach;
4831
-
4832
- /**
4833
- @class RelationshipChange
4834
- @namespace DS
4835
- @private
4836
- @constructor
4837
- */
4838
- var RelationshipChange = function(options) {
4839
- this.parentRecord = options.parentRecord;
4840
- this.childRecord = options.childRecord;
4841
- this.firstRecord = options.firstRecord;
4842
- this.firstRecordKind = options.firstRecordKind;
4843
- this.firstRecordName = options.firstRecordName;
4844
- this.secondRecord = options.secondRecord;
4845
- this.secondRecordKind = options.secondRecordKind;
4846
- this.secondRecordName = options.secondRecordName;
4847
- this.changeType = options.changeType;
4848
- this.store = options.store;
4849
-
4850
- this.committed = {};
4851
- };
4852
-
4853
- /**
4854
- @class RelationshipChangeAdd
4855
- @namespace DS
4856
- @private
4857
- @constructor
4858
- */
4859
- function RelationshipChangeAdd(options){
4860
- RelationshipChange.call(this, options);
4861
- }
4862
-
4863
- /**
4864
- @class RelationshipChangeRemove
4865
- @namespace DS
4866
- @private
4867
- @constructor
4868
- */
4869
- function RelationshipChangeRemove(options){
4870
- RelationshipChange.call(this, options);
4871
- }
4872
-
4873
- RelationshipChange.create = function(options) {
4874
- return new RelationshipChange(options);
4875
- };
4876
-
4877
- RelationshipChangeAdd.create = function(options) {
4878
- return new RelationshipChangeAdd(options);
4879
- };
4880
-
4881
- RelationshipChangeRemove.create = function(options) {
4882
- return new RelationshipChangeRemove(options);
4883
- };
4884
-
4885
- var OneToManyChange = {};
4886
- var OneToNoneChange = {};
4887
- var ManyToNoneChange = {};
4888
- var OneToOneChange = {};
4889
- var ManyToManyChange = {};
4890
-
4891
- RelationshipChange._createChange = function(options){
4892
- if (options.changeType === 'add') {
4893
- return RelationshipChangeAdd.create(options);
4894
- }
4895
- if (options.changeType === 'remove') {
4896
- return RelationshipChangeRemove.create(options);
4897
- }
4898
- };
4899
-
4900
- RelationshipChange.determineRelationshipType = function(recordType, knownSide){
4901
- var knownKey = knownSide.key, key, otherKind;
4902
- var knownKind = knownSide.kind;
4903
-
4904
- var inverse = recordType.inverseFor(knownKey);
4905
-
4906
- if (inverse) {
4907
- key = inverse.name;
4908
- otherKind = inverse.kind;
4909
- }
4910
-
4911
- if (!inverse) {
4912
- return knownKind === 'belongsTo' ? 'oneToNone' : 'manyToNone';
4913
- } else {
4914
- if (otherKind === 'belongsTo') {
4915
- return knownKind === 'belongsTo' ? 'oneToOne' : 'manyToOne';
4916
- } else {
4917
- return knownKind === 'belongsTo' ? 'oneToMany' : 'manyToMany';
4918
- }
4919
- }
4920
- };
4921
-
4922
- RelationshipChange.createChange = function(firstRecord, secondRecord, store, options){
4923
- // Get the type of the child based on the child's client ID
4924
- var firstRecordType = firstRecord.constructor, changeType;
4925
- changeType = RelationshipChange.determineRelationshipType(firstRecordType, options);
4926
- if (changeType === 'oneToMany') {
4927
- return OneToManyChange.createChange(firstRecord, secondRecord, store, options);
4928
- } else if (changeType === 'manyToOne') {
4929
- return OneToManyChange.createChange(secondRecord, firstRecord, store, options);
4930
- } else if (changeType === 'oneToNone') {
4931
- return OneToNoneChange.createChange(firstRecord, secondRecord, store, options);
4932
- } else if (changeType === 'manyToNone') {
4933
- return ManyToNoneChange.createChange(firstRecord, secondRecord, store, options);
4934
- } else if (changeType === 'oneToOne') {
4935
- return OneToOneChange.createChange(firstRecord, secondRecord, store, options);
4936
- } else if (changeType === 'manyToMany') {
4937
- return ManyToManyChange.createChange(firstRecord, secondRecord, store, options);
4938
- }
4939
- };
4940
-
4941
- OneToNoneChange.createChange = function(childRecord, parentRecord, store, options) {
4942
- var key = options.key;
4943
- var change = RelationshipChange._createChange({
4944
- parentRecord: parentRecord,
4945
- childRecord: childRecord,
4946
- firstRecord: childRecord,
4947
- store: store,
4948
- changeType: options.changeType,
4949
- firstRecordName: key,
4950
- firstRecordKind: 'belongsTo'
4951
- });
4952
-
4953
- store.addRelationshipChangeFor(childRecord, key, parentRecord, null, change);
4954
-
4955
- return change;
4956
- };
4957
-
4958
- ManyToNoneChange.createChange = function(childRecord, parentRecord, store, options) {
4959
- var key = options.key;
4960
- var change = RelationshipChange._createChange({
4961
- parentRecord: childRecord,
4962
- childRecord: parentRecord,
4963
- secondRecord: childRecord,
4964
- store: store,
4965
- changeType: options.changeType,
4966
- secondRecordName: options.key,
4967
- secondRecordKind: 'hasMany'
4968
- });
4969
-
4970
- store.addRelationshipChangeFor(childRecord, key, parentRecord, null, change);
4971
- return change;
4972
- };
4973
-
4974
-
4975
- ManyToManyChange.createChange = function(childRecord, parentRecord, store, options) {
4976
- // If the name of the belongsTo side of the relationship is specified,
4977
- // use that
4978
- // If the type of the parent is specified, look it up on the child's type
4979
- // definition.
4980
- var key = options.key;
4981
-
4982
- var change = RelationshipChange._createChange({
4983
- parentRecord: parentRecord,
4984
- childRecord: childRecord,
4985
- firstRecord: childRecord,
4986
- secondRecord: parentRecord,
4987
- firstRecordKind: 'hasMany',
4988
- secondRecordKind: 'hasMany',
4989
- store: store,
4990
- changeType: options.changeType,
4991
- firstRecordName: key
4992
- });
4993
-
4994
- store.addRelationshipChangeFor(childRecord, key, parentRecord, null, change);
4995
-
4996
- return change;
4997
- };
4998
-
4999
- OneToOneChange.createChange = function(childRecord, parentRecord, store, options) {
5000
- var key;
5001
-
5002
- // If the name of the belongsTo side of the relationship is specified,
5003
- // use that
5004
- // If the type of the parent is specified, look it up on the child's type
5005
- // definition.
5006
- if (options.parentType) {
5007
- key = options.parentType.inverseFor(options.key).name;
5008
- } else if (options.key) {
5009
- key = options.key;
5010
- } else {
5011
- Ember.assert('You must pass either a parentType or belongsToName option to OneToManyChange.forChildAndParent', false);
5012
- }
5013
-
5014
- var change = RelationshipChange._createChange({
5015
- parentRecord: parentRecord,
5016
- childRecord: childRecord,
5017
- firstRecord: childRecord,
5018
- secondRecord: parentRecord,
5019
- firstRecordKind: 'belongsTo',
5020
- secondRecordKind: 'belongsTo',
5021
- store: store,
5022
- changeType: options.changeType,
5023
- firstRecordName: key
5024
- });
5025
-
5026
- store.addRelationshipChangeFor(childRecord, key, parentRecord, null, change);
5027
-
5028
- return change;
5029
- };
5030
-
5031
- OneToOneChange.maintainInvariant = function(options, store, childRecord, key){
5032
- if (options.changeType === 'add' && store.recordIsMaterialized(childRecord)) {
5033
- var oldParent = get(childRecord, key);
5034
- if (oldParent) {
5035
- var correspondingChange = OneToOneChange.createChange(childRecord, oldParent, store, {
5036
- parentType: options.parentType,
5037
- hasManyName: options.hasManyName,
5038
- changeType: 'remove',
5039
- key: options.key
5040
- });
5041
- store.addRelationshipChangeFor(childRecord, key, options.parentRecord , null, correspondingChange);
5042
- correspondingChange.sync();
5043
- }
5044
- }
5045
- };
5046
-
5047
- OneToManyChange.createChange = function(childRecord, parentRecord, store, options) {
5048
- var key;
5049
-
5050
- // If the name of the belongsTo side of the relationship is specified,
5051
- // use that
5052
- // If the type of the parent is specified, look it up on the child's type
5053
- // definition.
5054
- if (options.parentType) {
5055
- key = options.parentType.inverseFor(options.key).name;
5056
- OneToManyChange.maintainInvariant( options, store, childRecord, key );
5057
- } else if (options.key) {
5058
- key = options.key;
5059
- } else {
5060
- Ember.assert('You must pass either a parentType or belongsToName option to OneToManyChange.forChildAndParent', false);
5061
- }
5062
-
5063
- var change = RelationshipChange._createChange({
5064
- parentRecord: parentRecord,
5065
- childRecord: childRecord,
5066
- firstRecord: childRecord,
5067
- secondRecord: parentRecord,
5068
- firstRecordKind: 'belongsTo',
5069
- secondRecordKind: 'hasMany',
5070
- store: store,
5071
- changeType: options.changeType,
5072
- firstRecordName: key
5073
- });
5074
-
5075
- store.addRelationshipChangeFor(childRecord, key, parentRecord, change.getSecondRecordName(), change);
5076
-
5077
- return change;
5078
- };
5079
-
5080
- OneToManyChange.maintainInvariant = function(options, store, childRecord, key){
5081
- if (options.changeType === 'add' && childRecord) {
5082
- var oldParent = get(childRecord, key);
5083
- if (oldParent) {
5084
- var correspondingChange = OneToManyChange.createChange(childRecord, oldParent, store, {
5085
- parentType: options.parentType,
5086
- hasManyName: options.hasManyName,
5087
- changeType: 'remove',
5088
- key: options.key
5089
- });
5090
- store.addRelationshipChangeFor(childRecord, key, options.parentRecord, correspondingChange.getSecondRecordName(), correspondingChange);
5091
- correspondingChange.sync();
5092
- }
5093
- }
5094
- };
5095
-
5096
- /**
5097
- @class RelationshipChange
5098
- @namespace DS
5099
- */
5100
- RelationshipChange.prototype = {
5101
- getSecondRecordName: function() {
5102
- var name = this.secondRecordName, parent;
5103
-
5104
- if (!name) {
5105
- parent = this.secondRecord;
5106
- if (!parent) { return; }
5107
-
5108
- var childType = this.firstRecord.constructor;
5109
- var inverse = childType.inverseFor(this.firstRecordName);
5110
- this.secondRecordName = inverse.name;
5111
- }
5112
-
5113
- return this.secondRecordName;
5114
- },
5115
-
5116
- /**
5117
- Get the name of the relationship on the belongsTo side.
5118
-
5119
- @method getFirstRecordName
5120
- @return {String}
5121
- */
5122
- getFirstRecordName: function() {
5123
- return this.firstRecordName;
5124
- },
5125
-
5126
- /**
5127
- @method destroy
5128
- @private
5129
- */
5130
- destroy: function() {
5131
- var childRecord = this.childRecord;
5132
- var belongsToName = this.getFirstRecordName();
5133
- var hasManyName = this.getSecondRecordName();
5134
- var store = this.store;
5135
-
5136
- store.removeRelationshipChangeFor(childRecord, belongsToName, this.parentRecord, hasManyName, this.changeType);
5137
- },
5138
-
5139
- getSecondRecord: function(){
5140
- return this.secondRecord;
5141
- },
5142
-
5143
- /**
5144
- @method getFirstRecord
5145
- @private
5146
- */
5147
- getFirstRecord: function() {
5148
- return this.firstRecord;
5149
- },
5150
-
5151
- coalesce: function(){
5152
- var relationshipPairs = this.store.relationshipChangePairsFor(this.firstRecord);
5153
- forEach(relationshipPairs, function(pair) {
5154
- var addedChange = pair['add'];
5155
- var removedChange = pair['remove'];
5156
- if (addedChange && removedChange) {
5157
- addedChange.destroy();
5158
- removedChange.destroy();
5159
- }
5160
- });
5161
- }
5162
- };
5163
-
5164
- RelationshipChangeAdd.prototype = Ember.create(RelationshipChange.create({}));
5165
- RelationshipChangeRemove.prototype = Ember.create(RelationshipChange.create({}));
5166
-
5167
- RelationshipChangeAdd.prototype.changeType = 'add';
5168
- RelationshipChangeAdd.prototype.sync = function() {
5169
- var secondRecordName = this.getSecondRecordName();
5170
- var firstRecordName = this.getFirstRecordName();
5171
- var firstRecord = this.getFirstRecord();
5172
- var secondRecord = this.getSecondRecord();
5173
-
5174
- //Ember.assert("You specified a hasMany (" + hasManyName + ") on " + (!belongsToName && (newParent || oldParent || this.lastParent).constructor) + " but did not specify an inverse belongsTo on " + child.constructor, belongsToName);
5175
- //Ember.assert("You specified a belongsTo (" + belongsToName + ") on " + child.constructor + " but did not specify an inverse hasMany on " + (!hasManyName && (newParent || oldParent || this.lastParentRecord).constructor), hasManyName);
5176
-
5177
- if (secondRecord instanceof Model && firstRecord instanceof Model) {
5178
- if (this.secondRecordKind === 'belongsTo') {
5179
- secondRecord.suspendRelationshipObservers(function() {
5180
- set(secondRecord, secondRecordName, firstRecord);
5181
- });
5182
- } else if (this.secondRecordKind === 'hasMany' && isSyncRelationship(secondRecord, secondRecordName)) {
5183
- secondRecord.suspendRelationshipObservers(function() {
5184
- var relationship = get(secondRecord, secondRecordName);
5185
- relationship.addObject(firstRecord);
5186
- });
5187
- }
5188
- }
5189
-
5190
- if (firstRecord instanceof Model && secondRecord instanceof Model && get(firstRecord, firstRecordName) !== secondRecord) {
5191
- if (this.firstRecordKind === 'belongsTo') {
5192
- firstRecord.suspendRelationshipObservers(function() {
5193
- set(firstRecord, firstRecordName, secondRecord);
5194
- });
5195
- } else if (this.firstRecordKind === 'hasMany' && isSyncRelationship(secondRecord, secondRecordName)) {
5196
- firstRecord.suspendRelationshipObservers(function() {
5197
- var relationship = get(firstRecord, firstRecordName);
5198
- relationship.addObject(secondRecord);
5199
- });
5200
- }
5201
- }
5202
- this.coalesce();
5203
- };
5204
-
5205
- RelationshipChangeRemove.prototype.changeType = 'remove';
5206
- RelationshipChangeRemove.prototype.sync = function() {
5207
- var secondRecordName = this.getSecondRecordName();
5208
- var firstRecordName = this.getFirstRecordName();
5209
- var firstRecord = this.getFirstRecord();
5210
- var secondRecord = this.getSecondRecord();
5211
-
5212
- //Ember.assert("You specified a hasMany (" + hasManyName + ") on " + (!belongsToName && (newParent || oldParent || this.lastParent).constructor) + " but did not specify an inverse belongsTo on " + child.constructor, belongsToName);
5213
- //Ember.assert("You specified a belongsTo (" + belongsToName + ") on " + child.constructor + " but did not specify an inverse hasMany on " + (!hasManyName && (newParent || oldParent || this.lastParentRecord).constructor), hasManyName);
5214
-
5215
- if (secondRecord instanceof Model && firstRecord instanceof Model) {
5216
- if (this.secondRecordKind === 'belongsTo') {
5217
- secondRecord.suspendRelationshipObservers(function() {
5218
- set(secondRecord, secondRecordName, null);
5219
- });
5220
- } else if (this.secondRecordKind === 'hasMany' && isSyncRelationship(secondRecord, secondRecordName)) {
5221
- secondRecord.suspendRelationshipObservers(function() {
5222
- var relationship = get(secondRecord, secondRecordName);
5223
- relationship.removeObject(firstRecord);
5224
- });
5225
- }
5226
- }
5227
-
5228
- if (firstRecord instanceof Model && get(firstRecord, firstRecordName)) {
5229
- if (this.firstRecordKind === 'belongsTo') {
5230
- firstRecord.suspendRelationshipObservers(function() {
5231
- set(firstRecord, firstRecordName, null);
5232
- });
5233
- } else if (this.firstRecordKind === 'hasMany' && isSyncRelationship(firstRecord, firstRecordName)) {
5234
- firstRecord.suspendRelationshipObservers(function() {
5235
- var relationship = get(firstRecord, firstRecordName);
5236
- relationship.removeObject(secondRecord);
5237
- });
5238
- }
5239
- }
5240
-
5241
- this.coalesce();
5242
- };
5243
-
5244
- __exports__.RelationshipChange = RelationshipChange;
5245
- __exports__.RelationshipChangeAdd = RelationshipChangeAdd;
5246
- __exports__.RelationshipChangeRemove = RelationshipChangeRemove;
5247
- __exports__.OneToManyChange = OneToManyChange;
5248
- __exports__.ManyToNoneChange = ManyToNoneChange;
5249
- __exports__.OneToOneChange = OneToOneChange;
5250
- __exports__.ManyToManyChange = ManyToManyChange;
5251
- });
5252
4838
  define("ember-data/system/container_proxy",
5253
4839
  ["exports"],
5254
4840
  function(__exports__) {
@@ -5291,7 +4877,7 @@ define("ember-data/system/container_proxy",
5291
4877
  };
5292
4878
 
5293
4879
  ContainerProxy.prototype.registerDeprecations = function(proxyPairs) {
5294
- var i, proxyPair, deprecated, valid, proxy;
4880
+ var i, proxyPair, deprecated, valid;
5295
4881
 
5296
4882
  for (i = proxyPairs.length; i > 0; i--) {
5297
4883
  proxyPair = proxyPairs[i - 1];
@@ -6187,12 +5773,14 @@ define("ember-data/system/model/errors",
6187
5773
  });
6188
5774
  });
6189
5775
  define("ember-data/system/model/model",
6190
- ["ember-data/system/model/states","ember-data/system/model/errors","ember-data/system/store","exports"],
6191
- function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
5776
+ ["ember-data/system/model/states","ember-data/system/model/errors","ember-data/system/promise_proxies","ember-data/system/relationships/relationship","exports"],
5777
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
6192
5778
  "use strict";
6193
5779
  var RootState = __dependency1__["default"];
6194
5780
  var Errors = __dependency2__["default"];
6195
5781
  var PromiseObject = __dependency3__.PromiseObject;
5782
+ var createRelationshipFor = __dependency4__.createRelationshipFor;
5783
+
6196
5784
  /**
6197
5785
  @module ember-data
6198
5786
  */
@@ -6202,6 +5790,7 @@ define("ember-data/system/model/model",
6202
5790
  var merge = Ember.merge;
6203
5791
  var Promise = Ember.RSVP.Promise;
6204
5792
  var forEach = Ember.ArrayPolyfills.forEach;
5793
+ var map = Ember.ArrayPolyfills.map;
6205
5794
 
6206
5795
  var JSONSerializer;
6207
5796
  var retrieveFromCurrentState = Ember.computed('currentState', function(key, value) {
@@ -6634,6 +6223,12 @@ define("ember-data/system/model/model",
6634
6223
  this._attributes = {};
6635
6224
  this._inFlightAttributes = {};
6636
6225
  this._relationships = {};
6226
+ var model = this;
6227
+ //TODO Move into a getter for better perf
6228
+ this.constructor.eachRelationship(function(key, descriptor) {
6229
+ model._relationships[key] = createRelationshipFor(model, descriptor, model.store);
6230
+ });
6231
+
6637
6232
  },
6638
6233
 
6639
6234
  /**
@@ -6816,13 +6411,11 @@ define("ember-data/system/model/model",
6816
6411
  */
6817
6412
  clearRelationships: function() {
6818
6413
  this.eachRelationship(function(name, relationship) {
6819
- if (relationship.kind === 'belongsTo') {
6820
- set(this, name, null);
6821
- } else if (relationship.kind === 'hasMany') {
6822
- var hasMany = this._relationships[name];
6823
- if (hasMany) { // relationships are created lazily
6824
- hasMany.destroy();
6825
- }
6414
+ var rel = this._relationships[name];
6415
+ if (rel){
6416
+ //TODO(Igor) figure out whether we want to clear or disconnect
6417
+ rel.clear();
6418
+ rel.destroy();
6826
6419
  }
6827
6420
  }, this);
6828
6421
  },
@@ -6837,9 +6430,9 @@ define("ember-data/system/model/model",
6837
6430
  },
6838
6431
 
6839
6432
  /**
6840
- When a find request is triggered on the store, the user can optionally passed in
6433
+ When a find request is triggered on the store, the user can optionally pass in
6841
6434
  attributes and relationships to be preloaded. These are meant to behave as if they
6842
- came back from the server, expect the user obtained them out of band and is informing
6435
+ came back from the server, except the user obtained them out of band and is informing
6843
6436
  the store of their existence. The most common use case is for supporting client side
6844
6437
  nested URLs, such as `/posts/1/comments/2` so the user can do
6845
6438
  `store.find('comment', 2, {post:1})` without having to fetch the post.
@@ -6879,15 +6472,20 @@ define("ember-data/system/model/model",
6879
6472
  Ember.assert("You need to pass in an array to set a hasMany property on a record", Ember.isArray(preloadValue));
6880
6473
  var record = this;
6881
6474
 
6882
- forEach.call(preloadValue, function(recordToPush) {
6883
- recordToPush = record._convertStringOrNumberIntoRecord(recordToPush, type);
6884
- get(record, key).pushObject(recordToPush);
6475
+ var recordsToSet = map.call(preloadValue, function(recordToPush) {
6476
+ return record._convertStringOrNumberIntoRecord(recordToPush, type);
6885
6477
  });
6478
+ //We use the pathway of setting the hasMany as if it came from the adapter
6479
+ //because the user told us that they know this relationships exists already
6480
+ this._relationships[key].updateRecordsFromAdapter(recordsToSet);
6886
6481
  },
6887
6482
 
6888
6483
  _preloadBelongsTo: function(key, preloadValue, type){
6889
- var recordToPush = this._convertStringOrNumberIntoRecord(preloadValue, type);
6890
- set(this, key, recordToPush);
6484
+ var recordToSet = this._convertStringOrNumberIntoRecord(preloadValue, type);
6485
+
6486
+ //We use the pathway of setting the hasMany as if it came from the adapter
6487
+ //because the user told us that they know this relationships exists already
6488
+ this._relationships[key].setRecord(recordToSet);
6891
6489
  },
6892
6490
 
6893
6491
  _convertStringOrNumberIntoRecord: function(value, type) {
@@ -6962,9 +6560,7 @@ define("ember-data/system/model/model",
6962
6560
 
6963
6561
  if (!data) { return; }
6964
6562
 
6965
- this.suspendRelationshipObservers(function() {
6966
- this.notifyPropertyChange('data');
6967
- });
6563
+ this.notifyPropertyChange('data');
6968
6564
  },
6969
6565
 
6970
6566
  /**
@@ -6976,32 +6572,6 @@ define("ember-data/system/model/model",
6976
6572
  this.updateRecordArraysLater();
6977
6573
  },
6978
6574
 
6979
- dataDidChange: Ember.observer(function() {
6980
- this.reloadHasManys();
6981
- }, 'data'),
6982
-
6983
- reloadHasManys: function() {
6984
- var relationships = get(this.constructor, 'relationshipsByName');
6985
- this.updateRecordArraysLater();
6986
- relationships.forEach(function(name, relationship) {
6987
- if (this._data.links && this._data.links[name]) { return; }
6988
- if (relationship.kind === 'hasMany') {
6989
- this.hasManyDidChange(relationship.key);
6990
- }
6991
- }, this);
6992
- },
6993
-
6994
- hasManyDidChange: function(key) {
6995
- var hasMany = this._relationships[key];
6996
-
6997
- if (hasMany) {
6998
- var records = this._data[key] || [];
6999
-
7000
- set(hasMany, 'content', Ember.A(records));
7001
- set(hasMany, 'isLoaded', true);
7002
- hasMany.trigger('didLoad');
7003
- }
7004
- },
7005
6575
 
7006
6576
  /**
7007
6577
  @method updateRecordArraysLater
@@ -7029,18 +6599,9 @@ define("ember-data/system/model/model",
7029
6599
  this._data = data;
7030
6600
  }
7031
6601
 
7032
- var relationships = this._relationships;
7033
-
7034
- this.eachRelationship(function(name, rel) {
7035
- if (data.links && data.links[name]) { return; }
7036
- if (rel.options.async) { relationships[name] = null; }
7037
- });
7038
-
7039
6602
  if (data) { this.pushedData(); }
7040
6603
 
7041
- this.suspendRelationshipObservers(function() {
7042
- this.notifyPropertyChange('data');
7043
- });
6604
+ this.notifyPropertyChange('data');
7044
6605
  },
7045
6606
 
7046
6607
  materializeId: function(id) {
@@ -7056,27 +6617,6 @@ define("ember-data/system/model/model",
7056
6617
  this._data[name] = value;
7057
6618
  },
7058
6619
 
7059
- /**
7060
- @method updateHasMany
7061
- @private
7062
- @param {String} name
7063
- @param {Array} records
7064
- */
7065
- updateHasMany: function(name, records) {
7066
- this._data[name] = records;
7067
- this.hasManyDidChange(name);
7068
- },
7069
-
7070
- /**
7071
- @method updateBelongsTo
7072
- @private
7073
- @param {String} name
7074
- @param {DS.Model} record
7075
- */
7076
- updateBelongsTo: function(name, record) {
7077
- this._data[name] = record;
7078
- },
7079
-
7080
6620
  /**
7081
6621
  If the model `isDirty` this function will discard any unsaved
7082
6622
  changes
@@ -7107,48 +6647,13 @@ define("ember-data/system/model/model",
7107
6647
 
7108
6648
  this.send('rolledBack');
7109
6649
 
7110
- this.suspendRelationshipObservers(function() {
7111
- this.notifyPropertyChange('data');
7112
- });
6650
+ this.notifyPropertyChange('data');
7113
6651
  },
7114
6652
 
7115
6653
  toStringExtension: function() {
7116
6654
  return get(this, 'id');
7117
6655
  },
7118
6656
 
7119
- /**
7120
- The goal of this method is to temporarily disable specific observers
7121
- that take action in response to application changes.
7122
-
7123
- This allows the system to make changes (such as materialization and
7124
- rollback) that should not trigger secondary behavior (such as setting an
7125
- inverse relationship or marking records as dirty).
7126
-
7127
- The specific implementation will likely change as Ember proper provides
7128
- better infrastructure for suspending groups of observers, and if Array
7129
- observation becomes more unified with regular observers.
7130
-
7131
- @method suspendRelationshipObservers
7132
- @private
7133
- @param callback
7134
- @param binding
7135
- */
7136
- suspendRelationshipObservers: function(callback, binding) {
7137
- var observers = get(this.constructor, 'relationshipNames').belongsTo;
7138
- var self = this;
7139
-
7140
- try {
7141
- this._suspendedRelationships = true;
7142
- Ember._suspendObservers(self, observers, null, 'belongsToDidChange', function() {
7143
- Ember._suspendBeforeObservers(self, observers, null, 'belongsToWillChange', function() {
7144
- callback.call(binding || self);
7145
- });
7146
- });
7147
- } finally {
7148
- this._suspendedRelationships = false;
7149
- }
7150
- },
7151
-
7152
6657
  /**
7153
6658
  Save the record and persist any changes to the record to an
7154
6659
  extenal source via the adapter.
@@ -7515,18 +7020,6 @@ define("ember-data/system/model/states",
7515
7020
  @class RootState
7516
7021
  */
7517
7022
 
7518
- function hasDefinedProperties(object) {
7519
- // Ignore internal property defined by simulated `Ember.create`.
7520
- var names = Ember.keys(object);
7521
- var i, l, name;
7522
- for (i = 0, l = names.length; i < l; i++ ) {
7523
- name = names[i];
7524
- if (object.hasOwnProperty(name) && object[name]) { return true; }
7525
- }
7526
-
7527
- return false;
7528
- }
7529
-
7530
7023
  function didSetProperty(record, context) {
7531
7024
  if (context.value === context.originalValue) {
7532
7025
  delete record._attributes[context.name];
@@ -7601,12 +7094,8 @@ define("ember-data/system/model/states",
7601
7094
  loadingData: Ember.K,
7602
7095
 
7603
7096
  propertyWasReset: function(record, name) {
7604
- var stillDirty = false;
7605
-
7606
- for (var prop in record._attributes) {
7607
- stillDirty = true;
7608
- break;
7609
- }
7097
+ var length = Ember.keys(record._attributes);
7098
+ var stillDirty = length > 0;
7610
7099
 
7611
7100
  if (!stillDirty) { record.send('rolledBack'); }
7612
7101
  },
@@ -7831,10 +7320,7 @@ define("ember-data/system/model/states",
7831
7320
 
7832
7321
  loadedData: function(record) {
7833
7322
  record.transitionTo('loaded.created.uncommitted');
7834
-
7835
- record.suspendRelationshipObservers(function() {
7836
- record.notifyPropertyChange('data');
7837
- });
7323
+ record.notifyPropertyChange('data');
7838
7324
  },
7839
7325
 
7840
7326
  pushedData: function(record) {
@@ -8078,6 +7564,91 @@ define("ember-data/system/model/states",
8078
7564
 
8079
7565
  __exports__["default"] = RootState;
8080
7566
  });
7567
+ define("ember-data/system/promise_proxies",
7568
+ ["exports"],
7569
+ function(__exports__) {
7570
+ "use strict";
7571
+ var Promise = Ember.RSVP.Promise;
7572
+
7573
+ /**
7574
+ A `PromiseArray` is an object that acts like both an `Ember.Array`
7575
+ and a promise. When the promise is resolved the resulting value
7576
+ will be set to the `PromiseArray`'s `content` property. This makes
7577
+ it easy to create data bindings with the `PromiseArray` that will be
7578
+ updated when the promise resolves.
7579
+
7580
+ For more information see the [Ember.PromiseProxyMixin
7581
+ documentation](/api/classes/Ember.PromiseProxyMixin.html).
7582
+
7583
+ Example
7584
+
7585
+ ```javascript
7586
+ var promiseArray = DS.PromiseArray.create({
7587
+ promise: $.getJSON('/some/remote/data.json')
7588
+ });
7589
+
7590
+ promiseArray.get('length'); // 0
7591
+
7592
+ promiseArray.then(function() {
7593
+ promiseArray.get('length'); // 100
7594
+ });
7595
+ ```
7596
+
7597
+ @class PromiseArray
7598
+ @namespace DS
7599
+ @extends Ember.ArrayProxy
7600
+ @uses Ember.PromiseProxyMixin
7601
+ */
7602
+ var PromiseArray = Ember.ArrayProxy.extend(Ember.PromiseProxyMixin);
7603
+
7604
+ /**
7605
+ A `PromiseObject` is an object that acts like both an `Ember.Object`
7606
+ and a promise. When the promise is resolved, then the resulting value
7607
+ will be set to the `PromiseObject`'s `content` property. This makes
7608
+ it easy to create data bindings with the `PromiseObject` that will
7609
+ be updated when the promise resolves.
7610
+
7611
+ For more information see the [Ember.PromiseProxyMixin
7612
+ documentation](/api/classes/Ember.PromiseProxyMixin.html).
7613
+
7614
+ Example
7615
+
7616
+ ```javascript
7617
+ var promiseObject = DS.PromiseObject.create({
7618
+ promise: $.getJSON('/some/remote/data.json')
7619
+ });
7620
+
7621
+ promiseObject.get('name'); // null
7622
+
7623
+ promiseObject.then(function() {
7624
+ promiseObject.get('name'); // 'Tomster'
7625
+ });
7626
+ ```
7627
+
7628
+ @class PromiseObject
7629
+ @namespace DS
7630
+ @extends Ember.ObjectProxy
7631
+ @uses Ember.PromiseProxyMixin
7632
+ */
7633
+ var PromiseObject = Ember.ObjectProxy.extend(Ember.PromiseProxyMixin);
7634
+
7635
+ var promiseObject = function(promise, label) {
7636
+ return PromiseObject.create({
7637
+ promise: Promise.resolve(promise, label)
7638
+ });
7639
+ };
7640
+
7641
+ var promiseArray = function(promise, label) {
7642
+ return PromiseArray.create({
7643
+ promise: Promise.resolve(promise, label)
7644
+ });
7645
+ };
7646
+
7647
+ __exports__.PromiseArray = PromiseArray;
7648
+ __exports__.PromiseObject = PromiseObject;
7649
+ __exports__.promiseArray = promiseArray;
7650
+ __exports__.promiseObject = promiseObject;
7651
+ });
8081
7652
  define("ember-data/system/record_array_manager",
8082
7653
  ["ember-data/system/record_arrays","exports"],
8083
7654
  function(__dependency1__, __exports__) {
@@ -8091,7 +7662,6 @@ define("ember-data/system/record_array_manager",
8091
7662
  var AdapterPopulatedRecordArray = __dependency1__.AdapterPopulatedRecordArray;
8092
7663
  var ManyArray = __dependency1__.ManyArray;
8093
7664
  var get = Ember.get;
8094
- var set = Ember.set;
8095
7665
  var forEach = Ember.EnumerableUtils.forEach;
8096
7666
 
8097
7667
  /**
@@ -8416,7 +7986,6 @@ define("ember-data/system/record_arrays/adapter_populated_record_array",
8416
7986
  */
8417
7987
 
8418
7988
  var get = Ember.get;
8419
- var set = Ember.set;
8420
7989
 
8421
7990
  function cloneNull(source) {
8422
7991
  var clone = Object.create(null);
@@ -8542,22 +8111,16 @@ define("ember-data/system/record_arrays/filtered_record_array",
8542
8111
  });
8543
8112
  });
8544
8113
  define("ember-data/system/record_arrays/many_array",
8545
- ["ember-data/system/record_arrays/record_array","ember-data/system/changes","exports"],
8546
- function(__dependency1__, __dependency2__, __exports__) {
8114
+ ["ember-data/system/record_arrays/record_array","exports"],
8115
+ function(__dependency1__, __exports__) {
8547
8116
  "use strict";
8548
8117
  var RecordArray = __dependency1__["default"];
8549
- var RelationshipChange = __dependency2__.RelationshipChange;
8550
8118
 
8551
8119
  /**
8552
8120
  @module ember-data
8553
8121
  */
8554
8122
 
8555
8123
  var get = Ember.get, set = Ember.set;
8556
- var map = Ember.EnumerableUtils.map;
8557
-
8558
- function sync(change) {
8559
- change.sync();
8560
- }
8561
8124
 
8562
8125
  /**
8563
8126
  A `ManyArray` is a `RecordArray` that represents the contents of a has-many
@@ -8598,7 +8161,6 @@ define("ember-data/system/record_arrays/many_array",
8598
8161
  __exports__["default"] = RecordArray.extend({
8599
8162
  init: function() {
8600
8163
  this._super.apply(this, arguments);
8601
- this._changesToSync = Ember.OrderedSet.create();
8602
8164
  },
8603
8165
 
8604
8166
  /**
@@ -8629,6 +8191,16 @@ define("ember-data/system/record_arrays/many_array",
8629
8191
 
8630
8192
  isLoaded: false,
8631
8193
 
8194
+ /**
8195
+ The relationship which manages this array.
8196
+
8197
+ @property {DS.Model} owner
8198
+ @private
8199
+ */
8200
+
8201
+ relationship: null,
8202
+
8203
+
8632
8204
  /**
8633
8205
  Used for async `hasMany` arrays
8634
8206
  to keep track of when they will resolve.
@@ -8659,99 +8231,14 @@ define("ember-data/system/record_arrays/many_array",
8659
8231
  }
8660
8232
  },
8661
8233
 
8662
- /**
8663
- @method fetch
8664
- @private
8665
- */
8666
- fetch: function() {
8667
- var records = get(this, 'content');
8668
- var store = get(this, 'store');
8669
- var owner = get(this, 'owner');
8670
-
8671
- var unloadedRecords = records.filterBy('isEmpty', true);
8672
- store.scheduleFetchMany(unloadedRecords, owner);
8673
- },
8674
-
8675
- // Overrides Ember.Array's replace method to implement
8676
- replaceContent: function(index, removed, added) {
8677
- // Map the array of record objects into an array of client ids.
8678
- added = map(added, function(record) {
8679
- Ember.assert("You cannot add '" + record.constructor.typeKey + "' records to this relationship (only '" + this.type.typeKey + "' allowed)", !this.type || record instanceof this.type);
8680
- return record;
8681
- }, this);
8682
-
8683
- this._super(index, removed, added);
8684
- },
8685
-
8686
- arrangedContentDidChange: function() {
8687
- Ember.run.once(this, 'fetch');
8688
- },
8689
-
8690
- arrayContentWillChange: function(index, removed, added) {
8691
- var owner = get(this, 'owner');
8692
- var name = get(this, 'name');
8693
-
8694
- if (!owner._suspendedRelationships) {
8695
- // This code is the first half of code that continues inside
8696
- // of arrayContentDidChange. It gets or creates a change from
8697
- // the child object, adds the current owner as the old
8698
- // parent if this is the first time the object was removed
8699
- // from a ManyArray, and sets `newParent` to null.
8700
- //
8701
- // Later, if the object is added to another ManyArray,
8702
- // the `arrayContentDidChange` will set `newParent` on
8703
- // the change.
8704
- for (var i=index; i<index+removed; i++) {
8705
- var record = get(this, 'content').objectAt(i);
8706
-
8707
- var change = RelationshipChange.createChange(owner, record, get(this, 'store'), {
8708
- parentType: owner.constructor,
8709
- changeType: "remove",
8710
- kind: "hasMany",
8711
- key: name
8712
- });
8713
-
8714
- this._changesToSync.add(change);
8715
- }
8234
+ replaceContent: function(idx, amt, objects){
8235
+ var records;
8236
+ if (amt > 0){
8237
+ records = get(this, 'content').slice(idx, idx+amt);
8238
+ this.get('relationship').removeRecords(records);
8716
8239
  }
8717
-
8718
- return this._super.apply(this, arguments);
8719
- },
8720
-
8721
- arrayContentDidChange: function(index, removed, added) {
8722
- this._super.apply(this, arguments);
8723
-
8724
- var owner = get(this, 'owner');
8725
- var name = get(this, 'name');
8726
- var store = get(this, 'store');
8727
-
8728
- if (!owner._suspendedRelationships) {
8729
- // This code is the second half of code that started in
8730
- // `arrayContentWillChange`. It gets or creates a change
8731
- // from the child object, and adds the current owner as
8732
- // the new parent.
8733
- for (var i=index; i<index+added; i++) {
8734
- var record = get(this, 'content').objectAt(i);
8735
-
8736
- var change = RelationshipChange.createChange(owner, record, store, {
8737
- parentType: owner.constructor,
8738
- changeType: "add",
8739
- kind:"hasMany",
8740
- key: name
8741
- });
8742
- change.hasManyName = name;
8743
-
8744
- this._changesToSync.add(change);
8745
- }
8746
-
8747
- // We wait until the array has finished being
8748
- // mutated before syncing the OneToManyChanges created
8749
- // in arrayContentWillChange, so that the array
8750
- // membership test in the sync() logic operates
8751
- // on the final results.
8752
- this._changesToSync.forEach(sync);
8753
-
8754
- this._changesToSync.clear();
8240
+ if (objects){
8241
+ this.get('relationship').addRecords(objects, idx);
8755
8242
  }
8756
8243
  },
8757
8244
 
@@ -8764,8 +8251,7 @@ define("ember-data/system/record_arrays/many_array",
8764
8251
  @return {DS.Model} record
8765
8252
  */
8766
8253
  createRecord: function(hash) {
8767
- var owner = get(this, 'owner');
8768
- var store = get(owner, 'store');
8254
+ var store = get(this, 'store');
8769
8255
  var type = get(this, 'type');
8770
8256
  var record;
8771
8257
 
@@ -8779,7 +8265,7 @@ define("ember-data/system/record_arrays/many_array",
8779
8265
  });
8780
8266
  });
8781
8267
  define("ember-data/system/record_arrays/record_array",
8782
- ["ember-data/system/store","exports"],
8268
+ ["ember-data/system/promise_proxies","exports"],
8783
8269
  function(__dependency1__, __exports__) {
8784
8270
  "use strict";
8785
8271
  /**
@@ -8788,7 +8274,6 @@ define("ember-data/system/record_arrays/record_array",
8788
8274
 
8789
8275
  var PromiseArray = __dependency1__.PromiseArray;
8790
8276
  var get = Ember.get;
8791
- var set = Ember.set;
8792
8277
 
8793
8278
  /**
8794
8279
  A record array is an array that contains records of a certain type. The record
@@ -8908,9 +8393,17 @@ define("ember-data/system/record_arrays/record_array",
8908
8393
  @method addRecord
8909
8394
  @private
8910
8395
  @param {DS.Model} record
8396
+ @param {DS.Model} an optional index to insert at
8911
8397
  */
8912
- addRecord: function(record) {
8913
- get(this, 'content').addObject(record);
8398
+ addRecord: function(record, idx) {
8399
+ var content = get(this, 'content');
8400
+ if (idx === undefined) {
8401
+ content.addObject(record);
8402
+ } else {
8403
+ if (!content.contains(record)) {
8404
+ content.insertAt(idx, record);
8405
+ }
8406
+ }
8914
8407
  },
8915
8408
 
8916
8409
  /**
@@ -9012,14 +8505,7 @@ define("ember-data/system/relationship-meta",
9012
8505
  };
9013
8506
  }
9014
8507
 
9015
- __exports__.relationshipFromMeta = relationshipFromMeta;function isSyncRelationship(record, relationshipName) {
9016
- var meta = Ember.meta(record);
9017
- var desc = meta.descs[relationshipName];
9018
-
9019
- return desc && !desc._meta.options.async;
9020
- }
9021
-
9022
- __exports__.isSyncRelationship = isSyncRelationship;
8508
+ __exports__.relationshipFromMeta = relationshipFromMeta;
9023
8509
  });
9024
8510
  define("ember-data/system/relationships",
9025
8511
  ["./relationships/belongs_to","./relationships/has_many","ember-data/system/relationships/ext","exports"],
@@ -9037,65 +8523,11 @@ define("ember-data/system/relationships",
9037
8523
  __exports__.hasMany = hasMany;
9038
8524
  });
9039
8525
  define("ember-data/system/relationships/belongs_to",
9040
- ["ember-data/system/model","ember-data/system/store","ember-data/system/changes","ember-data/system/relationship-meta","exports"],
9041
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
8526
+ ["ember-data/system/model","exports"],
8527
+ function(__dependency1__, __exports__) {
9042
8528
  "use strict";
9043
- var get = Ember.get;
9044
- var set = Ember.set;
9045
- var isNone = Ember.isNone;
9046
- var Promise = Ember.RSVP.Promise;
9047
-
9048
8529
  var Model = __dependency1__.Model;
9049
- var PromiseObject = __dependency2__.PromiseObject;
9050
- var RelationshipChange = __dependency3__.RelationshipChange;
9051
- var relationshipFromMeta = __dependency4__.relationshipFromMeta;
9052
- var typeForRelationshipMeta = __dependency4__.typeForRelationshipMeta;
9053
- var isSyncRelationship = __dependency4__.isSyncRelationship;
9054
-
9055
- /**
9056
- @module ember-data
9057
- */
9058
8530
 
9059
- function asyncBelongsTo(type, options, meta) {
9060
- return Ember.computed('data', function(key, value) {
9061
- var data = get(this, 'data');
9062
- var store = get(this, 'store');
9063
- var promiseLabel = "DS: Async belongsTo " + this + " : " + key;
9064
- var promise;
9065
-
9066
- meta.key = key;
9067
-
9068
- if (arguments.length === 2) {
9069
- Ember.assert("You can only add a '" + type + "' record to this relationship", !value || value instanceof typeForRelationshipMeta(store, meta));
9070
- return value === undefined ? null : PromiseObject.create({
9071
- promise: Promise.cast(value, promiseLabel)
9072
- });
9073
- }
9074
-
9075
- var link = data.links && data.links[key];
9076
- var belongsTo = data[key];
9077
-
9078
- if (!isNone(belongsTo)) {
9079
- var inverse = this.constructor.inverseFor(key);
9080
- //but for now only in the oneToOne case
9081
- if (inverse && inverse.kind === 'belongsTo'){
9082
- set(belongsTo, inverse.name, this);
9083
- }
9084
- //TODO(Igor) after OR doesn't seem that will be called
9085
- promise = store.findById(belongsTo.constructor, belongsTo.get('id')) || Promise.cast(belongsTo, promiseLabel);
9086
- return PromiseObject.create({
9087
- promise: promise
9088
- });
9089
- } else if (link) {
9090
- promise = store.findBelongsTo(this, link, relationshipFromMeta(store, meta));
9091
- return PromiseObject.create({
9092
- promise: promise
9093
- });
9094
- } else {
9095
- return null;
9096
- }
9097
- }).meta(meta);
9098
- }
9099
8531
 
9100
8532
  /**
9101
8533
  `DS.belongsTo` is used to define One-To-One and One-To-Many
@@ -9162,33 +8594,15 @@ define("ember-data/system/relationships/belongs_to",
9162
8594
  key: null
9163
8595
  };
9164
8596
 
9165
- if (options.async) {
9166
- return asyncBelongsTo(type, options, meta);
9167
- }
9168
-
9169
- return Ember.computed('data', function(key, value) {
9170
- var data = get(this, 'data');
9171
- var store = get(this, 'store');
9172
- var belongsTo, typeClass;
9173
-
9174
- if (typeof type === 'string') {
9175
- typeClass = store.modelFor(type);
9176
- } else {
9177
- typeClass = type;
9178
- }
9179
-
9180
- if (arguments.length === 2) {
9181
- Ember.assert("You can only add a '" + type + "' record to this relationship", !value || value instanceof typeClass);
9182
- return value === undefined ? null : value;
8597
+ return Ember.computed(function(key, value) {
8598
+ if (arguments.length>1) {
8599
+ if ( value === undefined ) {
8600
+ value = null;
8601
+ }
8602
+ this._relationships[key].setRecord(value);
9183
8603
  }
9184
8604
 
9185
- belongsTo = data[key];
9186
-
9187
- if (isNone(belongsTo)) { return null; }
9188
-
9189
- store.findById(belongsTo.constructor, belongsTo.get('id'));
9190
-
9191
- return belongsTo;
8605
+ return this._relationships[key].getRecord();
9192
8606
  }).meta(meta);
9193
8607
  }
9194
8608
 
@@ -9200,72 +8614,26 @@ define("ember-data/system/relationships/belongs_to",
9200
8614
  @namespace DS
9201
8615
  */
9202
8616
  Model.reopen({
8617
+ notifyBelongsToAdded: function(key, relationship) {
8618
+ this.notifyPropertyChange(key);
8619
+ },
9203
8620
 
9204
- /**
9205
- @method belongsToWillChange
9206
- @private
9207
- @static
9208
- @param record
9209
- @param key
9210
- */
9211
- belongsToWillChange: Ember.beforeObserver(function(record, key) {
9212
- if (get(record, 'isLoaded') && isSyncRelationship(record, key)) {
9213
- var oldParent = get(record, key);
9214
-
9215
- if (oldParent) {
9216
- var store = get(record, 'store');
9217
- var change = RelationshipChange.createChange(record, oldParent, store, {
9218
- key: key,
9219
- kind: 'belongsTo',
9220
- changeType: 'remove'
9221
- });
9222
-
9223
- change.sync();
9224
- this._changesToSync[key] = change;
9225
- }
9226
- }
9227
- }),
9228
-
9229
- /**
9230
- @method belongsToDidChange
9231
- @private
9232
- @static
9233
- @param record
9234
- @param key
9235
- */
9236
- belongsToDidChange: Ember.immediateObserver(function(record, key) {
9237
- if (get(record, 'isLoaded')) {
9238
- var newParent = get(record, key);
9239
-
9240
- if (newParent) {
9241
- var store = get(record, 'store');
9242
- var change = RelationshipChange.createChange(record, newParent, store, {
9243
- key: key,
9244
- kind: 'belongsTo',
9245
- changeType: 'add'
9246
- });
9247
-
9248
- change.sync();
9249
- }
9250
- }
9251
-
9252
- delete this._changesToSync[key];
9253
- })
8621
+ notifyBelongsToRemoved: function(key) {
8622
+ this.notifyPropertyChange(key);
8623
+ }
9254
8624
  });
9255
8625
 
9256
8626
  __exports__["default"] = belongsTo;
9257
8627
  });
9258
8628
  define("ember-data/system/relationships/ext",
9259
- ["ember-inflector/system","ember-data/system/relationship-meta","ember-data/system/model"],
9260
- function(__dependency1__, __dependency2__, __dependency3__) {
8629
+ ["ember-data/system/relationship-meta","ember-data/system/model"],
8630
+ function(__dependency1__, __dependency2__) {
9261
8631
  "use strict";
9262
- var singularize = __dependency1__.singularize;
9263
- var typeForRelationshipMeta = __dependency2__.typeForRelationshipMeta;
9264
- var relationshipFromMeta = __dependency2__.relationshipFromMeta;
9265
- var Model = __dependency3__.Model;
8632
+ var typeForRelationshipMeta = __dependency1__.typeForRelationshipMeta;
8633
+ var relationshipFromMeta = __dependency1__.relationshipFromMeta;
8634
+ var Model = __dependency2__.Model;
9266
8635
 
9267
8636
  var get = Ember.get;
9268
- var set = Ember.set;
9269
8637
 
9270
8638
  /**
9271
8639
  @module ember-data
@@ -9317,11 +8685,6 @@ define("ember-data/system/relationships/ext",
9317
8685
  // the computed property.
9318
8686
  var meta = value.meta();
9319
8687
 
9320
- if (meta.isRelationship && meta.kind === 'belongsTo') {
9321
- Ember.addObserver(proto, key, null, 'belongsToDidChange');
9322
- Ember.addBeforeObserver(proto, key, null, 'belongsToWillChange');
9323
- }
9324
-
9325
8688
  meta.parentType = proto.constructor;
9326
8689
  }
9327
8690
  }
@@ -9703,7 +9066,28 @@ define("ember-data/system/relationships/ext",
9703
9066
  get(this, 'relatedTypes').forEach(function(type) {
9704
9067
  callback.call(binding, type);
9705
9068
  });
9069
+ },
9070
+
9071
+ determineRelationshipType: function(knownSide) {
9072
+ var knownKey = knownSide.key;
9073
+ var knownKind = knownSide.kind;
9074
+ var inverse = this.inverseFor(knownKey);
9075
+ var key, otherKind;
9076
+
9077
+ if (!inverse) {
9078
+ return knownKind === 'belongsTo' ? 'oneToNone' : 'manyToNone';
9079
+ }
9080
+
9081
+ key = inverse.name;
9082
+ otherKind = inverse.kind;
9083
+
9084
+ if (otherKind === 'belongsTo') {
9085
+ return knownKind === 'belongsTo' ? 'oneToOne' : 'manyToOne';
9086
+ } else {
9087
+ return knownKind === 'belongsTo' ? 'oneToMany' : 'manyToMany';
9088
+ }
9706
9089
  }
9090
+
9707
9091
  });
9708
9092
 
9709
9093
  Model.reopen({
@@ -9718,125 +9102,27 @@ define("ember-data/system/relationships/ext",
9718
9102
  */
9719
9103
  eachRelationship: function(callback, binding) {
9720
9104
  this.constructor.eachRelationship(callback, binding);
9721
- }
9722
- });
9723
- });
9724
- define("ember-data/system/relationships/has_many",
9725
- ["ember-data/system/store","ember-data/system/relationship-meta","exports"],
9726
- function(__dependency1__, __dependency2__, __exports__) {
9727
- "use strict";
9728
- /**
9729
- @module ember-data
9730
- */
9731
-
9732
- var PromiseArray = __dependency1__.PromiseArray;
9733
-
9734
- var relationshipFromMeta = __dependency2__.relationshipFromMeta;
9735
- var typeForRelationshipMeta = __dependency2__.typeForRelationshipMeta;
9736
-
9737
- var get = Ember.get;
9738
- var set = Ember.set;
9739
- var setProperties = Ember.setProperties;
9740
- var map = Ember.EnumerableUtils.map;
9741
-
9742
- /**
9743
- Returns a computed property that synchronously returns a ManyArray for
9744
- this relationship. If not all of the records in this relationship are
9745
- loaded, it will raise an exception.
9746
- */
9747
-
9748
- function syncHasMany(type, options, meta) {
9749
- return Ember.computed('data', function(key) {
9750
- return buildRelationship(this, key, options, function(store, data) {
9751
- // Configure the metadata for the computed property to contain
9752
- // the key.
9753
- meta.key = key;
9754
-
9755
- var records = data[key];
9105
+ },
9756
9106
 
9757
- Ember.assert("You looked up the '" + key + "' relationship on '" + this + "' but some of the associated records were not loaded. Either make sure they are all loaded together with the parent record, or specify that the relationship is async (`DS.hasMany({ async: true })`)", Ember.A(records).isEvery('isEmpty', false));
9107
+ relationshipFor: function(name) {
9108
+ return get(this.constructor, 'relationshipsByName').get(name);
9109
+ },
9758
9110
 
9759
- return store.findMany(this, data[key], typeForRelationshipMeta(store, meta));
9760
- });
9761
- }).meta(meta).readOnly();
9762
- }
9111
+ inverseFor: function(key) {
9112
+ return this.constructor.inverseFor(key);
9113
+ }
9763
9114
 
9115
+ });
9116
+ });
9117
+ define("ember-data/system/relationships/has_many",
9118
+ ["ember-data/system/model","exports"],
9119
+ function(__dependency1__, __exports__) {
9120
+ "use strict";
9764
9121
  /**
9765
- Returns a computed property that itself returns a promise that resolves to a
9766
- ManyArray.
9767
- */
9768
-
9769
- function asyncHasMany(type, options, meta) {
9770
- return Ember.computed('data', function(key) {
9771
- // Configure the metadata for the computed property to contain
9772
- // the key.
9773
- meta.key = key;
9774
-
9775
- var relationship = buildRelationship(this, key, options, function(store, data) {
9776
- var link = data.links && data.links[key];
9777
- var rel;
9778
- var promiseLabel = "DS: Async hasMany " + this + " : " + key;
9779
- var resolver = Ember.RSVP.defer(promiseLabel);
9780
-
9781
- if (link) {
9782
- rel = store.findHasMany(this, link, relationshipFromMeta(store, meta), resolver);
9783
- } else {
9784
-
9785
- //This is a temporary workaround for setting owner on the relationship
9786
- //until single source of truth lands. It only works for OneToMany atm
9787
- var records = data[key];
9788
- var inverse = this.constructor.inverseFor(key);
9789
- var owner = this;
9790
- if (inverse && records) {
9791
- if (inverse.kind === 'belongsTo'){
9792
- map(records, function(record){
9793
- set(record, inverse.name, owner);
9794
- });
9795
- }
9796
- }
9797
-
9798
- rel = store.findMany(owner, data[key], typeForRelationshipMeta(store, meta), resolver);
9799
- }
9800
-
9801
- // Cache the promise so we can use it when we come back and don't
9802
- // need to rebuild the relationship.
9803
- set(rel, 'promise', resolver.promise);
9804
-
9805
- return rel;
9806
- });
9807
-
9808
- var promise = relationship.get('promise').then(function() {
9809
- return relationship;
9810
- }, null, "DS: Async hasMany records received");
9811
-
9812
- return PromiseArray.create({
9813
- promise: promise
9814
- });
9815
- }).meta(meta).readOnly();
9816
- }
9817
-
9818
- /*
9819
- Builds the ManyArray for a relationship using the provided callback,
9820
- but only if it had not been created previously. After building, it
9821
- sets some metadata on the created ManyArray, such as the record which
9822
- owns it and the name of the relationship.
9122
+ @module ember-data
9823
9123
  */
9824
- function buildRelationship(record, key, options, callback) {
9825
- var rels = record._relationships;
9826
9124
 
9827
- if (rels[key]) { return rels[key]; }
9828
-
9829
- var data = get(record, 'data');
9830
- var store = get(record, 'store');
9831
-
9832
- var relationship = rels[key] = callback.call(record, store, data);
9833
-
9834
- return setProperties(relationship, {
9835
- owner: record,
9836
- name: key,
9837
- isPolymorphic: options.polymorphic
9838
- });
9839
- }
9125
+ var Model = __dependency1__.Model;
9840
9126
 
9841
9127
  /**
9842
9128
  `DS.hasMany` is used to define One-To-Many and Many-To-Many
@@ -9936,18 +9222,317 @@ define("ember-data/system/relationships/has_many",
9936
9222
  key: null
9937
9223
  };
9938
9224
 
9939
- if (options.async) {
9940
- return asyncHasMany(type, options, meta);
9225
+ return Ember.computed(function(key) {
9226
+ var relationship = this._relationships[key];
9227
+ return relationship.getRecords();
9228
+ }).meta(meta).readOnly();
9229
+ }
9230
+
9231
+ Model.reopen({
9232
+ notifyHasManyAdded: function(key, record, idx) {
9233
+ var relationship = this._relationships[key];
9234
+ var manyArray = relationship.manyArray;
9235
+ manyArray.addRecord(record, idx);
9236
+ //We need to notifyPropertyChange in the adding case because we need to make sure
9237
+ //we fetch the newly added record in case it is unloaded
9238
+ //TODO(Igor): Consider whether we could do this only if the record state is unloaded
9239
+ this.notifyPropertyChange(key);
9240
+ },
9241
+
9242
+ notifyHasManyRemoved: function(key, record) {
9243
+ var relationship = this._relationships[key];
9244
+ var manyArray = relationship.manyArray;
9245
+ manyArray.removeRecord(record);
9246
+ }
9247
+ });
9248
+
9249
+
9250
+ __exports__["default"] = hasMany;
9251
+ });
9252
+ define("ember-data/system/relationships/relationship",
9253
+ ["ember-data/system/promise_proxies","exports"],
9254
+ function(__dependency1__, __exports__) {
9255
+ "use strict";
9256
+ var PromiseArray = __dependency1__.PromiseArray;
9257
+ var PromiseObject = __dependency1__.PromiseObject;
9258
+
9259
+ var Relationship = function(store, record, inverseKey, relationshipMeta) {
9260
+ this.members = new Ember.OrderedSet();
9261
+ this.store = store;
9262
+ this.key = relationshipMeta.key;
9263
+ this.inverseKey = inverseKey;
9264
+ this.record = record;
9265
+ this.key = relationshipMeta.key;
9266
+ this.isAsync = relationshipMeta.options.async;
9267
+ this.relationshipMeta = relationshipMeta;
9268
+ };
9269
+
9270
+ Relationship.prototype = {
9271
+ constructor: Relationship,
9272
+ hasFetchedLink: false,
9273
+
9274
+ destroy: Ember.K,
9275
+
9276
+ clear: function() {
9277
+ this.members.forEach(function(member) {
9278
+ this.removeRecord(member);
9279
+ }, this);
9280
+ },
9281
+
9282
+ removeRecords: function(records){
9283
+ var that = this;
9284
+ records.forEach(function(record){
9285
+ that.removeRecord(record);
9286
+ });
9287
+ },
9288
+
9289
+ addRecords: function(records, idx){
9290
+ var that = this;
9291
+ records.forEach(function(record){
9292
+ that.addRecord(record, idx);
9293
+ if (idx !== undefined) {
9294
+ idx++;
9295
+ }
9296
+ });
9297
+ },
9298
+
9299
+
9300
+ addRecord: function(record, idx) {
9301
+ if (!this.members.has(record)) {
9302
+ this.members.add(record);
9303
+ this.notifyRecordRelationshipAdded(record, idx);
9304
+ if (this.inverseKey) {
9305
+ record._relationships[this.inverseKey].addRecord(this.record);
9306
+ }
9307
+ this.record.updateRecordArrays();
9308
+ }
9309
+ },
9310
+
9311
+ removeRecord: function(record) {
9312
+ if (this.members.has(record)) {
9313
+ this.members.remove(record);
9314
+ this.notifyRecordRelationshipRemoved(record);
9315
+ if (this.inverseKey) {
9316
+ var inverseRelationship = record._relationships[this.inverseKey];
9317
+ //Need to check for existence, as the record might unloading at the moment
9318
+ if (inverseRelationship) {
9319
+ inverseRelationship.removeRecord(this.record);
9320
+ }
9321
+ }
9322
+ this.record.updateRecordArrays();
9323
+ }
9324
+ },
9325
+
9326
+ updateLink: function(link) {
9327
+ if (link !== this.link) {
9328
+ this.link = link;
9329
+ this.hasFetchedLink = false;
9330
+ this.record.notifyPropertyChange(this.key);
9331
+ }
9332
+ },
9333
+
9334
+ updateRecordsFromAdapter: function(records) {
9335
+ //TODO Once we have adapter support, we need to handle updated and canonical changes
9336
+ this.computeChanges(records);
9337
+ }
9338
+ };
9339
+
9340
+ var ManyRelationship = function(store, record, inverseKey, relationshipMeta) {
9341
+ this._super$constructor(store, record, inverseKey, relationshipMeta);
9342
+ this.belongsToType = relationshipMeta.type;
9343
+ this.manyArray = store.recordArrayManager.createManyArray(this.belongsToType, Ember.A());
9344
+ this.manyArray.relationship = this;
9345
+ this.isPolymorphic = relationshipMeta.options.polymorphic;
9346
+ this.manyArray.isPolymorphic = this.isPolymorphic;
9347
+ };
9348
+
9349
+ ManyRelationship.prototype = Object.create(Relationship.prototype);
9350
+ ManyRelationship.prototype.constructor = ManyRelationship;
9351
+ ManyRelationship.prototype._super$constructor = Relationship;
9352
+
9353
+ ManyRelationship.prototype.destroy = function() {
9354
+ this.manyArray.destroy();
9355
+ };
9356
+
9357
+ ManyRelationship.prototype.notifyRecordRelationshipAdded = function(record, idx) {
9358
+ Ember.assert("You cannot add '" + record.constructor.typeKey + "' records to this relationship (only '" + this.belongsToType.typeKey + "' allowed)", !this.belongsToType || record instanceof this.belongsToType);
9359
+ this.record.notifyHasManyAdded(this.key, record, idx);
9360
+ };
9361
+
9362
+ ManyRelationship.prototype.notifyRecordRelationshipRemoved = function(record) {
9363
+ this.record.notifyHasManyRemoved(this.key, record);
9364
+ };
9365
+
9366
+ ManyRelationship.prototype.computeChanges = function(records) {
9367
+ var members = this.members;
9368
+
9369
+ records = setForArray(records);
9370
+
9371
+ members.forEach(function(member) {
9372
+ if (records.has(member)) return;
9373
+
9374
+ this.removeRecord(member);
9375
+ }, this);
9376
+
9377
+ var hasManyArray = this.manyArray;
9378
+
9379
+ records.forEach(function(record, index) {
9380
+ //Need to preserve the order of incoming records
9381
+ if (hasManyArray.objectAt(index) === record ) return;
9382
+
9383
+ this.removeRecord(record);
9384
+ this.addRecord(record, index);
9385
+ }, this);
9386
+ };
9387
+
9388
+
9389
+ ManyRelationship.prototype.getRecords = function() {
9390
+ if (this.isAsync) {
9391
+ var self = this;
9392
+ var promise;
9393
+ if (this.link && !this.hasFetchedLink) {
9394
+ promise = this.store.findHasMany(this.record, this.link, this.relationshipMeta).then(function(records){
9395
+ self.updateRecordsFromAdapter(records);
9396
+ self.hasFetchedLink = true;
9397
+ //TODO(Igor) try to abstract the isLoaded part
9398
+ self.manyArray.set('isLoaded', true);
9399
+ return self.manyArray;
9400
+ });
9401
+ } else {
9402
+ var manyArray = this.manyArray;
9403
+ promise = this.store.findMany(manyArray.toArray()).then(function(){
9404
+ self.manyArray.set('isLoaded', true);
9405
+ return manyArray;
9406
+ });
9407
+ }
9408
+ return PromiseArray.create({
9409
+ promise: promise
9410
+ });
9411
+ } else {
9412
+ Ember.assert("You looked up the '" + this.key + "' relationship on a '" + this.record.constructor.typeKey + "' with id " + this.record.get('id') + " but some of the associated records were not loaded. Either make sure they are all loaded together with the parent record, or specify that the relationship is async (`DS.hasMany({ async: true })`)", this.manyArray.isEvery('isEmpty', false));
9413
+
9414
+ this.manyArray.set('isLoaded', true);
9415
+ return this.manyArray;
9416
+ }
9417
+ };
9418
+
9419
+ var BelongsToRelationship = function(store, record, inverseKey, relationshipMeta) {
9420
+ this._super$constructor(store, record, inverseKey, relationshipMeta);
9421
+ this.members.add(record);
9422
+ this.record = record;
9423
+ this.key = relationshipMeta.key;
9424
+ this.inverseKey = inverseKey;
9425
+ this.inverseRecord = null;
9426
+ };
9427
+
9428
+ BelongsToRelationship.prototype = Object.create(Relationship.prototype);
9429
+ BelongsToRelationship.prototype.constructor = BelongsToRelationship;
9430
+ BelongsToRelationship.prototype._super$constructor = Relationship;
9431
+
9432
+ BelongsToRelationship.prototype.setRecord = function(newRecord) {
9433
+ if (newRecord) {
9434
+ this.addRecord(newRecord);
9435
+ } else if (this.inverseRecord) {
9436
+ this.removeRecord(this.inverseRecord);
9437
+ }
9438
+ };
9439
+
9440
+ BelongsToRelationship.prototype._super$addRecord = Relationship.prototype.addRecord;
9441
+ BelongsToRelationship.prototype.addRecord = function(newRecord) {
9442
+ if (this.members.has(newRecord)){ return;}
9443
+ var type = this.relationshipMeta.type;
9444
+ Ember.assert("You can only add a '" + type.typeKey + "' record to this relationship", newRecord instanceof type);
9445
+
9446
+ if (this.inverseRecord && this.inverseKey) {
9447
+ this.removeRecord(this.inverseRecord);
9448
+ }
9449
+
9450
+ this.inverseRecord = newRecord;
9451
+ this._super$addRecord(newRecord);
9452
+ };
9453
+
9454
+ BelongsToRelationship.prototype.notifyRecordRelationshipAdded = function(newRecord) {
9455
+ this.record.notifyBelongsToAdded(this.key, this);
9456
+ };
9457
+
9458
+ BelongsToRelationship.prototype.notifyRecordRelationshipRemoved = function(record) {
9459
+ this.record.notifyBelongsToRemoved(this.key, this);
9460
+ };
9461
+
9462
+ BelongsToRelationship.prototype._super$removeRecord = Relationship.prototype.removeRecord;
9463
+ BelongsToRelationship.prototype.removeRecord = function(record) {
9464
+ if (!this.members.has(record)){ return;}
9465
+ this._super$removeRecord(record);
9466
+ this.inverseRecord = null;
9467
+ };
9468
+
9469
+ BelongsToRelationship.prototype.currentOtherSideFor = function() {
9470
+ return this.inverseRecord;
9471
+ };
9472
+
9473
+ BelongsToRelationship.prototype.getRecord = function() {
9474
+ if (this.isAsync) {
9475
+ var promise;
9476
+
9477
+ if (this.link && !this.hasFetchedLink){
9478
+ var self = this;
9479
+ promise = this.store.findBelongsTo(this.record, this.link, this.relationshipMeta).then(function(record){
9480
+ self.addRecord(record);
9481
+ self.hasFetchedLink = true;
9482
+ return record;
9483
+ });
9484
+ } else if (this.inverseRecord) {
9485
+ promise = this.store._findByRecord(this.inverseRecord);
9486
+ } else {
9487
+ promise = Ember.RSVP.Promise.resolve(null);
9488
+ }
9489
+
9490
+ return PromiseObject.create({
9491
+ promise: promise
9492
+ });
9941
9493
  } else {
9942
- return syncHasMany(type, options, meta);
9494
+ Ember.assert("You looked up the '" + this.key + "' relationship on a '" + this.record.constructor.typeKey + "' with id " + this.record.get('id') + " but some of the associated records were not loaded. Either make sure they are all loaded together with the parent record, or specify that the relationship is async (`DS.belongsTo({ async: true })`)", this.inverseRecord === null || !this.inverseRecord.get('isEmpty'));
9495
+ return this.inverseRecord;
9496
+ }
9497
+ };
9498
+
9499
+ function setForArray(array) {
9500
+ var set = new Ember.OrderedSet();
9501
+
9502
+ if (array) {
9503
+ for (var i=0, l=array.length; i<l; i++) {
9504
+ set.add(array[i]);
9505
+ }
9943
9506
  }
9507
+
9508
+ return set;
9944
9509
  }
9945
9510
 
9946
- __exports__["default"] = hasMany;
9511
+ var createRelationshipFor = function(record, relationshipMeta, store){
9512
+ var inverseKey;
9513
+ var inverse = record.constructor.inverseFor(relationshipMeta.key);
9514
+
9515
+ if (inverse) {
9516
+ inverseKey = inverse.name;
9517
+ }
9518
+
9519
+ if (relationshipMeta.kind === 'hasMany'){
9520
+ return new ManyRelationship(store, record, inverseKey, relationshipMeta);
9521
+ }
9522
+ else {
9523
+ return new BelongsToRelationship(store, record, inverseKey, relationshipMeta);
9524
+ }
9525
+ };
9526
+
9527
+
9528
+ __exports__.Relationship = Relationship;
9529
+ __exports__.ManyRelationship = ManyRelationship;
9530
+ __exports__.BelongsToRelationship = BelongsToRelationship;
9531
+ __exports__.createRelationshipFor = createRelationshipFor;
9947
9532
  });
9948
9533
  define("ember-data/system/store",
9949
- ["ember-data/system/adapter","ember-inflector/system/string","exports"],
9950
- function(__dependency1__, __dependency2__, __exports__) {
9534
+ ["ember-data/system/adapter","ember-inflector/system/string","ember-data/system/promise_proxies","exports"],
9535
+ function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
9951
9536
  "use strict";
9952
9537
  /*globals Ember*/
9953
9538
  /*jshint eqnull:true*/
@@ -9960,6 +9545,10 @@ define("ember-data/system/store",
9960
9545
  var Adapter = __dependency1__.Adapter;
9961
9546
  var singularize = __dependency2__.singularize;
9962
9547
 
9548
+ var promiseArray = __dependency3__.promiseArray;
9549
+ var promiseObject = __dependency3__.promiseObject;
9550
+
9551
+
9963
9552
  var get = Ember.get;
9964
9553
  var set = Ember.set;
9965
9554
  var once = Ember.run.once;
@@ -9969,7 +9558,7 @@ define("ember-data/system/store",
9969
9558
  var map = Ember.EnumerableUtils.map;
9970
9559
  var Promise = Ember.RSVP.Promise;
9971
9560
  var copy = Ember.copy;
9972
- var Store, PromiseObject, PromiseArray, RecordArrayManager, Model;
9561
+ var Store, RecordArrayManager, Model;
9973
9562
 
9974
9563
  var camelize = Ember.String.camelize;
9975
9564
 
@@ -10090,7 +9679,6 @@ define("ember-data/system/store",
10090
9679
  this.recordArrayManager = RecordArrayManager.create({
10091
9680
  store: this
10092
9681
  });
10093
- this._relationshipChanges = {};
10094
9682
  this._pendingSave = [];
10095
9683
  //Used to keep track of all the find requests that need to be coalesced
10096
9684
  this._pendingFetch = Ember.Map.create();
@@ -10302,10 +9890,10 @@ define("ember-data/system/store",
10302
9890
 
10303
9891
  ---
10304
9892
 
10305
- You can optionally preload specific attributes and relationships that you know of
9893
+ You can optionally `preload` specific attributes and relationships that you know of
10306
9894
  by passing them as the third argument to find.
10307
9895
 
10308
- For example, if your Ember route looks like `/posts/1/comments/2` and you API route
9896
+ For example, if your Ember route looks like `/posts/1/comments/2` and your API route
10309
9897
  for the comment also looks like `/posts/1/comments/2` if you want to fetch the comment
10310
9898
  without fetching the post you can pass in the post to the `find` call:
10311
9899
 
@@ -10353,6 +9941,7 @@ define("ember-data/system/store",
10353
9941
  @method find
10354
9942
  @param {String or subclass of DS.Model} type
10355
9943
  @param {Object|String|Integer|null} id
9944
+ @param {Object} preload - optional set of attributes and relationships passed in either as IDs or as actual models
10356
9945
  @return {Promise} promise
10357
9946
  */
10358
9947
  find: function(type, id, preload) {
@@ -10378,14 +9967,20 @@ define("ember-data/system/store",
10378
9967
  @private
10379
9968
  @param {String or subclass of DS.Model} type
10380
9969
  @param {String|Integer} id
9970
+ @param {Object} preload - optional set of attributes and relationships passed in either as IDs or as actual models
10381
9971
  @return {Promise} promise
10382
9972
  */
10383
9973
  findById: function(typeName, id, preload) {
10384
- var fetchedRecord;
10385
9974
 
10386
9975
  var type = this.modelFor(typeName);
10387
9976
  var record = this.recordForId(type, id);
10388
9977
 
9978
+ return this._findByRecord(record, preload);
9979
+ },
9980
+
9981
+ _findByRecord: function(record, preload) {
9982
+ var fetchedRecord;
9983
+
10389
9984
  if (preload) {
10390
9985
  record._preloadData(preload);
10391
9986
  }
@@ -10397,7 +9992,7 @@ define("ember-data/system/store",
10397
9992
  fetchedRecord = record._loadingPromise;
10398
9993
  }
10399
9994
 
10400
- return promiseObject(fetchedRecord || record, "DS: Store#findById " + type + " with id: " + id);
9995
+ return promiseObject(fetchedRecord || record, "DS: Store#findByRecord " + record.typeKey + " with id: " + get(record, 'id'));
10401
9996
  },
10402
9997
 
10403
9998
  /**
@@ -10412,7 +10007,6 @@ define("ember-data/system/store",
10412
10007
  */
10413
10008
  findByIds: function(type, ids) {
10414
10009
  var store = this;
10415
- var promiseLabel = "DS: Store#findByIds " + type;
10416
10010
 
10417
10011
  return promiseArray(Ember.RSVP.all(map(ids, function(id) {
10418
10012
  return store.findById(type, id);
@@ -10483,7 +10077,6 @@ define("ember-data/system/store",
10483
10077
  var adapter = store.adapterFor(type);
10484
10078
  var shouldCoalesce = !!adapter.findMany && adapter.coalesceFindRequests;
10485
10079
  var records = Ember.A(recordResolverPairs).mapBy('record');
10486
- var resolvers = Ember.A(recordResolverPairs).mapBy('resolver');
10487
10080
 
10488
10081
  function _fetchRecord(recordResolverPair) {
10489
10082
  recordResolverPair.resolver.resolve(store.fetchRecord(recordResolverPair.record));
@@ -10644,29 +10237,14 @@ define("ember-data/system/store",
10644
10237
  @param {Resolver} resolver
10645
10238
  @return {DS.ManyArray} records
10646
10239
  */
10647
- findMany: function(owner, inputRecords, typeName, resolver) {
10648
- var type = this.modelFor(typeName);
10649
- var records = Ember.A(inputRecords);
10650
- var unloadedRecords = records.filterProperty('isEmpty', true);
10651
- var manyArray = this.recordArrayManager.createManyArray(type, records);
10652
-
10653
- manyArray.loadingRecordsCount = unloadedRecords.length;
10654
-
10655
- if (unloadedRecords.length) {
10656
- forEach(unloadedRecords, function(record) {
10657
- this.recordArrayManager.registerWaitingRecordArray(record, manyArray);
10658
- }, this);
10659
-
10660
- resolver.resolve(this.scheduleFetchMany(unloadedRecords, owner));
10661
- } else {
10662
- if (resolver) { resolver.resolve(); }
10663
- manyArray.set('isLoaded', true);
10664
- once(manyArray, 'trigger', 'didLoad');
10665
- }
10666
-
10667
- return manyArray;
10240
+ findMany: function(records) {
10241
+ var store = this;
10242
+ return Promise.all( map(records, function(record) {
10243
+ return store._findByRecord(record);
10244
+ }));
10668
10245
  },
10669
10246
 
10247
+
10670
10248
  /**
10671
10249
  If a relationship was originally populated by the adapter as a link
10672
10250
  (as opposed to a list of IDs), this method is called when the
@@ -10685,15 +10263,13 @@ define("ember-data/system/store",
10685
10263
  @param {String or subclass of DS.Model} type
10686
10264
  @return {Promise} promise
10687
10265
  */
10688
- findHasMany: function(owner, link, relationship, resolver) {
10266
+ findHasMany: function(owner, link, type) {
10689
10267
  var adapter = this.adapterFor(owner.constructor);
10690
10268
 
10691
10269
  Ember.assert("You tried to load a hasMany relationship but you have no adapter (for " + owner.constructor + ")", adapter);
10692
10270
  Ember.assert("You tried to load a hasMany relationship from a specified `link` in the original payload but your adapter does not implement `findHasMany`", adapter.findHasMany);
10693
10271
 
10694
- var records = this.recordArrayManager.createManyArray(relationship.type, Ember.A([]));
10695
- resolver.resolve(_findHasMany(adapter, this, owner, link, relationship));
10696
- return records;
10272
+ return _findHasMany(adapter, this, owner, link, type);
10697
10273
  },
10698
10274
 
10699
10275
  /**
@@ -11039,6 +10615,7 @@ define("ember-data/system/store",
11039
10615
  if (data) {
11040
10616
  // normalize relationship IDs into records
11041
10617
  data = normalizeRelationships(this, record.constructor, data, record);
10618
+ setupRelationships(this, record, data);
11042
10619
 
11043
10620
  this.updateId(record, data);
11044
10621
  }
@@ -11160,11 +10737,11 @@ define("ember-data/system/store",
11160
10737
  var factory;
11161
10738
 
11162
10739
  if (typeof key === 'string') {
11163
- var normalizedKey = this.container.normalize('model:' + key);
11164
-
11165
- factory = this.container.lookupFactory(normalizedKey);
11166
- if (!factory) { throw new Ember.Error("No model was found for '" + key + "'"); }
11167
- factory.typeKey = this._normalizeTypeKey(normalizedKey.split(':', 2)[1]);
10740
+ factory = this.container.lookupFactory('model:' + key);
10741
+ if (!factory) {
10742
+ throw new Ember.Error("No model was found for '" + key + "'");
10743
+ }
10744
+ factory.typeKey = factory.typeKey || this._normalizeTypeKey(key);
11168
10745
  } else {
11169
10746
  // A factory already supplied. Ensure it has a normalized key.
11170
10747
  factory = key;
@@ -11242,17 +10819,30 @@ define("ember-data/system/store",
11242
10819
  // _partial is an internal param used by `update`.
11243
10820
  // If passed, it means that the data should be
11244
10821
  // merged into the existing data, not replace it.
11245
-
11246
- Ember.assert("You must include an `id` for " + typeName+ " in a hash passed to `push`", data.id != null);
10822
+ Ember.assert("Expected an object as `data` in a call to push for " + typeName + " , but was " + data, Ember.typeOf(data) === 'object');
10823
+ Ember.assert("You must include an `id` for " + typeName + " in an object passed to `push`", data.id != null);
11247
10824
 
11248
10825
  var type = this.modelFor(typeName);
11249
10826
 
11250
- // normalize relationship IDs into records
10827
+ // If the payload contains relationships that are specified as
10828
+ // IDs, normalizeRelationships will convert them into DS.Model instances
10829
+ // (possibly unloaded) before we push the payload into the
10830
+ // store.
10831
+
11251
10832
  data = normalizeRelationships(this, type, data);
11252
10833
 
10834
+ // Actually load the record into the store.
10835
+
11253
10836
  this._load(type, data, _partial);
11254
10837
 
11255
- return this.recordForId(type, data.id);
10838
+ var record = this.recordForId(type, data.id);
10839
+
10840
+ // Now that the pushed record as well as any related records
10841
+ // are in the store, create the data structures used to track
10842
+ // relationships.
10843
+ setupRelationships(this, record, data);
10844
+
10845
+ return record;
11256
10846
  },
11257
10847
 
11258
10848
  /**
@@ -11387,9 +10977,14 @@ define("ember-data/system/store",
11387
10977
  @return {Array}
11388
10978
  */
11389
10979
  pushMany: function(type, datas) {
11390
- return map(datas, function(data) {
11391
- return this.push(type, data);
11392
- }, this);
10980
+ var length = datas.length;
10981
+ var result = new Array(length);
10982
+
10983
+ for (var i = 0; i < length; i++) {
10984
+ result[i] = this.push(type, datas[i]);
10985
+ }
10986
+
10987
+ return result;
11393
10988
  },
11394
10989
 
11395
10990
  /**
@@ -11474,59 +11069,6 @@ define("ember-data/system/store",
11474
11069
  typeMap.records.splice(loc, 1);
11475
11070
  },
11476
11071
 
11477
- // ........................
11478
- // . RELATIONSHIP CHANGES .
11479
- // ........................
11480
-
11481
- addRelationshipChangeFor: function(childRecord, childKey, parentRecord, parentKey, change) {
11482
- var clientId = childRecord.clientId;
11483
- var parentClientId = parentRecord ? parentRecord : parentRecord;
11484
- var key = childKey + parentKey;
11485
- var changes = this._relationshipChanges;
11486
-
11487
- if (!(clientId in changes)) {
11488
- changes[clientId] = {};
11489
- }
11490
- if (!(parentClientId in changes[clientId])) {
11491
- changes[clientId][parentClientId] = {};
11492
- }
11493
- if (!(key in changes[clientId][parentClientId])) {
11494
- changes[clientId][parentClientId][key] = {};
11495
- }
11496
- changes[clientId][parentClientId][key][change.changeType] = change;
11497
- },
11498
-
11499
- removeRelationshipChangeFor: function(clientRecord, childKey, parentRecord, parentKey, type) {
11500
- var clientId = clientRecord.clientId;
11501
- var parentClientId = parentRecord ? parentRecord.clientId : parentRecord;
11502
- var changes = this._relationshipChanges;
11503
- var key = childKey + parentKey;
11504
-
11505
- if (!(clientId in changes) || !(parentClientId in changes[clientId]) || !(key in changes[clientId][parentClientId])){
11506
- return;
11507
- }
11508
- delete changes[clientId][parentClientId][key][type];
11509
- },
11510
-
11511
- relationshipChangePairsFor: function(record){
11512
- var toReturn = [];
11513
-
11514
- if( !record ) { return toReturn; }
11515
-
11516
- //TODO(Igor) What about the other side
11517
- var changesObject = this._relationshipChanges[record.clientId];
11518
- for (var objKey in changesObject){
11519
- if (changesObject.hasOwnProperty(objKey)){
11520
- for (var changeKey in changesObject[objKey]){
11521
- if (changesObject[objKey].hasOwnProperty(changeKey)){
11522
- toReturn.push(changesObject[objKey][changeKey]);
11523
- }
11524
- }
11525
- }
11526
- }
11527
- return toReturn;
11528
- },
11529
-
11530
11072
  // ......................
11531
11073
  // . PER-TYPE ADAPTERS
11532
11074
  // ......................
@@ -11580,7 +11122,6 @@ define("ember-data/system/store",
11580
11122
  willDestroy: function() {
11581
11123
  var typeMaps = this.typeMaps;
11582
11124
  var keys = Ember.keys(typeMaps);
11583
- var store = this;
11584
11125
 
11585
11126
  var types = map(keys, byType);
11586
11127
 
@@ -11608,30 +11149,15 @@ define("ember-data/system/store",
11608
11149
  }
11609
11150
  });
11610
11151
 
11152
+
11611
11153
  function normalizeRelationships(store, type, data, record) {
11612
11154
  type.eachRelationship(function(key, relationship) {
11613
- // A link (usually a URL) was already provided in
11614
- // normalized form
11615
- if (data.links && data.links[key]) {
11616
- if (record && relationship.options.async) { record._relationships[key] = null; }
11617
- return;
11618
- }
11619
-
11620
11155
  var kind = relationship.kind;
11621
11156
  var value = data[key];
11622
-
11623
- if (value == null) {
11624
- if (kind === 'hasMany' && record) {
11625
- value = data[key] = record.get(key).toArray();
11626
- }
11627
- return;
11628
- }
11629
-
11630
11157
  if (kind === 'belongsTo') {
11631
11158
  deserializeRecordId(store, data, key, relationship, value);
11632
11159
  } else if (kind === 'hasMany') {
11633
11160
  deserializeRecordIds(store, data, key, relationship, value);
11634
- addUnsavedRecords(record, key, value);
11635
11161
  }
11636
11162
  });
11637
11163
 
@@ -11664,104 +11190,16 @@ define("ember-data/system/store",
11664
11190
  }
11665
11191
 
11666
11192
  function deserializeRecordIds(store, data, key, relationship, ids) {
11193
+ if (!Ember.isArray(ids)) {
11194
+ return;
11195
+ }
11667
11196
  for (var i=0, l=ids.length; i<l; i++) {
11668
11197
  deserializeRecordId(store, ids, i, relationship, ids[i]);
11669
11198
  }
11670
11199
  }
11671
11200
 
11672
- // If there are any unsaved records that are in a hasMany they won't be
11673
- // in the payload, so add them back in manually.
11674
- function addUnsavedRecords(record, key, data) {
11675
- if(record) {
11676
- var unsavedRecords = uniqById(Ember.A(data), record.get(key).filterBy('isNew'));
11677
- Ember.A(data).pushObjects(unsavedRecords);
11678
- }
11679
- }
11680
-
11681
- function uniqById(data, records) {
11682
- var currentIds = data.mapBy("id");
11683
- return records.reject(function(record) {
11684
- return Ember.A(currentIds).contains(record.id);
11685
- });
11686
- }
11687
-
11688
11201
  // Delegation to the adapter and promise management
11689
- /**
11690
- A `PromiseArray` is an object that acts like both an `Ember.Array`
11691
- and a promise. When the promise is resolved the resulting value
11692
- will be set to the `PromiseArray`'s `content` property. This makes
11693
- it easy to create data bindings with the `PromiseArray` that will be
11694
- updated when the promise resolves.
11695
-
11696
- For more information see the [Ember.PromiseProxyMixin
11697
- documentation](/api/classes/Ember.PromiseProxyMixin.html).
11698
-
11699
- Example
11700
-
11701
- ```javascript
11702
- var promiseArray = DS.PromiseArray.create({
11703
- promise: $.getJSON('/some/remote/data.json')
11704
- });
11705
-
11706
- promiseArray.get('length'); // 0
11707
-
11708
- promiseArray.then(function() {
11709
- promiseArray.get('length'); // 100
11710
- });
11711
- ```
11712
-
11713
- @class PromiseArray
11714
- @namespace DS
11715
- @extends Ember.ArrayProxy
11716
- @uses Ember.PromiseProxyMixin
11717
- */
11718
- PromiseArray = Ember.ArrayProxy.extend(Ember.PromiseProxyMixin);
11719
- /**
11720
- A `PromiseObject` is an object that acts like both an `Ember.Object`
11721
- and a promise. When the promise is resolved, then the resulting value
11722
- will be set to the `PromiseObject`'s `content` property. This makes
11723
- it easy to create data bindings with the `PromiseObject` that will
11724
- be updated when the promise resolves.
11725
-
11726
- For more information see the [Ember.PromiseProxyMixin
11727
- documentation](/api/classes/Ember.PromiseProxyMixin.html).
11728
-
11729
- Example
11730
-
11731
- ```javascript
11732
- var promiseObject = DS.PromiseObject.create({
11733
- promise: $.getJSON('/some/remote/data.json')
11734
- });
11735
-
11736
- promiseObject.get('name'); // null
11737
-
11738
- promiseObject.then(function() {
11739
- promiseObject.get('name'); // 'Tomster'
11740
- });
11741
- ```
11742
-
11743
- @class PromiseObject
11744
- @namespace DS
11745
- @extends Ember.ObjectProxy
11746
- @uses Ember.PromiseProxyMixin
11747
- */
11748
- PromiseObject = Ember.ObjectProxy.extend(Ember.PromiseProxyMixin);
11749
-
11750
- function promiseObject(promise, label) {
11751
- return PromiseObject.create({
11752
- promise: Promise.cast(promise, label)
11753
- });
11754
- }
11755
-
11756
- function promiseArray(promise, label) {
11757
- return PromiseArray.create({
11758
- promise: Promise.cast(promise, label)
11759
- });
11760
- }
11761
11202
 
11762
- function isThenable(object) {
11763
- return object && typeof object.then === 'function';
11764
- }
11765
11203
 
11766
11204
  function serializerFor(container, type, defaultSerializer) {
11767
11205
  return container.lookup('serializer:'+type) ||
@@ -11847,8 +11285,6 @@ define("ember-data/system/store",
11847
11285
  throw new Error('adapter.findMany returned undefined, this was very likely a mistake');
11848
11286
  }
11849
11287
 
11850
- var guardedPromise;
11851
-
11852
11288
  promise = Promise.cast(promise, label);
11853
11289
  promise = _guard(promise, _bind(_objectIsAlive, store));
11854
11290
 
@@ -11876,7 +11312,7 @@ define("ember-data/system/store",
11876
11312
  Ember.assert("The response from a findHasMany must be an Array, not " + Ember.inspect(payload), Ember.typeOf(payload) === 'array');
11877
11313
 
11878
11314
  var records = store.pushMany(relationship.type, payload);
11879
- record.updateHasMany(relationship.key, records);
11315
+ return records;
11880
11316
  }, null, "DS: Extract payload of " + record + " : hasMany " + relationship.type);
11881
11317
  }
11882
11318
 
@@ -11892,8 +11328,6 @@ define("ember-data/system/store",
11892
11328
  return promise.then(function(adapterPayload) {
11893
11329
  var payload = serializer.extract(store, relationship.type, adapterPayload, null, 'findBelongsTo');
11894
11330
  var record = store.push(relationship.type, payload);
11895
-
11896
- record.updateBelongsTo(relationship.key, record);
11897
11331
  return record;
11898
11332
  }, null, "DS: Extract payload of " + record + " : " + relationship.type);
11899
11333
  }
@@ -11969,10 +11403,30 @@ define("ember-data/system/store",
11969
11403
  }, label);
11970
11404
  }
11971
11405
 
11972
- __exports__.Store = Store;
11973
- __exports__.PromiseArray = PromiseArray;
11974
- __exports__.PromiseObject = PromiseObject;
11406
+ function setupRelationships(store, record, data) {
11407
+ var type = record.constructor;
11408
+
11409
+ type.eachRelationship(function(key, descriptor) {
11410
+ var kind = descriptor.kind;
11411
+ var value = data[key];
11412
+ var relationship = record._relationships[key];
11975
11413
 
11414
+ if (data.links && data.links[key]) {
11415
+ relationship.updateLink(data.links[key]);
11416
+ }
11417
+
11418
+ if (kind === 'belongsTo') {
11419
+ if (value === undefined) {
11420
+ return;
11421
+ }
11422
+ relationship.setRecord(value);
11423
+ } else if (kind === 'hasMany' && value) {
11424
+ relationship.updateRecordsFromAdapter(value);
11425
+ }
11426
+ });
11427
+ }
11428
+
11429
+ __exports__.Store = Store;
11976
11430
  __exports__["default"] = Store;
11977
11431
  });
11978
11432
  define("ember-data/transforms",