module ActsAsFollower::Follower::InstanceMethods
Public Instance Methods
Returns the actual records which this instance is following.
# File lib/acts_as_follower/follower.rb, line 62 def all_following(options={}) all_follows(options).collect{ |f| f.followable } end
Returns the follow records related to this instance with the followable included.
# File lib/acts_as_follower/follower.rb, line 56 def all_follows(options={}) follows_scope = follows_scoped follows_scope = apply_options_to_scope(follows_scope, options) end
Creates a new follow record for this instance to follow the passed object. Does not allow duplicate records to be created.
# File lib/acts_as_follower/follower.rb, line 30 def follow(followable) if self != followable params = {followable_id: followable.id, followable_type: parent_class_name(followable)} self.follows.where(params).first_or_create! end end
Returns the number of objects this instance is following.
# File lib/acts_as_follower/follower.rb, line 24 def follow_count Follow.unblocked.for_follower(self).count end
Returns true if this instance is following the object passed as an argument.
# File lib/acts_as_follower/follower.rb, line 19 def following?(followable) 0 < Follow.unblocked.for_follower(self).for_followable(followable).count end
Returns the actual records of a particular type which this record is following.
# File lib/acts_as_follower/follower.rb, line 67 def following_by_type(followable_type, options={}) 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 options.has_key?(:limit) followables = followables.limit(options[:limit]) end if options.has_key?(:includes) followables = followables.includes(options[:includes]) end followables end
# File lib/acts_as_follower/follower.rb, line 83 def following_by_type_count(followable_type) follows.unblocked.for_followable_type(followable_type).count end
Returns the follow records related to this instance by type.
# File lib/acts_as_follower/follower.rb, line 50 def follows_by_type(followable_type, options={}) follows_scope = follows_scoped.for_followable_type(followable_type) follows_scope = apply_options_to_scope(follows_scope, options) end
returns the follows records to the current instance
# File lib/acts_as_follower/follower.rb, line 45 def follows_scoped self.follows.unblocked.includes(:followable) end
Returns a follow record for the current instance and followable object.
# File lib/acts_as_follower/follower.rb, line 106 def get_follow(followable) self.follows.unblocked.for_followable(followable).first end
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’)
# File lib/acts_as_follower/follower.rb, line 91 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
# File lib/acts_as_follower/follower.rb, line 101 def respond_to?(m, include_private = false) super || m.to_s[/following_(.+)_count/] || m.to_s[/following_(.+)/] end
Deletes the follow record if it exists.
# File lib/acts_as_follower/follower.rb, line 38 def stop_following(followable) if follow = get_follow(followable) follow.destroy end end