0.02
No commit activity in last 3 years
No release in over 3 years
There's a lot of open issues
Mongo Followable adds like/dislike feature to mongoid/mongo_mapper
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.5.0
~> 2.4.0
~> 0.10.0
~> 2.7.0
 Project Readme

mongo_followable¶ ↑

Now works for both Mongoid and Mongo_Mapper!

Installation¶ ↑

In console:

gem install mongo_followable

or in Gemfile:

gem 'mongo_followable'

Notice¶ ↑

Please read following documentation first. Since 0.3.2, some apis have been changed. Sorry for the inconvenience.

If you want to remove ‘follow_history` and `followed_history` fields totally from your database after you decide not to use follow/followed history feature, do this:

# in the rails console, taking user as an example:
User.all.each { |u| u.unset(:follow_history) } # this will remove the follow_history field

Usage¶ ↑

To make model followable you need to include Mongo::Followable into your model; You also need to include Mongo::Follower in your follower model:

class User
  include Mongoid::Document  #for Mongo_Mapper users, this line of code should be include MongoMapper::Document
  include Mongo::Followable::Followed
  include Mongo::Followable::Follower
  include Mongo::Followable::History # you have to add this line to enable follow/followed history
end

class Group
  include Mongoid::Document  #for Mongo_Mapper users, this line of code should be include MongoMapper::Document
  include Mongo::Followable::Followed
  include Mongo::Followable::History # you have to add this line to enable follow/followed history
end

I’ve decided to remove authorization because it is quite inefficient to keep this field for every record in the database. However, it’s possible that I’ll add it back as a plugin in the future.

And then you can follow and unfollow:

@group = Group.new
@group.save

current_user.follow(@group)
current_user.unfollow(@group)
current_user.unfollow_all

current_user.follow(*array_of_objects_to_follow) # follow an array of objects
current_user.unfollow(*array_of_objects_to_follow) # unfollow

or,

@group.unfollowed(current_user)
@group.unfollowed_all

It’s also possible to pass a block:

current_user.follow(u1, u2, u3, u4...) { |user| user.name == 'Jeremy Lin' }
current_user.unfollow(u1, u2, u3, u4...) { |user| user.followee_of? @kobe_bryant }

@group.unfollowed(u1, u2, u3...) { |user| user.ever_follow.include? @some_user }

You can also judge whether a model is a follower of another model or a model is a followee of another model:

current_user.follower_of?(@group)
current_user.followee_of?(@group)

or whether a model is following some other model and vice versa:

current_user.following?
@group.followed?

Moreover, it’s easy to get a model’s follower/followee count:

current_user.followers_count
current_user.followees_count

Of course, you can get a list of followers/followees:

	
User.followers_of(@group)
User.followees_of(@group)

@group.all_followers
@user.all_followees

Getting a model’s followers/followees by type is also possible:

@group.followers_by_type("user")
@user.followees_by_type("group")

Dealing with model names:

@group.followers_by_type("user")
@group.followers_by_type("User")
@group.followers_by_type("user_post") # both are fine
@user.followees_by_type("GroupPost")

And their count:

@group.followers_by_type("user")
@group.followers_count_by_type("user")
@user.followees_by_type("group")
@user.followees_count_by_type("group")

You can also get a model’s follow/followed history:

@user.ever_follow
@group.ever_followed

or to tell if ever follow/followed by someone:

@user.ever_follow? @some_group
@group.ever_followed? @some_user

Sure you can clear the histories:

@user.clear_history!

#or more specific:

@user.clear_follow_history!
@group.clear_followed_history!

Another feature is to get a list of models which has the most followers/followees:

User.with_max_followees
User.with_min_followees
User.with_max_followees_by_type('group')
User.with_min_followees_by_type('group')
Group.with_max_followers
Group.with_min_followers
Group.with_max_followers_by_type('user')
Group.with_min_followers_by_type('user')

Now you can tell if two models have some common followers/followees by following methods:

@user.common_followees?(@another_user)
@user.common_followers?(@group)

And see what the common followers/followees are:

@user.common_followees_with(@another_user)
@user.common_followers_with(@group)
  • Any bug or issue, please send me an email: ustc.flyingfox@gmail.com

    include Mongo::Followable::History # you have to add this line to enable follow/followed history
    

TODO¶ ↑

  • inter-models followable #FINISHED#

  • divide into two parts: followable(being followed) and follower(following others) #FINISHED#

  • following history/followed history #FINISHED#

  • most/least followed/following #FINISHED

  • add authorization to followable models #FINISHED#

  • common followers/followees #FINISHED#

  • add support for mongo_mapper in next version #FINISHED#

  • implement plugins: confirmation, authorization etc.

!!If you have any advice, plese do not hesitate to tell me!!

Thanks¶ ↑

Thanks the author(s) of acts_as_followable, you can find this gem here

Thanks the author(s) of voteable_mongo, you can find this gem here

Copyright © Jie Fan. See LICENSE.txt for further details.