devise-bootstrap 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +31 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +29 -0
  6. data/Rakefile +1 -0
  7. data/app/controllers/devise/confirmations_controller.rb +47 -0
  8. data/app/controllers/devise/omniauth_callbacks_controller.rb +30 -0
  9. data/app/controllers/devise/passwords_controller.rb +70 -0
  10. data/app/controllers/devise/registrations_controller.rb +137 -0
  11. data/app/controllers/devise/sessions_controller.rb +53 -0
  12. data/app/controllers/devise/unlocks_controller.rb +46 -0
  13. data/app/controllers/devise_controller.rb +176 -0
  14. data/app/helpers/devise_helper.rb +25 -0
  15. data/app/mailers/devise/mailer.rb +20 -0
  16. data/app/views/devise/confirmations/new.html.erb +12 -0
  17. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  18. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  19. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  20. data/app/views/devise/passwords/edit.html.erb +16 -0
  21. data/app/views/devise/passwords/new.html.erb +12 -0
  22. data/app/views/devise/registrations/edit.html.erb +29 -0
  23. data/app/views/devise/registrations/new.html.erb +18 -0
  24. data/app/views/devise/sessions/new.html.erb +17 -0
  25. data/app/views/devise/shared/_links.erb +25 -0
  26. data/app/views/devise/unlocks/new.html.erb +12 -0
  27. data/config/locales/en.yml +59 -0
  28. data/devise-bootstrap.gemspec +30 -0
  29. data/gemfiles/Gemfile.rails-3.2-stable +29 -0
  30. data/gemfiles/Gemfile.rails-4.0-stable +29 -0
  31. data/gemfiles/Gemfile.rails-head +29 -0
  32. data/lib/devise/bootstrap.rb +7 -0
  33. data/lib/devise/bootstrap/version.rb +5 -0
  34. data/lib/devise/devise.rb +491 -0
  35. data/lib/devise/devise/controllers/helpers.rb +213 -0
  36. data/lib/devise/devise/controllers/rememberable.rb +47 -0
  37. data/lib/devise/devise/controllers/scoped_views.rb +17 -0
  38. data/lib/devise/devise/controllers/sign_in_out.rb +103 -0
  39. data/lib/devise/devise/controllers/store_location.rb +50 -0
  40. data/lib/devise/devise/controllers/url_helpers.rb +67 -0
  41. data/lib/devise/devise/delegator.rb +16 -0
  42. data/lib/devise/devise/failure_app.rb +205 -0
  43. data/lib/devise/devise/hooks/activatable.rb +11 -0
  44. data/lib/devise/devise/hooks/csrf_cleaner.rb +5 -0
  45. data/lib/devise/devise/hooks/forgetable.rb +9 -0
  46. data/lib/devise/devise/hooks/lockable.rb +7 -0
  47. data/lib/devise/devise/hooks/proxy.rb +21 -0
  48. data/lib/devise/devise/hooks/rememberable.rb +7 -0
  49. data/lib/devise/devise/hooks/timeoutable.rb +28 -0
  50. data/lib/devise/devise/hooks/trackable.rb +9 -0
  51. data/lib/devise/devise/mailers/helpers.rb +90 -0
  52. data/lib/devise/devise/mapping.rb +172 -0
  53. data/lib/devise/devise/models.rb +119 -0
  54. data/lib/devise/devise/models/authenticatable.rb +284 -0
  55. data/lib/devise/devise/models/confirmable.rb +295 -0
  56. data/lib/devise/devise/models/database_authenticatable.rb +164 -0
  57. data/lib/devise/devise/models/lockable.rb +196 -0
  58. data/lib/devise/devise/models/omniauthable.rb +27 -0
  59. data/lib/devise/devise/models/recoverable.rb +131 -0
  60. data/lib/devise/devise/models/registerable.rb +25 -0
  61. data/lib/devise/devise/models/rememberable.rb +129 -0
  62. data/lib/devise/devise/models/timeoutable.rb +49 -0
  63. data/lib/devise/devise/models/trackable.rb +35 -0
  64. data/lib/devise/devise/models/validatable.rb +66 -0
  65. data/lib/devise/devise/modules.rb +28 -0
  66. data/lib/devise/devise/omniauth.rb +28 -0
  67. data/lib/devise/devise/omniauth/config.rb +45 -0
  68. data/lib/devise/devise/omniauth/url_helpers.rb +18 -0
  69. data/lib/devise/devise/orm/active_record.rb +3 -0
  70. data/lib/devise/devise/orm/mongoid.rb +3 -0
  71. data/lib/devise/devise/parameter_filter.rb +40 -0
  72. data/lib/devise/devise/parameter_sanitizer.rb +99 -0
  73. data/lib/devise/devise/rails.rb +56 -0
  74. data/lib/devise/devise/rails/routes.rb +496 -0
  75. data/lib/devise/devise/rails/warden_compat.rb +22 -0
  76. data/lib/devise/devise/strategies/authenticatable.rb +167 -0
  77. data/lib/devise/devise/strategies/base.rb +20 -0
  78. data/lib/devise/devise/strategies/database_authenticatable.rb +23 -0
  79. data/lib/devise/devise/strategies/rememberable.rb +55 -0
  80. data/lib/devise/devise/test_helpers.rb +132 -0
  81. data/lib/devise/devise/time_inflector.rb +14 -0
  82. data/lib/devise/devise/token_generator.rb +70 -0
  83. data/lib/devise/devise/version.rb +3 -0
  84. data/lib/devise/generators/active_record/devise_generator.rb +73 -0
  85. data/lib/devise/generators/active_record/templates/migration.rb +18 -0
  86. data/lib/devise/generators/active_record/templates/migration_existing.rb +25 -0
  87. data/lib/devise/generators/devise/devise_generator.rb +26 -0
  88. data/lib/devise/generators/devise/install_generator.rb +29 -0
  89. data/lib/devise/generators/devise/orm_helpers.rb +51 -0
  90. data/lib/devise/generators/devise/views_generator.rb +135 -0
  91. data/lib/devise/generators/mongoid/devise_generator.rb +55 -0
  92. data/lib/devise/generators/templates/README +35 -0
  93. data/lib/devise/generators/templates/devise.rb +260 -0
  94. data/lib/devise/generators/templates/markerb/confirmation_instructions.markerb +5 -0
  95. data/lib/devise/generators/templates/markerb/reset_password_instructions.markerb +8 -0
  96. data/lib/devise/generators/templates/markerb/unlock_instructions.markerb +7 -0
  97. data/lib/devise/generators/templates/simple_form_for/confirmations/new.html.erb +16 -0
  98. data/lib/devise/generators/templates/simple_form_for/passwords/edit.html.erb +19 -0
  99. data/lib/devise/generators/templates/simple_form_for/passwords/new.html.erb +15 -0
  100. data/lib/devise/generators/templates/simple_form_for/registrations/edit.html.erb +27 -0
  101. data/lib/devise/generators/templates/simple_form_for/registrations/new.html.erb +17 -0
  102. data/lib/devise/generators/templates/simple_form_for/sessions/new.html.erb +15 -0
  103. data/lib/devise/generators/templates/simple_form_for/unlocks/new.html.erb +16 -0
  104. metadata +250 -0
@@ -0,0 +1,3 @@
1
+ module Devise
2
+ VERSION = "3.2.4".freeze
3
+ end
@@ -0,0 +1,73 @@
1
+ require 'rails/generators/active_record'
2
+ require 'generators/devise/orm_helpers'
3
+
4
+ module ActiveRecord
5
+ module Generators
6
+ class DeviseGenerator < ActiveRecord::Generators::Base
7
+ argument :attributes, type: :array, default: [], banner: "field:type field:type"
8
+
9
+ include Devise::Generators::OrmHelpers
10
+ source_root File.expand_path("../templates", __FILE__)
11
+
12
+ def copy_devise_migration
13
+ if (behavior == :invoke && model_exists?) || (behavior == :revoke && migration_exists?(table_name))
14
+ migration_template "migration_existing.rb", "db/migrate/add_devise_to_#{table_name}.rb"
15
+ else
16
+ migration_template "migration.rb", "db/migrate/devise_create_#{table_name}.rb"
17
+ end
18
+ end
19
+
20
+ def generate_model
21
+ invoke "active_record:model", [name], migration: false unless model_exists? && behavior == :invoke
22
+ end
23
+
24
+ def inject_devise_content
25
+ content = model_contents
26
+
27
+ class_path = if namespaced?
28
+ class_name.to_s.split("::")
29
+ else
30
+ [class_name]
31
+ end
32
+
33
+ indent_depth = class_path.size - 1
34
+ content = content.split("\n").map { |line| " " * indent_depth + line } .join("\n") << "\n"
35
+
36
+ inject_into_class(model_path, class_path.last, content) if model_exists?
37
+ end
38
+
39
+ def migration_data
40
+ <<RUBY
41
+ ## Database authenticatable
42
+ t.string :email, null: false, default: ""
43
+ t.string :encrypted_password, null: false, default: ""
44
+
45
+ ## Recoverable
46
+ t.string :reset_password_token
47
+ t.datetime :reset_password_sent_at
48
+
49
+ ## Rememberable
50
+ t.datetime :remember_created_at
51
+
52
+ ## Trackable
53
+ t.integer :sign_in_count, default: 0, null: false
54
+ t.datetime :current_sign_in_at
55
+ t.datetime :last_sign_in_at
56
+ t.string :current_sign_in_ip
57
+ t.string :last_sign_in_ip
58
+
59
+ ## Confirmable
60
+ # t.string :confirmation_token
61
+ # t.datetime :confirmed_at
62
+ # t.datetime :confirmation_sent_at
63
+ # t.string :unconfirmed_email # Only if using reconfirmable
64
+
65
+ ## Lockable
66
+ # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
67
+ # t.string :unlock_token # Only if unlock strategy is :email or :both
68
+ # t.datetime :locked_at
69
+ RUBY
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,18 @@
1
+ class DeviseCreate<%= table_name.camelize %> < ActiveRecord::Migration
2
+ def change
3
+ create_table(:<%= table_name %>) do |t|
4
+ <%= migration_data -%>
5
+
6
+ <% attributes.each do |attribute| -%>
7
+ t.<%= attribute.type %> :<%= attribute.name %>
8
+ <% end -%>
9
+
10
+ t.timestamps
11
+ end
12
+
13
+ add_index :<%= table_name %>, :email, unique: true
14
+ add_index :<%= table_name %>, :reset_password_token, unique: true
15
+ # add_index :<%= table_name %>, :confirmation_token, unique: true
16
+ # add_index :<%= table_name %>, :unlock_token, unique: true
17
+ end
18
+ end
@@ -0,0 +1,25 @@
1
+ class AddDeviseTo<%= table_name.camelize %> < ActiveRecord::Migration
2
+ def self.up
3
+ change_table(:<%= table_name %>) do |t|
4
+ <%= migration_data -%>
5
+
6
+ <% attributes.each do |attribute| -%>
7
+ t.<%= attribute.type %> :<%= attribute.name %>
8
+ <% end -%>
9
+
10
+ # Uncomment below if timestamps were not included in your original model.
11
+ # t.timestamps
12
+ end
13
+
14
+ add_index :<%= table_name %>, :email, unique: true
15
+ add_index :<%= table_name %>, :reset_password_token, unique: true
16
+ # add_index :<%= table_name %>, :confirmation_token, unique: true
17
+ # add_index :<%= table_name %>, :unlock_token, unique: true
18
+ end
19
+
20
+ def self.down
21
+ # By default, we don't want to make any assumption about how to roll back a migration when your
22
+ # model already existed. Please edit below which fields you would like to remove in this migration.
23
+ raise ActiveRecord::IrreversibleMigration
24
+ end
25
+ end
@@ -0,0 +1,26 @@
1
+ require 'rails/generators/named_base'
2
+
3
+ module Devise
4
+ module Generators
5
+ class DeviseGenerator < Rails::Generators::NamedBase
6
+ include Rails::Generators::ResourceHelpers
7
+
8
+ namespace "devise"
9
+ source_root File.expand_path("../templates", __FILE__)
10
+
11
+ desc "Generates a model with the given NAME (if one does not exist) with devise " <<
12
+ "configuration plus a migration file and devise routes."
13
+
14
+ hook_for :orm
15
+
16
+ class_option :routes, desc: "Generate routes", type: :boolean, default: true
17
+
18
+ def add_devise_routes
19
+ devise_route = "devise_for :#{plural_name}"
20
+ devise_route << %Q(, class_name: "#{class_name}") if class_name.include?("::")
21
+ devise_route << %Q(, skip: :all) unless options.routes?
22
+ route devise_route
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,29 @@
1
+ require 'rails/generators/base'
2
+ require 'securerandom'
3
+
4
+ module Devise
5
+ module Generators
6
+ class InstallGenerator < Rails::Generators::Base
7
+ source_root File.expand_path("../../templates", __FILE__)
8
+
9
+ desc "Creates a Devise initializer and copy locale files to your application."
10
+ class_option :orm
11
+
12
+ def copy_initializer
13
+ template "devise.rb", "config/initializers/devise.rb"
14
+ end
15
+
16
+ def copy_locale
17
+ copy_file "../../../config/locales/en.yml", "config/locales/devise.en.yml"
18
+ end
19
+
20
+ def show_readme
21
+ readme "README" if behavior == :invoke
22
+ end
23
+
24
+ def rails_4?
25
+ Rails::VERSION::MAJOR == 4
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,51 @@
1
+ module Devise
2
+ module Generators
3
+ module OrmHelpers
4
+ def model_contents
5
+ buffer = <<-CONTENT
6
+ # Include default devise modules. Others available are:
7
+ # :confirmable, :lockable, :timeoutable and :omniauthable
8
+ devise :database_authenticatable, :registerable,
9
+ :recoverable, :rememberable, :trackable, :validatable
10
+
11
+ CONTENT
12
+ buffer += <<-CONTENT if needs_attr_accessible?
13
+ # Setup accessible (or protected) attributes for your model
14
+ attr_accessible :email, :password, :password_confirmation, :remember_me
15
+
16
+ CONTENT
17
+ buffer
18
+ end
19
+
20
+ def needs_attr_accessible?
21
+ rails_3? && !strong_parameters_enabled?
22
+ end
23
+
24
+ def rails_3?
25
+ Rails::VERSION::MAJOR == 3
26
+ end
27
+
28
+ def strong_parameters_enabled?
29
+ defined?(ActionController::StrongParameters)
30
+ end
31
+
32
+ private
33
+
34
+ def model_exists?
35
+ File.exists?(File.join(destination_root, model_path))
36
+ end
37
+
38
+ def migration_exists?(table_name)
39
+ Dir.glob("#{File.join(destination_root, migration_path)}/[0-9]*_*.rb").grep(/\d+_add_devise_to_#{table_name}.rb$/).first
40
+ end
41
+
42
+ def migration_path
43
+ @migration_path ||= File.join("db", "migrate")
44
+ end
45
+
46
+ def model_path
47
+ @model_path ||= File.join("app", "models", "#{file_path}.rb")
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,135 @@
1
+ require 'rails/generators/base'
2
+
3
+ module Devise
4
+ module Generators
5
+ # Include this module in your generator to generate Devise views.
6
+ # `copy_views` is the main method and by default copies all views
7
+ # with forms.
8
+ module ViewPathTemplates #:nodoc:
9
+ extend ActiveSupport::Concern
10
+
11
+ included do
12
+ argument :scope, required: false, default: nil,
13
+ desc: "The scope to copy views to"
14
+
15
+ # Le sigh, ensure Thor won't handle opts as args
16
+ # It should be fixed in future Rails releases
17
+ class_option :form_builder, aliases: "-b"
18
+ class_option :markerb
19
+ class_option :views, aliases: "-v", type: :array, desc: "Select specific view directories to generate (confirmations, passwords, registrations, sessions, unlocks, mailer)"
20
+
21
+ public_task :copy_views
22
+ end
23
+
24
+ # TODO: Add this to Rails itself
25
+ module ClassMethods
26
+ def hide!
27
+ Rails::Generators.hide_namespace self.namespace
28
+ end
29
+ end
30
+
31
+ def copy_views
32
+ if options[:views]
33
+ options[:views].each do |directory|
34
+ view_directory directory.to_sym
35
+ end
36
+ else
37
+ view_directory :confirmations
38
+ view_directory :passwords
39
+ view_directory :registrations
40
+ view_directory :sessions
41
+ view_directory :unlocks
42
+ end
43
+ end
44
+
45
+ protected
46
+
47
+ def view_directory(name, _target_path = nil)
48
+ directory name.to_s, _target_path || "#{target_path}/#{name}" do |content|
49
+ if scope
50
+ content.gsub "devise/shared/links", "#{scope}/shared/links"
51
+ else
52
+ content
53
+ end
54
+ end
55
+ end
56
+
57
+ def target_path
58
+ @target_path ||= "app/views/#{scope || :devise}"
59
+ end
60
+ end
61
+
62
+ class SharedViewsGenerator < Rails::Generators::Base #:nodoc:
63
+ include ViewPathTemplates
64
+ source_root File.expand_path("../../../../app/views/devise", __FILE__)
65
+ desc "Copies shared Devise views to your application."
66
+ hide!
67
+
68
+ # Override copy_views to just copy mailer and shared.
69
+ def copy_views
70
+ view_directory :shared
71
+ end
72
+ end
73
+
74
+ class FormForGenerator < Rails::Generators::Base #:nodoc:
75
+ include ViewPathTemplates
76
+ source_root File.expand_path("../../../../app/views/devise", __FILE__)
77
+ desc "Copies default Devise views to your application."
78
+ hide!
79
+ end
80
+
81
+ class SimpleFormForGenerator < Rails::Generators::Base #:nodoc:
82
+ include ViewPathTemplates
83
+ source_root File.expand_path("../../templates/simple_form_for", __FILE__)
84
+ desc "Copies simple form enabled views to your application."
85
+ hide!
86
+ end
87
+
88
+ class ErbGenerator < Rails::Generators::Base #:nodoc:
89
+ include ViewPathTemplates
90
+ source_root File.expand_path("../../../../app/views/devise", __FILE__)
91
+ desc "Copies Devise mail erb views to your application."
92
+ hide!
93
+
94
+ def copy_views
95
+ if !options[:views] || options[:views].include?('mailer')
96
+ view_directory :mailer
97
+ end
98
+ end
99
+ end
100
+
101
+ class MarkerbGenerator < Rails::Generators::Base #:nodoc:
102
+ include ViewPathTemplates
103
+ source_root File.expand_path("../../templates", __FILE__)
104
+ desc "Copies Devise mail markerb views to your application."
105
+ hide!
106
+
107
+ def copy_views
108
+ if !options[:views] || options[:views].include?('mailer')
109
+ view_directory :markerb, target_path
110
+ end
111
+ end
112
+
113
+ def target_path
114
+ "app/views/#{scope || :devise}/mailer"
115
+ end
116
+ end
117
+
118
+ class ViewsGenerator < Rails::Generators::Base
119
+ desc "Copies Devise views to your application."
120
+
121
+ argument :scope, required: false, default: nil,
122
+ desc: "The scope to copy views to"
123
+
124
+ invoke SharedViewsGenerator
125
+
126
+ hook_for :form_builder, aliases: "-b",
127
+ desc: "Form builder to be used",
128
+ default: defined?(SimpleForm) ? "simple_form_for" : "form_for"
129
+
130
+ hook_for :markerb, desc: "Generate markerb instead of erb mail views",
131
+ default: defined?(Markerb) ? :markerb : :erb,
132
+ type: :boolean
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,55 @@
1
+ require 'rails/generators/named_base'
2
+ require 'generators/devise/orm_helpers'
3
+
4
+ module Mongoid
5
+ module Generators
6
+ class DeviseGenerator < Rails::Generators::NamedBase
7
+ include Devise::Generators::OrmHelpers
8
+
9
+ def generate_model
10
+ invoke "mongoid:model", [name] unless model_exists? && behavior == :invoke
11
+ end
12
+
13
+ def inject_field_types
14
+ inject_into_file model_path, migration_data, after: "include Mongoid::Document\n" if model_exists?
15
+ end
16
+
17
+ def inject_devise_content
18
+ inject_into_file model_path, model_contents, after: "include Mongoid::Document\n" if model_exists?
19
+ end
20
+
21
+ def migration_data
22
+ <<RUBY
23
+ ## Database authenticatable
24
+ field :email, type: String, default: ""
25
+ field :encrypted_password, type: String, default: ""
26
+
27
+ ## Recoverable
28
+ field :reset_password_token, type: String
29
+ field :reset_password_sent_at, type: Time
30
+
31
+ ## Rememberable
32
+ field :remember_created_at, type: Time
33
+
34
+ ## Trackable
35
+ field :sign_in_count, type: Integer, default: 0
36
+ field :current_sign_in_at, type: Time
37
+ field :last_sign_in_at, type: Time
38
+ field :current_sign_in_ip, type: String
39
+ field :last_sign_in_ip, type: String
40
+
41
+ ## Confirmable
42
+ # field :confirmation_token, type: String
43
+ # field :confirmed_at, type: Time
44
+ # field :confirmation_sent_at, type: Time
45
+ # field :unconfirmed_email, type: String # Only if using reconfirmable
46
+
47
+ ## Lockable
48
+ # field :failed_attempts, type: Integer, default: 0 # Only if lock strategy is :failed_attempts
49
+ # field :unlock_token, type: String # Only if unlock strategy is :email or :both
50
+ # field :locked_at, type: Time
51
+ RUBY
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,35 @@
1
+ ===============================================================================
2
+
3
+ Some setup you must do manually if you haven't yet:
4
+
5
+ 1. Ensure you have defined default url options in your environments files. Here
6
+ is an example of default_url_options appropriate for a development environment
7
+ in config/environments/development.rb:
8
+
9
+ config.action_mailer.default_url_options = { host: 'localhost:3000' }
10
+
11
+ In production, :host should be set to the actual host of your application.
12
+
13
+ 2. Ensure you have defined root_url to *something* in your config/routes.rb.
14
+ For example:
15
+
16
+ root to: "home#index"
17
+
18
+ 3. Ensure you have flash messages in app/views/layouts/application.html.erb.
19
+ For example:
20
+
21
+ <p class="notice"><%= notice %></p>
22
+ <p class="alert"><%= alert %></p>
23
+
24
+ 4. If you are deploying on Heroku with Rails 3.2 only, you may want to set:
25
+
26
+ config.assets.initialize_on_precompile = false
27
+
28
+ On config/application.rb forcing your application to not access the DB
29
+ or load models when precompiling your assets.
30
+
31
+ 5. You can copy Devise views (for customization) to your app by running:
32
+
33
+ rails g devise:views
34
+
35
+ ===============================================================================