From d9d878f11f5217bdb1d1f7e977d1b6908e9b3fe2 Mon Sep 17 00:00:00 2001 From: danielgrippi Date: Thu, 15 Dec 2011 15:43:04 -0800 Subject: [PATCH] added api response for likes; cleaned up view logic; specify like collection url from parent model (Post) --- app/controllers/likes_controller.rb | 13 ++++++++----- app/models/comment.rb | 1 - app/models/like.rb | 9 +++++++++ app/views/templates/stream_element.ujs | 4 ++-- public/javascripts/app/models/like.js | 8 -------- public/javascripts/app/models/post.js | 6 ++++-- public/javascripts/app/views/post_view.js | 19 ++++--------------- 7 files changed, 27 insertions(+), 33 deletions(-) diff --git a/app/controllers/likes_controller.rb b/app/controllers/likes_controller.rb index e0071c937..f0ad406d9 100644 --- a/app/controllers/likes_controller.rb +++ b/app/controllers/likes_controller.rb @@ -9,19 +9,18 @@ class LikesController < ApplicationController respond_to :html, :mobile, :json def create - positive = (params[:positive] == 'true') ? true : false if target - @like = current_user.build_like(:positive => positive, :target => target) + @like = current_user.build_like(:target => target) if @like.save - Rails.logger.info("event=create type=like user=#{current_user.diaspora_handle} status=success like=#{@like.id} positive=#{positive}") + Rails.logger.info("event=create type=like user=#{current_user.diaspora_handle} status=success like=#{@like.id}") Postzord::Dispatcher.build(current_user, @like).post respond_to do |format| format.js { render 'likes/update', :status => 201 } format.html { render :nothing => true, :status => 201 } format.mobile { redirect_to post_path(@like.post_id) } - format.json { render :json => {"id" => @like.id}, :status => 201 } + format.json{ render :json => @like.as_api_response(:backbone), :status => 201 } end else render :nothing => true, :status => 422 @@ -52,7 +51,11 @@ class LikesController < ApplicationController if target @likes = target.likes.includes(:author => :profile) @people = @likes.map{|x| x.author} - render :layout => false + + respond_to do |format| + format.all{ render :layout => false } + format.json{ render :json => @likes.as_api_response(:backbone) } + end else render :nothing => true, :status => 404 end diff --git a/app/models/comment.rb b/app/models/comment.rb index 24b95941f..7ec5b236e 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -26,7 +26,6 @@ class Comment < ActiveRecord::Base t.add :created_at end - xml_attr :text xml_attr :diaspora_handle diff --git a/app/models/like.rb b/app/models/like.rb index 01a8b7d5b..5466bddd1 100644 --- a/app/models/like.rb +++ b/app/models/like.rb @@ -11,6 +11,15 @@ class Like < ActiveRecord::Base xml_attr :target_type include Diaspora::Relayable + # NOTE API V1 to be extracted + acts_as_api + api_accessible :backbone do |t| + t.add :id + t.add :guid + t.add :author + t.add :created_at + end + xml_attr :positive xml_attr :diaspora_handle diff --git a/app/views/templates/stream_element.ujs b/app/views/templates/stream_element.ujs index 64c167ce8..3100d1b75 100644 --- a/app/views/templates/stream_element.ujs +++ b/app/views/templates/stream_element.ujs @@ -67,11 +67,11 @@ <% if(user_like) { %> - + Unlike <% } else { %> - + Like <% } %> diff --git a/public/javascripts/app/models/like.js b/public/javascripts/app/models/like.js index efd9a3540..3bed073f0 100644 --- a/public/javascripts/app/models/like.js +++ b/public/javascripts/app/models/like.js @@ -1,10 +1,2 @@ App.Models.Like = Backbone.Model.extend({ - url: function(){ - if(this.get("id")) { - return "/" + this.get("target_type") + "s/" + this.get("target_id") + "/likes/" + this.get("id"); - } - else { - return "/posts/" + this.get("target_id") + "/likes"; - } - } }) diff --git a/public/javascripts/app/models/post.js b/public/javascripts/app/models/post.js index ecedef08c..528fabbd1 100644 --- a/public/javascripts/app/models/post.js +++ b/public/javascripts/app/models/post.js @@ -1,11 +1,13 @@ App.Models.Post = Backbone.Model.extend({ url: function(){ - return "/posts/" + this.get("id"); + return "/posts/" + this.id; }, initialize: function() { this.comments = new App.Collections.Comments(this.get("last_three_comments")); - this.likes = new App.Collections.Likes(); + + this.likes = new App.Collections.Likes(this.get("user_like")); // load in the user like initially + this.likes.url = '/posts/' + this.id + '/likes'; }, createdAt: function(){ diff --git a/public/javascripts/app/views/post_view.js b/public/javascripts/app/views/post_view.js index 3b3601271..0725a1a00 100644 --- a/public/javascripts/app/views/post_view.js +++ b/public/javascripts/app/views/post_view.js @@ -67,21 +67,10 @@ App.Views.Post = App.Views.StreamObject.extend({ var link = $(evt.target); - if(link.hasClass('like')){ - this.model.likes.create({ - target_id: this.model.get("id"), - target_type: "post", - positive: "true" - }); - } - else { - var like = new App.Models.Like({ - "id": this.model.get("user_like")["posts"]["id"], - target_type: "post", - target_id: this.model.get("id") - }); - - like.destroy(); + if(link.hasClass('like')) { + this.model.likes.create(); + } else { + this.model.likes.get(link.data("id")).destroy(); } return this;