nifty-generators 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (27) hide show
  1. data/CHANGELOG +17 -0
  2. data/Gemfile +2 -0
  3. data/Gemfile.lock +110 -0
  4. data/Rakefile +1 -9
  5. data/features/nifty_authentication.feature +27 -9
  6. data/features/nifty_layout.feature +1 -0
  7. data/features/nifty_scaffold.feature +6 -3
  8. data/features/step_definitions/common_steps.rb +7 -0
  9. data/features/support/env.rb +1 -1
  10. data/features/support/matchers.rb +1 -1
  11. data/lib/generators/nifty/authentication/authentication_generator.rb +10 -2
  12. data/lib/generators/nifty/authentication/templates/{authentication.rb → controller_authentication.rb} +4 -3
  13. data/lib/generators/nifty/authentication/templates/tests/rspec/users_controller.rb +30 -0
  14. data/lib/generators/nifty/authentication/templates/tests/shoulda/users_controller.rb +36 -2
  15. data/lib/generators/nifty/authentication/templates/tests/testunit/users_controller.rb +30 -0
  16. data/lib/generators/nifty/authentication/templates/user.rb +2 -2
  17. data/lib/generators/nifty/authentication/templates/users_controller.rb +16 -0
  18. data/lib/generators/nifty/authentication/templates/views/erb/_form.html.erb +20 -0
  19. data/lib/generators/nifty/authentication/templates/views/erb/edit.html.erb +3 -0
  20. data/lib/generators/nifty/authentication/templates/views/erb/signup.html.erb +1 -20
  21. data/lib/generators/nifty/authentication/templates/views/haml/_form.html.haml +20 -0
  22. data/lib/generators/nifty/authentication/templates/views/haml/edit.html.haml +3 -0
  23. data/lib/generators/nifty/authentication/templates/views/haml/signup.html.haml +1 -20
  24. data/lib/generators/nifty/layout/templates/layout_helper.rb +1 -1
  25. data/lib/generators/nifty/scaffold/scaffold_generator.rb +6 -2
  26. data/rails_generators/nifty_authentication/templates/fixtures.yml +4 -4
  27. metadata +101 -6
data/CHANGELOG CHANGED
@@ -1,3 +1,20 @@
1
+ 0.4.2 (October 15, 2010)
2
+
3
+ * adding mocha to Gemfile automatically if it's not there already
4
+
5
+ * switching to BCrypt for user password encryption on nifty:authentication - issue #53
6
+
7
+ * adding Gemfile, now just run "bunde" and "rake" to get cucumber features running - issue #56
8
+
9
+ * renaming Authentication module to ControllerAuthentication to avoid conflicts in nifty:authentication - issue #57
10
+
11
+ * automatically use RSpec when there's a spec directory - issue #50
12
+
13
+ * escaping page title in layout helper (thanks cbmeeks) - issue #52
14
+
15
+ * adding edit profile page to nifty:authentication - closes #54
16
+
17
+
1
18
  0.4.1 (September 23rd, 2010)
2
19
 
3
20
  * fixing frozen hash error when not passing additional arguments to nifty:scaffold - issue #35
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "http://rubygems.org"
2
+ gemspec
@@ -0,0 +1,110 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ nifty-generators (0.4.1)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+ abstract (1.0.0)
10
+ actionmailer (3.0.1)
11
+ actionpack (= 3.0.1)
12
+ mail (~> 2.2.5)
13
+ actionpack (3.0.1)
14
+ activemodel (= 3.0.1)
15
+ activesupport (= 3.0.1)
16
+ builder (~> 2.1.2)
17
+ erubis (~> 2.6.6)
18
+ i18n (~> 0.4.1)
19
+ rack (~> 1.2.1)
20
+ rack-mount (~> 0.6.12)
21
+ rack-test (~> 0.5.4)
22
+ tzinfo (~> 0.3.23)
23
+ activemodel (3.0.1)
24
+ activesupport (= 3.0.1)
25
+ builder (~> 2.1.2)
26
+ i18n (~> 0.4.1)
27
+ activerecord (3.0.1)
28
+ activemodel (= 3.0.1)
29
+ activesupport (= 3.0.1)
30
+ arel (~> 1.0.0)
31
+ tzinfo (~> 0.3.23)
32
+ activeresource (3.0.1)
33
+ activemodel (= 3.0.1)
34
+ activesupport (= 3.0.1)
35
+ activesupport (3.0.1)
36
+ arel (1.0.1)
37
+ activesupport (~> 3.0.0)
38
+ bcrypt-ruby (2.1.2)
39
+ builder (2.1.2)
40
+ cucumber (0.9.2)
41
+ builder (~> 2.1.2)
42
+ diff-lcs (~> 1.1.2)
43
+ gherkin (~> 2.2.5)
44
+ json (~> 1.4.6)
45
+ term-ansicolor (~> 1.0.5)
46
+ diff-lcs (1.1.2)
47
+ erubis (2.6.6)
48
+ abstract (>= 1.0.0)
49
+ gherkin (2.2.9)
50
+ json (~> 1.4.6)
51
+ term-ansicolor (~> 1.0.5)
52
+ i18n (0.4.1)
53
+ json (1.4.6)
54
+ mail (2.2.7)
55
+ activesupport (>= 2.3.6)
56
+ mime-types
57
+ treetop (>= 1.4.5)
58
+ mime-types (1.16)
59
+ mocha (0.9.8)
60
+ rake
61
+ polyglot (0.3.1)
62
+ rack (1.2.1)
63
+ rack-mount (0.6.13)
64
+ rack (>= 1.0.0)
65
+ rack-test (0.5.6)
66
+ rack (>= 1.0)
67
+ rails (3.0.1)
68
+ actionmailer (= 3.0.1)
69
+ actionpack (= 3.0.1)
70
+ activerecord (= 3.0.1)
71
+ activeresource (= 3.0.1)
72
+ activesupport (= 3.0.1)
73
+ bundler (~> 1.0.0)
74
+ railties (= 3.0.1)
75
+ railties (3.0.1)
76
+ actionpack (= 3.0.1)
77
+ activesupport (= 3.0.1)
78
+ rake (>= 0.8.4)
79
+ thor (~> 0.14.0)
80
+ rake (0.8.7)
81
+ rspec (2.0.0)
82
+ rspec-core (= 2.0.0)
83
+ rspec-expectations (= 2.0.0)
84
+ rspec-mocks (= 2.0.0)
85
+ rspec-core (2.0.0)
86
+ rspec-expectations (2.0.0)
87
+ diff-lcs (>= 1.1.2)
88
+ rspec-mocks (2.0.0)
89
+ rspec-core (= 2.0.0)
90
+ rspec-expectations (= 2.0.0)
91
+ rspec-rails (2.0.1)
92
+ rspec (~> 2.0.0)
93
+ sqlite3-ruby (1.3.1)
94
+ term-ansicolor (1.0.5)
95
+ thor (0.14.3)
96
+ treetop (1.4.8)
97
+ polyglot (>= 0.3.1)
98
+ tzinfo (0.3.23)
99
+
100
+ PLATFORMS
101
+ ruby
102
+
103
+ DEPENDENCIES
104
+ bcrypt-ruby (~> 2.1.2)
105
+ cucumber (~> 0.9.2)
106
+ mocha (~> 0.9.8)
107
+ nifty-generators!
108
+ rails (~> 3.0.0)
109
+ rspec-rails (~> 2.0.1)
110
+ sqlite3-ruby (~> 1.3.1)
data/Rakefile CHANGED
@@ -1,18 +1,10 @@
1
1
  require 'rubygems'
2
2
  require 'rake'
3
- require 'rake/testtask'
4
3
  require 'cucumber'
5
4
  require 'cucumber/rake/task'
6
5
 
7
- desc "Run tests."
8
- Rake::TestTask.new do |t|
9
- t.libs << "test"
10
- t.test_files = FileList['test/test*.rb']
11
- t.verbose = true
12
- end
13
-
14
6
  Cucumber::Rake::Task.new(:features) do |t|
15
7
  t.cucumber_opts = "features --format progress"
16
8
  end
17
9
 
18
- task :default => [:test, :features]
10
+ task :default => :features
@@ -11,10 +11,11 @@ Feature: Nifty Authentication Generator
11
11
  | app/controllers/users_controller.rb |
12
12
  | app/helpers/users_helper.rb |
13
13
  | app/views/users/new.html.erb |
14
+ | app/views/users/edit.html.erb |
14
15
  | app/controllers/sessions_controller.rb |
15
16
  | app/helpers/sessions_helper.rb |
16
17
  | app/views/sessions/new.html.erb |
17
- | lib/authentication.rb |
18
+ | lib/controller_authentication.rb |
18
19
  | test/fixtures/users.yml |
19
20
  | test/unit/user_test.rb |
20
21
  | test/functional/users_controller_test.rb |
@@ -26,10 +27,12 @@ Feature: Nifty Authentication Generator
26
27
  | match 'login' => 'sessions#new', :as => :login |
27
28
  | match 'logout' => 'sessions#destroy', :as => :logout |
28
29
  | match 'signup' => 'users#new', :as => :signup |
29
- And I should see "include Authentication" in file "app/controllers/application_controller.rb"
30
+ | match 'user/edit' => 'users#edit', :as => :edit_user |
31
+ And I should see "include ControllerAuthentication" in file "app/controllers/application_controller.rb"
32
+ And I should see "gem "mocha", :group => :test" in file "Gemfile"
33
+ And I should see "gem "bcrypt-ruby", :require => "bcrypt"" in file "Gemfile"
30
34
  When I run "rails g nifty:layout -f"
31
35
  And I run "rake db:migrate"
32
- And I add "gem 'mocha', :group => :test" to file "Gemfile"
33
36
  Then I should successfully run "rake test"
34
37
 
35
38
  Scenario: Generate named authentication
@@ -40,6 +43,7 @@ Feature: Nifty Authentication Generator
40
43
  | app/controllers/accounts_controller.rb |
41
44
  | app/helpers/accounts_helper.rb |
42
45
  | app/views/accounts/new.html.erb |
46
+ | app/views/accounts/edit.html.erb |
43
47
  | app/controllers/current_sessions_controller.rb |
44
48
  | app/helpers/current_sessions_helper.rb |
45
49
  | app/views/current_sessions/new.html.erb |
@@ -48,12 +52,26 @@ Feature: Nifty Authentication Generator
48
52
  | test/functional/accounts_controller_test.rb |
49
53
  | test/functional/current_sessions_controller_test.rb |
50
54
  And I should see the following in file "config/routes.rb"
51
- | resources :current_sessions |
52
- | resources :accounts |
53
- | match 'login' => 'current_sessions#new', :as => :login |
54
- | match 'logout' => 'current_sessions#destroy', :as => :logout |
55
- | match 'signup' => 'accounts#new', :as => :signup |
55
+ | resources :current_sessions |
56
+ | resources :accounts |
57
+ | match 'login' => 'current_sessions#new', :as => :login |
58
+ | match 'logout' => 'current_sessions#destroy', :as => :logout |
59
+ | match 'signup' => 'accounts#new', :as => :signup |
60
+ | match 'account/edit' => 'accounts#edit', :as => :edit_account |
56
61
  When I run "rails g nifty:layout -f"
57
62
  And I run "rake db:migrate"
58
- And I add "gem 'mocha', :group => :test" to file "Gemfile"
59
63
  Then I should successfully run "rake test"
64
+
65
+ Scenario: Generate named authentication with rspec
66
+ Given a new Rails app
67
+ When I run "rails g nifty:authentication Account CurrentSession --rspec"
68
+ Then I should see the following files
69
+ | spec/models/account_spec.rb |
70
+ | spec/controllers/accounts_controller_spec.rb |
71
+ | spec/controllers/current_sessions_controller_spec.rb |
72
+ When I run "rails g nifty:layout -f"
73
+ And I run "rake db:migrate"
74
+ And I add "gem 'rspec-rails', '>= 2.0.1'" to file "Gemfile"
75
+ And I run "rails g rspec:install"
76
+ And I replace "mock_with :rspec" with "mock_with :mocha" in file "spec/spec_helper.rb"
77
+ Then I should successfully run "rake spec"
@@ -7,6 +7,7 @@ Feature: Nifty Layout Generator
7
7
  Given a new Rails app
8
8
  When I run "rails g nifty:layout -f"
9
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"
10
11
  And I should see file "app/helpers/layout_helper.rb"
11
12
  And I should see file "app/helpers/error_messages_helper.rb"
12
13
  And I should see file "public/stylesheets/application.css"
@@ -16,10 +16,10 @@ Feature: Nifty Scaffold Generator
16
16
  | app/views/projects/edit.html.erb |
17
17
  | db/migrate |
18
18
  And I should see "resources :projects" in file "config/routes.rb"
19
+ And I should see "gem "mocha", :group => :test" in file "Gemfile"
19
20
  When I run "rails g nifty:layout -f"
20
21
  And I run "rake db:migrate"
21
22
  And I should successfully run "rails g nifty:scaffold Project -f"
22
- And I add "gem 'mocha', :group => :test" to file "Gemfile"
23
23
  Then I should successfully run "rake test"
24
24
 
25
25
  Scenario: Generate scaffold with rspec tests
@@ -28,10 +28,13 @@ Feature: Nifty Scaffold Generator
28
28
  Then I should see the following files
29
29
  | spec/models/project_spec.rb |
30
30
  | spec/controllers/projects_controller_spec.rb |
31
- And I should see "resources :projects" in file "config/routes.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 |
32
35
  When I run "rails g nifty:layout -f"
33
36
  And I run "rake db:migrate"
34
- And I add "gem 'mocha', :group => :test" to file "Gemfile"
35
37
  And I add "gem 'rspec-rails', '>= 2.0.0.beta.19'" to file "Gemfile"
36
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"
37
40
  Then I should successfully run "rake spec"
@@ -8,6 +8,13 @@ When /^I add "([^\"]*)" to file "([^\"]*)"$/ do |content, short_path|
8
8
  File.open(path, 'a') { |f| f.write(content + "\n") }
9
9
  end
10
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
+
11
18
  Then /^I should see file "([^\"]*)"$/ do |path|
12
19
  File.should exist(File.join(@current_directory, path))
13
20
  end
@@ -1,5 +1,5 @@
1
1
  require 'cucumber'
2
- require 'spec'
2
+ require 'rspec'
3
3
 
4
4
  Before do
5
5
  FileUtils.rm_rf "tmp/rails_app"
@@ -1,4 +1,4 @@
1
- Spec::Matchers.define :exist do |path|
1
+ RSpec::Matchers.define :exist do |path|
2
2
  match do
3
3
  File.exist?(path)
4
4
  end
@@ -16,6 +16,11 @@ module Nifty
16
16
  class_option :haml, :desc => 'Generate HAML views instead of ERB.', :type => :boolean
17
17
  class_option :authlogic, :desc => 'Use Authlogic for authentication.', :type => :boolean
18
18
 
19
+ def add_gems
20
+ gem "bcrypt-ruby", :require => "bcrypt" unless File.read(destination_path("Gemfile")).include? "bcrypt"
21
+ gem "mocha", :group => :test unless File.read(destination_path("Gemfile")).include? "mocha"
22
+ end
23
+
19
24
  def create_model_files
20
25
  template 'user.rb', "app/models/#{user_singular_name}.rb"
21
26
  template 'authlogic_session.rb', "app/models/#{user_singular_name}_session.rb" if options.authlogic?
@@ -33,11 +38,13 @@ module Nifty
33
38
 
34
39
  def create_view_files
35
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}"
36
43
  template "views/#{view_language}/login.html.#{view_language}", "app/views/#{session_plural_name}/new.html.#{view_language}"
37
44
  end
38
45
 
39
46
  def create_lib_files
40
- template 'authentication.rb', 'lib/authentication.rb'
47
+ template 'controller_authentication.rb', 'lib/controller_authentication.rb'
41
48
  end
42
49
 
43
50
  def create_routes
@@ -46,6 +53,7 @@ module Nifty
46
53
  route "match 'login' => '#{session_plural_name}#new', :as => :login"
47
54
  route "match 'logout' => '#{session_plural_name}#destroy', :as => :logout"
48
55
  route "match 'signup' => '#{user_plural_name}#new', :as => :signup"
56
+ route "match '#{user_singular_name}/edit' => '#{user_plural_name}#edit', :as => :edit_#{user_singular_name}"
49
57
  end
50
58
 
51
59
  def create_migration
@@ -54,7 +62,7 @@ module Nifty
54
62
 
55
63
  def load_and_include_authentication
56
64
  inject_into_class "config/application.rb", "Application", " config.autoload_paths << \"\#{config.root}/lib\""
57
- inject_into_class "app/controllers/application_controller.rb", "ApplicationController", " include Authentication\n"
65
+ inject_into_class "app/controllers/application_controller.rb", "ApplicationController", " include ControllerAuthentication\n"
58
66
  end
59
67
 
60
68
  def create_test_files
@@ -3,7 +3,8 @@
3
3
  # common example you might add to your application layout file.
4
4
  #
5
5
  # <%% if logged_in? %>
6
- # Welcome <%%= current_<%= user_singular_name %>.username %>! Not you?
6
+ # Welcome <%%= current_<%= user_singular_name %>.username %>.
7
+ # <%%= link_to "Edit profile", edit_<%= user_singular_name %>_path %> or
7
8
  # <%%= link_to "Log out", logout_path %>
8
9
  # <%% else %>
9
10
  # <%%= link_to "Sign up", signup_path %> or
@@ -14,7 +15,7 @@
14
15
  # a before filter. For example.
15
16
  #
16
17
  # before_filter :login_required, :except => [:index, :show]
17
- module Authentication
18
+ module ControllerAuthentication
18
19
  def self.included(controller)
19
20
  controller.send :helper_method, :current_<%= user_singular_name %>, :logged_in?, :redirect_to_target_or_default
20
21
  end
@@ -55,6 +56,6 @@ module Authentication
55
56
  private
56
57
 
57
58
  def store_target_location
58
- session[:return_to] = request.request_uri
59
+ session[:return_to] = request.url
59
60
  end
60
61
  end
@@ -23,4 +23,34 @@ describe <%= user_plural_class_name %>Controller do
23
23
  session['<%= user_singular_name %>_id'].should == assigns['<%= user_singular_name %>'].id
24
24
  <%- end -%>
25
25
  end
26
+
27
+ it "edit action should redirect when not logged in" do
28
+ get :edit, :id => "ignored"
29
+ response.should redirect_to(login_url)
30
+ end
31
+
32
+ it "edit action should render edit template" do
33
+ @controller.stubs(:current_<%= user_singular_name %>).returns(<%= user_class_name %>.first)
34
+ get :edit, :id => "ignored"
35
+ response.should render_template(:edit)
36
+ end
37
+
38
+ it "update action should redirect when not logged in" do
39
+ put :update, :id => "ignored"
40
+ response.should redirect_to(login_url)
41
+ end
42
+
43
+ it "update action should render edit template when <%= user_singular_name %> is invalid" do
44
+ @controller.stubs(:current_<%= user_singular_name %>).returns(<%= user_class_name %>.first)
45
+ <%= user_class_name %>.any_instance.stubs(:valid?).returns(false)
46
+ put :update, :id => "ignored"
47
+ response.should render_template(:edit)
48
+ end
49
+
50
+ it "update action should redirect when <%= user_singular_name %> is valid" do
51
+ @controller.stubs(:current_<%= user_singular_name %>).returns(<%= user_class_name %>.first)
52
+ <%= user_class_name %>.any_instance.stubs(:valid?).returns(true)
53
+ put :update, :id => "ignored"
54
+ response.should redirect_to("/")
55
+ end
26
56
  end
@@ -9,13 +9,13 @@ class <%= user_plural_class_name %>ControllerTest < ActionController::TestCase
9
9
  end
10
10
 
11
11
  context "create action" do
12
- should "render new template when model is invalid" do
12
+ should "render new template when <%= user_singular_name %> is invalid" do
13
13
  <%= user_class_name %>.any_instance.stubs(:valid?).returns(false)
14
14
  post :create
15
15
  assert_template 'new'
16
16
  end
17
17
 
18
- should "redirect when model is valid" do
18
+ should "redirect when <%= user_singular_name %> is valid" do
19
19
  <%= user_class_name %>.any_instance.stubs(:valid?).returns(true)
20
20
  post :create
21
21
  assert_redirected_to "/"
@@ -24,4 +24,38 @@ class <%= user_plural_class_name %>ControllerTest < ActionController::TestCase
24
24
  <%- end -%>
25
25
  end
26
26
  end
27
+
28
+ context "edit action" do
29
+ should "redirect when not logged in" do
30
+ get :edit, :id => "ignored"
31
+ assert_redirected_to login_url
32
+ end
33
+
34
+ should "render edit template" do
35
+ @controller.stubs(:current_<%= user_singular_name %>).returns(<%= user_class_name %>.first)
36
+ get :edit, :id => "ignored"
37
+ assert_template 'edit'
38
+ end
39
+ end
40
+
41
+ context "update action" do
42
+ should "redirect when not logged in" do
43
+ put :update, :id => "ignored"
44
+ assert_redirected_to login_url
45
+ end
46
+
47
+ should "render edit template when <%= user_singular_name %> is invalid" do
48
+ @controller.stubs(:current_<%= user_singular_name %>).returns(<%= user_class_name %>.first)
49
+ <%= user_class_name %>.any_instance.stubs(:valid?).returns(false)
50
+ put :update, :id => "ignored"
51
+ assert_template 'edit'
52
+ end
53
+
54
+ should "redirect when <%= user_singular_name %> is valid" do
55
+ @controller.stubs(:current_<%= user_singular_name %>).returns(<%= user_class_name %>.first)
56
+ <%= user_class_name %>.any_instance.stubs(:valid?).returns(true)
57
+ put :update, :id => "ignored"
58
+ assert_redirected_to "/"
59
+ end
60
+ end
27
61
  end
@@ -20,4 +20,34 @@ class <%= user_plural_class_name %>ControllerTest < ActionController::TestCase
20
20
  assert_equal assigns['<%= user_singular_name %>'].id, session['<%= user_singular_name %>_id']
21
21
  <%- end -%>
22
22
  end
23
+
24
+ def test_edit_without_user
25
+ get :edit, :id => "ignored"
26
+ assert_redirected_to login_url
27
+ end
28
+
29
+ def test_edit
30
+ @controller.stubs(:current_<%= user_singular_name %>).returns(<%= user_class_name %>.first)
31
+ get :edit, :id => "ignored"
32
+ assert_template 'edit'
33
+ end
34
+
35
+ def test_update_without_user
36
+ put :update, :id => "ignored"
37
+ assert_redirected_to login_url
38
+ end
39
+
40
+ def test_update_invalid
41
+ @controller.stubs(:current_<%= user_singular_name %>).returns(<%= user_class_name %>.first)
42
+ <%= user_class_name %>.any_instance.stubs(:valid?).returns(false)
43
+ put :update, :id => "ignored"
44
+ assert_template 'edit'
45
+ end
46
+
47
+ def test_update_valid
48
+ @controller.stubs(:current_<%= user_singular_name %>).returns(<%= user_class_name %>.first)
49
+ <%= user_class_name %>.any_instance.stubs(:valid?).returns(true)
50
+ put :update, :id => "ignored"
51
+ assert_redirected_to "/"
52
+ end
23
53
  end
@@ -30,13 +30,13 @@ class <%= user_class_name %> < ActiveRecord::Base
30
30
 
31
31
  def prepare_password
32
32
  unless password.blank?
33
- self.password_salt = Digest::SHA1.hexdigest([Time.now, rand].join)
33
+ self.password_salt = BCrypt::Engine.generate_salt
34
34
  self.password_hash = encrypt_password(password)
35
35
  end
36
36
  end
37
37
 
38
38
  def encrypt_password(pass)
39
- Digest::SHA1.hexdigest([pass, password_salt].join)
39
+ BCrypt::Engine.hash_secret(pass, password_salt)
40
40
  end
41
41
  <%- end -%>
42
42
  end
@@ -1,4 +1,6 @@
1
1
  class <%= user_plural_class_name %>Controller < ApplicationController
2
+ before_filter :login_required, :except => [:new, :create]
3
+
2
4
  def new
3
5
  @<%= user_singular_name %> = <%= user_class_name %>.new
4
6
  end
@@ -15,4 +17,18 @@ class <%= user_plural_class_name %>Controller < ApplicationController
15
17
  render :action => 'new'
16
18
  end
17
19
  end
20
+
21
+ def edit
22
+ @<%= user_singular_name %> = current_<%= user_singular_name %>
23
+ end
24
+
25
+ def update
26
+ @<%= user_singular_name %> = current_<%= user_singular_name %>
27
+ if @<%= user_singular_name %>.update_attributes(params[:<%= user_singular_name %>])
28
+ flash[:notice] = "Your profile has been updated."
29
+ redirect_to "/"
30
+ else
31
+ render :action => 'edit'
32
+ end
33
+ end
18
34
  end
@@ -0,0 +1,20 @@
1
+ <%%= form_for @<%= user_singular_name %> do |f| %>
2
+ <%%= f.error_messages %>
3
+ <p>
4
+ <%%= f.label :username %><br />
5
+ <%%= f.text_field :username %>
6
+ </p>
7
+ <p>
8
+ <%%= f.label :email, "Email Address" %><br />
9
+ <%%= f.text_field :email %>
10
+ </p>
11
+ <p>
12
+ <%%= f.label :password %><br />
13
+ <%%= f.password_field :password %>
14
+ </p>
15
+ <p>
16
+ <%%= f.label :password_confirmation, "Confirm Password" %><br />
17
+ <%%= f.password_field :password_confirmation %>
18
+ </p>
19
+ <p><%%= f.submit (@<%= user_singular_name %>.new_record? ? "Sign up" : "Update") %></p>
20
+ <%% end %>
@@ -0,0 +1,3 @@
1
+ <%% title "Update Profile" %>
2
+
3
+ <%%= render 'form' %>
@@ -2,23 +2,4 @@
2
2
 
3
3
  <p>Already have an account? <%%= link_to "Log in", login_path %>.</p>
4
4
 
5
- <%%= form_for @<%= user_singular_name %> do |f| %>
6
- <%%= f.error_messages %>
7
- <p>
8
- <%%= f.label :username %><br />
9
- <%%= f.text_field :username %>
10
- </p>
11
- <p>
12
- <%%= f.label :email, "Email Address" %><br />
13
- <%%= f.text_field :email %>
14
- </p>
15
- <p>
16
- <%%= f.label :password %><br />
17
- <%%= f.password_field :password %>
18
- </p>
19
- <p>
20
- <%%= f.label :password_confirmation, "Confirm Password" %><br />
21
- <%%= f.password_field :password_confirmation %>
22
- </p>
23
- <p><%%= f.submit "Sign up" %></p>
24
- <%% end %>
5
+ <%%= render 'form' %>
@@ -0,0 +1,20 @@
1
+ - form_for @<%= user_singular_name %> do |f|
2
+ = f.error_messages
3
+ %p
4
+ = f.label :username
5
+ %br
6
+ = f.text_field :username
7
+ %p
8
+ = f.label :email, "Email Address"
9
+ %br
10
+ = f.text_field :email
11
+ %p
12
+ = f.label :password
13
+ %br
14
+ = f.password_field :password
15
+ %p
16
+ = f.label :password_confirmation, "Confirm Password"
17
+ %br
18
+ = f.password_field :password_confirmation
19
+ %p
20
+ = f.submit (@<%= user_singular_name %>.new_record? ? "Sign up" : "Update")
@@ -0,0 +1,3 @@
1
+ - title "Sign up"
2
+
3
+ = render 'form'
@@ -2,23 +2,4 @@
2
2
 
3
3
  %p== Already have an account? #{link_to "Log in", login_path}.
4
4
 
5
- - form_for @<%= user_singular_name %> do |f|
6
- = f.error_messages
7
- %p
8
- = f.label :username
9
- %br
10
- = f.text_field :username
11
- %p
12
- = f.label :email, "Email Address"
13
- %br
14
- = f.text_field :email
15
- %p
16
- = f.label :password
17
- %br
18
- = f.password_field :password
19
- %p
20
- = f.label :password_confirmation, "Confirm Password"
21
- %br
22
- = f.password_field :password_confirmation
23
- %p
24
- = f.submit "Sign up"
5
+ = render 'form'
@@ -4,7 +4,7 @@
4
4
  # helper :layout
5
5
  module LayoutHelper
6
6
  def title(page_title, show_title = true)
7
- content_for(:title) { page_title.to_s }
7
+ content_for(:title) { h(page_title.to_s) }
8
8
  @show_title = show_title
9
9
  end
10
10
 
@@ -61,10 +61,14 @@ module Nifty
61
61
  end
62
62
  end
63
63
 
64
+ def add_gems
65
+ gem "mocha", :group => :test unless File.read(destination_path("Gemfile")).include? "mocha"
66
+ end
67
+
64
68
  def create_model
65
69
  unless @skip_model
66
70
  template 'model.rb', "app/models/#{singular_name}.rb"
67
- if options.rspec?
71
+ if test_framework == :rspec
68
72
  template "tests/rspec/model.rb", "spec/models/#{singular_name}_spec.rb"
69
73
  template 'fixtures.yml', "spec/fixtures/#{plural_name}.yml"
70
74
  else
@@ -98,7 +102,7 @@ module Nifty
98
102
 
99
103
  route "resources #{plural_name.to_sym.inspect}"
100
104
 
101
- if options.rspec?
105
+ if test_framework == :rspec
102
106
  template "tests/#{test_framework}/controller.rb", "spec/controllers/#{plural_name}_controller_spec.rb"
103
107
  else
104
108
  template "tests/#{test_framework}/controller.rb", "test/functional/#{plural_name}_controller_test.rb"
@@ -7,8 +7,8 @@ foo:
7
7
  crypted_password: 3d16c326648cccafe3d4b4cb024475c381dda92f430dfedf6f933e1f61203bacb6bae2437849bdb43b06be335e23790e4aa03902b3c28c3bbbbe27d501e521f3
8
8
  password_salt: n6z_wtpWoIsHgQb5IcFd
9
9
  <%- else -%>
10
- password_hash: 3488f5f7efecab14b91eb96169e5e1ee518a569f
11
- password_salt: bef65e058905c379436d80d1a32e7374b139e7b0
10
+ password_hash: "$2a$10$tUpEtZKDRfgosDmX2cUIFeCvHAHn9VT/0ZvmUhXiZCxSIrSdRiLhu"
11
+ password_salt: "$2a$10$tUpEtZKDRfgosDmX2cUIFe"
12
12
  <%- end -%>
13
13
 
14
14
  bar:
@@ -19,6 +19,6 @@ bar:
19
19
  crypted_password: 3bc9f4113ca645a186765df3d31a9352d0067bf2304ba0cdd6b08a7f3d58c6668ab1762fa3e76aef466ea2ff188399d8e6c40244fa59312bb4112292dac9f7f0
20
20
  password_salt: UiAh9ejabnKRxqsiK0xO
21
21
  <%- else -%>
22
- password_hash: 3488f5f7efecab14b91eb96169e5e1ee518a569f
23
- password_salt: bef65e058905c379436d80d1a32e7374b139e7b0
22
+ password_hash: "$2a$10$tUpEtZKDRfgosDmX2cUIFeCvHAHn9VT/0ZvmUhXiZCxSIrSdRiLhu"
23
+ password_salt: "$2a$10$tUpEtZKDRfgosDmX2cUIFe"
24
24
  <%- end -%>
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 4
8
- - 1
9
- version: 0.4.1
8
+ - 2
9
+ version: 0.4.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Ryan Bates
@@ -14,10 +14,99 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-09-23 00:00:00 -07:00
17
+ date: 2010-10-15 00:00:00 -07:00
18
18
  default_executable:
19
- dependencies: []
20
-
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rspec-rails
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 2
30
+ - 0
31
+ - 1
32
+ version: 2.0.1
33
+ type: :development
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: cucumber
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 0
45
+ - 9
46
+ - 2
47
+ version: 0.9.2
48
+ type: :development
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: rails
52
+ prerelease: false
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ~>
57
+ - !ruby/object:Gem::Version
58
+ segments:
59
+ - 3
60
+ - 0
61
+ - 0
62
+ version: 3.0.0
63
+ type: :development
64
+ version_requirements: *id003
65
+ - !ruby/object:Gem::Dependency
66
+ name: mocha
67
+ prerelease: false
68
+ requirement: &id004 !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ~>
72
+ - !ruby/object:Gem::Version
73
+ segments:
74
+ - 0
75
+ - 9
76
+ - 8
77
+ version: 0.9.8
78
+ type: :development
79
+ version_requirements: *id004
80
+ - !ruby/object:Gem::Dependency
81
+ name: bcrypt-ruby
82
+ prerelease: false
83
+ requirement: &id005 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ~>
87
+ - !ruby/object:Gem::Version
88
+ segments:
89
+ - 2
90
+ - 1
91
+ - 2
92
+ version: 2.1.2
93
+ type: :development
94
+ version_requirements: *id005
95
+ - !ruby/object:Gem::Dependency
96
+ name: sqlite3-ruby
97
+ prerelease: false
98
+ requirement: &id006 !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ segments:
104
+ - 1
105
+ - 3
106
+ - 1
107
+ version: 1.3.1
108
+ type: :development
109
+ version_requirements: *id006
21
110
  description: A collection of useful Rails generator scripts for scaffolding, layout files, authentication, and more.
22
111
  email: ryan@railscasts.com
23
112
  executables: []
@@ -28,8 +117,8 @@ extra_rdoc_files: []
28
117
 
29
118
  files:
30
119
  - lib/generators/nifty/authentication/authentication_generator.rb
31
- - lib/generators/nifty/authentication/templates/authentication.rb
32
120
  - lib/generators/nifty/authentication/templates/authlogic_session.rb
121
+ - lib/generators/nifty/authentication/templates/controller_authentication.rb
33
122
  - lib/generators/nifty/authentication/templates/fixtures.yml
34
123
  - lib/generators/nifty/authentication/templates/migration.rb
35
124
  - lib/generators/nifty/authentication/templates/sessions_controller.rb
@@ -46,8 +135,12 @@ files:
46
135
  - lib/generators/nifty/authentication/templates/user.rb
47
136
  - lib/generators/nifty/authentication/templates/users_controller.rb
48
137
  - lib/generators/nifty/authentication/templates/users_helper.rb
138
+ - lib/generators/nifty/authentication/templates/views/erb/_form.html.erb
139
+ - lib/generators/nifty/authentication/templates/views/erb/edit.html.erb
49
140
  - lib/generators/nifty/authentication/templates/views/erb/login.html.erb
50
141
  - lib/generators/nifty/authentication/templates/views/erb/signup.html.erb
142
+ - lib/generators/nifty/authentication/templates/views/haml/_form.html.haml
143
+ - lib/generators/nifty/authentication/templates/views/haml/edit.html.haml
51
144
  - lib/generators/nifty/authentication/templates/views/haml/login.html.haml
52
145
  - lib/generators/nifty/authentication/templates/views/haml/signup.html.haml
53
146
  - lib/generators/nifty/authentication/USAGE
@@ -216,6 +309,8 @@ files:
216
309
  - rails_generators/nifty_scaffold/templates/views/haml/show.html.haml
217
310
  - rails_generators/nifty_scaffold/USAGE
218
311
  - CHANGELOG
312
+ - Gemfile
313
+ - Gemfile.lock
219
314
  - LICENSE
220
315
  - Rakefile
221
316
  - README.rdoc