splendeo-generators 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. data/CHANGELOG +119 -0
  2. data/LICENSE +20 -0
  3. data/README.rdoc +98 -0
  4. data/Rakefile +12 -0
  5. data/lib/nifty_generators.rb +3 -0
  6. data/rails_generators/splendeo_authentication/USAGE +50 -0
  7. data/rails_generators/splendeo_authentication/lib/insert_commands.rb +74 -0
  8. data/rails_generators/splendeo_authentication/splendeo_authentication_generator.rb +128 -0
  9. data/rails_generators/splendeo_authentication/templates/authentication.rb +61 -0
  10. data/rails_generators/splendeo_authentication/templates/authlogic_session.rb +2 -0
  11. data/rails_generators/splendeo_authentication/templates/fixtures.yml +24 -0
  12. data/rails_generators/splendeo_authentication/templates/migration.rb +20 -0
  13. data/rails_generators/splendeo_authentication/templates/sessions_controller.rb +45 -0
  14. data/rails_generators/splendeo_authentication/templates/sessions_helper.rb +2 -0
  15. data/rails_generators/splendeo_authentication/templates/tests/rspec/sessions_controller.rb +39 -0
  16. data/rails_generators/splendeo_authentication/templates/tests/rspec/user.rb +83 -0
  17. data/rails_generators/splendeo_authentication/templates/tests/rspec/users_controller.rb +26 -0
  18. data/rails_generators/splendeo_authentication/templates/tests/shoulda/sessions_controller.rb +40 -0
  19. data/rails_generators/splendeo_authentication/templates/tests/shoulda/user.rb +85 -0
  20. data/rails_generators/splendeo_authentication/templates/tests/shoulda/users_controller.rb +27 -0
  21. data/rails_generators/splendeo_authentication/templates/tests/testunit/sessions_controller.rb +36 -0
  22. data/rails_generators/splendeo_authentication/templates/tests/testunit/user.rb +88 -0
  23. data/rails_generators/splendeo_authentication/templates/tests/testunit/users_controller.rb +23 -0
  24. data/rails_generators/splendeo_authentication/templates/user.rb +42 -0
  25. data/rails_generators/splendeo_authentication/templates/users_controller.rb +18 -0
  26. data/rails_generators/splendeo_authentication/templates/users_helper.rb +2 -0
  27. data/rails_generators/splendeo_authentication/templates/views/erb/login.html.erb +30 -0
  28. data/rails_generators/splendeo_authentication/templates/views/erb/signup.html.erb +24 -0
  29. data/rails_generators/splendeo_authentication/templates/views/haml/login.html.haml +30 -0
  30. data/rails_generators/splendeo_authentication/templates/views/haml/signup.html.haml +24 -0
  31. data/rails_generators/splendeo_config/USAGE +23 -0
  32. data/rails_generators/splendeo_config/splendeo_config_generator.rb +32 -0
  33. data/rails_generators/splendeo_config/templates/config.yml +8 -0
  34. data/rails_generators/splendeo_config/templates/load_config.rb +2 -0
  35. data/rails_generators/splendeo_layout/USAGE +25 -0
  36. data/rails_generators/splendeo_layout/splendeo_layout_generator.rb +76 -0
  37. data/rails_generators/splendeo_layout/templates/blueprint-sass/ie.sass +103 -0
  38. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/buttons/icons/cross.png +0 -0
  39. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/buttons/icons/key.png +0 -0
  40. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/buttons/icons/tick.png +0 -0
  41. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/buttons/readme.txt +32 -0
  42. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/buttons/screen.sass +104 -0
  43. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/fancy-type/readme.txt +14 -0
  44. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/fancy-type/screen.sass +34 -0
  45. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/link-icons/icons/doc.png +0 -0
  46. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/link-icons/icons/email.png +0 -0
  47. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/link-icons/icons/external.png +0 -0
  48. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/link-icons/icons/feed.png +0 -0
  49. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/link-icons/icons/im.png +0 -0
  50. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/link-icons/icons/pdf.png +0 -0
  51. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/link-icons/icons/visited.png +0 -0
  52. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/link-icons/icons/xls.png +0 -0
  53. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/link-icons/readme.txt +18 -0
  54. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/link-icons/screen.sass +50 -0
  55. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/rtl/readme.txt +10 -0
  56. data/rails_generators/splendeo_layout/templates/blueprint-sass/plugins/rtl/screen.sass +272 -0
  57. data/rails_generators/splendeo_layout/templates/blueprint-sass/print.sass +75 -0
  58. data/rails_generators/splendeo_layout/templates/blueprint-sass/screen.sass +1062 -0
  59. data/rails_generators/splendeo_layout/templates/blueprint/ie.css +35 -0
  60. data/rails_generators/splendeo_layout/templates/blueprint/plugins/buttons/icons/cross.png +0 -0
  61. data/rails_generators/splendeo_layout/templates/blueprint/plugins/buttons/icons/key.png +0 -0
  62. data/rails_generators/splendeo_layout/templates/blueprint/plugins/buttons/icons/tick.png +0 -0
  63. data/rails_generators/splendeo_layout/templates/blueprint/plugins/buttons/readme.txt +32 -0
  64. data/rails_generators/splendeo_layout/templates/blueprint/plugins/buttons/screen.css +97 -0
  65. data/rails_generators/splendeo_layout/templates/blueprint/plugins/fancy-type/readme.txt +14 -0
  66. data/rails_generators/splendeo_layout/templates/blueprint/plugins/fancy-type/screen.css +71 -0
  67. data/rails_generators/splendeo_layout/templates/blueprint/plugins/link-icons/icons/doc.png +0 -0
  68. data/rails_generators/splendeo_layout/templates/blueprint/plugins/link-icons/icons/email.png +0 -0
  69. data/rails_generators/splendeo_layout/templates/blueprint/plugins/link-icons/icons/external.png +0 -0
  70. data/rails_generators/splendeo_layout/templates/blueprint/plugins/link-icons/icons/feed.png +0 -0
  71. data/rails_generators/splendeo_layout/templates/blueprint/plugins/link-icons/icons/im.png +0 -0
  72. data/rails_generators/splendeo_layout/templates/blueprint/plugins/link-icons/icons/pdf.png +0 -0
  73. data/rails_generators/splendeo_layout/templates/blueprint/plugins/link-icons/icons/visited.png +0 -0
  74. data/rails_generators/splendeo_layout/templates/blueprint/plugins/link-icons/icons/xls.png +0 -0
  75. data/rails_generators/splendeo_layout/templates/blueprint/plugins/link-icons/readme.txt +18 -0
  76. data/rails_generators/splendeo_layout/templates/blueprint/plugins/link-icons/screen.css +40 -0
  77. data/rails_generators/splendeo_layout/templates/blueprint/plugins/rtl/readme.txt +10 -0
  78. data/rails_generators/splendeo_layout/templates/blueprint/plugins/rtl/screen.css +110 -0
  79. data/rails_generators/splendeo_layout/templates/blueprint/print.css +29 -0
  80. data/rails_generators/splendeo_layout/templates/blueprint/screen.css +258 -0
  81. data/rails_generators/splendeo_layout/templates/haml/init.rb +16 -0
  82. data/rails_generators/splendeo_layout/templates/helper.rb +22 -0
  83. data/rails_generators/splendeo_layout/templates/layout.html.erb +34 -0
  84. data/rails_generators/splendeo_layout/templates/layout.html.haml +31 -0
  85. data/rails_generators/splendeo_layout/templates/stylesheet.css +77 -0
  86. data/rails_generators/splendeo_layout/templates/stylesheet.sass +63 -0
  87. data/rails_generators/splendeo_scaffold/USAGE +51 -0
  88. data/rails_generators/splendeo_scaffold/splendeo_scaffold_generator.rb +232 -0
  89. data/rails_generators/splendeo_scaffold/templates/actions/create.rb +9 -0
  90. data/rails_generators/splendeo_scaffold/templates/actions/destroy.rb +6 -0
  91. data/rails_generators/splendeo_scaffold/templates/actions/edit.rb +3 -0
  92. data/rails_generators/splendeo_scaffold/templates/actions/index.rb +3 -0
  93. data/rails_generators/splendeo_scaffold/templates/actions/new.rb +3 -0
  94. data/rails_generators/splendeo_scaffold/templates/actions/show.rb +3 -0
  95. data/rails_generators/splendeo_scaffold/templates/actions/update.rb +9 -0
  96. data/rails_generators/splendeo_scaffold/templates/controller.rb +3 -0
  97. data/rails_generators/splendeo_scaffold/templates/fixtures.yml +9 -0
  98. data/rails_generators/splendeo_scaffold/templates/helper.rb +2 -0
  99. data/rails_generators/splendeo_scaffold/templates/migration.rb +16 -0
  100. data/rails_generators/splendeo_scaffold/templates/model.rb +3 -0
  101. data/rails_generators/splendeo_scaffold/templates/tests/rspec/actions/create.rb +11 -0
  102. data/rails_generators/splendeo_scaffold/templates/tests/rspec/actions/destroy.rb +6 -0
  103. data/rails_generators/splendeo_scaffold/templates/tests/rspec/actions/edit.rb +4 -0
  104. data/rails_generators/splendeo_scaffold/templates/tests/rspec/actions/index.rb +4 -0
  105. data/rails_generators/splendeo_scaffold/templates/tests/rspec/actions/new.rb +4 -0
  106. data/rails_generators/splendeo_scaffold/templates/tests/rspec/actions/show.rb +4 -0
  107. data/rails_generators/splendeo_scaffold/templates/tests/rspec/actions/update.rb +11 -0
  108. data/rails_generators/splendeo_scaffold/templates/tests/rspec/controller.rb +8 -0
  109. data/rails_generators/splendeo_scaffold/templates/tests/rspec/model.rb +7 -0
  110. data/rails_generators/splendeo_scaffold/templates/tests/shoulda/actions/create.rb +13 -0
  111. data/rails_generators/splendeo_scaffold/templates/tests/shoulda/actions/destroy.rb +8 -0
  112. data/rails_generators/splendeo_scaffold/templates/tests/shoulda/actions/edit.rb +6 -0
  113. data/rails_generators/splendeo_scaffold/templates/tests/shoulda/actions/index.rb +6 -0
  114. data/rails_generators/splendeo_scaffold/templates/tests/shoulda/actions/new.rb +6 -0
  115. data/rails_generators/splendeo_scaffold/templates/tests/shoulda/actions/show.rb +6 -0
  116. data/rails_generators/splendeo_scaffold/templates/tests/shoulda/actions/update.rb +13 -0
  117. data/rails_generators/splendeo_scaffold/templates/tests/shoulda/controller.rb +5 -0
  118. data/rails_generators/splendeo_scaffold/templates/tests/shoulda/model.rb +7 -0
  119. data/rails_generators/splendeo_scaffold/templates/tests/testunit/actions/create.rb +11 -0
  120. data/rails_generators/splendeo_scaffold/templates/tests/testunit/actions/destroy.rb +6 -0
  121. data/rails_generators/splendeo_scaffold/templates/tests/testunit/actions/edit.rb +4 -0
  122. data/rails_generators/splendeo_scaffold/templates/tests/testunit/actions/index.rb +4 -0
  123. data/rails_generators/splendeo_scaffold/templates/tests/testunit/actions/new.rb +4 -0
  124. data/rails_generators/splendeo_scaffold/templates/tests/testunit/actions/show.rb +4 -0
  125. data/rails_generators/splendeo_scaffold/templates/tests/testunit/actions/update.rb +11 -0
  126. data/rails_generators/splendeo_scaffold/templates/tests/testunit/controller.rb +5 -0
  127. data/rails_generators/splendeo_scaffold/templates/tests/testunit/model.rb +7 -0
  128. data/rails_generators/splendeo_scaffold/templates/views/erb/_form.html.erb +10 -0
  129. data/rails_generators/splendeo_scaffold/templates/views/erb/edit.html.erb +14 -0
  130. data/rails_generators/splendeo_scaffold/templates/views/erb/index.html.erb +29 -0
  131. data/rails_generators/splendeo_scaffold/templates/views/erb/new.html.erb +7 -0
  132. data/rails_generators/splendeo_scaffold/templates/views/erb/show.html.erb +20 -0
  133. data/rails_generators/splendeo_scaffold/templates/views/haml/_form.html.haml +10 -0
  134. data/rails_generators/splendeo_scaffold/templates/views/haml/edit.html.haml +14 -0
  135. data/rails_generators/splendeo_scaffold/templates/views/haml/index.html.haml +25 -0
  136. data/rails_generators/splendeo_scaffold/templates/views/haml/new.html.haml +7 -0
  137. data/rails_generators/splendeo_scaffold/templates/views/haml/show.html.haml +20 -0
  138. data/test/test_helper.rb +119 -0
  139. data/test/test_splendeo_authentication_generator.rb +274 -0
  140. data/test/test_splendeo_config_generator.rb +37 -0
  141. data/test/test_splendeo_layout_generator.rb +42 -0
  142. data/test/test_splendeo_scaffold_generator.rb +534 -0
  143. metadata +212 -0
@@ -0,0 +1,61 @@
1
+ # This module is included in your application controller which makes
2
+ # several methods available to all controllers and views. Here's a
3
+ # common example you might add to your application layout file.
4
+ #
5
+ # <%% if logged_in? %>
6
+ # Welcome <%%=h current_<%= user_singular_name %>.username %>! Not you?
7
+ # <%%= link_to "Log out", logout_path %>
8
+ # <%% else %>
9
+ # <%%= link_to "Sign up", signup_path %> or
10
+ # <%%= link_to "log in", login_path %>.
11
+ # <%% end %>
12
+ #
13
+ # You can also restrict unregistered users from accessing a controller using
14
+ # a before filter. For example.
15
+ #
16
+ # before_filter :login_required, :except => [:index, :show]
17
+ module Authentication
18
+ def self.included(controller)
19
+ controller.send :helper_method, :current_<%= user_singular_name %>, :logged_in?, :redirect_to_target_or_default
20
+ controller.filter_parameter_logging :password
21
+ end
22
+
23
+ <%- if options[:authlogic] -%>
24
+ def current_<%= session_singular_name %>
25
+ return @current_<%= session_singular_name %> if defined?(@current_<%= session_singular_name %>)
26
+ @current_<%= session_singular_name %> = <%= session_class_name %>.find
27
+ end
28
+
29
+ def current_<%= user_singular_name %>
30
+ return @current_<%= user_singular_name %> if defined?(@current_<%= user_singular_name %>)
31
+ @current_<%= user_singular_name %> = current_<%= session_singular_name %> && current_<%= session_singular_name %>.record
32
+ end
33
+ <%- else -%>
34
+ def current_<%= user_singular_name %>
35
+ @current_<%= user_singular_name %> ||= <%= user_class_name %>.find(session[:<%= user_singular_name %>_id]) if session[:<%= user_singular_name %>_id]
36
+ end
37
+ <%- end -%>
38
+
39
+ def logged_in?
40
+ current_<%= user_singular_name %>
41
+ end
42
+
43
+ def login_required
44
+ unless logged_in?
45
+ flash[:error] = "You must first log in or sign up before accessing this page."
46
+ store_target_location
47
+ redirect_to login_url
48
+ end
49
+ end
50
+
51
+ def redirect_to_target_or_default(default)
52
+ redirect_to(session[:return_to] || default)
53
+ session[:return_to] = nil
54
+ end
55
+
56
+ private
57
+
58
+ def store_target_location
59
+ session[:return_to] = request.request_uri
60
+ end
61
+ end
@@ -0,0 +1,2 @@
1
+ class <%= session_class_name %> < Authlogic::Session::Base
2
+ end
@@ -0,0 +1,24 @@
1
+ # password: "secret"
2
+ foo:
3
+ username: foo
4
+ email: foo@example.com
5
+ <%- if options[:authlogic] -%>
6
+ persistence_token: d5ddba13ed4408ea2b0a12ab18ed2d2eda086279736bdc121ca726a11f1e4b99217d9c534c2cc4ebb22729349c8c5fdbe1529e1f2c3c5859c62ef4dd9feea25c
7
+ crypted_password: 3d16c326648cccafe3d4b4cb024475c381dda92f430dfedf6f933e1f61203bacb6bae2437849bdb43b06be335e23790e4aa03902b3c28c3bbbbe27d501e521f3
8
+ password_salt: n6z_wtpWoIsHgQb5IcFd
9
+ <%- else -%>
10
+ password_hash: 3488f5f7efecab14b91eb96169e5e1ee518a569f
11
+ password_salt: bef65e058905c379436d80d1a32e7374b139e7b0
12
+ <%- end -%>
13
+
14
+ bar:
15
+ username: bar
16
+ email: bar@example.com
17
+ <%- if options[:authlogic] -%>
18
+ persistence_token: 19e074bd7cb506ab3e7e53e41f24f0ab3221c8cb68111f4c1aa43965114ad734233979a50a9463537487cdca18c279ac91c4bc83693d589625d446493322394c
19
+ crypted_password: 3bc9f4113ca645a186765df3d31a9352d0067bf2304ba0cdd6b08a7f3d58c6668ab1762fa3e76aef466ea2ff188399d8e6c40244fa59312bb4112292dac9f7f0
20
+ password_salt: UiAh9ejabnKRxqsiK0xO
21
+ <%- else -%>
22
+ password_hash: 3488f5f7efecab14b91eb96169e5e1ee518a569f
23
+ password_salt: bef65e058905c379436d80d1a32e7374b139e7b0
24
+ <%- end -%>
@@ -0,0 +1,20 @@
1
+ class Create<%= user_plural_class_name %> < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :<%= user_plural_name %> do |t|
4
+ t.string :username
5
+ t.string :email
6
+ <%- if options[:authlogic] -%>
7
+ t.string :persistence_token
8
+ t.string :crypted_password
9
+ <%- else -%>
10
+ t.string :password_hash
11
+ <%- end -%>
12
+ t.string :password_salt
13
+ t.timestamps
14
+ end
15
+ end
16
+
17
+ def self.down
18
+ drop_table :<%= user_plural_name %>
19
+ end
20
+ end
@@ -0,0 +1,45 @@
1
+ class <%= session_plural_class_name %>Controller < ApplicationController
2
+ <%- if options[:authlogic] -%>
3
+ def new
4
+ @<%= session_singular_name %> = <%= session_class_name %>.new
5
+ end
6
+
7
+ def create
8
+ @<%= session_singular_name %> = <%= session_class_name %>.new(params[:<%= session_singular_name %>])
9
+ if @<%= session_singular_name %>.save
10
+ flash[:notice] = "Logged in successfully."
11
+ redirect_to_target_or_default(root_url)
12
+ else
13
+ render :action => 'new'
14
+ end
15
+ end
16
+
17
+ def destroy
18
+ @<%= session_singular_name %> = <%= session_class_name %>.find
19
+ @<%= session_singular_name %>.destroy
20
+ flash[:notice] = "You have been logged out."
21
+ redirect_to root_url
22
+ end
23
+ <%- else -%>
24
+ def new
25
+ end
26
+
27
+ def create
28
+ <%= user_singular_name %> = <%= user_class_name %>.authenticate(params[:login], params[:password])
29
+ if <%= user_singular_name %>
30
+ session[:<%= user_singular_name %>_id] = <%= user_singular_name %>.id
31
+ flash[:notice] = "Logged in successfully."
32
+ redirect_to_target_or_default(root_url)
33
+ else
34
+ flash.now[:error] = "Invalid login or password."
35
+ render :action => 'new'
36
+ end
37
+ end
38
+
39
+ def destroy
40
+ session[:<%= user_singular_name %>_id] = nil
41
+ flash[:notice] = "You have been logged out."
42
+ redirect_to root_url
43
+ end
44
+ <%- end -%>
45
+ end
@@ -0,0 +1,2 @@
1
+ module <%= session_plural_class_name %>Helper
2
+ end
@@ -0,0 +1,39 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe <%= session_plural_class_name %>Controller do
4
+ fixtures :all
5
+ integrate_views
6
+
7
+ it "new action should render new template" do
8
+ get :new
9
+ response.should render_template(:new)
10
+ end
11
+
12
+ <%- if options[:authlogic] -%>
13
+ it "create action should render new template when authentication is invalid" do
14
+ post :create, :<%= session_singular_name %> => { :username => "foo", :password => "badpassword" }
15
+ response.should render_template(:new)
16
+ <%= session_class_name %>.find.should be_nil
17
+ end
18
+
19
+ it "create action should redirect when authentication is valid" do
20
+ post :create, :<%= session_singular_name %> => { :username => "foo", :password => "secret" }
21
+ response.should redirect_to(root_url)
22
+ <%= session_class_name %>.find.<%= user_singular_name %>.should == <%= user_plural_name %>(:foo)
23
+ end
24
+ <%- else -%>
25
+ it "create action should render new template when authentication is invalid" do
26
+ <%= user_class_name %>.stubs(:authenticate).returns(nil)
27
+ post :create
28
+ response.should render_template(:new)
29
+ session['<%= user_singular_name %>_id'].should be_nil
30
+ end
31
+
32
+ it "create action should redirect when authentication is valid" do
33
+ <%= user_class_name %>.stubs(:authenticate).returns(<%= user_class_name %>.first)
34
+ post :create
35
+ response.should redirect_to(root_url)
36
+ session['<%= user_singular_name %>_id'].should == <%= user_class_name %>.first.id
37
+ end
38
+ <%- end -%>
39
+ end
@@ -0,0 +1,83 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe <%= user_class_name %> do
4
+ <%- unless options[:authlogic] -%>
5
+ def new_<%= user_singular_name %>(attributes = {})
6
+ attributes[:username] ||= 'foo'
7
+ attributes[:email] ||= 'foo@example.com'
8
+ attributes[:password] ||= 'abc123'
9
+ attributes[:password_confirmation] ||= attributes[:password]
10
+ <%= user_class_name %>.new(attributes)
11
+ end
12
+
13
+ before(:each) do
14
+ <%= user_class_name %>.delete_all
15
+ end
16
+
17
+ it "should be valid" do
18
+ new_<%= user_singular_name %>.should be_valid
19
+ end
20
+
21
+ it "should require username" do
22
+ new_<%= user_singular_name %>(:username => '').should have(1).error_on(:username)
23
+ end
24
+
25
+ it "should require password" do
26
+ new_<%= user_singular_name %>(:password => '').should have(1).error_on(:password)
27
+ end
28
+
29
+ it "should require well formed email" do
30
+ new_<%= user_singular_name %>(:email => 'foo@bar@example.com').should have(1).error_on(:email)
31
+ end
32
+
33
+ it "should validate uniqueness of email" do
34
+ new_<%= user_singular_name %>(:email => 'bar@example.com').save!
35
+ new_<%= user_singular_name %>(:email => 'bar@example.com').should have(1).error_on(:email)
36
+ end
37
+
38
+ it "should validate uniqueness of username" do
39
+ new_<%= user_singular_name %>(:username => 'uniquename').save!
40
+ new_<%= user_singular_name %>(:username => 'uniquename').should have(1).error_on(:username)
41
+ end
42
+
43
+ it "should not allow odd characters in username" do
44
+ new_<%= user_singular_name %>(:username => 'odd ^&(@)').should have(1).error_on(:username)
45
+ end
46
+
47
+ it "should validate password is longer than 3 characters" do
48
+ new_<%= user_singular_name %>(:password => 'bad').should have(1).error_on(:password)
49
+ end
50
+
51
+ it "should require matching password confirmation" do
52
+ new_<%= user_singular_name %>(:password_confirmation => 'nonmatching').should have(1).error_on(:password)
53
+ end
54
+
55
+ it "should generate password hash and salt on create" do
56
+ <%= user_singular_name %> = new_<%= user_singular_name %>
57
+ <%= user_singular_name %>.save!
58
+ <%= user_singular_name %>.password_hash.should_not be_nil
59
+ <%= user_singular_name %>.password_salt.should_not be_nil
60
+ end
61
+
62
+ it "should authenticate by username" do
63
+ <%= user_singular_name %> = new_<%= user_singular_name %>(:username => 'foobar', :password => 'secret')
64
+ <%= user_singular_name %>.save!
65
+ <%= user_class_name %>.authenticate('foobar', 'secret').should == <%= user_singular_name %>
66
+ end
67
+
68
+ it "should authenticate by email" do
69
+ <%= user_singular_name %> = new_<%= user_singular_name %>(:email => 'foo@bar.com', :password => 'secret')
70
+ <%= user_singular_name %>.save!
71
+ <%= user_class_name %>.authenticate('foo@bar.com', 'secret').should == <%= user_singular_name %>
72
+ end
73
+
74
+ it "should not authenticate bad username" do
75
+ <%= user_class_name %>.authenticate('nonexisting', 'secret').should be_nil
76
+ end
77
+
78
+ it "should not authenticate bad password" do
79
+ new_<%= user_singular_name %>(:username => 'foobar', :password => 'secret').save!
80
+ <%= user_class_name %>.authenticate('foobar', 'badpassword').should be_nil
81
+ end
82
+ <%- end -%>
83
+ end
@@ -0,0 +1,26 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe <%= user_plural_class_name %>Controller do
4
+ fixtures :all
5
+ integrate_views
6
+
7
+ it "new action should render new template" do
8
+ get :new
9
+ response.should render_template(:new)
10
+ end
11
+
12
+ it "create action should render new template when model is invalid" do
13
+ <%= user_class_name %>.any_instance.stubs(:valid?).returns(false)
14
+ post :create
15
+ response.should render_template(:new)
16
+ end
17
+
18
+ it "create action should redirect when model is valid" do
19
+ <%= user_class_name %>.any_instance.stubs(:valid?).returns(true)
20
+ post :create
21
+ response.should redirect_to(root_url)
22
+ <%- unless options[:authlogic] -%>
23
+ session['<%= user_singular_name %>_id'].should == assigns['<%= user_singular_name %>'].id
24
+ <%- end -%>
25
+ end
26
+ end
@@ -0,0 +1,40 @@
1
+ require 'test_helper'
2
+
3
+ class <%= session_plural_class_name %>ControllerTest < ActionController::TestCase
4
+ context "new action" do
5
+ should "render new template" do
6
+ get :new
7
+ assert_template 'new'
8
+ end
9
+ end
10
+
11
+ context "create action" do
12
+ <%- if options[:authlogic] -%>
13
+ should "render new template when authentication is invalid" do
14
+ post :create, :<%= session_singular_name %> => { :username => "foo", :password => "badpassword" }
15
+ assert_template 'new'
16
+ assert_nil <%= session_class_name %>.find
17
+ end
18
+
19
+ should "redirect when authentication is valid" do
20
+ post :create, :<%= session_singular_name %> => { :username => "foo", :password => "secret" }
21
+ assert_redirected_to root_url
22
+ assert_equal <%= user_plural_name %>(:foo), <%= session_class_name %>.find.<%= user_singular_name %>
23
+ end
24
+ <%- else -%>
25
+ should "render new template when authentication is invalid" do
26
+ <%= user_class_name %>.stubs(:authenticate).returns(nil)
27
+ post :create
28
+ assert_template 'new'
29
+ assert_nil session['<%= user_singular_name %>_id']
30
+ end
31
+
32
+ should "redirect when authentication is valid" do
33
+ <%= user_class_name %>.stubs(:authenticate).returns(<%= user_class_name %>.first)
34
+ post :create
35
+ assert_redirected_to root_url
36
+ assert_equal <%= user_class_name %>.first.id, session['<%= user_singular_name %>_id']
37
+ end
38
+ <%- end -%>
39
+ end
40
+ end
@@ -0,0 +1,85 @@
1
+ require 'test_helper'
2
+
3
+ class <%= user_class_name %>Test < ActiveSupport::TestCase
4
+ <%- unless options[:authlogic] -%>
5
+ def new_<%= user_singular_name %>(attributes = {})
6
+ attributes[:username] ||= 'foo'
7
+ attributes[:email] ||= 'foo@example.com'
8
+ attributes[:password] ||= 'abc123'
9
+ attributes[:password_confirmation] ||= attributes[:password]
10
+ <%= user_singular_name %> = <%= user_class_name %>.new(attributes)
11
+ <%= user_singular_name %>.valid? # run validations
12
+ <%= user_singular_name %>
13
+ end
14
+
15
+ def setup
16
+ <%= user_class_name %>.delete_all
17
+ end
18
+
19
+ should "be valid" do
20
+ assert new_<%= user_singular_name %>.valid?
21
+ end
22
+
23
+ should "require username" do
24
+ assert new_<%= user_singular_name %>(:username => '').errors.on(:username)
25
+ end
26
+
27
+ should "require password" do
28
+ assert new_<%= user_singular_name %>(:password => '').errors.on(:password)
29
+ end
30
+
31
+ should "require well formed email" do
32
+ assert new_<%= user_singular_name %>(:email => 'foo@bar@example.com').errors.on(:email)
33
+ end
34
+
35
+ should "validate uniqueness of email" do
36
+ new_<%= user_singular_name %>(:email => 'bar@example.com').save!
37
+ assert new_<%= user_singular_name %>(:email => 'bar@example.com').errors.on(:email)
38
+ end
39
+
40
+ should "validate uniqueness of username" do
41
+ new_<%= user_singular_name %>(:username => 'uniquename').save!
42
+ assert new_<%= user_singular_name %>(:username => 'uniquename').errors.on(:username)
43
+ end
44
+
45
+ should "not allow odd characters in username" do
46
+ assert new_<%= user_singular_name %>(:username => 'odd ^&(@)').errors.on(:username)
47
+ end
48
+
49
+ should "validate password is longer than 3 characters" do
50
+ assert new_<%= user_singular_name %>(:password => 'bad').errors.on(:password)
51
+ end
52
+
53
+ should "require matching password confirmation" do
54
+ assert new_<%= user_singular_name %>(:password_confirmation => 'nonmatching').errors.on(:password)
55
+ end
56
+
57
+ should "generate password hash and salt on create" do
58
+ <%= user_singular_name %> = new_<%= user_singular_name %>
59
+ <%= user_singular_name %>.save!
60
+ assert <%= user_singular_name %>.password_hash
61
+ assert <%= user_singular_name %>.password_salt
62
+ end
63
+
64
+ should "authenticate by username" do
65
+ <%= user_singular_name %> = new_<%= user_singular_name %>(:username => 'foobar', :password => 'secret')
66
+ <%= user_singular_name %>.save!
67
+ assert_equal <%= user_singular_name %>, <%= user_class_name %>.authenticate('foobar', 'secret')
68
+ end
69
+
70
+ should "authenticate by email" do
71
+ <%= user_singular_name %> = new_<%= user_singular_name %>(:email => 'foo@bar.com', :password => 'secret')
72
+ <%= user_singular_name %>.save!
73
+ assert_equal <%= user_singular_name %>, <%= user_class_name %>.authenticate('foo@bar.com', 'secret')
74
+ end
75
+
76
+ should "not authenticate bad username" do
77
+ assert_nil <%= user_class_name %>.authenticate('nonexisting', 'secret')
78
+ end
79
+
80
+ should "not authenticate bad password" do
81
+ new_<%= user_singular_name %>(:username => 'foobar', :password => 'secret').save!
82
+ assert_nil <%= user_class_name %>.authenticate('foobar', 'badpassword')
83
+ end
84
+ <%- end -%>
85
+ end
@@ -0,0 +1,27 @@
1
+ require 'test_helper'
2
+
3
+ class <%= user_plural_class_name %>ControllerTest < ActionController::TestCase
4
+ context "new action" do
5
+ should "render new template" do
6
+ get :new
7
+ assert_template 'new'
8
+ end
9
+ end
10
+
11
+ context "create action" do
12
+ should "render new template when model is invalid" do
13
+ <%= user_class_name %>.any_instance.stubs(:valid?).returns(false)
14
+ post :create
15
+ assert_template 'new'
16
+ end
17
+
18
+ should "redirect when model is valid" do
19
+ <%= user_class_name %>.any_instance.stubs(:valid?).returns(true)
20
+ post :create
21
+ assert_redirected_to root_url
22
+ <%- unless options[:authlogic] -%>
23
+ assert_equal assigns['<%= user_singular_name %>'].id, session['<%= user_singular_name %>_id']
24
+ <%- end -%>
25
+ end
26
+ end
27
+ end