refactoring backbone urls

This commit is contained in:
Dennis Collinson 2012-01-18 15:55:31 -08:00
parent 7cafac8c05
commit 4ad58bdf2f
7 changed files with 48 additions and 25 deletions

View file

@ -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
}
});

View file

@ -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
}
});

View file

@ -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() {

View file

@ -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);
}

View file

@ -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")
})
})
})

View file

@ -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")
})
})
})

View file

@ -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;