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
- define("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});define("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)}});define("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});define("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});define("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});define("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,m,p,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 T=t.PromiseObject;var A=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 L=o.RecordArray;var j=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=m.ActiveModelAdapter;var G=m.ActiveModelSerializer;var Y=p.Transform;var Z=p.DateTransform;var er=p.NumberTransform;var rr=p.StringTransform;var tr=p.BooleanTransform;var ir=v.hasMany;var ar=v.belongsTo;var nr=b["default"];var sr=g["default"];E.Store=_;E.PromiseArray=F;E.PromiseObject=T;E.Model=A;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=L;E.FilteredRecordArray=j;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});define("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});define("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")}})});define("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)}}});define("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});define("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})})});define("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}});define("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)}});define("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")}});define("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")}});define("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)}});define("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});define("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});define("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}})});define("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 m=o.call(i[s],function(e){return f.normalize(l,e,s)},this);if(h){n=m}else{e.pushMany(c,m)}}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)}}})});define("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)}});define("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});define("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});define("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 m={};var p={};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 m.createChange(e,r,t,i)}else if(n==="manyToMany"){return p.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};p.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};m.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};m.maintainInvariant=function(e,r,t,i){if(e.changeType==="add"&&r.recordIsMaterialized(t)){var a=n(t,i);if(a){var s=m.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)})}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)
2
- })}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=m;t.ManyToManyChange=p});define("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});define("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});define("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}})});define("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});define("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});define("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)}});define("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))}})});define("ember-data/system/model/model",["ember-data/system/model/states","ember-data/system/model/errors","ember-data/system/store","exports"],function(e,r,t,i){"use strict";var a=e["default"];var n=r["default"];var s=t.PromiseObject;var o=Ember.get;var d=Ember.set;var u=Ember.merge;var c=Ember.RSVP.Promise;var l=Ember.ArrayPolyfills.forEach;var f;var h=Ember.computed("currentState",function(e,r){return o(o(this,"currentState"),e)}).readOnly();var m=Object.create(null);var p=Object.create(null);function v(e){return p[e]||(p[e]=e.split("."))}function y(e){return m[e]||(m[e]=v(e)[0])}var b=Ember.Object.extend(Ember.Evented,{_recordArrays:undefined,_relationships:undefined,_loadingRecordArrays:undefined,isEmpty:h,isLoading:h,isLoaded:h,isDirty:h,isSaving:h,isDeleted:h,isNew:h,isValid:h,dirtyType:h,isError:false,isReloading:false,clientId:null,id:null,currentState:a.empty,errors:Ember.computed(function(){var e=n.create();e.registerHandlers(this,function(){this.send("becameInvalid")},function(){this.send("becameValid")});return e}).readOnly(),serialize:function(e){var r=o(this,"store");return r.serialize(this,e)},toJSON:function(e){if(!f){f=requireModule("ember-data/serializers/json_serializer")["default"]}var r=f.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=o(this,"currentState");if(!t[e]){this._unhandledEvent(t,e,r)}return t[e](this,r)},transitionTo:function(e){var r=y(e);var t=o(this,"currentState");var i=t;do{if(i.exit){i.exit(this)}i=i.parentState}while(!i.hasOwnProperty(r));var a=v(e);var n=[],s=[],u,c;for(u=0,c=a.length;u<c;u++){i=i[a[u]];if(i.enter){s.push(i)}if(i.setup){n.push(i)}}for(u=0,c=s.length;u<c;u++){s[u].enter(this)}d(this,"currentState",i);for(u=0,c=n.length;u<c;u++){n[u].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=o(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"){d(this,e,null)}else if(r.kind==="hasMany"){var t=this._relationships[e];if(t){t.destroy()}}},this)},updateRecordArrays:function(){this._updatingRecordArraysLater=false;o(this,"store").dataWasUpdated(this.constructor,this)},_preloadData:function(e){var r=this;l.call(Ember.keys(e),function(t){var i=o(e,t);var a=r.constructor.metaForProperty(t);if(a.isRelationship){r._preloadRelationship(t,i)}else{o(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;l.call(r,function(r){r=i._convertStringOrNumberIntoRecord(r,t);o(i,e).pushObject(r)})},_preloadBelongsTo:function(e,r,t){var i=this._convertStringOrNumberIntoRecord(r,t);d(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=o(this,"_data");var r=o(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){d(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=o(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]||[];d(r,"content",Ember.A(t));d(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){d(this,"id",e)},materializeAttributes:function(e){u(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(o(this,"isError")){this._inFlightAttributes={};d(this,"isError",false)}if(!o(this,"isValid")){this._inFlightAttributes={}}this.send("rolledBack");this.suspendRelationshipObservers(function(){this.notifyPropertyChange("data")})},toStringExtension:function(){return o(this,"id")},suspendRelationshipObservers:function(e,r){var t=o(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 s.create({promise:r.promise})},reload:function(){d(this,"isReloading",true);var e=this;var r="DS: Model#reload of "+this;var t=new c(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 s.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=o(this,"errors");function t(t){if(e[t]){r.add(t,e[t])}}this.eachAttribute(t);this.eachRelationship(t)},adapterDidError:function(){this.send("becameError");d(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){}});b.reopenClass({_create:b.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.")}});i["default"]=b});define("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});define("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}});define("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});define("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")}})});define("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")})});define("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}})});define("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()}})});define("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});define("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});define("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 m=i.isSyncRelationship;function p(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 m=i[e];if(!o(m)){var p=this.constructor.inverseFor(e);if(p&&p.kind==="belongsTo"){s(m,p.name,this)}l=a.findById(m.constructor,m.get("id"))||d.cast(m,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 p(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")&&m(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});define("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;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))
3
- }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)}})});define("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 m=this;if(h&&f){if(h.kind==="belongsTo"){u(f,function(e){o(e,h.name,m)})}}d=r.findMany(m,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});define("ember-data/system/store",["ember-data/system/adapter","ember-inflector/system/string","exports"],function(e,r,t){"use strict";var i=e.InvalidError;var a=e.Adapter;var n=r.singularize;var s=Ember.get;var o=Ember.set;var d=Ember.run.once;var u=Ember.isNone;var c=Ember.EnumerableUtils.forEach;var l=Ember.EnumerableUtils.indexOf;var f=Ember.EnumerableUtils.map;var h=Ember.RSVP.Promise;var m=Ember.copy;var p,v,y,b,g;var R=Ember.String.camelize;function E(e){return e==null?null:e+""}p=Ember.Object.extend({init:function(){if(!b){b=requireModule("ember-data/system/record_array_manager")["default"]}this.typeMaps={};this.recordArrayManager=b.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=s(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(u(i.id)){i.id=this._generateId(t)}i.id=E(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,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(s(n,"isEmpty")){i=this.scheduleFetch(n)}else if(s(n,"isLoading")){i=n._loadingPromise}return x(i||n,"DS: Store#findById "+a+" with id: "+r)},findByIds:function(e,r){var t=this;var i="DS: Store#findByIds "+e;return C(Ember.RSVP.all(f(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=s(e,"id");var i=this.adapterFor(r);var a=N(i,this,r,t,e);return a},scheduleFetchMany:function(e){return Ember.RSVP.all(f(e,this.scheduleFetch,this))},scheduleFetch:function(e){var r=e.constructor;if(u(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){c(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 l(e){return function(r){f(e,r)}}function f(e,t){c(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);c(h,function(a){var n=Ember.A(a);var s=n.mapBy("id");if(s.length>1){$(i,t,e,s,n).then(d).then(u(n)).then(null,l(n))}else if(s.length===1){var c=Ember.A(r).findBy("record",a[0]);o(c)}else{}})}else{c(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=s(e,"id");return this.scheduleFetch(e)},hasRecordForId:function(e,r){var t=this.modelFor(e);var i=E(r);return!!this.typeMapFor(t).idToRecord[i]},recordForId:function(e,r){var t=this.modelFor(e);var i=E(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){c(s,function(e){this.recordArrayManager.registerWaitingRecordArray(e,o)},this);i.resolve(this.scheduleFetchMany(s,e))}else{if(i){i.resolve()}o.set("isLoaded",true);d(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(K(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 C(U(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;o(r,"isUpdating",true);return C(j(t,this,e,i))},didUpdateAll:function(e){var r=this.typeMapFor(e).findAllCache;o(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||h.cast(n);return C(i.then(function(){return n},null,"DS: Store#filter of "+e))},recordIsLoaded:function(e,r){if(!this.hasRecordForId(e,r)){return false}return!s(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]);d(this,"flushPendingSave")},flushPendingSave:function(){var e=this._pendingSave.slice();this._pendingSave=[];c(e,function(e){var r=e[0],t=e[1];var i=this.adapterFor(r.constructor);var a;if(s(r,"currentState.stateName")==="root.deleted.saved"){return t.resolve(r)}else if(s(r,"isNew")){a="createRecord"}else if(s(r,"isDeleted")){a="deleteRecord"}else{a="updateRecord"}t.resolve(B(i,this,a,r))},this)},didSaveRecord:function(e,r){if(r){r=_(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=s(e,"id");var i=E(r.id);this.typeMapFor(e.constructor).idToRecord[i]=e;o(e,"id",i)},typeMapFor:function(e){var r=s(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=E(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=_(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=O(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 f(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=s(e,"id");e.updateRecordArrays();if(i){delete t.idToRecord[i]}var a=l(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||s(this,"defaultAdapter")},serializerFor:function(e){e=this.modelFor(e);var r=this.adapterFor(e);return k(this.container,e.typeKey,r&&r.defaultSerializer)},willDestroy:function(){var e=this.typeMaps;var r=Ember.keys(e);var t=this;var i=f(r,a);this.recordArrayManager.destroy();c(i,this.unloadAll,this);function a(r){return e[r]["type"]}},_normalizeTypeKey:function(e){return R(n(e))}});function _(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"){F(e,t,r,a,s)}else if(n==="hasMany"){A(e,t,r,a,s);z(i,r,s)}});return t}function F(e,r,t,i,a){if(!g){g=requireModule("ember-data/system/model")["Model"]}if(u(a)||a instanceof g){return}var n;if(typeof a==="number"||typeof a==="string"){n=T(i,t,r);r[t]=e.recordForId(n,a)}else if(typeof a==="object"){r[t]=e.recordForId(a.type,a.id)}}function T(e,r,t){if(e.options.polymorphic){return t[r+"Type"]}else{return e.type}}function A(e,r,t,i,a){for(var n=0,s=a.length;n<s;n++){F(e,a,n,i,a[n])}}function z(e,r,t){if(e){var i=S(Ember.A(t),e.get(r).filterBy("isNew"));Ember.A(t).pushObjects(i)}}function S(e,r){var t=e.mapBy("id");return r.reject(function(e){return Ember.A(t).contains(e.id)})}y=Ember.ArrayProxy.extend(Ember.PromiseProxyMixin);v=Ember.ObjectProxy.extend(Ember.PromiseProxyMixin);function x(e,r){return v.create({promise:h.cast(e,r)})}function C(e,r){return y.create({promise:h.cast(e,r)})}function M(e){return e&&typeof e.then==="function"}function k(e,r,t){return e.lookup("serializer:"+r)||e.lookup("serializer:application")||e.lookup("serializer:"+t)||e.lookup("serializer:-default")}function O(e){return e.lookup("serializer:application")||e.lookup("serializer:-default")}function D(e,r){var t=e.serializer;var i=e.defaultSerializer;var a=e.container;if(a&&t===undefined){t=k(a,r.typeKey,i)}if(t===null||t===undefined){t={extract:function(e,r,t){return t}}}return t}function P(e){return!(s(e,"isDestroyed")||s(e,"isDestroying"))}function w(e,r){var t=e["finally"](function(){if(!r()){t._subscribers.length=0}});return t}function I(e){var r=Array.prototype.slice.call(arguments,1);return function(){return e.apply(undefined,r)}}function N(e,r,t,i,a){var n=e.find(r,t,i,a);var s=D(e,t);var o="DS: Handle Adapter#find of "+t+" with id: "+i;n=h.cast(n,o);n=w(n,I(P,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 $(e,r,t,i,a){var n=e.findMany(r,t,i,a);var s=D(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=h.cast(n,o);n=w(n,I(P,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 K(e,r,t,i,a){var n=e.findHasMany(r,t,i,a);var s=D(e,a.type);var o="DS: Handle Adapter#findHasMany of "+t+" : "+a.type;n=h.cast(n,o);n=w(n,I(P,r));n=w(n,I(P,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=D(e,a.type);var o="DS: Handle Adapter#findBelongsTo of "+t+" : "+a.type;n=h.cast(n,o);n=w(n,I(P,r));n=w(n,I(P,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 j(e,r,t,i){var a=e.findAll(r,t,i);var n=D(e,t);var s="DS: Handle Adapter#findAll of "+t;a=h.cast(a,s);a=w(a,I(P,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 U(e,r,t,i,a){var n=e.findQuery(r,t,i,a);var s=D(e,t);var o="DS: Handle Adapter#findQuery of "+t;n=h.cast(n,o);n=w(n,I(P,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 B(e,r,t,a){var n=a.constructor;var o=e[t](r,n,a);var d=D(e,n);var u="DS: Extract and notify about "+t+" completion of "+a;o=h.cast(o,u);o=w(o,I(P,r));o=w(o,I(P,a));return o.then(function(e){var i;if(e){i=d.extract(r,n,e,s(a,"id"),t)}else{i=e}r.didSaveRecord(a,i);return a},function(e){if(e instanceof i){r.recordWasInvalid(a,e.errors)}else{r.recordWasError(a,e)}throw e},u)}t.Store=p;t.PromiseArray=y;t.PromiseObject=v;t["default"]=p});define("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});define("ember-data/transforms/base",["exports"],function(e){"use strict";e["default"]=Ember.Object.extend({serialize:Ember.required(),deserialize:Ember.required()})});define("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)}})});define("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}}})});define("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)}})});define("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)}})});define("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});define("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)}}});define("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)});define("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});define("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"]}});define("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,m,p,v,y,b,g;m=r.test(e);p=a.test(e);f="";if(m){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=p?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});define("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});
1
+ define("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});define("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)}});define("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});define("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 d=Ember.String.decamelize,u=Ember.String.underscore;var c=a.extend({defaultSerializer:"-active-model",pathForType:function(e){var r=d(e);var t=u(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"]=c});define("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});define("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,d,u,c,l,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=d["default"];var L=u.RESTAdapter;var j=u.FixtureAdapter;var K=c["default"];var B=l["default"];var N=h["default"];var U=p.ActiveModelAdapter;var V=p.ActiveModelSerializer;var H=m.Transform;var q=m.DateTransform;var W=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=q;A.StringTransform=Q;A.NumberTransform=W;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});define("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});define("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")}})});define("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)}}});define("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});define("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})})});define("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}});define("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)}});define("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")}});define("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")}});define("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)}});define("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});define("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 d;if(n){d=this.keyForRelationship(a,i.kind);if(!o){t[d]=null}else{t[d]=r(o,"id")}}else if(s){d=this.keyForAttribute(a);if(!o){t[d]=null}else{t[d]=o.serialize({includeId:true});this.removeEmbeddedForeignKey(e,o,i,t[d])}}},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"){d(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 d=a.normalize(s,t,null);e.push(s,d);n.push({id:d[o],type:i})});a[i]=n;return a}function d(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});define("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 d=this._getMappedKey(i);if(d===i&&this.keyForAttribute){d=this.keyForAttribute(i)}t[d]=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}})});define("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 d=r.singularize;function u(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 d in a){var c=this.typeForRoot(d);var l=e.modelFor(c);var f=l.typeKey===s;var h=a[d];if(f&&Ember.typeOf(h)!=="array"){o=this.normalize(r,h,d);continue}n.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 c=f&&u(r.id)===i;if(s||c){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 d=o;var u=false;if(o.charAt(0)==="_"){u=true;d=o.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=s.call(i[o],function(e){return f.normalize(l,e,o)},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 o=e.serializerFor(n);var d=s.call(Ember.makeArray(t[i]),function(e){return o.normalize(n,e,i)},this);e.pushMany(a,d)}},typeForRoot:function(e){return o(d(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)}}})});define("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)}});define("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});define("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});define("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});define("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}})});define("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});define("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});define("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)}});define("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")
2
+ }},clear:function(){if(r(this,"isEmpty")){return}r(this,"content").clear();this.enumerableContentDidChange();this.trigger("becameValid")},has:function(e){return!t(this.errorsFor(e))}})});define("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,t,i,a){"use strict";var n=e["default"];var s=r["default"];var o=t.PromiseObject;var d=i.createRelationshipFor;var u=Ember.get;var c=Ember.set;var l=Ember.merge;var f=Ember.RSVP.Promise;var h=Ember.ArrayPolyfills.forEach;var p=Ember.ArrayPolyfills.map;var m;var y=Ember.computed("currentState",function(e,r){return u(u(this,"currentState"),e)}).readOnly();var v=Object.create(null);var b=Object.create(null);function g(e){return b[e]||(b[e]=e.split("."))}function E(e){return v[e]||(v[e]=g(e)[0])}var R=Ember.Object.extend(Ember.Evented,{_recordArrays:undefined,_relationships:undefined,_loadingRecordArrays:undefined,isEmpty:y,isLoading:y,isLoaded:y,isDirty:y,isSaving:y,isDeleted:y,isNew:y,isValid:y,dirtyType:y,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=u(this,"store");return r.serialize(this,e)},toJSON:function(e){if(!m){m=requireModule("ember-data/serializers/json_serializer")["default"]}var r=m.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=u(this,"currentState");if(!t[e]){this._unhandledEvent(t,e,r)}return t[e](this,r)},transitionTo:function(e){var r=E(e);var t=u(this,"currentState");var i=t;do{if(i.exit){i.exit(this)}i=i.parentState}while(!i.hasOwnProperty(r));var a=g(e);var n=[],s=[],o,d;for(o=0,d=a.length;o<d;o++){i=i[a[o]];if(i.enter){s.push(i)}if(i.setup){n.push(i)}}for(o=0,d=s.length;o<d;o++){s[o].enter(this)}c(this,"currentState",i);for(o=0,d=n.length;o<d;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=u(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;u(this,"store").dataWasUpdated(this.constructor,this)},_preloadData:function(e){var r=this;h.call(Ember.keys(e),function(t){var i=u(e,t);var a=r.constructor.metaForProperty(t);if(a.isRelationship){r._preloadRelationship(t,i)}else{u(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=p.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=u(this,"_data");var r=u(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){l(this._data,e)},materializeAttribute:function(e,r){this._data[e]=r},rollback:function(){this._attributes={};if(u(this,"isError")){this._inFlightAttributes={};c(this,"isError",false)}if(!u(this,"isValid")){this._inFlightAttributes={}}this.send("rolledBack");this.notifyPropertyChange("data")},toStringExtension:function(){return u(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 o.create({promise:r.promise})},reload:function(){c(this,"isReloading",true);var e=this;var r="DS: Model#reload of "+this;var t=new f(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=u(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){}});R.reopenClass({_create:R.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"]=R});define("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 d=o({dirtyType:"created",isNew:true});d.uncommitted.rolledBack=function(e){e.transitionTo("deleted.saved")};var u=o({dirtyType:"updated"});d.uncommitted.deleteRecord=function(e){e.clearRelationships();e.transitionTo("deleted.saved")};d.uncommitted.rollback=function(e){a.uncommitted.rollback.apply(this,arguments);e.transitionTo("deleted.saved")};d.uncommitted.propertyWasReset=Ember.K;function c(e){}u.inFlight.unloadRecord=c;u.uncommitted.deleteRecord=function(e){e.transitionTo("deleted.uncommitted");e.clearRelationships()};var l={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:d,updated:u},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:c,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}l=f(l,null,"root");e["default"]=l});define("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});define("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,d=a.length;n<d;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});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(c(d(this.filteredRecordArrays.values)),u);o(this._adapterPopulatedRecordArrays,u)}});function d(e){var r=[];var t=Ember.keys(e);for(var i=0;i<t.length;i++){r.push(e[t[i]])}return r}function u(e){e.destroy()}function c(e){var r=e.length;var t=Ember.A();for(var i=0;i<r;i++){t=t.concat(e[i])}return t}});define("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});define("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")}})});define("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")})});define("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}})});define("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()}})});define("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});define("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});define("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});define("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=d(this,r);if(o.length===0){return null}i=o[0].name;a=o[0].kind}function d(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){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,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)}})});define("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});define("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 d=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=d});define("ember-data/system/store",["ember-data/system/adapter","ember-inflector/system/string","ember-data/system/promise_proxies","exports"],function(e,r,t,i){"use strict";var a=e.InvalidError;var n=e.Adapter;var s=r.singularize;var o=t.promiseArray;var d=t.promiseObject;var u=Ember.get;var c=Ember.set;var l=Ember.run.once;var f=Ember.isNone;var h=Ember.EnumerableUtils.forEach;var p=Ember.EnumerableUtils.indexOf;var m=Ember.EnumerableUtils.map;var y=Ember.RSVP.Promise;var v=Ember.copy;var b,g,E;var R=Ember.String.camelize;function A(e){return e==null?null:e+""}b=Ember.Object.extend({init:function(){if(!g){g=requireModule("ember-data/system/record_array_manager")["default"]}this.typeMaps={};this.recordArrayManager=g.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=u(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=v(r)||{};if(f(i.id)){i.id=this._generateId(t)}i.id=A(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,A(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(u(e,"isEmpty")){t=this.scheduleFetch(e)}else if(u(e,"isLoading")){t=e._loadingPromise}return d(t||e,"DS: Store#findByRecord "+e.typeKey+" with id: "+u(e,"id"))},findByIds:function(e,r){var t=this;return o(Ember.RSVP.all(m(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=u(e,"id");var i=this.adapterFor(r);var a=O(i,this,r,t,e);return a},scheduleFetchMany:function(e){return Ember.RSVP.all(m(e,this.scheduleFetch,this))},scheduleFetch:function(e){var r=e.constructor;if(f(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");
3
+ function s(e){e.resolver.resolve(t.fetchRecord(e.record))}function o(e){h(e,function(e){var t=Ember.A(r).findBy("record",e);if(t){var i=t.resolver;i.resolve(e)}})}function d(e){return function r(t){var i=e.without(t);c(i)}}function u(e){return function(r){c(e,r)}}function c(e,t){h(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 l=i.groupRecordsForFindMany(this,n);h(l,function(a){var n=Ember.A(a);var c=n.mapBy("id");if(c.length>1){C(i,t,e,c,n).then(o).then(d(n)).then(null,u(n))}else if(c.length===1){var l=Ember.A(r).findBy("record",a[0]);s(l)}else{}})}else{h(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=u(e,"id");return this.scheduleFetch(e)},hasRecordForId:function(e,r){var t=this.modelFor(e);var i=A(r);return!!this.typeMapFor(t).idToRecord[i]},recordForId:function(e,r){var t=this.modelFor(e);var i=A(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 y.all(m(e,function(e){return r._findByRecord(e)}))},findHasMany:function(e,r,t){var i=this.adapterFor(e.constructor);return w(i,this,e,r,t)},findBelongsTo:function(e,r,t){var i=this.adapterFor(e.constructor);return $(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 o(L(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 o(I(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||y.cast(n);return o(i.then(function(){return n},null,"DS: Store#filter of "+e))},recordIsLoaded:function(e,r){if(!this.hasRecordForId(e,r)){return false}return!u(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]);l(this,"flushPendingSave")},flushPendingSave:function(){var e=this._pendingSave.slice();this._pendingSave=[];h(e,function(e){var r=e[0],t=e[1];var i=this.adapterFor(r.constructor);var a;if(u(r,"currentState.stateName")==="root.deleted.saved"){return t.resolve(r)}else if(u(r,"isNew")){a="createRecord"}else if(u(r,"isDeleted")){a="deleteRecord"}else{a="updateRecord"}t.resolve(j(i,this,a,r))},this)},didSaveRecord:function(e,r){if(r){r=_(this,e.constructor,r,e);K(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=u(e,"id");var i=A(r.id);this.typeMapFor(e.constructor).idToRecord[i]=e;c(e,"id",i)},typeMapFor:function(e){var r=u(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=A(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=_(this,i,r);this._load(i,r,t);var a=this.recordForId(i,r.id);K(this,a,r);return a},pushPayload:function(e,r){var t;var i;if(!r){i=e;t=S(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=u(e,"id");e.updateRecordArrays();if(i){delete t.idToRecord[i]}var a=p(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||u(this,"defaultAdapter")},serializerFor:function(e){e=this.modelFor(e);var r=this.adapterFor(e);return T(this.container,e.typeKey,r&&r.defaultSerializer)},willDestroy:function(){var e=this.typeMaps;var r=Ember.keys(e);var t=m(r,i);this.recordArrayManager.destroy();h(t,this.unloadAll,this);function i(r){return e[r]["type"]}},_normalizeTypeKey:function(e){return R(s(e))}});function _(e,r,t,i){r.eachRelationship(function(r,i){var a=i.kind;var n=t[r];if(a==="belongsTo"){F(e,t,r,i,n)}else if(a==="hasMany"){x(e,t,r,i,n)}});return t}function F(e,r,t,i,a){if(!E){E=requireModule("ember-data/system/model")["Model"]}if(f(a)||a instanceof E){return}var n;if(typeof a==="number"||typeof a==="string"){n=z(i,t,r);r[t]=e.recordForId(n,a)}else if(typeof a==="object"){r[t]=e.recordForId(a.type,a.id)}}function z(e,r,t){if(e.options.polymorphic){return t[r+"Type"]}else{return e.type}}function x(e,r,t,i,a){if(!Ember.isArray(a)){return}for(var n=0,s=a.length;n<s;n++){F(e,a,n,i,a[n])}}function T(e,r,t){return e.lookup("serializer:"+r)||e.lookup("serializer:application")||e.lookup("serializer:"+t)||e.lookup("serializer:-default")}function S(e){return e.lookup("serializer:application")||e.lookup("serializer:-default")}function k(e,r){var t=e.serializer;var i=e.defaultSerializer;var a=e.container;if(a&&t===undefined){t=T(a,r.typeKey,i)}if(t===null||t===undefined){t={extract:function(e,r,t){return t}}}return t}function M(e){return!(u(e,"isDestroyed")||u(e,"isDestroying"))}function D(e,r){var t=e["finally"](function(){if(!r()){t._subscribers.length=0}});return t}function P(e){var r=Array.prototype.slice.call(arguments,1);return function(){return e.apply(undefined,r)}}function O(e,r,t,i,a){var n=e.find(r,t,i,a);var s=k(e,t);var o="DS: Handle Adapter#find of "+t+" with id: "+i;n=y.cast(n,o);n=D(n,P(M,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 C(e,r,t,i,a){var n=e.findMany(r,t,i,a);var s=k(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=y.cast(n,o);n=D(n,P(M,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 w(e,r,t,i,a){var n=e.findHasMany(r,t,i,a);var s=k(e,a.type);var o="DS: Handle Adapter#findHasMany of "+t+" : "+a.type;n=y.cast(n,o);n=D(n,P(M,r));n=D(n,P(M,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 $(e,r,t,i,a){var n=e.findBelongsTo(r,t,i,a);var s=k(e,a.type);var o="DS: Handle Adapter#findBelongsTo of "+t+" : "+a.type;n=y.cast(n,o);n=D(n,P(M,r));n=D(n,P(M,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 I(e,r,t,i){var a=e.findAll(r,t,i);var n=k(e,t);var s="DS: Handle Adapter#findAll of "+t;a=y.cast(a,s);a=D(a,P(M,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 L(e,r,t,i,a){var n=e.findQuery(r,t,i,a);var s=k(e,t);var o="DS: Handle Adapter#findQuery of "+t;n=y.cast(n,o);n=D(n,P(M,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 j(e,r,t,i){var n=i.constructor;var s=e[t](r,n,i);var o=k(e,n);var d="DS: Extract and notify about "+t+" completion of "+i;s=y.cast(s,d);s=D(s,P(M,r));s=D(s,P(M,i));return s.then(function(e){var a;if(e){a=o.extract(r,n,e,u(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},d)}function K(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)}})}i.Store=b;i["default"]=b});define("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});define("ember-data/transforms/base",["exports"],function(e){"use strict";e["default"]=Ember.Object.extend({serialize:Ember.required(),deserialize:Ember.required()})});define("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)}})});define("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}}})});define("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)}})});define("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)}})});define("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});define("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)}}});define("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)});define("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});define("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"]}});define("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,y,v,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()}y=this.rules.uncountable[c]||this.rules.uncountable[h];if(y){return e}v=s&&(s[c]||s[h]);if(v){if(s[c]){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];d=o[1];u=e.replace(g,d);return u}};e["default"]=o});define("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});
@@ -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;
@@ -955,15 +941,16 @@ define("ember-data/adapters/fixture_adapter",
955
941
  var adapter = this;
956
942
 
957
943
  return new Ember.RSVP.Promise(function(resolve) {
944
+ var value = Ember.copy(callback.call(context), true);
958
945
  if (get(adapter, 'simulateRemoteResponse')) {
959
946
  // Schedule with setTimeout
960
947
  Ember.run.later(function() {
961
- resolve(callback.call(context));
948
+ resolve(value);
962
949
  }, get(adapter, 'latency'));
963
950
  } else {
964
951
  // Asynchronous, but at the of the runloop with zero latency
965
952
  Ember.run.schedule('actions', null, function() {
966
- resolve(callback.call(context));
953
+ resolve(value);
967
954
  });
968
955
  }
969
956
  }, "DS: FixtureAdapter#simulateRemoteCall");
@@ -978,7 +965,8 @@ define("ember-data/adapters/rest_adapter",
978
965
  @module ember-data
979
966
  */
980
967
 
981
- var Adapter = __dependency1__["default"];
968
+ var Adapter = __dependency1__.Adapter;
969
+ var InvalidError = __dependency1__.InvalidError;
982
970
  var get = Ember.get;
983
971
  var forEach = Ember.ArrayPolyfills.forEach;
984
972
 
@@ -1365,7 +1353,7 @@ define("ember-data/adapters/rest_adapter",
1365
1353
  @param {String} url
1366
1354
  @return {Promise} promise
1367
1355
  */
1368
- findHasMany: function(store, record, url) {
1356
+ findHasMany: function(store, record, url, relationship) {
1369
1357
  var host = get(this, 'host');
1370
1358
  var id = get(record, 'id');
1371
1359
  var type = record.constructor.typeKey;
@@ -1404,7 +1392,7 @@ define("ember-data/adapters/rest_adapter",
1404
1392
  @param {String} url
1405
1393
  @return {Promise} promise
1406
1394
  */
1407
- findBelongsTo: function(store, record, url) {
1395
+ findBelongsTo: function(store, record, url, relationship) {
1408
1396
  var id = get(record, 'id');
1409
1397
  var type = record.constructor.typeKey;
1410
1398
 
@@ -1695,9 +1683,10 @@ define("ember-data/adapters/rest_adapter",
1695
1683
 
1696
1684
  @method ajaxError
1697
1685
  @param {Object} jqXHR
1686
+ @param {Object} responseText
1698
1687
  @return {Object} jqXHR
1699
1688
  */
1700
- ajaxError: function(jqXHR) {
1689
+ ajaxError: function(jqXHR, responseText) {
1701
1690
  if (jqXHR && typeof jqXHR === 'object') {
1702
1691
  jqXHR.then = null;
1703
1692
  }
@@ -1705,6 +1694,32 @@ define("ember-data/adapters/rest_adapter",
1705
1694
  return jqXHR;
1706
1695
  },
1707
1696
 
1697
+ /**
1698
+ Takes an ajax response, and returns the json payload.
1699
+
1700
+ By default this hook just returns the jsonPayload passed to it.
1701
+ You might want to override it in two cases:
1702
+
1703
+ 1. Your API might return useful results in the request headers.
1704
+ If you need to access these, you can override this hook to copy them
1705
+ from jqXHR to the payload object so they can be processed in you serializer.
1706
+
1707
+
1708
+ 2. Your API might return errors as successful responses with status code
1709
+ 200 and an Errors text or object. You can return a DS.InvalidError from
1710
+ this hook and it will automatically reject the promise and put your record
1711
+ into the invald state.
1712
+
1713
+ @method ajaxError
1714
+ @param {Object} jqXHR
1715
+ @param {Object} jsonPayload
1716
+ @return {Object} jqXHR
1717
+ */
1718
+
1719
+ ajaxSuccess: function(jqXHR, jsonPayload) {
1720
+ return jsonPayload;
1721
+ },
1722
+
1708
1723
  /**
1709
1724
  Takes a URL, an HTTP method and a hash of data, and makes an
1710
1725
  HTTP request.
@@ -1735,12 +1750,17 @@ define("ember-data/adapters/rest_adapter",
1735
1750
  return new Ember.RSVP.Promise(function(resolve, reject) {
1736
1751
  var hash = adapter.ajaxOptions(url, type, options);
1737
1752
 
1738
- hash.success = function(json) {
1739
- Ember.run(null, resolve, json);
1753
+ hash.success = function(json, textStatus, jqXHR) {
1754
+ json = adapter.ajaxSuccess(jqXHR, json);
1755
+ if (json instanceof InvalidError) {
1756
+ Ember.run(null, reject, json);
1757
+ } else {
1758
+ Ember.run(null, resolve, json);
1759
+ }
1740
1760
  };
1741
1761
 
1742
1762
  hash.error = function(jqXHR, textStatus, errorThrown) {
1743
- Ember.run(null, reject, adapter.ajaxError(jqXHR));
1763
+ Ember.run(null, reject, adapter.ajaxError(jqXHR, jqXHR.responseText));
1744
1764
  };
1745
1765
 
1746
1766
  Ember.$.ajax(hash);
@@ -1808,11 +1828,11 @@ define("ember-data/core",
1808
1828
  /**
1809
1829
  @property VERSION
1810
1830
  @type String
1811
- @default '1.0.0-beta.9'
1831
+ @default '1.0.0-beta.10'
1812
1832
  @static
1813
1833
  */
1814
1834
  DS = Ember.Namespace.create({
1815
- VERSION: '1.0.0-beta.9'
1835
+ VERSION: '1.0.0-beta.10'
1816
1836
  });
1817
1837
 
1818
1838
  if (Ember.libraries) {
@@ -2081,15 +2101,13 @@ define("ember-data/serializers",
2081
2101
  __exports__.RESTSerializer = RESTSerializer;
2082
2102
  });
2083
2103
  define("ember-data/serializers/embedded_records_mixin",
2084
- ["ember-inflector","exports"],
2085
- function(__dependency1__, __exports__) {
2104
+ ["exports"],
2105
+ function(__exports__) {
2086
2106
  "use strict";
2087
2107
  var get = Ember.get;
2088
2108
  var forEach = Ember.EnumerableUtils.forEach;
2089
2109
  var camelize = Ember.String.camelize;
2090
2110
 
2091
- var pluralize = __dependency1__.pluralize;
2092
-
2093
2111
  /**
2094
2112
  ## Using Embedded Records
2095
2113
 
@@ -2108,6 +2126,11 @@ define("ember-data/serializers/embedded_records_mixin",
2108
2126
  }
2109
2127
  })
2110
2128
  ```
2129
+ Note that this use of `{embedded: 'always'}` is unrelated to
2130
+ the `{embedded: 'always'}` that is defined as an option on `DS.attr` as part of
2131
+ defining a model while working with the ActiveModelSerializer. Nevertheless,
2132
+ using `{embedded: 'always'}` as an option to DS.attr is not a valid way to setup
2133
+ embedded records.
2111
2134
 
2112
2135
  The `attrs` option for a resource `{embedded: 'always'}` is shorthand for:
2113
2136
 
@@ -2141,7 +2164,11 @@ define("ember-data/serializers/embedded_records_mixin",
2141
2164
 
2142
2165
  ### Model Relationships
2143
2166
 
2144
- Embedded records must have a model defined to be extracted and serialized.
2167
+ Embedded records must have a model defined to be extracted and serialized. Note that
2168
+ when defining any relationships on your model such as `belongsTo` and `hasMany`, you
2169
+ should not both specify `async:true` and also indicate through the serializer's
2170
+ `attrs` attribute that the related model should be embedded. If a model is
2171
+ declared embedded, then do not use `async:true`.
2145
2172
 
2146
2173
  To successfully extract and serialize embedded records the model relationships
2147
2174
  must be setup correcty See the
@@ -2153,9 +2180,9 @@ define("ember-data/serializers/embedded_records_mixin",
2153
2180
 
2154
2181
  ### Example JSON payloads, Models and Serializers
2155
2182
 
2156
- **When customizing a serializer it is imporant to grok what the cusomizations
2157
- are, please read the docs for the methods this mixin provides, in case you need
2158
- to modify to fit your specific needs.**
2183
+ **When customizing a serializer it is important to grok what the customizations
2184
+ are. Please read the docs for the methods this mixin provides, in case you need
2185
+ to modify it to fit your specific needs.**
2159
2186
 
2160
2187
  For example review the docs for each method of this mixin:
2161
2188
  * [normalize](/api/data/classes/DS.EmbeddedRecordsMixin.html#method_normalize)
@@ -2258,7 +2285,6 @@ define("ember-data/serializers/embedded_records_mixin",
2258
2285
  */
2259
2286
  serializeBelongsTo: function(record, json, relationship) {
2260
2287
  var attr = relationship.key;
2261
- var attrs = this.get('attrs');
2262
2288
  if (this.noSerializeOptionSpecified(attr)) {
2263
2289
  this._super(record, json, relationship);
2264
2290
  return;
@@ -2368,7 +2394,6 @@ define("ember-data/serializers/embedded_records_mixin",
2368
2394
  */
2369
2395
  serializeHasMany: function(record, json, relationship) {
2370
2396
  var attr = relationship.key;
2371
- var attrs = this.get('attrs');
2372
2397
  if (this.noSerializeOptionSpecified(attr)) {
2373
2398
  this._super(record, json, relationship);
2374
2399
  return;
@@ -2443,8 +2468,6 @@ define("ember-data/serializers/embedded_records_mixin",
2443
2468
  // checks config for attrs option to serialize records
2444
2469
  noSerializeOptionSpecified: function(attr) {
2445
2470
  var option = this.attrsOption(attr);
2446
- var serializeRecords = this.hasSerializeRecordsOption(attr);
2447
- var serializeIds = this.hasSerializeIdsOption(attr);
2448
2471
  return !(option && (option.serialize || option.embedded));
2449
2472
  },
2450
2473
 
@@ -2471,7 +2494,12 @@ define("ember-data/serializers/embedded_records_mixin",
2471
2494
  if (serializer.hasDeserializeRecordsOption(key)) {
2472
2495
  var embeddedType = store.modelFor(relationship.type.typeKey);
2473
2496
  if (relationship.kind === "hasMany") {
2474
- extractEmbeddedHasMany(store, key, embeddedType, partial);
2497
+ if (relationship.options.polymorphic) {
2498
+ extractEmbeddedHasManyPolymorphic(store, key, partial);
2499
+ }
2500
+ else {
2501
+ extractEmbeddedHasMany(store, key, embeddedType, partial);
2502
+ }
2475
2503
  }
2476
2504
  if (relationship.kind === "belongsTo") {
2477
2505
  extractEmbeddedBelongsTo(store, key, embeddedType, partial);
@@ -2501,6 +2529,28 @@ define("ember-data/serializers/embedded_records_mixin",
2501
2529
  return hash;
2502
2530
  }
2503
2531
 
2532
+ function extractEmbeddedHasManyPolymorphic(store, key, hash) {
2533
+ if (!hash[key]) {
2534
+ return hash;
2535
+ }
2536
+
2537
+ var ids = [];
2538
+
2539
+ forEach(hash[key], function(data) {
2540
+ var typeKey = data.type;
2541
+ var embeddedSerializer = store.serializerFor(typeKey);
2542
+ var embeddedType = store.modelFor(typeKey);
2543
+ var primaryKey = get(embeddedSerializer, 'primaryKey');
2544
+
2545
+ var embeddedRecord = embeddedSerializer.normalize(embeddedType, data, null);
2546
+ store.push(embeddedType, embeddedRecord);
2547
+ ids.push({ id: embeddedRecord[primaryKey], type: typeKey });
2548
+ });
2549
+
2550
+ hash[key] = ids;
2551
+ return hash;
2552
+ }
2553
+
2504
2554
  function extractEmbeddedBelongsTo(store, key, embeddedType, hash) {
2505
2555
  if (!hash[key]) {
2506
2556
  return hash;
@@ -2518,12 +2568,10 @@ define("ember-data/serializers/embedded_records_mixin",
2518
2568
  __exports__["default"] = EmbeddedRecordsMixin;
2519
2569
  });
2520
2570
  define("ember-data/serializers/json_serializer",
2521
- ["ember-data/system/changes","exports"],
2522
- function(__dependency1__, __exports__) {
2571
+ ["exports"],
2572
+ function(__exports__) {
2523
2573
  "use strict";
2524
- var RelationshipChange = __dependency1__.RelationshipChange;
2525
2574
  var get = Ember.get;
2526
- var set = Ember.set;
2527
2575
  var isNone = Ember.isNone;
2528
2576
  var map = Ember.ArrayPolyfills.map;
2529
2577
  var merge = Ember.merge;
@@ -2633,7 +2681,7 @@ define("ember-data/serializers/json_serializer",
2633
2681
  @return {Object} data The transformed data object
2634
2682
  */
2635
2683
  applyTransforms: function(type, data) {
2636
- type.eachTransformedAttribute(function(key, type) {
2684
+ type.eachTransformedAttribute(function applyTransform(key, type) {
2637
2685
  if (!data.hasOwnProperty(key)) { return; }
2638
2686
 
2639
2687
  var transform = this.transformFor(type);
@@ -2719,7 +2767,7 @@ define("ember-data/serializers/json_serializer",
2719
2767
  @private
2720
2768
  */
2721
2769
  normalizeAttributes: function(type, hash) {
2722
- var payloadKey, key;
2770
+ var payloadKey;
2723
2771
 
2724
2772
  if (this.keyForAttribute) {
2725
2773
  type.eachAttribute(function(key) {
@@ -2738,7 +2786,7 @@ define("ember-data/serializers/json_serializer",
2738
2786
  @private
2739
2787
  */
2740
2788
  normalizeRelationships: function(type, hash) {
2741
- var payloadKey, key;
2789
+ var payloadKey;
2742
2790
 
2743
2791
  if (this.keyForRelationship) {
2744
2792
  type.eachRelationship(function(key, relationship) {
@@ -3157,7 +3205,7 @@ define("ember-data/serializers/json_serializer",
3157
3205
  payloadKey = this.keyForRelationship(key, "hasMany");
3158
3206
  }
3159
3207
 
3160
- var relationshipType = RelationshipChange.determineRelationshipType(record.constructor, relationship);
3208
+ var relationshipType = record.constructor.determineRelationshipType(relationship);
3161
3209
 
3162
3210
  if (relationshipType === 'manyToNone' || relationshipType === 'manyToMany') {
3163
3211
  json[payloadKey] = get(record, key).mapBy('id');
@@ -3566,7 +3614,6 @@ define("ember-data/serializers/rest_serializer",
3566
3614
 
3567
3615
  var JSONSerializer = __dependency1__["default"];
3568
3616
  var get = Ember.get;
3569
- var set = Ember.set;
3570
3617
  var forEach = Ember.ArrayPolyfills.forEach;
3571
3618
  var map = Ember.ArrayPolyfills.map;
3572
3619
  var camelize = Ember.String.camelize;
@@ -4247,7 +4294,7 @@ define("ember-data/serializers/rest_serializer",
4247
4294
 
4248
4295
  /**
4249
4296
  You can use this method to customize the root keys serialized into the JSON.
4250
- By default the REST Serializer sends the typeKey of a model, whih is a camelized
4297
+ By default the REST Serializer sends the typeKey of a model, which is a camelized
4251
4298
  version of the name.
4252
4299
 
4253
4300
  For example, your server may expect underscored root objects.
@@ -4324,8 +4371,6 @@ define("ember-data/system/adapter",
4324
4371
  */
4325
4372
 
4326
4373
  var get = Ember.get;
4327
- var set = Ember.set;
4328
- var map = Ember.ArrayPolyfills.map;
4329
4374
 
4330
4375
  var errorProps = [
4331
4376
  'description',
@@ -4782,463 +4827,6 @@ define("ember-data/system/adapter",
4782
4827
  __exports__.Adapter = Adapter;
4783
4828
  __exports__["default"] = Adapter;
4784
4829
  });
4785
- define("ember-data/system/changes",
4786
- ["ember-data/system/changes/relationship_change","exports"],
4787
- function(__dependency1__, __exports__) {
4788
- "use strict";
4789
- /**
4790
- @module ember-data
4791
- */
4792
-
4793
- var RelationshipChange = __dependency1__.RelationshipChange;
4794
- var RelationshipChangeAdd = __dependency1__.RelationshipChangeAdd;
4795
- var RelationshipChangeRemove = __dependency1__.RelationshipChangeRemove;
4796
- var OneToManyChange = __dependency1__.OneToManyChange;
4797
- var ManyToNoneChange = __dependency1__.ManyToNoneChange;
4798
- var OneToOneChange = __dependency1__.OneToOneChange;
4799
- var ManyToManyChange = __dependency1__.ManyToManyChange;
4800
-
4801
- __exports__.RelationshipChange = RelationshipChange;
4802
- __exports__.RelationshipChangeAdd = RelationshipChangeAdd;
4803
- __exports__.RelationshipChangeRemove = RelationshipChangeRemove;
4804
- __exports__.OneToManyChange = OneToManyChange;
4805
- __exports__.ManyToNoneChange = ManyToNoneChange;
4806
- __exports__.OneToOneChange = OneToOneChange;
4807
- __exports__.ManyToManyChange = ManyToManyChange;
4808
- });
4809
- define("ember-data/system/changes/relationship_change",
4810
- ["ember-data/system/model/model","ember-data/system/relationship-meta","exports"],
4811
- function(__dependency1__, __dependency2__, __exports__) {
4812
- "use strict";
4813
- /**
4814
- @module ember-data
4815
- */
4816
-
4817
- var Model = __dependency1__["default"];
4818
- var isSyncRelationship = __dependency2__.isSyncRelationship;
4819
-
4820
- var get = Ember.get;
4821
- var set = Ember.set;
4822
- var forEach = Ember.EnumerableUtils.forEach;
4823
-
4824
- /**
4825
- @class RelationshipChange
4826
- @namespace DS
4827
- @private
4828
- @constructor
4829
- */
4830
- var RelationshipChange = function(options) {
4831
- this.parentRecord = options.parentRecord;
4832
- this.childRecord = options.childRecord;
4833
- this.firstRecord = options.firstRecord;
4834
- this.firstRecordKind = options.firstRecordKind;
4835
- this.firstRecordName = options.firstRecordName;
4836
- this.secondRecord = options.secondRecord;
4837
- this.secondRecordKind = options.secondRecordKind;
4838
- this.secondRecordName = options.secondRecordName;
4839
- this.changeType = options.changeType;
4840
- this.store = options.store;
4841
-
4842
- this.committed = {};
4843
- };
4844
-
4845
- /**
4846
- @class RelationshipChangeAdd
4847
- @namespace DS
4848
- @private
4849
- @constructor
4850
- */
4851
- function RelationshipChangeAdd(options){
4852
- RelationshipChange.call(this, options);
4853
- }
4854
-
4855
- /**
4856
- @class RelationshipChangeRemove
4857
- @namespace DS
4858
- @private
4859
- @constructor
4860
- */
4861
- function RelationshipChangeRemove(options){
4862
- RelationshipChange.call(this, options);
4863
- }
4864
-
4865
- RelationshipChange.create = function(options) {
4866
- return new RelationshipChange(options);
4867
- };
4868
-
4869
- RelationshipChangeAdd.create = function(options) {
4870
- return new RelationshipChangeAdd(options);
4871
- };
4872
-
4873
- RelationshipChangeRemove.create = function(options) {
4874
- return new RelationshipChangeRemove(options);
4875
- };
4876
-
4877
- var OneToManyChange = {};
4878
- var OneToNoneChange = {};
4879
- var ManyToNoneChange = {};
4880
- var OneToOneChange = {};
4881
- var ManyToManyChange = {};
4882
-
4883
- RelationshipChange._createChange = function(options){
4884
- if (options.changeType === 'add') {
4885
- return RelationshipChangeAdd.create(options);
4886
- }
4887
- if (options.changeType === 'remove') {
4888
- return RelationshipChangeRemove.create(options);
4889
- }
4890
- };
4891
-
4892
- RelationshipChange.determineRelationshipType = function(recordType, knownSide){
4893
- var knownKey = knownSide.key, key, otherKind;
4894
- var knownKind = knownSide.kind;
4895
-
4896
- var inverse = recordType.inverseFor(knownKey);
4897
-
4898
- if (inverse) {
4899
- key = inverse.name;
4900
- otherKind = inverse.kind;
4901
- }
4902
-
4903
- if (!inverse) {
4904
- return knownKind === 'belongsTo' ? 'oneToNone' : 'manyToNone';
4905
- } else {
4906
- if (otherKind === 'belongsTo') {
4907
- return knownKind === 'belongsTo' ? 'oneToOne' : 'manyToOne';
4908
- } else {
4909
- return knownKind === 'belongsTo' ? 'oneToMany' : 'manyToMany';
4910
- }
4911
- }
4912
- };
4913
-
4914
- RelationshipChange.createChange = function(firstRecord, secondRecord, store, options){
4915
- // Get the type of the child based on the child's client ID
4916
- var firstRecordType = firstRecord.constructor, changeType;
4917
- changeType = RelationshipChange.determineRelationshipType(firstRecordType, options);
4918
- if (changeType === 'oneToMany') {
4919
- return OneToManyChange.createChange(firstRecord, secondRecord, store, options);
4920
- } else if (changeType === 'manyToOne') {
4921
- return OneToManyChange.createChange(secondRecord, firstRecord, store, options);
4922
- } else if (changeType === 'oneToNone') {
4923
- return OneToNoneChange.createChange(firstRecord, secondRecord, store, options);
4924
- } else if (changeType === 'manyToNone') {
4925
- return ManyToNoneChange.createChange(firstRecord, secondRecord, store, options);
4926
- } else if (changeType === 'oneToOne') {
4927
- return OneToOneChange.createChange(firstRecord, secondRecord, store, options);
4928
- } else if (changeType === 'manyToMany') {
4929
- return ManyToManyChange.createChange(firstRecord, secondRecord, store, options);
4930
- }
4931
- };
4932
-
4933
- OneToNoneChange.createChange = function(childRecord, parentRecord, store, options) {
4934
- var key = options.key;
4935
- var change = RelationshipChange._createChange({
4936
- parentRecord: parentRecord,
4937
- childRecord: childRecord,
4938
- firstRecord: childRecord,
4939
- store: store,
4940
- changeType: options.changeType,
4941
- firstRecordName: key,
4942
- firstRecordKind: 'belongsTo'
4943
- });
4944
-
4945
- store.addRelationshipChangeFor(childRecord, key, parentRecord, null, change);
4946
-
4947
- return change;
4948
- };
4949
-
4950
- ManyToNoneChange.createChange = function(childRecord, parentRecord, store, options) {
4951
- var key = options.key;
4952
- var change = RelationshipChange._createChange({
4953
- parentRecord: childRecord,
4954
- childRecord: parentRecord,
4955
- secondRecord: childRecord,
4956
- store: store,
4957
- changeType: options.changeType,
4958
- secondRecordName: options.key,
4959
- secondRecordKind: 'hasMany'
4960
- });
4961
-
4962
- store.addRelationshipChangeFor(childRecord, key, parentRecord, null, change);
4963
- return change;
4964
- };
4965
-
4966
-
4967
- ManyToManyChange.createChange = function(childRecord, parentRecord, store, options) {
4968
- // If the name of the belongsTo side of the relationship is specified,
4969
- // use that
4970
- // If the type of the parent is specified, look it up on the child's type
4971
- // definition.
4972
- var key = options.key;
4973
-
4974
- var change = RelationshipChange._createChange({
4975
- parentRecord: parentRecord,
4976
- childRecord: childRecord,
4977
- firstRecord: childRecord,
4978
- secondRecord: parentRecord,
4979
- firstRecordKind: 'hasMany',
4980
- secondRecordKind: 'hasMany',
4981
- store: store,
4982
- changeType: options.changeType,
4983
- firstRecordName: key
4984
- });
4985
-
4986
- store.addRelationshipChangeFor(childRecord, key, parentRecord, null, change);
4987
-
4988
- return change;
4989
- };
4990
-
4991
- OneToOneChange.createChange = function(childRecord, parentRecord, store, options) {
4992
- var key;
4993
-
4994
- // If the name of the belongsTo side of the relationship is specified,
4995
- // use that
4996
- // If the type of the parent is specified, look it up on the child's type
4997
- // definition.
4998
- if (options.parentType) {
4999
- key = options.parentType.inverseFor(options.key).name;
5000
- } else if (options.key) {
5001
- key = options.key;
5002
- } else {
5003
- }
5004
-
5005
- var change = RelationshipChange._createChange({
5006
- parentRecord: parentRecord,
5007
- childRecord: childRecord,
5008
- firstRecord: childRecord,
5009
- secondRecord: parentRecord,
5010
- firstRecordKind: 'belongsTo',
5011
- secondRecordKind: 'belongsTo',
5012
- store: store,
5013
- changeType: options.changeType,
5014
- firstRecordName: key
5015
- });
5016
-
5017
- store.addRelationshipChangeFor(childRecord, key, parentRecord, null, change);
5018
-
5019
- return change;
5020
- };
5021
-
5022
- OneToOneChange.maintainInvariant = function(options, store, childRecord, key){
5023
- if (options.changeType === 'add' && store.recordIsMaterialized(childRecord)) {
5024
- var oldParent = get(childRecord, key);
5025
- if (oldParent) {
5026
- var correspondingChange = OneToOneChange.createChange(childRecord, oldParent, store, {
5027
- parentType: options.parentType,
5028
- hasManyName: options.hasManyName,
5029
- changeType: 'remove',
5030
- key: options.key
5031
- });
5032
- store.addRelationshipChangeFor(childRecord, key, options.parentRecord , null, correspondingChange);
5033
- correspondingChange.sync();
5034
- }
5035
- }
5036
- };
5037
-
5038
- OneToManyChange.createChange = function(childRecord, parentRecord, store, options) {
5039
- var key;
5040
-
5041
- // If the name of the belongsTo side of the relationship is specified,
5042
- // use that
5043
- // If the type of the parent is specified, look it up on the child's type
5044
- // definition.
5045
- if (options.parentType) {
5046
- key = options.parentType.inverseFor(options.key).name;
5047
- OneToManyChange.maintainInvariant( options, store, childRecord, key );
5048
- } else if (options.key) {
5049
- key = options.key;
5050
- } else {
5051
- }
5052
-
5053
- var change = RelationshipChange._createChange({
5054
- parentRecord: parentRecord,
5055
- childRecord: childRecord,
5056
- firstRecord: childRecord,
5057
- secondRecord: parentRecord,
5058
- firstRecordKind: 'belongsTo',
5059
- secondRecordKind: 'hasMany',
5060
- store: store,
5061
- changeType: options.changeType,
5062
- firstRecordName: key
5063
- });
5064
-
5065
- store.addRelationshipChangeFor(childRecord, key, parentRecord, change.getSecondRecordName(), change);
5066
-
5067
- return change;
5068
- };
5069
-
5070
- OneToManyChange.maintainInvariant = function(options, store, childRecord, key){
5071
- if (options.changeType === 'add' && childRecord) {
5072
- var oldParent = get(childRecord, key);
5073
- if (oldParent) {
5074
- var correspondingChange = OneToManyChange.createChange(childRecord, oldParent, store, {
5075
- parentType: options.parentType,
5076
- hasManyName: options.hasManyName,
5077
- changeType: 'remove',
5078
- key: options.key
5079
- });
5080
- store.addRelationshipChangeFor(childRecord, key, options.parentRecord, correspondingChange.getSecondRecordName(), correspondingChange);
5081
- correspondingChange.sync();
5082
- }
5083
- }
5084
- };
5085
-
5086
- /**
5087
- @class RelationshipChange
5088
- @namespace DS
5089
- */
5090
- RelationshipChange.prototype = {
5091
- getSecondRecordName: function() {
5092
- var name = this.secondRecordName, parent;
5093
-
5094
- if (!name) {
5095
- parent = this.secondRecord;
5096
- if (!parent) { return; }
5097
-
5098
- var childType = this.firstRecord.constructor;
5099
- var inverse = childType.inverseFor(this.firstRecordName);
5100
- this.secondRecordName = inverse.name;
5101
- }
5102
-
5103
- return this.secondRecordName;
5104
- },
5105
-
5106
- /**
5107
- Get the name of the relationship on the belongsTo side.
5108
-
5109
- @method getFirstRecordName
5110
- @return {String}
5111
- */
5112
- getFirstRecordName: function() {
5113
- return this.firstRecordName;
5114
- },
5115
-
5116
- /**
5117
- @method destroy
5118
- @private
5119
- */
5120
- destroy: function() {
5121
- var childRecord = this.childRecord;
5122
- var belongsToName = this.getFirstRecordName();
5123
- var hasManyName = this.getSecondRecordName();
5124
- var store = this.store;
5125
-
5126
- store.removeRelationshipChangeFor(childRecord, belongsToName, this.parentRecord, hasManyName, this.changeType);
5127
- },
5128
-
5129
- getSecondRecord: function(){
5130
- return this.secondRecord;
5131
- },
5132
-
5133
- /**
5134
- @method getFirstRecord
5135
- @private
5136
- */
5137
- getFirstRecord: function() {
5138
- return this.firstRecord;
5139
- },
5140
-
5141
- coalesce: function(){
5142
- var relationshipPairs = this.store.relationshipChangePairsFor(this.firstRecord);
5143
- forEach(relationshipPairs, function(pair) {
5144
- var addedChange = pair['add'];
5145
- var removedChange = pair['remove'];
5146
- if (addedChange && removedChange) {
5147
- addedChange.destroy();
5148
- removedChange.destroy();
5149
- }
5150
- });
5151
- }
5152
- };
5153
-
5154
- RelationshipChangeAdd.prototype = Ember.create(RelationshipChange.create({}));
5155
- RelationshipChangeRemove.prototype = Ember.create(RelationshipChange.create({}));
5156
-
5157
- RelationshipChangeAdd.prototype.changeType = 'add';
5158
- RelationshipChangeAdd.prototype.sync = function() {
5159
- var secondRecordName = this.getSecondRecordName();
5160
- var firstRecordName = this.getFirstRecordName();
5161
- var firstRecord = this.getFirstRecord();
5162
- var secondRecord = this.getSecondRecord();
5163
-
5164
- //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);
5165
- //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);
5166
-
5167
- if (secondRecord instanceof Model && firstRecord instanceof Model) {
5168
- if (this.secondRecordKind === 'belongsTo') {
5169
- secondRecord.suspendRelationshipObservers(function() {
5170
- set(secondRecord, secondRecordName, firstRecord);
5171
- });
5172
- } else if (this.secondRecordKind === 'hasMany' && isSyncRelationship(secondRecord, secondRecordName)) {
5173
- secondRecord.suspendRelationshipObservers(function() {
5174
- var relationship = get(secondRecord, secondRecordName);
5175
- relationship.addObject(firstRecord);
5176
- });
5177
- }
5178
- }
5179
-
5180
- if (firstRecord instanceof Model && secondRecord instanceof Model && get(firstRecord, firstRecordName) !== secondRecord) {
5181
- if (this.firstRecordKind === 'belongsTo') {
5182
- firstRecord.suspendRelationshipObservers(function() {
5183
- set(firstRecord, firstRecordName, secondRecord);
5184
- });
5185
- } else if (this.firstRecordKind === 'hasMany' && isSyncRelationship(secondRecord, secondRecordName)) {
5186
- firstRecord.suspendRelationshipObservers(function() {
5187
- var relationship = get(firstRecord, firstRecordName);
5188
- relationship.addObject(secondRecord);
5189
- });
5190
- }
5191
- }
5192
- this.coalesce();
5193
- };
5194
-
5195
- RelationshipChangeRemove.prototype.changeType = 'remove';
5196
- RelationshipChangeRemove.prototype.sync = function() {
5197
- var secondRecordName = this.getSecondRecordName();
5198
- var firstRecordName = this.getFirstRecordName();
5199
- var firstRecord = this.getFirstRecord();
5200
- var secondRecord = this.getSecondRecord();
5201
-
5202
- //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);
5203
- //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);
5204
-
5205
- if (secondRecord instanceof Model && firstRecord instanceof Model) {
5206
- if (this.secondRecordKind === 'belongsTo') {
5207
- secondRecord.suspendRelationshipObservers(function() {
5208
- set(secondRecord, secondRecordName, null);
5209
- });
5210
- } else if (this.secondRecordKind === 'hasMany' && isSyncRelationship(secondRecord, secondRecordName)) {
5211
- secondRecord.suspendRelationshipObservers(function() {
5212
- var relationship = get(secondRecord, secondRecordName);
5213
- relationship.removeObject(firstRecord);
5214
- });
5215
- }
5216
- }
5217
-
5218
- if (firstRecord instanceof Model && get(firstRecord, firstRecordName)) {
5219
- if (this.firstRecordKind === 'belongsTo') {
5220
- firstRecord.suspendRelationshipObservers(function() {
5221
- set(firstRecord, firstRecordName, null);
5222
- });
5223
- } else if (this.firstRecordKind === 'hasMany' && isSyncRelationship(firstRecord, firstRecordName)) {
5224
- firstRecord.suspendRelationshipObservers(function() {
5225
- var relationship = get(firstRecord, firstRecordName);
5226
- relationship.removeObject(secondRecord);
5227
- });
5228
- }
5229
- }
5230
-
5231
- this.coalesce();
5232
- };
5233
-
5234
- __exports__.RelationshipChange = RelationshipChange;
5235
- __exports__.RelationshipChangeAdd = RelationshipChangeAdd;
5236
- __exports__.RelationshipChangeRemove = RelationshipChangeRemove;
5237
- __exports__.OneToManyChange = OneToManyChange;
5238
- __exports__.ManyToNoneChange = ManyToNoneChange;
5239
- __exports__.OneToOneChange = OneToOneChange;
5240
- __exports__.ManyToManyChange = ManyToManyChange;
5241
- });
5242
4830
  define("ember-data/system/container_proxy",
5243
4831
  ["exports"],
5244
4832
  function(__exports__) {
@@ -5279,7 +4867,7 @@ define("ember-data/system/container_proxy",
5279
4867
  };
5280
4868
 
5281
4869
  ContainerProxy.prototype.registerDeprecations = function(proxyPairs) {
5282
- var i, proxyPair, deprecated, valid, proxy;
4870
+ var i, proxyPair, deprecated, valid;
5283
4871
 
5284
4872
  for (i = proxyPairs.length; i > 0; i--) {
5285
4873
  proxyPair = proxyPairs[i - 1];
@@ -6173,12 +5761,14 @@ define("ember-data/system/model/errors",
6173
5761
  });
6174
5762
  });
6175
5763
  define("ember-data/system/model/model",
6176
- ["ember-data/system/model/states","ember-data/system/model/errors","ember-data/system/store","exports"],
6177
- function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
5764
+ ["ember-data/system/model/states","ember-data/system/model/errors","ember-data/system/promise_proxies","ember-data/system/relationships/relationship","exports"],
5765
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
6178
5766
  "use strict";
6179
5767
  var RootState = __dependency1__["default"];
6180
5768
  var Errors = __dependency2__["default"];
6181
5769
  var PromiseObject = __dependency3__.PromiseObject;
5770
+ var createRelationshipFor = __dependency4__.createRelationshipFor;
5771
+
6182
5772
  /**
6183
5773
  @module ember-data
6184
5774
  */
@@ -6188,6 +5778,7 @@ define("ember-data/system/model/model",
6188
5778
  var merge = Ember.merge;
6189
5779
  var Promise = Ember.RSVP.Promise;
6190
5780
  var forEach = Ember.ArrayPolyfills.forEach;
5781
+ var map = Ember.ArrayPolyfills.map;
6191
5782
 
6192
5783
  var JSONSerializer;
6193
5784
  var retrieveFromCurrentState = Ember.computed('currentState', function(key, value) {
@@ -6620,6 +6211,12 @@ define("ember-data/system/model/model",
6620
6211
  this._attributes = {};
6621
6212
  this._inFlightAttributes = {};
6622
6213
  this._relationships = {};
6214
+ var model = this;
6215
+ //TODO Move into a getter for better perf
6216
+ this.constructor.eachRelationship(function(key, descriptor) {
6217
+ model._relationships[key] = createRelationshipFor(model, descriptor, model.store);
6218
+ });
6219
+
6623
6220
  },
6624
6221
 
6625
6222
  /**
@@ -6802,13 +6399,11 @@ define("ember-data/system/model/model",
6802
6399
  */
6803
6400
  clearRelationships: function() {
6804
6401
  this.eachRelationship(function(name, relationship) {
6805
- if (relationship.kind === 'belongsTo') {
6806
- set(this, name, null);
6807
- } else if (relationship.kind === 'hasMany') {
6808
- var hasMany = this._relationships[name];
6809
- if (hasMany) { // relationships are created lazily
6810
- hasMany.destroy();
6811
- }
6402
+ var rel = this._relationships[name];
6403
+ if (rel){
6404
+ //TODO(Igor) figure out whether we want to clear or disconnect
6405
+ rel.clear();
6406
+ rel.destroy();
6812
6407
  }
6813
6408
  }, this);
6814
6409
  },
@@ -6823,9 +6418,9 @@ define("ember-data/system/model/model",
6823
6418
  },
6824
6419
 
6825
6420
  /**
6826
- When a find request is triggered on the store, the user can optionally passed in
6421
+ When a find request is triggered on the store, the user can optionally pass in
6827
6422
  attributes and relationships to be preloaded. These are meant to behave as if they
6828
- came back from the server, expect the user obtained them out of band and is informing
6423
+ came back from the server, except the user obtained them out of band and is informing
6829
6424
  the store of their existence. The most common use case is for supporting client side
6830
6425
  nested URLs, such as `/posts/1/comments/2` so the user can do
6831
6426
  `store.find('comment', 2, {post:1})` without having to fetch the post.
@@ -6864,15 +6459,20 @@ define("ember-data/system/model/model",
6864
6459
  _preloadHasMany: function(key, preloadValue, type) {
6865
6460
  var record = this;
6866
6461
 
6867
- forEach.call(preloadValue, function(recordToPush) {
6868
- recordToPush = record._convertStringOrNumberIntoRecord(recordToPush, type);
6869
- get(record, key).pushObject(recordToPush);
6462
+ var recordsToSet = map.call(preloadValue, function(recordToPush) {
6463
+ return record._convertStringOrNumberIntoRecord(recordToPush, type);
6870
6464
  });
6465
+ //We use the pathway of setting the hasMany as if it came from the adapter
6466
+ //because the user told us that they know this relationships exists already
6467
+ this._relationships[key].updateRecordsFromAdapter(recordsToSet);
6871
6468
  },
6872
6469
 
6873
6470
  _preloadBelongsTo: function(key, preloadValue, type){
6874
- var recordToPush = this._convertStringOrNumberIntoRecord(preloadValue, type);
6875
- set(this, key, recordToPush);
6471
+ var recordToSet = this._convertStringOrNumberIntoRecord(preloadValue, type);
6472
+
6473
+ //We use the pathway of setting the hasMany as if it came from the adapter
6474
+ //because the user told us that they know this relationships exists already
6475
+ this._relationships[key].setRecord(recordToSet);
6876
6476
  },
6877
6477
 
6878
6478
  _convertStringOrNumberIntoRecord: function(value, type) {
@@ -6947,9 +6547,7 @@ define("ember-data/system/model/model",
6947
6547
 
6948
6548
  if (!data) { return; }
6949
6549
 
6950
- this.suspendRelationshipObservers(function() {
6951
- this.notifyPropertyChange('data');
6952
- });
6550
+ this.notifyPropertyChange('data');
6953
6551
  },
6954
6552
 
6955
6553
  /**
@@ -6961,32 +6559,6 @@ define("ember-data/system/model/model",
6961
6559
  this.updateRecordArraysLater();
6962
6560
  },
6963
6561
 
6964
- dataDidChange: Ember.observer(function() {
6965
- this.reloadHasManys();
6966
- }, 'data'),
6967
-
6968
- reloadHasManys: function() {
6969
- var relationships = get(this.constructor, 'relationshipsByName');
6970
- this.updateRecordArraysLater();
6971
- relationships.forEach(function(name, relationship) {
6972
- if (this._data.links && this._data.links[name]) { return; }
6973
- if (relationship.kind === 'hasMany') {
6974
- this.hasManyDidChange(relationship.key);
6975
- }
6976
- }, this);
6977
- },
6978
-
6979
- hasManyDidChange: function(key) {
6980
- var hasMany = this._relationships[key];
6981
-
6982
- if (hasMany) {
6983
- var records = this._data[key] || [];
6984
-
6985
- set(hasMany, 'content', Ember.A(records));
6986
- set(hasMany, 'isLoaded', true);
6987
- hasMany.trigger('didLoad');
6988
- }
6989
- },
6990
6562
 
6991
6563
  /**
6992
6564
  @method updateRecordArraysLater
@@ -7014,18 +6586,9 @@ define("ember-data/system/model/model",
7014
6586
  this._data = data;
7015
6587
  }
7016
6588
 
7017
- var relationships = this._relationships;
7018
-
7019
- this.eachRelationship(function(name, rel) {
7020
- if (data.links && data.links[name]) { return; }
7021
- if (rel.options.async) { relationships[name] = null; }
7022
- });
7023
-
7024
6589
  if (data) { this.pushedData(); }
7025
6590
 
7026
- this.suspendRelationshipObservers(function() {
7027
- this.notifyPropertyChange('data');
7028
- });
6591
+ this.notifyPropertyChange('data');
7029
6592
  },
7030
6593
 
7031
6594
  materializeId: function(id) {
@@ -7040,27 +6603,6 @@ define("ember-data/system/model/model",
7040
6603
  this._data[name] = value;
7041
6604
  },
7042
6605
 
7043
- /**
7044
- @method updateHasMany
7045
- @private
7046
- @param {String} name
7047
- @param {Array} records
7048
- */
7049
- updateHasMany: function(name, records) {
7050
- this._data[name] = records;
7051
- this.hasManyDidChange(name);
7052
- },
7053
-
7054
- /**
7055
- @method updateBelongsTo
7056
- @private
7057
- @param {String} name
7058
- @param {DS.Model} record
7059
- */
7060
- updateBelongsTo: function(name, record) {
7061
- this._data[name] = record;
7062
- },
7063
-
7064
6606
  /**
7065
6607
  If the model `isDirty` this function will discard any unsaved
7066
6608
  changes
@@ -7091,48 +6633,13 @@ define("ember-data/system/model/model",
7091
6633
 
7092
6634
  this.send('rolledBack');
7093
6635
 
7094
- this.suspendRelationshipObservers(function() {
7095
- this.notifyPropertyChange('data');
7096
- });
6636
+ this.notifyPropertyChange('data');
7097
6637
  },
7098
6638
 
7099
6639
  toStringExtension: function() {
7100
6640
  return get(this, 'id');
7101
6641
  },
7102
6642
 
7103
- /**
7104
- The goal of this method is to temporarily disable specific observers
7105
- that take action in response to application changes.
7106
-
7107
- This allows the system to make changes (such as materialization and
7108
- rollback) that should not trigger secondary behavior (such as setting an
7109
- inverse relationship or marking records as dirty).
7110
-
7111
- The specific implementation will likely change as Ember proper provides
7112
- better infrastructure for suspending groups of observers, and if Array
7113
- observation becomes more unified with regular observers.
7114
-
7115
- @method suspendRelationshipObservers
7116
- @private
7117
- @param callback
7118
- @param binding
7119
- */
7120
- suspendRelationshipObservers: function(callback, binding) {
7121
- var observers = get(this.constructor, 'relationshipNames').belongsTo;
7122
- var self = this;
7123
-
7124
- try {
7125
- this._suspendedRelationships = true;
7126
- Ember._suspendObservers(self, observers, null, 'belongsToDidChange', function() {
7127
- Ember._suspendBeforeObservers(self, observers, null, 'belongsToWillChange', function() {
7128
- callback.call(binding || self);
7129
- });
7130
- });
7131
- } finally {
7132
- this._suspendedRelationships = false;
7133
- }
7134
- },
7135
-
7136
6643
  /**
7137
6644
  Save the record and persist any changes to the record to an
7138
6645
  extenal source via the adapter.
@@ -7498,18 +7005,6 @@ define("ember-data/system/model/states",
7498
7005
  @class RootState
7499
7006
  */
7500
7007
 
7501
- function hasDefinedProperties(object) {
7502
- // Ignore internal property defined by simulated `Ember.create`.
7503
- var names = Ember.keys(object);
7504
- var i, l, name;
7505
- for (i = 0, l = names.length; i < l; i++ ) {
7506
- name = names[i];
7507
- if (object.hasOwnProperty(name) && object[name]) { return true; }
7508
- }
7509
-
7510
- return false;
7511
- }
7512
-
7513
7008
  function didSetProperty(record, context) {
7514
7009
  if (context.value === context.originalValue) {
7515
7010
  delete record._attributes[context.name];
@@ -7584,12 +7079,8 @@ define("ember-data/system/model/states",
7584
7079
  loadingData: Ember.K,
7585
7080
 
7586
7081
  propertyWasReset: function(record, name) {
7587
- var stillDirty = false;
7588
-
7589
- for (var prop in record._attributes) {
7590
- stillDirty = true;
7591
- break;
7592
- }
7082
+ var length = Ember.keys(record._attributes);
7083
+ var stillDirty = length > 0;
7593
7084
 
7594
7085
  if (!stillDirty) { record.send('rolledBack'); }
7595
7086
  },
@@ -7812,10 +7303,7 @@ define("ember-data/system/model/states",
7812
7303
 
7813
7304
  loadedData: function(record) {
7814
7305
  record.transitionTo('loaded.created.uncommitted');
7815
-
7816
- record.suspendRelationshipObservers(function() {
7817
- record.notifyPropertyChange('data');
7818
- });
7306
+ record.notifyPropertyChange('data');
7819
7307
  },
7820
7308
 
7821
7309
  pushedData: function(record) {
@@ -8059,6 +7547,91 @@ define("ember-data/system/model/states",
8059
7547
 
8060
7548
  __exports__["default"] = RootState;
8061
7549
  });
7550
+ define("ember-data/system/promise_proxies",
7551
+ ["exports"],
7552
+ function(__exports__) {
7553
+ "use strict";
7554
+ var Promise = Ember.RSVP.Promise;
7555
+
7556
+ /**
7557
+ A `PromiseArray` is an object that acts like both an `Ember.Array`
7558
+ and a promise. When the promise is resolved the resulting value
7559
+ will be set to the `PromiseArray`'s `content` property. This makes
7560
+ it easy to create data bindings with the `PromiseArray` that will be
7561
+ updated when the promise resolves.
7562
+
7563
+ For more information see the [Ember.PromiseProxyMixin
7564
+ documentation](/api/classes/Ember.PromiseProxyMixin.html).
7565
+
7566
+ Example
7567
+
7568
+ ```javascript
7569
+ var promiseArray = DS.PromiseArray.create({
7570
+ promise: $.getJSON('/some/remote/data.json')
7571
+ });
7572
+
7573
+ promiseArray.get('length'); // 0
7574
+
7575
+ promiseArray.then(function() {
7576
+ promiseArray.get('length'); // 100
7577
+ });
7578
+ ```
7579
+
7580
+ @class PromiseArray
7581
+ @namespace DS
7582
+ @extends Ember.ArrayProxy
7583
+ @uses Ember.PromiseProxyMixin
7584
+ */
7585
+ var PromiseArray = Ember.ArrayProxy.extend(Ember.PromiseProxyMixin);
7586
+
7587
+ /**
7588
+ A `PromiseObject` is an object that acts like both an `Ember.Object`
7589
+ and a promise. When the promise is resolved, then the resulting value
7590
+ will be set to the `PromiseObject`'s `content` property. This makes
7591
+ it easy to create data bindings with the `PromiseObject` that will
7592
+ be updated when the promise resolves.
7593
+
7594
+ For more information see the [Ember.PromiseProxyMixin
7595
+ documentation](/api/classes/Ember.PromiseProxyMixin.html).
7596
+
7597
+ Example
7598
+
7599
+ ```javascript
7600
+ var promiseObject = DS.PromiseObject.create({
7601
+ promise: $.getJSON('/some/remote/data.json')
7602
+ });
7603
+
7604
+ promiseObject.get('name'); // null
7605
+
7606
+ promiseObject.then(function() {
7607
+ promiseObject.get('name'); // 'Tomster'
7608
+ });
7609
+ ```
7610
+
7611
+ @class PromiseObject
7612
+ @namespace DS
7613
+ @extends Ember.ObjectProxy
7614
+ @uses Ember.PromiseProxyMixin
7615
+ */
7616
+ var PromiseObject = Ember.ObjectProxy.extend(Ember.PromiseProxyMixin);
7617
+
7618
+ var promiseObject = function(promise, label) {
7619
+ return PromiseObject.create({
7620
+ promise: Promise.resolve(promise, label)
7621
+ });
7622
+ };
7623
+
7624
+ var promiseArray = function(promise, label) {
7625
+ return PromiseArray.create({
7626
+ promise: Promise.resolve(promise, label)
7627
+ });
7628
+ };
7629
+
7630
+ __exports__.PromiseArray = PromiseArray;
7631
+ __exports__.PromiseObject = PromiseObject;
7632
+ __exports__.promiseArray = promiseArray;
7633
+ __exports__.promiseObject = promiseObject;
7634
+ });
8062
7635
  define("ember-data/system/record_array_manager",
8063
7636
  ["ember-data/system/record_arrays","exports"],
8064
7637
  function(__dependency1__, __exports__) {
@@ -8072,7 +7645,6 @@ define("ember-data/system/record_array_manager",
8072
7645
  var AdapterPopulatedRecordArray = __dependency1__.AdapterPopulatedRecordArray;
8073
7646
  var ManyArray = __dependency1__.ManyArray;
8074
7647
  var get = Ember.get;
8075
- var set = Ember.set;
8076
7648
  var forEach = Ember.EnumerableUtils.forEach;
8077
7649
 
8078
7650
  /**
@@ -8397,7 +7969,6 @@ define("ember-data/system/record_arrays/adapter_populated_record_array",
8397
7969
  */
8398
7970
 
8399
7971
  var get = Ember.get;
8400
- var set = Ember.set;
8401
7972
 
8402
7973
  function cloneNull(source) {
8403
7974
  var clone = Object.create(null);
@@ -8523,22 +8094,16 @@ define("ember-data/system/record_arrays/filtered_record_array",
8523
8094
  });
8524
8095
  });
8525
8096
  define("ember-data/system/record_arrays/many_array",
8526
- ["ember-data/system/record_arrays/record_array","ember-data/system/changes","exports"],
8527
- function(__dependency1__, __dependency2__, __exports__) {
8097
+ ["ember-data/system/record_arrays/record_array","exports"],
8098
+ function(__dependency1__, __exports__) {
8528
8099
  "use strict";
8529
8100
  var RecordArray = __dependency1__["default"];
8530
- var RelationshipChange = __dependency2__.RelationshipChange;
8531
8101
 
8532
8102
  /**
8533
8103
  @module ember-data
8534
8104
  */
8535
8105
 
8536
8106
  var get = Ember.get, set = Ember.set;
8537
- var map = Ember.EnumerableUtils.map;
8538
-
8539
- function sync(change) {
8540
- change.sync();
8541
- }
8542
8107
 
8543
8108
  /**
8544
8109
  A `ManyArray` is a `RecordArray` that represents the contents of a has-many
@@ -8579,7 +8144,6 @@ define("ember-data/system/record_arrays/many_array",
8579
8144
  __exports__["default"] = RecordArray.extend({
8580
8145
  init: function() {
8581
8146
  this._super.apply(this, arguments);
8582
- this._changesToSync = Ember.OrderedSet.create();
8583
8147
  },
8584
8148
 
8585
8149
  /**
@@ -8610,6 +8174,16 @@ define("ember-data/system/record_arrays/many_array",
8610
8174
 
8611
8175
  isLoaded: false,
8612
8176
 
8177
+ /**
8178
+ The relationship which manages this array.
8179
+
8180
+ @property {DS.Model} owner
8181
+ @private
8182
+ */
8183
+
8184
+ relationship: null,
8185
+
8186
+
8613
8187
  /**
8614
8188
  Used for async `hasMany` arrays
8615
8189
  to keep track of when they will resolve.
@@ -8640,98 +8214,14 @@ define("ember-data/system/record_arrays/many_array",
8640
8214
  }
8641
8215
  },
8642
8216
 
8643
- /**
8644
- @method fetch
8645
- @private
8646
- */
8647
- fetch: function() {
8648
- var records = get(this, 'content');
8649
- var store = get(this, 'store');
8650
- var owner = get(this, 'owner');
8651
-
8652
- var unloadedRecords = records.filterBy('isEmpty', true);
8653
- store.scheduleFetchMany(unloadedRecords, owner);
8654
- },
8655
-
8656
- // Overrides Ember.Array's replace method to implement
8657
- replaceContent: function(index, removed, added) {
8658
- // Map the array of record objects into an array of client ids.
8659
- added = map(added, function(record) {
8660
- return record;
8661
- }, this);
8662
-
8663
- this._super(index, removed, added);
8664
- },
8665
-
8666
- arrangedContentDidChange: function() {
8667
- Ember.run.once(this, 'fetch');
8668
- },
8669
-
8670
- arrayContentWillChange: function(index, removed, added) {
8671
- var owner = get(this, 'owner');
8672
- var name = get(this, 'name');
8673
-
8674
- if (!owner._suspendedRelationships) {
8675
- // This code is the first half of code that continues inside
8676
- // of arrayContentDidChange. It gets or creates a change from
8677
- // the child object, adds the current owner as the old
8678
- // parent if this is the first time the object was removed
8679
- // from a ManyArray, and sets `newParent` to null.
8680
- //
8681
- // Later, if the object is added to another ManyArray,
8682
- // the `arrayContentDidChange` will set `newParent` on
8683
- // the change.
8684
- for (var i=index; i<index+removed; i++) {
8685
- var record = get(this, 'content').objectAt(i);
8686
-
8687
- var change = RelationshipChange.createChange(owner, record, get(this, 'store'), {
8688
- parentType: owner.constructor,
8689
- changeType: "remove",
8690
- kind: "hasMany",
8691
- key: name
8692
- });
8693
-
8694
- this._changesToSync.add(change);
8695
- }
8217
+ replaceContent: function(idx, amt, objects){
8218
+ var records;
8219
+ if (amt > 0){
8220
+ records = get(this, 'content').slice(idx, idx+amt);
8221
+ this.get('relationship').removeRecords(records);
8696
8222
  }
8697
-
8698
- return this._super.apply(this, arguments);
8699
- },
8700
-
8701
- arrayContentDidChange: function(index, removed, added) {
8702
- this._super.apply(this, arguments);
8703
-
8704
- var owner = get(this, 'owner');
8705
- var name = get(this, 'name');
8706
- var store = get(this, 'store');
8707
-
8708
- if (!owner._suspendedRelationships) {
8709
- // This code is the second half of code that started in
8710
- // `arrayContentWillChange`. It gets or creates a change
8711
- // from the child object, and adds the current owner as
8712
- // the new parent.
8713
- for (var i=index; i<index+added; i++) {
8714
- var record = get(this, 'content').objectAt(i);
8715
-
8716
- var change = RelationshipChange.createChange(owner, record, store, {
8717
- parentType: owner.constructor,
8718
- changeType: "add",
8719
- kind:"hasMany",
8720
- key: name
8721
- });
8722
- change.hasManyName = name;
8723
-
8724
- this._changesToSync.add(change);
8725
- }
8726
-
8727
- // We wait until the array has finished being
8728
- // mutated before syncing the OneToManyChanges created
8729
- // in arrayContentWillChange, so that the array
8730
- // membership test in the sync() logic operates
8731
- // on the final results.
8732
- this._changesToSync.forEach(sync);
8733
-
8734
- this._changesToSync.clear();
8223
+ if (objects){
8224
+ this.get('relationship').addRecords(objects, idx);
8735
8225
  }
8736
8226
  },
8737
8227
 
@@ -8744,8 +8234,7 @@ define("ember-data/system/record_arrays/many_array",
8744
8234
  @return {DS.Model} record
8745
8235
  */
8746
8236
  createRecord: function(hash) {
8747
- var owner = get(this, 'owner');
8748
- var store = get(owner, 'store');
8237
+ var store = get(this, 'store');
8749
8238
  var type = get(this, 'type');
8750
8239
  var record;
8751
8240
 
@@ -8758,7 +8247,7 @@ define("ember-data/system/record_arrays/many_array",
8758
8247
  });
8759
8248
  });
8760
8249
  define("ember-data/system/record_arrays/record_array",
8761
- ["ember-data/system/store","exports"],
8250
+ ["ember-data/system/promise_proxies","exports"],
8762
8251
  function(__dependency1__, __exports__) {
8763
8252
  "use strict";
8764
8253
  /**
@@ -8767,7 +8256,6 @@ define("ember-data/system/record_arrays/record_array",
8767
8256
 
8768
8257
  var PromiseArray = __dependency1__.PromiseArray;
8769
8258
  var get = Ember.get;
8770
- var set = Ember.set;
8771
8259
 
8772
8260
  /**
8773
8261
  A record array is an array that contains records of a certain type. The record
@@ -8887,9 +8375,17 @@ define("ember-data/system/record_arrays/record_array",
8887
8375
  @method addRecord
8888
8376
  @private
8889
8377
  @param {DS.Model} record
8378
+ @param {DS.Model} an optional index to insert at
8890
8379
  */
8891
- addRecord: function(record) {
8892
- get(this, 'content').addObject(record);
8380
+ addRecord: function(record, idx) {
8381
+ var content = get(this, 'content');
8382
+ if (idx === undefined) {
8383
+ content.addObject(record);
8384
+ } else {
8385
+ if (!content.contains(record)) {
8386
+ content.insertAt(idx, record);
8387
+ }
8388
+ }
8893
8389
  },
8894
8390
 
8895
8391
  /**
@@ -8991,14 +8487,7 @@ define("ember-data/system/relationship-meta",
8991
8487
  };
8992
8488
  }
8993
8489
 
8994
- __exports__.relationshipFromMeta = relationshipFromMeta;function isSyncRelationship(record, relationshipName) {
8995
- var meta = Ember.meta(record);
8996
- var desc = meta.descs[relationshipName];
8997
-
8998
- return desc && !desc._meta.options.async;
8999
- }
9000
-
9001
- __exports__.isSyncRelationship = isSyncRelationship;
8490
+ __exports__.relationshipFromMeta = relationshipFromMeta;
9002
8491
  });
9003
8492
  define("ember-data/system/relationships",
9004
8493
  ["./relationships/belongs_to","./relationships/has_many","ember-data/system/relationships/ext","exports"],
@@ -9016,64 +8505,11 @@ define("ember-data/system/relationships",
9016
8505
  __exports__.hasMany = hasMany;
9017
8506
  });
9018
8507
  define("ember-data/system/relationships/belongs_to",
9019
- ["ember-data/system/model","ember-data/system/store","ember-data/system/changes","ember-data/system/relationship-meta","exports"],
9020
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
8508
+ ["ember-data/system/model","exports"],
8509
+ function(__dependency1__, __exports__) {
9021
8510
  "use strict";
9022
- var get = Ember.get;
9023
- var set = Ember.set;
9024
- var isNone = Ember.isNone;
9025
- var Promise = Ember.RSVP.Promise;
9026
-
9027
8511
  var Model = __dependency1__.Model;
9028
- var PromiseObject = __dependency2__.PromiseObject;
9029
- var RelationshipChange = __dependency3__.RelationshipChange;
9030
- var relationshipFromMeta = __dependency4__.relationshipFromMeta;
9031
- var typeForRelationshipMeta = __dependency4__.typeForRelationshipMeta;
9032
- var isSyncRelationship = __dependency4__.isSyncRelationship;
9033
-
9034
- /**
9035
- @module ember-data
9036
- */
9037
-
9038
- function asyncBelongsTo(type, options, meta) {
9039
- return Ember.computed('data', function(key, value) {
9040
- var data = get(this, 'data');
9041
- var store = get(this, 'store');
9042
- var promiseLabel = "DS: Async belongsTo " + this + " : " + key;
9043
- var promise;
9044
-
9045
- meta.key = key;
9046
-
9047
- if (arguments.length === 2) {
9048
- return value === undefined ? null : PromiseObject.create({
9049
- promise: Promise.cast(value, promiseLabel)
9050
- });
9051
- }
9052
-
9053
- var link = data.links && data.links[key];
9054
- var belongsTo = data[key];
9055
8512
 
9056
- if (!isNone(belongsTo)) {
9057
- var inverse = this.constructor.inverseFor(key);
9058
- //but for now only in the oneToOne case
9059
- if (inverse && inverse.kind === 'belongsTo'){
9060
- set(belongsTo, inverse.name, this);
9061
- }
9062
- //TODO(Igor) after OR doesn't seem that will be called
9063
- promise = store.findById(belongsTo.constructor, belongsTo.get('id')) || Promise.cast(belongsTo, promiseLabel);
9064
- return PromiseObject.create({
9065
- promise: promise
9066
- });
9067
- } else if (link) {
9068
- promise = store.findBelongsTo(this, link, relationshipFromMeta(store, meta));
9069
- return PromiseObject.create({
9070
- promise: promise
9071
- });
9072
- } else {
9073
- return null;
9074
- }
9075
- }).meta(meta);
9076
- }
9077
8513
 
9078
8514
  /**
9079
8515
  `DS.belongsTo` is used to define One-To-One and One-To-Many
@@ -9139,32 +8575,15 @@ define("ember-data/system/relationships/belongs_to",
9139
8575
  key: null
9140
8576
  };
9141
8577
 
9142
- if (options.async) {
9143
- return asyncBelongsTo(type, options, meta);
9144
- }
9145
-
9146
- return Ember.computed('data', function(key, value) {
9147
- var data = get(this, 'data');
9148
- var store = get(this, 'store');
9149
- var belongsTo, typeClass;
9150
-
9151
- if (typeof type === 'string') {
9152
- typeClass = store.modelFor(type);
9153
- } else {
9154
- typeClass = type;
9155
- }
9156
-
9157
- if (arguments.length === 2) {
9158
- return value === undefined ? null : value;
8578
+ return Ember.computed(function(key, value) {
8579
+ if (arguments.length>1) {
8580
+ if ( value === undefined ) {
8581
+ value = null;
8582
+ }
8583
+ this._relationships[key].setRecord(value);
9159
8584
  }
9160
8585
 
9161
- belongsTo = data[key];
9162
-
9163
- if (isNone(belongsTo)) { return null; }
9164
-
9165
- store.findById(belongsTo.constructor, belongsTo.get('id'));
9166
-
9167
- return belongsTo;
8586
+ return this._relationships[key].getRecord();
9168
8587
  }).meta(meta);
9169
8588
  }
9170
8589
 
@@ -9176,72 +8595,26 @@ define("ember-data/system/relationships/belongs_to",
9176
8595
  @namespace DS
9177
8596
  */
9178
8597
  Model.reopen({
8598
+ notifyBelongsToAdded: function(key, relationship) {
8599
+ this.notifyPropertyChange(key);
8600
+ },
9179
8601
 
9180
- /**
9181
- @method belongsToWillChange
9182
- @private
9183
- @static
9184
- @param record
9185
- @param key
9186
- */
9187
- belongsToWillChange: Ember.beforeObserver(function(record, key) {
9188
- if (get(record, 'isLoaded') && isSyncRelationship(record, key)) {
9189
- var oldParent = get(record, key);
9190
-
9191
- if (oldParent) {
9192
- var store = get(record, 'store');
9193
- var change = RelationshipChange.createChange(record, oldParent, store, {
9194
- key: key,
9195
- kind: 'belongsTo',
9196
- changeType: 'remove'
9197
- });
9198
-
9199
- change.sync();
9200
- this._changesToSync[key] = change;
9201
- }
9202
- }
9203
- }),
9204
-
9205
- /**
9206
- @method belongsToDidChange
9207
- @private
9208
- @static
9209
- @param record
9210
- @param key
9211
- */
9212
- belongsToDidChange: Ember.immediateObserver(function(record, key) {
9213
- if (get(record, 'isLoaded')) {
9214
- var newParent = get(record, key);
9215
-
9216
- if (newParent) {
9217
- var store = get(record, 'store');
9218
- var change = RelationshipChange.createChange(record, newParent, store, {
9219
- key: key,
9220
- kind: 'belongsTo',
9221
- changeType: 'add'
9222
- });
9223
-
9224
- change.sync();
9225
- }
9226
- }
9227
-
9228
- delete this._changesToSync[key];
9229
- })
8602
+ notifyBelongsToRemoved: function(key) {
8603
+ this.notifyPropertyChange(key);
8604
+ }
9230
8605
  });
9231
8606
 
9232
8607
  __exports__["default"] = belongsTo;
9233
8608
  });
9234
8609
  define("ember-data/system/relationships/ext",
9235
- ["ember-inflector/system","ember-data/system/relationship-meta","ember-data/system/model"],
9236
- function(__dependency1__, __dependency2__, __dependency3__) {
8610
+ ["ember-data/system/relationship-meta","ember-data/system/model"],
8611
+ function(__dependency1__, __dependency2__) {
9237
8612
  "use strict";
9238
- var singularize = __dependency1__.singularize;
9239
- var typeForRelationshipMeta = __dependency2__.typeForRelationshipMeta;
9240
- var relationshipFromMeta = __dependency2__.relationshipFromMeta;
9241
- var Model = __dependency3__.Model;
8613
+ var typeForRelationshipMeta = __dependency1__.typeForRelationshipMeta;
8614
+ var relationshipFromMeta = __dependency1__.relationshipFromMeta;
8615
+ var Model = __dependency2__.Model;
9242
8616
 
9243
8617
  var get = Ember.get;
9244
- var set = Ember.set;
9245
8618
 
9246
8619
  /**
9247
8620
  @module ember-data
@@ -9293,11 +8666,6 @@ define("ember-data/system/relationships/ext",
9293
8666
  // the computed property.
9294
8667
  var meta = value.meta();
9295
8668
 
9296
- if (meta.isRelationship && meta.kind === 'belongsTo') {
9297
- Ember.addObserver(proto, key, null, 'belongsToDidChange');
9298
- Ember.addBeforeObserver(proto, key, null, 'belongsToWillChange');
9299
- }
9300
-
9301
8669
  meta.parentType = proto.constructor;
9302
8670
  }
9303
8671
  }
@@ -9672,7 +9040,28 @@ define("ember-data/system/relationships/ext",
9672
9040
  get(this, 'relatedTypes').forEach(function(type) {
9673
9041
  callback.call(binding, type);
9674
9042
  });
9043
+ },
9044
+
9045
+ determineRelationshipType: function(knownSide) {
9046
+ var knownKey = knownSide.key;
9047
+ var knownKind = knownSide.kind;
9048
+ var inverse = this.inverseFor(knownKey);
9049
+ var key, otherKind;
9050
+
9051
+ if (!inverse) {
9052
+ return knownKind === 'belongsTo' ? 'oneToNone' : 'manyToNone';
9053
+ }
9054
+
9055
+ key = inverse.name;
9056
+ otherKind = inverse.kind;
9057
+
9058
+ if (otherKind === 'belongsTo') {
9059
+ return knownKind === 'belongsTo' ? 'oneToOne' : 'manyToOne';
9060
+ } else {
9061
+ return knownKind === 'belongsTo' ? 'oneToMany' : 'manyToMany';
9062
+ }
9675
9063
  }
9064
+
9676
9065
  });
9677
9066
 
9678
9067
  Model.reopen({
@@ -9687,124 +9076,27 @@ define("ember-data/system/relationships/ext",
9687
9076
  */
9688
9077
  eachRelationship: function(callback, binding) {
9689
9078
  this.constructor.eachRelationship(callback, binding);
9079
+ },
9080
+
9081
+ relationshipFor: function(name) {
9082
+ return get(this.constructor, 'relationshipsByName').get(name);
9083
+ },
9084
+
9085
+ inverseFor: function(key) {
9086
+ return this.constructor.inverseFor(key);
9690
9087
  }
9088
+
9691
9089
  });
9692
9090
  });
9693
9091
  define("ember-data/system/relationships/has_many",
9694
- ["ember-data/system/store","ember-data/system/relationship-meta","exports"],
9695
- function(__dependency1__, __dependency2__, __exports__) {
9092
+ ["ember-data/system/model","exports"],
9093
+ function(__dependency1__, __exports__) {
9696
9094
  "use strict";
9697
9095
  /**
9698
9096
  @module ember-data
9699
9097
  */
9700
9098
 
9701
- var PromiseArray = __dependency1__.PromiseArray;
9702
-
9703
- var relationshipFromMeta = __dependency2__.relationshipFromMeta;
9704
- var typeForRelationshipMeta = __dependency2__.typeForRelationshipMeta;
9705
-
9706
- var get = Ember.get;
9707
- var set = Ember.set;
9708
- var setProperties = Ember.setProperties;
9709
- var map = Ember.EnumerableUtils.map;
9710
-
9711
- /**
9712
- Returns a computed property that synchronously returns a ManyArray for
9713
- this relationship. If not all of the records in this relationship are
9714
- loaded, it will raise an exception.
9715
- */
9716
-
9717
- function syncHasMany(type, options, meta) {
9718
- return Ember.computed('data', function(key) {
9719
- return buildRelationship(this, key, options, function(store, data) {
9720
- // Configure the metadata for the computed property to contain
9721
- // the key.
9722
- meta.key = key;
9723
-
9724
- var records = data[key];
9725
-
9726
-
9727
- return store.findMany(this, data[key], typeForRelationshipMeta(store, meta));
9728
- });
9729
- }).meta(meta).readOnly();
9730
- }
9731
-
9732
- /**
9733
- Returns a computed property that itself returns a promise that resolves to a
9734
- ManyArray.
9735
- */
9736
-
9737
- function asyncHasMany(type, options, meta) {
9738
- return Ember.computed('data', function(key) {
9739
- // Configure the metadata for the computed property to contain
9740
- // the key.
9741
- meta.key = key;
9742
-
9743
- var relationship = buildRelationship(this, key, options, function(store, data) {
9744
- var link = data.links && data.links[key];
9745
- var rel;
9746
- var promiseLabel = "DS: Async hasMany " + this + " : " + key;
9747
- var resolver = Ember.RSVP.defer(promiseLabel);
9748
-
9749
- if (link) {
9750
- rel = store.findHasMany(this, link, relationshipFromMeta(store, meta), resolver);
9751
- } else {
9752
-
9753
- //This is a temporary workaround for setting owner on the relationship
9754
- //until single source of truth lands. It only works for OneToMany atm
9755
- var records = data[key];
9756
- var inverse = this.constructor.inverseFor(key);
9757
- var owner = this;
9758
- if (inverse && records) {
9759
- if (inverse.kind === 'belongsTo'){
9760
- map(records, function(record){
9761
- set(record, inverse.name, owner);
9762
- });
9763
- }
9764
- }
9765
-
9766
- rel = store.findMany(owner, data[key], typeForRelationshipMeta(store, meta), resolver);
9767
- }
9768
-
9769
- // Cache the promise so we can use it when we come back and don't
9770
- // need to rebuild the relationship.
9771
- set(rel, 'promise', resolver.promise);
9772
-
9773
- return rel;
9774
- });
9775
-
9776
- var promise = relationship.get('promise').then(function() {
9777
- return relationship;
9778
- }, null, "DS: Async hasMany records received");
9779
-
9780
- return PromiseArray.create({
9781
- promise: promise
9782
- });
9783
- }).meta(meta).readOnly();
9784
- }
9785
-
9786
- /*
9787
- Builds the ManyArray for a relationship using the provided callback,
9788
- but only if it had not been created previously. After building, it
9789
- sets some metadata on the created ManyArray, such as the record which
9790
- owns it and the name of the relationship.
9791
- */
9792
- function buildRelationship(record, key, options, callback) {
9793
- var rels = record._relationships;
9794
-
9795
- if (rels[key]) { return rels[key]; }
9796
-
9797
- var data = get(record, 'data');
9798
- var store = get(record, 'store');
9799
-
9800
- var relationship = rels[key] = callback.call(record, store, data);
9801
-
9802
- return setProperties(relationship, {
9803
- owner: record,
9804
- name: key,
9805
- isPolymorphic: options.polymorphic
9806
- });
9807
- }
9099
+ var Model = __dependency1__.Model;
9808
9100
 
9809
9101
  /**
9810
9102
  `DS.hasMany` is used to define One-To-Many and Many-To-Many
@@ -9904,18 +9196,313 @@ define("ember-data/system/relationships/has_many",
9904
9196
  key: null
9905
9197
  };
9906
9198
 
9907
- if (options.async) {
9908
- return asyncHasMany(type, options, meta);
9199
+ return Ember.computed(function(key) {
9200
+ var relationship = this._relationships[key];
9201
+ return relationship.getRecords();
9202
+ }).meta(meta).readOnly();
9203
+ }
9204
+
9205
+ Model.reopen({
9206
+ notifyHasManyAdded: function(key, record, idx) {
9207
+ var relationship = this._relationships[key];
9208
+ var manyArray = relationship.manyArray;
9209
+ manyArray.addRecord(record, idx);
9210
+ //We need to notifyPropertyChange in the adding case because we need to make sure
9211
+ //we fetch the newly added record in case it is unloaded
9212
+ //TODO(Igor): Consider whether we could do this only if the record state is unloaded
9213
+ this.notifyPropertyChange(key);
9214
+ },
9215
+
9216
+ notifyHasManyRemoved: function(key, record) {
9217
+ var relationship = this._relationships[key];
9218
+ var manyArray = relationship.manyArray;
9219
+ manyArray.removeRecord(record);
9220
+ }
9221
+ });
9222
+
9223
+
9224
+ __exports__["default"] = hasMany;
9225
+ });
9226
+ define("ember-data/system/relationships/relationship",
9227
+ ["ember-data/system/promise_proxies","exports"],
9228
+ function(__dependency1__, __exports__) {
9229
+ "use strict";
9230
+ var PromiseArray = __dependency1__.PromiseArray;
9231
+ var PromiseObject = __dependency1__.PromiseObject;
9232
+
9233
+ var Relationship = function(store, record, inverseKey, relationshipMeta) {
9234
+ this.members = new Ember.OrderedSet();
9235
+ this.store = store;
9236
+ this.key = relationshipMeta.key;
9237
+ this.inverseKey = inverseKey;
9238
+ this.record = record;
9239
+ this.key = relationshipMeta.key;
9240
+ this.isAsync = relationshipMeta.options.async;
9241
+ this.relationshipMeta = relationshipMeta;
9242
+ };
9243
+
9244
+ Relationship.prototype = {
9245
+ constructor: Relationship,
9246
+ hasFetchedLink: false,
9247
+
9248
+ destroy: Ember.K,
9249
+
9250
+ clear: function() {
9251
+ this.members.forEach(function(member) {
9252
+ this.removeRecord(member);
9253
+ }, this);
9254
+ },
9255
+
9256
+ removeRecords: function(records){
9257
+ var that = this;
9258
+ records.forEach(function(record){
9259
+ that.removeRecord(record);
9260
+ });
9261
+ },
9262
+
9263
+ addRecords: function(records, idx){
9264
+ var that = this;
9265
+ records.forEach(function(record){
9266
+ that.addRecord(record, idx);
9267
+ if (idx !== undefined) {
9268
+ idx++;
9269
+ }
9270
+ });
9271
+ },
9272
+
9273
+
9274
+ addRecord: function(record, idx) {
9275
+ if (!this.members.has(record)) {
9276
+ this.members.add(record);
9277
+ this.notifyRecordRelationshipAdded(record, idx);
9278
+ if (this.inverseKey) {
9279
+ record._relationships[this.inverseKey].addRecord(this.record);
9280
+ }
9281
+ this.record.updateRecordArrays();
9282
+ }
9283
+ },
9284
+
9285
+ removeRecord: function(record) {
9286
+ if (this.members.has(record)) {
9287
+ this.members.remove(record);
9288
+ this.notifyRecordRelationshipRemoved(record);
9289
+ if (this.inverseKey) {
9290
+ var inverseRelationship = record._relationships[this.inverseKey];
9291
+ //Need to check for existence, as the record might unloading at the moment
9292
+ if (inverseRelationship) {
9293
+ inverseRelationship.removeRecord(this.record);
9294
+ }
9295
+ }
9296
+ this.record.updateRecordArrays();
9297
+ }
9298
+ },
9299
+
9300
+ updateLink: function(link) {
9301
+ if (link !== this.link) {
9302
+ this.link = link;
9303
+ this.hasFetchedLink = false;
9304
+ this.record.notifyPropertyChange(this.key);
9305
+ }
9306
+ },
9307
+
9308
+ updateRecordsFromAdapter: function(records) {
9309
+ //TODO Once we have adapter support, we need to handle updated and canonical changes
9310
+ this.computeChanges(records);
9311
+ }
9312
+ };
9313
+
9314
+ var ManyRelationship = function(store, record, inverseKey, relationshipMeta) {
9315
+ this._super$constructor(store, record, inverseKey, relationshipMeta);
9316
+ this.belongsToType = relationshipMeta.type;
9317
+ this.manyArray = store.recordArrayManager.createManyArray(this.belongsToType, Ember.A());
9318
+ this.manyArray.relationship = this;
9319
+ this.isPolymorphic = relationshipMeta.options.polymorphic;
9320
+ this.manyArray.isPolymorphic = this.isPolymorphic;
9321
+ };
9322
+
9323
+ ManyRelationship.prototype = Object.create(Relationship.prototype);
9324
+ ManyRelationship.prototype.constructor = ManyRelationship;
9325
+ ManyRelationship.prototype._super$constructor = Relationship;
9326
+
9327
+ ManyRelationship.prototype.destroy = function() {
9328
+ this.manyArray.destroy();
9329
+ };
9330
+
9331
+ ManyRelationship.prototype.notifyRecordRelationshipAdded = function(record, idx) {
9332
+ this.record.notifyHasManyAdded(this.key, record, idx);
9333
+ };
9334
+
9335
+ ManyRelationship.prototype.notifyRecordRelationshipRemoved = function(record) {
9336
+ this.record.notifyHasManyRemoved(this.key, record);
9337
+ };
9338
+
9339
+ ManyRelationship.prototype.computeChanges = function(records) {
9340
+ var members = this.members;
9341
+
9342
+ records = setForArray(records);
9343
+
9344
+ members.forEach(function(member) {
9345
+ if (records.has(member)) return;
9346
+
9347
+ this.removeRecord(member);
9348
+ }, this);
9349
+
9350
+ var hasManyArray = this.manyArray;
9351
+
9352
+ records.forEach(function(record, index) {
9353
+ //Need to preserve the order of incoming records
9354
+ if (hasManyArray.objectAt(index) === record ) return;
9355
+
9356
+ this.removeRecord(record);
9357
+ this.addRecord(record, index);
9358
+ }, this);
9359
+ };
9360
+
9361
+
9362
+ ManyRelationship.prototype.getRecords = function() {
9363
+ if (this.isAsync) {
9364
+ var self = this;
9365
+ var promise;
9366
+ if (this.link && !this.hasFetchedLink) {
9367
+ promise = this.store.findHasMany(this.record, this.link, this.relationshipMeta).then(function(records){
9368
+ self.updateRecordsFromAdapter(records);
9369
+ self.hasFetchedLink = true;
9370
+ //TODO(Igor) try to abstract the isLoaded part
9371
+ self.manyArray.set('isLoaded', true);
9372
+ return self.manyArray;
9373
+ });
9374
+ } else {
9375
+ var manyArray = this.manyArray;
9376
+ promise = this.store.findMany(manyArray.toArray()).then(function(){
9377
+ self.manyArray.set('isLoaded', true);
9378
+ return manyArray;
9379
+ });
9380
+ }
9381
+ return PromiseArray.create({
9382
+ promise: promise
9383
+ });
9909
9384
  } else {
9910
- return syncHasMany(type, options, meta);
9385
+
9386
+ this.manyArray.set('isLoaded', true);
9387
+ return this.manyArray;
9388
+ }
9389
+ };
9390
+
9391
+ var BelongsToRelationship = function(store, record, inverseKey, relationshipMeta) {
9392
+ this._super$constructor(store, record, inverseKey, relationshipMeta);
9393
+ this.members.add(record);
9394
+ this.record = record;
9395
+ this.key = relationshipMeta.key;
9396
+ this.inverseKey = inverseKey;
9397
+ this.inverseRecord = null;
9398
+ };
9399
+
9400
+ BelongsToRelationship.prototype = Object.create(Relationship.prototype);
9401
+ BelongsToRelationship.prototype.constructor = BelongsToRelationship;
9402
+ BelongsToRelationship.prototype._super$constructor = Relationship;
9403
+
9404
+ BelongsToRelationship.prototype.setRecord = function(newRecord) {
9405
+ if (newRecord) {
9406
+ this.addRecord(newRecord);
9407
+ } else if (this.inverseRecord) {
9408
+ this.removeRecord(this.inverseRecord);
9911
9409
  }
9410
+ };
9411
+
9412
+ BelongsToRelationship.prototype._super$addRecord = Relationship.prototype.addRecord;
9413
+ BelongsToRelationship.prototype.addRecord = function(newRecord) {
9414
+ if (this.members.has(newRecord)){ return;}
9415
+ var type = this.relationshipMeta.type;
9416
+
9417
+ if (this.inverseRecord && this.inverseKey) {
9418
+ this.removeRecord(this.inverseRecord);
9419
+ }
9420
+
9421
+ this.inverseRecord = newRecord;
9422
+ this._super$addRecord(newRecord);
9423
+ };
9424
+
9425
+ BelongsToRelationship.prototype.notifyRecordRelationshipAdded = function(newRecord) {
9426
+ this.record.notifyBelongsToAdded(this.key, this);
9427
+ };
9428
+
9429
+ BelongsToRelationship.prototype.notifyRecordRelationshipRemoved = function(record) {
9430
+ this.record.notifyBelongsToRemoved(this.key, this);
9431
+ };
9432
+
9433
+ BelongsToRelationship.prototype._super$removeRecord = Relationship.prototype.removeRecord;
9434
+ BelongsToRelationship.prototype.removeRecord = function(record) {
9435
+ if (!this.members.has(record)){ return;}
9436
+ this._super$removeRecord(record);
9437
+ this.inverseRecord = null;
9438
+ };
9439
+
9440
+ BelongsToRelationship.prototype.currentOtherSideFor = function() {
9441
+ return this.inverseRecord;
9442
+ };
9443
+
9444
+ BelongsToRelationship.prototype.getRecord = function() {
9445
+ if (this.isAsync) {
9446
+ var promise;
9447
+
9448
+ if (this.link && !this.hasFetchedLink){
9449
+ var self = this;
9450
+ promise = this.store.findBelongsTo(this.record, this.link, this.relationshipMeta).then(function(record){
9451
+ self.addRecord(record);
9452
+ self.hasFetchedLink = true;
9453
+ return record;
9454
+ });
9455
+ } else if (this.inverseRecord) {
9456
+ promise = this.store._findByRecord(this.inverseRecord);
9457
+ } else {
9458
+ promise = Ember.RSVP.Promise.resolve(null);
9459
+ }
9460
+
9461
+ return PromiseObject.create({
9462
+ promise: promise
9463
+ });
9464
+ } else {
9465
+ return this.inverseRecord;
9466
+ }
9467
+ };
9468
+
9469
+ function setForArray(array) {
9470
+ var set = new Ember.OrderedSet();
9471
+
9472
+ if (array) {
9473
+ for (var i=0, l=array.length; i<l; i++) {
9474
+ set.add(array[i]);
9475
+ }
9476
+ }
9477
+
9478
+ return set;
9912
9479
  }
9913
9480
 
9914
- __exports__["default"] = hasMany;
9481
+ var createRelationshipFor = function(record, relationshipMeta, store){
9482
+ var inverseKey;
9483
+ var inverse = record.constructor.inverseFor(relationshipMeta.key);
9484
+
9485
+ if (inverse) {
9486
+ inverseKey = inverse.name;
9487
+ }
9488
+
9489
+ if (relationshipMeta.kind === 'hasMany'){
9490
+ return new ManyRelationship(store, record, inverseKey, relationshipMeta);
9491
+ }
9492
+ else {
9493
+ return new BelongsToRelationship(store, record, inverseKey, relationshipMeta);
9494
+ }
9495
+ };
9496
+
9497
+
9498
+ __exports__.Relationship = Relationship;
9499
+ __exports__.ManyRelationship = ManyRelationship;
9500
+ __exports__.BelongsToRelationship = BelongsToRelationship;
9501
+ __exports__.createRelationshipFor = createRelationshipFor;
9915
9502
  });
9916
9503
  define("ember-data/system/store",
9917
- ["ember-data/system/adapter","ember-inflector/system/string","exports"],
9918
- function(__dependency1__, __dependency2__, __exports__) {
9504
+ ["ember-data/system/adapter","ember-inflector/system/string","ember-data/system/promise_proxies","exports"],
9505
+ function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
9919
9506
  "use strict";
9920
9507
  /*globals Ember*/
9921
9508
  /*jshint eqnull:true*/
@@ -9928,6 +9515,10 @@ define("ember-data/system/store",
9928
9515
  var Adapter = __dependency1__.Adapter;
9929
9516
  var singularize = __dependency2__.singularize;
9930
9517
 
9518
+ var promiseArray = __dependency3__.promiseArray;
9519
+ var promiseObject = __dependency3__.promiseObject;
9520
+
9521
+
9931
9522
  var get = Ember.get;
9932
9523
  var set = Ember.set;
9933
9524
  var once = Ember.run.once;
@@ -9937,7 +9528,7 @@ define("ember-data/system/store",
9937
9528
  var map = Ember.EnumerableUtils.map;
9938
9529
  var Promise = Ember.RSVP.Promise;
9939
9530
  var copy = Ember.copy;
9940
- var Store, PromiseObject, PromiseArray, RecordArrayManager, Model;
9531
+ var Store, RecordArrayManager, Model;
9941
9532
 
9942
9533
  var camelize = Ember.String.camelize;
9943
9534
 
@@ -10058,7 +9649,6 @@ define("ember-data/system/store",
10058
9649
  this.recordArrayManager = RecordArrayManager.create({
10059
9650
  store: this
10060
9651
  });
10061
- this._relationshipChanges = {};
10062
9652
  this._pendingSave = [];
10063
9653
  //Used to keep track of all the find requests that need to be coalesced
10064
9654
  this._pendingFetch = Ember.Map.create();
@@ -10269,10 +9859,10 @@ define("ember-data/system/store",
10269
9859
 
10270
9860
  ---
10271
9861
 
10272
- You can optionally preload specific attributes and relationships that you know of
9862
+ You can optionally `preload` specific attributes and relationships that you know of
10273
9863
  by passing them as the third argument to find.
10274
9864
 
10275
- For example, if your Ember route looks like `/posts/1/comments/2` and you API route
9865
+ For example, if your Ember route looks like `/posts/1/comments/2` and your API route
10276
9866
  for the comment also looks like `/posts/1/comments/2` if you want to fetch the comment
10277
9867
  without fetching the post you can pass in the post to the `find` call:
10278
9868
 
@@ -10320,6 +9910,7 @@ define("ember-data/system/store",
10320
9910
  @method find
10321
9911
  @param {String or subclass of DS.Model} type
10322
9912
  @param {Object|String|Integer|null} id
9913
+ @param {Object} preload - optional set of attributes and relationships passed in either as IDs or as actual models
10323
9914
  @return {Promise} promise
10324
9915
  */
10325
9916
  find: function(type, id, preload) {
@@ -10343,14 +9934,20 @@ define("ember-data/system/store",
10343
9934
  @private
10344
9935
  @param {String or subclass of DS.Model} type
10345
9936
  @param {String|Integer} id
9937
+ @param {Object} preload - optional set of attributes and relationships passed in either as IDs or as actual models
10346
9938
  @return {Promise} promise
10347
9939
  */
10348
9940
  findById: function(typeName, id, preload) {
10349
- var fetchedRecord;
10350
9941
 
10351
9942
  var type = this.modelFor(typeName);
10352
9943
  var record = this.recordForId(type, id);
10353
9944
 
9945
+ return this._findByRecord(record, preload);
9946
+ },
9947
+
9948
+ _findByRecord: function(record, preload) {
9949
+ var fetchedRecord;
9950
+
10354
9951
  if (preload) {
10355
9952
  record._preloadData(preload);
10356
9953
  }
@@ -10362,7 +9959,7 @@ define("ember-data/system/store",
10362
9959
  fetchedRecord = record._loadingPromise;
10363
9960
  }
10364
9961
 
10365
- return promiseObject(fetchedRecord || record, "DS: Store#findById " + type + " with id: " + id);
9962
+ return promiseObject(fetchedRecord || record, "DS: Store#findByRecord " + record.typeKey + " with id: " + get(record, 'id'));
10366
9963
  },
10367
9964
 
10368
9965
  /**
@@ -10377,7 +9974,6 @@ define("ember-data/system/store",
10377
9974
  */
10378
9975
  findByIds: function(type, ids) {
10379
9976
  var store = this;
10380
- var promiseLabel = "DS: Store#findByIds " + type;
10381
9977
 
10382
9978
  return promiseArray(Ember.RSVP.all(map(ids, function(id) {
10383
9979
  return store.findById(type, id);
@@ -10446,7 +10042,6 @@ define("ember-data/system/store",
10446
10042
  var adapter = store.adapterFor(type);
10447
10043
  var shouldCoalesce = !!adapter.findMany && adapter.coalesceFindRequests;
10448
10044
  var records = Ember.A(recordResolverPairs).mapBy('record');
10449
- var resolvers = Ember.A(recordResolverPairs).mapBy('resolver');
10450
10045
 
10451
10046
  function _fetchRecord(recordResolverPair) {
10452
10047
  recordResolverPair.resolver.resolve(store.fetchRecord(recordResolverPair.record));
@@ -10603,29 +10198,14 @@ define("ember-data/system/store",
10603
10198
  @param {Resolver} resolver
10604
10199
  @return {DS.ManyArray} records
10605
10200
  */
10606
- findMany: function(owner, inputRecords, typeName, resolver) {
10607
- var type = this.modelFor(typeName);
10608
- var records = Ember.A(inputRecords);
10609
- var unloadedRecords = records.filterProperty('isEmpty', true);
10610
- var manyArray = this.recordArrayManager.createManyArray(type, records);
10611
-
10612
- manyArray.loadingRecordsCount = unloadedRecords.length;
10613
-
10614
- if (unloadedRecords.length) {
10615
- forEach(unloadedRecords, function(record) {
10616
- this.recordArrayManager.registerWaitingRecordArray(record, manyArray);
10617
- }, this);
10618
-
10619
- resolver.resolve(this.scheduleFetchMany(unloadedRecords, owner));
10620
- } else {
10621
- if (resolver) { resolver.resolve(); }
10622
- manyArray.set('isLoaded', true);
10623
- once(manyArray, 'trigger', 'didLoad');
10624
- }
10625
-
10626
- return manyArray;
10201
+ findMany: function(records) {
10202
+ var store = this;
10203
+ return Promise.all( map(records, function(record) {
10204
+ return store._findByRecord(record);
10205
+ }));
10627
10206
  },
10628
10207
 
10208
+
10629
10209
  /**
10630
10210
  If a relationship was originally populated by the adapter as a link
10631
10211
  (as opposed to a list of IDs), this method is called when the
@@ -10644,13 +10224,11 @@ define("ember-data/system/store",
10644
10224
  @param {String or subclass of DS.Model} type
10645
10225
  @return {Promise} promise
10646
10226
  */
10647
- findHasMany: function(owner, link, relationship, resolver) {
10227
+ findHasMany: function(owner, link, type) {
10648
10228
  var adapter = this.adapterFor(owner.constructor);
10649
10229
 
10650
10230
 
10651
- var records = this.recordArrayManager.createManyArray(relationship.type, Ember.A([]));
10652
- resolver.resolve(_findHasMany(adapter, this, owner, link, relationship));
10653
- return records;
10231
+ return _findHasMany(adapter, this, owner, link, type);
10654
10232
  },
10655
10233
 
10656
10234
  /**
@@ -10990,6 +10568,7 @@ define("ember-data/system/store",
10990
10568
  if (data) {
10991
10569
  // normalize relationship IDs into records
10992
10570
  data = normalizeRelationships(this, record.constructor, data, record);
10571
+ setupRelationships(this, record, data);
10993
10572
 
10994
10573
  this.updateId(record, data);
10995
10574
  }
@@ -11110,11 +10689,11 @@ define("ember-data/system/store",
11110
10689
  var factory;
11111
10690
 
11112
10691
  if (typeof key === 'string') {
11113
- var normalizedKey = this.container.normalize('model:' + key);
11114
-
11115
- factory = this.container.lookupFactory(normalizedKey);
11116
- if (!factory) { throw new Ember.Error("No model was found for '" + key + "'"); }
11117
- factory.typeKey = this._normalizeTypeKey(normalizedKey.split(':', 2)[1]);
10692
+ factory = this.container.lookupFactory('model:' + key);
10693
+ if (!factory) {
10694
+ throw new Ember.Error("No model was found for '" + key + "'");
10695
+ }
10696
+ factory.typeKey = factory.typeKey || this._normalizeTypeKey(key);
11118
10697
  } else {
11119
10698
  // A factory already supplied. Ensure it has a normalized key.
11120
10699
  factory = key;
@@ -11192,16 +10771,28 @@ define("ember-data/system/store",
11192
10771
  // _partial is an internal param used by `update`.
11193
10772
  // If passed, it means that the data should be
11194
10773
  // merged into the existing data, not replace it.
11195
-
11196
-
10774
+
11197
10775
  var type = this.modelFor(typeName);
11198
10776
 
11199
- // normalize relationship IDs into records
10777
+ // If the payload contains relationships that are specified as
10778
+ // IDs, normalizeRelationships will convert them into DS.Model instances
10779
+ // (possibly unloaded) before we push the payload into the
10780
+ // store.
10781
+
11200
10782
  data = normalizeRelationships(this, type, data);
11201
10783
 
10784
+ // Actually load the record into the store.
10785
+
11202
10786
  this._load(type, data, _partial);
11203
10787
 
11204
- return this.recordForId(type, data.id);
10788
+ var record = this.recordForId(type, data.id);
10789
+
10790
+ // Now that the pushed record as well as any related records
10791
+ // are in the store, create the data structures used to track
10792
+ // relationships.
10793
+ setupRelationships(this, record, data);
10794
+
10795
+ return record;
11205
10796
  },
11206
10797
 
11207
10798
  /**
@@ -11334,9 +10925,14 @@ define("ember-data/system/store",
11334
10925
  @return {Array}
11335
10926
  */
11336
10927
  pushMany: function(type, datas) {
11337
- return map(datas, function(data) {
11338
- return this.push(type, data);
11339
- }, this);
10928
+ var length = datas.length;
10929
+ var result = new Array(length);
10930
+
10931
+ for (var i = 0; i < length; i++) {
10932
+ result[i] = this.push(type, datas[i]);
10933
+ }
10934
+
10935
+ return result;
11340
10936
  },
11341
10937
 
11342
10938
  /**
@@ -11419,59 +11015,6 @@ define("ember-data/system/store",
11419
11015
  typeMap.records.splice(loc, 1);
11420
11016
  },
11421
11017
 
11422
- // ........................
11423
- // . RELATIONSHIP CHANGES .
11424
- // ........................
11425
-
11426
- addRelationshipChangeFor: function(childRecord, childKey, parentRecord, parentKey, change) {
11427
- var clientId = childRecord.clientId;
11428
- var parentClientId = parentRecord ? parentRecord : parentRecord;
11429
- var key = childKey + parentKey;
11430
- var changes = this._relationshipChanges;
11431
-
11432
- if (!(clientId in changes)) {
11433
- changes[clientId] = {};
11434
- }
11435
- if (!(parentClientId in changes[clientId])) {
11436
- changes[clientId][parentClientId] = {};
11437
- }
11438
- if (!(key in changes[clientId][parentClientId])) {
11439
- changes[clientId][parentClientId][key] = {};
11440
- }
11441
- changes[clientId][parentClientId][key][change.changeType] = change;
11442
- },
11443
-
11444
- removeRelationshipChangeFor: function(clientRecord, childKey, parentRecord, parentKey, type) {
11445
- var clientId = clientRecord.clientId;
11446
- var parentClientId = parentRecord ? parentRecord.clientId : parentRecord;
11447
- var changes = this._relationshipChanges;
11448
- var key = childKey + parentKey;
11449
-
11450
- if (!(clientId in changes) || !(parentClientId in changes[clientId]) || !(key in changes[clientId][parentClientId])){
11451
- return;
11452
- }
11453
- delete changes[clientId][parentClientId][key][type];
11454
- },
11455
-
11456
- relationshipChangePairsFor: function(record){
11457
- var toReturn = [];
11458
-
11459
- if( !record ) { return toReturn; }
11460
-
11461
- //TODO(Igor) What about the other side
11462
- var changesObject = this._relationshipChanges[record.clientId];
11463
- for (var objKey in changesObject){
11464
- if (changesObject.hasOwnProperty(objKey)){
11465
- for (var changeKey in changesObject[objKey]){
11466
- if (changesObject[objKey].hasOwnProperty(changeKey)){
11467
- toReturn.push(changesObject[objKey][changeKey]);
11468
- }
11469
- }
11470
- }
11471
- }
11472
- return toReturn;
11473
- },
11474
-
11475
11018
  // ......................
11476
11019
  // . PER-TYPE ADAPTERS
11477
11020
  // ......................
@@ -11525,7 +11068,6 @@ define("ember-data/system/store",
11525
11068
  willDestroy: function() {
11526
11069
  var typeMaps = this.typeMaps;
11527
11070
  var keys = Ember.keys(typeMaps);
11528
- var store = this;
11529
11071
 
11530
11072
  var types = map(keys, byType);
11531
11073
 
@@ -11553,30 +11095,15 @@ define("ember-data/system/store",
11553
11095
  }
11554
11096
  });
11555
11097
 
11098
+
11556
11099
  function normalizeRelationships(store, type, data, record) {
11557
11100
  type.eachRelationship(function(key, relationship) {
11558
- // A link (usually a URL) was already provided in
11559
- // normalized form
11560
- if (data.links && data.links[key]) {
11561
- if (record && relationship.options.async) { record._relationships[key] = null; }
11562
- return;
11563
- }
11564
-
11565
11101
  var kind = relationship.kind;
11566
11102
  var value = data[key];
11567
-
11568
- if (value == null) {
11569
- if (kind === 'hasMany' && record) {
11570
- value = data[key] = record.get(key).toArray();
11571
- }
11572
- return;
11573
- }
11574
-
11575
11103
  if (kind === 'belongsTo') {
11576
11104
  deserializeRecordId(store, data, key, relationship, value);
11577
11105
  } else if (kind === 'hasMany') {
11578
11106
  deserializeRecordIds(store, data, key, relationship, value);
11579
- addUnsavedRecords(record, key, value);
11580
11107
  }
11581
11108
  });
11582
11109
 
@@ -11609,104 +11136,16 @@ define("ember-data/system/store",
11609
11136
  }
11610
11137
 
11611
11138
  function deserializeRecordIds(store, data, key, relationship, ids) {
11139
+ if (!Ember.isArray(ids)) {
11140
+ return;
11141
+ }
11612
11142
  for (var i=0, l=ids.length; i<l; i++) {
11613
11143
  deserializeRecordId(store, ids, i, relationship, ids[i]);
11614
11144
  }
11615
11145
  }
11616
11146
 
11617
- // If there are any unsaved records that are in a hasMany they won't be
11618
- // in the payload, so add them back in manually.
11619
- function addUnsavedRecords(record, key, data) {
11620
- if(record) {
11621
- var unsavedRecords = uniqById(Ember.A(data), record.get(key).filterBy('isNew'));
11622
- Ember.A(data).pushObjects(unsavedRecords);
11623
- }
11624
- }
11625
-
11626
- function uniqById(data, records) {
11627
- var currentIds = data.mapBy("id");
11628
- return records.reject(function(record) {
11629
- return Ember.A(currentIds).contains(record.id);
11630
- });
11631
- }
11632
-
11633
11147
  // Delegation to the adapter and promise management
11634
- /**
11635
- A `PromiseArray` is an object that acts like both an `Ember.Array`
11636
- and a promise. When the promise is resolved the resulting value
11637
- will be set to the `PromiseArray`'s `content` property. This makes
11638
- it easy to create data bindings with the `PromiseArray` that will be
11639
- updated when the promise resolves.
11640
-
11641
- For more information see the [Ember.PromiseProxyMixin
11642
- documentation](/api/classes/Ember.PromiseProxyMixin.html).
11643
-
11644
- Example
11645
-
11646
- ```javascript
11647
- var promiseArray = DS.PromiseArray.create({
11648
- promise: $.getJSON('/some/remote/data.json')
11649
- });
11650
-
11651
- promiseArray.get('length'); // 0
11652
-
11653
- promiseArray.then(function() {
11654
- promiseArray.get('length'); // 100
11655
- });
11656
- ```
11657
-
11658
- @class PromiseArray
11659
- @namespace DS
11660
- @extends Ember.ArrayProxy
11661
- @uses Ember.PromiseProxyMixin
11662
- */
11663
- PromiseArray = Ember.ArrayProxy.extend(Ember.PromiseProxyMixin);
11664
- /**
11665
- A `PromiseObject` is an object that acts like both an `Ember.Object`
11666
- and a promise. When the promise is resolved, then the resulting value
11667
- will be set to the `PromiseObject`'s `content` property. This makes
11668
- it easy to create data bindings with the `PromiseObject` that will
11669
- be updated when the promise resolves.
11670
11148
 
11671
- For more information see the [Ember.PromiseProxyMixin
11672
- documentation](/api/classes/Ember.PromiseProxyMixin.html).
11673
-
11674
- Example
11675
-
11676
- ```javascript
11677
- var promiseObject = DS.PromiseObject.create({
11678
- promise: $.getJSON('/some/remote/data.json')
11679
- });
11680
-
11681
- promiseObject.get('name'); // null
11682
-
11683
- promiseObject.then(function() {
11684
- promiseObject.get('name'); // 'Tomster'
11685
- });
11686
- ```
11687
-
11688
- @class PromiseObject
11689
- @namespace DS
11690
- @extends Ember.ObjectProxy
11691
- @uses Ember.PromiseProxyMixin
11692
- */
11693
- PromiseObject = Ember.ObjectProxy.extend(Ember.PromiseProxyMixin);
11694
-
11695
- function promiseObject(promise, label) {
11696
- return PromiseObject.create({
11697
- promise: Promise.cast(promise, label)
11698
- });
11699
- }
11700
-
11701
- function promiseArray(promise, label) {
11702
- return PromiseArray.create({
11703
- promise: Promise.cast(promise, label)
11704
- });
11705
- }
11706
-
11707
- function isThenable(object) {
11708
- return object && typeof object.then === 'function';
11709
- }
11710
11149
 
11711
11150
  function serializerFor(container, type, defaultSerializer) {
11712
11151
  return container.lookup('serializer:'+type) ||
@@ -11791,8 +11230,6 @@ define("ember-data/system/store",
11791
11230
  throw new Error('adapter.findMany returned undefined, this was very likely a mistake');
11792
11231
  }
11793
11232
 
11794
- var guardedPromise;
11795
-
11796
11233
  promise = Promise.cast(promise, label);
11797
11234
  promise = _guard(promise, _bind(_objectIsAlive, store));
11798
11235
 
@@ -11818,7 +11255,7 @@ define("ember-data/system/store",
11818
11255
 
11819
11256
 
11820
11257
  var records = store.pushMany(relationship.type, payload);
11821
- record.updateHasMany(relationship.key, records);
11258
+ return records;
11822
11259
  }, null, "DS: Extract payload of " + record + " : hasMany " + relationship.type);
11823
11260
  }
11824
11261
 
@@ -11834,8 +11271,6 @@ define("ember-data/system/store",
11834
11271
  return promise.then(function(adapterPayload) {
11835
11272
  var payload = serializer.extract(store, relationship.type, adapterPayload, null, 'findBelongsTo');
11836
11273
  var record = store.push(relationship.type, payload);
11837
-
11838
- record.updateBelongsTo(relationship.key, record);
11839
11274
  return record;
11840
11275
  }, null, "DS: Extract payload of " + record + " : " + relationship.type);
11841
11276
  }
@@ -11908,10 +11343,30 @@ define("ember-data/system/store",
11908
11343
  }, label);
11909
11344
  }
11910
11345
 
11911
- __exports__.Store = Store;
11912
- __exports__.PromiseArray = PromiseArray;
11913
- __exports__.PromiseObject = PromiseObject;
11346
+ function setupRelationships(store, record, data) {
11347
+ var type = record.constructor;
11348
+
11349
+ type.eachRelationship(function(key, descriptor) {
11350
+ var kind = descriptor.kind;
11351
+ var value = data[key];
11352
+ var relationship = record._relationships[key];
11914
11353
 
11354
+ if (data.links && data.links[key]) {
11355
+ relationship.updateLink(data.links[key]);
11356
+ }
11357
+
11358
+ if (kind === 'belongsTo') {
11359
+ if (value === undefined) {
11360
+ return;
11361
+ }
11362
+ relationship.setRecord(value);
11363
+ } else if (kind === 'hasMany' && value) {
11364
+ relationship.updateRecordsFromAdapter(value);
11365
+ }
11366
+ });
11367
+ }
11368
+
11369
+ __exports__.Store = Store;
11915
11370
  __exports__["default"] = Store;
11916
11371
  });
11917
11372
  define("ember-data/transforms",