Commit 9558cd2ab8c93921362cb640d05c679a7ff6aabe
1 parent
31e67669
Exists in
master
and in
1 other branch
Add Users#index and Users#show pages
Showing
10 changed files
with
136 additions
and
5 deletions
Show diff stats
app/controllers/application_controller.rb
| @@ -3,4 +3,10 @@ class ApplicationController < ActionController::Base | @@ -3,4 +3,10 @@ class ApplicationController < ActionController::Base | ||
| 3 | 3 | ||
| 4 | before_filter :authenticate_user! | 4 | before_filter :authenticate_user! |
| 5 | 5 | ||
| 6 | + protected | ||
| 7 | + | ||
| 8 | + def authenticate_admin! | ||
| 9 | + redirect_to(root_path) and return(false) unless user_signed_in? && current_user.admin? | ||
| 10 | + end | ||
| 11 | + | ||
| 6 | end | 12 | end |
| @@ -0,0 +1,29 @@ | @@ -0,0 +1,29 @@ | ||
| 1 | +class UsersController < ApplicationController | ||
| 2 | + respond_to :html | ||
| 3 | + | ||
| 4 | + before_filter :authenticate_admin! | ||
| 5 | + | ||
| 6 | + def index | ||
| 7 | + @users = User.paginate(:page => params[:page]) | ||
| 8 | + end | ||
| 9 | + | ||
| 10 | + def show | ||
| 11 | + @user = User.find(params[:id]) | ||
| 12 | + end | ||
| 13 | + | ||
| 14 | + def new | ||
| 15 | + end | ||
| 16 | + | ||
| 17 | + def edit | ||
| 18 | + end | ||
| 19 | + | ||
| 20 | + def create | ||
| 21 | + end | ||
| 22 | + | ||
| 23 | + def update | ||
| 24 | + end | ||
| 25 | + | ||
| 26 | + def destroy | ||
| 27 | + end | ||
| 28 | + | ||
| 29 | +end |
app/models/user.rb
| 1 | class User | 1 | class User |
| 2 | include Mongoid::Document | 2 | include Mongoid::Document |
| 3 | + include Mongoid::Timestamps | ||
| 3 | 4 | ||
| 4 | devise :database_authenticatable, | 5 | devise :database_authenticatable, |
| 5 | :recoverable, :rememberable, :trackable, | 6 | :recoverable, :rememberable, :trackable, |
| @@ -7,6 +8,7 @@ class User | @@ -7,6 +8,7 @@ class User | ||
| 7 | 8 | ||
| 8 | field :name | 9 | field :name |
| 9 | field :admin, :type => Boolean, :default => false | 10 | field :admin, :type => Boolean, :default => false |
| 11 | + key :name | ||
| 10 | 12 | ||
| 11 | validates_presence_of :name | 13 | validates_presence_of :name |
| 12 | 14 |
app/views/shared/_navigation.html.haml
| 1 | #nav-bar | 1 | #nav-bar |
| 2 | %ul | 2 | %ul |
| 3 | //%li= link_to 'Dashboard', admin_dashboard_path, :class => active_if_here(:dashboards) | 3 | //%li= link_to 'Dashboard', admin_dashboard_path, :class => active_if_here(:dashboards) |
| 4 | - %li.apps{:class => active_if_here(:apps)}= link_to 'Apps', apps_path | ||
| 5 | - %li.errs{:class => active_if_here(:errs)}= link_to 'Errs', errs_path | 4 | + %li.apps{:class => active_if_here(:apps)}= link_to 'Apps', apps_path |
| 5 | + %li.errs{:class => active_if_here(:errs)}= link_to 'Errs', errs_path | ||
| 6 | + %li.users{:class => active_if_here(:users)}= link_to 'Users', users_path | ||
| 6 | %div.clear | 7 | %div.clear |
| 7 | \ No newline at end of file | 8 | \ No newline at end of file |
| @@ -0,0 +1,16 @@ | @@ -0,0 +1,16 @@ | ||
| 1 | +- content_for :title, 'Users' | ||
| 2 | + | ||
| 3 | +%table | ||
| 4 | + %thead | ||
| 5 | + %tr | ||
| 6 | + %th Name | ||
| 7 | + %th.main Email | ||
| 8 | + %th Admin? | ||
| 9 | + %tbody | ||
| 10 | + - @users.each do |user| | ||
| 11 | + %tr | ||
| 12 | + %td.nowrap= link_to user.name, user_path(user) | ||
| 13 | + %td= user.email | ||
| 14 | + %td= user.admin? ? 'Y' : 'N' | ||
| 15 | += will_paginate @users, :previous_label => '« Previous', :next_label => 'Next »' | ||
| 16 | + | ||
| 0 | \ No newline at end of file | 17 | \ No newline at end of file |
| @@ -0,0 +1,12 @@ | @@ -0,0 +1,12 @@ | ||
| 1 | +- content_for :title, @user.name | ||
| 2 | + | ||
| 3 | +%table | ||
| 4 | + %tr | ||
| 5 | + %th Email | ||
| 6 | + %td.main= @user.email | ||
| 7 | + %tr | ||
| 8 | + %th Admin? | ||
| 9 | + %td= @user.admin? ? 'Y' : 'N' | ||
| 10 | + %tr | ||
| 11 | + %th Created | ||
| 12 | + %td= @user.created_at.to_s(:micro) | ||
| 0 | \ No newline at end of file | 13 | \ No newline at end of file |
config/routes.rb
| @@ -6,13 +6,14 @@ Errbit::Application.routes.draw do | @@ -6,13 +6,14 @@ Errbit::Application.routes.draw do | ||
| 6 | match '/notifier_api/v2/notices' => 'notices#create' | 6 | match '/notifier_api/v2/notices' => 'notices#create' |
| 7 | match '/deploys.txt' => 'deploys#create' | 7 | match '/deploys.txt' => 'deploys#create' |
| 8 | 8 | ||
| 9 | + resources :notices, :only => [:show] | ||
| 10 | + resources :deploys, :only => [:show] | ||
| 11 | + resources :users | ||
| 9 | resources :errs, :only => [:index] do | 12 | resources :errs, :only => [:index] do |
| 10 | collection do | 13 | collection do |
| 11 | get :all | 14 | get :all |
| 12 | end | 15 | end |
| 13 | end | 16 | end |
| 14 | - resources :notices, :only => [:show] | ||
| 15 | - resources :deploys, :only => [:show] | ||
| 16 | 17 | ||
| 17 | resources :apps do | 18 | resources :apps do |
| 18 | resources :errs do | 19 | resources :errs do |
| @@ -0,0 +1,30 @@ | @@ -0,0 +1,30 @@ | ||
| 1 | +require 'spec_helper' | ||
| 2 | + | ||
| 3 | +describe UsersController do | ||
| 4 | + | ||
| 5 | + it_requires_authentication | ||
| 6 | + it_requires_admin | ||
| 7 | + | ||
| 8 | + context 'Signed in as an admin' do | ||
| 9 | + before do | ||
| 10 | + sign_in Factory(:admin) | ||
| 11 | + end | ||
| 12 | + | ||
| 13 | + context "GET /users" do | ||
| 14 | + it 'paginates all users' do | ||
| 15 | + users = 3.times.inject(WillPaginate::Collection.new(1,30)) {|page,_| page << Factory.build(:user)} | ||
| 16 | + User.should_receive(:paginate).and_return(users) | ||
| 17 | + get :index | ||
| 18 | + assigns(:users).should == users | ||
| 19 | + end | ||
| 20 | + end | ||
| 21 | + | ||
| 22 | + context "GET /users/:id" do | ||
| 23 | + it 'finds the user' do | ||
| 24 | + user = Factory(:user) | ||
| 25 | + get :show, :id => user.id | ||
| 26 | + assigns(:user).should == user | ||
| 27 | + end | ||
| 28 | + end | ||
| 29 | + end | ||
| 30 | +end |
spec/factories/user_factories.rb
| @@ -5,4 +5,8 @@ Factory.define :user do |u| | @@ -5,4 +5,8 @@ Factory.define :user do |u| | ||
| 5 | u.email { Factory.next :user_email } | 5 | u.email { Factory.next :user_email } |
| 6 | u.password 'password' | 6 | u.password 'password' |
| 7 | u.password_confirmation 'password' | 7 | u.password_confirmation 'password' |
| 8 | +end | ||
| 9 | + | ||
| 10 | +Factory.define :admin, :parent => :user do |a| | ||
| 11 | + a.admin true | ||
| 8 | end | 12 | end |
| 9 | \ No newline at end of file | 13 | \ No newline at end of file |
spec/support/macros.rb
| @@ -13,7 +13,7 @@ def it_requires_authentication(options = {}) | @@ -13,7 +13,7 @@ def it_requires_authentication(options = {}) | ||
| 13 | } | 13 | } |
| 14 | options.reverse_merge!(default_options) | 14 | options.reverse_merge!(default_options) |
| 15 | 15 | ||
| 16 | - context 'when logged out' do | 16 | + context 'when signed out' do |
| 17 | before do | 17 | before do |
| 18 | sign_out :user | 18 | sign_out :user |
| 19 | end | 19 | end |
| @@ -25,4 +25,34 @@ def it_requires_authentication(options = {}) | @@ -25,4 +25,34 @@ def it_requires_authentication(options = {}) | ||
| 25 | end | 25 | end |
| 26 | end | 26 | end |
| 27 | end | 27 | end |
| 28 | +end | ||
| 29 | + | ||
| 30 | +def it_requires_admin(options = {}) | ||
| 31 | + default_options = { | ||
| 32 | + :for => { | ||
| 33 | + :index => :get, | ||
| 34 | + :show => :get, | ||
| 35 | + :new => :get, | ||
| 36 | + :create => :post, | ||
| 37 | + :edit => :get, | ||
| 38 | + :update => :put, | ||
| 39 | + :destroy => :delete | ||
| 40 | + }, | ||
| 41 | + :params => {:id => 'dummyid'} | ||
| 42 | + } | ||
| 43 | + options.reverse_merge!(default_options) | ||
| 44 | + | ||
| 45 | + context 'when signed in as a regular user' do | ||
| 46 | + before do | ||
| 47 | + sign_out :user | ||
| 48 | + sign_in Factory(:user) | ||
| 49 | + end | ||
| 50 | + | ||
| 51 | + options[:for].each do |action, method| | ||
| 52 | + it "#{method.to_s.upcase} #{action} redirects to the root path" do | ||
| 53 | + send(method, action, options[:params]) | ||
| 54 | + response.should redirect_to(root_path) | ||
| 55 | + end | ||
| 56 | + end | ||
| 57 | + end | ||
| 28 | end | 58 | end |
| 29 | \ No newline at end of file | 59 | \ No newline at end of file |