From e0ff252a182dc75a6ef7171a3c2636af8590f7b2 Mon Sep 17 00:00:00 2001 From: Nick Recobra Date: Wed, 9 Mar 2011 16:07:14 +0300 Subject: [PATCH] Per-user per_page option for errs and users entries. --- app/controllers/apps_controller.rb | 2 +- app/controllers/errs_controller.rb | 4 ++-- app/controllers/users_controller.rb | 2 +- app/models/err.rb | 2 -- app/models/user.rb | 8 ++++++-- spec/controllers/apps_controller_spec.rb | 20 +++++++++++++++++++- spec/controllers/errs_controller_spec.rb | 20 +++++++++++++++++++- 7 files changed, 48 insertions(+), 10 deletions(-) diff --git a/app/controllers/apps_controller.rb b/app/controllers/apps_controller.rb index 31f7d80..7b32f3b 100644 --- a/app/controllers/apps_controller.rb +++ b/app/controllers/apps_controller.rb @@ -10,7 +10,7 @@ class AppsController < ApplicationController def show respond_to do |format| format.html do - @errs = @app.errs.ordered.paginate(:page => params[:page], :per_page => Err.per_page) + @errs = @app.errs.ordered.paginate(:page => params[:page], :per_page => current_user.per_page) @deploys = @app.deploys.order_by(:created_at.desc).limit(5) end format.atom do diff --git a/app/controllers/errs_controller.rb b/app/controllers/errs_controller.rb index 7496028..e7ca172 100644 --- a/app/controllers/errs_controller.rb +++ b/app/controllers/errs_controller.rb @@ -6,7 +6,7 @@ class ErrsController < ApplicationController app_scope = current_user.admin? ? App.all : current_user.apps respond_to do |format| format.html do - @errs = Err.for_apps(app_scope).unresolved.ordered.paginate(:page => params[:page], :per_page => Err.per_page) + @errs = Err.for_apps(app_scope).unresolved.ordered.paginate(:page => params[:page], :per_page => current_user.per_page) end format.atom do @errs = Err.for_apps(app_scope).unresolved.ordered @@ -16,7 +16,7 @@ class ErrsController < ApplicationController def all app_scope = current_user.admin? ? App.all : current_user.apps - @errs = Err.for_apps(app_scope).ordered.paginate(:page => params[:page], :per_page => Err.per_page) + @errs = Err.for_apps(app_scope).ordered.paginate(:page => params[:page], :per_page => current_user.per_page) end def show diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 932f46d..1165185 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -6,7 +6,7 @@ class UsersController < ApplicationController before_filter :require_user_edit_priviledges, :only => [:edit, :update] def index - @users = User.paginate(:page => params[:page], :per_page => User.per_page) + @users = User.paginate(:page => params[:page], :per_page => current_user.per_page) end def show diff --git a/app/models/err.rb b/app/models/err.rb index a436768..d38f1eb 100644 --- a/app/models/err.rb +++ b/app/models/err.rb @@ -1,6 +1,4 @@ class Err - cattr_reader :per_page - @@per_page = 30 include Mongoid::Document include Mongoid::Timestamps diff --git a/app/models/user.rb b/app/models/user.rb index b1246ea..61146f6 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,6 +1,5 @@ class User - cattr_reader :per_page - @@per_page = 30 + PER_PAGE = 30 include Mongoid::Document include Mongoid::Timestamps @@ -10,6 +9,7 @@ class User field :name field :admin, :type => Boolean, :default => false + field :per_page, :type => Fixnum, :default => PER_PAGE after_destroy :destroy_watchers before_save :ensure_authentication_token @@ -23,6 +23,10 @@ class User def watchers App.all.map(&:watchers).flatten.select {|w| w.user_id.to_s == id.to_s} end + + def per_page + self[:per_page] || PER_PAGE + end def apps # This is completely wasteful but became necessary diff --git a/spec/controllers/apps_controller_spec.rb b/spec/controllers/apps_controller_spec.rb index 70bf8c6..7eb420a 100644 --- a/spec/controllers/apps_controller_spec.rb +++ b/spec/controllers/apps_controller_spec.rb @@ -35,7 +35,8 @@ describe AppsController do render_views context 'logged in as an admin' do before(:each) do - sign_in Factory(:admin) + @user = Factory(:admin) + sign_in @user @app = Factory(:app) @err = Factory :err, :app => @app @notice = Factory :notice, :err => @err @@ -56,6 +57,23 @@ describe AppsController do response.should be_success response.body.should match(@err.message) end + + context "pagination" do + before(:each) do + 35.times { Factory :err, :app => @app } + end + + it "should have default per_page value for user" do + get :show, :id => @app.id + assigns(:errs).size.should == User::PER_PAGE + end + + it "should be able to override default per_page value" do + @user.update_attribute :per_page, 10 + get :show, :id => @app.id + assigns(:errs).size.should == 10 + end + end end context 'logged in as a user' do diff --git a/spec/controllers/errs_controller_spec.rb b/spec/controllers/errs_controller_spec.rb index a37ee18..ad2bbf2 100644 --- a/spec/controllers/errs_controller_spec.rb +++ b/spec/controllers/errs_controller_spec.rb @@ -14,7 +14,8 @@ describe ErrsController do render_views context 'when logged in as an admin' do before(:each) do - sign_in Factory(:admin) + @user = Factory(:admin) + sign_in @user @notice = Factory :notice @err = @notice.err end @@ -35,6 +36,23 @@ describe ErrsController do 1000.times { Factory :notice } lambda { get :index }.should_not raise_error end + + context "pagination" do + before(:each) do + 35.times { Factory :err } + end + + it "should have default per_page value for user" do + get :index + assigns(:errs).size.should == User::PER_PAGE + end + + it "should be able to override default per_page value" do + @user.update_attribute :per_page, 10 + get :index + assigns(:errs).size.should == 10 + end + end end context 'when logged in as a user' do -- libgit2 0.21.2