Commit 0512492644a253fcc9b32d57ea46363b4d835943

- added show routes task
- added basic project controller

Commit diff

app/controllers/application.rb

 
22# Likewise, all the methods added will be available for all controllers.
33
44class ApplicationController < ActionController::Base
5 # Pick a unique cookie name to distinguish our session data from others'
6 session :session_key => '_ks1_session_id'
5 session :session_key => '_ks1_session_id', :secret => "TODO:CHANGEME!!!"
6 include AuthenticatedSystem
77end
toggle raw diff

app/controllers/projects_controller.rb

 
1class ProjectsController < ApplicationController
2 before_filter :login_required, :only => [:create, :update, :destroy, :new]
3
4 def index
5 @projects = Project.find(:all)
6 end
7
8 def show
9 @project = Project.find(params[:id])
10 end
11
12 def new
13 end
14
15 def create
16 @project = Project.new(params[:project])
17 @project.user = current_user
18 if @project.save
19 redirect_to projects_path
20 else
21 render :action => 'new'
22 end
23 end
24
25 def update
26 @project = Project.find(params[:id])
27 @project.attributes = params[:project]
28 if @project.save
29 redirect_to project_path(@project)
30 else
31 render :action => 'new'
32 end
33 end
34
35 def destroy
36 @project = Project.find(params[:id])
37 if @project.destroy
38 redirect_to projects_path
39 else
40 flash[:error]
41 end
42 end
43end
toggle raw diff

app/controllers/users_controller.rb

 
11class UsersController < ApplicationController
2 # Be sure to include AuthenticationSystem in Application Controller instead
3 include AuthenticatedSystem
4
52 # render new.rhtml
63 def new
74 end
toggle raw diff

app/helpers/projects_helper.rb

 
1module ProjectsHelper
2end
toggle raw diff

app/views/layouts/application.rhtml

 
3131 </div>
3232
3333 <ul id="mainmenu" class="column span-14 first last">
34 <li class="first"><%= link_to "Projects" -%></li>
34 <li class="first"><%= link_to "Projects", projects_path -%></li>
3535 <li><%= link_to "Tasks" -%></li>
3636 <li><%= link_to "Repositories" -%></li>
3737 <li><%= link_to "Members" -%></li>
toggle raw diff

app/views/projects/index.rhtml

 
1<% @page_title = "Projects" -%>
2
3<%= link_to "New project", new_project_path -%>
4
5<ul>
6<% @projects.each do |project| -%>
7 <li><%= link_to project.name, project_path(project) -%></li>
8<% end -%>
9</ul>
toggle raw diff

app/views/projects/new.rhtml

 
1
2<h1>Create a new project</h1>
3<%= error_messages_for :project -%>
4
5<% form_for :project, :url => projects_path do |f| -%>
6 <label>Title: <%= f.text_field :name -%></label>
7 <label>Description: <%= f.text_area :description -%></label>
8
9 <%= submit_tag -%>
10<% end -%>
toggle raw diff

app/views/projects/show.rhtml

 
1<h1><%= @project.name -%></h1>
toggle raw diff

config/routes.rb

 
1717 # instead of a file named 'wsdl'
1818 #map.connect ':controller/service.wsdl', :action => 'wsdl'
1919
20 map.home "", :controller => "sessions", :action => "new" # TODO change eventually
20 map.home "", :controller => "projects", :action => "new" # TODO change eventually
2121
2222 map.resources :users
2323 map.resource :sessions
24 map.resources :projects #, :has_many => [:tasks, :repositories, :milestones, :pages] do |project|
25 # project.resources :tasks
26 # project.resources :repositories
27 #end
2428
2529 map.with_options :controller => 'sessions' do |session|
26 session.login 'login', :action => 'new'
27 session.logout 'logout', :action => 'destroy'
30 session.login '/login', :action => 'new'
31 session.logout '/logout', :action => 'destroy'
2832 end
2933
3034 # Install the default route as the lowest priority.
toggle raw diff

lib/authenticated_system.rb

 
6464 respond_to do |accepts|
6565 accepts.html do
6666 store_location
67 redirect_to :controller => '/sessions', :action => 'login'
67 redirect_to :controller => '/sessions', :action => 'new'
6868 end
6969 accepts.xml do
7070 headers["Status"] = "Unauthorized"
toggle raw diff

lib/tasks/misc.rake

 
1desc "Print out all the currently defined routes, with names."
2task :routes => :environment do
3 name_col_width = ActionController::Routing::Routes.named_routes.routes.keys.sort {|a,b| a.to_s.size <=> b.to_s.size}.last.to_s.size
4 ActionController::Routing::Routes.routes.each do |route|
5 name = ActionController::Routing::Routes.named_routes.routes.index(route).to_s
6 name = name.ljust(name_col_width + 1)
7 puts "#{name}#{route}"
8 end
9end
toggle raw diff

spec/controllers/projects_controller_spec.rb

 
1require File.dirname(__FILE__) + '/../spec_helper'
2
3describe ProjectsController do
4 before(:each) do
5 @projects = [mock_model(Project), mock_model(Project)]
6 end
7
8 def url_path(path, host="http://test.host")
9 "#{host}#{path}"
10 end
11
12 it "GET projects/ should be succesful" do
13 Project.should_receive(:find).and_return(@projects)
14 get :index
15 response.should be_success
16 assigns(:projects).should == @projects
17 response.should render_template("index")
18 end
19
20 it "GET projects/new should be succesful" do
21 login_as :johan
22 get :new
23 response.should be_success
24 response.should render_template("new")
25 end
26
27 it "GET projects/new should require login" do
28 get :new
29 response.should be_redirect
30 response.should redirect_to(url_path(new_sessions_path))
31 end
32
33 it "POST projects/create with valid data should create project" do
34 login_as :johan
35 post :create, :project => {:name => "project x"}
36 response.should be_redirect
37 response.should redirect_to(url_path(projects_path))
38
39 Project.find_by_name("project x").user.should == users(:johan)
40 end
41
42 it "projects/create should require login" do
43 post :create
44 response.should redirect_to(url_path(new_sessions_path))
45 end
46
47 it "projects/update should require login" do
48 post :update
49 response.should redirect_to(url_path(new_sessions_path))
50 end
51
52 it "PUT projects/update with valid data should update record" do
53 login_as :johan
54 project = projects(:johans_project)
55 put :update, :id => project.id, :project => {:name => "new name"}
56 assigns(:project).should == project
57 response.should be_redirect
58 response.should redirect_to(project_path(project))
59 project.reload.name.should == "new name"
60 end
61
62 it "projects/destroy should require login" do
63 put :destroy
64 response.should be_redirect
65 response.should redirect_to(url_path(new_sessions_path))
66 end
67
68 it "PUT projects/destroy should destroy the project" do
69 login_as :johan
70 delete :destroy, :id => projects(:johans_project)
71 response.should redirect_to(url_path(projects_path))
72 Project.find_by_id(1).should == nil
73 end
74
75end
toggle raw diff

spec/controllers/sessions_controller_spec.rb

 
1111 end
1212
1313 it "should login and redirect" do
14 post :create, :login => "quentin", :password => "test"
14 post :create, :login => "johan", :password => "test"
1515 session[:user].should_not be(nil)
1616 response.should be_redirect
1717 end
1818
1919 it "should fail login and not redirect" do
20 post :create, :login => 'quentin', :password => 'bad password'
20 post :create, :login => 'johan', :password => 'bad password'
2121 session[:user].should be(nil)
2222 response.should be_success
2323 end
2424
2525 it "should logout" do
26 login_as :quentin
26 login_as :johan
2727 get :destroy
2828 session[:user].should be(nil)
2929 response.should be_redirect
3030 end
3131
3232 it "should remember me" do
33 post :create, :login => 'quentin', :password => 'test', :remember_me => "1"
33 post :create, :login => 'johan', :password => 'test', :remember_me => "1"
3434 response.cookies["auth_token"].should_not be(nil)
3535 end
3636
3737 it "should should not remember me" do
38 post :create, :login => 'quentin', :password => 'test', :remember_me => "0"
38 post :create, :login => 'johan', :password => 'test', :remember_me => "0"
3939 response.cookies["auth_token"].should be(nil)
4040 end
4141
4242 it "should delete token on logout" do
43 login_as :quentin
43 login_as :johan
4444 get :destroy
4545 response.cookies["auth_token"].should == []
4646 end
4747
4848 it "should login with cookie" do
49 users(:quentin).remember_me
50 request.cookies["auth_token"] = cookie_for(:quentin)
49 users(:johan).remember_me
50 request.cookies["auth_token"] = cookie_for(:johan)
5151 get :new
5252 controller.send(:logged_in?).should be(true)
5353 end
5454
5555 it "should fail when trying to login with with expired cookie" do
56 users(:quentin).remember_me
57 users(:quentin).update_attribute :remember_token_expires_at, 5.minutes.ago.utc
58 request.cookies["auth_token"] = cookie_for(:quentin)
56 users(:johan).remember_me
57 users(:johan).update_attribute :remember_token_expires_at, 5.minutes.ago.utc
58 request.cookies["auth_token"] = cookie_for(:johan)
5959 get :new
6060 controller.send(:logged_in?).should be(false)
6161 end
6262
6363 it "should fail cookie login" do
64 users(:quentin).remember_me
64 users(:johan).remember_me
6565 @request.cookies["auth_token"] = auth_token('invalid_auth_token')
6666 get :new
6767 @controller.send(:logged_in?).should be(false)
toggle raw diff

spec/controllers/users_controller_spec.rb

 
4747 end
4848
4949 it "should activate user" do
50 User.authenticate('aaron', 'test').should be(nil)
51 get :activate, :activation_code => users(:aaron).activation_code
50 User.authenticate('moe', 'test').should be(nil)
51 get :activate, :activation_code => users(:moe).activation_code
5252 response.should redirect_to '/'
5353 flash[:notice].should_not be(nil)
54 User.authenticate('aaron', 'test').should == users(:aaron)
54 User.authenticate('moe', 'test').should == users(:moe)
5555 end
5656
5757end
toggle raw diff

spec/fixtures/projects.yml

 
11# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2one:
2johans_project:
33 id: 1
4 name: MyString
5 description: MyText
4 name: johans project
5 updated_at: <%= 2.days.ago.to_s(:db) %>
6 description: this is johans project yo
67 user_id: 1
7 created_at: 2007-08-19 16:56:36
8 updated_at: 2007-08-19 16:56:36
9two:
10 id: 2
11 name: MyString
12 description: MyText
13 user_id: 1
14 created_at: 2007-08-19 16:56:36
15 updated_at: 2007-08-19 16:56:36
8 created_at: <%= 5.days.ago.to_s(:db) %>
toggle raw diff

spec/fixtures/users.yml

 
1quentin:
1johan:
22 id: 1
3 login: quentin
4 email: quentin@example.com
3 login: johan
4 email: johan@johansorensen.com
55 salt: 7e3041ebc2fc05a40c60028e2c4901a81035d3cd
66 crypted_password: 00742970dc9e6319f8019fd54864d3ea740f04b1 # test
77 created_at: <%= 5.days.ago.to_s :db %>
88 activation_code: 8f24789ae988411ccf33ab0c30fe9106fab32e9b
99 activated_at: <%= 5.days.ago.to_s :db %>
10aaron:
10moe:
1111 id: 2
12 login: aaron
13 email: aaron@example.com
12 login: moe
13 email: moe@example.com
1414 salt: 7e3041ebc2fc05a40c60028e2c4901a81035d3cd
1515 crypted_password: 00742970dc9e6319f8019fd54864d3ea740f04b1 # test
1616 created_at: <%= 1.days.ago.to_s :db %>
toggle raw diff

spec/helpers/projects_helper_spec.rb

 
1require File.dirname(__FILE__) + '/../spec_helper'
2
3describe ProjectsHelper do
4
5 #Delete this example and add some real ones or delete this file
6 it "should include the ProjectsHelper" do
7 included_modules = self.metaclass.send :included_modules
8 included_modules.should include(ProjectsHelper)
9 end
10
11end
toggle raw diff

spec/models/user_spec.rb

 
4545 end
4646
4747 it "should reset password" do
48 users(:quentin).update_attributes(:password => "newpass", :password_confirmation => "newpass")
49 User.authenticate("quentin", "newpass").should == users(:quentin)
48 users(:johan).update_attributes(:password => "newpass", :password_confirmation => "newpass")
49 User.authenticate("johan", "newpass").should == users(:johan)
5050 end
5151
5252 it "should not rehash the password" do
53 users(:quentin).update_attributes(:login => 'quentin2')
54 User.authenticate("quentin2", "test").should == users(:quentin)
53 users(:johan).update_attributes(:login => 'johan2')
54 User.authenticate("johan2", "test").should == users(:johan)
5555 end
5656
5757 it "should authenticate user" do
58 User.authenticate("quentin", "test").should == users(:quentin)
58 User.authenticate("johan", "test").should == users(:johan)
5959 end
6060
6161 it "should set remember token" do
62 users(:quentin).remember_me
63 users(:quentin).remember_token.should_not be(nil)
64 users(:quentin).remember_token_expires_at.should_not be(nil)
62 users(:johan).remember_me
63 users(:johan).remember_token.should_not be(nil)
64 users(:johan).remember_token_expires_at.should_not be(nil)
6565 end
6666
6767 it "should unset remember token" do
68 users(:quentin).remember_me
69 users(:quentin).remember_token.should_not be(nil)
70 users(:quentin).forget_me
71 users(:quentin).remember_token.should be(nil)
68 users(:johan).remember_me
69 users(:johan).remember_token.should_not be(nil)
70 users(:johan).forget_me
71 users(:johan).remember_token.should be(nil)
7272 end
7373
7474 it "should remember user for one week" do
7575 before = 1.week.from_now.utc
76 users(:quentin).remember_me_for 1.week
76 users(:johan).remember_me_for 1.week
7777 after = 1.week.from_now.utc
78 users(:quentin).remember_token.should_not be(nil)
79 users(:quentin).remember_token_expires_at.should_not be(nil)
80 users(:quentin).remember_token_expires_at.between?(before, after).should be(true)
78 users(:johan).remember_token.should_not be(nil)
79 users(:johan).remember_token_expires_at.should_not be(nil)
80 users(:johan).remember_token_expires_at.between?(before, after).should be(true)
8181 end
8282
8383 it "should remember me until one week later" do
8484 time = 1.week.from_now.utc
85 users(:quentin).remember_me_until time
86 users(:quentin).remember_token.should_not be(nil)
87 users(:quentin).remember_token_expires_at.should_not be(nil)
88 users(:quentin).remember_token_expires_at.should == time
85 users(:johan).remember_me_until time
86 users(:johan).remember_token.should_not be(nil)
87 users(:johan).remember_token_expires_at.should_not be(nil)
88 users(:johan).remember_token_expires_at.should == time
8989 end
9090
9191 it "should remember me default two weeks" do
9292 before = 2.weeks.from_now.utc
93 users(:quentin).remember_me
93 users(:johan).remember_me
9494 after = 2.weeks.from_now.utc
95 users(:quentin).remember_token.should_not be(nil)
96 users(:quentin).remember_token_expires_at.should_not be(nil)
97 users(:quentin).remember_token_expires_at.between?(before, after).should be(true)
95 users(:johan).remember_token.should_not be(nil)
96 users(:johan).remember_token_expires_at.should_not be(nil)
97 users(:johan).remember_token_expires_at.between?(before, after).should be(true)
9898 end
9999
100100 protected
toggle raw diff

spec/spec_helper.rb

 
1919 # Alternatively, if you prefer to declare them only once, you can
2020 # do so here, like so ...
2121 #
22 config.global_fixtures = :users
22 config.global_fixtures = :users, :projects
2323 #
2424 # If you declare global fixtures, be aware that they will be declared
2525 # for all of your examples, even those that don't use them.
toggle raw diff