Commit e0ff252a182dc75a6ef7171a3c2636af8590f7b2

Authored by Nick Recobra
1 parent 5d63d531
Exists in master and in 1 other branch production

Per-user per_page option for errs and users entries.

app/controllers/apps_controller.rb
... ... @@ -10,7 +10,7 @@ class AppsController < ApplicationController
10 10 def show
11 11 respond_to do |format|
12 12 format.html do
13   - @errs = @app.errs.ordered.paginate(:page => params[:page], :per_page => Err.per_page)
  13 + @errs = @app.errs.ordered.paginate(:page => params[:page], :per_page => current_user.per_page)
14 14 @deploys = @app.deploys.order_by(:created_at.desc).limit(5)
15 15 end
16 16 format.atom do
... ...
app/controllers/errs_controller.rb
... ... @@ -6,7 +6,7 @@ class ErrsController < ApplicationController
6 6 app_scope = current_user.admin? ? App.all : current_user.apps
7 7 respond_to do |format|
8 8 format.html do
9   - @errs = Err.for_apps(app_scope).unresolved.ordered.paginate(:page => params[:page], :per_page => Err.per_page)
  9 + @errs = Err.for_apps(app_scope).unresolved.ordered.paginate(:page => params[:page], :per_page => current_user.per_page)
10 10 end
11 11 format.atom do
12 12 @errs = Err.for_apps(app_scope).unresolved.ordered
... ... @@ -16,7 +16,7 @@ class ErrsController < ApplicationController
16 16  
17 17 def all
18 18 app_scope = current_user.admin? ? App.all : current_user.apps
19   - @errs = Err.for_apps(app_scope).ordered.paginate(:page => params[:page], :per_page => Err.per_page)
  19 + @errs = Err.for_apps(app_scope).ordered.paginate(:page => params[:page], :per_page => current_user.per_page)
20 20 end
21 21  
22 22 def show
... ...
app/controllers/users_controller.rb
... ... @@ -6,7 +6,7 @@ class UsersController < ApplicationController
6 6 before_filter :require_user_edit_priviledges, :only => [:edit, :update]
7 7  
8 8 def index
9   - @users = User.paginate(:page => params[:page], :per_page => User.per_page)
  9 + @users = User.paginate(:page => params[:page], :per_page => current_user.per_page)
10 10 end
11 11  
12 12 def show
... ...
app/models/err.rb
1 1 class Err
2   - cattr_reader :per_page
3   - @@per_page = 30
4 2 include Mongoid::Document
5 3 include Mongoid::Timestamps
6 4  
... ...
app/models/user.rb
1 1 class User
2   - cattr_reader :per_page
3   - @@per_page = 30
  2 + PER_PAGE = 30
4 3 include Mongoid::Document
5 4 include Mongoid::Timestamps
6 5  
... ... @@ -10,6 +9,7 @@ class User
10 9  
11 10 field :name
12 11 field :admin, :type => Boolean, :default => false
  12 + field :per_page, :type => Fixnum, :default => PER_PAGE
13 13  
14 14 after_destroy :destroy_watchers
15 15 before_save :ensure_authentication_token
... ... @@ -23,6 +23,10 @@ class User
23 23 def watchers
24 24 App.all.map(&:watchers).flatten.select {|w| w.user_id.to_s == id.to_s}
25 25 end
  26 +
  27 + def per_page
  28 + self[:per_page] || PER_PAGE
  29 + end
26 30  
27 31 def apps
28 32 # This is completely wasteful but became necessary
... ...
spec/controllers/apps_controller_spec.rb
... ... @@ -35,7 +35,8 @@ describe AppsController do
35 35 render_views
36 36 context 'logged in as an admin' do
37 37 before(:each) do
38   - sign_in Factory(:admin)
  38 + @user = Factory(:admin)
  39 + sign_in @user
39 40 @app = Factory(:app)
40 41 @err = Factory :err, :app => @app
41 42 @notice = Factory :notice, :err => @err
... ... @@ -56,6 +57,23 @@ describe AppsController do
56 57 response.should be_success
57 58 response.body.should match(@err.message)
58 59 end
  60 +
  61 + context "pagination" do
  62 + before(:each) do
  63 + 35.times { Factory :err, :app => @app }
  64 + end
  65 +
  66 + it "should have default per_page value for user" do
  67 + get :show, :id => @app.id
  68 + assigns(:errs).size.should == User::PER_PAGE
  69 + end
  70 +
  71 + it "should be able to override default per_page value" do
  72 + @user.update_attribute :per_page, 10
  73 + get :show, :id => @app.id
  74 + assigns(:errs).size.should == 10
  75 + end
  76 + end
59 77 end
60 78  
61 79 context 'logged in as a user' do
... ...
spec/controllers/errs_controller_spec.rb
... ... @@ -14,7 +14,8 @@ describe ErrsController do
14 14 render_views
15 15 context 'when logged in as an admin' do
16 16 before(:each) do
17   - sign_in Factory(:admin)
  17 + @user = Factory(:admin)
  18 + sign_in @user
18 19 @notice = Factory :notice
19 20 @err = @notice.err
20 21 end
... ... @@ -35,6 +36,23 @@ describe ErrsController do
35 36 1000.times { Factory :notice }
36 37 lambda { get :index }.should_not raise_error
37 38 end
  39 +
  40 + context "pagination" do
  41 + before(:each) do
  42 + 35.times { Factory :err }
  43 + end
  44 +
  45 + it "should have default per_page value for user" do
  46 + get :index
  47 + assigns(:errs).size.should == User::PER_PAGE
  48 + end
  49 +
  50 + it "should be able to override default per_page value" do
  51 + @user.update_attribute :per_page, 10
  52 + get :index
  53 + assigns(:errs).size.should == 10
  54 + end
  55 + end
38 56 end
39 57  
40 58 context 'when logged in as a user' do
... ...