Commit 20e91410

mo khan <mo@mokhan.ca>
2013-07-02 01:51:29
add public activity gem
1 parent 758e7f7
app/controllers/application_controller.rb
@@ -1,4 +1,5 @@
 class ApplicationController < ActionController::Base
+  include PublicActivity::StoreController
   protect_from_forgery
   before_filter :profile_application
   before_filter :load_categories
app/controllers/notifications_controller.rb
@@ -0,0 +1,5 @@
+class NotificationsController < ApplicationController
+  def index
+    @activities = PublicActivity::Activity.includes([:trackable, :owner]).all
+  end
+end
app/models/avatar.rb
@@ -1,4 +1,6 @@
 class Avatar < ActiveRecord::Base
+  include PublicActivity::Model
+  tracked owner: Proc.new{ |controller, model| controller.current_user }
   belongs_to :user
   mount_uploader :avatar, AvatarUploader
 
app/models/comment.rb
@@ -1,4 +1,7 @@
 class Comment < ActiveRecord::Base
+  include PublicActivity::Model
+  tracked owner: Proc.new{ |controller, model| controller.current_user }
+
   acts_as_nested_set :scope => [:commentable_id, :commentable_type]
 
   validates_presence_of :body
app/models/creation.rb
@@ -1,4 +1,6 @@
 class Creation < ActiveRecord::Base
+  include PublicActivity::Model
+  tracked owner: Proc.new{ |controller, model| controller.current_user }
   acts_as_commentable
   validates :name,  :presence => true
   attr_accessible :user_id, :story, :name, :category_ids, :is_restricted, :watermark
app/models/favorite.rb
@@ -1,4 +1,6 @@
 class Favorite < ActiveRecord::Base
+  include PublicActivity::Model
+  tracked owner: Proc.new{ |controller, model| controller.current_user }
   belongs_to :user
   belongs_to :creation, :counter_cache => true
   attr_accessible :user_id, :creation_id
app/models/photo.rb
@@ -1,4 +1,6 @@
 class Photo < ActiveRecord::Base
+  include PublicActivity::Model
+  tracked owner: Proc.new{ |controller, model| model.creation.user }
   attr_accessible :is_primary, :creation, :image
   belongs_to :creation, :counter_cache => true
   validates :image,  :presence => true
app/models/tutorial.rb
@@ -1,4 +1,6 @@
 class Tutorial < ActiveRecord::Base
+  include PublicActivity::Model
+  tracked
   attr_accessible :description, :heading, :url, :image_url, :user_id, :author, :author_url
   validates :url,  :presence => true
   belongs_to :user
app/models/user.rb
@@ -1,4 +1,6 @@
 class User < ActiveRecord::Base
+  include PublicActivity::Model
+  tracked
   validates :name,  :presence => true
   validates :website, :format => URI::regexp(%w(http https)), :allow_blank => true
   devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :token_authenticatable
app/views/notifications/index.html.erb
@@ -0,0 +1,8 @@
+
+<div class="row">
+  <div class="span12">
+    <% @activities.each do |activity| %>
+      <%= activity.render(self) %>
+    <% end %>
+  </div>
+</div>
app/views/public_activity/avatar/_create.html.erb
@@ -0,0 +1,5 @@
+<div class="row">
+  <div class="span12">
+    <%= activity.owner.name if activity.owner %> added a new avatar named <%= activity.trackable.avatar.url if activity.trackable %> at <%= activity.created_at %>
+  </div>
+</div>
app/views/public_activity/avatar/_destroy.html.erb
@@ -0,0 +1,5 @@
+<div class="row">
+  <div class="span12">
+    <%= activity.owner.name if activity.owner %> removed an avatar at <%= activity.created_at %>
+  </div>
+</div>
app/views/public_activity/avatar/_update.html.erb
@@ -0,0 +1,5 @@
+<div class="row">
+  <div class="span12">
+    <%= activity.owner.name if activity.owner %> updated their avatar <%= activity.trackable.avatar.url if activity.trackable %> at <%= activity.created_at %>
+  </div>
+</div>
app/views/public_activity/comment/_create.html.erb
@@ -0,0 +1,8 @@
+<div class="row">
+  <div class="span12">
+    <%= activity.owner.name %> commented on <%= activity.trackable.commentable.name %> at <%= activity.created_at %>
+    <blockquote>
+      <%= activity.trackable.body %>
+    </blockquote>
+  </div>
+</div>
app/views/public_activity/creation/_create.html.erb
@@ -0,0 +1,5 @@
+<div class="row">
+  <div class="span12">
+    a new user named <%= activity.trackable.name if activity.trackable %> signed up at <%= activity.created_at %>
+  </div>
+</div>
app/views/public_activity/creation/_destroy.html.erb
@@ -0,0 +1,5 @@
+<div class="row">
+  <div class="span12">
+     a user cancelled their account at <%= activity.created_at %>
+  </div>
+</div>
app/views/public_activity/creation/_update.html.erb
@@ -0,0 +1,5 @@
+<div class="row">
+  <div class="span12">
+    <%= activity.owner.name if activity.owner %> updated their account <%= activity.trackable.name if activity.trackable %> at <%= activity.created_at %>
+  </div>
+</div>
app/views/public_activity/favorite/_create.html.erb
@@ -0,0 +1,5 @@
+<div class="row">
+  <div class="span12">
+    <%= activity.owner.name if activity.owner %> added a new creation to their favorites <%= activity.trackable if activity.trackable %> at <%= activity.created_at %>
+  </div>
+</div>
app/views/public_activity/photo/_create.html.erb
@@ -0,0 +1,5 @@
+<div class="row">
+  <div class="span12">
+    <%= activity.owner.name %> added a new photo <%= activity.trackable.image.url if activity.trackable %> at <%= activity.created_at %>
+  </div>
+</div>
app/views/public_activity/photo/_destroy.html.erb
@@ -0,0 +1,5 @@
+<div class="row">
+  <div class="span12">
+    <%= activity.owner.name %> removed a photo <%= activity.trackable %> at <%= activity.created_at %>
+  </div>
+</div>
app/views/public_activity/tutorial/_create.html.erb
@@ -0,0 +1,5 @@
+<div class="row">
+  <div class="span12">
+    <%= activity.owner.name if activity.owner %> added a new tutorial named <%= activity.trackable.head if activity.trackable %> at <%= activity.created_at %>
+  </div>
+</div>
app/views/public_activity/tutorial/_destroy.html.erb
@@ -0,0 +1,5 @@
+<div class="row">
+  <div class="span12">
+    <%= activity.owner.name if activity.owner %> removed a tutorial at <%= activity.created_at %>
+  </div>
+</div>
app/views/public_activity/tutorial/_update.html.erb
@@ -0,0 +1,5 @@
+<div class="row">
+  <div class="span12">
+    <%= activity.owner.name if activity.owner %> updated a tutorial named <%= activity.trackable.head if activity.trackable %> at <%= activity.created_at %>
+  </div>
+</div>
app/views/public_activity/user/_create.html.erb
@@ -0,0 +1,5 @@
+<div class="row">
+  <div class="span12">
+    <%= activity.owner.name if activity.owner %> added a new creation named <%= activity.trackable.name if activity.trackable %> at <%= activity.created_at %>
+  </div>
+</div>
app/views/public_activity/user/_destroy.html.erb
@@ -0,0 +1,5 @@
+<div class="row">
+  <div class="span12">
+    <%= activity.owner.name if activity.owner %> removed creation <%= activity.trackable %> at <%= activity.created_at %>
+  </div>
+</div>
app/views/public_activity/user/_update.html.erb
@@ -0,0 +1,5 @@
+<div class="row">
+  <div class="span12">
+    <%= activity.owner.name if activity.owner %> updated creation named <%= activity.trackable.name if activity.trackable %> at <%= activity.created_at %>
+  </div>
+</div>
config/routes.rb
@@ -47,6 +47,8 @@ Cake::Application.routes.draw do
   resources :passwords, :only => [:index, :update]
   resources :avatars, :only => [:edit, :update]
 
+  resources :notifications, :only => [:index]
+
   ActiveAdmin.routes(self)
 
   devise_for :admin_users, ActiveAdmin::Devise.config
db/migrate/20130702005130_create_activities.rb
@@ -0,0 +1,23 @@
+# Migration responsible for creating a table with activities
+class CreateActivities < ActiveRecord::Migration
+  # Create table
+  def self.up
+    create_table :activities do |t|
+      t.belongs_to :trackable, :polymorphic => true
+      t.belongs_to :owner, :polymorphic => true
+      t.string  :key
+      t.text    :parameters
+      t.belongs_to :recipient, :polymorphic => true
+
+      t.timestamps
+    end
+
+    add_index :activities, [:trackable_id, :trackable_type]
+    add_index :activities, [:owner_id, :owner_type]
+    add_index :activities, [:recipient_id, :recipient_type]
+  end
+  # Drop table
+  def self.down
+    drop_table :activities
+  end
+end
db/schema.rb
@@ -11,7 +11,7 @@
 #
 # It's strongly recommended to check this file into your version control system.
 
-ActiveRecord::Schema.define(:version => 20130618030337) do
+ActiveRecord::Schema.define(:version => 20130702005130) do
 
   create_table "active_admin_comments", :force => true do |t|
     t.integer  "resource_id",   :null => false
@@ -28,6 +28,23 @@ ActiveRecord::Schema.define(:version => 20130618030337) do
   add_index "active_admin_comments", ["namespace"], :name => "index_active_admin_comments_on_namespace"
   add_index "active_admin_comments", ["resource_type", "resource_id"], :name => "index_admin_notes_on_resource_type_and_resource_id"
 
+  create_table "activities", :force => true do |t|
+    t.integer  "trackable_id"
+    t.string   "trackable_type"
+    t.integer  "owner_id"
+    t.string   "owner_type"
+    t.string   "key"
+    t.text     "parameters"
+    t.integer  "recipient_id"
+    t.string   "recipient_type"
+    t.datetime "created_at",     :null => false
+    t.datetime "updated_at",     :null => false
+  end
+
+  add_index "activities", ["owner_id", "owner_type"], :name => "index_activities_on_owner_id_and_owner_type"
+  add_index "activities", ["recipient_id", "recipient_type"], :name => "index_activities_on_recipient_id_and_recipient_type"
+  add_index "activities", ["trackable_id", "trackable_type"], :name => "index_activities_on_trackable_id_and_trackable_type"
+
   create_table "admin_users", :force => true do |t|
     t.string   "email",                                 :default => "", :null => false
     t.string   "encrypted_password",     :limit => 128, :default => "", :null => false
Gemfile
@@ -20,6 +20,7 @@ gem 'jquery-fileupload-rails'
 gem 'capistrano-gitflow'
 gem 'dotenv-rails'
 gem 'airbrake'
+gem 'public_activity'
 
 group :development, :test do
   gem 'pg'
Gemfile.lock
@@ -203,6 +203,11 @@ GEM
     polyamorous (0.5.0)
       activerecord (~> 3.0)
     polyglot (0.3.3)
+    public_activity (1.1.0)
+      actionpack (~> 3.0)
+      activesupport (~> 3.0)
+      i18n (>= 0.5.0)
+      railties (~> 3.0)
     rack (1.4.5)
     rack-cache (1.2)
       rack (>= 0.4)
@@ -326,6 +331,7 @@ DEPENDENCIES
   lol_dba
   newrelic_rpm
   pg
+  public_activity
   rack-mini-profiler
   rails
   rake