Module: ActsAsFollower::Follower::InstanceMethods
- Defined in:
- lib/acts_as_follower/follower.rb
Instance Method Summary collapse
-
#all_following(options = {}) ⇒ Object
Returns the actual records which this instance is following.
-
#all_follows(options = {}) ⇒ Object
Returns the follow records related to this instance with the followable included.
-
#follow(followable) ⇒ Object
Creates a new follow record for this instance to follow the passed object.
-
#follow_count ⇒ Object
Returns the number of objects this instance is following.
-
#following?(followable) ⇒ Boolean
Returns true if this instance is following the object passed as an argument.
-
#following_by_type(followable_type, options = {}) ⇒ Object
Returns the actual records of a particular type which this record is following.
- #following_by_type_count(followable_type) ⇒ Object
-
#follows_by_type(followable_type, options = {}) ⇒ Object
Returns the follow records related to this instance by type.
-
#follows_scoped ⇒ Object
returns the follows records to the current instance.
-
#get_follow(followable) ⇒ Object
Returns a follow record for the current instance and followable object.
-
#method_missing(m, *args) ⇒ Object
Allows magic names on following_by_type e.g.
- #respond_to?(m, include_private = false) ⇒ Boolean
-
#stop_following(followable) ⇒ Object
Deletes the follow record if it exists.
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(m, *args) ⇒ Object
Allows magic names on following_by_type e.g. following_users == following_by_type(‘User’) Allows magic names on following_by_type_count e.g. following_users_count == following_by_type_count(‘User’)
90 91 92 93 94 95 96 97 98 |
# File 'lib/acts_as_follower/follower.rb', line 90 def method_missing(m, *args) if m.to_s[/following_(.+)_count/] following_by_type_count($1.singularize.classify) elsif m.to_s[/following_(.+)/] following_by_type($1.singularize.classify) else super end end |
Instance Method Details
#all_following(options = {}) ⇒ Object
Returns the actual records which this instance is following.
61 62 63 |
# File 'lib/acts_as_follower/follower.rb', line 61 def all_following(={}) all_follows().collect{ |f| f.followable } end |
#all_follows(options = {}) ⇒ Object
Returns the follow records related to this instance with the followable included.
55 56 57 58 |
# File 'lib/acts_as_follower/follower.rb', line 55 def all_follows(={}) follows_scope = follows_scoped follows_scope = (follows_scope, ) end |
#follow(followable) ⇒ Object
Creates a new follow record for this instance to follow the passed object. Does not allow duplicate records to be created.
30 31 32 33 34 |
# File 'lib/acts_as_follower/follower.rb', line 30 def follow(followable) if self != followable self.follows.find_or_create_by(followable_id: followable.id, followable_type: parent_class_name(followable)) end end |
#follow_count ⇒ Object
Returns the number of objects this instance is following.
24 25 26 |
# File 'lib/acts_as_follower/follower.rb', line 24 def follow_count Follow.unblocked.for_follower(self).count end |
#following?(followable) ⇒ Boolean
Returns true if this instance is following the object passed as an argument.
19 20 21 |
# File 'lib/acts_as_follower/follower.rb', line 19 def following?(followable) 0 < Follow.unblocked.for_follower(self).for_followable(followable).count end |
#following_by_type(followable_type, options = {}) ⇒ Object
Returns the actual records of a particular type which this record is following.
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/acts_as_follower/follower.rb', line 66 def following_by_type(followable_type, ={}) followables = followable_type.constantize. joins(:followings). where('follows.blocked' => false, 'follows.follower_id' => self.id, 'follows.follower_type' => parent_class_name(self), 'follows.followable_type' => followable_type) if .has_key?(:limit) followables = followables.limit([:limit]) end if .has_key?(:includes) followables = followables.includes([:includes]) end followables end |
#following_by_type_count(followable_type) ⇒ Object
82 83 84 |
# File 'lib/acts_as_follower/follower.rb', line 82 def following_by_type_count(followable_type) follows.unblocked.for_followable_type(followable_type).count end |
#follows_by_type(followable_type, options = {}) ⇒ Object
Returns the follow records related to this instance by type.
49 50 51 52 |
# File 'lib/acts_as_follower/follower.rb', line 49 def follows_by_type(followable_type, ={}) follows_scope = follows_scoped.for_followable_type(followable_type) follows_scope = (follows_scope, ) end |
#follows_scoped ⇒ Object
returns the follows records to the current instance
44 45 46 |
# File 'lib/acts_as_follower/follower.rb', line 44 def follows_scoped self.follows.unblocked.includes(:followable) end |
#get_follow(followable) ⇒ Object
Returns a follow record for the current instance and followable object.
105 106 107 |
# File 'lib/acts_as_follower/follower.rb', line 105 def get_follow(followable) self.follows.unblocked.for_followable(followable).first end |
#respond_to?(m, include_private = false) ⇒ Boolean
100 101 102 |
# File 'lib/acts_as_follower/follower.rb', line 100 def respond_to?(m, include_private = false) super || m.to_s[/following_(.+)_count/] || m.to_s[/following_(.+)/] end |
#stop_following(followable) ⇒ Object
Deletes the follow record if it exists.
37 38 39 40 41 |
# File 'lib/acts_as_follower/follower.rb', line 37 def stop_following(followable) if follow = get_follow(followable) follow.destroy end end |