devise 1.0.11 → 1.1.pre

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of devise might be problematic. Click here for more details.

Files changed (121) hide show
  1. data/CHANGELOG.rdoc +6 -72
  2. data/Gemfile +18 -0
  3. data/README.rdoc +51 -46
  4. data/Rakefile +5 -4
  5. data/app/controllers/{confirmations_controller.rb → devise/confirmations_controller.rb} +2 -2
  6. data/app/controllers/{passwords_controller.rb → devise/passwords_controller.rb} +4 -3
  7. data/app/controllers/{registrations_controller.rb → devise/registrations_controller.rb} +11 -7
  8. data/app/controllers/{sessions_controller.rb → devise/sessions_controller.rb} +11 -8
  9. data/app/controllers/{unlocks_controller.rb → devise/unlocks_controller.rb} +2 -10
  10. data/app/models/devise/mailer.rb +55 -0
  11. data/app/views/{confirmations → devise/confirmations}/new.html.erb +1 -1
  12. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  13. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  14. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  15. data/app/views/{passwords → devise/passwords}/edit.html.erb +1 -1
  16. data/app/views/{passwords → devise/passwords}/new.html.erb +1 -1
  17. data/app/views/{registrations → devise/registrations}/edit.html.erb +1 -1
  18. data/app/views/{registrations → devise/registrations}/new.html.erb +1 -1
  19. data/app/views/{sessions → devise/sessions}/new.html.erb +1 -1
  20. data/app/views/{shared/_devise_links.erb → devise/shared/_links.erb} +0 -0
  21. data/app/views/{unlocks → devise/unlocks}/new.html.erb +1 -1
  22. data/{lib/devise → config}/locales/en.yml +7 -1
  23. data/lib/devise.rb +6 -29
  24. data/lib/devise/controllers/helpers.rb +16 -43
  25. data/lib/devise/controllers/internal_helpers.rb +10 -36
  26. data/lib/devise/controllers/scoped_views.rb +35 -0
  27. data/lib/devise/failure_app.rb +7 -14
  28. data/lib/devise/hooks/rememberable.rb +3 -6
  29. data/lib/devise/hooks/trackable.rb +1 -1
  30. data/lib/devise/mapping.rb +17 -18
  31. data/lib/devise/models.rb +4 -20
  32. data/lib/devise/models/{database_authenticatable.rb → authenticatable.rb} +16 -28
  33. data/lib/devise/models/confirmable.rb +25 -23
  34. data/lib/devise/models/http_authenticatable.rb +3 -7
  35. data/lib/devise/models/lockable.rb +40 -35
  36. data/lib/devise/models/recoverable.rb +4 -8
  37. data/lib/devise/models/rememberable.rb +6 -9
  38. data/lib/devise/models/timeoutable.rb +1 -3
  39. data/lib/devise/models/token_authenticatable.rb +4 -5
  40. data/lib/devise/models/validatable.rb +10 -1
  41. data/lib/devise/orm/mongo_mapper.rb +10 -23
  42. data/lib/devise/rails.rb +11 -9
  43. data/lib/devise/rails/routes.rb +113 -107
  44. data/lib/devise/rails/warden_compat.rb +3 -41
  45. data/lib/devise/schema.rb +13 -21
  46. data/lib/devise/strategies/{database_authenticatable.rb → authenticatable.rb} +3 -3
  47. data/lib/devise/strategies/http_authenticatable.rb +4 -22
  48. data/lib/devise/test_helpers.rb +1 -8
  49. data/lib/devise/version.rb +1 -1
  50. data/lib/generators/devise/devise_generator.rb +57 -0
  51. data/{generators → lib/generators}/devise/templates/migration.rb +1 -1
  52. data/lib/generators/devise_install/devise_install_generator.rb +25 -0
  53. data/{generators → lib/generators}/devise_install/templates/README +4 -8
  54. data/{generators → lib/generators}/devise_install/templates/devise.rb +0 -3
  55. data/lib/generators/devise_views/devise_views_generator.rb +11 -0
  56. data/test/controllers/helpers_test.rb +15 -9
  57. data/test/devise_test.rb +1 -6
  58. data/test/encryptors_test.rb +0 -3
  59. data/test/failure_app_test.rb +6 -1
  60. data/test/integration/authenticatable_test.rb +25 -85
  61. data/test/integration/http_authenticatable_test.rb +2 -10
  62. data/test/integration/lockable_test.rb +3 -22
  63. data/test/integration/recoverable_test.rb +1 -1
  64. data/test/integration/registerable_test.rb +31 -36
  65. data/test/integration/rememberable_test.rb +6 -24
  66. data/test/integration/token_authenticatable_test.rb +2 -4
  67. data/test/integration/trackable_test.rb +1 -1
  68. data/test/mailers/confirmation_instructions_test.rb +4 -10
  69. data/test/mailers/unlock_instructions_test.rb +1 -1
  70. data/test/mapping_test.rb +12 -24
  71. data/test/models/authenticatable_test.rb +3 -3
  72. data/test/models/confirmable_test.rb +29 -29
  73. data/test/models/http_authenticatable_test.rb +19 -0
  74. data/test/models/lockable_test.rb +45 -44
  75. data/test/models/recoverable_test.rb +7 -7
  76. data/test/models/rememberable_test.rb +7 -10
  77. data/test/models/validatable_test.rb +19 -24
  78. data/test/models_test.rb +2 -16
  79. data/test/orm/active_record.rb +3 -4
  80. data/test/orm/mongo_mapper.rb +2 -10
  81. data/test/rails_app/app/active_record/admin.rb +1 -1
  82. data/test/rails_app/app/active_record/user.rb +3 -3
  83. data/test/rails_app/app/controllers/application_controller.rb +1 -7
  84. data/test/rails_app/app/controllers/sessions_controller.rb +6 -0
  85. data/test/rails_app/app/controllers/users_controller.rb +0 -4
  86. data/test/rails_app/app/mongo_mapper/admin.rb +4 -7
  87. data/test/rails_app/app/mongo_mapper/user.rb +5 -8
  88. data/test/rails_app/config/application.rb +32 -0
  89. data/test/rails_app/config/boot.rb +7 -108
  90. data/test/rails_app/config/environment.rb +4 -41
  91. data/test/rails_app/config/environments/development.rb +15 -13
  92. data/test/rails_app/config/environments/production.rb +25 -20
  93. data/test/rails_app/config/environments/test.rb +23 -22
  94. data/test/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  95. data/test/rails_app/config/initializers/cookie_verification_secret.rb +7 -0
  96. data/test/rails_app/config/initializers/devise.rb +0 -3
  97. data/test/rails_app/config/initializers/session_store.rb +2 -2
  98. data/test/rails_app/config/routes.rb +17 -21
  99. data/test/routes_test.rb +30 -47
  100. data/test/support/{assertions_helper.rb → assertions.rb} +0 -15
  101. data/test/support/{tests_helper.rb → helpers.rb} +16 -3
  102. data/test/support/{integration_tests_helper.rb → integration.rb} +8 -4
  103. data/test/support/webrat/integrations/rails.rb +31 -0
  104. data/test/test_helper.rb +8 -7
  105. data/test/test_helpers_test.rb +9 -9
  106. metadata +53 -128
  107. data/app/models/devise_mailer.rb +0 -68
  108. data/app/views/devise_mailer/confirmation_instructions.html.erb +0 -5
  109. data/app/views/devise_mailer/reset_password_instructions.html.erb +0 -8
  110. data/app/views/devise_mailer/unlock_instructions.html.erb +0 -7
  111. data/generators/devise/USAGE +0 -5
  112. data/generators/devise/devise_generator.rb +0 -15
  113. data/generators/devise/lib/route_devise.rb +0 -32
  114. data/generators/devise/templates/model.rb +0 -9
  115. data/generators/devise_install/USAGE +0 -3
  116. data/generators/devise_install/devise_install_generator.rb +0 -15
  117. data/generators/devise_views/USAGE +0 -3
  118. data/generators/devise_views/devise_views_generator.rb +0 -21
  119. data/rails/init.rb +0 -2
  120. data/test/integration/rack_middleware_test.rb +0 -47
  121. data/test/rails_app/config/initializers/new_rails_defaults.rb +0 -24
@@ -1,68 +0,0 @@
1
- class DeviseMailer < ::ActionMailer::Base
2
- extend Devise::Controllers::InternalHelpers::ScopedViews
3
-
4
- # Deliver confirmation instructions when the user is created or its email is
5
- # updated, and also when confirmation is manually requested
6
- def confirmation_instructions(record)
7
- setup_mail(record, :confirmation_instructions)
8
- end
9
-
10
- # Deliver reset password instructions when manually requested
11
- def reset_password_instructions(record)
12
- setup_mail(record, :reset_password_instructions)
13
- end
14
-
15
- def unlock_instructions(record)
16
- setup_mail(record, :unlock_instructions)
17
- end
18
-
19
- private
20
-
21
- # Configure default email options
22
- def setup_mail(record, key)
23
- scope_name = Devise::Mapping.find_scope!(record)
24
- mapping = Devise.mappings[scope_name]
25
-
26
- subject translate(mapping, key)
27
- from mailer_sender(mapping)
28
- recipients record.email
29
- sent_on Time.now
30
- content_type Devise.mailer_content_type
31
- body render_with_scope(key, mapping, mapping.name => record, :resource => record)
32
- end
33
-
34
- def render_with_scope(key, mapping, assigns)
35
- if self.class.scoped_views
36
- begin
37
- render :file => "devise_mailer/#{mapping.as}/#{key}", :body => assigns
38
- rescue ActionView::MissingTemplate
39
- render :file => "devise_mailer/#{key}", :body => assigns
40
- end
41
- else
42
- render :file => "devise_mailer/#{key}", :body => assigns
43
- end
44
- end
45
-
46
- def mailer_sender(mapping)
47
- if Devise.mailer_sender.is_a?(Proc)
48
- block_args = mapping.name if Devise.mailer_sender.arity > 0
49
- Devise.mailer_sender.call(block_args)
50
- else
51
- Devise.mailer_sender
52
- end
53
- end
54
-
55
- # Setup subject namespaced by model. It means you're able to setup your
56
- # messages using specific resource scope, or provide a default one.
57
- # Example (i18n locale file):
58
- #
59
- # en:
60
- # devise:
61
- # mailer:
62
- # confirmation_instructions: '...'
63
- # user:
64
- # confirmation_instructions: '...'
65
- def translate(mapping, key)
66
- I18n.t(:"#{mapping.name}.#{key}", :scope => [:devise, :mailer], :default => key)
67
- end
68
- end
@@ -1,5 +0,0 @@
1
- <p>Welcome <%= @resource.email %>!</p>
2
-
3
- <p>You can confirm your account through the link below:</p>
4
-
5
- <p><%= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @resource.confirmation_token) %></p>
@@ -1,8 +0,0 @@
1
- <p>Hello <%= @resource.email %>!</p>
2
-
3
- <p>Someone has requested a link to change your password, and you can do this through the link below.</p>
4
-
5
- <p><%= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @resource.reset_password_token) %></p>
6
-
7
- <p>If you didn't request this, please ignore this email.</p>
8
- <p>Your password won't change until you access the link above and create a new one.</p>
@@ -1,7 +0,0 @@
1
- <p>Hello <%= @resource.email %>!</p>
2
-
3
- <p>Your account has been locked due to an excessive amount of unsuccessful sign in attempts.</p>
4
-
5
- <p>Click the link below to unlock your account:</p>
6
-
7
- <p><%= link_to 'Unlock my account', unlock_url(@resource, :unlock_token => @resource.unlock_token) %></p>
@@ -1,5 +0,0 @@
1
- To create a devise resource user:
2
-
3
- script/generate devise User
4
-
5
- This will generate a model named User, a route map for devise called :users, and a migration file for table :users with all devise modules.
@@ -1,15 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + "/lib/route_devise.rb")
2
-
3
- class DeviseGenerator < Rails::Generator::NamedBase
4
-
5
- def manifest
6
- record do |m|
7
- m.directory(File.join('app', 'models', class_path))
8
- m.template 'model.rb', File.join('app', 'models', "#{file_path}.rb")
9
-
10
- m.migration_template 'migration.rb', 'db/migrate', :migration_file_name => "devise_create_#{table_name}"
11
- m.route_devise table_name
12
- end
13
- end
14
-
15
- end
@@ -1,32 +0,0 @@
1
- module Rails
2
- module Generator
3
- module Commands
4
- class Create < Base
5
-
6
- # Create devise route. Based on route_resources
7
- def route_devise(*resources)
8
- resource_list = resources.map { |r| r.to_sym.inspect }.join(', ')
9
- sentinel = 'ActionController::Routing::Routes.draw do |map|'
10
-
11
- logger.route "map.devise_for #{resource_list}"
12
- unless options[:pretend]
13
- gsub_file 'config/routes.rb', /(#{Regexp.escape(sentinel)})/mi do |match|
14
- "#{match}\n map.devise_for #{resource_list}\n"
15
- end
16
- end
17
- end
18
- end
19
-
20
- class Destroy < RewindBase
21
-
22
- # Destroy devise route. Based on route_resources
23
- def route_devise(*resources)
24
- resource_list = resources.map { |r| r.to_sym.inspect }.join(', ')
25
- look_for = "\n map.devise_for #{resource_list}\n"
26
- logger.route "map.devise_for #{resource_list}"
27
- gsub_file 'config/routes.rb', /(#{look_for})/mi, ''
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,9 +0,0 @@
1
- class <%= class_name %> < ActiveRecord::Base
2
- # Include default devise modules. Others available are:
3
- # :http_authenticatable, :token_authenticatable, :confirmable, :lockable, :timeoutable and :activatable
4
- devise :registerable, :database_authenticatable, :recoverable,
5
- :rememberable, :trackable, :validatable
6
-
7
- # Setup accessible (or protected) attributes for your model
8
- attr_accessible :email, :password, :password_confirmation
9
- end
@@ -1,3 +0,0 @@
1
- To copy a Devise initializer to your Rails App, with some configuration values, just do:
2
-
3
- script/generate devise_install
@@ -1,15 +0,0 @@
1
- class DeviseInstallGenerator < Rails::Generator::Base
2
-
3
- def manifest
4
- record do |m|
5
- m.directory "config/initializers"
6
- m.template "devise.rb", "config/initializers/devise.rb"
7
-
8
- m.directory "config/locales"
9
- m.file "../../../lib/devise/locales/en.yml", "config/locales/devise.en.yml"
10
-
11
- m.readme "README"
12
- end
13
- end
14
-
15
- end
@@ -1,3 +0,0 @@
1
- To copy all session, password, confirmation and mailer views from devise to your app just run the following command:
2
-
3
- script/generate devise_views
@@ -1,21 +0,0 @@
1
- class DeviseViewsGenerator < Rails::Generator::Base
2
-
3
- def initialize(*args)
4
- super
5
- @source_root = options[:source] || File.join(spec.path, '..', '..')
6
- end
7
-
8
- def manifest
9
- record do |m|
10
- m.directory "app/views"
11
-
12
- Dir[File.join(@source_root, "app", "views", "**/*.erb")].each do |file|
13
- file = file.gsub(@source_root, "")[1..-1]
14
-
15
- m.directory File.dirname(file)
16
- m.file file, file
17
- end
18
- end
19
- end
20
-
21
- end
@@ -1,2 +0,0 @@
1
- # We need to load devise here to ensure routes extensions are loaded.
2
- require 'devise'
@@ -1,47 +0,0 @@
1
- require "test/test_helper"
2
- require "rack/test"
3
-
4
- class RackMiddlewareTest < Test::Unit::TestCase
5
- include Rack::Test::Methods
6
-
7
- def app
8
- ActionController::Dispatcher.new
9
- end
10
-
11
- def warden
12
- last_request.env['warden']
13
- end
14
-
15
- def with_custom_strategy
16
- get '/'
17
-
18
- Warden::Strategies.add(:custom_test) do
19
- def valid?
20
- true
21
- end
22
-
23
- def authenticate!
24
- custom! [599, {
25
- "X-Custom-Response" => "Custom response test",
26
- "Content-type" => "text/plain"
27
- }, "Custom response test"]
28
- end
29
- end
30
-
31
- #ActionController::Dispatcher.middleware.use CustomStrategyInterceptor
32
- default_strategies = warden.manager.config.default_strategies
33
- warden.manager.config.default_strategies :custom_test
34
- yield
35
- warden.manager.config.default_strategies default_strategies
36
- end
37
-
38
- def test_custom_strategy_response
39
- with_custom_strategy do
40
- post('/users/sign_in')
41
-
42
- assert_equal 599, last_response.status
43
- assert_equal "Custom response test", last_response.body
44
- assert_equal "Custom response test", last_response.headers["X-Custom-Response"]
45
- end
46
- end
47
- end
@@ -1,24 +0,0 @@
1
- # Be sure to restart your server when you modify this file.
2
-
3
- # These settings change the behavior of Rails 2 apps and will be defaults
4
- # for Rails 3. You can remove this initializer when Rails 3 is released.
5
-
6
- if defined?(ActiveRecord)
7
- # Include Active Record class name as root for JSON serialized output.
8
- ActiveRecord::Base.include_root_in_json = true
9
-
10
- # Store the full class name (including module namespace) in STI type column.
11
- ActiveRecord::Base.store_full_sti_class = true
12
- end
13
-
14
- ActionController::Routing.generate_best_match = false
15
-
16
- # Use ISO 8601 format for JSON serialized times and dates.
17
- ActiveSupport.use_standard_json_time_format = true
18
-
19
- # Don't escape HTML entities in JSON, leave that for the #json_escape helper.
20
- # if you're including raw json in an HTML page.
21
- ActiveSupport.escape_html_entities_in_json = false
22
-
23
- # Clean up silencers
24
- Rails.backtrace_cleaner.remove_silencers!