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,21 @@
1
+ module DashOverlord
2
+ module UseCases
3
+ module V1
4
+ module Admins
5
+ module ShowCurrentAdmin
6
+
7
+ class FindCurrentAdmin < V1::Base
8
+ def perform
9
+ invoke! GetCurrentAdmin
10
+
11
+ return if context.current_admin.present?
12
+
13
+ failure!(:unauthorized, I18n.t('v1.admins.not_logged_in'))
14
+ end
15
+ end
16
+
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,20 @@
1
+ module DashOverlord
2
+ module UseCases
3
+ module V1
4
+ module Admins
5
+ module ShowCurrentAdmin
6
+
7
+ class GetCurrentAdmin < V1::Base
8
+ context_reader :session
9
+
10
+ def perform
11
+ context.current_admin ||=
12
+ Models::V1::Admin.where(id: session[:admin_id] || -1).first
13
+ end
14
+ end
15
+
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,8 @@
1
+ module DashOverlord
2
+ module UseCases
3
+ module V1
4
+ class Base < UseCases::Base
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,19 @@
1
+ module DashOverlord
2
+ module UseCases
3
+ module V1
4
+ module ChartConfigs
5
+ module CacheAnswerValues
6
+
7
+ class Base < V1::Base
8
+ def perform
9
+ invoke! Show::FindChartConfig
10
+ invoke! BuildCache
11
+ invoke! SaveChartConfig
12
+ end
13
+ end
14
+
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,85 @@
1
+ module DashOverlord
2
+ module UseCases
3
+ module V1
4
+ module ChartConfigs
5
+ module CacheAnswerValues
6
+
7
+ class BuildCache < V1::Base
8
+ context_reader :chart_config
9
+
10
+ def perform
11
+ chart_config.cached_answer_values =
12
+ unique_answer_values.map { |key, value|
13
+ { label: key, value: value }
14
+ }
15
+
16
+ chart_config.cached_answer_updated_at = cached_answer_updated_at
17
+ end
18
+
19
+ protected
20
+
21
+ def unique_answer_values
22
+ case chart_config.function
23
+ when 'count'
24
+ calculate_values_occurences
25
+ when 'percentage'
26
+ calculate_values_percentage
27
+ else
28
+ raw_responses.each_with_object({}) do |raw_response, hash|
29
+ hash[raw_response.to_sym] = '-'
30
+ end
31
+ end
32
+ end
33
+
34
+ def cached_answer_updated_at
35
+ return nil if chart_config.cached_answer_values.blank?
36
+
37
+ # fucking Ebert, made me do this... fucker
38
+ last_answer = chart_config.last_answer
39
+
40
+ return DT.now if !last_answer || !last_answer.updated_at
41
+
42
+ last_answer.updated_at
43
+ end
44
+
45
+ def calculate_values_occurences
46
+ raw_responses.each_with_object({}) do |raw_response, hash|
47
+ hash[raw_response] = hash[raw_response] ? (hash[raw_response] + 1) : 1
48
+ end
49
+ end
50
+
51
+ def calculate_values_percentage
52
+ hash = calculate_values_occurences
53
+
54
+ total = hash.values.reduce(:+)
55
+
56
+ hash.each do |key, occurences|
57
+ hash[key] = (occurences * 100).to_f / total
58
+ end
59
+
60
+ hash
61
+ end
62
+
63
+ def raw_responses
64
+ @raw_responses ||= chart_config.answers.map { |answer|
65
+ Entities::Answer.new(answer.attributes).parsed_response
66
+ }
67
+ end
68
+
69
+ private ########################## PRIVATE #############################
70
+
71
+ def responses_vs_occurrences
72
+ @responses_vs_occurrences ||=
73
+ raw_responses.each_with_object({}) do |raw_response, hash|
74
+ hash[raw_response.to_sym] ||= []
75
+
76
+ hash[raw_response.to_sym] << 1
77
+ end
78
+ end
79
+ end
80
+
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,48 @@
1
+ module DashOverlord
2
+ module UseCases
3
+ module V1
4
+ module ChartConfigs
5
+ module Create
6
+
7
+ class AssignAttributesToChartConfig < V1::Base
8
+ def perform
9
+ context.chart_config.assign_attributes \
10
+ chart_config_attributes
11
+ end
12
+
13
+ protected
14
+
15
+ def chart_config_attributes
16
+ (context.chart_config_attributes || {})
17
+ .with_indifferent_access
18
+ .slice \
19
+ :project_id,
20
+ :source,
21
+ :function,
22
+ :title,
23
+ :title_font_size,
24
+ :title_font_style,
25
+ :function_axis_title,
26
+ :function_axis_font_size,
27
+ :function_axis_font_style,
28
+ :function_axis_auto_adjust,
29
+ :function_axis_maximum,
30
+ :function_axis_minimum,
31
+ :function_axis_interval_auto_adjust,
32
+ :function_axis_interval,
33
+ :function_axis_labels_font_size,
34
+ :function_axis_labels_decimal_places,
35
+ :function_axis_labels_font_style,
36
+ :function_axis_labels_show,
37
+ :source_axis_options_order,
38
+ :source_axis_options_show,
39
+ :source_axis_font_size,
40
+ :source_axis_font_style
41
+ end
42
+ end
43
+
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,34 @@
1
+ module DashOverlord
2
+ module UseCases
3
+ module V1
4
+ module ChartConfigs
5
+ module Create
6
+
7
+ class Base < V1::Base
8
+ def perform
9
+ invoke! Admins::FindCurrentAdmin
10
+ invoke! BuildChartConfig
11
+ invoke! AssignAttributesToChartConfig
12
+ invoke! ValidateChartConfig
13
+ # invoke! CacheAnswerValues::BuildCache
14
+ invoke! SaveChartConfig
15
+
16
+ status.created! if status.ok?
17
+ end
18
+
19
+ def final
20
+ context.data = Serializers::V1::ChartConfigs::Create.to_hash \
21
+ context,
22
+ if status.created? || status.unprocessable_entity?
23
+ :chart_config
24
+ else
25
+ false
26
+ end
27
+ end
28
+ end
29
+
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,17 @@
1
+ module DashOverlord
2
+ module UseCases
3
+ module V1
4
+ module ChartConfigs
5
+ module Create
6
+
7
+ class BuildChartConfig < V1::Base
8
+ def perform
9
+ context.chart_config ||= Models::V1::ChartConfig.new
10
+ end
11
+ end
12
+
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,76 @@
1
+ module DashOverlord
2
+ module UseCases
3
+ module V1
4
+ module ChartConfigs
5
+ module Create
6
+
7
+ class ValidateChartConfig < V1::Base
8
+ ALLOWED_FUNCTIONS = Models::V1::ChartConfig::ALLOWED_FUNCTIONS
9
+ ALLOWED_FONT_STYLES = Models::V1::ChartConfig::ALLOWED_FONT_STYLES
10
+
11
+ target :chart_config
12
+
13
+ validates_presence_of :source
14
+
15
+ validates_presence_of :project_id
16
+
17
+ validates_inclusion_of :function,
18
+ in: ALLOWED_FUNCTIONS,
19
+ message: :invalid
20
+
21
+ validates_inclusion_of \
22
+ :source,
23
+ in: ->(chart_config) { chart_config.allowed_sources.map(&:id) },
24
+ message: :invalid,
25
+ allow_blank: true
26
+
27
+ validates_numericality_of :title_font_size, only_integer: true
28
+
29
+ validates_inclusion_of :title_font_style,
30
+ in: ALLOWED_FONT_STYLES,
31
+ message: :invalid
32
+
33
+ validates_numericality_of :function_axis_font_size,
34
+ only_integer: true
35
+
36
+ validates_inclusion_of :function_axis_font_style,
37
+ in: ALLOWED_FONT_STYLES,
38
+ message: :invalid
39
+
40
+ validates_numericality_of :function_axis_maximum, allow_nil: true
41
+
42
+ validates_numericality_of :function_axis_minimum,
43
+ only_integer: true
44
+
45
+ validates_numericality_of :function_axis_labels_decimal_places,
46
+ only_integer: true,
47
+ allow_nil: true
48
+
49
+ validates_numericality_of :function_axis_labels_font_size,
50
+ only_integer: true
51
+
52
+ validates_inclusion_of :function_axis_labels_font_style,
53
+ in: ALLOWED_FONT_STYLES,
54
+ message: :invalid
55
+
56
+ validates_numericality_of :source_axis_font_size,
57
+ only_integer: true
58
+
59
+ validates_inclusion_of :source_axis_font_style,
60
+ in: ALLOWED_FONT_STYLES,
61
+ message: :invalid
62
+
63
+ def perform
64
+ return if target_valid?
65
+
66
+ failure! \
67
+ :unprocessable_entity,
68
+ I18n.t('v1.chart_configs.contains_errors')
69
+ end
70
+ end
71
+
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,26 @@
1
+ module DashOverlord
2
+ module UseCases
3
+ module V1
4
+ module ChartConfigs
5
+ module Delete
6
+
7
+ class Base < V1::Base
8
+ def perform
9
+ invoke! Admins::FindCurrentAdmin
10
+ invoke! Show::FindChartConfig
11
+ invoke! DeleteChartConfig
12
+
13
+ status.accepted! if status.ok?
14
+ end
15
+
16
+ def final
17
+ context.data = Serializers::V1::ChartConfigs::Delete.to_hash \
18
+ context, false
19
+ end
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,24 @@
1
+ module DashOverlord
2
+ module UseCases
3
+ module V1
4
+ module ChartConfigs
5
+ module Delete
6
+
7
+ class DeleteChartConfig < UseCases::Base
8
+ context_reader :chart_config
9
+
10
+ def perform
11
+ return if chart_config.nil?
12
+ return if chart_config.destroy
13
+
14
+ failure! \
15
+ :internal_server_error,
16
+ I18n.t('v1.chart_configs.error_while_destroying')
17
+ end
18
+ end
19
+
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,16 @@
1
+ module DashOverlord
2
+ module UseCases
3
+ module V1
4
+ module ChartConfigs
5
+
6
+ class GetChartConfig < V1::Base
7
+ def perform
8
+ context.chart_config =
9
+ Models::V1::ChartConfig.find_by_id(context.chart_config_id)
10
+ end
11
+ end
12
+
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,24 @@
1
+ module DashOverlord
2
+ module UseCases
3
+ module V1
4
+ module ChartConfigs
5
+ module Index
6
+
7
+ class Base < V1::Base
8
+ def perform
9
+ invoke! Admins::FindCurrentAdmin
10
+ invoke! FindChartConfigs
11
+ invoke! SearchAndPaginateChartConfigs
12
+ end
13
+
14
+ def final
15
+ context.data = Serializers::V1::ChartConfigs::Index.to_hash \
16
+ context, status.ok? ? nil : false
17
+ end
18
+ end
19
+
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,17 @@
1
+ module DashOverlord
2
+ module UseCases
3
+ module V1
4
+ module ChartConfigs
5
+ module Index
6
+
7
+ class FindChartConfigs < V1::Base
8
+ def perform
9
+ context.chart_configs ||= Models::V1::ChartConfig.all
10
+ end
11
+ end
12
+
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end