Module: ActsAsFollower::Follower::InstanceMethods

Defined in:
lib/acts_as_follower/follower.rb

Instance Method Summary collapse

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(options={})
  all_follows(options).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(options={})
  follows_scope = follows_scoped
  follows_scope = apply_options_to_scope(follows_scope, options)
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_countObject

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.

Returns:

  • (Boolean)


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, 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

#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, options={})
  follows_scope  = follows_scoped.for_followable_type(followable_type)
  follows_scope = apply_options_to_scope(follows_scope, options)
end

#follows_scopedObject

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

Returns:

  • (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