bpluser 0.1.18 → 0.2.0
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.
- checksums.yaml +5 -5
- data/README.md +33 -0
- data/Rakefile +34 -3
- data/app/assets/config/bpluser_manifest.js +1 -0
- data/app/assets/javascripts/bpluser/folder_tools.js +26 -0
- data/app/controllers/bookmarks_controller.rb +50 -0
- data/app/controllers/concerns/bpluser/folders_verify_user.rb +20 -0
- data/app/controllers/concerns/bpluser/omniauth_callbacks.rb +27 -0
- data/app/controllers/concerns/bpluser/registrations.rb +35 -0
- data/app/controllers/concerns/bpluser/saved_searches.rb +62 -0
- data/app/controllers/folder_items_actions_controller.rb +77 -0
- data/app/controllers/folder_items_controller.rb +97 -0
- data/app/controllers/folders_controller.rb +100 -0
- data/app/controllers/saved_searches_controller.rb +5 -0
- data/app/controllers/users/omniauth_callbacks_controller.rb +7 -0
- data/app/controllers/users/registrations_controller.rb +7 -0
- data/app/controllers/users/sessions_controller.rb +6 -0
- data/app/controllers/users_controller.rb +25 -0
- data/app/helpers/bpluser/folders_helper_behavior.rb +11 -0
- data/app/helpers/folders_helper.rb +5 -0
- data/app/models/bpluser/folder.rb +21 -10
- data/app/models/bpluser/folder_item.rb +5 -7
- data/app/models/concerns/bpluser/users.rb +71 -0
- data/app/models/concerns/bpluser/validatable.rb +34 -0
- data/app/views/bookmarks/index.html.erb +58 -0
- data/app/views/bookmarks/update.js.erb +1 -0
- data/app/views/bpluser/folders/_folder.html.erb +36 -0
- data/app/views/catalog/_constraints.html.erb +14 -0
- data/app/views/catalog/_folder_item_control.html.erb +52 -0
- data/app/views/catalog/_save_search.html.erb +8 -0
- data/app/views/devise/confirmations/new.html.erb +14 -0
- data/app/views/devise/mailer/reset_password_instructions.html.erb +13 -0
- data/app/views/devise/passwords/edit.html.erb +32 -0
- data/app/views/devise/passwords/new.html.erb +30 -0
- data/app/views/devise/registrations/edit.html.erb +82 -0
- data/app/views/devise/registrations/new.html.erb +45 -0
- data/app/views/devise/sessions/new.html.erb +72 -0
- data/app/views/devise/shared/_links.erb +29 -0
- data/app/views/folder_items/create.js.erb +1 -0
- data/app/views/folder_items/destroy.js.erb +1 -0
- data/app/views/folder_items/item_actions.js.erb +2 -0
- data/app/views/folder_items/update.js.erb +1 -0
- data/app/views/folders/_in_folder.html.erb +3 -0
- data/app/views/folders/_new_edit_form_fields.html.erb +36 -0
- data/app/views/folders/edit.html.erb +25 -0
- data/app/views/folders/index.html.erb +67 -0
- data/app/views/folders/new.html.erb +26 -0
- data/app/views/folders/public_list.html.erb +41 -0
- data/app/views/folders/show.html.erb +82 -0
- data/app/views/saved_searches/index.html.erb +55 -0
- data/app/views/search_history/index.html.erb +57 -0
- data/app/views/shared/_folder_item_actions.html.erb +54 -0
- data/app/views/shared/_folder_tools.html.erb +4 -0
- data/app/views/shared/_tools.html.erb +16 -0
- data/app/views/shared/_user_util_links.html.erb +42 -0
- data/app/views/users/show.html.erb +33 -0
- data/config/locales/bpluser.en.yml +129 -0
- data/config/routes.rb +23 -2
- data/lib/bpluser/controller.rb +61 -0
- data/lib/bpluser/devise_guests_override.rb +21 -0
- data/lib/bpluser/engine.rb +27 -1
- data/lib/bpluser/version.rb +3 -1
- data/lib/bpluser.rb +21 -15
- data/lib/generators/bpluser/controller_generator.rb +29 -0
- data/lib/generators/bpluser/devise_generator.rb +40 -0
- data/lib/generators/bpluser/install_generator.rb +62 -0
- data/lib/generators/bpluser/templates/config/initializers/{devise.rb → devise.rb.bak} +0 -0
- data/lib/generators/bpluser/templates/config/locales/devise.en.yml +53 -0
- data/lib/generators/bpluser/templates/config/omniauth-polaris.yml +10 -15
- data/lib/generators/bpluser/templates/models/user.rb +3 -4
- data/lib/generators/bpluser/user_generator.rb +23 -0
- data/lib/tasks/bpluser_tasks.rake +27 -0
- metadata +131 -163
- data/app/controllers/bpluser/api_controller.rb +0 -8
- data/app/controllers/bpluser/users/omniauth_callbacks_controller.rb +0 -48
- data/app/controllers/bpluser/users/registrations_controller.rb +0 -35
- data/app/controllers/bpluser/users/sessions_controller.rb +0 -23
- data/app/models/bpluser/ability.rb +0 -22
- data/app/models/bpluser/application_record.rb +0 -5
- data/app/models/bpluser/concerns/users.rb +0 -190
- data/app/models/bpluser/concerns/validatable.rb +0 -47
- data/app/models/bpluser/user.rb~ +0 -213
- data/app/models/bpluser/user_institution.rb +0 -6
- data/app/models/bpluser/validatable.rb~ +0 -65
- data/lib/bpluser/routes.rb +0 -37
- data/lib/generators/bpluser/bpluser_generator.rb +0 -183
- data/lib/generators/bpluser/templates/config/hydra-ldap.yml +0 -33
- data/lib/generators/bpluser/templates/config/omniauth-facebook.yml +0 -14
- data/lib/generators/bpluser/templates/controllers/users/omniauth_callbacks_controller.rb +0 -3
- data/lib/generators/bpluser/templates/controllers/users/registrations_controller.rb +0 -3
- data/lib/generators/bpluser/templates/controllers/users/sessions_controller.rb +0 -3
- data/lib/generators/bpluser/templates/migrations/add_fields_to_user.rb +0 -22
- data/lib/generators/bpluser/templates/migrations/add_folder_items_to_folder.rb +0 -18
- data/lib/generators/bpluser/templates/migrations/add_folders_to_user.rb +0 -14
- data/lib/generators/bpluser/templates/migrations/create_institutions_for_users.rb +0 -16
- data/lib/generators/bpluser/templates/models/ability.rb +0 -4
- data/lib/generators/bpluser/templates/views/devise/registrations/edit.html.erb +0 -0
- data/lib/generators/bpluser/templates/views/devise/registrations/new.html.erb +0 -24
- data/lib/generators/bpluser/templates/views/devise/sessions/new.html.erb +0 -17
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
require 'rails/generators'
|
|
2
|
-
require 'rails/generators/migration'
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class BpluserGenerator < Rails::Generators::Base
|
|
6
|
-
include Rails::Generators::Migration
|
|
7
|
-
|
|
8
|
-
source_root File.expand_path('../templates', __FILE__)
|
|
9
|
-
|
|
10
|
-
argument :model_name, :type => :string , :default => "user"
|
|
11
|
-
class_option :devise , :type => :boolean, :default => false, :aliases => "-d", :desc => "Use Devise as authentication logic (this is default)."
|
|
12
|
-
class_option :role_management , :type => :boolean, :default => true, :aliases => "-r", :desc => "Use Hydra Role Management as authentication logic (this is default)."
|
|
13
|
-
class_option :institution_management , :type => :boolean, :default => true, :aliases => "-i", :desc => "Use BPL Institution Management as authentication logic (this is default)."
|
|
14
|
-
|
|
15
|
-
desc """
|
|
16
|
-
This generator makes the following changes to your application:
|
|
17
|
-
1. List here
|
|
18
|
-
|
|
19
|
-
Thank you for Installing BPLUser.
|
|
20
|
-
"""
|
|
21
|
-
|
|
22
|
-
# Implement the required interface for Rails::Generators::Migration.
|
|
23
|
-
# taken from http://github.com/rails/rails/blob/master/activerecord/lib/generators/active_record.rb
|
|
24
|
-
def self.next_migration_number(path)
|
|
25
|
-
unless @prev_migration_nr
|
|
26
|
-
@prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
|
|
27
|
-
else
|
|
28
|
-
@prev_migration_nr += 1
|
|
29
|
-
end
|
|
30
|
-
@prev_migration_nr.to_s
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def check_arguments
|
|
34
|
-
#if File.exists?("app/models/#{model_name}.rb") and options[:devise]
|
|
35
|
-
#puts "Because you have selected \"#{model_name}\", which is an existing class, you will need to install devise manually and then run this generator without the Devise option. You can find additional information here: https://github.com/plataformatec/devise. \n Please be sure to include a to_s method in #{model_name} that returns the users name or email, as this will be used by Blacklight to provide a link to user specific information."
|
|
36
|
-
#exit
|
|
37
|
-
#end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# Install Devise?
|
|
41
|
-
def generate_devise_assets
|
|
42
|
-
if options[:devise]
|
|
43
|
-
if Rails::VERSION::MAJOR == 4
|
|
44
|
-
gem "devise", github:'plataformatec/devise', branch: 'rails4'
|
|
45
|
-
else
|
|
46
|
-
gem "devise"
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
gem "devise-guests", "~> 0.3"
|
|
50
|
-
|
|
51
|
-
Bundler.with_clean_env do
|
|
52
|
-
run "bundle install"
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
generate "devise:install"
|
|
56
|
-
generate "devise", model_name.classify
|
|
57
|
-
generate "devise_guests", model_name.classify
|
|
58
|
-
generate "devise:views"
|
|
59
|
-
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
#Add gem dependenceies
|
|
65
|
-
def add_the_gems
|
|
66
|
-
gem 'omniauth'
|
|
67
|
-
gem 'omniauth-ldap'
|
|
68
|
-
gem 'omniauth-facebook'
|
|
69
|
-
gem 'omniauth-polaris', :git => 'https://github.com/boston-library/omniauth-polaris.git'
|
|
70
|
-
gem 'omniauth-password'
|
|
71
|
-
gem 'bootstrap_forms'
|
|
72
|
-
Bundler.with_clean_env do
|
|
73
|
-
run "bundle install"
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
# Copy all files in templates/config directory to host config
|
|
79
|
-
def create_configuration_files
|
|
80
|
-
copy_file "config/initializers/devise.rb", "config/initializers/devise.rb"
|
|
81
|
-
copy_file "controllers/users/omniauth_callbacks_controller.rb", "app/controllers/users/omniauth_callbacks_controller.rb"
|
|
82
|
-
copy_file "controllers/users/registrations_controller.rb", "app/controllers/users/registrations_controller.rb"
|
|
83
|
-
copy_file "controllers/users/sessions_controller.rb", "app/controllers/users/sessions_controller.rb"
|
|
84
|
-
copy_file "models/user.rb", "app/models/user.rb"
|
|
85
|
-
copy_file "models/ability.rb", "app/models/ability.rb"
|
|
86
|
-
copy_file "views/devise/registrations/new.html.erb", "app/views/devise/registrations/new.html.erb"
|
|
87
|
-
copy_file "views/devise/registrations/edit.html.erb", "app/views/devise/registrations/edit.html.erb"
|
|
88
|
-
copy_file "views/devise/sessions/new.html.erb", "app/views/devise/sessions/new.html.erb"
|
|
89
|
-
|
|
90
|
-
if !File.exists?("config/hydra-ldap.yml")
|
|
91
|
-
copy_file "config/hydra-ldap.yml", "config/hydra-ldap.yml"
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
if !File.exists?("config/omniauth-polaris.yml")
|
|
95
|
-
copy_file "config/omniauth-polaris.yml", "config/omniauth-polaris.yml"
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
if !File.exists?("config/omniauth-facebook.yml")
|
|
99
|
-
copy_file "config/omniauth-facebook.yml", "config/omniauth-facebook.yml"
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
# Setup the database migrations
|
|
105
|
-
def copy_migrations
|
|
106
|
-
# Can't get this any more DRY, because we need this order.
|
|
107
|
-
better_migration_template "add_fields_to_user.rb"
|
|
108
|
-
better_migration_template "add_folders_to_user.rb"
|
|
109
|
-
better_migration_template "add_folder_items_to_folder.rb"
|
|
110
|
-
#better_migration_template "create_institutions_for_users.rb"
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
# Install Hydra Role Management?
|
|
115
|
-
def generate_hydra_role_management
|
|
116
|
-
if options[:role_management]
|
|
117
|
-
if Rails::VERSION::MAJOR == 4
|
|
118
|
-
#gem "devise", github:'plataformatec/devise', branch: 'rails4'
|
|
119
|
-
else
|
|
120
|
-
gem "hydra-role-management"
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
Bundler.with_clean_env do
|
|
124
|
-
run "bundle install"
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
generate "roles"
|
|
128
|
-
|
|
129
|
-
Bundler.with_clean_env do
|
|
130
|
-
run "bundle install"
|
|
131
|
-
end
|
|
132
|
-
end
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
# Install BPL Institution management?
|
|
136
|
-
def generate_bpl_institution_management
|
|
137
|
-
if options[:institution_management]
|
|
138
|
-
if Rails::VERSION::MAJOR == 4
|
|
139
|
-
#gem "devise", github:'plataformatec/devise', branch: 'rails4'
|
|
140
|
-
else
|
|
141
|
-
gem 'bpl-institution-management', :git => 'https://github.com/boston-library/bpl-institution-management.git'
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
Bundler.with_clean_env do
|
|
145
|
-
run "bundle install"
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
generate "institutions"
|
|
149
|
-
|
|
150
|
-
Bundler.with_clean_env do
|
|
151
|
-
run "bundle install"
|
|
152
|
-
end
|
|
153
|
-
end
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
def inject_bpluser_routes
|
|
158
|
-
# These will end up in routes.rb file in reverse order
|
|
159
|
-
# we add em, since each is added at the top of file.
|
|
160
|
-
# we want "root" to be FIRST for optimal url generation.
|
|
161
|
-
#route('devise_for :users, :controllers => { :omniauth_callbacks => "bpluser/users/omniauth_callbacks" }')
|
|
162
|
-
gsub_file("config/routes.rb", "devise_for :users", "")
|
|
163
|
-
route('devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks", :registrations => "users/registrations", :sessions => "users/sessions"}')
|
|
164
|
-
route('mount Bpluser::Engine => "/bpluser"')
|
|
165
|
-
route('Bpluser.add_routes(self)')
|
|
166
|
-
end
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
private
|
|
170
|
-
|
|
171
|
-
def better_migration_template (file)
|
|
172
|
-
begin
|
|
173
|
-
migration_template "migrations/#{file}", "db/migrate/#{file}"
|
|
174
|
-
sleep 1 # ensure scripts have different time stamps
|
|
175
|
-
rescue
|
|
176
|
-
puts " \e[1m\e[34mMigrations\e[0m " + $!.message
|
|
177
|
-
end
|
|
178
|
-
end
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
end
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
test:
|
|
2
|
-
host: #######.bpl.org
|
|
3
|
-
port: 389
|
|
4
|
-
#group_base: nil
|
|
5
|
-
base: dc=bpl,dc=org
|
|
6
|
-
uid: #######
|
|
7
|
-
username: #####
|
|
8
|
-
password: #####
|
|
9
|
-
admin_base: dc=bpl,dc=org
|
|
10
|
-
|
|
11
|
-
development:
|
|
12
|
-
host: #######.bpl.org
|
|
13
|
-
port: 389
|
|
14
|
-
#group_base: nil
|
|
15
|
-
base: dc=bpl,dc=org
|
|
16
|
-
uid: #######
|
|
17
|
-
username: #####
|
|
18
|
-
password: #####
|
|
19
|
-
group_member: uniquemember # attribute name in a group to identify a member
|
|
20
|
-
group_owner: owner # attribute name to identify group owner
|
|
21
|
-
admin_base: dc=bpl,dc=org
|
|
22
|
-
|
|
23
|
-
production:
|
|
24
|
-
host: #######.bpl.org
|
|
25
|
-
port: 389
|
|
26
|
-
#group_base: nil
|
|
27
|
-
base: dc=bpl,dc=org
|
|
28
|
-
uid: #######
|
|
29
|
-
username: #####
|
|
30
|
-
password: #####
|
|
31
|
-
group_member: uniquemember # attribute name in a group to identify a member
|
|
32
|
-
group_owner: owner # attribute name to identify group owner
|
|
33
|
-
admin_base: dc=bpl,dc=org
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
test:
|
|
2
|
-
facebook_key: --------
|
|
3
|
-
facebook_secret: --------
|
|
4
|
-
facebook_scope: email
|
|
5
|
-
|
|
6
|
-
development:
|
|
7
|
-
facebook_key: --------
|
|
8
|
-
facebook_secret: --------
|
|
9
|
-
facebook_scope: email
|
|
10
|
-
|
|
11
|
-
production:
|
|
12
|
-
facebook_key: --------
|
|
13
|
-
facebook_secret: --------
|
|
14
|
-
facebook_scope: email
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
|
2
|
-
class AddFieldsToUser < ActiveRecord::Migration
|
|
3
|
-
def self.up
|
|
4
|
-
add_column :users, :username, :string
|
|
5
|
-
add_column :users, :provider, :string
|
|
6
|
-
add_column :users, :display_name, :string
|
|
7
|
-
add_column :users, :first_name, :string
|
|
8
|
-
add_column :users, :last_name, :string
|
|
9
|
-
add_column :users, :uid, :string
|
|
10
|
-
add_index :users, [:uid, :provider]
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def self.down
|
|
14
|
-
remove_column :users, :username
|
|
15
|
-
remove_column :users, :provider
|
|
16
|
-
remove_column :users, :display_name
|
|
17
|
-
remove_column :users, :first_name
|
|
18
|
-
remove_column :users, :last_name
|
|
19
|
-
remove_column :users, :uid
|
|
20
|
-
remove_index :users, [:uid, :provider]
|
|
21
|
-
end
|
|
22
|
-
end
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
class AddFolderItemsToFolder < ActiveRecord::Migration
|
|
2
|
-
def self.up
|
|
3
|
-
create_table :bpluser_folder_items do |t|
|
|
4
|
-
t.integer :folder_id
|
|
5
|
-
t.string :document_id
|
|
6
|
-
|
|
7
|
-
t.timestamps
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
add_index :bpluser_folder_items, :folder_id
|
|
11
|
-
add_index :bpluser_folder_items, :document_id
|
|
12
|
-
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def self.down
|
|
16
|
-
drop_table :bpluser_folder_items
|
|
17
|
-
end
|
|
18
|
-
end
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
class AddFoldersToUser < ActiveRecord::Migration
|
|
2
|
-
def self.up
|
|
3
|
-
create_table :bpluser_folders do |t|
|
|
4
|
-
t.string :title
|
|
5
|
-
t.integer :user_id, :null=>false
|
|
6
|
-
t.string :description
|
|
7
|
-
t.timestamps
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def self.down
|
|
12
|
-
drop_table :bpluser_folders
|
|
13
|
-
end
|
|
14
|
-
end
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
|
2
|
-
class CreateInstitutionsForUsers < ActiveRecord::Migration
|
|
3
|
-
def self.up
|
|
4
|
-
create_table :user_institutions do |t|
|
|
5
|
-
t.string :pid
|
|
6
|
-
t.references :user
|
|
7
|
-
|
|
8
|
-
t.timestamps
|
|
9
|
-
end
|
|
10
|
-
add_index :user_institutions, :user_id
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def self.down
|
|
14
|
-
drop_table :user_institutions
|
|
15
|
-
end
|
|
16
|
-
end
|
|
File without changes
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
<h2>Sign up</h2>
|
|
2
|
-
|
|
3
|
-
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
|
|
4
|
-
<%= devise_error_messages! %>
|
|
5
|
-
|
|
6
|
-
<div><%= f.label :email %><br />
|
|
7
|
-
<%= f.text_field :email %></div>
|
|
8
|
-
|
|
9
|
-
<div><%= f.label "First Name" %><br />
|
|
10
|
-
<%= f.text_field :first_name %></div>
|
|
11
|
-
|
|
12
|
-
<div><%= f.label "Last Name" %><br />
|
|
13
|
-
<%= f.text_field :last_name %></div>
|
|
14
|
-
|
|
15
|
-
<div><%= f.label :password %><br />
|
|
16
|
-
<%= f.password_field :password %></div>
|
|
17
|
-
|
|
18
|
-
<div><%= f.label :password_confirmation %><br />
|
|
19
|
-
<%= f.password_field :password_confirmation %></div>
|
|
20
|
-
|
|
21
|
-
<div><%= f.submit "Sign up" %></div>
|
|
22
|
-
<% end %>
|
|
23
|
-
|
|
24
|
-
<%= render "devise/shared/links" %>
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
<h2>Sign in</h2>
|
|
2
|
-
|
|
3
|
-
<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
|
|
4
|
-
<div><%= f.label "Email: " %><br />
|
|
5
|
-
<%= f.text_field :uid %></div>
|
|
6
|
-
|
|
7
|
-
<div><%= f.label :password %><br />
|
|
8
|
-
<%= f.password_field :password %></div>
|
|
9
|
-
|
|
10
|
-
<% if devise_mapping.rememberable? -%>
|
|
11
|
-
<div><%= f.check_box :remember_me %> <%= f.label :remember_me %></div>
|
|
12
|
-
<% end -%>
|
|
13
|
-
|
|
14
|
-
<div><%= f.submit "Sign in" %></div>
|
|
15
|
-
<% end %>
|
|
16
|
-
|
|
17
|
-
<%= render "devise/shared/links" %>
|