Skip to content

LelandCer/power_of_friendship

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Power of Friendship

Power of Friendship is a friendship library for Rails' Active Records. It allows you to add Facebook style friendships and/or Twitter style followers to any model.


Recommended Friends

PoF provides models with the powerful ability to find recomended friends by finding the PoF powered models with the most mutual friends.


Installation

gem install "power_of_friendship", "~> 1.0.2"

Quick Start

Let's say we want to add friendships to a User model.

rails generate friendship User

This creates the following migration:

 class CreateUserFriendship < ActiveRecord::Migration
  def change
    create_table :user_friendships do |t|
      t.belongs_to :user, index: true
      t.belongs_to :friend, index: true
      t.boolean :pending, :default => true
      t.timestamps
    end
    add_index :user_friendships, [:user_id, :friend_id], :unique => true
  end
end

and the following model:

class UserFriendship < ActiveRecord::Base
  belongs_to :user 

  belongs_to :friend,
    :class_name => User ,
    :foreign_key => :friend_id


  validates_presence_of :friend_id, :user_id
  validates_uniqueness_of :user_id, :scope => :friend_id

  def approved?
    !self.pending
  end

  def pending?
    self.pending
  end
end

Now add:

act_as_friend

to your model:

class User < ActiveRecord::Base
    act_as_friend
end

Now just run

rake db:migrate

and you're good to go.


Friends

@user.invite @friend # invite a friend. 
@friend.approve @user # approve a friendship
@user.unfriend @friend # destroys friendship

@user.friends # returns users who have approved your friendship
@user.invited_friends # returns users who you've invited to be friends
@user.pending_friends # returns users who have invited you to be their friend
@user.suggested_friends # returns users who share mutual friends with you, ordered by number of common friends

@user.friends_with? @friend # returns true if approved friendship exists between @user and @friend
@user.invited? @friend # returns true if @user invited @friend
@user.invited_by? @friend # returns true if @friend invited @user
@user.connected_with? @friend # returns true if either an invitation or a friendship exists

Followers

@user.follow @other_user 
@user.unfollow @other_user

@user.follows? @other_user 
@user.followed_by? @other_user

@user.followers # returns users who follow @user
@user.inverse_followers # returns users who @user follows

note: following a user who is not a follow is identical to .invite; following a user who is a follower is identical to .approve

About

Let's all be friends.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published