simonmenke-mr_authentication 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. data/License.txt +20 -0
  2. data/README +9 -0
  3. data/about.yml +9 -0
  4. data/app/controllers/lalala/base_controller.rb +4 -0
  5. data/app/controllers/lalala/sessions_controller.rb +42 -0
  6. data/app/controllers/lalala/users_controller.rb +24 -0
  7. data/app/models/user.rb +56 -0
  8. data/app/views/lalala/sessions/new.html.erb +24 -0
  9. data/app/views/lalala/users/_form.html.erb +33 -0
  10. data/app/views/lalala/users/_user.html.erb +3 -0
  11. data/app/views/lalala/users/edit.html.erb +2 -0
  12. data/app/views/lalala/users/index.html.erb +9 -0
  13. data/app/views/lalala/users/new.html.erb +2 -0
  14. data/app/views/lalala/users/show.html.erb +17 -0
  15. data/config/routes.rb +7 -0
  16. data/db/fixtures/users.rb +8 -0
  17. data/db/migrations/20081022101325_create_users.rb +22 -0
  18. data/lib/authenticated_system.rb +189 -0
  19. data/lib/authenticated_test_helper.rb +11 -0
  20. data/lib/mr_authentication.rb +6 -0
  21. data/lib/mr_authentication/version.rb +10 -0
  22. data/rails/init.rb +4 -0
  23. data/setup/setup.rb +8 -0
  24. data/vendor/plugins/restful-authentication/CHANGELOG +68 -0
  25. data/vendor/plugins/restful-authentication/README.textile +224 -0
  26. data/vendor/plugins/restful-authentication/Rakefile +22 -0
  27. data/vendor/plugins/restful-authentication/TODO +15 -0
  28. data/vendor/plugins/restful-authentication/generators/authenticated/USAGE +1 -0
  29. data/vendor/plugins/restful-authentication/generators/authenticated/authenticated_generator.rb +478 -0
  30. data/vendor/plugins/restful-authentication/generators/authenticated/lib/insert_routes.rb +54 -0
  31. data/vendor/plugins/restful-authentication/generators/authenticated/templates/_model_partial.html.erb +8 -0
  32. data/vendor/plugins/restful-authentication/generators/authenticated/templates/activation.erb +3 -0
  33. data/vendor/plugins/restful-authentication/generators/authenticated/templates/authenticated_system.rb +189 -0
  34. data/vendor/plugins/restful-authentication/generators/authenticated/templates/authenticated_test_helper.rb +22 -0
  35. data/vendor/plugins/restful-authentication/generators/authenticated/templates/controller.rb +43 -0
  36. data/vendor/plugins/restful-authentication/generators/authenticated/templates/helper.rb +2 -0
  37. data/vendor/plugins/restful-authentication/generators/authenticated/templates/login.html.erb +16 -0
  38. data/vendor/plugins/restful-authentication/generators/authenticated/templates/mailer.rb +25 -0
  39. data/vendor/plugins/restful-authentication/generators/authenticated/templates/migration.rb +26 -0
  40. data/vendor/plugins/restful-authentication/generators/authenticated/templates/model.rb +83 -0
  41. data/vendor/plugins/restful-authentication/generators/authenticated/templates/model_controller.rb +85 -0
  42. data/vendor/plugins/restful-authentication/generators/authenticated/templates/model_helper.rb +93 -0
  43. data/vendor/plugins/restful-authentication/generators/authenticated/templates/model_helper_spec.rb +158 -0
  44. data/vendor/plugins/restful-authentication/generators/authenticated/templates/observer.rb +11 -0
  45. data/vendor/plugins/restful-authentication/generators/authenticated/templates/signup.html.erb +19 -0
  46. data/vendor/plugins/restful-authentication/generators/authenticated/templates/signup_notification.erb +8 -0
  47. data/vendor/plugins/restful-authentication/generators/authenticated/templates/site_keys.rb +38 -0
  48. data/vendor/plugins/restful-authentication/generators/authenticated/templates/spec/controllers/access_control_spec.rb +90 -0
  49. data/vendor/plugins/restful-authentication/generators/authenticated/templates/spec/controllers/authenticated_system_spec.rb +102 -0
  50. data/vendor/plugins/restful-authentication/generators/authenticated/templates/spec/controllers/sessions_controller_spec.rb +139 -0
  51. data/vendor/plugins/restful-authentication/generators/authenticated/templates/spec/controllers/users_controller_spec.rb +198 -0
  52. data/vendor/plugins/restful-authentication/generators/authenticated/templates/spec/fixtures/users.yml +60 -0
  53. data/vendor/plugins/restful-authentication/generators/authenticated/templates/spec/helpers/users_helper_spec.rb +141 -0
  54. data/vendor/plugins/restful-authentication/generators/authenticated/templates/spec/models/user_spec.rb +290 -0
  55. data/vendor/plugins/restful-authentication/generators/authenticated/templates/stories/rest_auth_stories.rb +22 -0
  56. data/vendor/plugins/restful-authentication/generators/authenticated/templates/stories/rest_auth_stories_helper.rb +81 -0
  57. data/vendor/plugins/restful-authentication/generators/authenticated/templates/stories/steps/ra_navigation_steps.rb +49 -0
  58. data/vendor/plugins/restful-authentication/generators/authenticated/templates/stories/steps/ra_resource_steps.rb +179 -0
  59. data/vendor/plugins/restful-authentication/generators/authenticated/templates/stories/steps/ra_response_steps.rb +171 -0
  60. data/vendor/plugins/restful-authentication/generators/authenticated/templates/stories/steps/user_steps.rb +153 -0
  61. data/vendor/plugins/restful-authentication/generators/authenticated/templates/stories/users/accounts.story +186 -0
  62. data/vendor/plugins/restful-authentication/generators/authenticated/templates/stories/users/sessions.story +134 -0
  63. data/vendor/plugins/restful-authentication/generators/authenticated/templates/test/functional_test.rb +82 -0
  64. data/vendor/plugins/restful-authentication/generators/authenticated/templates/test/mailer_test.rb +31 -0
  65. data/vendor/plugins/restful-authentication/generators/authenticated/templates/test/model_functional_test.rb +93 -0
  66. data/vendor/plugins/restful-authentication/generators/authenticated/templates/test/unit_test.rb +164 -0
  67. data/vendor/plugins/restful-authentication/init.rb +3 -0
  68. data/vendor/plugins/restful-authentication/install.rb +1 -0
  69. data/vendor/plugins/restful-authentication/lib/authentication.rb +40 -0
  70. data/vendor/plugins/restful-authentication/lib/authentication/by_cookie_token.rb +82 -0
  71. data/vendor/plugins/restful-authentication/lib/authentication/by_password.rb +64 -0
  72. data/vendor/plugins/restful-authentication/lib/authorization.rb +14 -0
  73. data/vendor/plugins/restful-authentication/lib/authorization/aasm_roles.rb +63 -0
  74. data/vendor/plugins/restful-authentication/lib/authorization/stateful_roles.rb +62 -0
  75. data/vendor/plugins/restful-authentication/lib/trustification.rb +14 -0
  76. data/vendor/plugins/restful-authentication/lib/trustification/email_validation.rb +20 -0
  77. data/vendor/plugins/restful-authentication/notes/AccessControl.txt +2 -0
  78. data/vendor/plugins/restful-authentication/notes/Authentication.txt +5 -0
  79. data/vendor/plugins/restful-authentication/notes/Authorization.txt +154 -0
  80. data/vendor/plugins/restful-authentication/notes/RailsPlugins.txt +78 -0
  81. data/vendor/plugins/restful-authentication/notes/SecurityFramework.graffle +0 -0
  82. data/vendor/plugins/restful-authentication/notes/SecurityFramework.png +0 -0
  83. data/vendor/plugins/restful-authentication/notes/SecurityPatterns.txt +163 -0
  84. data/vendor/plugins/restful-authentication/notes/Tradeoffs.txt +126 -0
  85. data/vendor/plugins/restful-authentication/notes/Trustification.txt +49 -0
  86. data/vendor/plugins/restful-authentication/tasks/auth.rake +33 -0
  87. metadata +220 -0
@@ -0,0 +1,102 @@
1
+ require File.dirname(__FILE__) + '<%= ('/..'*controller_class_nesting_depth) + '/../spec_helper' %>'
2
+
3
+ # Be sure to include AuthenticatedTestHelper in spec/spec_helper.rb instead
4
+ # Then, you can remove it from this and the units test.
5
+ include AuthenticatedTestHelper
6
+ include AuthenticatedSystem
7
+ def action_name() end
8
+
9
+ describe <%= controller_class_name %>Controller do
10
+ fixtures :<%= table_name %>
11
+
12
+ before do
13
+ # FIXME -- <%= controller_file_name %> controller not testing xml logins
14
+ stub!(:authenticate_with_http_basic).and_return nil
15
+ end
16
+ describe "logout_killing_session!" do
17
+ before do
18
+ login_as :quentin
19
+ stub!(:reset_session)
20
+ end
21
+ it 'resets the session' do should_receive(:reset_session); logout_killing_session! end
22
+ it 'kills my auth_token cookie' do should_receive(:kill_remember_cookie!); logout_killing_session! end
23
+ it 'nils the current <%= file_name %>' do logout_killing_session!; current_<%= file_name %>.should be_nil end
24
+ it 'kills :<%= file_name %>_id session' do
25
+ session.stub!(:[]=)
26
+ session.should_receive(:[]=).with(:<%= file_name %>_id, nil).at_least(:once)
27
+ logout_killing_session!
28
+ end
29
+ it 'forgets me' do
30
+ current_<%= file_name %>.remember_me
31
+ current_<%= file_name %>.remember_token.should_not be_nil; current_<%= file_name %>.remember_token_expires_at.should_not be_nil
32
+ <%= class_name %>.find(1).remember_token.should_not be_nil; <%= class_name %>.find(1).remember_token_expires_at.should_not be_nil
33
+ logout_killing_session!
34
+ <%= class_name %>.find(1).remember_token.should be_nil; <%= class_name %>.find(1).remember_token_expires_at.should be_nil
35
+ end
36
+ end
37
+
38
+ describe "logout_keeping_session!" do
39
+ before do
40
+ login_as :quentin
41
+ stub!(:reset_session)
42
+ end
43
+ it 'does not reset the session' do should_not_receive(:reset_session); logout_keeping_session! end
44
+ it 'kills my auth_token cookie' do should_receive(:kill_remember_cookie!); logout_keeping_session! end
45
+ it 'nils the current <%= file_name %>' do logout_keeping_session!; current_<%= file_name %>.should be_nil end
46
+ it 'kills :<%= file_name %>_id session' do
47
+ session.stub!(:[]=)
48
+ session.should_receive(:[]=).with(:<%= file_name %>_id, nil).at_least(:once)
49
+ logout_keeping_session!
50
+ end
51
+ it 'forgets me' do
52
+ current_<%= file_name %>.remember_me
53
+ current_<%= file_name %>.remember_token.should_not be_nil; current_<%= file_name %>.remember_token_expires_at.should_not be_nil
54
+ <%= class_name %>.find(1).remember_token.should_not be_nil; <%= class_name %>.find(1).remember_token_expires_at.should_not be_nil
55
+ logout_keeping_session!
56
+ <%= class_name %>.find(1).remember_token.should be_nil; <%= class_name %>.find(1).remember_token_expires_at.should be_nil
57
+ end
58
+ end
59
+
60
+ describe 'When logged out' do
61
+ it "should not be authorized?" do
62
+ authorized?().should be_false
63
+ end
64
+ end
65
+
66
+ #
67
+ # Cookie Login
68
+ #
69
+ describe "Logging in by cookie" do
70
+ def set_remember_token token, time
71
+ @<%= file_name %>[:remember_token] = token;
72
+ @<%= file_name %>[:remember_token_expires_at] = time
73
+ @<%= file_name %>.save!
74
+ end
75
+ before do
76
+ @<%= file_name %> = <%= class_name %>.find(:first);
77
+ set_remember_token 'hello!', 5.minutes.from_now
78
+ end
79
+ it 'logs in with cookie' do
80
+ stub!(:cookies).and_return({ :auth_token => 'hello!' })
81
+ logged_in?.should be_true
82
+ end
83
+
84
+ it 'fails cookie login with bad cookie' do
85
+ should_receive(:cookies).at_least(:once).and_return({ :auth_token => 'i_haxxor_joo' })
86
+ logged_in?.should_not be_true
87
+ end
88
+
89
+ it 'fails cookie login with no cookie' do
90
+ set_remember_token nil, nil
91
+ should_receive(:cookies).at_least(:once).and_return({ })
92
+ logged_in?.should_not be_true
93
+ end
94
+
95
+ it 'fails expired cookie login' do
96
+ set_remember_token 'hello!', 5.minutes.ago
97
+ stub!(:cookies).and_return({ :auth_token => 'hello!' })
98
+ logged_in?.should_not be_true
99
+ end
100
+ end
101
+
102
+ end
@@ -0,0 +1,139 @@
1
+ require File.dirname(__FILE__) + '<%= ('/..'*controller_class_nesting_depth) + '/../spec_helper' %>'
2
+
3
+ # Be sure to include AuthenticatedTestHelper in spec/spec_helper.rb instead
4
+ # Then, you can remove it from this and the units test.
5
+ include AuthenticatedTestHelper
6
+
7
+ describe <%= controller_class_name %>Controller do
8
+ fixtures :<%= table_name %>
9
+ before do
10
+ @<%= file_name %> = mock_<%= file_name %>
11
+ @login_params = { :login => 'quentin', :password => 'test' }
12
+ <%= class_name %>.stub!(:authenticate).with(@login_params[:login], @login_params[:password]).and_return(@<%= file_name %>)
13
+ end
14
+ def do_create
15
+ post :create, @login_params
16
+ end
17
+ describe "on successful login," do
18
+ [ [:nil, nil, nil],
19
+ [:expired, 'valid_token', 15.minutes.ago],
20
+ [:different, 'i_haxxor_joo', 15.minutes.from_now],
21
+ [:valid, 'valid_token', 15.minutes.from_now]
22
+ ].each do |has_request_token, token_value, token_expiry|
23
+ [ true, false ].each do |want_remember_me|
24
+ describe "my request cookie token is #{has_request_token.to_s}," do
25
+ describe "and ask #{want_remember_me ? 'to' : 'not to'} be remembered" do
26
+ before do
27
+ @ccookies = mock('cookies')
28
+ controller.stub!(:cookies).and_return(@ccookies)
29
+ @ccookies.stub!(:[]).with(:auth_token).and_return(token_value)
30
+ @ccookies.stub!(:delete).with(:auth_token)
31
+ @ccookies.stub!(:[]=)
32
+ @<%= file_name %>.stub!(:remember_me)
33
+ @<%= file_name %>.stub!(:refresh_token)
34
+ @<%= file_name %>.stub!(:forget_me)
35
+ @<%= file_name %>.stub!(:remember_token).and_return(token_value)
36
+ @<%= file_name %>.stub!(:remember_token_expires_at).and_return(token_expiry)
37
+ @<%= file_name %>.stub!(:remember_token?).and_return(has_request_token == :valid)
38
+ if want_remember_me
39
+ @login_params[:remember_me] = '1'
40
+ else
41
+ @login_params[:remember_me] = '0'
42
+ end
43
+ end
44
+ it "kills existing login" do controller.should_receive(:logout_keeping_session!); do_create; end
45
+ it "authorizes me" do do_create; controller.send(:authorized?).should be_true; end
46
+ it "logs me in" do do_create; controller.send(:logged_in?).should be_true end
47
+ it "greets me nicely" do do_create; response.flash[:notice].should =~ /success/i end
48
+ it "sets/resets/expires cookie" do controller.should_receive(:handle_remember_cookie!).with(want_remember_me); do_create end
49
+ it "sends a cookie" do controller.should_receive(:send_remember_cookie!); do_create end
50
+ it 'redirects to the home page' do do_create; response.should redirect_to('/') end
51
+ it "does not reset my session" do controller.should_not_receive(:reset_session).and_return nil; do_create end # change if you uncomment the reset_session path
52
+ if (has_request_token == :valid)
53
+ it 'does not make new token' do @<%= file_name %>.should_not_receive(:remember_me); do_create end
54
+ it 'does refresh token' do @<%= file_name %>.should_receive(:refresh_token); do_create end
55
+ it "sets an auth cookie" do do_create; end
56
+ else
57
+ if want_remember_me
58
+ it 'makes a new token' do @<%= file_name %>.should_receive(:remember_me); do_create end
59
+ it "does not refresh token" do @<%= file_name %>.should_not_receive(:refresh_token); do_create end
60
+ it "sets an auth cookie" do do_create; end
61
+ else
62
+ it 'does not make new token' do @<%= file_name %>.should_not_receive(:remember_me); do_create end
63
+ it 'does not refresh token' do @<%= file_name %>.should_not_receive(:refresh_token); do_create end
64
+ it 'kills user token' do @<%= file_name %>.should_receive(:forget_me); do_create end
65
+ end
66
+ end
67
+ end # inner describe
68
+ end
69
+ end
70
+ end
71
+ end
72
+
73
+ describe "on failed login" do
74
+ before do
75
+ <%= class_name %>.should_receive(:authenticate).with(anything(), anything()).and_return(nil)
76
+ login_as :quentin
77
+ end
78
+ it 'logs out keeping session' do controller.should_receive(:logout_keeping_session!); do_create end
79
+ it 'flashes an error' do do_create; flash[:error].should =~ /Couldn't log you in as 'quentin'/ end
80
+ it 'renders the log in page' do do_create; response.should render_template('new') end
81
+ it "doesn't log me in" do do_create; controller.send(:logged_in?).should == false end
82
+ it "doesn't send password back" do
83
+ @login_params[:password] = 'FROBNOZZ'
84
+ do_create
85
+ response.should_not have_text(/FROBNOZZ/i)
86
+ end
87
+ end
88
+
89
+ describe "on signout" do
90
+ def do_destroy
91
+ get :destroy
92
+ end
93
+ before do
94
+ login_as :quentin
95
+ end
96
+ it 'logs me out' do controller.should_receive(:logout_killing_session!); do_destroy end
97
+ it 'redirects me to the home page' do do_destroy; response.should be_redirect end
98
+ end
99
+
100
+ end
101
+
102
+ describe <%= controller_class_name %>Controller do
103
+ describe "route generation" do
104
+ it "should route the new <%= controller_controller_name %> action correctly" do
105
+ route_for(:controller => '<%= controller_controller_name %>', :action => 'new').should == "/login"
106
+ end
107
+ it "should route the create <%= controller_controller_name %> correctly" do
108
+ route_for(:controller => '<%= controller_controller_name %>', :action => 'create').should == "/<%= controller_routing_path %>"
109
+ end
110
+ it "should route the destroy <%= controller_controller_name %> action correctly" do
111
+ route_for(:controller => '<%= controller_controller_name %>', :action => 'destroy').should == "/logout"
112
+ end
113
+ end
114
+
115
+ describe "route recognition" do
116
+ it "should generate params from GET /login correctly" do
117
+ params_from(:get, '/login').should == {:controller => '<%= controller_controller_name %>', :action => 'new'}
118
+ end
119
+ it "should generate params from POST /<%= controller_routing_path %> correctly" do
120
+ params_from(:post, '/<%= controller_routing_path %>').should == {:controller => '<%= controller_controller_name %>', :action => 'create'}
121
+ end
122
+ it "should generate params from DELETE /<%= controller_routing_path %> correctly" do
123
+ params_from(:delete, '/logout').should == {:controller => '<%= controller_controller_name %>', :action => 'destroy'}
124
+ end
125
+ end
126
+
127
+ describe "named routing" do
128
+ before(:each) do
129
+ get :new
130
+ end
131
+ it "should route <%= controller_routing_name %>_path() correctly" do
132
+ <%= controller_routing_name %>_path().should == "/<%= controller_routing_path %>"
133
+ end
134
+ it "should route new_<%= controller_routing_name %>_path() correctly" do
135
+ new_<%= controller_routing_name %>_path().should == "/<%= controller_routing_path %>/new"
136
+ end
137
+ end
138
+
139
+ end
@@ -0,0 +1,198 @@
1
+ require File.dirname(__FILE__) + '<%= ('/..'*model_controller_class_nesting_depth) + '/../spec_helper' %>'
2
+
3
+ # Be sure to include AuthenticatedTestHelper in spec/spec_helper.rb instead
4
+ # Then, you can remove it from this and the units test.
5
+ include AuthenticatedTestHelper
6
+
7
+ describe <%= model_controller_class_name %>Controller do
8
+ fixtures :<%= table_name %>
9
+
10
+ it 'allows signup' do
11
+ lambda do
12
+ create_<%= file_name %>
13
+ response.should be_redirect
14
+ end.should change(<%= class_name %>, :count).by(1)
15
+ end
16
+
17
+ <% if options[:stateful] %>
18
+ it 'signs up user in pending state' do
19
+ create_<%= file_name %>
20
+ assigns(:<%= file_name %>).reload
21
+ assigns(:<%= file_name %>).should be_pending
22
+ end<% end %>
23
+
24
+ <% if options[:include_activation] -%>
25
+ it 'signs up user with activation code' do
26
+ create_<%= file_name %>
27
+ assigns(:<%= file_name %>).reload
28
+ assigns(:<%= file_name %>).activation_code.should_not be_nil
29
+ end<% end -%>
30
+
31
+ it 'requires login on signup' do
32
+ lambda do
33
+ create_<%= file_name %>(:login => nil)
34
+ assigns[:<%= file_name %>].errors.on(:login).should_not be_nil
35
+ response.should be_success
36
+ end.should_not change(<%= class_name %>, :count)
37
+ end
38
+
39
+ it 'requires password on signup' do
40
+ lambda do
41
+ create_<%= file_name %>(:password => nil)
42
+ assigns[:<%= file_name %>].errors.on(:password).should_not be_nil
43
+ response.should be_success
44
+ end.should_not change(<%= class_name %>, :count)
45
+ end
46
+
47
+ it 'requires password confirmation on signup' do
48
+ lambda do
49
+ create_<%= file_name %>(:password_confirmation => nil)
50
+ assigns[:<%= file_name %>].errors.on(:password_confirmation).should_not be_nil
51
+ response.should be_success
52
+ end.should_not change(<%= class_name %>, :count)
53
+ end
54
+
55
+ it 'requires email on signup' do
56
+ lambda do
57
+ create_<%= file_name %>(:email => nil)
58
+ assigns[:<%= file_name %>].errors.on(:email).should_not be_nil
59
+ response.should be_success
60
+ end.should_not change(<%= class_name %>, :count)
61
+ end
62
+
63
+ <% if options[:include_activation] %>
64
+ it 'activates user' do
65
+ <%= class_name %>.authenticate('aaron', 'monkey').should be_nil
66
+ get :activate, :activation_code => <%= table_name %>(:aaron).activation_code
67
+ response.should redirect_to('/login')
68
+ flash[:notice].should_not be_nil
69
+ flash[:error ].should be_nil
70
+ <%= class_name %>.authenticate('aaron', 'monkey').should == <%= table_name %>(:aaron)
71
+ end
72
+
73
+ it 'does not activate user without key' do
74
+ get :activate
75
+ flash[:notice].should be_nil
76
+ flash[:error ].should_not be_nil
77
+ end
78
+
79
+ it 'does not activate user with blank key' do
80
+ get :activate, :activation_code => ''
81
+ flash[:notice].should be_nil
82
+ flash[:error ].should_not be_nil
83
+ end
84
+
85
+ it 'does not activate user with bogus key' do
86
+ get :activate, :activation_code => 'i_haxxor_joo'
87
+ flash[:notice].should be_nil
88
+ flash[:error ].should_not be_nil
89
+ end<% end %>
90
+
91
+ def create_<%= file_name %>(options = {})
92
+ post :create, :<%= file_name %> => { :login => 'quire', :email => 'quire@example.com',
93
+ :password => 'quire69', :password_confirmation => 'quire69' }.merge(options)
94
+ end
95
+ end
96
+
97
+ describe <%= model_controller_class_name %>Controller do
98
+ describe "route generation" do
99
+ it "should route <%= model_controller_controller_name %>'s 'index' action correctly" do
100
+ route_for(:controller => '<%= model_controller_controller_name %>', :action => 'index').should == "/<%= model_controller_routing_path %>"
101
+ end
102
+
103
+ it "should route <%= model_controller_controller_name %>'s 'new' action correctly" do
104
+ route_for(:controller => '<%= model_controller_controller_name %>', :action => 'new').should == "/signup"
105
+ end
106
+
107
+ it "should route {:controller => '<%= model_controller_controller_name %>', :action => 'create'} correctly" do
108
+ route_for(:controller => '<%= model_controller_controller_name %>', :action => 'create').should == "/register"
109
+ end
110
+
111
+ it "should route <%= model_controller_controller_name %>'s 'show' action correctly" do
112
+ route_for(:controller => '<%= model_controller_controller_name %>', :action => 'show', :id => '1').should == "/<%= model_controller_routing_path %>/1"
113
+ end
114
+
115
+ it "should route <%= model_controller_controller_name %>'s 'edit' action correctly" do
116
+ route_for(:controller => '<%= model_controller_controller_name %>', :action => 'edit', :id => '1').should == "/<%= model_controller_routing_path %>/1/edit"
117
+ end
118
+
119
+ it "should route <%= model_controller_controller_name %>'s 'update' action correctly" do
120
+ route_for(:controller => '<%= model_controller_controller_name %>', :action => 'update', :id => '1').should == "/<%= model_controller_routing_path %>/1"
121
+ end
122
+
123
+ it "should route <%= model_controller_controller_name %>'s 'destroy' action correctly" do
124
+ route_for(:controller => '<%= model_controller_controller_name %>', :action => 'destroy', :id => '1').should == "/<%= model_controller_routing_path %>/1"
125
+ end
126
+ end
127
+
128
+ describe "route recognition" do
129
+ it "should generate params for <%= model_controller_controller_name %>'s index action from GET /<%= model_controller_routing_path %>" do
130
+ params_from(:get, '/<%= model_controller_routing_path %>').should == {:controller => '<%= model_controller_controller_name %>', :action => 'index'}
131
+ params_from(:get, '/<%= model_controller_routing_path %>.xml').should == {:controller => '<%= model_controller_controller_name %>', :action => 'index', :format => 'xml'}
132
+ params_from(:get, '/<%= model_controller_routing_path %>.json').should == {:controller => '<%= model_controller_controller_name %>', :action => 'index', :format => 'json'}
133
+ end
134
+
135
+ it "should generate params for <%= model_controller_controller_name %>'s new action from GET /<%= model_controller_routing_path %>" do
136
+ params_from(:get, '/<%= model_controller_routing_path %>/new').should == {:controller => '<%= model_controller_controller_name %>', :action => 'new'}
137
+ params_from(:get, '/<%= model_controller_routing_path %>/new.xml').should == {:controller => '<%= model_controller_controller_name %>', :action => 'new', :format => 'xml'}
138
+ params_from(:get, '/<%= model_controller_routing_path %>/new.json').should == {:controller => '<%= model_controller_controller_name %>', :action => 'new', :format => 'json'}
139
+ end
140
+
141
+ it "should generate params for <%= model_controller_controller_name %>'s create action from POST /<%= model_controller_routing_path %>" do
142
+ params_from(:post, '/<%= model_controller_routing_path %>').should == {:controller => '<%= model_controller_controller_name %>', :action => 'create'}
143
+ params_from(:post, '/<%= model_controller_routing_path %>.xml').should == {:controller => '<%= model_controller_controller_name %>', :action => 'create', :format => 'xml'}
144
+ params_from(:post, '/<%= model_controller_routing_path %>.json').should == {:controller => '<%= model_controller_controller_name %>', :action => 'create', :format => 'json'}
145
+ end
146
+
147
+ it "should generate params for <%= model_controller_controller_name %>'s show action from GET /<%= model_controller_routing_path %>/1" do
148
+ params_from(:get , '/<%= model_controller_routing_path %>/1').should == {:controller => '<%= model_controller_controller_name %>', :action => 'show', :id => '1'}
149
+ params_from(:get , '/<%= model_controller_routing_path %>/1.xml').should == {:controller => '<%= model_controller_controller_name %>', :action => 'show', :id => '1', :format => 'xml'}
150
+ params_from(:get , '/<%= model_controller_routing_path %>/1.json').should == {:controller => '<%= model_controller_controller_name %>', :action => 'show', :id => '1', :format => 'json'}
151
+ end
152
+
153
+ it "should generate params for <%= model_controller_controller_name %>'s edit action from GET /<%= model_controller_routing_path %>/1/edit" do
154
+ params_from(:get , '/<%= model_controller_routing_path %>/1/edit').should == {:controller => '<%= model_controller_controller_name %>', :action => 'edit', :id => '1'}
155
+ end
156
+
157
+ it "should generate params {:controller => '<%= model_controller_controller_name %>', :action => update', :id => '1'} from PUT /<%= model_controller_routing_path %>/1" do
158
+ params_from(:put , '/<%= model_controller_routing_path %>/1').should == {:controller => '<%= model_controller_controller_name %>', :action => 'update', :id => '1'}
159
+ params_from(:put , '/<%= model_controller_routing_path %>/1.xml').should == {:controller => '<%= model_controller_controller_name %>', :action => 'update', :id => '1', :format => 'xml'}
160
+ params_from(:put , '/<%= model_controller_routing_path %>/1.json').should == {:controller => '<%= model_controller_controller_name %>', :action => 'update', :id => '1', :format => 'json'}
161
+ end
162
+
163
+ it "should generate params for <%= model_controller_controller_name %>'s destroy action from DELETE /<%= model_controller_routing_path %>/1" do
164
+ params_from(:delete, '/<%= model_controller_routing_path %>/1').should == {:controller => '<%= model_controller_controller_name %>', :action => 'destroy', :id => '1'}
165
+ params_from(:delete, '/<%= model_controller_routing_path %>/1.xml').should == {:controller => '<%= model_controller_controller_name %>', :action => 'destroy', :id => '1', :format => 'xml'}
166
+ params_from(:delete, '/<%= model_controller_routing_path %>/1.json').should == {:controller => '<%= model_controller_controller_name %>', :action => 'destroy', :id => '1', :format => 'json'}
167
+ end
168
+ end
169
+
170
+ describe "named routing" do
171
+ before(:each) do
172
+ get :new
173
+ end
174
+
175
+ it "should route <%= model_controller_routing_name %>_path() to /<%= model_controller_routing_path %>" do
176
+ <%= model_controller_routing_name %>_path().should == "/<%= model_controller_routing_path %>"
177
+ formatted_<%= model_controller_routing_name %>_path(:format => 'xml').should == "/<%= model_controller_routing_path %>.xml"
178
+ formatted_<%= model_controller_routing_name %>_path(:format => 'json').should == "/<%= model_controller_routing_path %>.json"
179
+ end
180
+
181
+ it "should route new_<%= model_controller_routing_name.singularize %>_path() to /<%= model_controller_routing_path %>/new" do
182
+ new_<%= model_controller_routing_name.singularize %>_path().should == "/<%= model_controller_routing_path %>/new"
183
+ formatted_new_<%= model_controller_routing_name.singularize %>_path(:format => 'xml').should == "/<%= model_controller_routing_path %>/new.xml"
184
+ formatted_new_<%= model_controller_routing_name.singularize %>_path(:format => 'json').should == "/<%= model_controller_routing_path %>/new.json"
185
+ end
186
+
187
+ it "should route <%= model_controller_routing_name.singularize %>_(:id => '1') to /<%= model_controller_routing_path %>/1" do
188
+ <%= model_controller_routing_name.singularize %>_path(:id => '1').should == "/<%= model_controller_routing_path %>/1"
189
+ formatted_<%= model_controller_routing_name.singularize %>_path(:id => '1', :format => 'xml').should == "/<%= model_controller_routing_path %>/1.xml"
190
+ formatted_<%= model_controller_routing_name.singularize %>_path(:id => '1', :format => 'json').should == "/<%= model_controller_routing_path %>/1.json"
191
+ end
192
+
193
+ it "should route edit_<%= model_controller_routing_name.singularize %>_path(:id => '1') to /<%= model_controller_routing_path %>/1/edit" do
194
+ edit_<%= model_controller_routing_name.singularize %>_path(:id => '1').should == "/<%= model_controller_routing_path %>/1/edit"
195
+ end
196
+ end
197
+
198
+ end
@@ -0,0 +1,60 @@
1
+ <%
2
+ ## this code must match that in templates/model.rb
3
+ require 'digest/sha1'
4
+ def make_fake_token
5
+ @fake_token_counter ||= 0
6
+ @fake_token_counter += 1
7
+ Digest::SHA1.hexdigest(@fake_token_counter.to_s)
8
+ end
9
+ salts = (1..2).map{ make_fake_token }
10
+ passwds = salts.map{ |salt| password_digest('monkey', salt) }
11
+ -%>
12
+
13
+ quentin:
14
+ id: 1
15
+ login: quentin
16
+ email: quentin@example.com
17
+ salt: <%= salts[0] %> # SHA1('0')
18
+ crypted_password: <%= passwds[0] %> # 'monkey'
19
+ created_at: <%%= 5.days.ago.to_s :db %>
20
+ remember_token_expires_at: <%%= 1.days.from_now.to_s %>
21
+ remember_token: <%= make_fake_token %>
22
+ <% if options[:include_activation] -%>
23
+ activation_code:
24
+ activated_at: <%%= 5.days.ago.to_s :db %>
25
+ <% end -%>
26
+ <% if options[:stateful] -%>
27
+ state: active
28
+ <% end -%>
29
+
30
+ aaron:
31
+ id: 2
32
+ login: aaron
33
+ email: aaron@example.com
34
+ salt: <%= salts[1] %> # SHA1('1')
35
+ crypted_password: <%= passwds[1] %> # 'monkey'
36
+ created_at: <%%= 1.days.ago.to_s :db %>
37
+ remember_token_expires_at:
38
+ remember_token:
39
+ <% if options[:include_activation] -%>
40
+ activation_code: <%= make_fake_token %>
41
+ activated_at:
42
+ <% end -%>
43
+ <% if options[:stateful] %>
44
+ state: pending
45
+ <% end -%>
46
+
47
+
48
+ old_password_holder:
49
+ id: 3
50
+ login: old_password_holder
51
+ email: salty_dog@example.com
52
+ salt: 7e3041ebc2fc05a40c60028e2c4901a81035d3cd
53
+ crypted_password: 00742970dc9e6319f8019fd54864d3ea740f04b1 # test
54
+ created_at: <%%= 1.days.ago.to_s :db %>
55
+ <% if options[:include_activation] %>
56
+ activation_code:
57
+ activated_at: <%%= 5.days.ago.to_s :db %>
58
+ <% end %>
59
+ <% if options[:stateful] %>
60
+ state: active<% end %>