summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohan Sørensen <johan@johansorensen.com>2009-12-08 11:35:50 +0100
committerJohan Sørensen <johan@johansorensen.com>2009-12-08 11:36:42 +0100
commit18760e32f67576c9ca137771f174113dc2d8a24e (patch)
tree94234ee96e7472b8ae428e8d84d5fc7167b96daf
parent46a1e39ea4e0fe997395c0d5fc68e0d6986ad45c (diff)
downloadgitorious-mainline-outdated-18760e32f67576c9ca137771f174113dc2d8a24e.zip
gitorious-mainline-outdated-18760e32f67576c9ca137771f174113dc2d8a24e.tar.gz
gitorious-mainline-outdated-18760e32f67576c9ca137771f174113dc2d8a24e.tar.bz2
Paginate newsfeed events better on the ~user page
-rw-r--r--app/controllers/users_controller.rb7
-rw-r--r--app/models/favorite.rb3
-rw-r--r--app/models/user.rb18
-rw-r--r--db/schema.rb12
4 files changed, 15 insertions, 25 deletions
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 26caf6a..927fefe 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -42,10 +42,7 @@ class UsersController < ApplicationController
@projects = @user.projects.find(:all, :include => [:tags, { :repositories => :project }])
@repositories = @user.commit_repositories
if current_user == @user && params[:events] != "outgoing"
- @events = @user.events_in_watchlist.paginate(
- :page => params[:page],
- :include => [:user, :project]
- )
+ @events = @user.paginated_events_in_watchlist(:page => params[:page])
else
@events = @user.events.paginate(
:page => params[:page], :order => "events.created_at desc",
@@ -83,7 +80,7 @@ class UsersController < ApplicationController
wants.atom {render :template => "users/feed"}
end
end
-
+
def create
@user = User.new(params[:user])
@user.login = params[:user][:login]
diff --git a/app/models/favorite.rb b/app/models/favorite.rb
index e1359af..04467ec 100644
--- a/app/models/favorite.rb
+++ b/app/models/favorite.rb
@@ -19,6 +19,7 @@
class Favorite < ActiveRecord::Base
belongs_to :user
belongs_to :watchable, :polymorphic => true
+
validates_presence_of :user_id, :watchable_id, :watchable_type
validates_uniqueness_of :user_id, :scope => [:watchable_id, :watchable_type]
after_create :create_event
@@ -43,7 +44,7 @@ class Favorite < ActiveRecord::Base
watchable
end
end
-
+
def create_event
user.events.create(event_options) unless event_exists?
end
diff --git a/app/models/user.rb b/app/models/user.rb
index 51efdc2..69fa94a 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -36,9 +36,8 @@ class User < ActiveRecord::Base
:conditions => ["repositories.kind NOT IN (?)", Repository::KINDS_INTERNAL_REPO]
has_many :ssh_keys, :order => "id desc", :dependent => :destroy
has_many :comments
- has_many :events, :order => "events.created_at asc", :dependent => :destroy
- has_many :events_as_target, :class_name => "Event", :as => :target
has_many :email_aliases, :class_name => "Email", :dependent => :destroy
+ has_many :events, :order => "events.created_at asc", :dependent => :destroy
has_many :favorites, :dependent => :destroy
# Virtual attribute for the unencrypted password
@@ -372,12 +371,15 @@ class User < ActiveRecord::Base
favorites.collect(&:watchable)
end
- def events_in_watchlist
- Event.find(:all,
- :joins => "inner join favorites ON favorites.watchable_id = events.target_id " +
- "AND favorites.watchable_type = events.target_type",
- :conditions => ["favorites.user_id=?", id],
- :order => "events.created_at desc")
+ def paginated_events_in_watchlist(options = {})
+ Event.paginate(:all, {
+ :conditions => {
+ :target_id => favorites.map(&:watchable_id),
+ :target_type => favorites.map(&:watchable_type)
+ },
+ :order => "events.created_at desc",
+ :include => [:user, :project]
+ }.merge(options))
end
protected
diff --git a/db/schema.rb b/db/schema.rb
index 6af5072..08d5f64 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -88,6 +88,7 @@ ActiveRecord::Schema.define(:version => 20091207133046) do
t.string "user_email"
end
+ add_index "events", ["action", "created_at"], :name => "index_events_on_action_and_created_at"
add_index "events", ["action"], :name => "index_events_on_action"
add_index "events", ["created_at", "project_id"], :name => "index_events_on_created_at_and_project_id"
add_index "events", ["created_at"], :name => "index_events_on_created_at"
@@ -121,17 +122,6 @@ ActiveRecord::Schema.define(:version => 20091207133046) do
add_index "groups", ["name"], :name => "index_groups_on_name_and_public"
add_index "groups", ["user_id"], :name => "index_groups_on_user_id"
- create_table "hooks", :force => true do |t|
- t.integer "user_id"
- t.integer "repository_id"
- t.string "url"
- t.string "last_response"
- t.datetime "created_at"
- t.datetime "updated_at"
- end
-
- add_index "hooks", ["repository_id"], :name => "index_hooks_on_repository_id"
-
create_table "memberships", :force => true do |t|
t.integer "group_id"
t.integer "user_id"