erp_tech_svcs 4.0.0 → 4.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 +4 -4
- data/README.md +0 -24
- data/app/controllers/api/v1/audit_log_items_controller.rb +33 -0
- data/app/controllers/api/v1/audit_logs_controller.rb +32 -0
- data/app/controllers/api/v1/capabilities_controller.rb +160 -0
- data/app/controllers/api/v1/file_assets_controller.rb +40 -0
- data/app/controllers/api/v1/groups_controller.rb +236 -0
- data/app/controllers/api/v1/security_roles_controller.rb +276 -0
- data/app/controllers/api/v1/users_controller.rb +262 -0
- data/app/controllers/erp_tech_svcs/session_controller.rb +8 -5
- data/app/controllers/erp_tech_svcs/user_controller.rb +14 -15
- data/app/mailers/user_mailer.rb +8 -5
- data/app/models/audit_log.rb +111 -36
- data/app/models/audit_log_item.rb +30 -0
- data/app/models/audit_log_item_type.rb +1 -0
- data/app/models/audit_log_type.rb +19 -0
- data/app/models/capability.rb +22 -6
- data/app/models/extensions/tracked_status_type.rb +3 -0
- data/app/models/file_asset.rb +245 -20
- data/app/models/file_asset_holder.rb +20 -0
- data/app/models/group.rb +38 -25
- data/app/models/notification.rb +32 -13
- data/app/models/notification_type.rb +13 -0
- data/app/models/security_role.rb +17 -4
- data/app/models/user.rb +116 -29
- data/app/validators/password_strength_validator.rb +1 -1
- data/app/views/user_mailer/activation_needed_email.html.erb +293 -15
- data/app/views/user_mailer/reset_password_email.html.erb +268 -13
- data/config/initializers/logger.rb +19 -0
- data/config/initializers/sorcery.rb +2 -0
- data/config/initializers/wickedpdf.rb +4 -0
- data/config/routes.rb +64 -0
- data/db/data_migrations/20110802200222_schedule_delete_expired_sessions_job.rb +1 -5
- data/db/data_migrations/20150819140550_create_job_tracker_for_notification.rb +14 -0
- data/db/migrate/20080805000010_base_tech_services.rb +99 -39
- data/db/migrate/20150414151421_add_nested_set_columns_to_security_role.rb +13 -0
- data/db/migrate/20150609003216_update_user_for_sorcery.rb +11 -0
- data/db/migrate/20150819135108_add_custom_fields_to_notifications.rb +5 -0
- data/db/migrate/20160122155402_add_description_to_file_asset.rb +13 -0
- data/db/migrate/20160310163060_add_created_by_updated_by_to_erp_tech_svcs.rb +35 -0
- data/db/migrate/20160313161611_add_tenant_id_to_audit_log.rb +16 -0
- data/lib/erp_tech_svcs.rb +6 -10
- data/lib/erp_tech_svcs/config.rb +7 -2
- data/lib/erp_tech_svcs/delayed_jobs/delete_expired_sessions_job.rb +49 -0
- data/lib/erp_tech_svcs/delayed_jobs/notification_job.rb +50 -0
- data/lib/erp_tech_svcs/engine.rb +0 -1
- data/lib/erp_tech_svcs/erp_tech_svcs_audit_log.rb +12 -6
- data/lib/erp_tech_svcs/extensions.rb +0 -1
- data/lib/erp_tech_svcs/extensions/active_record/has_capability_accessors.rb +57 -29
- data/lib/erp_tech_svcs/extensions/active_record/has_file_assets.rb +57 -31
- data/lib/erp_tech_svcs/extensions/active_record/has_security_roles.rb +12 -4
- data/lib/erp_tech_svcs/extensions/active_record/is_json.rb +22 -15
- data/lib/erp_tech_svcs/extensions/active_record/scoped_by.rb +16 -13
- data/lib/erp_tech_svcs/extensions/compass_ae/erp_base_erp_svcs/controllers/api/parties_controller.rb +15 -0
- data/lib/erp_tech_svcs/file_support.rb +1 -0
- data/lib/erp_tech_svcs/file_support/file_system_manager.rb +77 -44
- data/lib/erp_tech_svcs/file_support/manager.rb +12 -3
- data/lib/erp_tech_svcs/file_support/railties/compass_ae_resolver.rb +49 -0
- data/lib/erp_tech_svcs/file_support/s3_manager.rb +73 -51
- data/lib/erp_tech_svcs/utils/compass_access_negotiator.rb +11 -2
- data/lib/erp_tech_svcs/utils/default_nested_set_methods.rb +238 -46
- data/lib/erp_tech_svcs/version.rb +1 -1
- data/lib/tasks/erp_tech_svcs_tasks.rake +43 -5
- metadata +73 -42
- data/app/models/user_defined_data.rb +0 -6
- data/app/models/user_defined_field.rb +0 -8
- data/config/initializers/pdfkit.rb +0 -18
- data/db/data_migrations/20121130212146_note_capabilities.rb +0 -23
- data/db/migrate/20121116151510_create_groups.rb +0 -18
- data/db/migrate/20121126171612_upgrade_security.rb +0 -53
- data/db/migrate/20121126173506_upgrade_security2.rb +0 -274
- data/db/migrate/20130410135419_add_queue_to_delayed_jobs.rb +0 -13
- data/db/migrate/20130610163240_create_notifications.rb +0 -37
- data/db/migrate/20130725212647_add_party_id_idx_to_users.rb +0 -9
- data/db/migrate/20131113213843_add_audit_log_item_old_value.rb +0 -13
- data/db/migrate/20131113213844_add_erp_tech_svcs_missing_indexes.rb +0 -31
- data/db/migrate/20131129203603_add_user_defined_fields.rb +0 -43
- data/db/migrate/20141013060204_add_custom_fields_to_notifications.rb +0 -12
- data/db/migrate/20141108182427_add_scoped_by_to_file_assets.rb +0 -14
- data/lib/erp_tech_svcs/extensions/active_record/has_user_defined_data.rb +0 -147
- data/lib/erp_tech_svcs/sessions/delete_expired_sessions_job.rb +0 -47
- data/lib/erp_tech_svcs/sessions/delete_expired_sessions_service.rb +0 -15
- data/lib/erp_tech_svcs/utils/compass_logger.rb +0 -87
@@ -1,14 +1,269 @@
|
|
1
|
-
<!DOCTYPE html
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
<
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
4
|
+
<head>
|
5
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1"/>
|
7
|
+
<title>Reset Password</title>
|
8
|
+
<style type="text/css">
|
9
|
+
.ReadMsgBody {
|
10
|
+
width: 100%;
|
11
|
+
background-color: #ffffff;
|
12
|
+
}
|
13
|
+
|
14
|
+
.ExternalClass {
|
15
|
+
width: 100%;
|
16
|
+
background-color: #ffffff;
|
17
|
+
}
|
18
|
+
|
19
|
+
html {
|
20
|
+
width: 100%;
|
21
|
+
}
|
22
|
+
|
23
|
+
body {
|
24
|
+
-webkit-text-size-adjust: none;
|
25
|
+
-ms-text-size-adjust: none;
|
26
|
+
margin: 0;
|
27
|
+
padding: 0;
|
28
|
+
}
|
29
|
+
|
30
|
+
table {
|
31
|
+
border-spacing: 0;
|
32
|
+
border-collapse: collapse;
|
33
|
+
}
|
34
|
+
|
35
|
+
img {
|
36
|
+
display: block !important;
|
37
|
+
}
|
38
|
+
|
39
|
+
table td {
|
40
|
+
border-collapse: collapse;
|
41
|
+
}
|
42
|
+
|
43
|
+
.top-margin {
|
44
|
+
height: 50px;
|
45
|
+
}
|
46
|
+
|
47
|
+
.main-header {
|
48
|
+
padding: 50px 100px;
|
49
|
+
background: rgba(0, 0, 0, 0.5);
|
50
|
+
font-weight: 300;
|
51
|
+
}
|
52
|
+
|
53
|
+
.footer {
|
54
|
+
margin-top: 20px;
|
55
|
+
}
|
56
|
+
|
57
|
+
/* ----------- media queries (responsive) ----------- */
|
58
|
+
|
59
|
+
@media only screen and (max-width: 640px) {
|
60
|
+
body .show {
|
61
|
+
display: block !important;
|
62
|
+
}
|
63
|
+
|
64
|
+
body .hide {
|
65
|
+
display: none !important;
|
66
|
+
}
|
67
|
+
|
68
|
+
body .container590 {
|
69
|
+
width: 440px !important;
|
70
|
+
}
|
71
|
+
}
|
72
|
+
|
73
|
+
@media only screen and (max-width: 480px) {
|
74
|
+
body .show {
|
75
|
+
display: block !important;
|
76
|
+
}
|
77
|
+
|
78
|
+
body .hide {
|
79
|
+
display: none !important;
|
80
|
+
}
|
81
|
+
|
82
|
+
body .container590 {
|
83
|
+
width: 280px !important;
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
</style>
|
88
|
+
</head>
|
89
|
+
|
90
|
+
<body>
|
91
|
+
|
92
|
+
<div class="top-margin"></div>
|
93
|
+
|
94
|
+
<table border="0" width="100%" cellpadding="0" cellspacing="0" data-module="module1" data-thumb="">
|
95
|
+
<tr>
|
96
|
+
<td align="center" bgcolor="323232"
|
97
|
+
style="background-image: url('https://truenorthtechnology.com/download/uh-oh-2.jpg?path=&disposition=inline'); background-size: cover; background-position: top center; background-repeat: repeat;">
|
98
|
+
|
99
|
+
<table border="0" align="center" cellpadding="0" cellspacing="0" class="container590">
|
100
|
+
|
101
|
+
<tr>
|
102
|
+
<td height="25" style="font-size: 25px; line-height: 25px;"> </td>
|
103
|
+
</tr>
|
104
|
+
|
105
|
+
|
106
|
+
<tr>
|
107
|
+
<td height="30" style="font-size: 30px; line-height: 30px;"> </td>
|
108
|
+
</tr>
|
109
|
+
<tr>
|
110
|
+
<td height="50" style="font-size: 50px; line-height: 50px;"> </td>
|
111
|
+
</tr>
|
112
|
+
|
113
|
+
<tr>
|
114
|
+
<td class="main-header" align="center" height="42"
|
115
|
+
style="color: #ffffff; font-size: 32px; font-family: 'Open Sans', Calibri, sans-serif; mso-line-height-rule: exactly; line-height: 42px;">
|
116
|
+
|
117
|
+
<!-- ============ title header ============ -->
|
118
|
+
|
119
|
+
<div style="line-height: 34px;">
|
120
|
+
<span>
|
121
|
+
<multiline>
|
122
|
+
<h2>Hello, <%= @user.username %></h2><br>
|
123
|
+
You have requested to reset your password.
|
124
|
+
|
125
|
+
</multiline>
|
126
|
+
</span>
|
127
|
+
</div>
|
128
|
+
</td>
|
129
|
+
</tr>
|
130
|
+
|
131
|
+
<tr>
|
132
|
+
<td height="10" style="font-size: 10px; line-height: 10px;"> </td>
|
133
|
+
</tr>
|
134
|
+
|
135
|
+
|
136
|
+
<tr>
|
137
|
+
<td height="50" style="font-size: 50px; line-height: 50px;"> </td>
|
138
|
+
</tr>
|
139
|
+
|
140
|
+
<tr>
|
141
|
+
<td align="center">
|
142
|
+
|
143
|
+
<table class="cta-button" border="0" align="center" width="163" cellpadding="0" cellspacing="0"
|
144
|
+
style="border: none">
|
145
|
+
<tr>
|
146
|
+
<td height="10" style="font-size: 10px; line-height: 10px;"> </td>
|
147
|
+
</tr>
|
148
|
+
|
149
|
+
<tr>
|
150
|
+
<td>
|
151
|
+
<table border="0" align="center" cellpadding="0" cellspacing="0">
|
152
|
+
<tr>
|
153
|
+
<td align="center"
|
154
|
+
style="color: #ffffff; font-size: 13px; font-family: 'Open Sans', Calibri, sans-serif; font-weight: 600; line-height: 24px;">
|
155
|
+
<!-- ============ headline button ============ -->
|
156
|
+
</td>
|
157
|
+
|
158
|
+
<td width="14" align="right" valign="middle">
|
159
|
+
|
160
|
+
</td>
|
161
|
+
</tr>
|
162
|
+
</table>
|
163
|
+
</td>
|
164
|
+
</tr>
|
165
|
+
|
166
|
+
<tr>
|
167
|
+
<td height="10" style="font-size: 10px; line-height: 10px;"> </td>
|
168
|
+
</tr>
|
169
|
+
|
170
|
+
</table>
|
171
|
+
</td>
|
172
|
+
</tr>
|
173
|
+
|
174
|
+
<tr>
|
175
|
+
<td height="115" style="font-size: 115px; line-height: 115px;"> </td>
|
176
|
+
</tr>
|
177
|
+
|
178
|
+
</table>
|
179
|
+
</td>
|
180
|
+
</tr>
|
181
|
+
|
182
|
+
</table>
|
183
|
+
|
184
|
+
<div class="body-text" style="margin-top:10px;">
|
185
|
+
|
186
|
+
|
187
|
+
<table border="0" align="center" width="124" cellpadding="0" cellspacing="0"
|
188
|
+
bgcolor="5ab600" style="border-radius: 3px;">
|
189
|
+
<tr>
|
190
|
+
<td height="6" style="font-size: 6px; line-height: 6px;"> </td>
|
191
|
+
</tr>
|
192
|
+
|
193
|
+
<tr>
|
194
|
+
<td>
|
195
|
+
<table border="0" align="center" cellpadding="0" cellspacing="0">
|
196
|
+
<tr>
|
197
|
+
<td align="center"
|
198
|
+
style="color: #ffffff; font-size: 13px; font-family: Open Sans, Calibri, sans-serif; font-weight: 700;">
|
199
|
+
|
200
|
+
<div style="line-height: 24px;">
|
201
|
+
<span>
|
202
|
+
<a href="<%= @url %>"
|
203
|
+
style="color: #ffffff; text-decoration: none;">
|
204
|
+
<singleline>Reset</singleline>
|
205
|
+
</a>
|
206
|
+
</span>
|
207
|
+
</div>
|
208
|
+
</td>
|
209
|
+
</tr>
|
210
|
+
</table>
|
211
|
+
</td>
|
212
|
+
</tr>
|
213
|
+
|
214
|
+
<tr>
|
215
|
+
<td height="6" style="font-size: 6px; line-height: 6px;"> </td>
|
216
|
+
</tr>
|
217
|
+
</table>
|
218
|
+
|
219
|
+
<h2 style="text-align: center; color: #555; font-size: 24px; font-family: 'Open Sans', Calibri, sans-serif; font-weight: 200;">Have
|
220
|
+
a great day!</h2>
|
221
|
+
|
222
|
+
</div>
|
223
|
+
|
224
|
+
<table class="footer" border="0" width="100%" cellpadding="0" cellspacing="0" bgcolor="2d2d2d" data-module="module16">
|
225
|
+
|
226
|
+
<tr>
|
227
|
+
<td height="20" style="font-size: 20px; line-height: 20px;"> </td>
|
228
|
+
</tr>
|
229
|
+
|
230
|
+
<tr>
|
231
|
+
<td align="center">
|
232
|
+
|
233
|
+
<table border="0" align="center" width="590" class="container590" cellpadding="0" cellspacing="0">
|
234
|
+
|
235
|
+
<tr>
|
236
|
+
<td align="center">
|
237
|
+
|
238
|
+
<table border="0" class="container590" align="center" cellpadding="0" cellspacing="0">
|
239
|
+
<tr>
|
240
|
+
<td align="center"
|
241
|
+
style="color: #717171; font-size: 14px; font-family: 'Open Sans', Calibri, sans-serif; line-height: 25px;">
|
242
|
+
<div style=" line-height: 25px;">
|
243
|
+
<span>
|
244
|
+
<multiline>
|
245
|
+
© 2015 Copyright. All Rights Reserved.
|
246
|
+
</multiline>
|
247
|
+
</span>
|
248
|
+
</div>
|
249
|
+
</td>
|
250
|
+
</tr>
|
251
|
+
|
252
|
+
</table>
|
253
|
+
|
254
|
+
</td>
|
255
|
+
</tr>
|
256
|
+
|
257
|
+
</table>
|
258
|
+
</td>
|
259
|
+
</tr>
|
260
|
+
|
261
|
+
<tr>
|
262
|
+
<td height="20" style="font-size: 20px; line-height: 20px;"> </td>
|
263
|
+
</tr>
|
264
|
+
|
265
|
+
</table>
|
266
|
+
|
267
|
+
|
268
|
+
</body>
|
14
269
|
</html>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
Logger::SimpleFormatter.class_eval do
|
2
|
+
def call(severity, time, progname, msg)
|
3
|
+
# generate the info part of the line
|
4
|
+
lead_string = "[#{time.strftime('%Y-%m-%d %H:%M:%S.%L')}] [" + sprintf("%-5s","#{severity}") + "]"
|
5
|
+
lead_string = lead_string + " [#{progname}]" unless progname.nil? or progname.empty?
|
6
|
+
|
7
|
+
# figure out how far it needs to be indented
|
8
|
+
# add +1 because we manually insert a space when outputting the message
|
9
|
+
indent = "".rjust(lead_string.length+1)
|
10
|
+
|
11
|
+
# use the logger default method to prepare the message for output
|
12
|
+
msg = msg2str(msg)
|
13
|
+
|
14
|
+
# indent all subsequent lines to help with readability
|
15
|
+
msg.gsub!( /([\r\n]+)/, "\\1#{indent}") if msg.respond_to? :gsub
|
16
|
+
|
17
|
+
"#{lead_string} #{msg}\n"
|
18
|
+
end
|
19
|
+
end
|
@@ -59,6 +59,8 @@ Rails.application.config.sorcery.configure do |config|
|
|
59
59
|
|
60
60
|
# --- user config ---
|
61
61
|
config.user_config do |user|
|
62
|
+
user.downcase_username_before_authenticating = true
|
63
|
+
|
62
64
|
# -- core --
|
63
65
|
user.username_attribute_names = [:username, :email] # specify username
|
64
66
|
# attributes, for example:
|
data/config/routes.rb
CHANGED
@@ -9,4 +9,68 @@ Rails.application.routes.draw do
|
|
9
9
|
get "/users/activate/:activation_token" => 'erp_tech_svcs/user#activate'
|
10
10
|
post "/users/reset_password" => 'erp_tech_svcs/user#reset_password'
|
11
11
|
post "/users/update_password" => 'erp_tech_svcs/user#update_password'
|
12
|
+
|
13
|
+
namespace :api do
|
14
|
+
namespace :v1 do
|
15
|
+
|
16
|
+
resources :parties, defaults: { :format => 'json' } do
|
17
|
+
member do
|
18
|
+
get :user
|
19
|
+
end
|
20
|
+
|
21
|
+
resources :users, defaults: { :format => 'json'}, only: [:create]
|
22
|
+
end
|
23
|
+
|
24
|
+
resources :users, defaults: { :format => 'json' } do
|
25
|
+
member do
|
26
|
+
put :reset_password
|
27
|
+
get :effective_security
|
28
|
+
put :update_security
|
29
|
+
end
|
30
|
+
|
31
|
+
resources :security_roles, defaults: { :format => 'json' }
|
32
|
+
resources :groups, defaults: { :format => 'json' }
|
33
|
+
resources :capabilities, defaults: { :format => 'json' }
|
34
|
+
end
|
35
|
+
|
36
|
+
resources :audit_logs, defaults: { :format => 'json' } do
|
37
|
+
resources :audit_log_items, defaults: { :format => 'json'}
|
38
|
+
end
|
39
|
+
|
40
|
+
resources :security_roles, defaults: { :format => 'json' } do
|
41
|
+
collection do
|
42
|
+
get :selected
|
43
|
+
get :available
|
44
|
+
put :add
|
45
|
+
put :remove
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
resources :groups, defaults: { :format => 'json' } do
|
50
|
+
member do
|
51
|
+
get :effective_security
|
52
|
+
end
|
53
|
+
|
54
|
+
collection do
|
55
|
+
get :selected
|
56
|
+
get :available
|
57
|
+
put :add
|
58
|
+
put :remove
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
resources :capabilities, defaults: { :format => 'json' } do
|
63
|
+
collection do
|
64
|
+
get :selected
|
65
|
+
get :available
|
66
|
+
put :add
|
67
|
+
put :remove
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
resources :file_assets, defaults: { :format => 'json' }
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
12
76
|
end
|
@@ -1,11 +1,7 @@
|
|
1
1
|
class ScheduleDeleteExpiredSessionsJob
|
2
2
|
|
3
3
|
def self.up
|
4
|
-
|
5
|
-
date = Date.tomorrow
|
6
|
-
start_time = DateTime.civil(date.year, date.month, date.day, 2, 0, 1, -(5.0/24.0))
|
7
|
-
|
8
|
-
ErpTechSvcs::Sessions::DeleteExpiredSessionsJob.schedule_job(start_time)
|
4
|
+
ErpTechSvcs::DelayedJobs::DeleteExpiredSessionsJob.schedule_job(Time.now)
|
9
5
|
end
|
10
6
|
|
11
7
|
def self.down
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class CreateJobTrackerForNotification
|
2
|
+
|
3
|
+
def self.up
|
4
|
+
JobTracker.create(
|
5
|
+
:job_name => 'Notification Job',
|
6
|
+
:job_klass => 'ErpTechSvcs::DelayedJobs::NotificationJob'
|
7
|
+
)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.down
|
11
|
+
JobTracker.find_by_job_name('Notification Job').destroy
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
class BaseTechServices < ActiveRecord::Migration
|
2
2
|
def self.up
|
3
|
+
|
4
|
+
# users
|
3
5
|
unless table_exists?(:users)
|
4
6
|
# Create the users table
|
5
7
|
create_table :users do |t|
|
@@ -27,7 +29,7 @@ class BaseTechServices < ActiveRecord::Migration
|
|
27
29
|
t.string :reset_password_token, :default => nil
|
28
30
|
t.datetime :reset_password_token_expires_at, :default => nil
|
29
31
|
t.datetime :reset_password_email_sent_at, :default => nil
|
30
|
-
|
32
|
+
|
31
33
|
#user activation
|
32
34
|
t.string :activation_state, :default => nil
|
33
35
|
t.string :activation_token, :default => nil
|
@@ -38,6 +40,9 @@ class BaseTechServices < ActiveRecord::Migration
|
|
38
40
|
t.string :security_question_2
|
39
41
|
t.string :security_answer_2
|
40
42
|
|
43
|
+
t.string :auth_token
|
44
|
+
t.datetime :auth_token_expires_at
|
45
|
+
|
41
46
|
t.timestamps
|
42
47
|
end
|
43
48
|
add_index :users, :email, :unique => true
|
@@ -49,6 +54,7 @@ class BaseTechServices < ActiveRecord::Migration
|
|
49
54
|
add_index :users, :party_id, :name => 'users_party_id_idx'
|
50
55
|
end
|
51
56
|
|
57
|
+
# groups
|
52
58
|
unless table_exists?(:groups)
|
53
59
|
create_table :groups do |t|
|
54
60
|
t.column :description, :string
|
@@ -63,9 +69,11 @@ class BaseTechServices < ActiveRecord::Migration
|
|
63
69
|
t.column :internal_identifier, :string
|
64
70
|
t.column :external_identifier, :string
|
65
71
|
t.column :external_id_source, :string
|
66
|
-
|
72
|
+
|
67
73
|
t.timestamps
|
68
74
|
end
|
75
|
+
|
76
|
+
add_index :security_roles, :internal_identifier, :name => 'security_roles_internal_identifier_idx'
|
69
77
|
end
|
70
78
|
|
71
79
|
unless table_exists?(:sessions)
|
@@ -75,17 +83,17 @@ class BaseTechServices < ActiveRecord::Migration
|
|
75
83
|
t.text :data
|
76
84
|
t.timestamps
|
77
85
|
end
|
78
|
-
add_index :sessions,
|
79
|
-
add_index :sessions,
|
86
|
+
add_index :sessions, :session_id
|
87
|
+
add_index :sessions, :updated_at
|
80
88
|
end
|
81
89
|
|
82
90
|
unless table_exists?(:audit_logs)
|
83
91
|
# Create audit_logs
|
84
|
-
create_table
|
85
|
-
t.string
|
86
|
-
t.string
|
87
|
-
t.integer
|
88
|
-
t.text
|
92
|
+
create_table :audit_logs do |t|
|
93
|
+
t.string :application
|
94
|
+
t.string :description
|
95
|
+
t.integer :party_id
|
96
|
+
t.text :additional_info
|
89
97
|
t.references :audit_log_type
|
90
98
|
|
91
99
|
#polymorphic columns
|
@@ -95,6 +103,7 @@ class BaseTechServices < ActiveRecord::Migration
|
|
95
103
|
end
|
96
104
|
add_index :audit_logs, :party_id
|
97
105
|
add_index :audit_logs, [:event_record_id, :event_record_type], :name => 'event_record_index'
|
106
|
+
add_index :audit_logs, :audit_log_type_id, :name => 'audit_logs_audit_log_type_id_idx'
|
98
107
|
end
|
99
108
|
|
100
109
|
unless table_exists?(:audit_log_types)
|
@@ -114,23 +123,30 @@ class BaseTechServices < ActiveRecord::Migration
|
|
114
123
|
|
115
124
|
t.timestamps
|
116
125
|
end
|
126
|
+
|
127
|
+
add_index :audit_log_types, :internal_identifier, :name => 'audit_log_types_internal_identifier_idx'
|
128
|
+
add_index :audit_log_types, :parent_id, :name => 'audit_log_types_parent_id_idx'
|
117
129
|
end
|
118
130
|
|
119
131
|
unless table_exists?(:audit_log_items)
|
120
132
|
# Create audit_log_items
|
121
|
-
create_table
|
133
|
+
create_table :audit_log_items do |t|
|
122
134
|
t.references :audit_log
|
123
135
|
t.references :audit_log_item_type
|
124
|
-
t.string
|
125
|
-
t.string
|
136
|
+
t.string :audit_log_item_value
|
137
|
+
t.string :audit_log_item_old_value
|
138
|
+
t.string :description
|
126
139
|
|
127
140
|
t.timestamps
|
128
141
|
end
|
142
|
+
|
143
|
+
add_index :audit_log_items, :audit_log_id, :name => 'audit_log_items_audit_log_id_idx'
|
144
|
+
add_index :audit_log_items, :audit_log_item_type_id, :name => 'audit_log_items_audit_log_item_type_id_idx'
|
129
145
|
end
|
130
146
|
|
131
147
|
unless table_exists?(:audit_log_item_types)
|
132
148
|
# Create audit_log_item_types
|
133
|
-
create_table
|
149
|
+
create_table :audit_log_item_types do |t|
|
134
150
|
t.string :internal_identifier
|
135
151
|
t.string :external_identifier
|
136
152
|
t.string :external_id_source
|
@@ -144,11 +160,16 @@ class BaseTechServices < ActiveRecord::Migration
|
|
144
160
|
|
145
161
|
t.timestamps
|
146
162
|
end
|
163
|
+
|
164
|
+
add_index :audit_log_item_types, :internal_identifier, :name => 'audit_log_item_types_internal_identifier_idx'
|
165
|
+
add_index :audit_log_item_types, :parent_id, :name => 'audit_log_item_types_parent_id_idx'
|
166
|
+
add_index :audit_log_item_types, :lft, :name => 'audit_log_item_types_lft_idx'
|
167
|
+
add_index :audit_log_item_types, :rgt, :name => 'audit_log_item_types_rgt_idx'
|
147
168
|
end
|
148
|
-
|
169
|
+
|
170
|
+
# file_assets
|
149
171
|
unless table_exists?(:file_assets)
|
150
172
|
create_table :file_assets do |t|
|
151
|
-
t.references :file_asset_holder, :polymorphic => true
|
152
173
|
t.string :type
|
153
174
|
t.string :name
|
154
175
|
t.string :directory
|
@@ -158,33 +179,47 @@ class BaseTechServices < ActiveRecord::Migration
|
|
158
179
|
t.datetime :data_updated_at
|
159
180
|
t.string :width
|
160
181
|
t.string :height
|
182
|
+
t.text :scoped_by
|
161
183
|
|
162
184
|
t.timestamps
|
163
185
|
end
|
164
186
|
add_index :file_assets, :type
|
165
|
-
add_index :file_assets, [:file_asset_holder_id, :file_asset_holder_type], :name => 'file_asset_holder_idx'
|
166
187
|
add_index :file_assets, :name
|
167
188
|
add_index :file_assets, :directory
|
168
189
|
end
|
169
|
-
|
190
|
+
|
191
|
+
# file_asset_holders
|
192
|
+
unless table_exists?(:file_asset_holders)
|
193
|
+
create_table :file_asset_holders do |t|
|
194
|
+
t.references :file_asset
|
195
|
+
t.references :file_asset_holder, :polymorphic => true
|
196
|
+
t.text :scoped_by
|
197
|
+
|
198
|
+
t.timestamps
|
199
|
+
end
|
200
|
+
|
201
|
+
add_index :file_asset_holders, :file_asset_id, :name => 'file_asset_holder_file_id_idx'
|
202
|
+
add_index :file_asset_holders, [:file_asset_holder_id, :file_asset_holder_type], :name => 'file_asset_holder_idx'
|
203
|
+
end
|
204
|
+
|
205
|
+
# delayed_jobs
|
170
206
|
unless table_exists?(:delayed_jobs)
|
171
207
|
create_table :delayed_jobs, :force => true do |table|
|
172
|
-
table.integer
|
173
|
-
table.integer
|
174
|
-
table.text
|
175
|
-
table.text
|
176
|
-
table.datetime :run_at
|
177
|
-
table.datetime :locked_at
|
178
|
-
table.datetime :failed_at
|
179
|
-
table.string
|
180
|
-
table.string
|
208
|
+
table.integer :priority, :default => 0 # Allows some jobs to jump to the front of the queue
|
209
|
+
table.integer :attempts, :default => 0 # Provides for retries, but still fail eventually.
|
210
|
+
table.text :handler # YAML-encoded string of the object that will do work
|
211
|
+
table.text :last_error # reason for last failure (See Note below)
|
212
|
+
table.datetime :run_at # When to run. Could be Time.zone.now for immediately, or sometime in the future.
|
213
|
+
table.datetime :locked_at # Set when a client is working on this object
|
214
|
+
table.datetime :failed_at # Set when all retries have failed (actually, by default, the record is deleted instead)
|
215
|
+
table.string :locked_by # Who is working on this object (if locked)
|
216
|
+
table.string :queue
|
181
217
|
table.timestamps
|
182
218
|
end
|
183
219
|
add_index :delayed_jobs, [:priority, :run_at], :name => 'delayed_jobs_priority'
|
184
220
|
end
|
185
221
|
|
186
222
|
unless table_exists?(:capable_models)
|
187
|
-
# create the roles table
|
188
223
|
create_table :capable_models do |t|
|
189
224
|
t.references :capable_model_record, :polymorphic => true
|
190
225
|
|
@@ -195,23 +230,22 @@ class BaseTechServices < ActiveRecord::Migration
|
|
195
230
|
end
|
196
231
|
|
197
232
|
unless table_exists?(:capability_types)
|
198
|
-
# create the roles table
|
199
233
|
create_table :capability_types do |t|
|
200
234
|
t.string :internal_identifier
|
201
235
|
t.string :description
|
202
236
|
t.timestamps
|
203
237
|
end
|
238
|
+
|
239
|
+
add_index :capability_types, :internal_identifier, :name => 'capability_types_internal_identifier_idx'
|
204
240
|
end
|
205
241
|
|
206
242
|
unless table_exists?(:capabilities)
|
207
|
-
# create the roles table
|
208
243
|
create_table :capabilities do |t|
|
209
244
|
t.string :description
|
210
245
|
t.references :capability_type
|
211
|
-
t.
|
212
|
-
t.integer :capability_resource_id
|
246
|
+
t.references :capability_resource, :polymorphic => true
|
213
247
|
t.integer :scope_type_id
|
214
|
-
t.text :scope_query
|
248
|
+
t.text :scope_query
|
215
249
|
t.timestamps
|
216
250
|
end
|
217
251
|
|
@@ -222,8 +256,7 @@ class BaseTechServices < ActiveRecord::Migration
|
|
222
256
|
|
223
257
|
unless table_exists?(:capability_accessors)
|
224
258
|
create_table :capability_accessors do |t|
|
225
|
-
t.
|
226
|
-
t.integer :capability_accessor_record_id
|
259
|
+
t.references :capability_accessor_record, :polymorphic => true
|
227
260
|
t.integer :capability_id
|
228
261
|
t.timestamps
|
229
262
|
end
|
@@ -252,15 +285,42 @@ class BaseTechServices < ActiveRecord::Migration
|
|
252
285
|
add_index :parties_security_roles, :security_role_id
|
253
286
|
end
|
254
287
|
|
288
|
+
unless table_exists? :notifications
|
289
|
+
create_table :notifications do |t|
|
290
|
+
t.string :type
|
291
|
+
t.references :created_by
|
292
|
+
t.text :message
|
293
|
+
t.references :notification_type
|
294
|
+
t.string :current_state
|
295
|
+
|
296
|
+
t.timestamps
|
297
|
+
end
|
298
|
+
|
299
|
+
add_index :notifications, :notification_type_id
|
300
|
+
add_index :notifications, :created_by_id
|
301
|
+
add_index :notifications, :type
|
302
|
+
end
|
303
|
+
|
304
|
+
unless table_exists? :notification_types
|
305
|
+
create_table :notification_types do |t|
|
306
|
+
t.string :internal_identifier
|
307
|
+
t.string :description
|
308
|
+
|
309
|
+
t.timestamps
|
310
|
+
end
|
311
|
+
|
312
|
+
add_index :notification_types, :internal_identifier
|
313
|
+
end
|
314
|
+
|
255
315
|
end
|
256
316
|
|
257
317
|
def self.down
|
258
318
|
# check that each table exists before trying to delete it.
|
259
|
-
[
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
319
|
+
[:groups, :notifications, :notification_types,
|
320
|
+
:audit_logs, :sessions, :simple_captcha_data,
|
321
|
+
:capability_accessors, :capability_types, :capabilities, :scope_types,
|
322
|
+
:parties_security_roles, :roles, :audit_log_items, :audit_log_item_types,
|
323
|
+
:users, :file_assets, :delayed_jobs
|
264
324
|
].each do |tbl|
|
265
325
|
if table_exists?(tbl)
|
266
326
|
drop_table tbl
|