biovision-base 0.5.170614

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.
Files changed (271) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +42 -0
  4. data/Rakefile +26 -0
  5. data/app/assets/config/biovision_base_manifest.js +0 -0
  6. data/app/assets/images/biovision/base/icons/alert.svg +15 -0
  7. data/app/assets/images/biovision/base/icons/back.svg +28 -0
  8. data/app/assets/images/biovision/base/icons/create.svg +1 -0
  9. data/app/assets/images/biovision/base/icons/destroy.svg +3 -0
  10. data/app/assets/images/biovision/base/icons/edit.svg +22 -0
  11. data/app/assets/images/biovision/base/icons/exit.svg +1 -0
  12. data/app/assets/images/biovision/base/icons/foreign/facebook.svg +1 -0
  13. data/app/assets/images/biovision/base/icons/gear.svg +4 -0
  14. data/app/assets/images/biovision/base/icons/lock-closed.svg +1 -0
  15. data/app/assets/images/biovision/base/icons/lock-open.svg +1 -0
  16. data/app/assets/images/biovision/base/icons/notice.svg +1 -0
  17. data/app/assets/images/biovision/base/icons/return.svg +1 -0
  18. data/app/assets/images/biovision/base/icons/warning.svg +43 -0
  19. data/app/assets/images/biovision/base/icons/world.svg +4 -0
  20. data/app/assets/images/biovision/base/placeholders/image.svg +19 -0
  21. data/app/assets/images/biovision/base/placeholders/photo.svg +23 -0
  22. data/app/assets/images/biovision/base/placeholders/user.svg +21 -0
  23. data/app/assets/javascripts/biovision/base/biovision.js +238 -0
  24. data/app/assets/stylesheets/biovision/base/admin.scss +58 -0
  25. data/app/assets/stylesheets/biovision/base/biovision.scss +472 -0
  26. data/app/assets/stylesheets/biovision/base/buttons.scss +90 -0
  27. data/app/assets/stylesheets/biovision/base/default.scss +45 -0
  28. data/app/assets/stylesheets/biovision/base/filters.scss +53 -0
  29. data/app/assets/stylesheets/biovision/base/fonts.scss +9 -0
  30. data/app/assets/stylesheets/biovision/base/message-box.scss +60 -0
  31. data/app/assets/stylesheets/biovision/base/pagination.scss +42 -0
  32. data/app/assets/stylesheets/biovision/base/tootik.scss +385 -0
  33. data/app/assets/stylesheets/biovision/base/track.scss +28 -0
  34. data/app/controllers/admin/agents_controller.rb +30 -0
  35. data/app/controllers/admin/browsers_controller.rb +30 -0
  36. data/app/controllers/admin/codes_controller.rb +25 -0
  37. data/app/controllers/admin/editable_pages_controller.rb +25 -0
  38. data/app/controllers/admin/index_controller.rb +5 -0
  39. data/app/controllers/admin/metrics_controller.rb +29 -0
  40. data/app/controllers/admin/privilege_groups_controller.rb +48 -0
  41. data/app/controllers/admin/privileges_controller.rb +5 -0
  42. data/app/controllers/admin/tokens_controller.rb +28 -0
  43. data/app/controllers/admin/users_controller.rb +87 -0
  44. data/app/controllers/admin_controller.rb +10 -0
  45. data/app/controllers/agents_controller.rb +67 -0
  46. data/app/controllers/authentication_controller.rb +70 -0
  47. data/app/controllers/browsers_controller.rb +63 -0
  48. data/app/controllers/codes_controller.rb +60 -0
  49. data/app/controllers/concerns/authentication.rb +19 -0
  50. data/app/controllers/concerns/biovision/admin/privileges.rb +34 -0
  51. data/app/controllers/concerns/entity_priority.rb +7 -0
  52. data/app/controllers/concerns/lockable_entity.rb +23 -0
  53. data/app/controllers/concerns/toggleable_entity.rb +7 -0
  54. data/app/controllers/editable_pages_controller.rb +60 -0
  55. data/app/controllers/index_controller.rb +5 -0
  56. data/app/controllers/metrics_controller.rb +33 -0
  57. data/app/controllers/my/confirmations_controller.rb +37 -0
  58. data/app/controllers/my/index_controller.rb +7 -0
  59. data/app/controllers/my/profiles_controller.rb +81 -0
  60. data/app/controllers/my/recoveries_controller.rb +68 -0
  61. data/app/controllers/privilege_groups_controller.rb +57 -0
  62. data/app/controllers/privileges_controller.rb +74 -0
  63. data/app/controllers/profiles_controller.rb +22 -0
  64. data/app/controllers/tokens_controller.rb +60 -0
  65. data/app/controllers/users_controller.rb +57 -0
  66. data/app/helpers/biovision_helper.rb +81 -0
  67. data/app/helpers/biovision_users_helper.rb +52 -0
  68. data/app/helpers/codes_helper.rb +10 -0
  69. data/app/helpers/editable_pages_helper.rb +20 -0
  70. data/app/helpers/privileges_helper.rb +11 -0
  71. data/app/helpers/tracking_helper.rb +17 -0
  72. data/app/jobs/application_job.rb +7 -0
  73. data/app/jobs/clean_tokens_job.rb +8 -0
  74. data/app/mailers/code_sender.rb +15 -0
  75. data/app/models/agent.rb +38 -0
  76. data/app/models/application_record.rb +3 -0
  77. data/app/models/browser.rb +22 -0
  78. data/app/models/code.rb +58 -0
  79. data/app/models/code_type.rb +11 -0
  80. data/app/models/concerns/biovision/privilege_base.rb +143 -0
  81. data/app/models/concerns/biovision/user_base.rb +124 -0
  82. data/app/models/concerns/biovision/user_privilege_base.rb +46 -0
  83. data/app/models/concerns/has_owner.rb +19 -0
  84. data/app/models/concerns/required_unique_name.rb +13 -0
  85. data/app/models/concerns/required_unique_slug.rb +12 -0
  86. data/app/models/concerns/toggleable.rb +29 -0
  87. data/app/models/editable_page.rb +30 -0
  88. data/app/models/foreign_site.rb +75 -0
  89. data/app/models/foreign_user.rb +26 -0
  90. data/app/models/metric.rb +67 -0
  91. data/app/models/metric_value.rb +15 -0
  92. data/app/models/privilege.rb +3 -0
  93. data/app/models/privilege_group.rb +50 -0
  94. data/app/models/privilege_group_privilege.rb +6 -0
  95. data/app/models/token.rb +75 -0
  96. data/app/models/user.rb +3 -0
  97. data/app/models/user_privilege.rb +3 -0
  98. data/app/services/canonizer.rb +29 -0
  99. data/app/services/code_manager.rb +16 -0
  100. data/app/services/code_manager/confirmation.rb +26 -0
  101. data/app/services/code_manager/invitation.rb +27 -0
  102. data/app/services/code_manager/recovery.rb +31 -0
  103. data/app/uploaders/avatar_uploader.rb +62 -0
  104. data/app/uploaders/editable_page_image_uploader.rb +38 -0
  105. data/app/views/admin/agents/_filter.html.erb +16 -0
  106. data/app/views/admin/agents/_list.html.erb +17 -0
  107. data/app/views/admin/agents/_nav_item.html.erb +6 -0
  108. data/app/views/admin/agents/_toggleable.html.erb +7 -0
  109. data/app/views/admin/agents/entity/_in_list.html.erb +13 -0
  110. data/app/views/admin/agents/index.html.erb +17 -0
  111. data/app/views/admin/agents/show.html.erb +28 -0
  112. data/app/views/admin/browsers/_list.html.erb +17 -0
  113. data/app/views/admin/browsers/_nav_item.html.erb +6 -0
  114. data/app/views/admin/browsers/_toggleable.html.erb +7 -0
  115. data/app/views/admin/browsers/agents/_add.html.erb +79 -0
  116. data/app/views/admin/browsers/entity/_in_list.html.erb +13 -0
  117. data/app/views/admin/browsers/index.html.erb +17 -0
  118. data/app/views/admin/browsers/show.html.erb +29 -0
  119. data/app/views/admin/codes/_list.html.erb +11 -0
  120. data/app/views/admin/codes/_nav_item.html.erb +6 -0
  121. data/app/views/admin/codes/entity/_in_list.html.erb +24 -0
  122. data/app/views/admin/codes/index.html.erb +16 -0
  123. data/app/views/admin/codes/show.html.erb +51 -0
  124. data/app/views/admin/editable_pages/_list.html.erb +11 -0
  125. data/app/views/admin/editable_pages/_nav_item.html.erb +6 -0
  126. data/app/views/admin/editable_pages/entity/_in_list.html.erb +13 -0
  127. data/app/views/admin/editable_pages/index.html.erb +14 -0
  128. data/app/views/admin/editable_pages/show.html.erb +47 -0
  129. data/app/views/admin/index/index.html.erb +25 -0
  130. data/app/views/admin/metrics/_list.html.erb +26 -0
  131. data/app/views/admin/metrics/_nav_item.html.erb +6 -0
  132. data/app/views/admin/metrics/data.jbuilder +6 -0
  133. data/app/views/admin/metrics/index.html.erb +14 -0
  134. data/app/views/admin/metrics/show.html.erb +52 -0
  135. data/app/views/admin/privilege_groups/_list.html.erb +11 -0
  136. data/app/views/admin/privilege_groups/_nav_item.html.erb +6 -0
  137. data/app/views/admin/privilege_groups/entity/_in_list.html.erb +10 -0
  138. data/app/views/admin/privilege_groups/index.html.erb +14 -0
  139. data/app/views/admin/privilege_groups/show.html.erb +31 -0
  140. data/app/views/admin/privileges/_list.html.erb +15 -0
  141. data/app/views/admin/privileges/_nav_item.html.erb +6 -0
  142. data/app/views/admin/privileges/entity/_groups.html.erb +34 -0
  143. data/app/views/admin/privileges/entity/_in_list.html.erb +25 -0
  144. data/app/views/admin/privileges/index.html.erb +20 -0
  145. data/app/views/admin/privileges/show.html.erb +66 -0
  146. data/app/views/admin/privileges/users.html.erb +24 -0
  147. data/app/views/admin/tokens/_filter.html.erb +17 -0
  148. data/app/views/admin/tokens/_list.html.erb +11 -0
  149. data/app/views/admin/tokens/_nav_item.html.erb +6 -0
  150. data/app/views/admin/tokens/_toggleable.html.erb +7 -0
  151. data/app/views/admin/tokens/entity/_in_list.html.erb +25 -0
  152. data/app/views/admin/tokens/index.html.erb +19 -0
  153. data/app/views/admin/tokens/show.html.erb +43 -0
  154. data/app/views/admin/users/_filter.html.erb +22 -0
  155. data/app/views/admin/users/_list.html.erb +17 -0
  156. data/app/views/admin/users/_nav_item.html.erb +6 -0
  157. data/app/views/admin/users/_search.html.erb +5 -0
  158. data/app/views/admin/users/_toggleable.html.erb +7 -0
  159. data/app/views/admin/users/codes.html.erb +24 -0
  160. data/app/views/admin/users/entity/_in_list.html.erb +24 -0
  161. data/app/views/admin/users/entity/_privilege.html.erb +10 -0
  162. data/app/views/admin/users/entity/_privilege_tree.html.erb +17 -0
  163. data/app/views/admin/users/index.html.erb +19 -0
  164. data/app/views/admin/users/privileges.html.erb +35 -0
  165. data/app/views/admin/users/search.jbuilder +10 -0
  166. data/app/views/admin/users/search/_results.html.erb +11 -0
  167. data/app/views/admin/users/show.html.erb +94 -0
  168. data/app/views/admin/users/tokens.html.erb +24 -0
  169. data/app/views/agents/_agent.jbuilder +20 -0
  170. data/app/views/agents/_filter.html.erb +53 -0
  171. data/app/views/agents/_form.html.erb +33 -0
  172. data/app/views/agents/edit.html.erb +17 -0
  173. data/app/views/agents/index.jbuilder +5 -0
  174. data/app/views/agents/new.html.erb +15 -0
  175. data/app/views/agents/show.jbuilder +3 -0
  176. data/app/views/application/not_found.html.erb +9 -0
  177. data/app/views/application/not_found.jbuilder +3 -0
  178. data/app/views/application/service_unavailable.html.erb +9 -0
  179. data/app/views/application/unauthorized.html.erb +11 -0
  180. data/app/views/application/unauthorized.jbuilder +3 -0
  181. data/app/views/authentication/_form.html.erb +16 -0
  182. data/app/views/authentication/_info.html.erb +8 -0
  183. data/app/views/authentication/new.html.erb +10 -0
  184. data/app/views/browsers/_form.html.erb +28 -0
  185. data/app/views/browsers/edit.html.erb +17 -0
  186. data/app/views/browsers/new.html.erb +15 -0
  187. data/app/views/code_sender/email.text.erb +9 -0
  188. data/app/views/code_sender/password.text.erb +10 -0
  189. data/app/views/codes/_form.html.erb +49 -0
  190. data/app/views/codes/edit.html.erb +17 -0
  191. data/app/views/codes/new.html.erb +15 -0
  192. data/app/views/editable_pages/_form.html.erb +63 -0
  193. data/app/views/editable_pages/edit.html.erb +17 -0
  194. data/app/views/editable_pages/form/_ckeditor.html.erb +11 -0
  195. data/app/views/editable_pages/new.html.erb +15 -0
  196. data/app/views/index/index.html.erb +5 -0
  197. data/app/views/layouts/admin.html.erb +23 -0
  198. data/app/views/layouts/admin/_footer.html.erb +0 -0
  199. data/app/views/layouts/admin/_header.html.erb +11 -0
  200. data/app/views/layouts/admin/header/_logo.html.erb +3 -0
  201. data/app/views/metrics/_form.html.erb +41 -0
  202. data/app/views/metrics/edit.html.erb +17 -0
  203. data/app/views/metrics/index.jbuilder +7 -0
  204. data/app/views/metrics/show.jbuilder +3 -0
  205. data/app/views/my/confirmations/show.html.erb +30 -0
  206. data/app/views/my/index/index.html.erb +17 -0
  207. data/app/views/my/profiles/edit.html.erb +10 -0
  208. data/app/views/my/profiles/edit/_form.html.erb +70 -0
  209. data/app/views/my/profiles/new.html.erb +7 -0
  210. data/app/views/my/profiles/new/_form.html.erb +34 -0
  211. data/app/views/my/profiles/show.html.erb +3 -0
  212. data/app/views/my/recoveries/show.html.erb +39 -0
  213. data/app/views/privilege_groups/_form.html.erb +25 -0
  214. data/app/views/privilege_groups/edit.html.erb +17 -0
  215. data/app/views/privilege_groups/new.html.erb +15 -0
  216. data/app/views/privileges/_form.html.erb +42 -0
  217. data/app/views/privileges/edit.html.erb +21 -0
  218. data/app/views/privileges/new.html.erb +14 -0
  219. data/app/views/profiles/_profile.html.erb +48 -0
  220. data/app/views/profiles/show.html.erb +4 -0
  221. data/app/views/shared/_flash_messages.html.erb +7 -0
  222. data/app/views/shared/_list_of_errors.html.erb +11 -0
  223. data/app/views/shared/_meta_texts.html.erb +17 -0
  224. data/app/views/shared/_nothing_found.html.erb +1 -0
  225. data/app/views/shared/_track.html.erb +10 -0
  226. data/app/views/shared/actions/_locks.html.erb +4 -0
  227. data/app/views/shared/actions/_priority_changer.html.erb +4 -0
  228. data/app/views/shared/admin/_breadcrumbs.html.erb +6 -0
  229. data/app/views/shared/editable_pages/_body.html.erb +12 -0
  230. data/app/views/shared/filter/_flag.html.erb +17 -0
  231. data/app/views/tokens/_form.html.erb +30 -0
  232. data/app/views/tokens/edit.html.erb +17 -0
  233. data/app/views/tokens/new.html.erb +15 -0
  234. data/app/views/users/_form.html.erb +78 -0
  235. data/app/views/users/edit.html.erb +18 -0
  236. data/app/views/users/new.html.erb +15 -0
  237. data/config/initializers/carrierwave.rb +22 -0
  238. data/config/initializers/pluralization.rb +2 -0
  239. data/config/locales/common-ru.yml +96 -0
  240. data/config/locales/editable-pages-ru.yml +43 -0
  241. data/config/locales/plurals.rb +17 -0
  242. data/config/locales/track-ru.yml +102 -0
  243. data/config/locales/users-ru.yml +324 -0
  244. data/config/routes.rb +92 -0
  245. data/db/migrate/20170301000001_create_metrics.rb +23 -0
  246. data/db/migrate/20170301000002_create_metric_values.rb +19 -0
  247. data/db/migrate/20170301000101_create_browsers.rb +22 -0
  248. data/db/migrate/20170301000102_create_agents.rb +22 -0
  249. data/db/migrate/20170302000001_create_users.rb +52 -0
  250. data/db/migrate/20170302000002_create_tokens.rb +23 -0
  251. data/db/migrate/20170302000003_create_code_types.rb +20 -0
  252. data/db/migrate/20170302000004_create_codes.rb +24 -0
  253. data/db/migrate/20170302000101_create_privileges.rb +34 -0
  254. data/db/migrate/20170302000102_create_user_privileges.rb +17 -0
  255. data/db/migrate/20170302000103_create_privilege_groups.rb +23 -0
  256. data/db/migrate/20170302000104_create_privilege_group_privileges.rb +24 -0
  257. data/db/migrate/20170320000000_create_editable_pages.rb +22 -0
  258. data/db/migrate/20170425000001_create_foreign_sites.rb +18 -0
  259. data/db/migrate/20170425000002_create_foreign_users.rb +23 -0
  260. data/lib/biovision/base.rb +9 -0
  261. data/lib/biovision/base/base_methods.rb +96 -0
  262. data/lib/biovision/base/engine.rb +17 -0
  263. data/lib/biovision/base/privilege_methods.rb +35 -0
  264. data/lib/biovision/base/version.rb +5 -0
  265. data/lib/tasks/biovision/agents.rake +38 -0
  266. data/lib/tasks/biovision/base_tasks.rake +4 -0
  267. data/lib/tasks/biovision/browsers.rake +38 -0
  268. data/lib/tasks/biovision/codes.rake +49 -0
  269. data/lib/tasks/biovision/tokens.rake +54 -0
  270. data/lib/tasks/biovision/users.rake +67 -0
  271. metadata +467 -0
data/config/routes.rb ADDED
@@ -0,0 +1,92 @@
1
+ Rails.application.routes.draw do
2
+
3
+ controller :authentication do
4
+ get 'login' => :new
5
+ post 'login' => :create
6
+ delete 'logout' => :destroy
7
+ get 'auth/:provider/callback' => :auth_callback, as: :auth_callback
8
+ end
9
+
10
+ scope 'u/:slug', controller: :profiles do
11
+ get '/' => :show, as: :user_profile
12
+ end
13
+
14
+ namespace :admin do
15
+ get '/' => 'index#index'
16
+
17
+ resources :agents, :browsers, only: [:index, :show] do
18
+ member do
19
+ post 'toggle', defaults: { format: :json }
20
+ put 'lock', defaults: { format: :json }
21
+ delete 'lock', action: :unlock, defaults: { format: :json }
22
+ end
23
+ end
24
+
25
+ resources :codes, only: [:index, :show]
26
+ resources :tokens, only: [:index, :show] do
27
+ member do
28
+ post 'toggle', defaults: { format: :json }
29
+ end
30
+ end
31
+
32
+ resources :editable_pages, only: [:index, :show]
33
+
34
+ resources :metrics, only: [:index, :show] do
35
+ member do
36
+ get 'data', defaults: { format: :json }
37
+ end
38
+ end
39
+
40
+ resources :privileges, only: [:index, :show] do
41
+ member do
42
+ put 'lock', defaults: { format: :json }
43
+ delete 'lock', action: :unlock, defaults: { format: :json }
44
+ post 'priority', defaults: { format: :json }
45
+ post 'toggle', defaults: { format: :json }
46
+ get 'users'
47
+ put 'users/:user_id' => :add_user, as: :user, defaults: { format: :json }
48
+ delete 'users/:user_id' => :remove_user, defaults: { format: :json }
49
+ end
50
+ end
51
+ resources :privilege_groups, only: [:index, :show] do
52
+ member do
53
+ put 'privileges/:privilege_id' => :add_privilege, as: :privilege, defaults: { format: :json }
54
+ delete 'privileges/:privilege_id' => :remove_privilege, defaults: { format: :json }
55
+ end
56
+ end
57
+
58
+ resources :users, only: [:index, :show] do
59
+ collection do
60
+ get 'search', defaults: { format: :json }
61
+ end
62
+ member do
63
+ get 'tokens'
64
+ get 'codes'
65
+ get 'privileges'
66
+ put 'privileges/:privilege_id' => :grant_privilege, as: :privilege
67
+ delete 'privileges/:privilege_id' => :revoke_privilege
68
+ post 'toggle', defaults: { format: :json }
69
+ post 'authenticate'
70
+ end
71
+ end
72
+ end
73
+
74
+ namespace :my do
75
+ get '/' => 'index#index'
76
+
77
+ resource :profile, except: [:destroy]
78
+ resource :confirmation, :recovery, only: [:show, :create, :update]
79
+ end
80
+
81
+ resources :agents, :browsers, except: [:index, :show]
82
+
83
+ resources :editable_pages, except: [:index, :show]
84
+
85
+ resources :users, except: [:index, :show]
86
+ resources :tokens, :codes, except: [:index, :show]
87
+
88
+ resources :metrics, only: [:edit, :update]
89
+
90
+ resources :privileges, except: [:index, :show]
91
+ resources :privilege_groups, except: [:index, :show]
92
+ end
@@ -0,0 +1,23 @@
1
+ class CreateMetrics < ActiveRecord::Migration[5.0]
2
+ def up
3
+ unless Metric.table_exists?
4
+ create_table :metrics do |t|
5
+ t.timestamps
6
+ t.boolean :incremental, default: false, null: false
7
+ t.boolean :start_with_zero, default: false, null: false
8
+ t.boolean :show_on_dashboard, default: true, null: false
9
+ t.integer :default_period, limit: 2, default: 7, null: false
10
+ t.integer :value, default: 0, null: false
11
+ t.integer :previous_value, default: 0, null: false
12
+ t.string :name, null: false
13
+ t.string :description, default: '', null: false
14
+ end
15
+ end
16
+ end
17
+
18
+ def down
19
+ if Metric.table_exists?
20
+ drop_table :metrics
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,19 @@
1
+ class CreateMetricValues < ActiveRecord::Migration[5.0]
2
+ def up
3
+ unless MetricValue.table_exists?
4
+ create_table :metric_values do |t|
5
+ t.references :metric, foreign_key: true, null: false, on_update: :cascade, on_delete: :cascade
6
+ t.timestamp :time, null: false
7
+ t.integer :quantity, null: false, default: 1
8
+ end
9
+
10
+ execute "create index metric_values_day_idx on metric_values using btree (date_trunc('day', time));"
11
+ end
12
+ end
13
+
14
+ def down
15
+ if MetricValue.table_exists?
16
+ drop_table :metric_values
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,22 @@
1
+ class CreateBrowsers < ActiveRecord::Migration[5.0]
2
+ def up
3
+ unless Browser.table_exists?
4
+ create_table :browsers do |t|
5
+ t.timestamps
6
+ t.boolean :bot, null: false, default: false
7
+ t.boolean :mobile, null: false, default: false
8
+ t.boolean :active, null: false, default: true
9
+ t.boolean :locked, null: false, default: false
10
+ t.boolean :deleted, null: false, default: false
11
+ t.integer :agents_count, default: 0, null: false
12
+ t.string :name, index: true, null: false
13
+ end
14
+ end
15
+ end
16
+
17
+ def down
18
+ if Browser.table_exists?
19
+ drop_table :browsers
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ class CreateAgents < ActiveRecord::Migration[5.0]
2
+ def up
3
+ unless Agent.table_exists?
4
+ create_table :agents do |t|
5
+ t.timestamps
6
+ t.references :browser, foreign_key: true, on_update: :cascade, on_delete: :nullify
7
+ t.boolean :bot, null: false, default: false
8
+ t.boolean :mobile, null: false, default: false
9
+ t.boolean :active, null: false, default: true
10
+ t.boolean :locked, null: false, default: false
11
+ t.boolean :deleted, null: false, default: false
12
+ t.string :name, null: false, index: true
13
+ end
14
+ end
15
+ end
16
+
17
+ def down
18
+ if Agent.table_exists?
19
+ drop_table :agents
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,52 @@
1
+ class CreateUsers < ActiveRecord::Migration[5.0]
2
+ def up
3
+ unless User.table_exists?
4
+ create_table :users do |t|
5
+ t.timestamps
6
+ t.references :agent, foreign_key: true, on_update: :cascade, on_delete: :nullify
7
+ t.inet :ip
8
+ t.integer :inviter_id
9
+ t.integer :native_id
10
+ t.integer :gender, limit: 2
11
+ t.integer :follower_count, default: 0, null: false
12
+ t.integer :followee_count, default: 0, null: false
13
+ t.integer :comments_count, default: 0, null: false
14
+ t.integer :authority, default: 0, null: false
15
+ t.integer :upvote_count, default: 0, null: false
16
+ t.integer :downvote_count, default: 0, null: false
17
+ t.integer :vote_result, default: 0, null: false
18
+ t.boolean :super_user, default: false, null: false
19
+ t.boolean :deleted, default: false, null: false
20
+ t.boolean :bot, default: false, null: false
21
+ t.boolean :allow_login, default: true, null: false
22
+ t.boolean :email_confirmed, default: false, null: false
23
+ t.boolean :phone_confirmed, default: false, null: false
24
+ t.boolean :allow_mail, default: true, null: false
25
+ t.boolean :foreign_slug, default: false, null: false
26
+ t.datetime :last_seen
27
+ t.date :birthday
28
+ t.string :slug, null: false
29
+ t.string :screen_name, index: true, null: false
30
+ t.string :password_digest
31
+ t.string :email, index: true
32
+ t.string :name
33
+ t.string :patronymic
34
+ t.string :surname
35
+ t.string :phone
36
+ t.string :image
37
+ t.string :notice
38
+ end
39
+
40
+ add_foreign_key :users, :users, column: :inviter_id, on_update: :cascade, on_delete: :nullify
41
+ add_foreign_key :users, :users, column: :native_id, on_update: :cascade, on_delete: :nullify
42
+
43
+ add_index :users, :slug, unique: true
44
+ end
45
+ end
46
+
47
+ def down
48
+ if User.table_exists?
49
+ drop_table :users
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,23 @@
1
+ class CreateTokens < ActiveRecord::Migration[5.0]
2
+ def up
3
+ unless Token.table_exists?
4
+ create_table :tokens do |t|
5
+ t.timestamps
6
+ t.references :user, foreign_key: true, null: false, on_update: :cascade, on_delete: :cascade
7
+ t.references :agent, foreign_key: true, on_update: :cascade, on_delete: :nullify
8
+ t.inet :ip
9
+ t.datetime :last_used, index: true
10
+ t.boolean :active, default: true, null: false
11
+ t.string :token
12
+ end
13
+
14
+ add_index :tokens, :token, unique: true
15
+ end
16
+ end
17
+
18
+ def down
19
+ if Token.table_exists?
20
+ drop_table :tokens
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,20 @@
1
+ class CreateCodeTypes < ActiveRecord::Migration[5.1]
2
+ def up
3
+ unless CodeType.table_exists?
4
+ create_table :code_types do |t|
5
+ t.string :slug, null: false
6
+ t.string :name, null: false
7
+ end
8
+
9
+ CodeType.create(slug: 'confirmation', name: 'Подтверждение почты')
10
+ CodeType.create(slug: 'recovery', name: 'Сброс пароля')
11
+ CodeType.create(slug: 'invitation', name: 'Приглашение')
12
+ end
13
+ end
14
+
15
+ def down
16
+ if CodeType.table_exists?
17
+ drop_table :code_types
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,24 @@
1
+ class CreateCodes < ActiveRecord::Migration[5.0]
2
+ def up
3
+ unless Code.table_exists?
4
+ create_table :codes do |t|
5
+ t.timestamps
6
+ t.references :code_type, foreign_key: true, null: false, on_update: :cascade, on_delete: :cascade
7
+ t.references :user, foreign_key: true, on_update: :cascade, on_delete: :cascade
8
+ t.references :agent, foreign_key: true, on_update: :cascade, on_delete: :nullify
9
+ t.inet :ip
10
+ t.integer :quantity, limit: 2, default: 1, null: false
11
+ t.string :body, null: false
12
+ t.string :payload
13
+ end
14
+
15
+ add_index :codes, [:body, :code_type_id, :quantity]
16
+ end
17
+ end
18
+
19
+ def down
20
+ if Code.table_exists?
21
+ drop_table :codes
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,34 @@
1
+ class CreatePrivileges < ActiveRecord::Migration[5.0]
2
+ def up
3
+ unless Privilege.table_exists?
4
+ create_table :privileges do |t|
5
+ t.timestamps
6
+ t.integer :parent_id
7
+ t.boolean :locked, default: false, null: false
8
+ t.boolean :deleted, default: false, null: false
9
+ t.integer :priority, limit: 2, default: 1, null: false
10
+ t.integer :users_count, default: 0, null: false
11
+ t.string :parents_cache, default: '', null: false
12
+ t.integer :children_cache, array: true, default: [], null: false
13
+ t.string :name, null: false
14
+ t.string :slug, null: false
15
+ t.string :description, default: '', null: false
16
+ end
17
+
18
+ add_foreign_key :privileges, :privileges, column: :parent_id, on_update: :cascade, on_delete: :cascade
19
+
20
+ add_index :privileges, :slug, unique: true
21
+
22
+ Privilege.create!(slug: 'administrator', name: 'Администратор')
23
+ Privilege.create!(slug: 'metrics_manager', name: 'Аналитик метрик')
24
+ Privilege.create!(slug: 'moderator', name: 'Модератор')
25
+ Privilege.create!(slug: 'chief_editor', name: 'Главный редактор')
26
+ end
27
+ end
28
+
29
+ def down
30
+ if Privilege.table_exists?
31
+ drop_table :privileges
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,17 @@
1
+ class CreateUserPrivileges < ActiveRecord::Migration[5.0]
2
+ def up
3
+ unless UserPrivilege.table_exists?
4
+ create_table :user_privileges do |t|
5
+ t.timestamps
6
+ t.references :user, foreign_key: true, null: false, on_update: :cascade, on_delete: :cascade
7
+ t.references :privilege, foreign_key: true, null: false, on_update: :cascade, on_delete: :cascade
8
+ end
9
+ end
10
+ end
11
+
12
+ def down
13
+ if UserPrivilege.table_exists?
14
+ drop_table :user_privileges
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,23 @@
1
+ class CreatePrivilegeGroups < ActiveRecord::Migration[5.0]
2
+ def up
3
+ unless PrivilegeGroup.table_exists?
4
+ create_table :privilege_groups do |t|
5
+ t.timestamps
6
+ t.string :name, null: false
7
+ t.string :slug, null: false
8
+ t.string :description, default: '', null: false
9
+ end
10
+
11
+ add_index :privilege_groups, :slug, unique: true
12
+
13
+ PrivilegeGroup.create(slug: 'editors', name: 'Редакторы')
14
+ PrivilegeGroup.create(slug: 'editorial_office', name: 'Члены редакции')
15
+ end
16
+ end
17
+
18
+ def down
19
+ if PrivilegeGroup.table_exists?
20
+ drop_table :privilege_groups
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,24 @@
1
+ class CreatePrivilegeGroupPrivileges < ActiveRecord::Migration[5.0]
2
+ def up
3
+ unless PrivilegeGroupPrivilege.table_exists?
4
+ create_table :privilege_group_privileges do |t|
5
+ t.timestamps
6
+ t.references :privilege_group, foreign_key: true, null: false, on_update: :cascade, on_delete: :cascade
7
+ t.references :privilege, foreign_key: true, null: false, on_update: :cascade, on_delete: :cascade
8
+ end
9
+
10
+ group = PrivilegeGroup.find_by(slug: 'editors')
11
+ group.add_privilege(Privilege.find_by(slug: 'chief_editor'))
12
+
13
+ group = PrivilegeGroup.find_by(slug: 'editorial_office')
14
+ group.add_privilege(Privilege.find_by(slug: 'chief_editor'))
15
+ group.add_privilege(Privilege.find_by(slug: 'moderator'))
16
+ end
17
+ end
18
+
19
+ def down
20
+ if PrivilegeGroupPrivilege.table_exists?
21
+ drop_table :privilege_group_privileges
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,22 @@
1
+ class CreateEditablePages < ActiveRecord::Migration[5.0]
2
+ def up
3
+ unless EditablePage.table_exists?
4
+ create_table :editable_pages do |t|
5
+ t.timestamps
6
+ t.string :slug, null: false
7
+ t.string :name, null: false
8
+ t.string :image
9
+ t.string :title, default: '', null: false
10
+ t.string :keywords, default: '', null: false
11
+ t.string :description, default: '', null: false
12
+ t.text :body, default: '', null: false
13
+ end
14
+ end
15
+ end
16
+
17
+ def down
18
+ if EditablePage.table_exists?
19
+ drop_table :editable_pages
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,18 @@
1
+ class CreateForeignSites < ActiveRecord::Migration[5.0]
2
+ def up
3
+ unless ForeignSite.table_exists?
4
+ create_table :foreign_sites do |t|
5
+ t.timestamps
6
+ t.string :slug, null: false
7
+ t.string :name, null: false
8
+ t.integer :foreign_users_count, default: 0, null: false
9
+ end
10
+ end
11
+ end
12
+
13
+ def down
14
+ if ForeignSite.table_exists?
15
+ drop_table :foreign_sites
16
+ end
17
+ end
18
+ end