From 73bfc1175d2551f97d95d1e2efffdc5fbd343b19 Mon Sep 17 00:00:00 2001 From: Sam Heuck Date: Sat, 28 Mar 2015 17:17:39 -0500 Subject: [PATCH 1/5] fixes ref to jquery; uses debug build of ember for testing; adds qunit to dev deps; Signed-off-by: Sam Heuck --- bower.json | 14 +++++++++++--- spec/index.html | 4 ++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/bower.json b/bower.json index f0c9243..94c8ad3 100644 --- a/bower.json +++ b/bower.json @@ -2,10 +2,18 @@ "name": "ember-couchdb-kit", "description": "An Ember.js adapter for Apache CouchDB", "repository": { - "type": "git", "url": "git://github.com/zatvobor/ember-couchdb-kit.git" + "type": "git", + "url": "git://github.com/zatvobor/ember-couchdb-kit.git" }, "main": "dist/ember-couchdb-kit.min.js", "ignore": [ - "example", "spec", "src", "Gruntfile.js", "package.json" - ] + "example", + "spec", + "src", + "Gruntfile.js", + "package.json" + ], + "devDependencies": { + "qunit": "~1.17.1" + } } diff --git a/spec/index.html b/spec/index.html index 9a08a0f..d43b322 100644 --- a/spec/index.html +++ b/spec/index.html @@ -6,8 +6,8 @@ - - + + From fc3f0239d0776a32917df0bab13f3e02107e6cf5 Mon Sep 17 00:00:00 2001 From: Sam Heuck Date: Sat, 28 Mar 2015 17:40:42 -0500 Subject: [PATCH 2/5] fixes an assertion on belongsTo test Signed-off-by: Sam Heuck --- spec/document-adapter_spec.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/document-adapter_spec.coffee b/spec/document-adapter_spec.coffee index ea02088..8ed1116 100644 --- a/spec/document-adapter_spec.coffee +++ b/spec/document-adapter_spec.coffee @@ -31,7 +31,7 @@ test 'retrieve belongsTo field as raw json', 1, -> person = @subject.create.call @, 'user', id: Math.floor(Math.random() * 10000), name: 'john' message = @subject.create.call @, 'message', user: person message.save().then @async -> - equal message.get('_data.user.id'), person.get('name'), 'Retrieves raw belongsTo json ok' + equal message.get('_data.user'), person.get('name'), 'Retrieves raw belongsTo json ok' test 'hasMany relation', 1, -> article = @subject.create.call @, 'article', label: 'Label' From 2eb1b65df207938bfe036bd255b4654959a5eee8 Mon Sep 17 00:00:00 2001 From: Sam Heuck Date: Sat, 28 Mar 2015 23:26:53 -0500 Subject: [PATCH 3/5] fixes deprecations on Ember.Container for test env Signed-off-by: Sam Heuck --- spec/env.coffee | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/spec/env.coffee b/spec/env.coffee index c3d6e2c..4e1fe68 100644 --- a/spec/env.coffee +++ b/spec/env.coffee @@ -115,30 +115,31 @@ window.setupStore = (options) -> env = {} options = options or {} - container = env.container = new Ember.Container() + registry = new Ember.Registry(options) + container = env.container = registry.container() adapter = env.adapter = EmberCouchDBKit.DocumentAdapter.extend db:'doc', host: 'http://localhost:5984' delete options.adapter for prop of options - container.register "model:" + prop, options[prop] + registry.register "model:" + prop, options[prop] - container.register "store:main", DS.Store.extend adapter: adapter + registry.register "store:main", DS.Store.extend adapter: adapter - container.register "serializer:_default", EmberCouchDBKit.DocumentSerializer - container.register "serializer:history", EmberCouchDBKit.RevSerializer - container.register "serializer:attachment", EmberCouchDBKit.AttachmentSerializer + registry.register "serializer:_default", EmberCouchDBKit.DocumentSerializer + registry.register "serializer:history", EmberCouchDBKit.RevSerializer + registry.register "serializer:attachment", EmberCouchDBKit.AttachmentSerializer - container.register "adapter:_rest", DS.RESTAdapter - container.register "adapter:history", EmberCouchDBKit.RevAdapter.extend db:'doc', host: 'http://localhost:5984' - container.register "adapter:attachment", EmberCouchDBKit.AttachmentAdapter.extend db:'doc', host: 'http://localhost:5984' + registry.register "adapter:_rest", DS.RESTAdapter + registry.register "adapter:history", EmberCouchDBKit.RevAdapter.extend db:'doc', host: 'http://localhost:5984' + registry.register "adapter:attachment", EmberCouchDBKit.AttachmentAdapter.extend db:'doc', host: 'http://localhost:5984' - container.register 'transform:boolean', DS.BooleanTransform - container.register 'transform:date', DS.DateTransform - container.register 'transform:number', DS.NumberTransform - container.register 'transform:string', DS.StringTransform + registry.register 'transform:boolean', DS.BooleanTransform + registry.register 'transform:date', DS.DateTransform + registry.register 'transform:number', DS.NumberTransform + registry.register 'transform:string', DS.StringTransform - container.injection "serializer", "store", "store:main" + registry.injection "serializer", "store", "store:main" env.serializer = container.lookup("serializer:_default") env.restSerializer = container.lookup("serializer:_rest") From 7f65dedff926462b3095fb337f6a5379bbbd9326 Mon Sep 17 00:00:00 2001 From: Sam Heuck Date: Sun, 29 Mar 2015 01:04:00 -0500 Subject: [PATCH 4/5] fixes deprecations Signed-off-by: Sam Heuck --- dist/ember-couchdb-kit.js | 17 ++++++----------- dist/ember-couchdb-kit.min.js | 2 +- spec/revs-adapter_spec.coffee | 2 ++ src/document-adapter.coffee | 14 +++++--------- 4 files changed, 14 insertions(+), 21 deletions(-) diff --git a/dist/ember-couchdb-kit.js b/dist/ember-couchdb-kit.js index 8d68ea2..1996916 100644 --- a/dist/ember-couchdb-kit.js +++ b/dist/ember-couchdb-kit.js @@ -120,31 +120,26 @@ var attribute, belongsTo, key; attribute = relationship.options.attribute || "id"; key = relationship.key; - belongsTo = Ember.get(record, key); + belongsTo = record.belongsTo(key); if (Ember.isNone(belongsTo)) { return; } - json[key] = Ember.get(belongsTo, attribute); + console.log(belongsTo); + json[key] = belongsTo.attr(attribute); if (relationship.options.polymorphic) { - return json[key + "_type"] = belongsTo.constructor.typeKey; + return json[key + "_type"] = belongsTo.typeKey; } }, serializeHasMany: function(record, json, relationship) { var attribute, key, relationshipType; attribute = relationship.options.attribute || "id"; key = relationship.key; - relationshipType = record.constructor.determineRelationshipType(relationship); + relationshipType = record.type.determineRelationshipType(relationship); switch (relationshipType) { case "manyToNone": case "manyToMany": case "manyToOne": - if (record.get(key).get('content.isLoaded') || Ember.get(record, key).get('isLoaded')) { - return json[key] = Ember.get(record, key).mapBy(attribute); - } else { - if (record.get("_data.%@".fmt(key))) { - return json[key] = record.get("_data.%@".fmt(key)).mapBy('id'); - } - } + return json[key] = record.hasMany(key).mapBy(attribute); } } }); diff --git a/dist/ember-couchdb-kit.min.js b/dist/ember-couchdb-kit.min.js index f7ece02..713df94 100644 --- a/dist/ember-couchdb-kit.min.js +++ b/dist/ember-couchdb-kit.min.js @@ -1 +1 @@ -(function(){window.EmberCouchDBKit=Ember.Namespace.create({VERSION:"1.0.2"}),EmberCouchDBKit.sharedStore=function(){var a;return a={},{add:function(b,c,d){return a[b+":"+c]=d},get:function(b,c){return a[b+":"+c]},remove:function(b,c){return delete a[b+":"+c]},mapRevIds:function(a,b){var c=this;return this.get(a,b)._revs_info.map(function(d){return"%@/%@".fmt(c.get(a,b)._id,d.rev)})},stopAll:function(){var b,c,d;d=[];for(b in a)c=a[b],d.push(0===b.indexOf("changes_worker")?c.stop():void 0);return d}}}()}).call(this),function(){EmberCouchDBKit.DocumentSerializer=DS.RESTSerializer.extend({primaryKey:"_id",normalize:function(a,b,c){return this.normalizeId(b),this.normalizeAttachments(b._attachments,a.typeKey,b),this.addHistoryId(b),this.normalizeUsingDeclaredMapping(a,b),this.normalizeAttributes(a,b),this.normalizeRelationships(a,b),this.normalizeHash&&this.normalizeHash[c]?this.normalizeHash[c](b):b?(this.applyTransforms(a,b),b):b},extractSingle:function(a,b,c,d,e){return this._super(a,b,c,d,e)},serialize:function(a,b){return this._super(a,b)},addHistoryId:function(a){return a.history="%@/history".fmt(a.id)},normalizeAttachments:function(a,b,c){var d,e,f,g,h;h=[];for(e in a)g=a[e],f=""+c._id+"/"+e,d={id:f,content_type:g.content_type,digest:g.digest,length:g.length,stub:g.stub,doc_id:c._id,rev:c.rev,file_name:e,model_name:b,revpos:g.revpos,db:g.db},EmberCouchDBKit.sharedStore.add("attachment",f,d),h.push(f);return c.attachments=h},normalizeId:function(a){return a.id=a._id||a.id},normalizeRelationships:function(a,b){var c,d;return d=void 0,c=void 0,this.keyForRelationship?a.eachRelationship(function(a,c){return d=this.keyForRelationship(a,c.kind),a!==d?(b[a]=b[d],delete b[d]):void 0},this):void 0},serializeBelongsTo:function(a,b,c){var d,e,f;return d=c.options.attribute||"id",f=c.key,e=Ember.get(a,f),Ember.isNone(e)?void 0:(b[f]=Ember.get(e,d),c.options.polymorphic?b[f+"_type"]=e.constructor.typeKey:void 0)},serializeHasMany:function(a,b,c){var d,e,f;switch(d=c.options.attribute||"id",e=c.key,f=a.constructor.determineRelationshipType(c)){case"manyToNone":case"manyToMany":case"manyToOne":if(a.get(e).get("content.isLoaded")||Ember.get(a,e).get("isLoaded"))return b[e]=Ember.get(a,e).mapBy(d);if(a.get("_data.%@".fmt(e)))return b[e]=a.get("_data.%@".fmt(e)).mapBy("id")}}}),EmberCouchDBKit.DocumentAdapter=DS.Adapter.extend({defaultSerializer:"_default",customTypeLookup:!1,typeViewName:"all",buildURL:function(){var a,b,c;return a=Ember.get(this,"host"),b=Ember.get(this,"namespace"),c=[],a&&c.push(a),b&&c.push(b),c.push(this.get("db")),c=c.join("/"),a||(c="/"+c),c},ajax:function(a,b,c,d){return this._ajax("%@/%@".fmt(this.buildURL(),a||""),b,c,d)},_ajax:function(a,b,c,d){var e;return null==d&&(d={}),e=this,new Ember.RSVP.Promise(function(f,g){var h;return""===a.split("/").pop()&&(a=a.substr(0,a.length-1)),d.url=a,d.type=b,d.dataType="json",d.contentType="application/json; charset=utf-8",d.context=e,d.data&&"GET"!==b&&(d.data=JSON.stringify(d.data)),e.headers&&(h=e.headers,d.beforeSend=function(a){return forEach.call(Ember.keys(h),function(b){return a.setRequestHeader(b,h[b])})}),d.success||(d.success=function(a){var b;return b=c.call(e,a),Ember.run(null,f,b)}),d.error=function(a){return a&&(a.then=null),Ember.run(null,g,a)},Ember.$.ajax(d)})},_normalizeRevision:function(a){return a&&a._rev&&(a.rev=a._rev,delete a._rev),a},shouldCommit:function(){return this._super.apply(arguments)},find:function(a,b,c){var d;return this._checkForRevision(c)?this.findWithRev(a,b,c):(d=function(a){var c;return this._normalizeRevision(a),c={},c[b.typeKey]=a,c},this.ajax(c,"GET",d))},findWithRev:function(a,b,c,d){var e,f,g,h,i;return h=c.split("/").slice(0,2),g=h[0],i=h[1],f="%@?rev=%@".fmt(g,i),e=function(a){var d;return this._normalizeRevision(a),d={},a._id=c,d[b.typeKey]=a,d},this.ajax(f,"GET",e,d)},findManyWithRev:function(a,b,c){var d,e,f,g,h=this;return f=Ember.String.pluralize(b.typeKey),g=this,d={},d[f]=[],e={async:!1},c.forEach(function(a){var b,c,i,j;return i=a.split("/").slice(0,2),c=i[0],j=i[1],b="%@?rev=%@".fmt(c,j),b="%@/%@".fmt(h.buildURL(),b),e.url=b,e.type="GET",e.dataType="json",e.contentType="application/json; charset=utf-8",e.success=function(b){return b._id=a,g._normalizeRevision(b),d[f].push(b)},Ember.$.ajax(e)}),d},findMany:function(a,b,c){var d,e;return this._checkForRevision(c[0])?this.findManyWithRev(a,b,c):(d={include_docs:!0,keys:c},e=function(a){var c,d=this;return c={},c[Ember.String.pluralize(b.typeKey)]=a.rows.getEach("doc").map(function(a){return d._normalizeRevision(a)}),c},this.ajax("_all_docs?include_docs=true","POST",e,{data:d}))},findQuery:function(a,b,c){var d,e;return d=c.designDoc||this.get("designDoc"),c.options||(c.options={}),c.options.include_docs=!0,e=function(a){var b,c=this;return b={},b[d]=a.rows.getEach("doc").map(function(a){return c._normalizeRevision(a)}),b},this.ajax("_design/%@/_view/%@".fmt(d,c.viewName),"GET",e,{context:this,data:c.options})},findAll:function(a,b){var c,d,e,f,g;return f=Ember.String.singularize(b.typeKey),d=this.get("designDoc")||f,g=this.get("typeViewName"),e=function(a){var c,d=this;return c={},c[[Ember.String.pluralize(b.typeKey)]]=a.rows.getEach("doc").map(function(a){return d._normalizeRevision(a)}),c},c={include_docs:!0,key:'"'+f+'"'},this.ajax("_design/%@/_view/%@".fmt(d,g),"GET",e,{data:c})},createRecord:function(a,b,c){var d;return d=a.serializerFor(b.typeKey).serialize(c._createSnapshot()),this._push(a,b,c,d)},updateRecord:function(a,b,c){var d;return d=this.serialize(c,{associations:!0,includeId:!0}),c.get("attachments")&&this._updateAttachmnets(c,d),this._push(a,b,c,d)},deleteRecord:function(a,b,c){return this.ajax("%@?rev=%@".fmt(c.get("id"),c.get("_data.rev")),"DELETE",function(){},{})},_updateAttachmnets:function(a,b){var c;return c={},a.get("attachments").forEach(function(a){var b;return b=EmberCouchDBKit.sharedStore.get("attachment",a.get("id")),c[a.get("file_name")]={content_type:b.content_type,digest:b.digest,length:b.length,stub:b.stub,revpos:b.revpos}}),b._attachments=c,delete b.attachments,delete b.history},_checkForRevision:function(a){return a.split("/").length>1},_push:function(a,b,c,d){var e,f,g;return e=c.get("id")||"",f=c.get("id")?"PUT":"POST",c.get("_data.rev")&&(d._rev=c.get("_data.rev")),g=function(a){var c,e;return c=d||{},this._normalizeRevision(a),e={},e[b.typeKey]=$.extend(c,a),e},this.ajax(e,f,g,{data:d})}})}.call(this),function(){EmberCouchDBKit.AttachmentSerializer=DS.RESTSerializer.extend({primaryKey:"id",normalize:function(a,b){var c,d;return d=this,c=b._rev||b.rev,this.store.find(b.model_name,b.doc_id).then(function(a){return a.get("_data.rev")!==c&&d.getIntRevision(a.get("_data.rev"))1},_push:function(a,b,c,d){var e,f,g;return e=c.get("id")||"",f=c.get("id")?"PUT":"POST",c.get("_data.rev")&&(d._rev=c.get("_data.rev")),g=function(a){var c,e;return c=d||{},this._normalizeRevision(a),e={},e[b.typeKey]=$.extend(c,a),e},this.ajax(e,f,g,{data:d})}})}.call(this),function(){EmberCouchDBKit.AttachmentSerializer=DS.RESTSerializer.extend({primaryKey:"id",normalize:function(a,b){var c,d;return d=this,c=b._rev||b.rev,this.store.find(b.model_name,b.doc_id).then(function(a){return a.get("_data.rev")!==c&&d.getIntRevision(a.get("_data.rev")) saved.save().then @async (updated) => stop() history = updated.get 'history' + console.log(history) setTimeout => history.reload() setTimeout => start() + console.log(history.get('_data')) equal history.get('user.id').split('/')[0], person.id, 'history belongsTo user' , 1000 , 1000 diff --git a/src/document-adapter.coffee b/src/document-adapter.coffee index 08c6070..a1eb080 100644 --- a/src/document-adapter.coffee +++ b/src/document-adapter.coffee @@ -69,22 +69,18 @@ EmberCouchDBKit.DocumentSerializer = DS.RESTSerializer.extend serializeBelongsTo: (record, json, relationship) -> attribute = (relationship.options.attribute || "id") key = relationship.key - belongsTo = Ember.get(record, key) + belongsTo = record.belongsTo(key) return if Ember.isNone(belongsTo) - json[key] = Ember.get(belongsTo, attribute) - json[key + "_type"] = belongsTo.constructor.typeKey if relationship.options.polymorphic + json[key] = belongsTo.attr(attribute) + json[key + "_type"] = belongsTo.typeKey if relationship.options.polymorphic serializeHasMany: (record, json, relationship) -> attribute = (relationship.options.attribute || "id") key = relationship.key - relationshipType = record.constructor.determineRelationshipType(relationship) + relationshipType = record.type.determineRelationshipType(relationship) switch relationshipType when "manyToNone", "manyToMany", "manyToOne" - if record.get(key).get('content.isLoaded') || Ember.get(record, key).get('isLoaded') - json[key] = Ember.get(record, key).mapBy(attribute) - else - if record.get("_data.%@".fmt(key)) - json[key] = record.get("_data.%@".fmt(key)).mapBy('id') + json[key] = record.hasMany(key).mapBy(attribute) ### A `DocumentAdapter` should be used as a main adapter for working with models as a CouchDB documents. From 269988846cf6c3703dc43853b6f060c1ba157ba9 Mon Sep 17 00:00:00 2001 From: Sam Heuck Date: Sun, 29 Mar 2015 01:06:36 -0500 Subject: [PATCH 5/5] fixes serializeBelongsTo Signed-off-by: Sam Heuck --- dist/ember-couchdb-kit.js | 3 +-- dist/ember-couchdb-kit.min.js | 2 +- spec/revs-adapter_spec.coffee | 2 -- src/document-adapter.coffee | 2 +- 4 files changed, 3 insertions(+), 6 deletions(-) diff --git a/dist/ember-couchdb-kit.js b/dist/ember-couchdb-kit.js index 1996916..49db1c2 100644 --- a/dist/ember-couchdb-kit.js +++ b/dist/ember-couchdb-kit.js @@ -124,8 +124,7 @@ if (Ember.isNone(belongsTo)) { return; } - console.log(belongsTo); - json[key] = belongsTo.attr(attribute); + json[key] = attribute === "id" ? belongsTo.id : belongsTo.attr(attribute); if (relationship.options.polymorphic) { return json[key + "_type"] = belongsTo.typeKey; } diff --git a/dist/ember-couchdb-kit.min.js b/dist/ember-couchdb-kit.min.js index 713df94..3d2b7c5 100644 --- a/dist/ember-couchdb-kit.min.js +++ b/dist/ember-couchdb-kit.min.js @@ -1 +1 @@ -(function(){window.EmberCouchDBKit=Ember.Namespace.create({VERSION:"1.0.2"}),EmberCouchDBKit.sharedStore=function(){var a;return a={},{add:function(b,c,d){return a[b+":"+c]=d},get:function(b,c){return a[b+":"+c]},remove:function(b,c){return delete a[b+":"+c]},mapRevIds:function(a,b){var c=this;return this.get(a,b)._revs_info.map(function(d){return"%@/%@".fmt(c.get(a,b)._id,d.rev)})},stopAll:function(){var b,c,d;d=[];for(b in a)c=a[b],d.push(0===b.indexOf("changes_worker")?c.stop():void 0);return d}}}()}).call(this),function(){EmberCouchDBKit.DocumentSerializer=DS.RESTSerializer.extend({primaryKey:"_id",normalize:function(a,b,c){return this.normalizeId(b),this.normalizeAttachments(b._attachments,a.typeKey,b),this.addHistoryId(b),this.normalizeUsingDeclaredMapping(a,b),this.normalizeAttributes(a,b),this.normalizeRelationships(a,b),this.normalizeHash&&this.normalizeHash[c]?this.normalizeHash[c](b):b?(this.applyTransforms(a,b),b):b},extractSingle:function(a,b,c,d,e){return this._super(a,b,c,d,e)},serialize:function(a,b){return this._super(a,b)},addHistoryId:function(a){return a.history="%@/history".fmt(a.id)},normalizeAttachments:function(a,b,c){var d,e,f,g,h;h=[];for(e in a)g=a[e],f=""+c._id+"/"+e,d={id:f,content_type:g.content_type,digest:g.digest,length:g.length,stub:g.stub,doc_id:c._id,rev:c.rev,file_name:e,model_name:b,revpos:g.revpos,db:g.db},EmberCouchDBKit.sharedStore.add("attachment",f,d),h.push(f);return c.attachments=h},normalizeId:function(a){return a.id=a._id||a.id},normalizeRelationships:function(a,b){var c,d;return d=void 0,c=void 0,this.keyForRelationship?a.eachRelationship(function(a,c){return d=this.keyForRelationship(a,c.kind),a!==d?(b[a]=b[d],delete b[d]):void 0},this):void 0},serializeBelongsTo:function(a,b,c){var d,e,f;return d=c.options.attribute||"id",f=c.key,e=a.belongsTo(f),Ember.isNone(e)?void 0:(console.log(e),b[f]=e.attr(d),c.options.polymorphic?b[f+"_type"]=e.typeKey:void 0)},serializeHasMany:function(a,b,c){var d,e,f;switch(d=c.options.attribute||"id",e=c.key,f=a.type.determineRelationshipType(c)){case"manyToNone":case"manyToMany":case"manyToOne":return b[e]=a.hasMany(e).mapBy(d)}}}),EmberCouchDBKit.DocumentAdapter=DS.Adapter.extend({defaultSerializer:"_default",customTypeLookup:!1,typeViewName:"all",buildURL:function(){var a,b,c;return a=Ember.get(this,"host"),b=Ember.get(this,"namespace"),c=[],a&&c.push(a),b&&c.push(b),c.push(this.get("db")),c=c.join("/"),a||(c="/"+c),c},ajax:function(a,b,c,d){return this._ajax("%@/%@".fmt(this.buildURL(),a||""),b,c,d)},_ajax:function(a,b,c,d){var e;return null==d&&(d={}),e=this,new Ember.RSVP.Promise(function(f,g){var h;return""===a.split("/").pop()&&(a=a.substr(0,a.length-1)),d.url=a,d.type=b,d.dataType="json",d.contentType="application/json; charset=utf-8",d.context=e,d.data&&"GET"!==b&&(d.data=JSON.stringify(d.data)),e.headers&&(h=e.headers,d.beforeSend=function(a){return forEach.call(Ember.keys(h),function(b){return a.setRequestHeader(b,h[b])})}),d.success||(d.success=function(a){var b;return b=c.call(e,a),Ember.run(null,f,b)}),d.error=function(a){return a&&(a.then=null),Ember.run(null,g,a)},Ember.$.ajax(d)})},_normalizeRevision:function(a){return a&&a._rev&&(a.rev=a._rev,delete a._rev),a},shouldCommit:function(){return this._super.apply(arguments)},find:function(a,b,c){var d;return this._checkForRevision(c)?this.findWithRev(a,b,c):(d=function(a){var c;return this._normalizeRevision(a),c={},c[b.typeKey]=a,c},this.ajax(c,"GET",d))},findWithRev:function(a,b,c,d){var e,f,g,h,i;return h=c.split("/").slice(0,2),g=h[0],i=h[1],f="%@?rev=%@".fmt(g,i),e=function(a){var d;return this._normalizeRevision(a),d={},a._id=c,d[b.typeKey]=a,d},this.ajax(f,"GET",e,d)},findManyWithRev:function(a,b,c){var d,e,f,g,h=this;return f=Ember.String.pluralize(b.typeKey),g=this,d={},d[f]=[],e={async:!1},c.forEach(function(a){var b,c,i,j;return i=a.split("/").slice(0,2),c=i[0],j=i[1],b="%@?rev=%@".fmt(c,j),b="%@/%@".fmt(h.buildURL(),b),e.url=b,e.type="GET",e.dataType="json",e.contentType="application/json; charset=utf-8",e.success=function(b){return b._id=a,g._normalizeRevision(b),d[f].push(b)},Ember.$.ajax(e)}),d},findMany:function(a,b,c){var d,e;return this._checkForRevision(c[0])?this.findManyWithRev(a,b,c):(d={include_docs:!0,keys:c},e=function(a){var c,d=this;return c={},c[Ember.String.pluralize(b.typeKey)]=a.rows.getEach("doc").map(function(a){return d._normalizeRevision(a)}),c},this.ajax("_all_docs?include_docs=true","POST",e,{data:d}))},findQuery:function(a,b,c){var d,e;return d=c.designDoc||this.get("designDoc"),c.options||(c.options={}),c.options.include_docs=!0,e=function(a){var b,c=this;return b={},b[d]=a.rows.getEach("doc").map(function(a){return c._normalizeRevision(a)}),b},this.ajax("_design/%@/_view/%@".fmt(d,c.viewName),"GET",e,{context:this,data:c.options})},findAll:function(a,b){var c,d,e,f,g;return f=Ember.String.singularize(b.typeKey),d=this.get("designDoc")||f,g=this.get("typeViewName"),e=function(a){var c,d=this;return c={},c[[Ember.String.pluralize(b.typeKey)]]=a.rows.getEach("doc").map(function(a){return d._normalizeRevision(a)}),c},c={include_docs:!0,key:'"'+f+'"'},this.ajax("_design/%@/_view/%@".fmt(d,g),"GET",e,{data:c})},createRecord:function(a,b,c){var d;return d=a.serializerFor(b.typeKey).serialize(c._createSnapshot()),this._push(a,b,c,d)},updateRecord:function(a,b,c){var d;return d=this.serialize(c,{associations:!0,includeId:!0}),c.get("attachments")&&this._updateAttachmnets(c,d),this._push(a,b,c,d)},deleteRecord:function(a,b,c){return this.ajax("%@?rev=%@".fmt(c.get("id"),c.get("_data.rev")),"DELETE",function(){},{})},_updateAttachmnets:function(a,b){var c;return c={},a.get("attachments").forEach(function(a){var b;return b=EmberCouchDBKit.sharedStore.get("attachment",a.get("id")),c[a.get("file_name")]={content_type:b.content_type,digest:b.digest,length:b.length,stub:b.stub,revpos:b.revpos}}),b._attachments=c,delete b.attachments,delete b.history},_checkForRevision:function(a){return a.split("/").length>1},_push:function(a,b,c,d){var e,f,g;return e=c.get("id")||"",f=c.get("id")?"PUT":"POST",c.get("_data.rev")&&(d._rev=c.get("_data.rev")),g=function(a){var c,e;return c=d||{},this._normalizeRevision(a),e={},e[b.typeKey]=$.extend(c,a),e},this.ajax(e,f,g,{data:d})}})}.call(this),function(){EmberCouchDBKit.AttachmentSerializer=DS.RESTSerializer.extend({primaryKey:"id",normalize:function(a,b){var c,d;return d=this,c=b._rev||b.rev,this.store.find(b.model_name,b.doc_id).then(function(a){return a.get("_data.rev")!==c&&d.getIntRevision(a.get("_data.rev"))1},_push:function(a,b,c,d){var e,f,g;return e=c.get("id")||"",f=c.get("id")?"PUT":"POST",c.get("_data.rev")&&(d._rev=c.get("_data.rev")),g=function(a){var c,e;return c=d||{},this._normalizeRevision(a),e={},e[b.typeKey]=$.extend(c,a),e},this.ajax(e,f,g,{data:d})}})}.call(this),function(){EmberCouchDBKit.AttachmentSerializer=DS.RESTSerializer.extend({primaryKey:"id",normalize:function(a,b){var c,d;return d=this,c=b._rev||b.rev,this.store.find(b.model_name,b.doc_id).then(function(a){return a.get("_data.rev")!==c&&d.getIntRevision(a.get("_data.rev")) saved.save().then @async (updated) => stop() history = updated.get 'history' - console.log(history) setTimeout => history.reload() setTimeout => start() - console.log(history.get('_data')) equal history.get('user.id').split('/')[0], person.id, 'history belongsTo user' , 1000 , 1000 diff --git a/src/document-adapter.coffee b/src/document-adapter.coffee index a1eb080..cb53dd3 100644 --- a/src/document-adapter.coffee +++ b/src/document-adapter.coffee @@ -71,7 +71,7 @@ EmberCouchDBKit.DocumentSerializer = DS.RESTSerializer.extend key = relationship.key belongsTo = record.belongsTo(key) return if Ember.isNone(belongsTo) - json[key] = belongsTo.attr(attribute) + json[key] = if (attribute == "id") then belongsTo.id else belongsTo.attr(attribute) json[key + "_type"] = belongsTo.typeKey if relationship.options.polymorphic serializeHasMany: (record, json, relationship) ->