nifty-generators-improved 0.5
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.
- data/CHANGELOG +198 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +111 -0
- data/LICENSE +20 -0
- data/README.rdoc +109 -0
- data/Rakefile +10 -0
- data/features/nifty_authentication.feature +80 -0
- data/features/nifty_config.feature +17 -0
- data/features/nifty_layout.feature +20 -0
- data/features/nifty_scaffold.feature +80 -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/lib/generators/nifty.rb +28 -0
- data/lib/generators/nifty/authentication/USAGE +50 -0
- data/lib/generators/nifty/authentication/authentication_generator.rb +154 -0
- data/lib/generators/nifty/authentication/templates/authlogic_session.rb +2 -0
- data/lib/generators/nifty/authentication/templates/controller_authentication.rb +60 -0
- data/lib/generators/nifty/authentication/templates/fixtures.yml +24 -0
- data/lib/generators/nifty/authentication/templates/migration.rb +20 -0
- data/lib/generators/nifty/authentication/templates/sessions_controller.rb +41 -0
- data/lib/generators/nifty/authentication/templates/sessions_helper.rb +2 -0
- data/lib/generators/nifty/authentication/templates/tests/rspec/sessions_controller.rb +39 -0
- data/lib/generators/nifty/authentication/templates/tests/rspec/user.rb +83 -0
- data/lib/generators/nifty/authentication/templates/tests/rspec/users_controller.rb +56 -0
- data/lib/generators/nifty/authentication/templates/tests/shoulda/sessions_controller.rb +40 -0
- data/lib/generators/nifty/authentication/templates/tests/shoulda/user.rb +85 -0
- data/lib/generators/nifty/authentication/templates/tests/shoulda/users_controller.rb +61 -0
- data/lib/generators/nifty/authentication/templates/tests/testunit/sessions_controller.rb +36 -0
- data/lib/generators/nifty/authentication/templates/tests/testunit/user.rb +88 -0
- data/lib/generators/nifty/authentication/templates/tests/testunit/users_controller.rb +53 -0
- data/lib/generators/nifty/authentication/templates/user.rb +38 -0
- data/lib/generators/nifty/authentication/templates/users_controller.rb +32 -0
- data/lib/generators/nifty/authentication/templates/users_helper.rb +2 -0
- data/lib/generators/nifty/authentication/templates/views/erb/_form.html.erb +20 -0
- data/lib/generators/nifty/authentication/templates/views/erb/edit.html.erb +3 -0
- data/lib/generators/nifty/authentication/templates/views/erb/login.html.erb +30 -0
- data/lib/generators/nifty/authentication/templates/views/erb/signup.html.erb +5 -0
- data/lib/generators/nifty/authentication/templates/views/haml/_form.html.haml +16 -0
- data/lib/generators/nifty/authentication/templates/views/haml/edit.html.haml +3 -0
- data/lib/generators/nifty/authentication/templates/views/haml/login.html.haml +26 -0
- data/lib/generators/nifty/authentication/templates/views/haml/signup.html.haml +5 -0
- data/lib/generators/nifty/config/USAGE +23 -0
- data/lib/generators/nifty/config/config_generator.rb +24 -0
- data/lib/generators/nifty/config/templates/config.yml +8 -0
- data/lib/generators/nifty/config/templates/load_config.rb +2 -0
- data/lib/generators/nifty/layout/USAGE +25 -0
- data/lib/generators/nifty/layout/layout_generator.rb +29 -0
- data/lib/generators/nifty/layout/templates/error_messages_helper.rb +23 -0
- data/lib/generators/nifty/layout/templates/layout.html.erb +19 -0
- data/lib/generators/nifty/layout/templates/layout.html.haml +17 -0
- data/lib/generators/nifty/layout/templates/layout_helper.rb +17 -0
- data/lib/generators/nifty/layout/templates/stylesheet.css +83 -0
- data/lib/generators/nifty/layout/templates/stylesheet.css.scss +88 -0
- data/lib/generators/nifty/scaffold/USAGE +51 -0
- data/lib/generators/nifty/scaffold/scaffold_generator.rb +318 -0
- data/lib/generators/nifty/scaffold/templates/actions/create.rb +8 -0
- data/lib/generators/nifty/scaffold/templates/actions/destroy.rb +5 -0
- data/lib/generators/nifty/scaffold/templates/actions/edit.rb +3 -0
- data/lib/generators/nifty/scaffold/templates/actions/index.rb +3 -0
- data/lib/generators/nifty/scaffold/templates/actions/new.rb +3 -0
- data/lib/generators/nifty/scaffold/templates/actions/show.rb +3 -0
- data/lib/generators/nifty/scaffold/templates/actions/update.rb +8 -0
- data/lib/generators/nifty/scaffold/templates/controller.rb +3 -0
- data/lib/generators/nifty/scaffold/templates/fixtures.yml +9 -0
- data/lib/generators/nifty/scaffold/templates/helper.rb +2 -0
- data/lib/generators/nifty/scaffold/templates/migration.rb +16 -0
- data/lib/generators/nifty/scaffold/templates/model.rb +4 -0
- data/lib/generators/nifty/scaffold/templates/tests/rspec/actions/create.rb +11 -0
- data/lib/generators/nifty/scaffold/templates/tests/rspec/actions/destroy.rb +6 -0
- data/lib/generators/nifty/scaffold/templates/tests/rspec/actions/edit.rb +4 -0
- data/lib/generators/nifty/scaffold/templates/tests/rspec/actions/index.rb +4 -0
- data/lib/generators/nifty/scaffold/templates/tests/rspec/actions/new.rb +4 -0
- data/lib/generators/nifty/scaffold/templates/tests/rspec/actions/show.rb +4 -0
- data/lib/generators/nifty/scaffold/templates/tests/rspec/actions/update.rb +11 -0
- data/lib/generators/nifty/scaffold/templates/tests/rspec/controller.rb +8 -0
- data/lib/generators/nifty/scaffold/templates/tests/rspec/model.rb +7 -0
- data/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/create.rb +13 -0
- data/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/destroy.rb +8 -0
- data/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/edit.rb +6 -0
- data/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/index.rb +6 -0
- data/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/new.rb +6 -0
- data/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/show.rb +6 -0
- data/lib/generators/nifty/scaffold/templates/tests/shoulda/actions/update.rb +13 -0
- data/lib/generators/nifty/scaffold/templates/tests/shoulda/controller.rb +5 -0
- data/lib/generators/nifty/scaffold/templates/tests/shoulda/model.rb +7 -0
- data/lib/generators/nifty/scaffold/templates/tests/testunit/actions/create.rb +11 -0
- data/lib/generators/nifty/scaffold/templates/tests/testunit/actions/destroy.rb +6 -0
- data/lib/generators/nifty/scaffold/templates/tests/testunit/actions/edit.rb +4 -0
- data/lib/generators/nifty/scaffold/templates/tests/testunit/actions/index.rb +4 -0
- data/lib/generators/nifty/scaffold/templates/tests/testunit/actions/new.rb +4 -0
- data/lib/generators/nifty/scaffold/templates/tests/testunit/actions/show.rb +4 -0
- data/lib/generators/nifty/scaffold/templates/tests/testunit/actions/update.rb +11 -0
- data/lib/generators/nifty/scaffold/templates/tests/testunit/controller.rb +5 -0
- data/lib/generators/nifty/scaffold/templates/tests/testunit/model.rb +7 -0
- data/lib/generators/nifty/scaffold/templates/views/erb/_form.html.erb +10 -0
- data/lib/generators/nifty/scaffold/templates/views/erb/edit.html.erb +14 -0
- data/lib/generators/nifty/scaffold/templates/views/erb/index.html.erb +29 -0
- data/lib/generators/nifty/scaffold/templates/views/erb/new.html.erb +7 -0
- data/lib/generators/nifty/scaffold/templates/views/erb/show.html.erb +20 -0
- data/lib/generators/nifty/scaffold/templates/views/haml/_form.html.haml +9 -0
- data/lib/generators/nifty/scaffold/templates/views/haml/edit.html.haml +14 -0
- data/lib/generators/nifty/scaffold/templates/views/haml/index.html.haml +25 -0
- data/lib/generators/nifty/scaffold/templates/views/haml/new.html.haml +7 -0
- data/lib/generators/nifty/scaffold/templates/views/haml/show.html.haml +20 -0
- data/test/test_helper.rb +119 -0
- data/test/test_nifty_authentication_generator.rb +274 -0
- data/test/test_nifty_config_generator.rb +37 -0
- data/test/test_nifty_layout_generator.rb +42 -0
- data/test/test_nifty_scaffold_generator.rb +534 -0
- metadata +231 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
Feature: Nifty Authentication Generator
|
|
2
|
+
In order to authenticate users
|
|
3
|
+
As a rails developer
|
|
4
|
+
I want to generate some user authentication
|
|
5
|
+
|
|
6
|
+
Scenario: Generate default authentication
|
|
7
|
+
Given a new Rails app
|
|
8
|
+
When I insert "root :to => 'users#new'" into "config/routes.rb" after line 1
|
|
9
|
+
And I run "rails g nifty:authentication"
|
|
10
|
+
Then I should see the following files
|
|
11
|
+
| app/models/user.rb |
|
|
12
|
+
| app/controllers/users_controller.rb |
|
|
13
|
+
| app/helpers/users_helper.rb |
|
|
14
|
+
| app/views/users/new.html.erb |
|
|
15
|
+
| app/views/users/edit.html.erb |
|
|
16
|
+
| app/controllers/sessions_controller.rb |
|
|
17
|
+
| app/helpers/sessions_helper.rb |
|
|
18
|
+
| app/views/sessions/new.html.erb |
|
|
19
|
+
| lib/controller_authentication.rb |
|
|
20
|
+
| test/fixtures/users.yml |
|
|
21
|
+
| test/unit/user_test.rb |
|
|
22
|
+
| test/functional/users_controller_test.rb |
|
|
23
|
+
| test/functional/sessions_controller_test.rb |
|
|
24
|
+
| db/migrate |
|
|
25
|
+
And I should see the following in file "config/routes.rb"
|
|
26
|
+
| resources :sessions |
|
|
27
|
+
| resources :users |
|
|
28
|
+
| match 'login' => 'sessions#new', :as => :login |
|
|
29
|
+
| match 'logout' => 'sessions#destroy', :as => :logout |
|
|
30
|
+
| match 'signup' => 'users#new', :as => :signup |
|
|
31
|
+
| match 'user/edit' => 'users#edit', :as => :edit_current_user |
|
|
32
|
+
And I should see "include ControllerAuthentication" in file "app/controllers/application_controller.rb"
|
|
33
|
+
And I should see "gem "mocha", :group => :test" in file "Gemfile"
|
|
34
|
+
And I should see "gem "bcrypt-ruby", :require => "bcrypt"" in file "Gemfile"
|
|
35
|
+
When I run "rails g nifty:layout -f"
|
|
36
|
+
And I run "rake db:migrate"
|
|
37
|
+
Then I should successfully run "rake test"
|
|
38
|
+
|
|
39
|
+
Scenario: Generate named authentication
|
|
40
|
+
Given a new Rails app
|
|
41
|
+
When I insert "root :to => 'accounts#new'" into "config/routes.rb" after line 1
|
|
42
|
+
And I run "rails g nifty:authentication Account CurrentSession"
|
|
43
|
+
Then I should see the following files
|
|
44
|
+
| app/models/account.rb |
|
|
45
|
+
| app/controllers/accounts_controller.rb |
|
|
46
|
+
| app/helpers/accounts_helper.rb |
|
|
47
|
+
| app/views/accounts/new.html.erb |
|
|
48
|
+
| app/views/accounts/edit.html.erb |
|
|
49
|
+
| app/controllers/current_sessions_controller.rb |
|
|
50
|
+
| app/helpers/current_sessions_helper.rb |
|
|
51
|
+
| app/views/current_sessions/new.html.erb |
|
|
52
|
+
| test/fixtures/accounts.yml |
|
|
53
|
+
| test/unit/account_test.rb |
|
|
54
|
+
| test/functional/accounts_controller_test.rb |
|
|
55
|
+
| test/functional/current_sessions_controller_test.rb |
|
|
56
|
+
And I should see the following in file "config/routes.rb"
|
|
57
|
+
| resources :current_sessions |
|
|
58
|
+
| resources :accounts |
|
|
59
|
+
| match 'login' => 'current_sessions#new', :as => :login |
|
|
60
|
+
| match 'logout' => 'current_sessions#destroy', :as => :logout |
|
|
61
|
+
| match 'signup' => 'accounts#new', :as => :signup |
|
|
62
|
+
| match 'account/edit' => 'accounts#edit', :as => :edit_current_account |
|
|
63
|
+
When I run "rails g nifty:layout -f"
|
|
64
|
+
And I run "rake db:migrate"
|
|
65
|
+
Then I should successfully run "rake test"
|
|
66
|
+
|
|
67
|
+
Scenario: Generate named authentication with rspec
|
|
68
|
+
Given a new Rails app
|
|
69
|
+
When I insert "root :to => 'accounts#new'" into "config/routes.rb" after line 1
|
|
70
|
+
And I run "rails g nifty:authentication Account CurrentSession --rspec"
|
|
71
|
+
Then I should see the following files
|
|
72
|
+
| spec/models/account_spec.rb |
|
|
73
|
+
| spec/controllers/accounts_controller_spec.rb |
|
|
74
|
+
| spec/controllers/current_sessions_controller_spec.rb |
|
|
75
|
+
When I run "rails g nifty:layout -f"
|
|
76
|
+
And I run "rake db:migrate"
|
|
77
|
+
And I add "gem 'rspec-rails', '>= 2.0.1'" to file "Gemfile"
|
|
78
|
+
And I run "rails g rspec:install"
|
|
79
|
+
And I replace "mock_with :rspec" with "mock_with :mocha" in file "spec/spec_helper.rb"
|
|
80
|
+
Then I should successfully run "rake spec"
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Feature: Nifty 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 nifty: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 nifty: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,20 @@
|
|
|
1
|
+
Feature: Nifty 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 nifty:layout -f"
|
|
9
|
+
Then I should see "stylesheet_link_tag "application"" in file "app/views/layouts/application.html.erb"
|
|
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/application.css"
|
|
14
|
+
|
|
15
|
+
Scenario: Generate named layout with haml and sass
|
|
16
|
+
Given a new Rails app
|
|
17
|
+
When I run "rails g nifty:layout FooBar --haml -f"
|
|
18
|
+
Then I should see "stylesheet_link_tag "foo_bar"" in file "app/views/layouts/foo_bar.html.haml"
|
|
19
|
+
And I should see file "public/stylesheets/sass/foo_bar.sass"
|
|
20
|
+
And I should see file "app/helpers/layout_helper.rb"
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
Feature: Nifty 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 nifty: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.erb |
|
|
14
|
+
| app/views/projects/show.html.erb |
|
|
15
|
+
| app/views/projects/new.html.erb |
|
|
16
|
+
| app/views/projects/edit.html.erb |
|
|
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 nifty:layout -f"
|
|
21
|
+
And I run "rake db:migrate"
|
|
22
|
+
And I should successfully run "rails g nifty:scaffold Project -f"
|
|
23
|
+
Then I should successfully run "rake test"
|
|
24
|
+
|
|
25
|
+
Scenario: Generate scaffold with rspec tests
|
|
26
|
+
Given a new Rails app
|
|
27
|
+
When I run "rails g nifty:scaffold Project name:string --rspec"
|
|
28
|
+
Then I should see the following files
|
|
29
|
+
| spec/models/project_spec.rb |
|
|
30
|
+
| spec/controllers/projects_controller_spec.rb |
|
|
31
|
+
When I run "rails g nifty:scaffold Task project_id:integer"
|
|
32
|
+
Then I should see the following files
|
|
33
|
+
| spec/models/task_spec.rb |
|
|
34
|
+
| spec/controllers/tasks_controller_spec.rb |
|
|
35
|
+
When I run "rails g nifty:layout -f"
|
|
36
|
+
And I run "rake db:migrate"
|
|
37
|
+
And I add "gem 'rspec-rails', '>= 2.0.0.beta.19'" to file "Gemfile"
|
|
38
|
+
And I run "rails g rspec:install"
|
|
39
|
+
And I replace "mock_with :rspec" with "mock_with :mocha" in file "spec/spec_helper.rb"
|
|
40
|
+
Then I should successfully run "rake spec"
|
|
41
|
+
|
|
42
|
+
Scenario: Report error when invalid model name
|
|
43
|
+
Given a new Rails app
|
|
44
|
+
Then I should see "Usage:" when running "rails g nifty:scaffold name:string parent_id:integer"
|
|
45
|
+
|
|
46
|
+
Scenario: Generate scaffold for namespaced resource
|
|
47
|
+
Given a new Rails app
|
|
48
|
+
When I run "rails g nifty:scaffold Admin::User name:string"
|
|
49
|
+
Then I should see the following files
|
|
50
|
+
| app/models/user.rb |
|
|
51
|
+
| app/controllers/admin/users_controller.rb |
|
|
52
|
+
| app/helpers/admin/users_helper.rb |
|
|
53
|
+
| app/views/admin/users/index.html.erb |
|
|
54
|
+
| app/views/admin/users/show.html.erb |
|
|
55
|
+
| app/views/admin/users/new.html.erb |
|
|
56
|
+
| app/views/admin/users/edit.html.erb |
|
|
57
|
+
| db/migrate |
|
|
58
|
+
And I should see "class User" in file "app/models/user.rb"
|
|
59
|
+
And I should not see "set_table_name :" in file "app/models/user.rb"
|
|
60
|
+
And I should see "namespace(:admin){ resources :users }" in file "config/routes.rb"
|
|
61
|
+
When I run "rails g nifty:layout -f"
|
|
62
|
+
And I run "rake db:migrate"
|
|
63
|
+
And I should successfully run "rails g nifty:scaffold Admin::User -f"
|
|
64
|
+
Then I should successfully run "rake test"
|
|
65
|
+
|
|
66
|
+
Scenario: Generate scaffold with a namespaced model
|
|
67
|
+
Given a new Rails app
|
|
68
|
+
When I run "rails g nifty:scaffold Admin::User name:string --namespace_model"
|
|
69
|
+
Then I should see "class Admin::User" in file "app/models/admin/user.rb"
|
|
70
|
+
And I should see "set_table_name :admin_users" in file "app/models/admin/user.rb"
|
|
71
|
+
When I run "rails g nifty:layout -f"
|
|
72
|
+
And I run "rake db:migrate"
|
|
73
|
+
And I should successfully run "rails g nifty:scaffold Admin::User -f --namespace_model"
|
|
74
|
+
Then I should successfully run "rake test"
|
|
75
|
+
|
|
76
|
+
Scenario: Given scaffold with a new and index action
|
|
77
|
+
Given a new Rails app
|
|
78
|
+
When I run "rails g nifty:scaffold Project name:string index new"
|
|
79
|
+
Then I should see "class Project" in file "app/models/project.rb"
|
|
80
|
+
And I should see "<%= form_for @project do |f| %>" in file "app/views/projects/new.html.erb"
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
When /^I run "([^\"]*)"$/ do |command|
|
|
2
|
+
system("cd #{@current_directory} && #{command}").should be_true
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
When /^I add "([^\"]*)" to file "([^\"]*)"$/ do |content, short_path|
|
|
6
|
+
path = File.join(@current_directory, short_path)
|
|
7
|
+
File.should exist(path)
|
|
8
|
+
File.open(path, 'a') { |f| f.write(content + "\n") }
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
When /^I replace "([^\"]*)" with "([^\"]*)" in file "([^\"]*)"$/ do |old_content, new_content, short_path|
|
|
12
|
+
path = File.join(@current_directory, short_path)
|
|
13
|
+
File.should exist(path)
|
|
14
|
+
content = File.read(path).gsub(old_content, new_content)
|
|
15
|
+
File.open(path, 'w') { |f| f.write(content) }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
When /^I insert "([^\"]*)" into "([^\"]*)" after line (\d+)$/ do |content, short_path, after_line|
|
|
19
|
+
path = File.join(@current_directory, short_path)
|
|
20
|
+
File.should exist(path)
|
|
21
|
+
lines = File.read(path).split("\n")
|
|
22
|
+
lines[after_line.to_i, 0] = content
|
|
23
|
+
File.open(path, 'w') { |f| f.write(lines.join("\n")) }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
Then /^I should see file "([^\"]*)"$/ do |path|
|
|
27
|
+
File.should exist(File.join(@current_directory, path))
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
Then /^I should see "(.*)" in file "([^\"]*)"$/ do |content, short_path|
|
|
31
|
+
path = File.join(@current_directory, short_path)
|
|
32
|
+
File.should exist(path)
|
|
33
|
+
File.readlines(path).join.should include(content)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
Then /^I should not see "(.*)" in file "([^\"]*)"$/ do |content, short_path|
|
|
37
|
+
path = File.join(@current_directory, short_path)
|
|
38
|
+
File.should exist(path)
|
|
39
|
+
File.readlines(path).join.should_not include(content)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
Then /^I should see the following files$/ do |table|
|
|
43
|
+
table.raw.flatten.each do |path|
|
|
44
|
+
File.should exist(File.join(@current_directory, path))
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
Then /^I should see the following in file "([^\"]*)"$/ do |short_path, table|
|
|
49
|
+
path = File.join(@current_directory, short_path)
|
|
50
|
+
File.should exist(path)
|
|
51
|
+
table.raw.flatten.each do |content|
|
|
52
|
+
File.readlines(path).join.should include(content)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
Then /^I should successfully run "([^\"]*)"$/ do |command|
|
|
57
|
+
system("cd #{@current_directory} && #{command}").should be_true
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
Then /^I should see "([^\"]*)" when running "([^\"]*)"$/ do |expected_response, command|
|
|
61
|
+
`cd #{@current_directory} && #{command}`.should include(expected_response)
|
|
62
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require 'rails/generators/base'
|
|
2
|
+
|
|
3
|
+
module Nifty
|
|
4
|
+
module Generators
|
|
5
|
+
class Base < Rails::Generators::Base #:nodoc:
|
|
6
|
+
def self.source_root
|
|
7
|
+
@_nifty_source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'nifty', generator_name, 'templates'))
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.banner
|
|
11
|
+
"rails generate nifty:#{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,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
|
+
gem "authlogic" # in Gemfile
|
|
19
|
+
|
|
20
|
+
Examples:
|
|
21
|
+
rails generate nifty:authentication
|
|
22
|
+
|
|
23
|
+
Creates user model, users_controller, and sessions_controller.
|
|
24
|
+
|
|
25
|
+
rails generate nifty:authentication account
|
|
26
|
+
|
|
27
|
+
Creates account model, accounts_controller, and sessions_controller.
|
|
28
|
+
|
|
29
|
+
rails 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,154 @@
|
|
|
1
|
+
require 'generators/nifty'
|
|
2
|
+
require 'rails/generators/migration'
|
|
3
|
+
|
|
4
|
+
module Nifty
|
|
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 => '[[DEFAULT]]', :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
|
+
class_option :haml, :desc => 'Generate HAML views instead of ERB.', :type => :boolean
|
|
17
|
+
class_option :authlogic, :desc => 'Use Authlogic for authentication.', :type => :boolean
|
|
18
|
+
|
|
19
|
+
def add_gems
|
|
20
|
+
add_gem "bcrypt-ruby", :require => "bcrypt"
|
|
21
|
+
add_gem "mocha", :group => :test
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def create_model_files
|
|
25
|
+
template 'user.rb', "app/models/#{user_singular_name}.rb"
|
|
26
|
+
template 'authlogic_session.rb', "app/models/#{user_singular_name}_session.rb" if options.authlogic?
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def create_controller_files
|
|
30
|
+
template 'users_controller.rb', "app/controllers/#{user_plural_name}_controller.rb"
|
|
31
|
+
template 'sessions_controller.rb', "app/controllers/#{session_plural_name}_controller.rb"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def create_helper_files
|
|
35
|
+
template 'users_helper.rb', "app/helpers/#{user_plural_name}_helper.rb"
|
|
36
|
+
template 'sessions_helper.rb', "app/helpers/#{session_plural_name}_helper.rb"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def create_view_files
|
|
40
|
+
template "views/#{view_language}/signup.html.#{view_language}", "app/views/#{user_plural_name}/new.html.#{view_language}"
|
|
41
|
+
template "views/#{view_language}/edit.html.#{view_language}", "app/views/#{user_plural_name}/edit.html.#{view_language}"
|
|
42
|
+
template "views/#{view_language}/_form.html.#{view_language}", "app/views/#{user_plural_name}/_form.html.#{view_language}"
|
|
43
|
+
template "views/#{view_language}/login.html.#{view_language}", "app/views/#{session_plural_name}/new.html.#{view_language}"
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def create_lib_files
|
|
47
|
+
template 'controller_authentication.rb', 'lib/controller_authentication.rb'
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def create_routes
|
|
51
|
+
route "resources #{user_plural_name.to_sym.inspect}"
|
|
52
|
+
route "resources #{session_plural_name.to_sym.inspect}"
|
|
53
|
+
route "match 'login' => '#{session_plural_name}#new', :as => :login"
|
|
54
|
+
route "match 'logout' => '#{session_plural_name}#destroy', :as => :logout"
|
|
55
|
+
route "match 'signup' => '#{user_plural_name}#new', :as => :signup"
|
|
56
|
+
route "match '#{user_singular_name}/edit' => '#{user_plural_name}#edit', :as => :edit_current_#{user_singular_name}"
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def create_migration
|
|
60
|
+
migration_template 'migration.rb', "db/migrate/create_#{user_plural_name}.rb"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def load_and_include_authentication
|
|
64
|
+
inject_into_class "config/application.rb", "Application", " config.autoload_paths << \"\#{config.root}/lib\""
|
|
65
|
+
inject_into_class "app/controllers/application_controller.rb", "ApplicationController", " include ControllerAuthentication\n"
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def create_test_files
|
|
69
|
+
if test_framework == :rspec
|
|
70
|
+
template 'fixtures.yml', "spec/fixtures/#{user_plural_name}.yml"
|
|
71
|
+
template 'tests/rspec/user.rb', "spec/models/#{user_singular_name}_spec.rb"
|
|
72
|
+
template 'tests/rspec/users_controller.rb', "spec/controllers/#{user_plural_name}_controller_spec.rb"
|
|
73
|
+
template 'tests/rspec/sessions_controller.rb', "spec/controllers/#{session_plural_name}_controller_spec.rb"
|
|
74
|
+
else
|
|
75
|
+
template 'fixtures.yml', "test/fixtures/#{user_plural_name}.yml"
|
|
76
|
+
template "tests/#{test_framework}/user.rb", "test/unit/#{user_singular_name}_test.rb"
|
|
77
|
+
template "tests/#{test_framework}/users_controller.rb", "test/functional/#{user_plural_name}_controller_test.rb"
|
|
78
|
+
template "tests/#{test_framework}/sessions_controller.rb", "test/functional/#{session_plural_name}_controller_test.rb"
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
private
|
|
83
|
+
|
|
84
|
+
def session_name
|
|
85
|
+
@_session_name ||= @session_name == '[[DEFAULT]]' ?
|
|
86
|
+
(options.authlogic? ? user_name + '_session' : 'session') :
|
|
87
|
+
@session_name
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def user_singular_name
|
|
91
|
+
user_name.underscore
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def user_plural_name
|
|
95
|
+
user_singular_name.pluralize
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def user_class_name
|
|
99
|
+
user_name.camelize
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def user_plural_class_name
|
|
103
|
+
user_plural_name.camelize
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def session_singular_name
|
|
107
|
+
session_name.underscore
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def session_plural_name
|
|
111
|
+
session_singular_name.pluralize
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def session_class_name
|
|
115
|
+
session_name.camelize
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def session_plural_class_name
|
|
119
|
+
session_plural_name.camelize
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def view_language
|
|
123
|
+
options.haml? ? 'haml' : 'erb'
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def test_framework
|
|
127
|
+
return @test_framework if defined?(@test_framework)
|
|
128
|
+
if options.testunit?
|
|
129
|
+
return @test_framework = :testunit
|
|
130
|
+
elsif options.rspec?
|
|
131
|
+
return @test_framework = :rspec
|
|
132
|
+
elsif options.shoulda?
|
|
133
|
+
return @test_framework = :shoulda
|
|
134
|
+
else
|
|
135
|
+
return @test_framework = File.exist?(destination_path('spec')) ? :rspec : :testunit
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def destination_path(path)
|
|
140
|
+
File.join(destination_root, path)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# FIXME: Should be proxied to ActiveRecord::Generators::Base
|
|
144
|
+
# Implement the required interface for Rails::Generators::Migration.
|
|
145
|
+
def self.next_migration_number(dirname) #:nodoc:
|
|
146
|
+
if ActiveRecord::Base.timestamped_migrations
|
|
147
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
|
148
|
+
else
|
|
149
|
+
"%.3d" % (current_migration_number(dirname) + 1)
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|