ALPHA
Streama is a simple Ruby activity stream gem for use with the Mongoid ODM framework.
$ gem install streama
Create an Activity model and define the activities and the fields you would like to cache within the activity.
An activity consists of an actor, a verb, an object, and a target.
class Activity include Streama::Activity
activity :new_enquiry do
actor :user, :cache => [:full_name]
object :enquiry, :cache => [:subject, :comment]
target :listing, :cache => [:title]
end
end
The activity verb is implied from the activity name, in the above example the verb is :new_enquiry
The object may be the entity performing the activity, or the entity on which the activity was performed. e.g John(actor) shared a video(object)
The target is the object that the verb is enacted on. e.g. Geraldine(actor) posted a photo(object) to her album(target)
This is based on the Activity Streams 1.0 specification (http://activitystrea.ms)
Include the Actor module in a class and override the default followers method.
class User include Mongoid::Document include Streama::Actor
field :full_name, :type => String
def followers
User.excludes(:id => self.id).all
end
end
Create the indexes for the Activities collection. You can do so by calling the create_indexes method.
Activity.create_indexes
In your controller or background worker:
current_user.publish_activity(:new_enquiry, :object => @enquiry, :target => @listing)
This will publish the activity to the mongoid objects returned by the #followers method in the Actor.
To send your activity to different receievers, pass in an additional :receivers parameter.
current_user.publish_activity(:new_enquiry, :object => @enquiry, :target => @listing, :receivers => :friends) # calls friends method current_user.publish_activity(:new_enquiry, :object => @enquiry, :target => @listing, :receivers => current_user.find(:all, :conditions => {:group_id => mygroup}))
To retrieve all activity for an actor
current_user.activity_stream
To retrieve and filter to a particular activity type
current_user.activity_stream(:type => :activity_verb)
If you need to return the instance of an :actor, :object or :target from an activity call the Activity#load_instance method
activity.load_instance(:actor)
You can also refresh the cached activity data by calling the Activity#refresh_data method
activity.refresh_data
Once you've made your great commits
- Fork
- Create a topic branch - git checkout -b my_branch
- Push to your branch - git push origin my_branch
- Create a Pull Request from your branch
- That's it!
- Christos Pappas (@christospappas)