Commit 20e91410
Changed files (31)
app
controllers
views
notifications
public_activity
comment
favorite
config
db
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