devise_materialize 0.0.4.test3 → 0.0.5.alpha
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +18 -0
- data/.gitignore +5 -0
- data/.rubocop.yml +5 -0
- data/.yardopts +1 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +33 -12
- data/README.md +52 -12
- data/Rakefile +21 -0
- data/circle.yml +21 -0
- data/devise_materialize.gemspec +6 -17
- data/lib/devise_materialize/version.rb +1 -1
- data/lib/generators/devise_materialize/install_generator.rb +17 -31
- data/lib/generators/templates/assets/stylesheets/devise.scss +53 -0
- data/lib/generators/templates/erb/simple_form/confirmations/new.html.erb +7 -6
- data/lib/generators/templates/erb/simple_form/mailer/unlock_instructions.html.erb +8 -1
- data/lib/generators/templates/erb/simple_form/passwords/edit.html.erb +36 -0
- data/lib/generators/templates/erb/simple_form/passwords/new.html.erb +30 -0
- data/lib/generators/templates/erb/simple_form/registrations/edit.html.erb +42 -0
- data/lib/generators/templates/erb/simple_form/registrations/new.html.erb +36 -0
- data/lib/generators/templates/erb/simple_form/sessions/new.html.erb +34 -0
- data/lib/generators/templates/erb/simple_form/shared/_links.html.erb +40 -0
- data/lib/generators/templates/erb/simple_form/unlocks/new.html.erb +30 -0
- data/lib/generators/templates/haml/simple_form/confirmations/new.html.haml +1 -1
- data/lib/generators/templates/haml/simple_form/passwords/edit.html.haml +23 -16
- data/lib/generators/templates/haml/simple_form/passwords/new.html.haml +19 -12
- data/lib/generators/templates/haml/simple_form/registrations/edit.html.haml +1 -1
- data/lib/generators/templates/haml/simple_form/registrations/new.html.haml +23 -16
- data/lib/generators/templates/haml/simple_form/sessions/new.html.haml +22 -15
- data/lib/generators/templates/haml/simple_form/unlocks/new.html.haml +19 -12
- data/lib/generators/templates/helpers/devise_helper.rb +18 -0
- data/lib/generators/templates/slim/simple_form/confirmations/new.html.slim +21 -0
- data/lib/generators/templates/slim/simple_form/mailer/confirmation_instructions.html.slim +30 -0
- data/lib/generators/templates/slim/simple_form/mailer/password_change.html.slim +31 -0
- data/lib/generators/templates/slim/simple_form/mailer/reset_password_instructions.html.slim +38 -0
- data/lib/generators/templates/slim/simple_form/mailer/unlock_instructions.html.slim +35 -0
- data/lib/generators/templates/slim/simple_form/passwords/edit.html.slim +23 -0
- data/lib/generators/templates/slim/simple_form/passwords/new.html.slim +20 -0
- data/lib/generators/templates/slim/simple_form/registrations/edit.html.slim +30 -0
- data/lib/generators/templates/slim/simple_form/registrations/new.html.slim +24 -0
- data/lib/generators/templates/slim/simple_form/sessions/new.html.slim +23 -0
- data/lib/generators/templates/slim/simple_form/shared/_links.html.slim +29 -0
- data/lib/generators/templates/slim/simple_form/unlocks/new.html.slim +20 -0
- data/test/devise_materialize_test.rb +5 -0
- data/test/lib/install_generator_test.rb +92 -0
- data/test/rails_app/Rakefile +8 -0
- data/test/rails_app/app/controllers/application_controller.rb +7 -0
- data/test/rails_app/app/controllers/home_controller.rb +5 -0
- data/test/rails_app/app/helpers/application_helper.rb +4 -0
- data/test/rails_app/app/views/home/index.html.erb +1 -0
- data/test/rails_app/app/views/layouts/application.html.erb +13 -0
- data/test/rails_app/bin/bundle +4 -0
- data/test/rails_app/bin/rails +5 -0
- data/test/rails_app/bin/rake +5 -0
- data/test/rails_app/config.ru +5 -0
- data/test/rails_app/config/application.rb +13 -0
- data/test/rails_app/config/boot.rb +15 -0
- data/test/rails_app/config/database.yml +18 -0
- data/test/rails_app/config/environment.rb +6 -0
- data/test/rails_app/config/environments/development.rb +31 -0
- data/test/rails_app/config/environments/production.rb +87 -0
- data/test/rails_app/config/environments/test.rb +46 -0
- data/test/rails_app/config/initializers/backtrace_silencers.rb +8 -0
- data/test/rails_app/config/initializers/inflections.rb +3 -0
- data/test/rails_app/config/initializers/secret_token.rb +4 -0
- data/test/rails_app/config/initializers/session_store.rb +2 -0
- data/test/rails_app/config/routes.rb +4 -0
- data/test/rails_app/log/test.log +288 -0
- data/test/rails_app/public/404.html +26 -0
- data/test/rails_app/public/422.html +26 -0
- data/test/rails_app/public/500.html +26 -0
- data/{lib/generators/templates/.keep → test/rails_app/public/favicon.ico} +0 -0
- data/test/test_helper.rb +31 -0
- metadata +79 -68
- data/lib/generators/devise_materialize/USAGE +0 -5
@@ -0,0 +1,53 @@
|
|
1
|
+
.login-form {
|
2
|
+
margin: auto !important;
|
3
|
+
|
4
|
+
.card {
|
5
|
+
max-width: 500px;
|
6
|
+
width: 500px;
|
7
|
+
|
8
|
+
.form-errors {
|
9
|
+
margin-bottom: 10px;
|
10
|
+
padding: 15px;
|
11
|
+
|
12
|
+
ul {
|
13
|
+
margin-top: 0;
|
14
|
+
margin-bottom: 0;
|
15
|
+
}
|
16
|
+
}
|
17
|
+
|
18
|
+
.form-inputs {
|
19
|
+
.input-field {
|
20
|
+
label {
|
21
|
+
&.active::after {
|
22
|
+
content: attr(data-hint) !important;
|
23
|
+
opacity: 1;
|
24
|
+
}
|
25
|
+
}
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
29
|
+
.card-title {
|
30
|
+
font-size: 40px;
|
31
|
+
line-height: 50px !important;
|
32
|
+
}
|
33
|
+
|
34
|
+
.card-action {
|
35
|
+
a {
|
36
|
+
text-transform: none !important;
|
37
|
+
}
|
38
|
+
|
39
|
+
.devise-links {
|
40
|
+
text-align: right;
|
41
|
+
}
|
42
|
+
}
|
43
|
+
|
44
|
+
.divider {
|
45
|
+
margin-bottom: 10px;
|
46
|
+
}
|
47
|
+
}
|
48
|
+
|
49
|
+
abbr {
|
50
|
+
border-bottom: 0 !important;
|
51
|
+
color: #f00;
|
52
|
+
}
|
53
|
+
}
|
@@ -4,17 +4,18 @@
|
|
4
4
|
<div class="card-content">
|
5
5
|
<span class="card-title center">Resend Confirmation Instructions</span>
|
6
6
|
<div class="divider"></div>
|
7
|
-
<%= simple_form_for resource, as: resource_name,
|
8
|
-
url: confirmation_path(resource_name), html: { method: :post } do |f|
|
9
|
-
|
7
|
+
<%= simple_form_for resource, as: resource_name, %>
|
8
|
+
url: confirmation_path(resource_name), html: { method: :post } do |f|
|
9
|
+
<% if devise_error_messages? || alert %>
|
10
10
|
<div class="form-errors red lighten-1">
|
11
11
|
<%= devise_error_messages! %>
|
12
12
|
<%= alert %>
|
13
13
|
</div>
|
14
14
|
<% end %>
|
15
15
|
<div class="form-inputs row">
|
16
|
-
<%= f.input :email, autofocus: true, required: true,
|
17
|
-
value: (resource.pending_reconfirmation? ? resource.unconfirmed_email : resource.email)
|
16
|
+
<%= f.input :email, autofocus: true, required: true, %>
|
17
|
+
value: (resource.pending_reconfirmation? ? resource.unconfirmed_email : resource.email)
|
18
|
+
<% end %>
|
18
19
|
</div>
|
19
20
|
<div class="form-actions center">
|
20
21
|
<%= f.button :submit, "Resend Confirmation Instructions" %>
|
@@ -23,7 +24,7 @@
|
|
23
24
|
</div>
|
24
25
|
<div class="card-action">
|
25
26
|
<div class="devise-links">
|
26
|
-
<%= render
|
27
|
+
<%= render "<%= namespace.downcase %>/shared/links" %>
|
27
28
|
</div>
|
28
29
|
</div>
|
29
30
|
</div>
|
@@ -26,7 +26,14 @@
|
|
26
26
|
</span>
|
27
27
|
<div class"divider"></div>
|
28
28
|
<div class="center">
|
29
|
-
|
29
|
+
<p>
|
30
|
+
Your account has been locked due to an excessive number of
|
31
|
+
unsuccessful sign in attempts.
|
32
|
+
</p>
|
33
|
+
<p> Click the link below to unlock your account:
|
34
|
+
<%= link_to 'Unlock my Account', class: 'btn waves-effect cyan',
|
35
|
+
unlock_url(@resource, unlock_token: @token) %>
|
36
|
+
</p>
|
30
37
|
</div>
|
31
38
|
</div>
|
32
39
|
</div>
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<div class="row login-form">
|
2
|
+
<div class="col s12">
|
3
|
+
<div class="card hoverable">
|
4
|
+
<div class="card-content">
|
5
|
+
<span class="card-title center">Change your Password</span>
|
6
|
+
<div class="divider"></div>
|
7
|
+
<%= simple_form_for resource, as: resource_name, %>
|
8
|
+
url: password_path(resource_name), html: { method: :put } do |f|
|
9
|
+
<% if devise_error_messages? || alert %>
|
10
|
+
<div class="form-errors red lighten-1">
|
11
|
+
<%= devise_error_messages! %>
|
12
|
+
<%= alert %>
|
13
|
+
</div>
|
14
|
+
<% end %>
|
15
|
+
<div class="form-inputs row">
|
16
|
+
<%= f.hidden_field :reset_password_token %>
|
17
|
+
<%= f.input :password, autofocus: true, required: true, autocomplete: false, %>
|
18
|
+
hint: "#{@minimum_password_length} Characters Minimum"
|
19
|
+
<% end %>
|
20
|
+
<%= f.input :password_confirmation, autofocus: true, required: true, %>
|
21
|
+
autocomplete: false
|
22
|
+
<% end %>
|
23
|
+
</div>
|
24
|
+
<div class="form-actions center">
|
25
|
+
<%= f.button :submit, "Change my Password" %>
|
26
|
+
</div>
|
27
|
+
<% end %>
|
28
|
+
</div>
|
29
|
+
<div class="card-action">
|
30
|
+
<div class="devise-links">
|
31
|
+
<%= render "<%= namespace.downcase %>/shared/links" %>
|
32
|
+
</div>
|
33
|
+
</div>
|
34
|
+
</div>
|
35
|
+
</div>
|
36
|
+
</div>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<div class="row login-form">
|
2
|
+
<div class="col s12">
|
3
|
+
<div class="card hoverable">
|
4
|
+
<div class="card-content">
|
5
|
+
<span class="card-title center">Forgot your Password?</span>
|
6
|
+
<div class="divider"></div>
|
7
|
+
<%= simple_form_for resource, as: resource_name, %>
|
8
|
+
url: password_path(resource_name), html: { method: :post } do |f|
|
9
|
+
<% if devise_error_messages? || alert %>
|
10
|
+
<div class="form-errors red lighten-1">
|
11
|
+
<%= devise_error_messages! %>
|
12
|
+
<%= alert %>
|
13
|
+
</div>
|
14
|
+
<% end %>
|
15
|
+
<div class="form-inputs row">
|
16
|
+
<%= f.input :email, autofocus: true, required: true %>
|
17
|
+
</div>
|
18
|
+
<div class="form-actions center">
|
19
|
+
<%= f.button :submit, "Send Me Reset Instructions" %>
|
20
|
+
</div>
|
21
|
+
<% end %>
|
22
|
+
</div>
|
23
|
+
<div class="card-action">
|
24
|
+
<div class="devise-links">
|
25
|
+
<%= render "<%= namespace.downcase %>/shared/links" %>
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
</div>
|
30
|
+
</div>
|
@@ -0,0 +1,42 @@
|
|
1
|
+
<div class="row login-form">
|
2
|
+
<div class="col s12 offset-m3">
|
3
|
+
<div class="card hoverable">
|
4
|
+
<div class="card-content">
|
5
|
+
<span class="card-title center">
|
6
|
+
Edit
|
7
|
+
<%= resource_name.to_s.humanize %>
|
8
|
+
</span>
|
9
|
+
<div class="divider"></div>
|
10
|
+
<%= simple_form_for resource, as: resource_name, %>
|
11
|
+
url: registration_path(resource_name), html: { method: :put } do |f|
|
12
|
+
<% if devise_error_messages? || alert || (devise_mapping.confirmable? && resource.pending_reconfirmation?) %>
|
13
|
+
<div class="form-errors red lighten-1">
|
14
|
+
<%= devise_error_messages! %>
|
15
|
+
<%= alert %>
|
16
|
+
Currently waiting confirmation for:
|
17
|
+
<%= resource.unconfirmed_email %>
|
18
|
+
</div>
|
19
|
+
<% end %>
|
20
|
+
<div class="form-inputs row">
|
21
|
+
<%= f.input :email, autofocus: true %>
|
22
|
+
<%= f.input :password, %>
|
23
|
+
label: "Password (Leave Blank if you don't want to change it)",
|
24
|
+
autocomplete: "off",
|
25
|
+
hint: "#{@minimum_password_length} Characters Minimum"
|
26
|
+
<% end %>
|
27
|
+
<%= f.input :password_confirmation, autocomplete: "off" %>
|
28
|
+
<%= f.input :current_password, autocomplete: "off", %>
|
29
|
+
hint: "we need your current password to confirm your changes"
|
30
|
+
<% end %>
|
31
|
+
</div>
|
32
|
+
<div class="form-actions center">
|
33
|
+
<%= f.button :submit, "Update" %>
|
34
|
+
</div>
|
35
|
+
<% end %>
|
36
|
+
</div>
|
37
|
+
<div class="card-action center">
|
38
|
+
<%= render "<%= namespace.downcase %>/shared/links" %>
|
39
|
+
</div>
|
40
|
+
</div>
|
41
|
+
</div>
|
42
|
+
</div>
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<div class="row login-form">
|
2
|
+
<div class="col s12">
|
3
|
+
<div class="card hoverable">
|
4
|
+
<div class="card-content">
|
5
|
+
<span class="card-title center">Sign Up</span>
|
6
|
+
<div class="divider"></div>
|
7
|
+
<%= simple_form_for resource, as: resource_name, %>
|
8
|
+
url: registration_path(resource_name) do |f|
|
9
|
+
<% if devise_error_messages? || alert %>
|
10
|
+
<div class="form-errors red lighten-1">
|
11
|
+
<%= devise_error_messages! %>
|
12
|
+
<%= alert %>
|
13
|
+
</div>
|
14
|
+
<% end %>
|
15
|
+
<div class="form-inputs row">
|
16
|
+
<%= f.input :email, autofocus: true, required: true %>
|
17
|
+
<%= f.input :password, autocomplete: "off", required: true, icon: "lock", %>
|
18
|
+
label_html: { data: { hint: "#{@minimum_password_length} Characters Minimum" } }
|
19
|
+
<% end %>
|
20
|
+
<%= f.input :password_confirmation, autocomplete: "off", required: true, %>
|
21
|
+
icon: "lock"
|
22
|
+
<% end %>
|
23
|
+
</div>
|
24
|
+
<div class="form-actions center">
|
25
|
+
<%= f.button :submit, "Sign Up" %>
|
26
|
+
</div>
|
27
|
+
<% end %>
|
28
|
+
</div>
|
29
|
+
<div class="card-action">
|
30
|
+
<div class="devise-links">
|
31
|
+
<%= render "<%= namespace.downcase %>/shared/links" %>
|
32
|
+
</div>
|
33
|
+
</div>
|
34
|
+
</div>
|
35
|
+
</div>
|
36
|
+
</div>
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<div class="row login-form">
|
2
|
+
<div class="col s12">
|
3
|
+
<div class="card hoverable">
|
4
|
+
<div class="card-content">
|
5
|
+
<span class="card-title center">Log In</span>
|
6
|
+
<div class="divider"></div>
|
7
|
+
<%= simple_form_for resource, as: resource_name, %>
|
8
|
+
url: session_path(resource_name) do |f|
|
9
|
+
<% if devise_error_messages? || alert %>
|
10
|
+
<div class="form-errors red lighten-1">
|
11
|
+
<%= devise_error_messages! %>
|
12
|
+
<%= alert %>
|
13
|
+
</div>
|
14
|
+
<% end %>
|
15
|
+
<div class="form-inputs row">
|
16
|
+
<%= f.input :email, required: true, autofocus: true %>
|
17
|
+
<%= f.input :password, required: true, autocomplete: "off", icon: "lock", %>
|
18
|
+
hint: false
|
19
|
+
<% end %>
|
20
|
+
<%= f.input :remember_me, as: :boolean if devise_mapping.rememberable? %>
|
21
|
+
</div>
|
22
|
+
<div class="form-actions center">
|
23
|
+
<%= f.button :submit, "Log In" %>
|
24
|
+
</div>
|
25
|
+
<% end %>
|
26
|
+
</div>
|
27
|
+
<div class="card-action">
|
28
|
+
<div class="devise-links">
|
29
|
+
<%= render "<%= namespace.downcase %>/shared/links" %>
|
30
|
+
</div>
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
</div>
|
34
|
+
</div>
|
@@ -0,0 +1,40 @@
|
|
1
|
+
<% if controller_name != 'sessions' && !current_user.present? %>
|
2
|
+
Already a Member?
|
3
|
+
<%= link_to "Log In", new_session_path(resource_name) %>
|
4
|
+
<br/>
|
5
|
+
<% end %>
|
6
|
+
<% if devise_mapping.registerable? && controller_name != 'registrations' %>
|
7
|
+
Not A Member?
|
8
|
+
<%= link_to "Sign Up", new_registration_path(resource_name) %>
|
9
|
+
<br/>
|
10
|
+
<% end %>
|
11
|
+
<% if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations' %>
|
12
|
+
Forgot
|
13
|
+
<%= link_to "Password?", new_password_path(resource_name) %>
|
14
|
+
<br/>
|
15
|
+
<% end %>
|
16
|
+
<% if devise_mapping.confirmable? && controller_name != 'confirmations' %>
|
17
|
+
<%= link_to "Didn't Receive Confirmation Instructions?", %>
|
18
|
+
new_confirmation_path(resource_name)
|
19
|
+
<% end %>
|
20
|
+
<br/>
|
21
|
+
<% end %>
|
22
|
+
<% if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %>
|
23
|
+
<%= link_to "Didn't Receive Unlock Instructions?", %>
|
24
|
+
new_unlock_path(resource_name)
|
25
|
+
<% end %>
|
26
|
+
<br/>
|
27
|
+
<% end %>
|
28
|
+
<% if devise_mapping.omniauthable? %>
|
29
|
+
<% resource_class.omniauth_providers.each do |provider| %>
|
30
|
+
<%= link_to "Sign in with #{OmniAuth::Utils.camelize(provider)}", %>
|
31
|
+
omniauth_authorize_path(resource_name, provider)
|
32
|
+
<% end %>
|
33
|
+
<% end %>
|
34
|
+
<% end %>
|
35
|
+
<% if controller_name == 'registrations' && current_user.present? %>
|
36
|
+
<%= link_to "Cancel My Account", registration_path(resource_name), %>
|
37
|
+
data: { confirm: "Are You Sure you want to Delete Your Account?",
|
38
|
+
method: :delete }, class: "btn waves-effect red"
|
39
|
+
<% end %>
|
40
|
+
<% end %>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<div class="row login-form">
|
2
|
+
<div class="col s12 offset-m3">
|
3
|
+
<div class="card hoverable">
|
4
|
+
<div class="card-content">
|
5
|
+
<span class="card-title center">Resend Unlock Instructions</span>
|
6
|
+
<div class="divider"></div>
|
7
|
+
<%= simple_form_for resource, as: resource_name, url: unlock_path(resource_name), %>
|
8
|
+
html: { method: :post } do |f|
|
9
|
+
<% if devise_error_messages? || alert %>
|
10
|
+
<div class="form-errors red lighten-1">
|
11
|
+
<%= devise_error_messages! %>
|
12
|
+
<%= alert %>
|
13
|
+
</div>
|
14
|
+
<% end %>
|
15
|
+
<div class="form-inputs row">
|
16
|
+
<%= f.input :email, autofocus: true, required: true %>
|
17
|
+
</div>
|
18
|
+
<div class="form-actions center">
|
19
|
+
<%= f.button :submit, "Resend Unlock Instructions" %>
|
20
|
+
</div>
|
21
|
+
<% end %>
|
22
|
+
</div>
|
23
|
+
<div class="card-action">
|
24
|
+
<div class="devise-links">
|
25
|
+
<%= render "<%= namespace.downcase %>/shared/links" %>
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
</div>
|
30
|
+
</div>
|
@@ -1,16 +1,23 @@
|
|
1
|
-
|
2
|
-
.
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
1
|
+
.row.login-form
|
2
|
+
.col.s12
|
3
|
+
.card.hoverable
|
4
|
+
.card-content
|
5
|
+
%span.card-title.center Change your Password
|
6
|
+
.divider
|
7
|
+
= simple_form_for resource, as: resource_name,
|
8
|
+
url: password_path(resource_name), html: { method: :put } do |f|
|
9
|
+
- if devise_error_messages? || alert
|
10
|
+
.form-errors.red.lighten-1
|
11
|
+
= devise_error_messages!
|
12
|
+
= alert
|
13
|
+
.form-inputs.row
|
14
|
+
= f.hidden_field :reset_password_token
|
15
|
+
= f.input :password, autofocus: true, required: true, autocomplete: false,
|
16
|
+
hint: "#{@minimum_password_length} Characters Minimum"
|
17
|
+
= f.input :password_confirmation, autofocus: true, required: true,
|
18
|
+
autocomplete: false
|
19
|
+
.form-actions.center
|
20
|
+
= f.button :submit, "Change my Password"
|
21
|
+
.card-action
|
22
|
+
.devise-links
|
23
|
+
= render "<%= namespace.downcase %>/shared/links"
|
@@ -1,12 +1,19 @@
|
|
1
|
-
|
2
|
-
.
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
1
|
+
.row.login-form
|
2
|
+
.col.s12
|
3
|
+
.card.hoverable
|
4
|
+
.card-content
|
5
|
+
%span.card-title.center Forgot your Password?
|
6
|
+
.divider
|
7
|
+
= simple_form_for resource, as: resource_name,
|
8
|
+
url: password_path(resource_name), html: { method: :post } do |f|
|
9
|
+
- if devise_error_messages? || alert
|
10
|
+
.form-errors.red.lighten-1
|
11
|
+
= devise_error_messages!
|
12
|
+
= alert
|
13
|
+
.form-inputs.row
|
14
|
+
= f.input :email, autofocus: true, required: true
|
15
|
+
.form-actions.center
|
16
|
+
= f.button :submit, "Send Me Reset Instructions"
|
17
|
+
.card-action
|
18
|
+
.devise-links
|
19
|
+
= render "<%= namespace.downcase %>/shared/links"
|