rails-replicator 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +85 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +87 -0
- data/LICENSE +21 -0
- data/README.md +41 -0
- data/bin/replicator +16 -0
- data/lib/replicator/actions.rb +40 -0
- data/lib/replicator/app_builder.rb +337 -0
- data/lib/replicator/generators/app_generator.rb +207 -0
- data/lib/replicator/version.rb +3 -0
- data/replicator.gemspec +29 -0
- data/templates/Gemfile_clean +68 -0
- data/templates/Procfile +2 -0
- data/templates/README.md.erb +5 -0
- data/templates/_flashes.html.slim.erb +13 -0
- data/templates/_javascript.html.slim.erb +7 -0
- data/templates/ability.rb +15 -0
- data/templates/admin_base_controller.rb +14 -0
- data/templates/admin_dashboard_controller.rb +4 -0
- data/templates/application.css.sass +12 -0
- data/templates/application.html.slim.erb +24 -0
- data/templates/application.js +8 -0
- data/templates/application_helper.rb +5 -0
- data/templates/background_jobs_rspec.rb +19 -0
- data/templates/bin_setup +26 -0
- data/templates/config_locales_en.yml +11 -0
- data/templates/database.yml.erb +12 -0
- data/templates/database_cleaner_rspec.rb +21 -0
- data/templates/devise/confirmations/new.html.slim +12 -0
- data/templates/devise/mailer/confirmation_instructions.html.erb +5 -0
- data/templates/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/templates/devise/mailer/unlock_instructions.html.erb +7 -0
- data/templates/devise/passwords/edit.html.slim +19 -0
- data/templates/devise/passwords/new.html.slim +14 -0
- data/templates/devise/registrations/edit.html.slim +36 -0
- data/templates/devise/registrations/new.html.slim +22 -0
- data/templates/devise/sessions/new.html.slim +20 -0
- data/templates/devise/shared/_links.html.slim +24 -0
- data/templates/devise/unlocks/new.html.slim +13 -0
- data/templates/devise_login.html.slim +20 -0
- data/templates/devise_shared_links.html.slim +24 -0
- data/templates/disable_xml_params.rb +3 -0
- data/templates/errors.rb +28 -0
- data/templates/factories_spec.rb +13 -0
- data/templates/factories_spec_rake_task.rb +9 -0
- data/templates/factory_girl_syntax_rspec.rb +3 -0
- data/templates/gitignore +85 -0
- data/templates/rack_timeout.rb +1 -0
- data/templates/routes.rb.erb +15 -0
- data/templates/sample.env +2 -0
- data/templates/smtp.rb +10 -0
- data/templates/spec_helper.rb +25 -0
- data/templates/stylesheets/layout/.keep +0 -0
- data/templates/stylesheets/typography/.keep +0 -0
- data/templates/stylesheets/typography/_forms.css.sass +2 -0
- data/templates/stylesheets/widgets/.keep +0 -0
- data/templates/unicorn.rb +26 -0
- metadata +140 -0
@@ -0,0 +1,207 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/rails/app/app_generator'
|
3
|
+
|
4
|
+
module Replicator
|
5
|
+
class AppGenerator < Rails::Generators::AppGenerator
|
6
|
+
class_option :database, :type => :string, :aliases => '-d', :default => 'postgresql',
|
7
|
+
:desc => "Preconfigure for selected database (options: #{DATABASES.join('/')})"
|
8
|
+
|
9
|
+
class_option :heroku, :type => :boolean, :aliases => '-H', :default => false,
|
10
|
+
:desc => 'Create staging and production Heroku apps'
|
11
|
+
|
12
|
+
class_option :github, :type => :string, :aliases => '-G', :default => nil,
|
13
|
+
:desc => 'Create Github repository and add remote origin pointed to repo'
|
14
|
+
|
15
|
+
class_option :skip_test_unit, :type => :boolean, :aliases => '-T', :default => true,
|
16
|
+
:desc => 'Skip Test::Unit files'
|
17
|
+
|
18
|
+
def finish_template
|
19
|
+
invoke :replicator_customization
|
20
|
+
super
|
21
|
+
end
|
22
|
+
|
23
|
+
def replicator_customization
|
24
|
+
invoke :remove_files_we_dont_need
|
25
|
+
invoke :customize_gemfile
|
26
|
+
invoke :setup_database
|
27
|
+
invoke :setup_development_environment
|
28
|
+
invoke :setup_test_environment
|
29
|
+
invoke :setup_production_environment
|
30
|
+
invoke :setup_staging_environment
|
31
|
+
invoke :create_replicator_views
|
32
|
+
invoke :setup_coffeescript
|
33
|
+
invoke :configure_app
|
34
|
+
invoke :setup_stylesheets
|
35
|
+
invoke :copy_miscellaneous_files
|
36
|
+
invoke :customize_error_pages
|
37
|
+
invoke :update_routes
|
38
|
+
invoke :migrate_database
|
39
|
+
invoke :setup_git
|
40
|
+
invoke :create_heroku_apps
|
41
|
+
invoke :create_github_repo
|
42
|
+
invoke :outro
|
43
|
+
end
|
44
|
+
|
45
|
+
def remove_files_we_dont_need
|
46
|
+
build :remove_public_index
|
47
|
+
build :remove_rails_logo_image
|
48
|
+
end
|
49
|
+
|
50
|
+
def customize_gemfile
|
51
|
+
build :replace_gemfile
|
52
|
+
build :set_ruby_to_version_being_used
|
53
|
+
build :setup_rvmrc
|
54
|
+
bundle_command 'install'
|
55
|
+
end
|
56
|
+
|
57
|
+
def setup_database
|
58
|
+
say 'Setting up database'
|
59
|
+
|
60
|
+
if 'postgresql' == options[:database]
|
61
|
+
build :use_postgres_config_template
|
62
|
+
end
|
63
|
+
|
64
|
+
build :create_database
|
65
|
+
end
|
66
|
+
|
67
|
+
def setup_development_environment
|
68
|
+
say 'Setting up the development environment'
|
69
|
+
build :raise_on_delivery_errors
|
70
|
+
build :raise_on_unpermitted_parameters
|
71
|
+
build :provide_setup_script
|
72
|
+
build :configure_generators
|
73
|
+
end
|
74
|
+
|
75
|
+
def setup_test_environment
|
76
|
+
say 'Setting up the test environment'
|
77
|
+
build :enable_factory_girl_syntax
|
78
|
+
build :test_factories_first
|
79
|
+
build :generate_rspec
|
80
|
+
build :configure_rspec
|
81
|
+
build :use_rspec_binstub
|
82
|
+
build :configure_background_jobs_for_rspec
|
83
|
+
build :enable_database_cleaner
|
84
|
+
build :configure_capybara_webkit
|
85
|
+
end
|
86
|
+
|
87
|
+
def setup_production_environment
|
88
|
+
say 'Setting up the production environment'
|
89
|
+
build :configure_smtp
|
90
|
+
end
|
91
|
+
|
92
|
+
def setup_staging_environment
|
93
|
+
say 'Setting up the staging environment'
|
94
|
+
build :setup_staging_environment
|
95
|
+
end
|
96
|
+
|
97
|
+
def create_replicator_views
|
98
|
+
say 'Creating replicator views'
|
99
|
+
build :create_partials_directory
|
100
|
+
build :create_shared_flashes
|
101
|
+
build :create_shared_javascripts
|
102
|
+
build :create_application_layout
|
103
|
+
end
|
104
|
+
|
105
|
+
def setup_coffeescript
|
106
|
+
say 'Setting up CoffeeScript defaults'
|
107
|
+
build :remove_turbolinks
|
108
|
+
build :create_common_javascripts
|
109
|
+
end
|
110
|
+
|
111
|
+
def configure_app
|
112
|
+
say 'Configuring app'
|
113
|
+
build :configure_action_mailer
|
114
|
+
build :blacklist_active_record_attributes
|
115
|
+
build :configure_strong_parameters
|
116
|
+
build :configure_time_zone
|
117
|
+
build :configure_time_formats
|
118
|
+
build :configure_rack_timeout
|
119
|
+
build :disable_xml_params
|
120
|
+
build :setup_default_rake_task
|
121
|
+
build :setup_application_helper
|
122
|
+
build :configure_unicorn
|
123
|
+
build :setup_foreman
|
124
|
+
build :setup_guard
|
125
|
+
build :setup_devise_and_cancan
|
126
|
+
build :generate_pages_controller
|
127
|
+
build :setup_admin_section
|
128
|
+
end
|
129
|
+
|
130
|
+
def setup_stylesheets
|
131
|
+
say 'Set up stylesheets'
|
132
|
+
build :setup_stylesheets
|
133
|
+
end
|
134
|
+
|
135
|
+
def setup_git
|
136
|
+
say 'Initializing git'
|
137
|
+
invoke :setup_gitignore
|
138
|
+
invoke :init_git
|
139
|
+
end
|
140
|
+
|
141
|
+
def create_heroku_apps
|
142
|
+
if options[:heroku]
|
143
|
+
say 'Creating Heroku apps'
|
144
|
+
build :create_heroku_apps
|
145
|
+
build :set_heroku_remotes
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def create_github_repo
|
150
|
+
if options[:github]
|
151
|
+
say 'Creating Github repo'
|
152
|
+
build :create_github_repo, options[:github]
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
def setup_gitignore
|
157
|
+
build :gitignore_files
|
158
|
+
end
|
159
|
+
|
160
|
+
def init_git
|
161
|
+
build :init_git
|
162
|
+
end
|
163
|
+
|
164
|
+
def copy_libraries
|
165
|
+
say 'Copying libraries'
|
166
|
+
build :copy_libraries
|
167
|
+
end
|
168
|
+
|
169
|
+
def copy_miscellaneous_files
|
170
|
+
say 'Copying miscellaneous support files'
|
171
|
+
build :copy_miscellaneous_files
|
172
|
+
end
|
173
|
+
|
174
|
+
def customize_error_pages
|
175
|
+
say 'Customizing the 500/404/422 pages'
|
176
|
+
build :customize_error_pages
|
177
|
+
end
|
178
|
+
|
179
|
+
def update_routes
|
180
|
+
build :update_routes
|
181
|
+
end
|
182
|
+
|
183
|
+
def migrate_database
|
184
|
+
say 'Migrating database'
|
185
|
+
build :migrate_database
|
186
|
+
end
|
187
|
+
|
188
|
+
def outro
|
189
|
+
say 'Congratulations! Replication complete!'
|
190
|
+
say "Remember to run 'rails generate airbrake' with your API key."
|
191
|
+
end
|
192
|
+
|
193
|
+
def run_bundle
|
194
|
+
# Let's not: We'll bundle manually at the right spot
|
195
|
+
end
|
196
|
+
|
197
|
+
protected
|
198
|
+
|
199
|
+
def get_builder_class
|
200
|
+
Replicator::AppBuilder
|
201
|
+
end
|
202
|
+
|
203
|
+
def using_active_record?
|
204
|
+
!options[:skip_active_record]
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
data/replicator.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path('../lib', __FILE__)
|
3
|
+
require 'replicator/version'
|
4
|
+
require 'date'
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.required_ruby_version = '>= 2.0.0'
|
8
|
+
s.add_dependency 'bundler', '~> 1.3'
|
9
|
+
s.add_dependency 'rails', '4.0.0'
|
10
|
+
s.authors = ['teleporter']
|
11
|
+
s.date = Date.today.strftime('%Y-%m-%d')
|
12
|
+
|
13
|
+
s.description = <<-HERE
|
14
|
+
Rails application generator used at Teleporter, based on thoughtbot/suspenders.
|
15
|
+
HERE
|
16
|
+
|
17
|
+
s.email = 'hire@teleporter.io'
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map { |file| File.basename(file) }
|
19
|
+
s.extra_rdoc_files = %w[README.md LICENSE]
|
20
|
+
s.files = `git ls-files`.split("\n")
|
21
|
+
s.homepage = 'http://github.com/teleporter/replicator'
|
22
|
+
s.license = 'MIT'
|
23
|
+
s.name = 'rails-replicator'
|
24
|
+
s.rdoc_options = ['--charset=UTF-8']
|
25
|
+
s.require_paths = ['lib']
|
26
|
+
s.summary = "Generate a Rails app using Teleporter's best practices."
|
27
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
28
|
+
s.version = Replicator::VERSION
|
29
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
ruby '2.0.0'
|
4
|
+
|
5
|
+
gem 'airbrake', '~> 3.1'
|
6
|
+
# gem 'ancestry', '~> 2.0'
|
7
|
+
gem 'bootstrap-sass', github: 'thomas-mcdonald/bootstrap-sass', branch: '3'
|
8
|
+
gem 'cancan', '~> 1.6'
|
9
|
+
gem 'coffee-rails', '~> 4.0'
|
10
|
+
gem 'delayed_job_active_record', '~> 4.0'
|
11
|
+
gem 'devise', '~> 3.1'
|
12
|
+
gem 'email_validator', '~> 1.4'
|
13
|
+
gem 'figaro', '~> 0.7'
|
14
|
+
gem 'font-awesome-rails', '~> 3.2'
|
15
|
+
gem 'jquery-rails', '~> 3.0'
|
16
|
+
gem 'neat', '~> 1.4'
|
17
|
+
gem 'newrelic_rpm', '~> 3.6'
|
18
|
+
gem 'pg', '~> 0.17'
|
19
|
+
gem 'rack-timeout', '~> 0.0'
|
20
|
+
gem 'rails', '4.0.0'
|
21
|
+
gem 'recipient_interceptor', '~> 0.1'
|
22
|
+
gem 'rolify', '~> 3.2'
|
23
|
+
gem 'sass-rails', '~> 4.0'
|
24
|
+
gem 'slim', '~> 2.0'
|
25
|
+
# gem 'stripe', '~> 1.7'
|
26
|
+
gem 'tinymce-rails', '~> 4.0'
|
27
|
+
gem 'turbolinks', '~> 1.3'
|
28
|
+
gem 'uglifier', '~> 1.3'
|
29
|
+
|
30
|
+
group :development do
|
31
|
+
gem 'better_errors', '~> 1.0'
|
32
|
+
gem 'binding_of_caller', platforms: [:mri_19, :mri_20, :rbx]
|
33
|
+
gem 'guard-bundler', '~> 1.0'
|
34
|
+
gem 'guard-rails', '~> 0.4'
|
35
|
+
gem 'guard-rspec', '~> 2.5'
|
36
|
+
gem 'haml-rails', '~> 0.4'
|
37
|
+
gem 'haml2slim', '~> 0.4'
|
38
|
+
gem 'html2haml', '~> 1.0'
|
39
|
+
gem 'hub', '~> 1.10', require: nil
|
40
|
+
gem 'quiet_assets', '~> 1.0'
|
41
|
+
gem 'rb-fchange', '~> 0.0', require: false
|
42
|
+
gem 'rb-fsevent', '~> 0.9', require: false
|
43
|
+
gem 'rb-inotify', '~> 0.9', require: false
|
44
|
+
end
|
45
|
+
|
46
|
+
group :development, :test do
|
47
|
+
gem 'factory_girl_rails', '~> 4.2'
|
48
|
+
gem 'guard-spork', '~> 1.5'
|
49
|
+
gem 'guard-rspec', '~> 2.5'
|
50
|
+
gem 'rspec-rails', '~> 2.14'
|
51
|
+
gem 'spork-rails', github: 'sporkrb/spork-rails'
|
52
|
+
end
|
53
|
+
|
54
|
+
group :staging, :production do
|
55
|
+
gem 'rails_12factor', '~> 0.0' # heroku asset pipeline helper
|
56
|
+
gem 'unicorn', '~> 4.6'
|
57
|
+
end
|
58
|
+
|
59
|
+
group :test do
|
60
|
+
gem 'capybara', '~> 2.1'
|
61
|
+
gem 'database_cleaner', '~> 1.0'
|
62
|
+
gem 'email_spec', '~> 1.5'
|
63
|
+
gem 'launchy', '~> 2.3'
|
64
|
+
gem 'shoulda-matchers', '~> 2.4'
|
65
|
+
gem 'simplecov', '~> 0.7', require: false
|
66
|
+
gem 'timecop', '~> 0.6'
|
67
|
+
gem 'webmock', '~> 1.13'
|
68
|
+
end
|
data/templates/Procfile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
- flash.each do |name, msg|
|
2
|
+
- if name.to_s == 'alert'
|
3
|
+
.alert.alert-danger
|
4
|
+
= link_to "×".html_safe, '#', 'data-dismiss' => 'alert', 'aria-hidden' => 'true', class: 'close'
|
5
|
+
i.icon-remove
|
6
|
+
|
|
7
|
+
= msg
|
8
|
+
- else
|
9
|
+
.alert.alert-success
|
10
|
+
= link_to "×".html_safe, '#', 'data-dismiss' => 'alert', 'aria-hidden' => 'true', class: 'close'
|
11
|
+
i.icon-ok
|
12
|
+
|
|
13
|
+
= msg
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class Ability
|
2
|
+
include CanCan::Ability
|
3
|
+
|
4
|
+
def initialize(user)
|
5
|
+
user ||= User.new # guest user (not logged in)
|
6
|
+
if user.has_role? :admin
|
7
|
+
can :manage, :all
|
8
|
+
else
|
9
|
+
can :read, :all
|
10
|
+
# can :read, Page do |page|
|
11
|
+
# page.published?
|
12
|
+
# end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class Admin::BaseController < ApplicationController
|
2
|
+
before_filter :authenticate_as_admin
|
3
|
+
|
4
|
+
private
|
5
|
+
def authenticate_as_admin
|
6
|
+
unless user_is_an_admin?
|
7
|
+
redirect_to root_path, alert: 'You must first login as an admin to do that!'
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def user_is_an_admin?
|
12
|
+
current_user && current_user.has_role?(:admin)
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
doctype html
|
2
|
+
html
|
3
|
+
head
|
4
|
+
title = content_for?(:title) ? yield(:title) : "<%= app_name %>"
|
5
|
+
meta name="viewport" content="width=device-width, initial-scale=1.0"
|
6
|
+
= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true
|
7
|
+
= javascript_include_tag "application", "data-turbolinks-track" => true
|
8
|
+
= csrf_meta_tags
|
9
|
+
body
|
10
|
+
.page
|
11
|
+
nav.page-nav.navbar.navbar-default role="navigation"
|
12
|
+
.container
|
13
|
+
= link_to "<%= app_name %>", '/', class: 'navbar-brand'
|
14
|
+
ul.nav.navbar-nav
|
15
|
+
ul.nav.navbar-nav.pull-right
|
16
|
+
- if user_signed_in?
|
17
|
+
li = link_to "Logout", logout_path, method: :delete
|
18
|
+
- else
|
19
|
+
li = link_to "Sign Up", signup_path
|
20
|
+
li = link_to "Login", login_path
|
21
|
+
.container
|
22
|
+
= render 'flashes'
|
23
|
+
= yield
|
24
|
+
= render 'javascript'
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module BackgroundJobs
|
2
|
+
def run_background_jobs_immediately
|
3
|
+
delay_jobs = Delayed::Worker.delay_jobs
|
4
|
+
Delayed::Worker.delay_jobs = false
|
5
|
+
yield
|
6
|
+
ensure
|
7
|
+
Delayed::Worker.delay_jobs = delay_jobs
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
RSpec.configure do |config|
|
12
|
+
config.around(:each, type: :feature) do |example|
|
13
|
+
run_background_jobs_immediately do
|
14
|
+
example.run
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
config.include BackgroundJobs
|
19
|
+
end
|
data/templates/bin_setup
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/usr/bin/env sh
|
2
|
+
|
3
|
+
# Set up Rails app. Run this script immediately after cloning the codebase.
|
4
|
+
# https://github.com/thoughtbot/guides/tree/master/protocol
|
5
|
+
|
6
|
+
# Set up Ruby dependencies via Bundler
|
7
|
+
bundle install
|
8
|
+
|
9
|
+
# Set up the database
|
10
|
+
bundle exec rake db:setup
|
11
|
+
|
12
|
+
# Set up configurable environment variables
|
13
|
+
if [ ! -f .env ]; then
|
14
|
+
cp .sample.env .env
|
15
|
+
fi
|
16
|
+
|
17
|
+
# Pick a port for Foreman
|
18
|
+
echo "port: 3000" > .foreman
|
19
|
+
|
20
|
+
# Set up DNS via Pow
|
21
|
+
# if [ -d ~/.pow ]
|
22
|
+
# then
|
23
|
+
# echo 7000 > ~/.pow/`basename $PWD`
|
24
|
+
# else
|
25
|
+
# echo "Pow not set up but the team uses it for this project. Setup: http://goo.gl/RaDPO"
|
26
|
+
# fi
|
@@ -0,0 +1,21 @@
|
|
1
|
+
RSpec.configure do |config|
|
2
|
+
config.before(:suite) do
|
3
|
+
DatabaseCleaner.clean_with(:deletion)
|
4
|
+
end
|
5
|
+
|
6
|
+
config.before(:each) do
|
7
|
+
DatabaseCleaner.strategy = :transaction
|
8
|
+
end
|
9
|
+
|
10
|
+
config.before(:each, :js => true) do
|
11
|
+
DatabaseCleaner.strategy = :deletion
|
12
|
+
end
|
13
|
+
|
14
|
+
config.before(:each) do
|
15
|
+
DatabaseCleaner.start
|
16
|
+
end
|
17
|
+
|
18
|
+
config.after(:each) do
|
19
|
+
DatabaseCleaner.clean
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
h1.page-header Resend confirmation instructions
|
2
|
+
|
3
|
+
= form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post }) do |f|
|
4
|
+
= devise_error_messages!
|
5
|
+
.form-group
|
6
|
+
= f.label :email, class: 'form-label'
|
7
|
+
= f.email_field :email, autofocus: true, class: 'form-control'
|
8
|
+
|
9
|
+
.form-actions
|
10
|
+
= f.submit 'Resend confirmation instructions', class: 'btn btn-primary btn-lg'
|
11
|
+
|
12
|
+
= render 'devise/shared/links'
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<p>Hello <%= @resource.email %>!</p>
|
2
|
+
|
3
|
+
<p>Someone has requested a link to change your password. You can do this through the link below.</p>
|
4
|
+
|
5
|
+
<p><%= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @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>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<p>Hello <%= @resource.email %>!</p>
|
2
|
+
|
3
|
+
<p>Your account has been locked due to an excessive number 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 => @token) %></p>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
.col-md-6.col-md-offset-3
|
2
|
+
h1.page-header Change your password
|
3
|
+
|
4
|
+
= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f|
|
5
|
+
= devise_error_messages!
|
6
|
+
= f.hidden_field :reset_password_token
|
7
|
+
|
8
|
+
.form-group
|
9
|
+
= f.label :password, 'New password', class: 'form-label'
|
10
|
+
= f.password_field :password, autofocus: true, class: 'form-control'
|
11
|
+
|
12
|
+
.form-group
|
13
|
+
= f.label :password_confirmation, 'Confirm new password', class: 'form-label'
|
14
|
+
= f.password_field :password_confirmation, class: 'form-control'
|
15
|
+
|
16
|
+
.form-action
|
17
|
+
= f.submit 'Change my password', class: 'btn btn-primary btn-lg'
|
18
|
+
|
19
|
+
= render 'devise/shared/links'
|
@@ -0,0 +1,14 @@
|
|
1
|
+
.col-md-6.col-md-offset-3
|
2
|
+
h1.page-header Forgot your password?
|
3
|
+
|
4
|
+
= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post }) do |f|
|
5
|
+
= devise_error_messages!
|
6
|
+
|
7
|
+
.form-group
|
8
|
+
= f.label :email, class: 'form-label'
|
9
|
+
= f.email_field :email, autofocus: true, class: 'form-control'
|
10
|
+
|
11
|
+
.form-actions
|
12
|
+
= f.submit 'Send me reset password instructions', class: 'btn btn-primary btn-lg'
|
13
|
+
|
14
|
+
= render 'devise/shared/links'
|
@@ -0,0 +1,36 @@
|
|
1
|
+
.col-md-6.col-md-offset-3
|
2
|
+
h1.page-header Edit #{resource_name.to_s.humanize}
|
3
|
+
|
4
|
+
= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f|
|
5
|
+
= devise_error_messages!
|
6
|
+
|
7
|
+
.form-group
|
8
|
+
= f.label :email, class: 'form-label'
|
9
|
+
= f.email_field :email, autofocus: true, class: 'form-control'
|
10
|
+
|
11
|
+
- if devise_mapping.confirmable? && resource.pending_reconfirmation?
|
12
|
+
.alert.alert-success Currently waiting confirmation for: #{resource.unconfirmed_email}
|
13
|
+
|
14
|
+
.form-group
|
15
|
+
= f.label :password, class: 'form-label'
|
16
|
+
i (leave blank if you don't want to change it)
|
17
|
+
= f.password_field :password, autocomplete: "off", class: 'form-control'
|
18
|
+
|
19
|
+
.form-group
|
20
|
+
= f.label :password_confirmation, class: 'form-label'
|
21
|
+
= f.password_field :password_confirmation, class: 'form-control'
|
22
|
+
|
23
|
+
.form-group
|
24
|
+
= f.label :current_password, class: 'form-label'
|
25
|
+
i (we need your current password to confirm your changes)
|
26
|
+
= f.password_field :current_password, class: 'form-control'
|
27
|
+
|
28
|
+
= f.submit "Update", class: 'btn btn-primary btn-lg'
|
29
|
+
|
30
|
+
h3 Cancel my account
|
31
|
+
|
32
|
+
p
|
33
|
+
| Unhappy?
|
34
|
+
= button_to 'Cancel my account', registration_path(resource_name), data: { confirm: "Are you sure?" }, method: :delete, class: 'btn btn-danger'
|
35
|
+
|
36
|
+
p = link_to 'Back', :back
|
@@ -0,0 +1,22 @@
|
|
1
|
+
.col-md-6.col-md-offset-3
|
2
|
+
h1.page-header Sign up
|
3
|
+
|
4
|
+
= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f|
|
5
|
+
= devise_error_messages!
|
6
|
+
|
7
|
+
.form-group
|
8
|
+
= f.label :email, class: 'form-label'
|
9
|
+
= f.email_field :email, autofocus: true, class: 'form-control'
|
10
|
+
|
11
|
+
.form-group
|
12
|
+
= f.label :password, class: 'form-label'
|
13
|
+
= f.password_field :password, class: 'form-control'
|
14
|
+
|
15
|
+
.form-group
|
16
|
+
= f.label :password_confirmation, class: 'form-label'
|
17
|
+
= f.password_field :password_confirmation, class: 'form-control'
|
18
|
+
|
19
|
+
.form-actions
|
20
|
+
= f.submit 'Sign up', class: 'btn btn-primary btn-lg'
|
21
|
+
|
22
|
+
= render 'devise/shared/links'
|