Module: ActiveRecord::Blakstar::Like::InstanceMethods

Defined in:
lib/blakstar_like.rb

Instance Method Summary collapse

Instance Method Details

#average_likeObject

Calculates the average rating. Calculation based on the already given values.



37
38
39
40
# File 'lib/blakstar_like.rb', line 37

def average_like
  return 0 if likes.empty?
  count_likes! + count_dislikes!
end

#count_dislikes!Object



46
47
48
# File 'lib/blakstar_like.rb', line 46

def count_dislikes!
  self.respond_to?( :dislikes_count) ? self.dislikes_count : likes.where('value = -1').count
end

#count_likes!Object



42
43
44
# File 'lib/blakstar_like.rb', line 42

def count_likes!
  self.respond_to?( :likes_count) ? self.likes_count : likes.where('value = 1').count
end

#dislike!(user) ⇒ Object



27
28
29
30
31
32
33
34
# File 'lib/blakstar_like.rb', line 27

def dislike!( user )
  return unless user.class.to_s == 'User'
  ActiveRecord::Base.transaction do
    like = likes.create( :value => -1, :user_id => user.id )
    self.increment!( :dislikes_count ) if !like.changed? && self.respond_to?( :dislikes_count )
    like
  end
end

#like!(user) ⇒ Object

Likes the object by a given value. A user object can be passed to the method.



18
19
20
21
22
23
24
25
# File 'lib/blakstar_like.rb', line 18

def like!( user )
  return unless user.class.to_s == 'User'
  ActiveRecord::Base.transaction do
    like = likes.create( :value => 1, :user_id => user.id )
    self.increment!( :likes_count ) if !like.changed? && self.respond_to?( :likes_count )
    like
  end
end

#liked_by?(user) ⇒ Boolean

Checks wheter a user liked or disliked the object or not.

Returns:

  • (Boolean)


51
52
53
54
# File 'lib/blakstar_like.rb', line 51

def liked_by?( user )
  return false if user.nil? || user.class.to_s != 'User'
  likes.detect {|l| l.user_id == user.id }
end