Commit 62d3d87c
Changed files (10)
app
spec
factories
app/controllers/likes_controller.rb
@@ -9,9 +9,11 @@ class LikesController < ApplicationController
# POST /likes
def create
- @like = @creation.likes.create(params[:like])
- @like.user_id = current_user.id
-
+ if( current_user == @creation.user )
+ redirect_to @creation, :notice => "You can't like your own stuff"
+ return
+ end
+ @like = current_user.like(@creation)
if @like.save
redirect_to @creation, :notice => 'Like was successfully created.'
else
@@ -21,7 +23,7 @@ class LikesController < ApplicationController
private
def find_creation
- @creation = current_user.creations.find(params[:creation_id])
+ @creation = Creation.find(params[:creation_id])
raise ActiveRecord::RecordNotFound unless @creation
end
end
app/models/user.rb
@@ -5,4 +5,18 @@ class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation, :remember_me
has_many :creations, :dependent => :destroy
has_many :likes, :dependent => :destroy
+
+ def like( creation )
+ if self.already_likes(creation)
+ likes.find { |like| like.user == self }
+ else
+ creation.likes.create({:user => self})
+ end
+ end
+
+ def already_likes(creation)
+ likes.any? do |like|
+ like.user == self
+ end
+ end
end
app/views/creations/show.html.erb
@@ -17,6 +17,19 @@
<% end %>
</div>
+<div class="row">
+ <div class="span1">
+ <% if current_user == @creation.user %>
+
+ <% else %>
+ <%= button_to "+1", creation_likes_path(:creation_id => @creation.id), :method => :post %>
+ <% end %>
+ </div>
+ <div class="span3 offset12">
+ <%= link_to 'fanclub (' + pluralize(@creation.likes.length, 'like') + ')', creation_likes_path(:creation_id => @creation.id) %>
+ </div>
+</div>
+
<div class="row">
<div class="span12">
<div class="media-grid">
@@ -41,18 +54,6 @@
</div>
</div>
-<div class="row">
- <div class="span1">
- <%= button_to "+1", creation_likes_path(:creation_id => @creation.id), :method => :post %>
- </div>
- <div class="span2">
- <%= pluralize(@creation.likes.length, 'like') %>
- </div>
- <div class="span2 offset11">
- <%= link_to 'fanclub', creation_likes_path(:creation_id => @creation.id) %>
- </div>
-</div>
-
<div class="row">
<div class="span16">
<h3>Description</h3>
spec/factories/creation.rb
@@ -1,4 +1,6 @@
Factory.define :creation, :class => Creation do |c|
+ include ActionDispatch::TestProcess
c.name 'cake'
c.story 'whats the story morning glory?'
+ c.image fixture_file_upload("/files/example.jpg", "image/jpg")
end
spec/models/category_spec.rb
@@ -1,5 +1,4 @@
require 'spec_helper'
describe Category do
- pending "add some examples to (or delete) #{__FILE__}"
end
spec/models/creation_spec.rb
@@ -1,5 +1,4 @@
require 'spec_helper'
describe Creation do
- pending "add some examples to (or delete) #{__FILE__}"
end
spec/models/like_spec.rb
@@ -1,5 +1,4 @@
require 'spec_helper'
describe Like do
- pending "add some examples to (or delete) #{__FILE__}"
end
spec/models/photo_spec.rb
@@ -1,5 +1,4 @@
require 'spec_helper'
describe Photo do
- pending "add some examples to (or delete) #{__FILE__}"
end
spec/models/user_spec.rb
@@ -0,0 +1,19 @@
+require 'spec_helper'
+
+describe User do
+ describe "when a user already likes a creation" do
+ it "should not let the user like it again" do
+ # creation = Creation.new
+ creation = FactoryGirl.create(:creation)
+ # user = User.create!
+ user = FactoryGirl.create(:user)
+ user.like(creation)
+ user.like(creation)
+
+ # creation.likes.each do |like|
+ # puts like.user.id
+ # end
+ creation.likes.length.should eq(1)
+ end
+ end
+end