Class: LikeSystem::Like
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- LikeSystem::Like
- Defined in:
- lib/like_system/like.rb
Overview
Like class
This class defines the like model in like system
Class Method Summary collapse
- .like(liker, likee) ⇒ Boolean
- .likes?(liker, likee) ⇒ Boolean
- .scope_by_likee(likee) ⇒ ActiveRecord::Relation
- .scope_by_likee_type(klass) ⇒ ActiveRecord::Relation
- .scope_by_liker(liker) ⇒ ActiveRecord::Relation
- .scope_by_liker_type(klass) ⇒ ActiveRecord::Relation
- .toggle_like(liker, likee) ⇒ Boolean
- .unlike(liker, likee) ⇒ Boolean
-
.validate_likee(likee) ⇒ Object
private
Validates a likee object.
-
.validate_liker(liker) ⇒ Object
private
Validates a liker object.
Class Method Details
.like(liker, likee) ⇒ Boolean
Creates a LikeSystem::Like relationship between a LikeSystem::Liker object and a LikeSystem::Likee object
30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/like_system/like.rb', line 30 def self.like(liker, likee) validate_likee(likee) validate_liker(liker) if likes?(liker, likee) false else like = scope_by_liker(liker).scope_by_likee(likee).build like.save true end end |
.likes?(liker, likee) ⇒ Boolean
Specifies if a LikeSystem::Liker object likes a LikeSystem::Likee object
88 89 90 91 92 93 |
# File 'lib/like_system/like.rb', line 88 def self.likes?(liker, likee) validate_likee(likee) validate_liker(liker) scope_by_liker(liker).scope_by_likee(likee).exists? end |
.scope_by_likee(likee) ⇒ ActiveRecord::Relation
Retrieves a scope of LikeSystem::Like objects filtered by a LikeSystem::Likee object
101 102 103 |
# File 'lib/like_system/like.rb', line 101 def self.scope_by_likee(likee) where(likee: likee) end |
.scope_by_likee_type(klass) ⇒ ActiveRecord::Relation
Retrieves a scope of LikeSystem::Like objects filtered by a LikeSystem::Likee type
111 112 113 |
# File 'lib/like_system/like.rb', line 111 def self.scope_by_likee_type(klass) where(likee_type: klass.to_s.classify) end |
.scope_by_liker(liker) ⇒ ActiveRecord::Relation
Retrieves a scope of LikeSystem::Like objects filtered by a LikeSystem::Liker object
121 122 123 |
# File 'lib/like_system/like.rb', line 121 def self.scope_by_liker(liker) where(liker: liker) end |
.scope_by_liker_type(klass) ⇒ ActiveRecord::Relation
Retrieves a scope of LikeSystem::Like objects filtered by a LikeSystem::Liker type
131 132 133 |
# File 'lib/like_system/like.rb', line 131 def self.scope_by_liker_type(klass) where(liker_type: klass.to_s.classify) end |
.toggle_like(liker, likee) ⇒ Boolean
Toggles a LikeSystem::Like relationship between a LikeSystem::Liker object and a LikeSystem::Likee object
70 71 72 73 74 75 76 77 78 79 |
# File 'lib/like_system/like.rb', line 70 def self.toggle_like(liker, likee) validate_likee(likee) validate_liker(liker) if likes?(liker, likee) unlike(liker, likee) else like(liker, likee) end end |
.unlike(liker, likee) ⇒ Boolean
Destroys a LikeSystem::Like relationship between a LikeSystem::Liker object and a LikeSystem::Likee object
50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/like_system/like.rb', line 50 def self.unlike(liker, likee) validate_likee(likee) validate_liker(liker) if likes?(liker, likee) like = scope_by_liker(liker).scope_by_likee(likee).take like.destroy true else false end end |
.validate_likee(likee) ⇒ Object (private)
Validates a likee object
141 142 143 |
# File 'lib/like_system/like.rb', line 141 def self.validate_likee(likee) raise ArgumentError.new unless likee.respond_to?(:is_likee?) && likee.is_likee? end |
.validate_liker(liker) ⇒ Object (private)
Validates a liker object
150 151 152 |
# File 'lib/like_system/like.rb', line 150 def self.validate_liker(liker) raise ArgumentError.new unless liker.respond_to?(:is_liker?) && liker.is_liker? end |