Module: Likeable
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/likeable.rb,
lib/likeable/facepile.rb,
lib/likeable/module_methods.rb
Defined Under Namespace
Modules: ClassMethods, Facepile, UserMethods
Classes: Like
Class Method Summary
collapse
Instance Method Summary
collapse
Class Method Details
.after_like(&block) ⇒ Object
61
62
63
64
65
|
# File 'lib/likeable/module_methods.rb', line 61
def after_like(&block)
@after_like = block if block.present?
@after_like ||= lambda {|like|}
@after_like
end
|
.classes ⇒ Object
11
12
13
|
# File 'lib/likeable/module_methods.rb', line 11
def classes
(@classes||[]).flatten
end
|
.classes=(*args) ⇒ Object
15
16
17
|
# File 'lib/likeable/module_methods.rb', line 15
def classes=(*args)
@classes = args
end
|
.find_by_resource_id(resource_name, target_id) ⇒ Object
Likeable.find_by_resource_id(“highlight”, 22) —————————————- # #<Highlight id: … # if highlight 22 exists nil # if highlight 22 does not exist
33
34
35
36
37
38
39
40
|
# File 'lib/likeable/module_methods.rb', line 33
def find_by_resource_id(resource_name, target_id)
target = Likeable.get_class_for_resource_name(resource_name)
if target.present?
Likeable.find_one(target, target_id)
else
false
end
end
|
.find_many(klass, ids) ⇒ Object
71
72
73
74
|
# File 'lib/likeable/module_methods.rb', line 71
def find_many(klass, ids)
@find_many ||= lambda {|klass, ids| klass.where(:id => ids)}
@find_many.call(klass, ids)
end
|
.find_many=(find_many) ⇒ Object
67
68
69
|
# File 'lib/likeable/module_methods.rb', line 67
def find_many=(find_many)
@find_many = find_many
end
|
.find_one(klass, id) ⇒ Object
77
78
79
80
|
# File 'lib/likeable/module_methods.rb', line 77
def find_one(klass, id)
@find_one ||= lambda {|klass, ids| klass.where(:id => id).first}
@find_one.call(klass, id)
end
|
.find_one=(find_one) ⇒ Object
82
83
84
|
# File 'lib/likeable/module_methods.rb', line 82
def find_one=(find_one)
@find_one = find_one
end
|
.get_class_for_resource_name(resource_name) ⇒ Object
Likeable.get_class_for_resource_name(‘photo’) ————————- # Returns the class for the resource name
45
46
47
|
# File 'lib/likeable/module_methods.rb', line 45
def get_class_for_resource_name(resource_name)
self.model(resource_name)
end
|
.get_resource_name_for_class(klass) ⇒ Object
49
50
51
|
# File 'lib/likeable/module_methods.rb', line 49
def get_resource_name_for_class(klass)
klass
end
|
.model(target_model) ⇒ Object
Likeable.model(“Highlight”) ————————- # turns a string into a model “Highlight”.constantize # => Highlight; “Hi1i6ht”.constantize = #=> false
23
24
25
26
27
|
# File 'lib/likeable/module_methods.rb', line 23
def model(target_model)
target_model.camelcase.constantize
rescue NameError => ex
return false
end
|
.redis ⇒ Object
53
54
55
|
# File 'lib/likeable/module_methods.rb', line 53
def redis
@redis ||= Redis.new
end
|
.redis=(redis) ⇒ Object
57
58
59
|
# File 'lib/likeable/module_methods.rb', line 57
def redis=(redis)
@redis = redis
end
|
.setup {|_self| ... } ⇒ Object
Likeable.setup do |like|
like.redis = Redis.new(#...)
like.find_one = lambda {|klass, id | klass.where(:id => id)}
like.find_many = lambda {|klass, ids| klass.where(:id => ids)}
end
104
105
106
107
|
# File 'lib/likeable/module_methods.rb', line 104
def setup(&block)
yield self unless block.blank?
true
end
|
.user_class ⇒ Object
86
87
88
89
90
91
92
|
# File 'lib/likeable/module_methods.rb', line 86
def user_class
begin
@user_class ||= ::User
rescue NameError
nil
end
end
|
.user_class=(klass) ⇒ Object
94
95
96
97
|
# File 'lib/likeable/module_methods.rb', line 94
def user_class=(klass)
raise ArgumentError, "Argument must be a class" unless klass.is_a?(Class)
@user_class = klass
end
|
Instance Method Details
#add_like_from(user, time = Time.now.to_f) ⇒ Object
create a like the user who created the like has a reference to the object liked
26
27
28
29
30
31
32
33
|
# File 'lib/likeable.rb', line 26
def add_like_from(user, time = Time.now.to_f)
Likeable.redis.hset(like_key, user.id, time)
Likeable.redis.hset(user.like_key(self.class.to_s.downcase), self.id, time)
like = Like.new(:target => self, :user => user, :time => time)
after_like(like)
clear_memoized_methods(:like_count, :like_user_ids, :liked_user_ids, :liked_users, :likes)
like
end
|
#after_like(like) ⇒ Object
41
42
43
|
# File 'lib/likeable.rb', line 41
def after_like(like)
Likeable.after_like.call(like)
end
|
#clear_memoized_methods(*methods) ⇒ Object
35
36
37
38
39
|
# File 'lib/likeable.rb', line 35
def clear_memoized_methods(*methods)
methods.each do |method|
eval("@#{method} = nil")
end
end
|
#destroy_all_likes ⇒ Object
20
21
22
|
# File 'lib/likeable.rb', line 20
def destroy_all_likes
liked_users.each {|user| self.remove_like_from(user) }
end
|
#like_count ⇒ Object
52
53
54
|
# File 'lib/likeable.rb', line 52
def like_count
@like_count ||= @like_user_ids.try(:count) || @likes.try(:count) || Likeable.redis.hlen(like_key)
end
|
#like_user_ids ⇒ Object
get all user ids that have liked a target object
57
58
59
|
# File 'lib/likeable.rb', line 57
def like_user_ids
@like_user_ids ||= (Likeable.redis.hkeys(like_key)||[]).map(&:to_i)
end
|
#likeable_resource_name ⇒ Object
#liked_by?(user) ⇒ Boolean
did given user like the object
74
75
76
77
78
|
# File 'lib/likeable.rb', line 74
def liked_by?(user)
return false unless user
liked_by = @like_user_ids.include?(user.id) if @like_user_ids
liked_by ||= Likeable.redis.hexists(like_key, user.id)
end
|
#liked_users(limit = nil) ⇒ Object
61
62
63
|
# File 'lib/likeable.rb', line 61
def liked_users(limit = nil)
@liked_users ||= Likeable.user_class.where(:id => like_user_ids)
end
|
#likes ⇒ Object
65
66
67
68
69
70
71
|
# File 'lib/likeable.rb', line 65
def likes
@likes ||= begin
Likeable.redis.hgetall(like_key).collect do |user_id, time|
Like.new(:user_id => user_id, :time => time, :target => self)
end
end
end
|
#remove_like_from(user) ⇒ Object
46
47
48
49
50
|
# File 'lib/likeable.rb', line 46
def remove_like_from(user)
Likeable.redis.hdel(like_key, user.id)
Likeable.redis.hdel(user.like_key(self.class.to_s.downcase), self.id)
clear_memoized_methods(:like_count, :like_user_ids, :liked_user_ids, :liked_users)
end
|