Coder Social home page Coder Social logo

socialization's Introduction

Socialization

Socialization is a Ruby Gem that allows any ActiveRecord model to Follow, Like and/or Mention any other model. ActiveRecord or Redis can be used as a data store.

The Follow feature is similar to Twitter's follow. For example, John follows Jane. Unlike Facebook's "friendship", Follow is a one-way concept. The fact that John follows Jane doesn't mean that Jane follows John.

The Like feature works just like a Facebook Like. For example, John likes Pulp Fiction.

The Mention feature was written with Facebook mentions in mind. For example, John mentions Jane in a comment. Typically, Jane would be highlighted in the comment user interface and possibly notified that John mentioned her. This Facebook feature is occasionally called Tagging, although tagging is generally something [entirely different](http://en.wikipedia.org/wiki/Tag_(metadata).

Build Status

Installation

Rails 3/4

Add the gem to the gemfile: gem "socialization"

Run the generator: rails generate socialization -s

Or if you want to use Redis as your data store: rails generate socialization -s --store=redis

This will generate three migration files (when using ActiveRecord) and three models named Follow, Like and Mention. You may delete any of the Follow, Like or Mention models and migrations if you don't need that functionality in your application.

Rails 2.3.x Support

This gem requires Rails 3 or better. Sorry!

Usage

Setup

Allow a model to be followed:

class Celebrity < ActiveRecord::Base
  ...
  acts_as_followable
  ...
end

Allow a model to be a follower:

class User < ActiveRecord::Base
  ...
  acts_as_follower
  ...
end

Allow a model to be liked:

class Movie < ActiveRecord::Base
  ...
  acts_as_likeable
  ...
end

Allow a model to like:

class User < ActiveRecord::Base
  ...
  acts_as_liker
  ...
end

Allow a model to be mentioned:

class User < ActiveRecord::Base
  ...
  acts_as_mentionable
  ...
end

Allow a model to mention:

class Comment < ActiveRecord::Base
  ...
  acts_as_mentioner
  ...
end

Or a more complex case where users can like and follow each other:

class User < ActiveRecord::Base
  ...
  acts_as_follower
  acts_as_followable
  acts_as_liker
  acts_as_likeable
  acts_as_mentionable
  ...
end

acts_as_follower Methods

Follow something

user.follow!(celebrity)

Stop following

user.unfollow!(celebrity)

Toggle

user.toggle_follow!(celebrity)

Is following?

user.follows?(celebrity)

What items are you following (given that an Item model is followed)?

user.followees(Item)

Number of followees (Requires followees_count column in db)

def change
  add_column :#{Table_name}, :followees_count, :integer, :default => 0
end

user.followees_count

acts_as_followable Methods

Find out if an objects follows

celebrity.followed_by?(user)

All followers

celebrity.followers(User)

Number of followers (Requires followers_count column in db)

def change
  add_column :#{Table_name}, :followers_count, :integer, :default => 0
end

celebrity.followers_count

acts_as_liker Methods

Like something

user.like!(movie)

Stop liking

user.unlike!(movie)

Toggle

user.toggle_like!(celebrity)

Likes?

user.likes?(movie)

Number of likees (Requires likees_count column in db)

def change
  add_column :#{Table_name}, :likees_count, :integer, :default => 0
end

user.likees_count

acts_as_likeable Methods

Find out if an objects likes

movie.liked_by?(user)

All likers

movie.likers(User)

Number of likers (Requires likers_count column in db)

def change
  add_column :#{Table_name}, :likers_count, :integer, :default => 0
end

movie.likers_count

acts_as_mentioner Methods

Note that a "mentioner" is the object containing the mention and not necessarily the actor. For example, John mentions Jane in a comment. The mentioner is the comment object, NOT John.

Mention something

comment.mention!(user)

Remove mention

comment.unmention!(user)

Toggle

user.toggle_mention!(celebrity)

Mentions?

comment.mentions?(user)

All mentionees

comment.mentionees(User)

Number of mentionees (Requires mentionees column in db)

def change
  add_column :#{Table_name}, : mentionees, :integer, :default => 0
end

user. mentionees_count

acts_as_mentionable Methods

Find out if an objects mentions

user.mentioned_by?(comment)

All mentioners

user.mentioners(Comment)

Number of mentioners (Requires mentioners_count column in db)

def change
  add_column :#{Table_name}, :mentioners_count, :integer, :default => 0
end

movie.mentioners_count

Documentation

You can find the compiled YARD documentation at http://rubydoc.info/github/cmer/socialization/frames. Documentation for methods inside include blocks is not currently generated although it exists in the code. A custom YARD filter needs to be written for YARD to pick those up.


Changelog

Here it is: https://github.com/cmer/socialization/blob/master/CHANGELOG.md

Demo App

For your convenience, I have added a demo app in demo/demo_app. It does not have a web UI, but you can play with Socialization in the Rails console. It should also help you figure out hown to use Socialization in the Real World.

To use the demo app:

$ cd demo/demo_app
$ bundle
$ rake db:migrate
$ rake db:seed
$ rails console

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests for it. This is important so I don't break it in a future version unintentionally.
  • Send me a pull request. Bonus points for topic branches.

Similar Projects

acts_as_follower is a similar project that I only discovered when I was 95% finished writing the first version of Socialization. I initially intended to name this project acts_as_follower only to find out the name was taken. You might want to check it out as well so see which one suits your needs better. Socialization is simpler, supports "Likes" and "Mentions" and easilly extendable; acts_as_follower has more "Follow" features, however.

Copyright (c) 2012-2015 Carl Mercier -- Released under the MIT license.

socialization's People

Contributors

alainpilon avatar balvig avatar cmer avatar garyharan avatar samnang avatar thmsobrmlr avatar tilsammans avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.