zoo-generators 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +198 -0
- data/Gemfile +2 -0
- data/LICENSE +20 -0
- data/README.rdoc +96 -0
- data/Rakefile +10 -0
- data/features/step_definitions/common_steps.rb +62 -0
- data/features/step_definitions/rails_setup_steps.rb +6 -0
- data/features/support/env.rb +6 -0
- data/features/support/matchers.rb +7 -0
- data/features/zoo_authentication.feature +83 -0
- data/features/zoo_config.feature +17 -0
- data/features/zoo_layout.feature +13 -0
- data/features/zoo_scaffold.feature +84 -0
- data/lib/generators/zoo.rb +28 -0
- data/lib/generators/zoo/authentication/USAGE +46 -0
- data/lib/generators/zoo/authentication/authentication_generator.rb +151 -0
- data/lib/generators/zoo/authentication/templates/controller_authentication.rb +48 -0
- data/lib/generators/zoo/authentication/templates/factory.rb +6 -0
- data/lib/generators/zoo/authentication/templates/fixtures.yml +12 -0
- data/lib/generators/zoo/authentication/templates/migration.rb +15 -0
- data/lib/generators/zoo/authentication/templates/sessions_controller.rb +20 -0
- data/lib/generators/zoo/authentication/templates/sessions_helper.rb +2 -0
- data/lib/generators/zoo/authentication/templates/tests/rspec/sessions_controller.rb +26 -0
- data/lib/generators/zoo/authentication/templates/tests/rspec/user.rb +81 -0
- data/lib/generators/zoo/authentication/templates/tests/rspec/users_controller.rb +54 -0
- data/lib/generators/zoo/authentication/templates/tests/shoulda/sessions_controller.rb +26 -0
- data/lib/generators/zoo/authentication/templates/tests/shoulda/user.rb +83 -0
- data/lib/generators/zoo/authentication/templates/tests/shoulda/users_controller.rb +59 -0
- data/lib/generators/zoo/authentication/templates/tests/testunit/sessions_controller.rb +22 -0
- data/lib/generators/zoo/authentication/templates/tests/testunit/user.rb +87 -0
- data/lib/generators/zoo/authentication/templates/tests/testunit/users_controller.rb +51 -0
- data/lib/generators/zoo/authentication/templates/user.rb +35 -0
- data/lib/generators/zoo/authentication/templates/users_controller.rb +30 -0
- data/lib/generators/zoo/authentication/templates/users_helper.rb +2 -0
- data/lib/generators/zoo/authentication/templates/views/haml/_form.html.haml +16 -0
- data/lib/generators/zoo/authentication/templates/views/haml/edit.html.haml +3 -0
- data/lib/generators/zoo/authentication/templates/views/haml/login.html.haml +13 -0
- data/lib/generators/zoo/authentication/templates/views/haml/signup.html.haml +5 -0
- data/lib/generators/zoo/config/USAGE +23 -0
- data/lib/generators/zoo/config/config_generator.rb +24 -0
- data/lib/generators/zoo/config/templates/config.yml +8 -0
- data/lib/generators/zoo/config/templates/load_config.rb +2 -0
- data/lib/generators/zoo/layout/USAGE +25 -0
- data/lib/generators/zoo/layout/layout_generator.rb +26 -0
- data/lib/generators/zoo/layout/templates/error_messages_helper.rb +23 -0
- data/lib/generators/zoo/layout/templates/layout.html.erb +19 -0
- data/lib/generators/zoo/layout/templates/layout.html.haml +21 -0
- data/lib/generators/zoo/layout/templates/layout_helper.rb +22 -0
- data/lib/generators/zoo/layout/templates/stylesheet.css +83 -0
- data/lib/generators/zoo/layout/templates/stylesheet.sass +73 -0
- data/lib/generators/zoo/scaffold/USAGE +51 -0
- data/lib/generators/zoo/scaffold/scaffold_generator.rb +316 -0
- data/lib/generators/zoo/scaffold/templates/actions/create.rb +8 -0
- data/lib/generators/zoo/scaffold/templates/actions/destroy.rb +5 -0
- data/lib/generators/zoo/scaffold/templates/actions/edit.rb +3 -0
- data/lib/generators/zoo/scaffold/templates/actions/index.rb +3 -0
- data/lib/generators/zoo/scaffold/templates/actions/new.rb +3 -0
- data/lib/generators/zoo/scaffold/templates/actions/show.rb +3 -0
- data/lib/generators/zoo/scaffold/templates/actions/update.rb +8 -0
- data/lib/generators/zoo/scaffold/templates/controller.rb +3 -0
- data/lib/generators/zoo/scaffold/templates/factory.rb +5 -0
- data/lib/generators/zoo/scaffold/templates/fixtures.yml +9 -0
- data/lib/generators/zoo/scaffold/templates/helper.rb +2 -0
- data/lib/generators/zoo/scaffold/templates/migration.rb +16 -0
- data/lib/generators/zoo/scaffold/templates/model.rb +4 -0
- data/lib/generators/zoo/scaffold/templates/tests/rspec/actions/create.rb +11 -0
- data/lib/generators/zoo/scaffold/templates/tests/rspec/actions/destroy.rb +6 -0
- data/lib/generators/zoo/scaffold/templates/tests/rspec/actions/edit.rb +4 -0
- data/lib/generators/zoo/scaffold/templates/tests/rspec/actions/index.rb +4 -0
- data/lib/generators/zoo/scaffold/templates/tests/rspec/actions/new.rb +4 -0
- data/lib/generators/zoo/scaffold/templates/tests/rspec/actions/show.rb +4 -0
- data/lib/generators/zoo/scaffold/templates/tests/rspec/actions/update.rb +11 -0
- data/lib/generators/zoo/scaffold/templates/tests/rspec/controller.rb +8 -0
- data/lib/generators/zoo/scaffold/templates/tests/rspec/model.rb +7 -0
- data/lib/generators/zoo/scaffold/templates/tests/shoulda/actions/create.rb +13 -0
- data/lib/generators/zoo/scaffold/templates/tests/shoulda/actions/destroy.rb +8 -0
- data/lib/generators/zoo/scaffold/templates/tests/shoulda/actions/edit.rb +6 -0
- data/lib/generators/zoo/scaffold/templates/tests/shoulda/actions/index.rb +6 -0
- data/lib/generators/zoo/scaffold/templates/tests/shoulda/actions/new.rb +6 -0
- data/lib/generators/zoo/scaffold/templates/tests/shoulda/actions/show.rb +6 -0
- data/lib/generators/zoo/scaffold/templates/tests/shoulda/actions/update.rb +13 -0
- data/lib/generators/zoo/scaffold/templates/tests/shoulda/controller.rb +5 -0
- data/lib/generators/zoo/scaffold/templates/tests/shoulda/model.rb +7 -0
- data/lib/generators/zoo/scaffold/templates/tests/testunit/actions/create.rb +11 -0
- data/lib/generators/zoo/scaffold/templates/tests/testunit/actions/destroy.rb +6 -0
- data/lib/generators/zoo/scaffold/templates/tests/testunit/actions/edit.rb +4 -0
- data/lib/generators/zoo/scaffold/templates/tests/testunit/actions/index.rb +4 -0
- data/lib/generators/zoo/scaffold/templates/tests/testunit/actions/new.rb +4 -0
- data/lib/generators/zoo/scaffold/templates/tests/testunit/actions/show.rb +4 -0
- data/lib/generators/zoo/scaffold/templates/tests/testunit/actions/update.rb +11 -0
- data/lib/generators/zoo/scaffold/templates/tests/testunit/controller.rb +5 -0
- data/lib/generators/zoo/scaffold/templates/tests/testunit/model.rb +7 -0
- data/lib/generators/zoo/scaffold/templates/views/haml/_form.html.haml +9 -0
- data/lib/generators/zoo/scaffold/templates/views/haml/edit.html.haml +14 -0
- data/lib/generators/zoo/scaffold/templates/views/haml/index.html.haml +25 -0
- data/lib/generators/zoo/scaffold/templates/views/haml/new.html.haml +7 -0
- data/lib/generators/zoo/scaffold/templates/views/haml/show.html.haml +20 -0
- metadata +243 -0
@@ -0,0 +1,17 @@
|
|
1
|
+
Feature: Zoo Config Generator
|
2
|
+
In order to have configure an app
|
3
|
+
As a rails developer
|
4
|
+
I want to generate a config file and manager
|
5
|
+
|
6
|
+
Scenario: Generate normal config
|
7
|
+
Given a new Rails app
|
8
|
+
When I run "rails g zoo:config"
|
9
|
+
Then I should see file "config/app_config.yml"
|
10
|
+
And I should see file "config/initializers/load_app_config.rb"
|
11
|
+
|
12
|
+
Scenario: Generate named config
|
13
|
+
Given a new Rails app
|
14
|
+
When I run "rails g zoo:config FooBar"
|
15
|
+
Then I should see "FOO_BAR_CONFIG" in file "config/initializers/load_foo_bar_config.rb"
|
16
|
+
And I should see "config/foo_bar_config.yml" in file "config/initializers/load_foo_bar_config.rb"
|
17
|
+
And I should see file "config/foo_bar_config.yml"
|
@@ -0,0 +1,13 @@
|
|
1
|
+
Feature: Zoo Layout Generator
|
2
|
+
In order to have a layout
|
3
|
+
As a rails developer
|
4
|
+
I want to generate a simple layout
|
5
|
+
|
6
|
+
Scenario: Generate normal application layout
|
7
|
+
Given a new Rails app
|
8
|
+
When I run "rails g zoo:layout -f"
|
9
|
+
Then I should see "stylesheet_link_tag "application"" in file "app/views/layouts/application.html.haml"
|
10
|
+
Then I should see "h(page_title" in file "app/helpers/layout_helper.rb"
|
11
|
+
And I should see file "app/helpers/layout_helper.rb"
|
12
|
+
And I should see file "app/helpers/error_messages_helper.rb"
|
13
|
+
And I should see file "public/stylesheets/sass/application.sass"
|
@@ -0,0 +1,84 @@
|
|
1
|
+
Feature: Zoo Scaffold Generator
|
2
|
+
In order to manage a resource
|
3
|
+
As a rails developer
|
4
|
+
I want to generate a model, controller, and views for that resource
|
5
|
+
|
6
|
+
Scenario: Generate scaffold for simple resource
|
7
|
+
Given a new Rails app
|
8
|
+
When I run "rails g zoo:scaffold Project name:string"
|
9
|
+
Then I should see the following files
|
10
|
+
| app/models/project.rb |
|
11
|
+
| app/controllers/projects_controller.rb |
|
12
|
+
| app/helpers/projects_helper.rb |
|
13
|
+
| app/views/projects/index.html.haml |
|
14
|
+
| app/views/projects/show.html.haml |
|
15
|
+
| app/views/projects/new.html.haml |
|
16
|
+
| app/views/projects/edit.html.haml |
|
17
|
+
| db/migrate |
|
18
|
+
And I should see "resources :projects" in file "config/routes.rb"
|
19
|
+
And I should see "gem "mocha", :group => :test" in file "Gemfile"
|
20
|
+
When I run "rails g zoo:layout -f"
|
21
|
+
And I run "rake db:migrate"
|
22
|
+
And I should successfully run "rails g zoo:scaffold Project -f"
|
23
|
+
And I run "bundle install"
|
24
|
+
Then I should successfully run "rake test"
|
25
|
+
|
26
|
+
Scenario: Generate scaffold with rspec tests
|
27
|
+
Given a new Rails app
|
28
|
+
When I run "rails g zoo:scaffold Project name:string --rspec"
|
29
|
+
Then I should see the following files
|
30
|
+
| spec/models/project_spec.rb |
|
31
|
+
| spec/controllers/projects_controller_spec.rb |
|
32
|
+
When I run "rails g zoo:scaffold Task project_id:integer"
|
33
|
+
Then I should see the following files
|
34
|
+
| spec/models/task_spec.rb |
|
35
|
+
| spec/controllers/tasks_controller_spec.rb |
|
36
|
+
When I run "rails g zoo:layout -f"
|
37
|
+
And I run "rake db:migrate"
|
38
|
+
And I add "gem 'rspec-rails', '>= 2.0.0.beta.19'" to file "Gemfile"
|
39
|
+
And I run "rails g rspec:install"
|
40
|
+
And I replace "mock_with :rspec" with "mock_with :mocha" in file "spec/spec_helper.rb"
|
41
|
+
And I run "bundle install"
|
42
|
+
Then I should successfully run "rake spec"
|
43
|
+
|
44
|
+
Scenario: Report error when invalid model name
|
45
|
+
Given a new Rails app
|
46
|
+
Then I should see "Usage:" when running "rails g zoo:scaffold name:string parent_id:integer"
|
47
|
+
|
48
|
+
Scenario: Generate scaffold for namespaced resource
|
49
|
+
Given a new Rails app
|
50
|
+
When I run "rails g zoo:scaffold Admin::User name:string"
|
51
|
+
Then I should see the following files
|
52
|
+
| app/models/user.rb |
|
53
|
+
| app/controllers/admin/users_controller.rb |
|
54
|
+
| app/helpers/admin/users_helper.rb |
|
55
|
+
| app/views/admin/users/index.html.haml |
|
56
|
+
| app/views/admin/users/show.html.haml |
|
57
|
+
| app/views/admin/users/new.html.haml |
|
58
|
+
| app/views/admin/users/edit.html.haml |
|
59
|
+
| db/migrate |
|
60
|
+
And I should see "class User" in file "app/models/user.rb"
|
61
|
+
And I should not see "set_table_name :" in file "app/models/user.rb"
|
62
|
+
And I should see "namespace(:admin){ resources :users }" in file "config/routes.rb"
|
63
|
+
When I run "rails g zoo:layout -f"
|
64
|
+
And I run "rake db:migrate"
|
65
|
+
And I should successfully run "rails g zoo:scaffold Admin::User -f"
|
66
|
+
And I run "bundle install"
|
67
|
+
Then I should successfully run "rake test"
|
68
|
+
|
69
|
+
Scenario: Generate scaffold with a namespaced model
|
70
|
+
Given a new Rails app
|
71
|
+
When I run "rails g zoo:scaffold Admin::User name:string --namespace_model"
|
72
|
+
Then I should see "class Admin::User" in file "app/models/admin/user.rb"
|
73
|
+
And I should see "set_table_name :admin_users" in file "app/models/admin/user.rb"
|
74
|
+
When I run "rails g zoo:layout -f"
|
75
|
+
And I run "rake db:migrate"
|
76
|
+
And I should successfully run "rails g zoo:scaffold Admin::User -f --namespace_model"
|
77
|
+
And I run "bundle install"
|
78
|
+
Then I should successfully run "rake test"
|
79
|
+
|
80
|
+
Scenario: Given scaffold with a new and index action
|
81
|
+
Given a new Rails app
|
82
|
+
When I run "rails g zoo:scaffold Project name:string index new"
|
83
|
+
Then I should see "class Project" in file "app/models/project.rb"
|
84
|
+
And I should see "= semantic_form_for @project do |f|" in file "app/views/projects/new.html.haml"
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'rails/generators/base'
|
2
|
+
|
3
|
+
module Zoo
|
4
|
+
module Generators
|
5
|
+
class Base < Rails::Generators::Base #:nodoc:
|
6
|
+
def self.source_root
|
7
|
+
@_haml_source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'zoo', generator_name, 'templates'))
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.banner
|
11
|
+
"rails generate zoo:#{generator_name} #{self.arguments.map{ |a| a.usage }.join(' ')} [options]"
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def add_gem(name, options = {})
|
17
|
+
gemfile_content = File.read(destination_path("Gemfile"))
|
18
|
+
File.open(destination_path("Gemfile"), 'a') { |f| f.write("\n") } unless gemfile_content =~ /\n\Z/
|
19
|
+
gem name, options unless gemfile_content.include? name
|
20
|
+
end
|
21
|
+
|
22
|
+
def print_usage
|
23
|
+
self.class.help(Thor::Base.shell.new)
|
24
|
+
exit
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,46 @@
|
|
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 haml_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
|
+
Examples:
|
17
|
+
rails generate zoo:authentication
|
18
|
+
|
19
|
+
Creates user model, users_controller, and sessions_controller.
|
20
|
+
|
21
|
+
rails generate zoo:authentication account
|
22
|
+
|
23
|
+
Creates account model, accounts_controller, and sessions_controller.
|
24
|
+
|
25
|
+
rails generate zoo:authentication Account UserSession
|
26
|
+
|
27
|
+
Creates account model, accounts_controller, and user_sessions_controller.
|
28
|
+
|
29
|
+
Methods:
|
30
|
+
There are several methods generated which you can use in your application.
|
31
|
+
Here's a common example of what you might add to your layout.
|
32
|
+
|
33
|
+
<% if logged_in? %>
|
34
|
+
Welcome <%= current_user.username %>! Not you?
|
35
|
+
<%= link_to "Log out", logout_path %>
|
36
|
+
<% else %>
|
37
|
+
<%= link_to "Sign up", signup_path %> or
|
38
|
+
<%= link_to "log in", login_path %>.
|
39
|
+
<% end %>
|
40
|
+
|
41
|
+
You can also restrict unregistered users from accessing a controller using
|
42
|
+
a before filter. For example.
|
43
|
+
|
44
|
+
before_filter :login_required, :except => [:index, :show]
|
45
|
+
|
46
|
+
See the generated file lib/authentication.rb for details.
|
@@ -0,0 +1,151 @@
|
|
1
|
+
require 'generators/zoo'
|
2
|
+
require 'rails/generators/migration'
|
3
|
+
|
4
|
+
module Zoo
|
5
|
+
module Generators
|
6
|
+
class AuthenticationGenerator < Base
|
7
|
+
include Rails::Generators::Migration
|
8
|
+
|
9
|
+
argument :user_name, :type => :string, :default => 'user', :banner => 'user_name'
|
10
|
+
argument :session_name, :type => :string, :default => 'session', :banner => 'sessions_controller_name'
|
11
|
+
|
12
|
+
class_option :testunit, :desc => 'Use test/unit for test files.', :group => 'Test framework', :type => :boolean
|
13
|
+
class_option :rspec, :desc => 'Use RSpec for test files.', :group => 'Test framework', :type => :boolean
|
14
|
+
class_option :shoulda, :desc => 'Use shoulda for test files.', :group => 'Test framework', :type => :boolean
|
15
|
+
|
16
|
+
def add_gems
|
17
|
+
add_gem "haml-rails"
|
18
|
+
add_gem "bcrypt-ruby", :require => "bcrypt"
|
19
|
+
add_gem "mocha", :group => :test
|
20
|
+
end
|
21
|
+
|
22
|
+
def create_model_files
|
23
|
+
template 'user.rb', "app/models/#{user_singular_name}.rb"
|
24
|
+
end
|
25
|
+
|
26
|
+
def create_controller_files
|
27
|
+
template 'users_controller.rb', "app/controllers/#{user_plural_name}_controller.rb"
|
28
|
+
template 'sessions_controller.rb', "app/controllers/#{session_plural_name}_controller.rb"
|
29
|
+
end
|
30
|
+
|
31
|
+
def create_helper_files
|
32
|
+
template 'users_helper.rb', "app/helpers/#{user_plural_name}_helper.rb"
|
33
|
+
template 'sessions_helper.rb', "app/helpers/#{session_plural_name}_helper.rb"
|
34
|
+
end
|
35
|
+
|
36
|
+
def create_view_files
|
37
|
+
template "views/#{view_language}/signup.html.#{view_language}", "app/views/#{user_plural_name}/new.html.#{view_language}"
|
38
|
+
template "views/#{view_language}/edit.html.#{view_language}", "app/views/#{user_plural_name}/edit.html.#{view_language}"
|
39
|
+
template "views/#{view_language}/_form.html.#{view_language}", "app/views/#{user_plural_name}/_form.html.#{view_language}"
|
40
|
+
template "views/#{view_language}/login.html.#{view_language}", "app/views/#{session_plural_name}/new.html.#{view_language}"
|
41
|
+
end
|
42
|
+
|
43
|
+
def create_lib_files
|
44
|
+
template 'controller_authentication.rb', 'lib/controller_authentication.rb'
|
45
|
+
end
|
46
|
+
|
47
|
+
def create_routes
|
48
|
+
route "resources #{user_plural_name.to_sym.inspect}"
|
49
|
+
route "resources #{session_plural_name.to_sym.inspect}"
|
50
|
+
route "match 'login' => '#{session_plural_name}#new', :as => :login"
|
51
|
+
route "match 'logout' => '#{session_plural_name}#destroy', :as => :logout"
|
52
|
+
route "match 'signup' => '#{user_plural_name}#new', :as => :signup"
|
53
|
+
route "match '#{user_singular_name}/edit' => '#{user_plural_name}#edit', :as => :edit_current_#{user_singular_name}"
|
54
|
+
end
|
55
|
+
|
56
|
+
def create_migration
|
57
|
+
migration_template 'migration.rb', "db/migrate/create_#{user_plural_name}.rb"
|
58
|
+
end
|
59
|
+
|
60
|
+
def load_and_include_authentication
|
61
|
+
inject_into_class "config/application.rb", "Application", " config.autoload_paths << \"\#{config.root}/lib\""
|
62
|
+
inject_into_class "app/controllers/application_controller.rb", "ApplicationController", " include ControllerAuthentication\n"
|
63
|
+
end
|
64
|
+
|
65
|
+
def create_test_files
|
66
|
+
if test_framework == :rspec
|
67
|
+
template 'factory.rb', "spec/factories/#{user_plural_name}.rb"
|
68
|
+
template 'fixtures.yml', "spec/fixtures/#{user_plural_name}.yml"
|
69
|
+
template 'tests/rspec/user.rb', "spec/models/#{user_singular_name}_spec.rb"
|
70
|
+
template 'tests/rspec/users_controller.rb', "spec/controllers/#{user_plural_name}_controller_spec.rb"
|
71
|
+
template 'tests/rspec/sessions_controller.rb', "spec/controllers/#{session_plural_name}_controller_spec.rb"
|
72
|
+
else
|
73
|
+
template 'factory.rb', "test/factories/#{user_plural_name}.rb"
|
74
|
+
template 'fixtures.yml', "test/fixtures/#{user_plural_name}.yml"
|
75
|
+
template "tests/#{test_framework}/user.rb", "test/unit/#{user_singular_name}_test.rb"
|
76
|
+
template "tests/#{test_framework}/users_controller.rb", "test/functional/#{user_plural_name}_controller_test.rb"
|
77
|
+
template "tests/#{test_framework}/sessions_controller.rb", "test/functional/#{session_plural_name}_controller_test.rb"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
private
|
82
|
+
|
83
|
+
def session_name
|
84
|
+
@_session_name ||= @session_name
|
85
|
+
end
|
86
|
+
|
87
|
+
def user_singular_name
|
88
|
+
user_name.underscore
|
89
|
+
end
|
90
|
+
|
91
|
+
def user_plural_name
|
92
|
+
user_singular_name.pluralize
|
93
|
+
end
|
94
|
+
|
95
|
+
def user_class_name
|
96
|
+
user_name.camelize
|
97
|
+
end
|
98
|
+
|
99
|
+
def user_plural_class_name
|
100
|
+
user_plural_name.camelize
|
101
|
+
end
|
102
|
+
|
103
|
+
def session_singular_name
|
104
|
+
session_name.underscore
|
105
|
+
end
|
106
|
+
|
107
|
+
def session_plural_name
|
108
|
+
session_singular_name.pluralize
|
109
|
+
end
|
110
|
+
|
111
|
+
def session_class_name
|
112
|
+
session_name.camelize
|
113
|
+
end
|
114
|
+
|
115
|
+
def session_plural_class_name
|
116
|
+
session_plural_name.camelize
|
117
|
+
end
|
118
|
+
|
119
|
+
def view_language
|
120
|
+
'haml'
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_framework
|
124
|
+
return @test_framework if defined?(@test_framework)
|
125
|
+
if options.testunit?
|
126
|
+
return @test_framework = :testunit
|
127
|
+
elsif options.rspec?
|
128
|
+
return @test_framework = :rspec
|
129
|
+
elsif options.shoulda?
|
130
|
+
return @test_framework = :shoulda
|
131
|
+
else
|
132
|
+
return @test_framework = File.exist?(destination_path('spec')) ? :rspec : :testunit
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
def destination_path(path)
|
137
|
+
File.join(destination_root, path)
|
138
|
+
end
|
139
|
+
|
140
|
+
# FIXME: Should be proxied to ActiveRecord::Generators::Base
|
141
|
+
# Implement the required interface for Rails::Generators::Migration.
|
142
|
+
def self.next_migration_number(dirname) #:nodoc:
|
143
|
+
if ActiveRecord::Base.timestamped_migrations
|
144
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
145
|
+
else
|
146
|
+
"%.3d" % (current_migration_number(dirname) + 1)
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
@@ -0,0 +1,48 @@
|
|
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 <%%= current_<%= user_singular_name %>.username %>.
|
7
|
+
# <%%= link_to "Edit profile", edit_current_<%= user_singular_name %>_path %> or
|
8
|
+
# <%%= link_to "Log out", logout_path %>
|
9
|
+
# <%% else %>
|
10
|
+
# <%%= link_to "Sign up", signup_path %> or
|
11
|
+
# <%%= link_to "log in", login_path %>.
|
12
|
+
# <%% end %>
|
13
|
+
#
|
14
|
+
# You can also restrict unregistered users from accessing a controller using
|
15
|
+
# a before filter. For example.
|
16
|
+
#
|
17
|
+
# before_filter :login_required, :except => [:index, :show]
|
18
|
+
module ControllerAuthentication
|
19
|
+
def self.included(controller)
|
20
|
+
controller.send :helper_method, :current_<%= user_singular_name %>, :logged_in?, :redirect_to_target_or_default
|
21
|
+
end
|
22
|
+
|
23
|
+
def current_<%= user_singular_name %>
|
24
|
+
@current_<%= user_singular_name %> ||= <%= user_class_name %>.find(session[:<%= user_singular_name %>_id]) if session[:<%= user_singular_name %>_id]
|
25
|
+
end
|
26
|
+
|
27
|
+
def logged_in?
|
28
|
+
current_<%= user_singular_name %>
|
29
|
+
end
|
30
|
+
|
31
|
+
def login_required
|
32
|
+
unless logged_in?
|
33
|
+
store_target_location
|
34
|
+
redirect_to login_url, :alert => "You must first log in or sign up before accessing this page."
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def redirect_to_target_or_default(default, *args)
|
39
|
+
redirect_to(session[:return_to] || default, *args)
|
40
|
+
session[:return_to] = nil
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def store_target_location
|
46
|
+
session[:return_to] = request.url
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
Factory.define :<%= user_singular_name %> do |<%= user_singular_name %>|
|
2
|
+
<%= user_singular_name %>.username 'bar'
|
3
|
+
<%= user_singular_name %>.email 'bar@example.com'
|
4
|
+
<%= user_singular_name %>.password_hash '3488f5f7efecab14b91eb96169e5e1ee518a569f''
|
5
|
+
<%= user_singular_name %>.password_salt 'bef65e058905c379436d80d1a32e7374b139e7b0'
|
6
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# password: "secret"
|
2
|
+
foo:
|
3
|
+
username: foo
|
4
|
+
email: foo@example.com
|
5
|
+
password_hash: 3488f5f7efecab14b91eb96169e5e1ee518a569f
|
6
|
+
password_salt: bef65e058905c379436d80d1a32e7374b139e7b0
|
7
|
+
|
8
|
+
bar:
|
9
|
+
username: bar
|
10
|
+
email: bar@example.com
|
11
|
+
password_hash: 3488f5f7efecab14b91eb96169e5e1ee518a569f
|
12
|
+
password_salt: bef65e058905c379436d80d1a32e7374b139e7b0
|
@@ -0,0 +1,15 @@
|
|
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
|
+
t.string :password_hash
|
7
|
+
t.string :password_salt
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.down
|
13
|
+
drop_table :<%= user_plural_name %>
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class <%= session_plural_class_name %>Controller < ApplicationController
|
2
|
+
def new
|
3
|
+
end
|
4
|
+
|
5
|
+
def create
|
6
|
+
<%= user_singular_name %> = <%= user_class_name %>.authenticate(params[:login], params[:password])
|
7
|
+
if <%= user_singular_name %>
|
8
|
+
session[:<%= user_singular_name %>_id] = <%= user_singular_name %>.id
|
9
|
+
redirect_to_target_or_default root_url, :notice => "Logged in successfully."
|
10
|
+
else
|
11
|
+
flash.now[:alert] = "Invalid login or password."
|
12
|
+
render :new
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def destroy
|
17
|
+
session[:<%= user_singular_name %>_id] = nil
|
18
|
+
redirect_to root_url, :notice => "You have been logged out."
|
19
|
+
end
|
20
|
+
end
|