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,35 @@
1
+ module DashOverlord
2
+ module UseCases
3
+ module V1
4
+ module Videos
5
+ module Index
6
+ module Postgres
7
+
8
+ class SearchAndPaginateVideos < Shared::SearchAndPaginate::Base
9
+ context_reader :subtitle_lines
10
+
11
+ def perform
12
+ context.videos = search_and_paginate bee_videos
13
+ end
14
+
15
+ protected
16
+
17
+ def bee_videos
18
+ scope = Models::V1::BeeVideo
19
+ .where(rejected_by_system: false)
20
+ .includes(:subtitle_lines)
21
+
22
+ return scope if subtitle_lines.blank?
23
+
24
+ scoped_bee_videos_ids = subtitle_lines.map(&:bee_video_id).uniq
25
+
26
+ scope.where(id: scoped_bee_videos_ids)
27
+ end
28
+ end
29
+
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,26 @@
1
+ module DashOverlord
2
+ module UseCases
3
+ module V1
4
+ module Videos
5
+ module Index
6
+ module Postgres
7
+
8
+ class SearchOnSubtitleLines < V1::Base
9
+ context_reader :full_text_term
10
+
11
+ def perform
12
+ return if full_text_term.blank?
13
+
14
+ context.subtitle_lines =
15
+ Models::V1::SubtitleLine
16
+ .order(:start_time)
17
+ .ft(full_text_term)
18
+ end
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,3 @@
1
+ module DashOverlord
2
+ VERSION = '1.0.0'.freeze
3
+ end
@@ -0,0 +1,24 @@
1
+ require 'elasticsearch'
2
+
3
+ require_relative 'elasticord/base'
4
+ require_relative 'elasticord/config'
5
+ require_relative 'elasticord/version'
6
+
7
+ module Elasticord
8
+ def self.client
9
+ @client ||= reset_client
10
+ end
11
+
12
+ def self.reset_client
13
+ @client = Elasticsearch::Client.new \
14
+ log: Elasticord::Config.get(:log)
15
+ end
16
+
17
+ def self.configure
18
+ yield(Config)
19
+ end
20
+
21
+ # Default values
22
+ Config.set(:log, false)
23
+ Config.set(:index_namespace, ENV['ENV'] || 'development')
24
+ end
@@ -0,0 +1,80 @@
1
+ require 'ostruct'
2
+
3
+ require_relative 'orm/get'
4
+ require_relative 'orm/index'
5
+ require_relative 'orm/create'
6
+ require_relative 'orm/delete'
7
+
8
+ module Elasticord
9
+ class Base < OpenStruct
10
+ module ClassMethods
11
+ def create(attributes = {})
12
+ result = ORM::Create.one(index, type, attributes)
13
+
14
+ return false unless result
15
+
16
+ attributes[:id] ||= result['_id']
17
+
18
+ self.new(attributes)
19
+ end
20
+
21
+ def get(id)
22
+ result = ORM::Get.one(index, type, id)
23
+
24
+ return false unless result
25
+
26
+ self.new(result.merge({ 'id' => id }))
27
+ end
28
+
29
+ def search(query = {})
30
+ results = ORM::Get.by_query(index, type, query)
31
+
32
+ results[:data] = results[:data].map do |attributes|
33
+ self.new(attributes)
34
+ end
35
+
36
+ results
37
+ end
38
+
39
+ def delete_by_query(attributes = {})
40
+ ORM::Delete.by_query(index, type, attributes)
41
+ end
42
+
43
+ def delete_all
44
+ ORM::Delete.all(index)
45
+ end
46
+
47
+ def refresh_index
48
+ ORM::Index.refresh(index)
49
+ end
50
+
51
+ def index
52
+ return @index if defined?(@index)
53
+
54
+ @index = (superclass.index || '').dup if superclass.respond_to? :index
55
+
56
+ @index = @index.presence || Elasticord::Config.get(:index_namespace)
57
+ end
58
+
59
+ def index=(new_index)
60
+ @index = new_index
61
+ end
62
+
63
+ def type
64
+ return @type if defined?(@type)
65
+
66
+ return (@type = '_all') if name.nil? || name == 'Elasticord::Base'
67
+
68
+ @type = name.split('::').last.underscore
69
+ end
70
+ end
71
+
72
+ extend ClassMethods
73
+
74
+ alias attributes marshal_dump
75
+
76
+ def assign_attributes(attributes)
77
+ attributes.each { |key, value| send("#{key}=", value) }
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,23 @@
1
+ module Elasticord
2
+ module Config
3
+ module_function
4
+
5
+ def set(key, value)
6
+ data[key] = value
7
+ end
8
+
9
+ def get(key)
10
+ return data[key] if data.key?(key)
11
+
12
+ ENV.fetch(key.to_s.upcase, ENV.fetch("ELASTICORD_#{key.to_s.upcase}"))
13
+ end
14
+
15
+ def prefix(value)
16
+ @prefix = value
17
+ end
18
+
19
+ def data
20
+ @data ||= {}
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,32 @@
1
+ module Elasticord
2
+ module ORM
3
+ module Create
4
+ module_function
5
+
6
+ REFRESH_INDEX_AFTER_CREATE = true
7
+
8
+ def one(index, type, attributes = {})
9
+ params = build_params(index, type, attributes)
10
+
11
+ begin
12
+ Elasticord.client.index params
13
+ rescue Elasticsearch::Transport::Transport::Errors::Conflict
14
+ return false
15
+ end
16
+ end
17
+
18
+ def build_params(index, type, attributes)
19
+ params = {
20
+ type: type,
21
+ body: attributes,
22
+ index: index,
23
+ refresh: REFRESH_INDEX_AFTER_CREATE
24
+ }
25
+
26
+ params[:id] = attributes[:id] if attributes[:id]
27
+
28
+ params
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,23 @@
1
+ module Elasticord
2
+ module ORM
3
+ module Delete
4
+ module_function
5
+
6
+ def by_query(index, type, attributes = {})
7
+ params = { index: index, body: attributes }
8
+
9
+ params[:type] = type unless type == '_all'
10
+
11
+ Elasticord.client.delete_by_query params
12
+ end
13
+
14
+ def all(index)
15
+ begin
16
+ Elasticord.client.indices.delete index: index
17
+ rescue Elasticsearch::Transport::Transport::Errors::NotFound
18
+ return true
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,34 @@
1
+ module Elasticord
2
+ module ORM
3
+ module Get
4
+ module_function
5
+
6
+ def one(index, type, id)
7
+ result = Elasticord.client.get \
8
+ index: index, type: type, ignore: 404, id: id
9
+
10
+ (!result || !result['found']) ? false : result['_source']
11
+ end
12
+
13
+ def by_query(index, type, body = {})
14
+ data = { total_results: 0, data: [] }
15
+ params = { index: index, type: type, body: body }
16
+
17
+ begin
18
+ results = Elasticord.client.search(params)
19
+
20
+ hits = results['hits']
21
+
22
+ return data if !hits || hits['total'].to_i < 1
23
+
24
+ data[:data] = hits['hits'].map { |result| result['_source'] }
25
+ data[:total_results] = hits['total']
26
+ rescue Elasticsearch::Transport::Transport::Errors::NotFound
27
+ nil
28
+ end
29
+
30
+ data
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,15 @@
1
+ module Elasticord
2
+ module ORM
3
+ module Index
4
+ module_function
5
+
6
+ def refresh(index)
7
+ begin
8
+ Elasticord.client.indices.refresh index: index
9
+ rescue Elasticsearch::Transport::Transport::Errors::NotFound
10
+ return true
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,3 @@
1
+ module Elasticord
2
+ VERSION = '1.0.0'.freeze
3
+ end
@@ -0,0 +1,11 @@
1
+ namespace :dash_overlord do
2
+ desc 'Creates dummy data for charts'
3
+
4
+ task :create_dummy_data do
5
+ NUM_OF_RECORDS = 1
6
+
7
+ DashOverlord::UseCases::V1::DummyData::Create::Charts::Base.perform \
8
+ num_of_records: NUM_OF_RECORDS,
9
+ repo: 'dynamo_db'
10
+ end
11
+ end
@@ -0,0 +1,105 @@
1
+ require 'spec_helper'
2
+
3
+ describe DashOverlord::UseCases::V1::Admins::LogIn::Base do
4
+ def make_the_call(params = {})
5
+ @context = described_class.perform \
6
+ admin_attributes: params
7
+
8
+ raise_context_unknown_error @context
9
+
10
+ @response = app_response @context
11
+ end
12
+
13
+ context 'when sending valid params' do
14
+ before do
15
+ @admin = create('v1/admin', :streetbees)
16
+
17
+ make_the_call email: 'admin@streetbees.com', password: 'password'
18
+ end
19
+
20
+ it 'response.http_status should return 200' do
21
+ expect(@response.http_status).to be 200
22
+ end
23
+
24
+ it 'response.data should return Admin details' do
25
+ expect(@response.data).to match a_hash_including({
26
+ 'code' => 200,
27
+ 'status' => 'ok',
28
+ 'data' => a_hash_including({ id: @admin.id })
29
+ })
30
+ end
31
+ end
32
+
33
+ context 'when not sending any params' do
34
+ before do
35
+ make_the_call
36
+ end
37
+
38
+ it 'response.http_status should return 422' do
39
+ expect(@response.http_status).to be 422
40
+ end
41
+
42
+ it 'response.data should return Admin details' do
43
+ expect(@response.data).to match a_hash_including({
44
+ 'code' => 422,
45
+ 'status' => 'unprocessable_entity',
46
+ 'data' => a_hash_including({
47
+ 'errors' => a_hash_including(
48
+ 'email' => [I18n.t('errors.messages.blank')],
49
+ 'password' => [I18n.t('errors.messages.blank')]
50
+ )
51
+ })
52
+ })
53
+ end
54
+ end
55
+
56
+ context 'when sending invalid password' do
57
+ before do
58
+ @admin = create('v1/admin', :streetbees)
59
+
60
+ make_the_call email: 'admin@streetbees.com', password: 'fake'
61
+ end
62
+
63
+ it 'response.http_status should return 422' do
64
+ expect(@response.http_status).to be 422
65
+ end
66
+
67
+ it 'response.data should return Admin details' do
68
+ expect(@response.data).to match a_hash_including({
69
+ 'code' => 422,
70
+ 'status' => 'unprocessable_entity',
71
+ 'data' => a_hash_including({
72
+ 'errors' => a_hash_including(
73
+ 'email' => [I18n.t('v1.admins.bad_credentials')],
74
+ 'password' => [I18n.t('v1.admins.bad_credentials')]
75
+ )
76
+ })
77
+ })
78
+ end
79
+ end
80
+
81
+ context 'when sending invalid email' do
82
+ before do
83
+ @admin = create('v1/admin', :streetbees)
84
+
85
+ make_the_call email: 'fake', password: 'password'
86
+ end
87
+
88
+ it 'response.http_status should return 422' do
89
+ expect(@response.http_status).to be 422
90
+ end
91
+
92
+ it 'response.data should return Admin details' do
93
+ expect(@response.data).to match a_hash_including({
94
+ 'code' => 422,
95
+ 'status' => 'unprocessable_entity',
96
+ 'data' => a_hash_including({
97
+ 'errors' => a_hash_including(
98
+ 'email' => [I18n.t('v1.admins.bad_credentials')],
99
+ 'password' => [I18n.t('v1.admins.bad_credentials')]
100
+ )
101
+ })
102
+ })
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+ require 'support/shared_missing_admin'
3
+
4
+ describe DashOverlord::UseCases::V1::Admins::ShowCurrentAdmin::Base do
5
+ def make_the_call(params = {})
6
+ @context = described_class.perform \
7
+ session: admin_session
8
+
9
+ raise_context_unknown_error @context
10
+
11
+ @response = app_response @context
12
+ end
13
+
14
+ def admin_attributes(*args)
15
+ attributes = attributes_for(*args).slice \
16
+ :id,
17
+ :email
18
+
19
+ attributes
20
+ end
21
+
22
+ include_examples 'authenticated admin use_case'
23
+
24
+ context 'when current_admin exists' do
25
+ before { @current_admin = create('v1/admin', :streetbees) }
26
+
27
+ context 'when requesting an existing user' do
28
+ before do
29
+ @user = create('v1/admin')
30
+
31
+ make_the_call
32
+ end
33
+
34
+ it 'response.http_status should return 200' do
35
+ expect(@response.http_status).to be 200
36
+ end
37
+
38
+ it 'response.data should return Admin details' do
39
+ attributes = admin_attributes('v1/admin', :streetbees)
40
+
41
+ attributes[:id] = @current_admin.id
42
+
43
+ expect(@response.data).to match a_hash_including({
44
+ 'code' => 200,
45
+ 'status' => 'ok',
46
+ 'data' => a_hash_including(attributes)
47
+ })
48
+ end
49
+ end
50
+ end
51
+ end