ghart-nifty-generators 0.3.0.1

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 (153) hide show
  1. data/CHANGELOG +105 -0
  2. data/LICENSE +20 -0
  3. data/README.rdoc +107 -0
  4. data/Rakefile +15 -0
  5. data/TODO +7 -0
  6. data/lib/nifty_generators.rb +3 -0
  7. data/nifty-generators.gemspec +31 -0
  8. data/rails_generators/nifty_admin_scaffold/USAGE +51 -0
  9. data/rails_generators/nifty_admin_scaffold/lib/insert_commands.rb +31 -0
  10. data/rails_generators/nifty_admin_scaffold/nifty_admin_scaffold_generator.rb +238 -0
  11. data/rails_generators/nifty_admin_scaffold/templates/actions/create.rb +8 -0
  12. data/rails_generators/nifty_admin_scaffold/templates/actions/destroy.rb +5 -0
  13. data/rails_generators/nifty_admin_scaffold/templates/actions/edit.rb +3 -0
  14. data/rails_generators/nifty_admin_scaffold/templates/actions/index.rb +3 -0
  15. data/rails_generators/nifty_admin_scaffold/templates/actions/new.rb +3 -0
  16. data/rails_generators/nifty_admin_scaffold/templates/actions/show.rb +3 -0
  17. data/rails_generators/nifty_admin_scaffold/templates/actions/update.rb +8 -0
  18. data/rails_generators/nifty_admin_scaffold/templates/controller.rb +5 -0
  19. data/rails_generators/nifty_admin_scaffold/templates/fixtures.yml +9 -0
  20. data/rails_generators/nifty_admin_scaffold/templates/helper.rb +2 -0
  21. data/rails_generators/nifty_admin_scaffold/templates/migration.rb +16 -0
  22. data/rails_generators/nifty_admin_scaffold/templates/model.rb +3 -0
  23. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/actions/create.rb +11 -0
  24. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/actions/destroy.rb +6 -0
  25. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/actions/edit.rb +4 -0
  26. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/actions/index.rb +4 -0
  27. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/actions/new.rb +4 -0
  28. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/actions/show.rb +4 -0
  29. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/actions/update.rb +11 -0
  30. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/controller.rb +8 -0
  31. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/model.rb +7 -0
  32. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/actions/create.rb +13 -0
  33. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/actions/destroy.rb +8 -0
  34. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/actions/edit.rb +6 -0
  35. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/actions/index.rb +6 -0
  36. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/actions/new.rb +6 -0
  37. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/actions/show.rb +6 -0
  38. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/actions/update.rb +13 -0
  39. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/controller.rb +5 -0
  40. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/model.rb +7 -0
  41. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/actions/create.rb +11 -0
  42. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/actions/destroy.rb +6 -0
  43. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/actions/edit.rb +4 -0
  44. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/actions/index.rb +4 -0
  45. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/actions/new.rb +4 -0
  46. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/actions/show.rb +4 -0
  47. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/actions/update.rb +11 -0
  48. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/controller.rb +5 -0
  49. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/model.rb +7 -0
  50. data/rails_generators/nifty_admin_scaffold/templates/views/erb/_form.html.erb +10 -0
  51. data/rails_generators/nifty_admin_scaffold/templates/views/erb/edit.html.erb +3 -0
  52. data/rails_generators/nifty_admin_scaffold/templates/views/erb/index.html.erb +29 -0
  53. data/rails_generators/nifty_admin_scaffold/templates/views/erb/new.html.erb +3 -0
  54. data/rails_generators/nifty_admin_scaffold/templates/views/erb/show.html.erb +14 -0
  55. data/rails_generators/nifty_admin_scaffold/templates/views/haml/_form.html.haml +10 -0
  56. data/rails_generators/nifty_admin_scaffold/templates/views/haml/edit.html.haml +14 -0
  57. data/rails_generators/nifty_admin_scaffold/templates/views/haml/index.html.haml +26 -0
  58. data/rails_generators/nifty_admin_scaffold/templates/views/haml/new.html.haml +7 -0
  59. data/rails_generators/nifty_admin_scaffold/templates/views/haml/show.html.haml +12 -0
  60. data/rails_generators/nifty_authentication/USAGE +50 -0
  61. data/rails_generators/nifty_authentication/lib/insert_commands.rb +74 -0
  62. data/rails_generators/nifty_authentication/nifty_authentication_generator.rb +128 -0
  63. data/rails_generators/nifty_authentication/templates/authentication.rb +61 -0
  64. data/rails_generators/nifty_authentication/templates/authlogic_session.rb +2 -0
  65. data/rails_generators/nifty_authentication/templates/fixtures.yml +24 -0
  66. data/rails_generators/nifty_authentication/templates/migration.rb +20 -0
  67. data/rails_generators/nifty_authentication/templates/sessions_controller.rb +45 -0
  68. data/rails_generators/nifty_authentication/templates/sessions_helper.rb +2 -0
  69. data/rails_generators/nifty_authentication/templates/tests/rspec/sessions_controller.rb +39 -0
  70. data/rails_generators/nifty_authentication/templates/tests/rspec/user.rb +83 -0
  71. data/rails_generators/nifty_authentication/templates/tests/rspec/users_controller.rb +26 -0
  72. data/rails_generators/nifty_authentication/templates/tests/shoulda/sessions_controller.rb +40 -0
  73. data/rails_generators/nifty_authentication/templates/tests/shoulda/user.rb +85 -0
  74. data/rails_generators/nifty_authentication/templates/tests/shoulda/users_controller.rb +27 -0
  75. data/rails_generators/nifty_authentication/templates/tests/testunit/sessions_controller.rb +36 -0
  76. data/rails_generators/nifty_authentication/templates/tests/testunit/user.rb +88 -0
  77. data/rails_generators/nifty_authentication/templates/tests/testunit/users_controller.rb +23 -0
  78. data/rails_generators/nifty_authentication/templates/user.rb +42 -0
  79. data/rails_generators/nifty_authentication/templates/users_controller.rb +18 -0
  80. data/rails_generators/nifty_authentication/templates/users_helper.rb +2 -0
  81. data/rails_generators/nifty_authentication/templates/views/erb/login.html.erb +30 -0
  82. data/rails_generators/nifty_authentication/templates/views/erb/signup.html.erb +24 -0
  83. data/rails_generators/nifty_authentication/templates/views/haml/login.html.haml +30 -0
  84. data/rails_generators/nifty_authentication/templates/views/haml/signup.html.haml +24 -0
  85. data/rails_generators/nifty_config/USAGE +23 -0
  86. data/rails_generators/nifty_config/nifty_config_generator.rb +32 -0
  87. data/rails_generators/nifty_config/templates/config.yml +8 -0
  88. data/rails_generators/nifty_config/templates/load_config.rb +2 -0
  89. data/rails_generators/nifty_layout/USAGE +25 -0
  90. data/rails_generators/nifty_layout/lib/insert_commands.rb +43 -0
  91. data/rails_generators/nifty_layout/nifty_layout_generator.rb +55 -0
  92. data/rails_generators/nifty_layout/templates/helper.rb +22 -0
  93. data/rails_generators/nifty_layout/templates/layout.html.haml +26 -0
  94. data/rails_generators/nifty_layout/templates/stylesheet.sass +67 -0
  95. data/rails_generators/nifty_scaffold/USAGE +51 -0
  96. data/rails_generators/nifty_scaffold/nifty_scaffold_generator.rb +237 -0
  97. data/rails_generators/nifty_scaffold/templates/actions/create.rb +9 -0
  98. data/rails_generators/nifty_scaffold/templates/actions/destroy.rb +6 -0
  99. data/rails_generators/nifty_scaffold/templates/actions/edit.rb +3 -0
  100. data/rails_generators/nifty_scaffold/templates/actions/index.rb +3 -0
  101. data/rails_generators/nifty_scaffold/templates/actions/new.rb +3 -0
  102. data/rails_generators/nifty_scaffold/templates/actions/show.rb +3 -0
  103. data/rails_generators/nifty_scaffold/templates/actions/update.rb +9 -0
  104. data/rails_generators/nifty_scaffold/templates/controller.rb +3 -0
  105. data/rails_generators/nifty_scaffold/templates/fixtures.yml +9 -0
  106. data/rails_generators/nifty_scaffold/templates/helper.rb +2 -0
  107. data/rails_generators/nifty_scaffold/templates/migration.rb +16 -0
  108. data/rails_generators/nifty_scaffold/templates/model.rb +3 -0
  109. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/create.rb +11 -0
  110. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/destroy.rb +6 -0
  111. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/edit.rb +4 -0
  112. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/index.rb +4 -0
  113. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/new.rb +4 -0
  114. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/show.rb +4 -0
  115. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/update.rb +11 -0
  116. data/rails_generators/nifty_scaffold/templates/tests/rspec/controller.rb +8 -0
  117. data/rails_generators/nifty_scaffold/templates/tests/rspec/model.rb +7 -0
  118. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/create.rb +13 -0
  119. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/destroy.rb +8 -0
  120. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/edit.rb +6 -0
  121. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/index.rb +6 -0
  122. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/new.rb +6 -0
  123. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/show.rb +6 -0
  124. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/update.rb +13 -0
  125. data/rails_generators/nifty_scaffold/templates/tests/shoulda/controller.rb +5 -0
  126. data/rails_generators/nifty_scaffold/templates/tests/shoulda/model.rb +7 -0
  127. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/create.rb +11 -0
  128. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/destroy.rb +6 -0
  129. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/edit.rb +4 -0
  130. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/index.rb +4 -0
  131. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/new.rb +4 -0
  132. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/show.rb +4 -0
  133. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/update.rb +11 -0
  134. data/rails_generators/nifty_scaffold/templates/tests/testunit/controller.rb +5 -0
  135. data/rails_generators/nifty_scaffold/templates/tests/testunit/model.rb +7 -0
  136. data/rails_generators/nifty_scaffold/templates/views/erb/_form.html.erb +10 -0
  137. data/rails_generators/nifty_scaffold/templates/views/erb/edit.html.erb +14 -0
  138. data/rails_generators/nifty_scaffold/templates/views/erb/index.html.erb +29 -0
  139. data/rails_generators/nifty_scaffold/templates/views/erb/new.html.erb +7 -0
  140. data/rails_generators/nifty_scaffold/templates/views/erb/show.html.erb +20 -0
  141. data/rails_generators/nifty_scaffold/templates/views/haml/_form.html.haml +10 -0
  142. data/rails_generators/nifty_scaffold/templates/views/haml/edit.html.haml +14 -0
  143. data/rails_generators/nifty_scaffold/templates/views/haml/index.html.haml +25 -0
  144. data/rails_generators/nifty_scaffold/templates/views/haml/new.html.haml +7 -0
  145. data/rails_generators/nifty_scaffold/templates/views/haml/show.html.haml +20 -0
  146. data/tasks/deployment.rake +2 -0
  147. data/test/test_helper.rb +117 -0
  148. data/test/test_nifty_admin_scaffold_generator.rb +538 -0
  149. data/test/test_nifty_authentication_generator.rb +236 -0
  150. data/test/test_nifty_config_generator.rb +37 -0
  151. data/test/test_nifty_layout_generator.rb +47 -0
  152. data/test/test_nifty_scaffold_generator.rb +538 -0
  153. metadata +222 -0
@@ -0,0 +1,7 @@
1
+ - title "Add <%= singular_name.titleize %>"
2
+
3
+ <%= render_form %>
4
+
5
+ <%- if action? :index -%>
6
+ %p= link_to "Back to List", admin_<%= plural_name %>_path
7
+ <%- end -%>
@@ -0,0 +1,12 @@
1
+ - title "<%= singular_name.titleize %>"
2
+
3
+ <%- for attribute in attributes -%>
4
+ %p
5
+ %strong <%= attribute.column.human_name.titleize %>:
6
+ =h @<%= singular_name %>.<%= attribute.name %>
7
+ <%- end -%>
8
+
9
+ %p
10
+ <%- if action? :index -%>
11
+ = link_to "View All", admin_<%= plural_name %>_path
12
+ <%- end -%>
@@ -0,0 +1,50 @@
1
+ Description:
2
+ Generates a user model, users controller, and sessions controller. The
3
+ users controller handles the registration and the sessions controller
4
+ handles authentication. This is similar to restful_authentication, but
5
+ simpler.
6
+
7
+ IMPORTANT: This generator uses the "title" helper method which is generated
8
+ by the nifty_layout generator. You may want to run that generator first.
9
+
10
+ Usage:
11
+ If you do not pass any arguments, the model name will default to "user", and
12
+ the authentication controller will default to "session". You can override
13
+ each of these respectively by passing one or two arguments. Either name can
14
+ be CamelCased or under_scored.
15
+
16
+ Make sure to setup the authlogic gem if you are using that option.
17
+
18
+ config.gem "authlogic"
19
+
20
+ Examples:
21
+ script/generate nifty_authentication
22
+
23
+ Creates user model, users_controller, and sessions_controller.
24
+
25
+ script/generate nifty_authentication account
26
+
27
+ Creates account model, accounts_controller, and sessions_controller.
28
+
29
+ script/generate nifty_authentication Account UserSession
30
+
31
+ Creates account model, accounts_controller, and user_sessions_controller.
32
+
33
+ Methods:
34
+ There are several methods generated which you can use in your application.
35
+ Here's a common example of what you might add to your layout.
36
+
37
+ <% if logged_in? %>
38
+ Welcome <%= current_user.username %>! Not you?
39
+ <%= link_to "Log out", logout_path %>
40
+ <% else %>
41
+ <%= link_to "Sign up", signup_path %> or
42
+ <%= link_to "log in", login_path %>.
43
+ <% end %>
44
+
45
+ You can also restrict unregistered users from accessing a controller using
46
+ a before filter. For example.
47
+
48
+ before_filter :login_required, :except => [:index, :show]
49
+
50
+ See the generated file lib/authentication.rb for details.
@@ -0,0 +1,74 @@
1
+ Rails::Generator::Commands::Create.class_eval do
2
+ def route_resource(*resources)
3
+ resource_list = resources.map { |r| r.to_sym.inspect }.join(', ')
4
+ sentinel = 'ActionController::Routing::Routes.draw do |map|'
5
+
6
+ logger.route "map.resource #{resource_list}"
7
+ unless options[:pretend]
8
+ gsub_file 'config/routes.rb', /(#{Regexp.escape(sentinel)})/mi do |match|
9
+ "#{match}\n map.resource #{resource_list}\n"
10
+ end
11
+ end
12
+ end
13
+
14
+ def route_name(name, path, route_options = {})
15
+ sentinel = 'ActionController::Routing::Routes.draw do |map|'
16
+
17
+ logger.route "map.#{name} '#{path}', :controller => '#{route_options[:controller]}', :action => '#{route_options[:action]}'"
18
+ unless options[:pretend]
19
+ gsub_file 'config/routes.rb', /(#{Regexp.escape(sentinel)})/mi do |match|
20
+ "#{match}\n map.#{name} '#{path}', :controller => '#{route_options[:controller]}', :action => '#{route_options[:action]}'"
21
+ end
22
+ end
23
+ end
24
+
25
+ def insert_into(file, line)
26
+ logger.insert "#{line} into #{file}"
27
+ unless options[:pretend]
28
+ gsub_file file, /^(class|module) .+$/ do |match|
29
+ "#{match}\n #{line}"
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ Rails::Generator::Commands::Destroy.class_eval do
36
+ def route_resource(*resources)
37
+ resource_list = resources.map { |r| r.to_sym.inspect }.join(', ')
38
+ look_for = "\n map.resource #{resource_list}\n"
39
+ logger.route "map.resource #{resource_list}"
40
+ unless options[:pretend]
41
+ gsub_file 'config/routes.rb', /(#{look_for})/mi, ''
42
+ end
43
+ end
44
+
45
+ def route_name(name, path, route_options = {})
46
+ look_for = "\n map.#{name} '#{path}', :controller => '#{route_options[:controller]}', :action => '#{route_options[:action]}'"
47
+ logger.route "map.#{name} '#{path}', :controller => '#{route_options[:controller]}', :action => '#{route_options[:action]}'"
48
+ unless options[:pretend]
49
+ gsub_file 'config/routes.rb', /(#{look_for})/mi, ''
50
+ end
51
+ end
52
+
53
+ def insert_into(file, line)
54
+ logger.remove "#{line} from #{file}"
55
+ unless options[:pretend]
56
+ gsub_file file, "\n #{line}", ''
57
+ end
58
+ end
59
+ end
60
+
61
+ Rails::Generator::Commands::List.class_eval do
62
+ def route_resource(*resources)
63
+ resource_list = resources.map { |r| r.to_sym.inspect }.join(', ')
64
+ logger.route "map.resource #{resource_list}"
65
+ end
66
+
67
+ def route_name(name, path, options = {})
68
+ logger.route "map.#{name} '#{path}', :controller => '{options[:controller]}', :action => '#{options[:action]}'"
69
+ end
70
+
71
+ def insert_into(file, line)
72
+ logger.insert "#{line} into #{file}"
73
+ end
74
+ end
@@ -0,0 +1,128 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/lib/insert_commands.rb")
2
+ class NiftyAuthenticationGenerator < Rails::Generator::Base
3
+ attr_accessor :user_name, :session_name
4
+
5
+ def initialize(runtime_args, runtime_options = {})
6
+ super
7
+
8
+ @user_name = @args[0] || 'user'
9
+ @session_name = @args[1] || (options[:authlogic] ? @user_name + '_session' : 'session')
10
+ end
11
+
12
+ def manifest
13
+ record do |m|
14
+ m.directory "app/models"
15
+ m.directory "app/controllers"
16
+ m.directory "app/helpers"
17
+ m.directory "app/views"
18
+ m.directory "lib"
19
+
20
+ m.directory "app/views/#{user_plural_name}"
21
+ m.template "user.rb", "app/models/#{user_singular_name}.rb"
22
+ m.template "authlogic_session.rb", "app/models/#{user_singular_name}_session.rb" if options[:authlogic]
23
+ m.template "users_controller.rb", "app/controllers/#{user_plural_name}_controller.rb"
24
+ m.template "users_helper.rb", "app/helpers/#{user_plural_name}_helper.rb"
25
+ m.template "views/#{view_language}/signup.html.#{view_language}", "app/views/#{user_plural_name}/new.html.#{view_language}"
26
+
27
+ m.directory "app/views/#{session_plural_name}"
28
+ m.template "sessions_controller.rb", "app/controllers/#{session_plural_name}_controller.rb"
29
+ m.template "sessions_helper.rb", "app/helpers/#{session_plural_name}_helper.rb"
30
+ m.template "views/#{view_language}/login.html.#{view_language}", "app/views/#{session_plural_name}/new.html.#{view_language}"
31
+
32
+ m.template "authentication.rb", "lib/authentication.rb"
33
+ m.migration_template "migration.rb", "db/migrate", :migration_file_name => "create_#{user_plural_name}"
34
+
35
+ m.route_resources user_plural_name
36
+ m.route_resources session_plural_name
37
+ m.route_name :login, 'login', :controller => session_plural_name, :action => 'new'
38
+ m.route_name :logout, 'logout', :controller => session_plural_name, :action => 'destroy'
39
+ m.route_name :signup, 'signup', :controller => user_plural_name, :action => 'new'
40
+
41
+ m.insert_into "app/controllers/#{application_controller_name}.rb", 'include Authentication'
42
+
43
+ if test_framework == :rspec
44
+ m.directory "spec"
45
+ m.directory "spec/fixtures"
46
+ m.directory "spec/controllers"
47
+ m.directory "spec/models"
48
+ m.template "fixtures.yml", "spec/fixtures/#{user_plural_name}.yml"
49
+ m.template "tests/rspec/user.rb", "spec/models/#{user_singular_name}_spec.rb"
50
+ m.template "tests/rspec/users_controller.rb", "spec/controllers/#{user_plural_name}_controller_spec.rb"
51
+ m.template "tests/rspec/sessions_controller.rb", "spec/controllers/#{session_plural_name}_controller_spec.rb"
52
+ else
53
+ m.directory "test"
54
+ m.directory "test/fixtures"
55
+ m.directory "test/functional"
56
+ m.directory "test/unit"
57
+ m.template "fixtures.yml", "test/fixtures/#{user_plural_name}.yml"
58
+ m.template "tests/#{test_framework}/user.rb", "test/unit/#{user_singular_name}_test.rb"
59
+ m.template "tests/#{test_framework}/users_controller.rb", "test/functional/#{user_plural_name}_controller_test.rb"
60
+ m.template "tests/#{test_framework}/sessions_controller.rb", "test/functional/#{session_plural_name}_controller_test.rb"
61
+ end
62
+ end
63
+ end
64
+
65
+ def user_singular_name
66
+ user_name.underscore
67
+ end
68
+
69
+ def user_plural_name
70
+ user_singular_name.pluralize
71
+ end
72
+
73
+ def user_class_name
74
+ user_name.camelize
75
+ end
76
+
77
+ def user_plural_class_name
78
+ user_plural_name.camelize
79
+ end
80
+
81
+ def session_singular_name
82
+ session_name.underscore
83
+ end
84
+
85
+ def session_plural_name
86
+ session_singular_name.pluralize
87
+ end
88
+
89
+ def session_class_name
90
+ session_name.camelize
91
+ end
92
+
93
+ def session_plural_class_name
94
+ session_plural_name.camelize
95
+ end
96
+
97
+ def application_controller_name
98
+ Rails.version >= '2.3.0' ? 'application_controller' : 'application'
99
+ end
100
+
101
+ protected
102
+
103
+ def view_language
104
+ options[:haml] ? 'haml' : 'erb'
105
+ end
106
+
107
+ def test_framework
108
+ options[:test_framework] ||= File.exist?(destination_path("spec")) ? :rspec : :testunit
109
+ end
110
+
111
+ def add_options!(opt)
112
+ opt.separator ''
113
+ opt.separator 'Options:'
114
+ opt.on("--testunit", "Use test/unit for test files.") { options[:test_framework] = :testunit }
115
+ opt.on("--rspec", "Use RSpec for test files.") { options[:test_framework] = :rspec }
116
+ opt.on("--shoulda", "Use Shoulda for test files.") { options[:test_framework] = :shoulda }
117
+ opt.on("--haml", "Generate HAML views instead of ERB.") { |v| options[:haml] = true }
118
+ opt.on("--authlogic", "Use Authlogic for authentication.") { |v| options[:authlogic] = true }
119
+ end
120
+
121
+ def banner
122
+ <<-EOS
123
+ Creates user model and controllers to handle registration and authentication.
124
+
125
+ USAGE: #{$0} #{spec.name} [user_name] [sessions_controller_name]
126
+ EOS
127
+ end
128
+ end
@@ -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