orats 0.6.5 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +231 -58
  3. data/lib/orats/cli.rb +63 -25
  4. data/lib/orats/commands/common.rb +47 -22
  5. data/lib/orats/commands/{outdated → diff}/compare.rb +5 -4
  6. data/lib/orats/commands/diff/exec.rb +86 -0
  7. data/lib/orats/commands/{outdated → diff}/parse.rb +5 -1
  8. data/lib/orats/commands/inventory.rb +121 -0
  9. data/lib/orats/commands/{play.rb → playbook.rb} +5 -5
  10. data/lib/orats/commands/project/exec.rb +74 -0
  11. data/lib/orats/commands/{new → project}/rails.rb +57 -81
  12. data/lib/orats/commands/{new → project}/server.rb +6 -4
  13. data/lib/orats/templates/auth.rb +26 -481
  14. data/lib/orats/templates/base.rb +74 -716
  15. data/lib/orats/templates/includes/common/LICENSE +22 -0
  16. data/lib/orats/templates/includes/new/rails/.env +43 -0
  17. data/lib/orats/templates/includes/{Gemfile → new/rails/Gemfile} +1 -1
  18. data/lib/orats/templates/includes/new/rails/Procfile +3 -0
  19. data/lib/orats/templates/includes/new/rails/README.md +3 -0
  20. data/lib/orats/templates/includes/{app → new/rails/app}/assets/favicon/favicon_base.png +0 -0
  21. data/lib/orats/templates/includes/new/rails/app/helpers/application_helper.rb +53 -0
  22. data/lib/orats/templates/includes/new/rails/app/models/account.rb +40 -0
  23. data/lib/orats/templates/includes/new/rails/app/views/devise/confirmations/new.html.erb +26 -0
  24. data/lib/orats/templates/includes/new/rails/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  25. data/lib/orats/templates/includes/new/rails/app/views/devise/mailer/reset_password_instructions.html.erb +10 -0
  26. data/lib/orats/templates/includes/new/rails/app/views/devise/mailer/unlock_instructions.html.erb +8 -0
  27. data/lib/orats/templates/includes/new/rails/app/views/devise/passwords/edit.html.erb +28 -0
  28. data/lib/orats/templates/includes/new/rails/app/views/devise/passwords/new.html.erb +26 -0
  29. data/lib/orats/templates/includes/new/rails/app/views/devise/registrations/edit.html.erb +51 -0
  30. data/lib/orats/templates/includes/new/rails/app/views/devise/registrations/new.html.erb +31 -0
  31. data/lib/orats/templates/includes/new/rails/app/views/devise/sessions/new.html.erb +39 -0
  32. data/lib/orats/templates/includes/new/rails/app/views/devise/shared/_links.html.erb +38 -0
  33. data/lib/orats/templates/includes/new/rails/app/views/devise/unlocks/new.html.erb +26 -0
  34. data/lib/orats/templates/includes/new/rails/app/views/layouts/_disqus_comments_snippet.html.erb +19 -0
  35. data/lib/orats/templates/includes/new/rails/app/views/layouts/_disqus_count_snippet.html.erb +12 -0
  36. data/lib/orats/templates/includes/new/rails/app/views/layouts/_flash.html.erb +10 -0
  37. data/lib/orats/templates/includes/new/rails/app/views/layouts/_footer.html.erb +2 -0
  38. data/lib/orats/templates/includes/new/rails/app/views/layouts/_google_analytics_snippet.html.erb +13 -0
  39. data/lib/orats/templates/includes/new/rails/app/views/layouts/_google_analytics_tracker.html.erb +4 -0
  40. data/lib/orats/templates/includes/new/rails/app/views/layouts/_navigation.html.erb +18 -0
  41. data/lib/orats/templates/includes/new/rails/app/views/layouts/_navigation_auth.html.erb +15 -0
  42. data/lib/orats/templates/includes/new/rails/app/views/layouts/_navigation_links.html.erb +3 -0
  43. data/lib/orats/templates/includes/new/rails/app/views/layouts/application.html.erb +48 -0
  44. data/lib/orats/templates/includes/new/rails/app/views/pages/home.html.erb +81 -0
  45. data/lib/orats/templates/includes/new/rails/config/database.yml +19 -0
  46. data/lib/orats/templates/includes/new/rails/config/environments/staging.rb +5 -0
  47. data/lib/orats/templates/includes/new/rails/config/initializers/devise_async.rb +1 -0
  48. data/lib/orats/templates/includes/new/rails/config/initializers/mini_profiler.rb +4 -0
  49. data/lib/orats/templates/includes/new/rails/config/initializers/sidekiq.rb +16 -0
  50. data/lib/orats/templates/includes/new/rails/config/puma.rb +25 -0
  51. data/lib/orats/templates/includes/new/rails/config/secrets.yml +12 -0
  52. data/lib/orats/templates/includes/new/rails/config/sidekiq.yml +5 -0
  53. data/lib/orats/templates/includes/new/rails/config/sitemap.rb +20 -0
  54. data/lib/orats/templates/includes/new/rails/config/whenever.rb +7 -0
  55. data/lib/orats/templates/includes/new/rails/lib/backup/config.rb +116 -0
  56. data/lib/orats/templates/includes/new/rails/lib/backup/models/backup.rb +55 -0
  57. data/lib/orats/templates/includes/new/rails/lib/tasks/orats/backup.rake +18 -0
  58. data/lib/orats/templates/includes/new/rails/lib/tasks/orats/favicon.rake +48 -0
  59. data/lib/orats/templates/includes/new/rails/public/404.html +13 -0
  60. data/lib/orats/templates/includes/new/rails/public/422.html +13 -0
  61. data/lib/orats/templates/includes/new/rails/public/500.html +13 -0
  62. data/lib/orats/templates/includes/new/rails/public/502.html +13 -0
  63. data/lib/orats/templates/includes/new/rails/test/fixtures/accounts.yml +27 -0
  64. data/lib/orats/templates/includes/new/rails/test/models/account_test.rb +46 -0
  65. data/lib/orats/templates/includes/{Galaxyfile → playbook/Galaxyfile} +0 -0
  66. data/lib/orats/templates/includes/playbook/site.yml +53 -0
  67. data/lib/orats/templates/playbook.rb +115 -0
  68. data/lib/orats/version.rb +1 -1
  69. data/test/integration/cli_test.rb +122 -75
  70. data/test/test_helper.rb +16 -8
  71. metadata +63 -14
  72. data/lib/orats/commands/new/ansible.rb +0 -98
  73. data/lib/orats/commands/new/exec.rb +0 -60
  74. data/lib/orats/commands/outdated/exec.rb +0 -46
  75. data/lib/orats/templates/play.rb +0 -185
@@ -0,0 +1,22 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) Time.now.year author_name author_email
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ 'Software'), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,43 @@
1
+ RAILS_ENV: development
2
+
3
+ PROJECT_PATH: /home/yourname/dev/testproj
4
+ TIME_ZONE: Eastern Time (US & Canada)
5
+ DEFAULT_LOCALE: en
6
+
7
+ GOOGLE_ANALYTICS_UA: ""
8
+ DISQUS_SHORT_NAME: ""
9
+ S3_ACCESS_KEY_ID: ""
10
+ S3_SECRET_ACCESS_KEY: ""
11
+ S3_REGION: ""
12
+
13
+ TOKEN_RAILS_SECRET: generate_token
14
+
15
+ SMTP_ADDRESS: smtp.gmail.com
16
+ SMTP_PORT: 587 # 465 if you use ssl
17
+ SMTP_DOMAIN: gmail.com
18
+ SMTP_USERNAME: app_name@gmail.com
19
+ SMTP_PASSWORD: thebestpassword
20
+ SMTP_AUTH: plain
21
+ SMTP_ENCRYPTION: starttls
22
+
23
+ ACTION_MAILER_HOST: localhost:3000
24
+ ACTION_MAILER_DEFAULT_FROM: info@app_name.com
25
+ ACTION_MAILER_DEFAULT_TO: me@app_name.com
26
+
27
+ DATABASE_NAME: app_name
28
+ DATABASE_HOST: localhost
29
+ DATABASE_POOL: 25
30
+ DATABASE_TIMEOUT: 5000
31
+ DATABASE_USERNAME: postgres
32
+ DATABASE_PASSWORD: supersecrets
33
+
34
+ CACHE_HOST: localhost
35
+ CACHE_PORT: 6379
36
+ CACHE_DATABASE: 0
37
+ CACHE_PASSWORD: ""
38
+
39
+ PUMA_THREADS_MIN: 0
40
+ PUMA_THREADS_MAX: 1
41
+ PUMA_WORKERS: 0
42
+
43
+ SIDEKIQ_CONCURRENCY: 25
@@ -21,7 +21,7 @@ gem 'backup', '~> 4.0.1', require: false
21
21
 
22
22
  gem 'sitemap_generator', '~> 5.0.2'
23
23
  gem 'favicon_maker', '~> 1.3'
24
- gem 'kaminari', '~> 0.16.0'
24
+ gem 'kaminari', '~> 0.16.1'
25
25
 
26
26
  group :development do
27
27
  gem 'foreman', require: false
@@ -0,0 +1,3 @@
1
+ web: puma -C config/puma.rb | grep -v --line-buffered ' 304 -'
2
+ worker: sidekiq -C config/sidekiq.yml
3
+ log: tail -f log/development.log | grep -xv --line-buffered '^[[:space:]]*' | grep -v --line-buffered '/assets/'
@@ -0,0 +1,3 @@
1
+ ## Project information
2
+
3
+ This project was generated with [orats](https://github.com/nickjj/orats) vVERSION.
@@ -0,0 +1,53 @@
1
+ module ApplicationHelper
2
+ def title(page_title)
3
+ content_for(:title) { page_title }
4
+ end
5
+
6
+ def meta_description(page_meta_description)
7
+ content_for(:meta_description) { page_meta_description }
8
+ end
9
+
10
+ def heading(page_heading)
11
+ content_for(:heading) { page_heading }
12
+ end
13
+
14
+ def link_to_all_favicons
15
+ '<link href="speeddial-160x160.png" rel="icon" type="image/png" />
16
+ <link href="apple-touch-icon-228x228-precomposed.png" rel="apple-touch-icon-precomposed" sizes="228x228" type="image/png" />
17
+ <link href="apple-touch-icon-152x152-precomposed.png" rel="apple-touch-icon-precomposed" sizes="152x152" type="image/png" />
18
+ <link href="apple-touch-icon-144x144-precomposed.png" rel="apple-touch-icon-precomposed" sizes="144x144" type="image/png" />
19
+ <link href="apple-touch-icon-120x120-precomposed.png" rel="apple-touch-icon-precomposed" sizes="120x120" type="image/png" />
20
+ <link href="apple-touch-icon-114x114-precomposed.png" rel="apple-touch-icon-precomposed" sizes="114x114" type="image/png" />
21
+ <link href="apple-touch-icon-76x76-precomposed.png" rel="apple-touch-icon-precomposed" sizes="76x76" type="image/png" />
22
+ <link href="apple-touch-icon-72x72-precomposed.png" rel="apple-touch-icon-precomposed" sizes="72x72" type="image/png" />
23
+ <link href="apple-touch-icon-60x60-precomposed.png" rel="apple-touch-icon-precomposed" sizes="60x60" type="image/png" />
24
+ <link href="apple-touch-icon-57x57-precomposed.png" rel="apple-touch-icon-precomposed" sizes="57x57" type="image/png" />
25
+ <link href="favicon-196x196.png" rel="icon" sizes="196x196" type="image/png" />
26
+ <link href="favicon-160x160.png" rel="icon" sizes="160x160" type="image/png" />
27
+ <link href="favicon-96x96.png" rel="icon" sizes="96x96" type="image/png" />
28
+ <link href="favicon-64x64.png" rel="icon" sizes="64x64" type="image/png" />
29
+ <link href="favicon-32x32.png" rel="icon" sizes="32x32" type="image/png" />
30
+ <link href="favicon-24x24.png" rel="icon" sizes="24x24" type="image/png" />
31
+ <link href="favicon-16x16.png" rel="icon" sizes="16x16" type="image/png" />
32
+ <link href="favicon.ico" rel="icon" type="image/x-icon" />
33
+ <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />'.html_safe
34
+ end
35
+
36
+ def humanize_boolean(input)
37
+ input ||= ''
38
+ case input.to_s.downcase
39
+ when 't', 'true'
40
+ 'Yes'
41
+ else
42
+ 'No'
43
+ end
44
+ end
45
+
46
+ def css_for_boolean(input)
47
+ if input
48
+ 'success'
49
+ else
50
+ 'danger'
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,40 @@
1
+ class Account < ActiveRecord::Base
2
+ ROLES = %w[admin guest]
3
+
4
+ devise :database_authenticatable, :registerable, :recoverable, :rememberable,
5
+ :trackable, :timeoutable, :lockable, :validatable, :async
6
+
7
+ before_validation :ensure_password, on: :create
8
+
9
+ after_save :invalidate_cache
10
+
11
+ validates :role, inclusion: {in: ROLES}
12
+
13
+ def self.serialize_from_session(key, salt)
14
+ # store the current_account in the cache so we do not perform a db lookup on each authenticated page
15
+ single_key = key.is_a?(Array) ? key.first : key
16
+
17
+ Rails.cache.fetch("account:#{single_key}") do
18
+ Account.where(id: single_key).entries.first
19
+ end
20
+ end
21
+
22
+ def self.generate_password(length = 10)
23
+ Devise.friendly_token.first(length)
24
+ end
25
+
26
+ def is?(role_check)
27
+ role.to_sym == role_check
28
+ end
29
+
30
+ private
31
+
32
+ def ensure_password
33
+ # only generate a password if it does not exist
34
+ self.password ||= Account.generate_password
35
+ end
36
+
37
+ def invalidate_cache
38
+ Rails.cache.delete("account:#{id}")
39
+ end
40
+ end
@@ -0,0 +1,26 @@
1
+ <%
2
+ title 'Confirm'
3
+ meta_description '...'
4
+ heading 'Confirm'
5
+ %>
6
+
7
+ <div class="row">
8
+ <div class="col-sm-4">
9
+ <%= form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: {method: :post}) do |f| %>
10
+ <div class="form-group">
11
+ <%= f.label :email %>
12
+ <%= f.email_field :email, class: 'form-control', maxlength: 254, autofocus: true,
13
+ data: {
14
+ 'rule-required' => 'true',
15
+ 'rule-maxlength' => '254'
16
+ } %>
17
+ </div>
18
+ <%= button_tag type: 'submit', class: 'btn btn-primary' do %>
19
+ Send
20
+ <% end %>
21
+ <% end %>
22
+ </div>
23
+ <div class="col-sm-6 col-sm-offset-2">
24
+ <%= render 'devise/shared/links' %>
25
+ </div>
26
+ </div>
@@ -0,0 +1,5 @@
1
+ <p>Welcome <%= @email %>!</p>
2
+
3
+ <p>You can confirm your account email through the link below:</p>
4
+
5
+ <p><%= link_to 'Confirm my account', confirmation_url(@resource, confirmation_token: @token) %></p>
@@ -0,0 +1,10 @@
1
+ <p>Hello <%= @resource.email %>!</p>
2
+
3
+ <p>Someone has requested a link to change your password. You can do this through
4
+ the link below.</p>
5
+
6
+ <p><%= link_to 'Change my password', edit_password_url(@resource, reset_password_token: @token) %></p>
7
+
8
+ <p>If you didn't request this, please ignore this email.</p>
9
+ <p>Your password won't change until you access the link above and create a new
10
+ one.</p>
@@ -0,0 +1,8 @@
1
+ <p>Hello <%= @resource.email %>!</p>
2
+
3
+ <p>Your account has been locked due to an excessive number of unsuccessful sign
4
+ in attempts.</p>
5
+
6
+ <p>Click the link below to unlock your account:</p>
7
+
8
+ <p><%= link_to 'Unlock my account', unlock_url(@resource, unlock_token: @token) %></p>
@@ -0,0 +1,28 @@
1
+ <%
2
+ title 'Change your password'
3
+ meta_description '...'
4
+ heading 'Change your password'
5
+ %>
6
+
7
+ <div class="row">
8
+ <div class="col-sm-4">
9
+ <%= form_for resource, as: resource_name, url: password_path(resource_name), html: {method: :put} do |f| %>
10
+ <%= f.hidden_field :reset_password_token %>
11
+ <div class="form-group">
12
+ <%= f.label :password, 'New password' %>
13
+ <%= f.password_field :password, maxlength: 128, class: 'form-control', autofocus: true,
14
+ data: {
15
+ 'rule-required' => 'true',
16
+ 'rule-minlength' => '8',
17
+ 'rule-maxlength' => '128'
18
+ } %>
19
+ </div>
20
+ <%= button_tag type: 'submit', class: 'btn btn-primary' do %>
21
+ Send
22
+ <% end %>
23
+ <% end %>
24
+ </div>
25
+ <div class="col-sm-6 col-sm-offset-2">
26
+ <%= render 'devise/shared/links' %>
27
+ </div>
28
+ </div>
@@ -0,0 +1,26 @@
1
+ <%
2
+ title 'Forgot your password?'
3
+ meta_description '...'
4
+ heading 'Forgot your password?'
5
+ %>
6
+
7
+ <div class="row">
8
+ <div class="col-sm-4">
9
+ <%= form_for resource, as: resource_name, url: password_path(resource_name), html: {method: :post} do |f| %>
10
+ <div class="form-group">
11
+ <%= f.label :email %>
12
+ <%= f.email_field :email, class: 'form-control', autofocus: true, maxlength: 254,
13
+ data: {
14
+ 'rule-required' => 'true',
15
+ 'rule-maxlength' => '254'
16
+ } %>
17
+ </div>
18
+ <%= button_tag type: 'submit', class: 'btn btn-primary' do %>
19
+ Send
20
+ <% end %>
21
+ <% end %>
22
+ </div>
23
+ <div class="col-sm-6 col-sm-offset-2">
24
+ <%= render 'devise/shared/links' %>
25
+ </div>
26
+ </div>
@@ -0,0 +1,51 @@
1
+ <%
2
+ title 'Edit your account'
3
+ meta_description '...'
4
+ heading 'Edit your account'
5
+ %>
6
+
7
+ <div class="row">
8
+ <div class="col-sm-6">
9
+ <%= form_for resource, as: resource_name, url: registration_path(resource_name), html: {method: :patch} do |f| %>
10
+ <div class="form-group">
11
+ <%= f.label :current_password %>
12
+ <span class="help-block form-help-adjust-margin">
13
+ <small>
14
+ Supply your current password to make any changes
15
+ </small>
16
+ </span>
17
+ <%= f.password_field :current_password, maxlength: 128, class: 'form-control',
18
+ data: {
19
+ 'rule-required' => 'true',
20
+ 'rule-minlength' => '8',
21
+ 'rule-maxlength' => '128'
22
+ } %>
23
+ </div>
24
+ <div class="form-group">
25
+ <%= f.label :email %>
26
+ <%= f.email_field :email, class: 'form-control', maxlength: 254, autofocus: true %>
27
+ </div>
28
+ <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
29
+ <h3>Currently waiting confirmation
30
+ for: <%= resource.unconfirmed_email %></h3>
31
+ <% end %>
32
+ <div class="form-group">
33
+ <%= f.label :password %>
34
+ <span class="help-block form-help-adjust-margin">
35
+ <small>
36
+ Leave this blank if you do not want to change it
37
+ </small>
38
+ </span>
39
+ <%= f.password_field :password, class: 'form-control' %>
40
+ </div>
41
+ <%= button_tag type: 'submit', class: 'btn btn-primary' do %>
42
+ Save
43
+ <% end %>
44
+ <% end %>
45
+ </div>
46
+ <div class="col-sm-6">
47
+ <p>
48
+ Unhappy? <%= button_to 'Cancel my account', registration_path(resource_name), method: :delete %>
49
+ </p>
50
+ </div>
51
+ </div>
@@ -0,0 +1,31 @@
1
+ <%
2
+ title 'Register a new account'
3
+ meta_description '...'
4
+ heading 'Register a new account'
5
+ %>
6
+
7
+ <div class="row">
8
+ <div class="col-sm-4">
9
+ <%= form_for resource, as: resource_name, url: registration_path(resource_name) do |f| %>
10
+ <div class="form-group">
11
+ <%= f.label :email %>
12
+ <%= f.email_field :email, class: 'form-control', maxlength: 254, autofocus: true %>
13
+ </div>
14
+ <div class="form-group">
15
+ <%= f.label :password %>
16
+ <%= f.password_field :password, maxlength: 128, class: 'form-control',
17
+ data: {
18
+ 'rule-required' => 'true',
19
+ 'rule-minlength' => '8',
20
+ 'rule-maxlength' => '128'
21
+ } %>
22
+ </div>
23
+ <%= button_tag type: 'submit', class: 'btn btn-primary' do %>
24
+ Register
25
+ <% end %>
26
+ <% end %>
27
+ </div>
28
+ <div class="col-sm-6 col-sm-offset-2">
29
+ <%= render 'devise/shared/links' %>
30
+ </div>
31
+ </div>
@@ -0,0 +1,39 @@
1
+ <%
2
+ title 'Sign in'
3
+ meta_description '...'
4
+ heading 'Sign in'
5
+ %>
6
+
7
+ <div class="row">
8
+ <div class="col-sm-4">
9
+ <%= form_for resource, as: resource_name, url: session_path(resource_name) do |f| %>
10
+ <div class="form-group">
11
+ <%= f.label :email %>
12
+ <%= f.email_field :email, maxlength: 254, class: 'form-control', autofocus: true %>
13
+ </div>
14
+ <div class="form-group">
15
+ <%= f.label :password %>
16
+ <%= f.password_field :password, maxlength: 128, class: 'form-control',
17
+ data: {
18
+ 'rule-required' => 'true',
19
+ 'rule-minlength' => '8',
20
+ 'rule-maxlength' => '128'
21
+ } %>
22
+ </div>
23
+ <% if devise_mapping.rememberable? -%>
24
+ <div class="checkbox">
25
+ <%= f.label :remember_me do %>
26
+ <%= f.check_box :remember_me %> Stay signed in
27
+ <% end %>
28
+ </div>
29
+ <% end -%>
30
+ <%= button_tag type: 'submit', class: 'btn btn-primary' do %>
31
+ Sign in
32
+ <% end %>
33
+ <% end %>
34
+ </div>
35
+ <div class="col-sm-6 col-sm-offset-2">
36
+ <h4 class="success-color">Having trouble accessing your account?</h4>
37
+ <%= render 'devise/shared/links' %>
38
+ </div>
39
+ </div>
@@ -0,0 +1,38 @@
1
+ <%= content_tag(:h4, 'Or do something else') if controller_name != 'sessions' %>
2
+ <ul>
3
+ <%- if controller_name != 'sessions' %>
4
+ <li>
5
+ <%= link_to 'Sign in', new_session_path(resource_name) %>
6
+ </li>
7
+ <% end -%>
8
+
9
+ <%- if devise_mapping.registerable? && controller_name != 'registrations' %>
10
+ <li>
11
+ <%= link_to 'Sign up', new_registration_path(resource_name) %>
12
+ </li>
13
+ <% end -%>
14
+
15
+ <%- if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations' %>
16
+ <li>
17
+ <%= link_to 'Forgot your password?', new_password_path(resource_name) %>
18
+ </li>
19
+ <% end -%>
20
+
21
+ <%- if devise_mapping.confirmable? && controller_name != 'confirmations' %>
22
+ <li>
23
+ <%= link_to 'Re-send confirmation instructions?', new_confirmation_path(resource_name) %>
24
+ </li>
25
+ <% end -%>
26
+
27
+ <%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %>
28
+ <li>
29
+ <%= link_to 'Are you locked out of your account?', new_unlock_path(resource_name) %>
30
+ </li>
31
+ <% end -%>
32
+
33
+ <%- if devise_mapping.omniauthable? %>
34
+ <%- resource_class.omniauth_providers.each do |provider| %>
35
+ <li><%= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider) %></li>
36
+ <% end -%>
37
+ <% end -%>
38
+ </ul>