diff --git a/public/javascripts/app/collections/comments.js b/public/javascripts/app/collections/comments.js index 03fc518cb..d564f8682 100644 --- a/public/javascripts/app/collections/comments.js +++ b/public/javascripts/app/collections/comments.js @@ -1,3 +1,7 @@ app.collections.Comments = Backbone.Collection.extend({ - model: app.models.Comment + model: app.models.Comment, + + initialize : function(models, options) { + this.url = "/posts/" + options.post.id + "/comments" //not delegating to post.url() because when it is in a stream collection it delegates to that url + } }); diff --git a/public/javascripts/app/collections/likes.js b/public/javascripts/app/collections/likes.js index d576b8e59..01831d4f9 100644 --- a/public/javascripts/app/collections/likes.js +++ b/public/javascripts/app/collections/likes.js @@ -1,3 +1,7 @@ app.collections.Likes = Backbone.Collection.extend({ - model: app.models.Like + model: app.models.Like, + + initialize : function(models, options) { + this.url = "/posts/" + options.post.id + "/likes" //not delegating to post.url() because when it is in a stream collection it delegates to that url + } }); diff --git a/public/javascripts/app/models/post.js b/public/javascripts/app/models/post.js index b9641156d..8ab106e49 100644 --- a/public/javascripts/app/models/post.js +++ b/public/javascripts/app/models/post.js @@ -1,21 +1,16 @@ app.models.Post = Backbone.Model.extend({ + urlRoot : "/posts", initialize : function() { - this.comments = new app.collections.Comments(this.get("last_three_comments")); - this.comments.url = this.url() + '/comments'; - - this.likes = new app.collections.Likes(this.get("user_like")); // load in the user like initially - this.likes.url = this.url() + '/likes'; + this.comments = new app.collections.Comments(this.get("last_three_comments"), {post : this}); + this.likes = new app.collections.Likes(this.get("user_like"), { post : this}); // load in the user like initially }, - url : function() { - if(this.id) { - return "/posts/" + this.id; - } else { - return "/posts" - } + createdAt : function() { + return new Date(this.get("created_at")) / 1000; }, - reshareUrl : "/reshares", + createReshareUrl : "/reshares", + reshare : function(){ return this._reshare = this._reshare || new app.models.Reshare({root_guid : this.get("guid")}); }, @@ -33,17 +28,8 @@ app.models.Post = Backbone.Model.extend({ } }, - createdAt : function() { - return new Date(this.get("created_at")) / 1000; - }, - - - likeUrl : function(){ - return this.url() + "/likes" - }, - like : function() { - this.set({ user_like : this.likes.create({}, {url : this.likeUrl()}) }); + this.set({ user_like : this.likes.create() }); }, unlike : function() { diff --git a/public/javascripts/app/views/feedback_view.js b/public/javascripts/app/views/feedback_view.js index 68dc013a1..84c1ced12 100644 --- a/public/javascripts/app/views/feedback_view.js +++ b/public/javascripts/app/views/feedback_view.js @@ -18,7 +18,7 @@ app.views.Feedback = app.views.StreamObject.extend({ if(!window.confirm("Reshare " + this.model.reshareAuthor().name + "'s post?")) { return } var reshare = this.model.reshare() reshare.save({}, { - url: this.model.reshareUrl, + url: this.model.createReshareUrl, success : function(){ app.stream.collection.add(reshare); } diff --git a/spec/javascripts/app/collections/comments_collection_spec.js b/spec/javascripts/app/collections/comments_collection_spec.js new file mode 100644 index 000000000..7c94d4501 --- /dev/null +++ b/spec/javascripts/app/collections/comments_collection_spec.js @@ -0,0 +1,10 @@ +describe("app.collections.comments", function(){ + describe("url", function(){ + it("should user the post id", function(){ + var post =new app.models.Post({id : 5}) + var collection = new app.collections.Comments([], {post : post}) + expect(collection.url).toBe("/posts/5/comments") + }) + }) +}) + diff --git a/spec/javascripts/app/collections/likes_collections_spec.js b/spec/javascripts/app/collections/likes_collections_spec.js new file mode 100644 index 000000000..292888403 --- /dev/null +++ b/spec/javascripts/app/collections/likes_collections_spec.js @@ -0,0 +1,10 @@ +describe("app.collections.Likes", function(){ + describe("url", function(){ + it("should user the post id", function(){ + var post =new app.models.Post({id : 5}) + var collection = new app.collections.Likes([], {post : post}) + expect(collection.url).toBe("/posts/5/likes") + }) + }) +}) + diff --git a/spec/javascripts/app/models/post_spec.js b/spec/javascripts/app/models/post_spec.js index ed5aede9f..4231096ae 100644 --- a/spec/javascripts/app/models/post_spec.js +++ b/spec/javascripts/app/models/post_spec.js @@ -3,6 +3,15 @@ describe("app.models.Post", function() { this.post = new app.models.Post(); }) + describe("url", function(){ + it("should be /posts when it doesn't have an id", function(){ + expect(new app.models.Post().url()).toBe("/posts") + }) + + it("should be /posts/id when it doesn't have an id", function(){ + expect(new app.models.Post({id: 5}).url()).toBe("/posts/5") + }) + }) describe("createdAt", function() { it("returns the post's created_at as an integer", function() { var date = new Date;