elasticord 1.0.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.
Files changed (208) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +5 -0
  3. data/Gemfile.lock +160 -0
  4. data/README.md +35 -0
  5. data/Rakefile +30 -0
  6. data/bin/setup_config_files.sh +19 -0
  7. data/config/boot.rb +39 -0
  8. data/dash_overlord.gemspec +39 -0
  9. data/db/migrate/20160321174733_devise_create_users.rb +43 -0
  10. data/db/migrate/20161014155300_create_bee_videos.rb +21 -0
  11. data/db/migrate/20161014160600_create_subtitle_lines.rb +11 -0
  12. data/db/migrate/20161017103500_add_width_and_height_to_bee_videos.rb +21 -0
  13. data/db/migrate/20161017161300_add_start_and_end_time_to_subtitle_lines.rb +17 -0
  14. data/db/migrate/20161017185300_add_fulltext_search_to_subtitle_lines.rb +13 -0
  15. data/db/migrate/20161018150400_add_subtitle_url_to_bee_videos.rb +5 -0
  16. data/db/migrate/20161026162500_add_country_category_and_extra_to_bee_videos.rb +7 -0
  17. data/db/migrate/20161124152600_add_segment_uid_to_bee_videos.rb +5 -0
  18. data/db/migrate/20161223113800_add_user_data_to_bee_videos.rb +17 -0
  19. data/db/migrate/20170105102428_add_segment_uid_to_subtitle_lines.rb +5 -0
  20. data/db/migrate/20170209171700_add_client_id_to_users.rb +5 -0
  21. data/db/migrate/20170209173800_create_admins.rb +8 -0
  22. data/db/migrate/20170209190400_create_clients.rb +8 -0
  23. data/db/migrate/20170210110800_create_chart_configs.rb +35 -0
  24. data/elasticord.gemspec +26 -0
  25. data/lib/dash_overlord.rb +16 -0
  26. data/lib/dash_overlord/config.rb +39 -0
  27. data/lib/dash_overlord/entities/base.rb +13 -0
  28. data/lib/dash_overlord/entities/v1/base.rb +10 -0
  29. data/lib/dash_overlord/entities/v1/chart_source.rb +10 -0
  30. data/lib/dash_overlord/entities/v1/meta_data.rb +10 -0
  31. data/lib/dash_overlord/locales/v1/en/admins.yml +7 -0
  32. data/lib/dash_overlord/locales/v1/en/chart_configs.yml +7 -0
  33. data/lib/dash_overlord/locales/v1/en/clients.yml +7 -0
  34. data/lib/dash_overlord/locales/v1/en/en.yml +213 -0
  35. data/lib/dash_overlord/locales/v1/en/users.yml +9 -0
  36. data/lib/dash_overlord/models/base.rb +12 -0
  37. data/lib/dash_overlord/models/v1/admin.rb +10 -0
  38. data/lib/dash_overlord/models/v1/answer.rb +10 -0
  39. data/lib/dash_overlord/models/v1/base.rb +11 -0
  40. data/lib/dash_overlord/models/v1/basic_user.rb +34 -0
  41. data/lib/dash_overlord/models/v1/bee_video.rb +30 -0
  42. data/lib/dash_overlord/models/v1/chart_config.rb +48 -0
  43. data/lib/dash_overlord/models/v1/client.rb +10 -0
  44. data/lib/dash_overlord/models/v1/dynamo_db/base.rb +98 -0
  45. data/lib/dash_overlord/models/v1/dynamo_db/migration.rb +52 -0
  46. data/lib/dash_overlord/models/v1/dynamo_db/video.rb +11 -0
  47. data/lib/dash_overlord/models/v1/elastic_search.rb +12 -0
  48. data/lib/dash_overlord/models/v1/subtitle_line.rb +21 -0
  49. data/lib/dash_overlord/models/v1/user.rb +10 -0
  50. data/lib/dash_overlord/requirable.rb +110 -0
  51. data/lib/dash_overlord/serializers/base.rb +127 -0
  52. data/lib/dash_overlord/serializers/v1/admins/base.rb +15 -0
  53. data/lib/dash_overlord/serializers/v1/admins/log_in.rb +13 -0
  54. data/lib/dash_overlord/serializers/v1/admins/show.rb +13 -0
  55. data/lib/dash_overlord/serializers/v1/base.rb +17 -0
  56. data/lib/dash_overlord/serializers/v1/chart_configs/base.rb +15 -0
  57. data/lib/dash_overlord/serializers/v1/chart_configs/create.rb +13 -0
  58. data/lib/dash_overlord/serializers/v1/chart_configs/delete.rb +12 -0
  59. data/lib/dash_overlord/serializers/v1/chart_configs/index.rb +15 -0
  60. data/lib/dash_overlord/serializers/v1/chart_configs/show.rb +59 -0
  61. data/lib/dash_overlord/serializers/v1/chart_configs/update.rb +12 -0
  62. data/lib/dash_overlord/serializers/v1/clients/base.rb +15 -0
  63. data/lib/dash_overlord/serializers/v1/clients/create.rb +13 -0
  64. data/lib/dash_overlord/serializers/v1/clients/delete.rb +12 -0
  65. data/lib/dash_overlord/serializers/v1/clients/index.rb +15 -0
  66. data/lib/dash_overlord/serializers/v1/clients/show.rb +15 -0
  67. data/lib/dash_overlord/serializers/v1/clients/update.rb +12 -0
  68. data/lib/dash_overlord/serializers/v1/meta_data/pagination.rb +19 -0
  69. data/lib/dash_overlord/serializers/v1/meta_data/pagination_with_filters.rb +13 -0
  70. data/lib/dash_overlord/serializers/v1/subtitle_lines/base.rb +15 -0
  71. data/lib/dash_overlord/serializers/v1/subtitle_lines/show.rb +35 -0
  72. data/lib/dash_overlord/serializers/v1/users/base.rb +15 -0
  73. data/lib/dash_overlord/serializers/v1/users/create.rb +13 -0
  74. data/lib/dash_overlord/serializers/v1/users/delete.rb +12 -0
  75. data/lib/dash_overlord/serializers/v1/users/index.rb +15 -0
  76. data/lib/dash_overlord/serializers/v1/users/log_in.rb +13 -0
  77. data/lib/dash_overlord/serializers/v1/users/show.rb +13 -0
  78. data/lib/dash_overlord/serializers/v1/users/update.rb +12 -0
  79. data/lib/dash_overlord/serializers/v1/videos/base.rb +15 -0
  80. data/lib/dash_overlord/serializers/v1/videos/index.rb +15 -0
  81. data/lib/dash_overlord/serializers/v1/videos/show.rb +43 -0
  82. data/lib/dash_overlord/use_cases/base.rb +87 -0
  83. data/lib/dash_overlord/use_cases/context.rb +72 -0
  84. data/lib/dash_overlord/use_cases/v1/admins/find_current_admin.rb +15 -0
  85. data/lib/dash_overlord/use_cases/v1/admins/log_in/base.rb +26 -0
  86. data/lib/dash_overlord/use_cases/v1/admins/show_current_admin/base.rb +22 -0
  87. data/lib/dash_overlord/use_cases/v1/admins/show_current_admin/find_current_admin.rb +21 -0
  88. data/lib/dash_overlord/use_cases/v1/admins/show_current_admin/get_current_admin.rb +20 -0
  89. data/lib/dash_overlord/use_cases/v1/base.rb +8 -0
  90. data/lib/dash_overlord/use_cases/v1/chart_configs/cache_answer_values/base.rb +19 -0
  91. data/lib/dash_overlord/use_cases/v1/chart_configs/cache_answer_values/build_cache.rb +85 -0
  92. data/lib/dash_overlord/use_cases/v1/chart_configs/create/assign_attributes_to_chart_config.rb +48 -0
  93. data/lib/dash_overlord/use_cases/v1/chart_configs/create/base.rb +34 -0
  94. data/lib/dash_overlord/use_cases/v1/chart_configs/create/build_chart_config.rb +17 -0
  95. data/lib/dash_overlord/use_cases/v1/chart_configs/create/validate_chart_config.rb +76 -0
  96. data/lib/dash_overlord/use_cases/v1/chart_configs/delete/base.rb +26 -0
  97. data/lib/dash_overlord/use_cases/v1/chart_configs/delete/delete_chart_config.rb +24 -0
  98. data/lib/dash_overlord/use_cases/v1/chart_configs/get_chart_config.rb +16 -0
  99. data/lib/dash_overlord/use_cases/v1/chart_configs/index/base.rb +24 -0
  100. data/lib/dash_overlord/use_cases/v1/chart_configs/index/find_chart_configs.rb +17 -0
  101. data/lib/dash_overlord/use_cases/v1/chart_configs/index/search_and_paginate_chart_configs.rb +17 -0
  102. data/lib/dash_overlord/use_cases/v1/chart_configs/save_chart_config.rb +19 -0
  103. data/lib/dash_overlord/use_cases/v1/chart_configs/show/base.rb +23 -0
  104. data/lib/dash_overlord/use_cases/v1/chart_configs/show/find_chart_config.rb +21 -0
  105. data/lib/dash_overlord/use_cases/v1/chart_configs/update/base.rb +32 -0
  106. data/lib/dash_overlord/use_cases/v1/clients/create/assign_attributes_to_client.rb +27 -0
  107. data/lib/dash_overlord/use_cases/v1/clients/create/base.rb +29 -0
  108. data/lib/dash_overlord/use_cases/v1/clients/create/build_client.rb +17 -0
  109. data/lib/dash_overlord/use_cases/v1/clients/create/validate_client.rb +25 -0
  110. data/lib/dash_overlord/use_cases/v1/clients/delete/base.rb +26 -0
  111. data/lib/dash_overlord/use_cases/v1/clients/delete/delete_client.rb +22 -0
  112. data/lib/dash_overlord/use_cases/v1/clients/index/base.rb +24 -0
  113. data/lib/dash_overlord/use_cases/v1/clients/index/find_clients.rb +17 -0
  114. data/lib/dash_overlord/use_cases/v1/clients/index/search_and_paginate_clients.rb +17 -0
  115. data/lib/dash_overlord/use_cases/v1/clients/save_client.rb +19 -0
  116. data/lib/dash_overlord/use_cases/v1/clients/show/base.rb +23 -0
  117. data/lib/dash_overlord/use_cases/v1/clients/show/find_client.rb +21 -0
  118. data/lib/dash_overlord/use_cases/v1/clients/show/get_client.rb +17 -0
  119. data/lib/dash_overlord/use_cases/v1/clients/update/base.rb +27 -0
  120. data/lib/dash_overlord/use_cases/v1/dummy_data/create/charts/base.rb +38 -0
  121. data/lib/dash_overlord/use_cases/v1/dummy_data/create/charts/build.rb +64 -0
  122. data/lib/dash_overlord/use_cases/v1/repositories/dynamo_db/client.rb +39 -0
  123. data/lib/dash_overlord/use_cases/v1/repositories/dynamo_db/create/batch.rb +46 -0
  124. data/lib/dash_overlord/use_cases/v1/repositories/dynamo_db/query/table.rb +25 -0
  125. data/lib/dash_overlord/use_cases/v1/shared/log_in/assign_attributes_to_user_model.rb +28 -0
  126. data/lib/dash_overlord/use_cases/v1/shared/log_in/base.rb +21 -0
  127. data/lib/dash_overlord/use_cases/v1/shared/log_in/build_user_model.rb +19 -0
  128. data/lib/dash_overlord/use_cases/v1/shared/log_in/get_existing_user_model.rb +20 -0
  129. data/lib/dash_overlord/use_cases/v1/shared/log_in/switch_user_model_by_existing_user_model.rb +17 -0
  130. data/lib/dash_overlord/use_cases/v1/shared/log_in/validate_user_model.rb +52 -0
  131. data/lib/dash_overlord/use_cases/v1/shared/search_and_paginate/apply_filters.rb +25 -0
  132. data/lib/dash_overlord/use_cases/v1/shared/search_and_paginate/apply_full_text_search.rb +22 -0
  133. data/lib/dash_overlord/use_cases/v1/shared/search_and_paginate/apply_pagination.rb +72 -0
  134. data/lib/dash_overlord/use_cases/v1/shared/search_and_paginate/base.rb +36 -0
  135. data/lib/dash_overlord/use_cases/v1/users/create/assign_attributes_to_user.rb +26 -0
  136. data/lib/dash_overlord/use_cases/v1/users/create/base.rb +29 -0
  137. data/lib/dash_overlord/use_cases/v1/users/create/build_user.rb +17 -0
  138. data/lib/dash_overlord/use_cases/v1/users/create/validate_user.rb +27 -0
  139. data/lib/dash_overlord/use_cases/v1/users/delete/base.rb +26 -0
  140. data/lib/dash_overlord/use_cases/v1/users/delete/delete_user.rb +22 -0
  141. data/lib/dash_overlord/use_cases/v1/users/find_current_user.rb +15 -0
  142. data/lib/dash_overlord/use_cases/v1/users/index/base.rb +23 -0
  143. data/lib/dash_overlord/use_cases/v1/users/index/search_and_paginate_users.rb +17 -0
  144. data/lib/dash_overlord/use_cases/v1/users/log_in/base.rb +26 -0
  145. data/lib/dash_overlord/use_cases/v1/users/save_user.rb +23 -0
  146. data/lib/dash_overlord/use_cases/v1/users/show/base.rb +23 -0
  147. data/lib/dash_overlord/use_cases/v1/users/show/find_user.rb +21 -0
  148. data/lib/dash_overlord/use_cases/v1/users/show/get_user.rb +17 -0
  149. data/lib/dash_overlord/use_cases/v1/users/show_current_user/base.rb +22 -0
  150. data/lib/dash_overlord/use_cases/v1/users/show_current_user/find_current_user.rb +21 -0
  151. data/lib/dash_overlord/use_cases/v1/users/show_current_user/get_current_user.rb +20 -0
  152. data/lib/dash_overlord/use_cases/v1/users/update/base.rb +27 -0
  153. data/lib/dash_overlord/use_cases/v1/videos/index/base.rb +31 -0
  154. data/lib/dash_overlord/use_cases/v1/videos/index/dynamodb/base.rb +19 -0
  155. data/lib/dash_overlord/use_cases/v1/videos/index/dynamodb/search_and_paginate_videos.rb +20 -0
  156. data/lib/dash_overlord/use_cases/v1/videos/index/elastic_search/base.rb +19 -0
  157. data/lib/dash_overlord/use_cases/v1/videos/index/elastic_search/search_and_paginate_videos.rb +97 -0
  158. data/lib/dash_overlord/use_cases/v1/videos/index/postgres/base.rb +22 -0
  159. data/lib/dash_overlord/use_cases/v1/videos/index/postgres/build_video_searched_subtitles.rb +42 -0
  160. data/lib/dash_overlord/use_cases/v1/videos/index/postgres/get_filters.rb +91 -0
  161. data/lib/dash_overlord/use_cases/v1/videos/index/postgres/hhc.json +206 -0
  162. data/lib/dash_overlord/use_cases/v1/videos/index/postgres/search_and_paginate_videos.rb +35 -0
  163. data/lib/dash_overlord/use_cases/v1/videos/index/postgres/search_on_subtitle_lines.rb +26 -0
  164. data/lib/dash_overlord/version.rb +3 -0
  165. data/lib/elasticord.rb +24 -0
  166. data/lib/elasticord/base.rb +80 -0
  167. data/lib/elasticord/config.rb +23 -0
  168. data/lib/elasticord/orm/create.rb +32 -0
  169. data/lib/elasticord/orm/delete.rb +23 -0
  170. data/lib/elasticord/orm/get.rb +34 -0
  171. data/lib/elasticord/orm/index.rb +15 -0
  172. data/lib/elasticord/version.rb +3 -0
  173. data/lib/tasks/create_dummy_data.rake +11 -0
  174. data/spec/dash_overlord/use_cases/v1/admins/log_in_spec.rb +105 -0
  175. data/spec/dash_overlord/use_cases/v1/admins/show_current_admin_spec.rb +51 -0
  176. data/spec/dash_overlord/use_cases/v1/chart_configs/create_spec.rb +77 -0
  177. data/spec/dash_overlord/use_cases/v1/chart_configs/delete_spec.rb +70 -0
  178. data/spec/dash_overlord/use_cases/v1/chart_configs/index_spec.rb +126 -0
  179. data/spec/dash_overlord/use_cases/v1/chart_configs/show_spec.rb +73 -0
  180. data/spec/dash_overlord/use_cases/v1/chart_configs/update_spec.rb +104 -0
  181. data/spec/dash_overlord/use_cases/v1/clients/create_spec.rb +85 -0
  182. data/spec/dash_overlord/use_cases/v1/clients/delete_spec.rb +70 -0
  183. data/spec/dash_overlord/use_cases/v1/clients/index_spec.rb +121 -0
  184. data/spec/dash_overlord/use_cases/v1/clients/show_spec.rb +70 -0
  185. data/spec/dash_overlord/use_cases/v1/clients/update_spec.rb +112 -0
  186. data/spec/dash_overlord/use_cases/v1/users/create_spec.rb +89 -0
  187. data/spec/dash_overlord/use_cases/v1/users/delete_spec.rb +70 -0
  188. data/spec/dash_overlord/use_cases/v1/users/index_spec.rb +121 -0
  189. data/spec/dash_overlord/use_cases/v1/users/log_in_spec.rb +105 -0
  190. data/spec/dash_overlord/use_cases/v1/users/show_current_admin_spec.rb +51 -0
  191. data/spec/dash_overlord/use_cases/v1/users/show_spec.rb +69 -0
  192. data/spec/dash_overlord/use_cases/v1/users/update_spec.rb +119 -0
  193. data/spec/dash_overlord/use_cases/v1/videos/index/base_spec.rb +39 -0
  194. data/spec/dash_overlord/use_cases/v1/videos/index/dynamo_db_spec.rb +84 -0
  195. data/spec/dash_overlord/use_cases/v1/videos/index/elastic_search_spec.rb +121 -0
  196. data/spec/dash_overlord/use_cases/v1/videos/index/postgres_spec.rb +116 -0
  197. data/spec/elasticord/base_spec.rb +242 -0
  198. data/spec/factories/v1/admins.rb +8 -0
  199. data/spec/factories/v1/bee_videos.rb +18 -0
  200. data/spec/factories/v1/chart_configs.rb +23 -0
  201. data/spec/factories/v1/clients.rb +13 -0
  202. data/spec/factories/v1/users.rb +15 -0
  203. data/spec/spec_helper.rb +49 -0
  204. data/spec/support/helpers.rb +65 -0
  205. data/spec/support/shared_missing_admin.rb +39 -0
  206. data/spec/support/shared_missing_user.rb +39 -0
  207. data/tasks/console.rake +10 -0
  208. metadata +325 -0
@@ -0,0 +1,9 @@
1
+ en:
2
+ v1:
3
+ users:
4
+ not_found: 'User not found for given user id'
5
+ not_logged_in: 'User is not logged in'
6
+ bad_credentials: 'Invalid login details. Please try again.'
7
+ contains_errors: 'User contains errors'
8
+ error_while_saving: 'Failed to save User'
9
+ error_while_destroying: 'Failed to destroy User'
@@ -0,0 +1,12 @@
1
+ require 'active_record'
2
+
3
+ module DashOverlord
4
+ module Models
5
+
6
+ class Base < ActiveRecord::Base
7
+ self.abstract_class = true
8
+ self.default_timezone = :utc
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ module DashOverlord
2
+ module Models
3
+ module V1
4
+
5
+ class Admin < V1::BasicUser
6
+ end
7
+
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module DashOverlord
2
+ module Models
3
+ module V1
4
+
5
+ class Answer < V1::ElasticSearch
6
+ end
7
+
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ module DashOverlord
2
+ module Models
3
+ module V1
4
+
5
+ class Base < Models::Base
6
+ self.abstract_class = true
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,34 @@
1
+ require 'bcrypt'
2
+
3
+ module DashOverlord
4
+ module Models
5
+ module V1
6
+
7
+ class BasicUser < V1::Base
8
+ self.abstract_class = true
9
+
10
+ include BCrypt
11
+
12
+ attr_accessor :password
13
+ attr_accessor :password_confirmation
14
+
15
+ def secured_password
16
+ return nil unless encrypted_password
17
+
18
+ @password ||= Password.new(encrypted_password)
19
+ end
20
+
21
+ def secured_password=(new_password)
22
+ @password = Password.create(new_password)
23
+
24
+ self.encrypted_password = @password
25
+ end
26
+
27
+ def password_recovery_still_valid?
28
+ true
29
+ end
30
+ end
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,30 @@
1
+ module DashOverlord
2
+ module Models
3
+ module V1
4
+
5
+ class BeeVideo < V1::Base
6
+ attr_accessor :meta
7
+
8
+ has_many :subtitle_lines
9
+
10
+ ransacker :cuisine do |parent|
11
+ Arel::Nodes::InfixOperation.new \
12
+ '->>', parent.table[:extra], Arel::Nodes.build_quoted('cuisine')
13
+ end
14
+
15
+ def title
16
+ if segment_uid == 'world_cuisine'
17
+ "#{country}, #{category} - #{cuisine}"
18
+ else
19
+ "#{country}, #{category}"
20
+ end
21
+ end
22
+
23
+ def cuisine
24
+ (extra || {})['cuisine']
25
+ end
26
+ end
27
+
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,48 @@
1
+ module DashOverlord
2
+ module Models
3
+ module V1
4
+
5
+ class ChartConfig < V1::Base
6
+ ALLOWED_FONT_STYLES = %w(normal italic bold).freeze
7
+
8
+ ALLOWED_FUNCTIONS = %w(percentage count).freeze
9
+
10
+ def self.allowed_sources(project_id)
11
+ return [] unless project_id
12
+
13
+ # questions = project.questions
14
+ questions = [OpenStruct.new(id: 1, question: 'How old are you')]
15
+
16
+ questions.map do |question|
17
+ Entities::V1::ChartSource.new \
18
+ id: question.id.to_s,
19
+ value: question.question
20
+ end
21
+ end
22
+
23
+ def allowed_sources
24
+ self.class.allowed_sources(project_id)
25
+ end
26
+
27
+ def answers
28
+ # @answers ||=
29
+ # ::Answer.where project_id: project_id, question_id: source.to_i
30
+ []
31
+ end
32
+
33
+ def last_answer
34
+ @last_answer ||= answers.last
35
+ end
36
+
37
+ def cached_answer_values_outdated?
38
+ return cached_answer_updated_at.present? unless last_answer
39
+
40
+ return true unless cached_answer_updated_at
41
+
42
+ last_answer.updated_at > cached_answer_updated_at
43
+ end
44
+ end
45
+
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,10 @@
1
+ module DashOverlord
2
+ module Models
3
+ module V1
4
+
5
+ class Client < V1::Base
6
+ end
7
+
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,98 @@
1
+ require 'aws-sdk'
2
+
3
+ module DashOverlord
4
+ module Models
5
+ module V1
6
+ module DynamoDb
7
+ class Base < OpenStruct
8
+ def self.client
9
+ @client ||= Aws::DynamoDB::Client.new
10
+ end
11
+
12
+ def self.create_all(items)
13
+ client.batch_write_item \
14
+ create_all_params(items)
15
+ end
16
+
17
+ def self.create(attributes = {})
18
+ client.put_item \
19
+ create_params(attributes)
20
+ end
21
+
22
+ def self.find_by(attribute)
23
+ result = @client.get_item({
24
+ table_name: table_name,
25
+ key: attribute
26
+ })
27
+
28
+ return nil unless result.item
29
+
30
+ self.new(result.item)
31
+ end
32
+
33
+ def self.all
34
+ collection = []
35
+ params = all_params
36
+
37
+ loop do
38
+ result = client.scan(params)
39
+ collection += result.items
40
+
41
+ break unless result.last_evaluated_key
42
+
43
+ params[:exclusive_start_key] = result.last_evaluated_key
44
+ end
45
+
46
+ collection
47
+ end
48
+
49
+ def self.table_name
50
+ return @table_name if defined?(@table_name)
51
+
52
+ @table_name = name.split('::').last.underscore
53
+ end
54
+
55
+ alias attributes marshal_dump
56
+
57
+ def assign_attributes(attributes)
58
+ attributes.each { |key, value| send("#{key}=", value) }
59
+ end
60
+
61
+ private
62
+
63
+ def self.create_params(attributes)
64
+ {
65
+ table_name: table_name,
66
+ item: attributes
67
+ }
68
+ end
69
+
70
+ def self.create_all_params(items)
71
+ {
72
+ request_items: {
73
+ "#{table_name}" => items_params(items)
74
+ }
75
+ }
76
+ end
77
+
78
+ def self.items_params(items)
79
+ items.map do |item|
80
+ {
81
+ put_request: {
82
+ item: item
83
+ }
84
+ }
85
+ end
86
+ end
87
+
88
+ def self.all_params
89
+ {
90
+ table_name: table_name,
91
+ }
92
+ end
93
+
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,52 @@
1
+ require 'aws-sdk'
2
+
3
+ module DashOverlord
4
+ module Models
5
+ module V1
6
+ module DynamoDb
7
+ class Migration < OpenStruct
8
+ def initialize(migration_class)
9
+ @client ||= Aws::DynamoDB::Client.new
10
+
11
+ @migration_class = migration_class
12
+ end
13
+
14
+ def create!(params = nil)
15
+ @client.create_table(params || create_params)
16
+ end
17
+
18
+ def create_params
19
+ # THIS NEEDS TO BE DYNAMIC!
20
+ {
21
+ table_name: @migration_class.table_name,
22
+ key_schema: [
23
+ attribute_name: "id",
24
+ key_type: "HASH"
25
+ ],
26
+ attribute_definitions: [
27
+ {
28
+ attribute_name: "id",
29
+ attribute_type: "N"
30
+ },
31
+ ],
32
+ provisioned_throughput: {
33
+ read_capacity_units: 10,
34
+ write_capacity_units: 10
35
+ }
36
+ }
37
+ end
38
+
39
+ def delete!
40
+ @client.delete_table(delete_params)
41
+ end
42
+
43
+ def delete_params
44
+ {
45
+ table_name: @migration_class.table_name
46
+ }
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,11 @@
1
+ module DashOverlord
2
+ module Models
3
+ module V1
4
+ module DynamoDb
5
+ class Video < V1::DynamoDb::Base
6
+
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ require 'elasticord'
2
+
3
+ module DashOverlord
4
+ module Models
5
+ module V1
6
+
7
+ class ElasticSearch < Elasticord::Base
8
+ end
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,21 @@
1
+ module DashOverlord
2
+ module Models
3
+ module V1
4
+
5
+ class SubtitleLine < V1::Base
6
+ belongs_to :bee_video
7
+
8
+ scope :ft, ->(text) do
9
+ clear_text = text.gsub(/[\(\):\-|!&\*']/, '')
10
+
11
+ where("subtitle_lines.search_text @@ to_tsquery('simple', ' ''' || unaccent(?) || ' ''' || ':*')", clear_text)
12
+ end
13
+
14
+ def tag?
15
+ type_of_subtitle == 'tag'
16
+ end
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,10 @@
1
+ module DashOverlord
2
+ module Models
3
+ module V1
4
+
5
+ class User < V1::BasicUser
6
+ end
7
+
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,110 @@
1
+ require 'pathname'
2
+
3
+ module DashOverlord
4
+ module Requirable
5
+
6
+ class Base
7
+ attr_accessor :before_load_paths
8
+
9
+ def initialize
10
+ @before_load_paths = []
11
+ end
12
+
13
+ def register path
14
+ @before_load_paths << path
15
+ end
16
+ end
17
+
18
+ extend self
19
+
20
+ def paths
21
+ @base ||= Base.new
22
+
23
+ if block_given?
24
+ yield @base
25
+ end
26
+ end
27
+
28
+ def load!
29
+ load @base.before_load_paths
30
+ end
31
+
32
+ def load_relative(file, path)
33
+ app_dir = File.dirname(file)
34
+
35
+ $LOAD_PATH.unshift(app_dir) unless $LOAD_PATH.include?(app_dir)
36
+
37
+ Dir.chdir(app_dir) do
38
+ load([path])
39
+ end
40
+ end
41
+
42
+ def dir_list(path)
43
+ Dir.glob(path).sort_by { |filename| filename.count('/') }
44
+ end
45
+
46
+ def load(paths)
47
+ _current_file = nil
48
+
49
+ files = [*paths].flatten.map { |path| dir_list(path) }.flatten.uniq
50
+
51
+ until files.empty?
52
+ last_file_counter = files.length
53
+
54
+ fatal, error = nil, nil
55
+
56
+ files.dup.each do |file|
57
+ _current_file = figure_path(file)
58
+
59
+ begin
60
+ require figure_path(file)
61
+
62
+ files.delete(file)
63
+ rescue NameError, LoadError => error
64
+ # puts "Cyclic dependency reload for #{error.class}: #{error.message} on file: #{file}"
65
+ rescue Exception => fatal
66
+ break
67
+ end
68
+ end
69
+
70
+ if fatal
71
+ exception = fatal || error
72
+ # logger.exception exception, :short
73
+ puts "Requirable:73 raised and exception: #{fatal}"
74
+
75
+ raise exception
76
+ end
77
+
78
+ if last_file_counter == files.length && error
79
+ _splitted = _current_file.split('/')
80
+ _current_file_name = _splitted[-1]
81
+ _current_file_dir = _splitted[0..-2].join('/')
82
+
83
+ raise %Q{
84
+
85
+ An error occurred while loading #{_current_file_name}
86
+
87
+ Error:
88
+ #{error}
89
+
90
+ Possible problems:
91
+ - Syntax error on #{_current_file_name}
92
+ - LOAD_PATH does not have app ROOT_PATH so it can find #{_current_file_name} inside #{_current_file_dir}
93
+ }
94
+ end
95
+ end
96
+ end
97
+
98
+ def figure_path(file)
99
+ return file if Pathname.new(file).absolute?
100
+
101
+ $LOAD_PATH.each do |path|
102
+ found = File.join(path, file)
103
+ return File.expand_path(found) if File.file?(found)
104
+ end
105
+
106
+ file
107
+ end
108
+
109
+ end
110
+ end