ultra-smart-hub 0.0.1

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.

Potentially problematic release.


This version of ultra-smart-hub might be problematic. Click here for more details.

Files changed (329) hide show
  1. checksums.yaml +7 -0
  2. data/rails_admin-3.3.0/Gemfile +56 -0
  3. data/rails_admin-3.3.0/LICENSE.md +20 -0
  4. data/rails_admin-3.3.0/README.md +105 -0
  5. data/rails_admin-3.3.0/Rakefile +37 -0
  6. data/rails_admin-3.3.0/app/assets/javascripts/rails_admin/application.js.erb +30 -0
  7. data/rails_admin-3.3.0/app/assets/javascripts/rails_admin/custom/ui.js +1 -0
  8. data/rails_admin-3.3.0/app/assets/stylesheets/rails_admin/application.scss.erb +35 -0
  9. data/rails_admin-3.3.0/app/assets/stylesheets/rails_admin/custom/mixins.scss +11 -0
  10. data/rails_admin-3.3.0/app/assets/stylesheets/rails_admin/custom/theming.scss +13 -0
  11. data/rails_admin-3.3.0/app/assets/stylesheets/rails_admin/custom/variables.scss +15 -0
  12. data/rails_admin-3.3.0/app/controllers/rails_admin/application_controller.rb +84 -0
  13. data/rails_admin-3.3.0/app/controllers/rails_admin/main_controller.rb +153 -0
  14. data/rails_admin-3.3.0/app/helpers/rails_admin/application_helper.rb +264 -0
  15. data/rails_admin-3.3.0/app/helpers/rails_admin/form_builder.rb +157 -0
  16. data/rails_admin-3.3.0/app/helpers/rails_admin/main_helper.rb +61 -0
  17. data/rails_admin-3.3.0/app/views/kaminari/ra-twitter-bootstrap/_gap.html.erb +5 -0
  18. data/rails_admin-3.3.0/app/views/kaminari/ra-twitter-bootstrap/_next_page.html.erb +9 -0
  19. data/rails_admin-3.3.0/app/views/kaminari/ra-twitter-bootstrap/_page.html.erb +9 -0
  20. data/rails_admin-3.3.0/app/views/kaminari/ra-twitter-bootstrap/_paginator.html.erb +15 -0
  21. data/rails_admin-3.3.0/app/views/kaminari/ra-twitter-bootstrap/_prev_page.html.erb +9 -0
  22. data/rails_admin-3.3.0/app/views/kaminari/ra-twitter-bootstrap/without_count/_next_page.html.erb +9 -0
  23. data/rails_admin-3.3.0/app/views/kaminari/ra-twitter-bootstrap/without_count/_paginator.html.erb +8 -0
  24. data/rails_admin-3.3.0/app/views/kaminari/ra-twitter-bootstrap/without_count/_prev_page.html.erb +9 -0
  25. data/rails_admin-3.3.0/app/views/layouts/rails_admin/_head.html.erb +32 -0
  26. data/rails_admin-3.3.0/app/views/layouts/rails_admin/_navigation.html.erb +17 -0
  27. data/rails_admin-3.3.0/app/views/layouts/rails_admin/_secondary_navigation.html.erb +26 -0
  28. data/rails_admin-3.3.0/app/views/layouts/rails_admin/_sidebar_navigation.html.erb +5 -0
  29. data/rails_admin-3.3.0/app/views/layouts/rails_admin/application.html.erb +27 -0
  30. data/rails_admin-3.3.0/app/views/layouts/rails_admin/content.html.erb +22 -0
  31. data/rails_admin-3.3.0/app/views/layouts/rails_admin/modal.js.erb +7 -0
  32. data/rails_admin-3.3.0/app/views/rails_admin/main/_dashboard_history.html.erb +45 -0
  33. data/rails_admin-3.3.0/app/views/rails_admin/main/_delete_notice.html.erb +35 -0
  34. data/rails_admin-3.3.0/app/views/rails_admin/main/_form_action_text.html.erb +8 -0
  35. data/rails_admin-3.3.0/app/views/rails_admin/main/_form_boolean.html.erb +14 -0
  36. data/rails_admin-3.3.0/app/views/rails_admin/main/_form_ck_editor.html.erb +10 -0
  37. data/rails_admin-3.3.0/app/views/rails_admin/main/_form_code_mirror.html.erb +9 -0
  38. data/rails_admin-3.3.0/app/views/rails_admin/main/_form_colorpicker.html.erb +5 -0
  39. data/rails_admin-3.3.0/app/views/rails_admin/main/_form_datetime.html.erb +10 -0
  40. data/rails_admin-3.3.0/app/views/rails_admin/main/_form_enumeration.html.erb +25 -0
  41. data/rails_admin-3.3.0/app/views/rails_admin/main/_form_field.html.erb +1 -0
  42. data/rails_admin-3.3.0/app/views/rails_admin/main/_form_file_upload.html.erb +17 -0
  43. data/rails_admin-3.3.0/app/views/rails_admin/main/_form_filtering_multiselect.html.erb +19 -0
  44. data/rails_admin-3.3.0/app/views/rails_admin/main/_form_filtering_select.html.erb +21 -0
  45. data/rails_admin-3.3.0/app/views/rails_admin/main/_form_froala.html.erb +8 -0
  46. data/rails_admin-3.3.0/app/views/rails_admin/main/_form_multiple_file_upload.html.erb +20 -0
  47. data/rails_admin-3.3.0/app/views/rails_admin/main/_form_nested_many.html.erb +21 -0
  48. data/rails_admin-3.3.0/app/views/rails_admin/main/_form_nested_one.html.erb +21 -0
  49. data/rails_admin-3.3.0/app/views/rails_admin/main/_form_polymorphic_association.html.erb +23 -0
  50. data/rails_admin-3.3.0/app/views/rails_admin/main/_form_simple_mde.html.erb +8 -0
  51. data/rails_admin-3.3.0/app/views/rails_admin/main/_form_text.html.erb +1 -0
  52. data/rails_admin-3.3.0/app/views/rails_admin/main/_form_wysihtml5.html.erb +8 -0
  53. data/rails_admin-3.3.0/app/views/rails_admin/main/_submit_buttons.html.erb +25 -0
  54. data/rails_admin-3.3.0/app/views/rails_admin/main/bulk_delete.html.erb +19 -0
  55. data/rails_admin-3.3.0/app/views/rails_admin/main/dashboard.html.erb +64 -0
  56. data/rails_admin-3.3.0/app/views/rails_admin/main/delete.html.erb +21 -0
  57. data/rails_admin-3.3.0/app/views/rails_admin/main/edit.html.erb +3 -0
  58. data/rails_admin-3.3.0/app/views/rails_admin/main/export.html.erb +149 -0
  59. data/rails_admin-3.3.0/app/views/rails_admin/main/history.html.erb +80 -0
  60. data/rails_admin-3.3.0/app/views/rails_admin/main/index.html.erb +184 -0
  61. data/rails_admin-3.3.0/app/views/rails_admin/main/new.html.erb +3 -0
  62. data/rails_admin-3.3.0/app/views/rails_admin/main/show.html.erb +30 -0
  63. data/rails_admin-3.3.0/config/initializers/active_record_extensions.rb +23 -0
  64. data/rails_admin-3.3.0/config/initializers/mongoid_extensions.rb +6 -0
  65. data/rails_admin-3.3.0/config/locales/rails_admin.en.yml +158 -0
  66. data/rails_admin-3.3.0/config/routes.rb +14 -0
  67. data/rails_admin-3.3.0/lib/generators/rails_admin/importmap_formatter.rb +176 -0
  68. data/rails_admin-3.3.0/lib/generators/rails_admin/install_generator.rb +142 -0
  69. data/rails_admin-3.3.0/lib/generators/rails_admin/templates/initializer.erb +42 -0
  70. data/rails_admin-3.3.0/lib/generators/rails_admin/templates/rails_admin.js +1 -0
  71. data/rails_admin-3.3.0/lib/generators/rails_admin/templates/rails_admin.scss.erb +1 -0
  72. data/rails_admin-3.3.0/lib/generators/rails_admin/templates/rails_admin.vite.js +2 -0
  73. data/rails_admin-3.3.0/lib/generators/rails_admin/templates/rails_admin.webpacker.js +2 -0
  74. data/rails_admin-3.3.0/lib/generators/rails_admin/utils.rb +21 -0
  75. data/rails_admin-3.3.0/lib/rails_admin/abstract_model.rb +275 -0
  76. data/rails_admin-3.3.0/lib/rails_admin/adapters/active_record/association.rb +130 -0
  77. data/rails_admin-3.3.0/lib/rails_admin/adapters/active_record/object_extension.rb +13 -0
  78. data/rails_admin-3.3.0/lib/rails_admin/adapters/active_record/property.rb +58 -0
  79. data/rails_admin-3.3.0/lib/rails_admin/adapters/active_record.rb +367 -0
  80. data/rails_admin-3.3.0/lib/rails_admin/adapters/active_record.rb.bak +348 -0
  81. data/rails_admin-3.3.0/lib/rails_admin/adapters/mongoid/association.rb +161 -0
  82. data/rails_admin-3.3.0/lib/rails_admin/adapters/mongoid/bson.rb +31 -0
  83. data/rails_admin-3.3.0/lib/rails_admin/adapters/mongoid/extension.rb +49 -0
  84. data/rails_admin-3.3.0/lib/rails_admin/adapters/mongoid/object_extension.rb +29 -0
  85. data/rails_admin-3.3.0/lib/rails_admin/adapters/mongoid/property.rb +101 -0
  86. data/rails_admin-3.3.0/lib/rails_admin/adapters/mongoid.rb +312 -0
  87. data/rails_admin-3.3.0/lib/rails_admin/config/actions/base.rb +162 -0
  88. data/rails_admin-3.3.0/lib/rails_admin/config/actions/bulk_delete.rb +67 -0
  89. data/rails_admin-3.3.0/lib/rails_admin/config/actions/dashboard.rb +62 -0
  90. data/rails_admin-3.3.0/lib/rails_admin/config/actions/delete.rb +58 -0
  91. data/rails_admin-3.3.0/lib/rails_admin/config/actions/edit.rb +56 -0
  92. data/rails_admin-3.3.0/lib/rails_admin/config/actions/export.rb +41 -0
  93. data/rails_admin-3.3.0/lib/rails_admin/config/actions/history_index.rb +40 -0
  94. data/rails_admin-3.3.0/lib/rails_admin/config/actions/history_show.rb +40 -0
  95. data/rails_admin-3.3.0/lib/rails_admin/config/actions/index.rb +98 -0
  96. data/rails_admin-3.3.0/lib/rails_admin/config/actions/new.rb +69 -0
  97. data/rails_admin-3.3.0/lib/rails_admin/config/actions/show.rb +36 -0
  98. data/rails_admin-3.3.0/lib/rails_admin/config/actions/show_in_app.rb +37 -0
  99. data/rails_admin-3.3.0/lib/rails_admin/config/actions.rb +122 -0
  100. data/rails_admin-3.3.0/lib/rails_admin/config/configurable.rb +107 -0
  101. data/rails_admin-3.3.0/lib/rails_admin/config/const_load_suppressor.rb +78 -0
  102. data/rails_admin-3.3.0/lib/rails_admin/config/fields/association.rb +168 -0
  103. data/rails_admin-3.3.0/lib/rails_admin/config/fields/base.rb +391 -0
  104. data/rails_admin-3.3.0/lib/rails_admin/config/fields/collection_association.rb +90 -0
  105. data/rails_admin-3.3.0/lib/rails_admin/config/fields/factories/action_text.rb +14 -0
  106. data/rails_admin-3.3.0/lib/rails_admin/config/fields/factories/active_storage.rb +34 -0
  107. data/rails_admin-3.3.0/lib/rails_admin/config/fields/factories/association.rb +32 -0
  108. data/rails_admin-3.3.0/lib/rails_admin/config/fields/factories/carrierwave.rb +30 -0
  109. data/rails_admin-3.3.0/lib/rails_admin/config/fields/factories/devise.rb +28 -0
  110. data/rails_admin-3.3.0/lib/rails_admin/config/fields/factories/dragonfly.rb +28 -0
  111. data/rails_admin-3.3.0/lib/rails_admin/config/fields/factories/enum.rb +23 -0
  112. data/rails_admin-3.3.0/lib/rails_admin/config/fields/factories/paperclip.rb +29 -0
  113. data/rails_admin-3.3.0/lib/rails_admin/config/fields/factories/password.rb +19 -0
  114. data/rails_admin-3.3.0/lib/rails_admin/config/fields/factories/shrine.rb +29 -0
  115. data/rails_admin-3.3.0/lib/rails_admin/config/fields/group.rb +77 -0
  116. data/rails_admin-3.3.0/lib/rails_admin/config/fields/singular_association.rb +59 -0
  117. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/action_text.rb +36 -0
  118. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/active_record_enum.rb +62 -0
  119. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/active_storage.rb +70 -0
  120. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/all.rb +43 -0
  121. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/belongs_to_association.rb +48 -0
  122. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/boolean.rb +70 -0
  123. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/bson_object_id.rb +42 -0
  124. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/carrierwave.rb +34 -0
  125. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/citext.rb +15 -0
  126. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/ck_editor.rb +40 -0
  127. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/code_mirror.rb +48 -0
  128. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/color.rb +43 -0
  129. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/date.rb +41 -0
  130. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/datetime.rb +96 -0
  131. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/decimal.rb +23 -0
  132. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/dragonfly.rb +44 -0
  133. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/enum.rb +52 -0
  134. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/file_upload.rb +87 -0
  135. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/float.rb +23 -0
  136. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/froala.rb +37 -0
  137. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/has_and_belongs_to_many_association.rb +16 -0
  138. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/has_many_association.rb +16 -0
  139. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/has_one_association.rb +35 -0
  140. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/hidden.rb +31 -0
  141. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/inet.rb +15 -0
  142. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/integer.rb +20 -0
  143. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/json.rb +37 -0
  144. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/multiple_active_storage.rb +82 -0
  145. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/multiple_carrierwave.rb +59 -0
  146. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/multiple_file_upload.rb +134 -0
  147. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/numeric.rb +24 -0
  148. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/paperclip.rb +30 -0
  149. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/password.rb +45 -0
  150. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/polymorphic_association.rb +118 -0
  151. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/serialized.rb +28 -0
  152. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/shrine.rb +56 -0
  153. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/simple_mde.rb +38 -0
  154. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/string.rb +50 -0
  155. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/string_like.rb +25 -0
  156. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/text.rb +28 -0
  157. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/time.rb +36 -0
  158. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/timestamp.rb +16 -0
  159. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/uuid.rb +15 -0
  160. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types/wysihtml5.rb +43 -0
  161. data/rails_admin-3.3.0/lib/rails_admin/config/fields/types.rb +29 -0
  162. data/rails_admin-3.3.0/lib/rails_admin/config/fields.rb +92 -0
  163. data/rails_admin-3.3.0/lib/rails_admin/config/groupable.rb +20 -0
  164. data/rails_admin-3.3.0/lib/rails_admin/config/has_description.rb +14 -0
  165. data/rails_admin-3.3.0/lib/rails_admin/config/has_fields.rb +144 -0
  166. data/rails_admin-3.3.0/lib/rails_admin/config/has_groups.rb +27 -0
  167. data/rails_admin-3.3.0/lib/rails_admin/config/hideable.rb +30 -0
  168. data/rails_admin-3.3.0/lib/rails_admin/config/inspectable.rb +39 -0
  169. data/rails_admin-3.3.0/lib/rails_admin/config/lazy_model.rb +74 -0
  170. data/rails_admin-3.3.0/lib/rails_admin/config/model.rb +120 -0
  171. data/rails_admin-3.3.0/lib/rails_admin/config/proxyable/proxy.rb +39 -0
  172. data/rails_admin-3.3.0/lib/rails_admin/config/proxyable.rb +26 -0
  173. data/rails_admin-3.3.0/lib/rails_admin/config/sections/base.rb +36 -0
  174. data/rails_admin-3.3.0/lib/rails_admin/config/sections/create.rb +13 -0
  175. data/rails_admin-3.3.0/lib/rails_admin/config/sections/edit.rb +13 -0
  176. data/rails_admin-3.3.0/lib/rails_admin/config/sections/export.rb +13 -0
  177. data/rails_admin-3.3.0/lib/rails_admin/config/sections/list.rb +63 -0
  178. data/rails_admin-3.3.0/lib/rails_admin/config/sections/modal.rb +12 -0
  179. data/rails_admin-3.3.0/lib/rails_admin/config/sections/nested.rb +12 -0
  180. data/rails_admin-3.3.0/lib/rails_admin/config/sections/show.rb +12 -0
  181. data/rails_admin-3.3.0/lib/rails_admin/config/sections/update.rb +12 -0
  182. data/rails_admin-3.3.0/lib/rails_admin/config/sections.rb +39 -0
  183. data/rails_admin-3.3.0/lib/rails_admin/config.rb +403 -0
  184. data/rails_admin-3.3.0/lib/rails_admin/engine.rb +84 -0
  185. data/rails_admin-3.3.0/lib/rails_admin/extension.rb +35 -0
  186. data/rails_admin-3.3.0/lib/rails_admin/extensions/cancancan/authorization_adapter.rb +90 -0
  187. data/rails_admin-3.3.0/lib/rails_admin/extensions/cancancan.rb +5 -0
  188. data/rails_admin-3.3.0/lib/rails_admin/extensions/controller_extension.rb +8 -0
  189. data/rails_admin-3.3.0/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +187 -0
  190. data/rails_admin-3.3.0/lib/rails_admin/extensions/paper_trail.rb +5 -0
  191. data/rails_admin-3.3.0/lib/rails_admin/extensions/pundit/authorization_adapter.rb +72 -0
  192. data/rails_admin-3.3.0/lib/rails_admin/extensions/pundit.rb +5 -0
  193. data/rails_admin-3.3.0/lib/rails_admin/extensions/url_for_extension.rb +15 -0
  194. data/rails_admin-3.3.0/lib/rails_admin/support/composite_keys_serializer.rb +15 -0
  195. data/rails_admin-3.3.0/lib/rails_admin/support/csv_converter.rb +107 -0
  196. data/rails_admin-3.3.0/lib/rails_admin/support/datetime.rb +66 -0
  197. data/rails_admin-3.3.0/lib/rails_admin/support/es_module_processor.rb +23 -0
  198. data/rails_admin-3.3.0/lib/rails_admin/support/hash_helper.rb +31 -0
  199. data/rails_admin-3.3.0/lib/rails_admin/version.rb +54 -0
  200. data/rails_admin-3.3.0/lib/rails_admin.rb +62 -0
  201. data/rails_admin-3.3.0/lib/tasks/rails_admin.rake +47 -0
  202. data/rails_admin-3.3.0/package.json +30 -0
  203. data/rails_admin-3.3.0/src/rails_admin/abstract-select.js +30 -0
  204. data/rails_admin-3.3.0/src/rails_admin/base.js +32 -0
  205. data/rails_admin-3.3.0/src/rails_admin/filter-box.js +360 -0
  206. data/rails_admin-3.3.0/src/rails_admin/filtering-multiselect.js +387 -0
  207. data/rails_admin-3.3.0/src/rails_admin/filtering-select.js +306 -0
  208. data/rails_admin-3.3.0/src/rails_admin/i18n.js +18 -0
  209. data/rails_admin-3.3.0/src/rails_admin/jquery.js +3 -0
  210. data/rails_admin-3.3.0/src/rails_admin/nested-form-hooks.js +110 -0
  211. data/rails_admin-3.3.0/src/rails_admin/remote-form.js +193 -0
  212. data/rails_admin-3.3.0/src/rails_admin/sidescroll.js +20 -0
  213. data/rails_admin-3.3.0/src/rails_admin/styles/base/README.txt +2 -0
  214. data/rails_admin-3.3.0/src/rails_admin/styles/base/mixins.scss +1 -0
  215. data/rails_admin-3.3.0/src/rails_admin/styles/base/theming.scss +342 -0
  216. data/rails_admin-3.3.0/src/rails_admin/styles/base/variables.scss +3 -0
  217. data/rails_admin-3.3.0/src/rails_admin/styles/base.scss +27 -0
  218. data/rails_admin-3.3.0/src/rails_admin/styles/filtering-multiselect.scss +53 -0
  219. data/rails_admin-3.3.0/src/rails_admin/styles/filtering-select.scss +70 -0
  220. data/rails_admin-3.3.0/src/rails_admin/styles/widgets.scss +26 -0
  221. data/rails_admin-3.3.0/src/rails_admin/ui.js +176 -0
  222. data/rails_admin-3.3.0/src/rails_admin/vendor/jquery_nested_form.js +122 -0
  223. data/rails_admin-3.3.0/src/rails_admin/widgets.js +507 -0
  224. data/rails_admin-3.3.0/vendor/assets/fonts/rails_admin/fa-solid-900.ttf +0 -0
  225. data/rails_admin-3.3.0/vendor/assets/fonts/rails_admin/fa-solid-900.woff2 +0 -0
  226. data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/bootstrap.js +5046 -0
  227. data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/flatpickr-with-locales.js +11246 -0
  228. data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/data.js +41 -0
  229. data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/effect.js +1637 -0
  230. data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/ie.js +17 -0
  231. data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/keycode.js +47 -0
  232. data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/position.js +500 -0
  233. data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/safe-active-element.js +42 -0
  234. data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/scroll-parent.js +47 -0
  235. data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/unique-id.js +51 -0
  236. data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/version.js +17 -0
  237. data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/widget.js +735 -0
  238. data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/autocomplete.js +689 -0
  239. data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/menu.js +680 -0
  240. data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/mouse.js +230 -0
  241. data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/sortable.js +1561 -0
  242. data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/jquery3.js +10881 -0
  243. data/rails_admin-3.3.0/vendor/assets/javascripts/rails_admin/popper.js +1974 -0
  244. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_accordion.scss +118 -0
  245. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_alert.scss +57 -0
  246. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_badge.scss +29 -0
  247. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_breadcrumb.scss +28 -0
  248. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_button-group.scss +139 -0
  249. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_buttons.scss +111 -0
  250. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_card.scss +216 -0
  251. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_carousel.scss +229 -0
  252. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_close.scss +40 -0
  253. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_containers.scss +41 -0
  254. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_dropdown.scss +240 -0
  255. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_forms.scss +9 -0
  256. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_functions.scss +302 -0
  257. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_grid.scss +33 -0
  258. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_helpers.scss +9 -0
  259. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_images.scss +42 -0
  260. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_list-group.scss +174 -0
  261. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_mixins.scss +43 -0
  262. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_modal.scss +209 -0
  263. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_nav.scss +139 -0
  264. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_navbar.scss +335 -0
  265. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_offcanvas.scss +83 -0
  266. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_pagination.scss +64 -0
  267. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_placeholders.scss +51 -0
  268. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_popover.scss +158 -0
  269. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_progress.scss +48 -0
  270. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_reboot.scss +625 -0
  271. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_root.scss +54 -0
  272. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_spinners.scss +69 -0
  273. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_tables.scss +155 -0
  274. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_toasts.scss +51 -0
  275. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_tooltip.scss +115 -0
  276. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_transitions.scss +27 -0
  277. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_type.scss +104 -0
  278. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_utilities.scss +630 -0
  279. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/_variables.scss +1641 -0
  280. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/bootstrap.scss +53 -0
  281. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_floating-labels.scss +63 -0
  282. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-check.scss +152 -0
  283. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-control.scss +219 -0
  284. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-range.scss +91 -0
  285. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-select.scss +72 -0
  286. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-text.scss +11 -0
  287. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_input-group.scss +121 -0
  288. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_labels.scss +36 -0
  289. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_validation.scss +12 -0
  290. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_clearfix.scss +3 -0
  291. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_colored-links.scss +12 -0
  292. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_position.scss +30 -0
  293. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_ratio.scss +26 -0
  294. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_stacks.scss +15 -0
  295. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_stretched-link.scss +15 -0
  296. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_text-truncation.scss +7 -0
  297. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_visually-hidden.scss +8 -0
  298. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_vr.scss +8 -0
  299. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_alert.scss +11 -0
  300. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_backdrop.scss +14 -0
  301. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_border-radius.scss +78 -0
  302. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_box-shadow.scss +18 -0
  303. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_breakpoints.scss +127 -0
  304. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_buttons.scss +133 -0
  305. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_caret.scss +64 -0
  306. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_clearfix.scss +9 -0
  307. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_color-scheme.scss +7 -0
  308. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_container.scss +9 -0
  309. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_deprecate.scss +10 -0
  310. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_forms.scss +144 -0
  311. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_gradients.scss +47 -0
  312. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_grid.scss +151 -0
  313. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_image.scss +16 -0
  314. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_list-group.scss +24 -0
  315. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_lists.scss +7 -0
  316. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_pagination.scss +31 -0
  317. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_reset-text.scss +17 -0
  318. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_resize.scss +6 -0
  319. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_table-variants.scss +21 -0
  320. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_text-truncate.scss +8 -0
  321. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_transition.scss +26 -0
  322. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_utilities.scss +89 -0
  323. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_visually-hidden.scss +29 -0
  324. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/utilities/_api.scss +47 -0
  325. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/bootstrap/vendor/_rfs.scss +354 -0
  326. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/flatpickr.css +791 -0
  327. data/rails_admin-3.3.0/vendor/assets/stylesheets/rails_admin/font-awesome.scss +6351 -0
  328. data/ultra-smart-hub.gemspec +12 -0
  329. metadata +368 -0
@@ -0,0 +1,161 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsAdmin
4
+ module Adapters
5
+ module Mongoid
6
+ class Association
7
+ attr_reader :association, :model
8
+
9
+ delegate :autosave?, to: :association
10
+
11
+ def initialize(association, model)
12
+ @association = association
13
+ @model = model
14
+ end
15
+
16
+ def name
17
+ association.name.to_sym
18
+ end
19
+
20
+ def pretty_name
21
+ name.to_s.tr('_', ' ').capitalize
22
+ end
23
+
24
+ def type
25
+ case macro.to_sym
26
+ when :belongs_to, :referenced_in, :embedded_in
27
+ :belongs_to
28
+ when :has_one, :references_one, :embeds_one
29
+ :has_one
30
+ when :has_many, :references_many, :embeds_many
31
+ :has_many
32
+ when :has_and_belongs_to_many, :references_and_referenced_in_many
33
+ :has_and_belongs_to_many
34
+ else
35
+ raise "Unknown association type: #{macro.inspect}"
36
+ end
37
+ end
38
+
39
+ def field_type
40
+ if polymorphic?
41
+ :polymorphic_association
42
+ else
43
+ :"#{type}_association"
44
+ end
45
+ end
46
+
47
+ def klass
48
+ if polymorphic? && %i[referenced_in belongs_to].include?(macro)
49
+ polymorphic_parents(:mongoid, association.inverse_class_name, name) || []
50
+ else
51
+ association.klass
52
+ end
53
+ end
54
+
55
+ def primary_key
56
+ case type
57
+ when :belongs_to, :has_and_belongs_to_many
58
+ association.primary_key.to_sym
59
+ else
60
+ :_id
61
+ end
62
+ end
63
+
64
+ def foreign_key
65
+ return if embeds?
66
+
67
+ begin
68
+ association.foreign_key.to_sym
69
+ rescue StandardError
70
+ nil
71
+ end
72
+ end
73
+
74
+ def foreign_key_nullable?
75
+ return if foreign_key.nil?
76
+
77
+ true
78
+ end
79
+
80
+ def foreign_type
81
+ return unless polymorphic? && %i[referenced_in belongs_to].include?(macro)
82
+
83
+ association.inverse_type.try(:to_sym) || :"#{name}_type"
84
+ end
85
+
86
+ def foreign_inverse_of
87
+ return unless polymorphic? && %i[referenced_in belongs_to].include?(macro)
88
+
89
+ inverse_of_field.try(:to_sym)
90
+ end
91
+
92
+ def key_accessor
93
+ case macro.to_sym
94
+ when :has_many
95
+ :"#{name.to_s.singularize}_ids"
96
+ when :has_one
97
+ :"#{name}_id"
98
+ when :embedded_in, :embeds_one, :embeds_many
99
+ nil
100
+ else
101
+ foreign_key
102
+ end
103
+ end
104
+
105
+ def as
106
+ association.as.try :to_sym
107
+ end
108
+
109
+ def polymorphic?
110
+ association.polymorphic? && %i[referenced_in belongs_to].include?(macro)
111
+ end
112
+
113
+ def inverse_of
114
+ association.inverse_of.try :to_sym
115
+ end
116
+
117
+ def read_only?
118
+ false
119
+ end
120
+
121
+ def nested_options
122
+ nested = nested_attributes_options.try { |o| o[name] }
123
+ if !nested && %i[embeds_one embeds_many].include?(macro.to_sym) && !cyclic?
124
+ raise <<~MSG
125
+ Embedded association without accepts_nested_attributes_for can't be handled by RailsAdmin,
126
+ because embedded model doesn't have top-level access.
127
+ Please add `accepts_nested_attributes_for :#{association.name}' line to `#{model}' model.
128
+ MSG
129
+ end
130
+
131
+ nested
132
+ end
133
+
134
+ def association?
135
+ true
136
+ end
137
+
138
+ def macro
139
+ association.try(:macro) || association.class.name.split('::').last.underscore.to_sym
140
+ end
141
+
142
+ def embeds?
143
+ %i[embeds_one embeds_many].include?(macro)
144
+ end
145
+
146
+ private
147
+
148
+ def inverse_of_field
149
+ association.respond_to?(:inverse_of_field) && association.inverse_of_field
150
+ end
151
+
152
+ def cyclic?
153
+ association.respond_to?(:cyclic?) ? association.cyclic? : association.cyclic
154
+ end
155
+
156
+ delegate :nested_attributes_options, to: :model, prefix: false
157
+ delegate :polymorphic_parents, to: RailsAdmin::AbstractModel
158
+ end
159
+ end
160
+ end
161
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'mongoid'
4
+
5
+ module RailsAdmin
6
+ module Adapters
7
+ module Mongoid
8
+ class Bson
9
+ OBJECT_ID =
10
+ if defined?(Moped::BSON)
11
+ Moped::BSON::ObjectId
12
+ elsif defined?(BSON::ObjectId)
13
+ BSON::ObjectId
14
+ end
15
+
16
+ class << self
17
+ def parse_object_id(value)
18
+ OBJECT_ID.from_string(value)
19
+ rescue StandardError => e
20
+ raise e if %w[
21
+ Moped::Errors::InvalidObjectId
22
+ BSON::ObjectId::Invalid
23
+ BSON::InvalidObjectId
24
+ BSON::Error::InvalidObjectId
25
+ ].exclude?(e.class.to_s)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsAdmin
4
+ module Adapters
5
+ module Mongoid
6
+ module Extension
7
+ extend ActiveSupport::Concern
8
+
9
+ included do
10
+ class_attribute :nested_attributes_options
11
+ self.nested_attributes_options = {}
12
+ class << self
13
+ def rails_admin(&block)
14
+ RailsAdmin.config(self, &block)
15
+ end
16
+
17
+ alias_method :accepts_nested_attributes_for_without_rails_admin, :accepts_nested_attributes_for
18
+ alias_method :accepts_nested_attributes_for, :accepts_nested_attributes_for_with_rails_admin
19
+ end
20
+ end
21
+
22
+ def rails_admin_default_object_label_method
23
+ new_record? ? "new #{self.class}" : "#{self.class} ##{id}"
24
+ end
25
+
26
+ def safe_send(value)
27
+ if attributes.detect { |k, _v| k.to_s == value.to_s }
28
+ read_attribute(value)
29
+ else
30
+ send(value)
31
+ end
32
+ end
33
+
34
+ module ClassMethods
35
+ # Mongoid accepts_nested_attributes_for does not store options in accessible scope,
36
+ # so we intercept the call and store it in instance variable which can be accessed from outside
37
+ def accepts_nested_attributes_for_with_rails_admin(*args)
38
+ options = args.extract_options!
39
+ args.each do |arg|
40
+ nested_attributes_options[arg.to_sym] = options.reverse_merge(allow_destroy: false, update_only: false)
41
+ end
42
+ args << options
43
+ accepts_nested_attributes_for_without_rails_admin(*args)
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsAdmin
4
+ module Adapters
5
+ module Mongoid
6
+ module ObjectExtension
7
+ def self.extended(object)
8
+ object.associations.each do |name, association|
9
+ association = Association.new(association, object.class)
10
+ case association.macro
11
+ when :has_many
12
+ unless association.autosave?
13
+ object.singleton_class.after_create do
14
+ send(name).each(&:save)
15
+ end
16
+ end
17
+ when :has_one
18
+ unless association.autosave?
19
+ object.singleton_class.after_create do
20
+ send(name)&.save
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,101 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsAdmin
4
+ module Adapters
5
+ module Mongoid
6
+ class Property
7
+ STRING_TYPE_COLUMN_NAMES = %i[name title subject].freeze
8
+ attr_reader :property, :model
9
+
10
+ def initialize(property, model)
11
+ @property = property
12
+ @model = model
13
+ end
14
+
15
+ def name
16
+ (property.options[:as] || property.name).to_sym
17
+ end
18
+
19
+ def pretty_name
20
+ (property.options[:as] || property.name).to_s.tr('_', ' ').capitalize
21
+ end
22
+
23
+ def type
24
+ case property.type.to_s
25
+ when 'Array', 'Hash', 'Money'
26
+ :serialized
27
+ when 'BigDecimal'
28
+ :decimal
29
+ when 'Boolean', 'Mongoid::Boolean'
30
+ :boolean
31
+ when 'BSON::ObjectId', 'Moped::BSON::ObjectId'
32
+ :bson_object_id
33
+ when 'Date'
34
+ :date
35
+ when 'ActiveSupport::TimeWithZone', 'DateTime', 'Time'
36
+ :datetime
37
+ when 'Float'
38
+ :float
39
+ when 'Integer'
40
+ :integer
41
+ when 'Object'
42
+ object_field_type
43
+ when 'String'
44
+ string_field_type
45
+ when 'Symbol'
46
+ :string
47
+ else
48
+ :string
49
+ end
50
+ end
51
+
52
+ def length
53
+ (length_validation_lookup || 255) if type == :string
54
+ end
55
+
56
+ def nullable?
57
+ true
58
+ end
59
+
60
+ def serial?
61
+ name == :_id
62
+ end
63
+
64
+ def association?
65
+ false
66
+ end
67
+
68
+ def read_only?
69
+ model.readonly_attributes.include? property.name.to_s
70
+ end
71
+
72
+ private
73
+
74
+ def object_field_type
75
+ association = Association.new model.relations.values.detect { |r| r.try(:foreign_key).try(:to_sym) == name }, model
76
+ if %i[belongs_to referenced_in embedded_in].include?(association.macro)
77
+ :bson_object_id
78
+ else
79
+ :string
80
+ end
81
+ end
82
+
83
+ def string_field_type
84
+ if ((length = length_validation_lookup) && length < 256) || STRING_TYPE_COLUMN_NAMES.include?(name)
85
+ :string
86
+ else
87
+ :text
88
+ end
89
+ end
90
+
91
+ def length_validation_lookup
92
+ shortest = model.validators.select { |validator| validator.respond_to?(:attributes) && validator.attributes.include?(name.to_sym) && validator.kind == :length && validator.options[:maximum] }.min do |a, b|
93
+ a.options[:maximum] <=> b.options[:maximum]
94
+ end
95
+
96
+ shortest && shortest.options[:maximum]
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,312 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'mongoid'
4
+ require 'rails_admin/config/sections/list'
5
+ require 'rails_admin/adapters/mongoid/association'
6
+ require 'rails_admin/adapters/mongoid/object_extension'
7
+ require 'rails_admin/adapters/mongoid/property'
8
+ require 'rails_admin/adapters/mongoid/bson'
9
+
10
+ module RailsAdmin
11
+ module Adapters
12
+ module Mongoid
13
+ DISABLED_COLUMN_TYPES = %w[Range Moped::BSON::Binary BSON::Binary Mongoid::Geospatial::Point].freeze
14
+
15
+ def parse_object_id(value)
16
+ Bson.parse_object_id(value)
17
+ end
18
+
19
+ def new(params = {})
20
+ model.new(params).extend(ObjectExtension)
21
+ end
22
+
23
+ def get(id, scope = scoped)
24
+ object = scope.find(id)
25
+ return nil unless object
26
+
27
+ object.extend(ObjectExtension)
28
+ rescue StandardError => e
29
+ raise e if %w[
30
+ Mongoid::Errors::DocumentNotFound
31
+ Mongoid::Errors::InvalidFind
32
+ Moped::Errors::InvalidObjectId
33
+ BSON::InvalidObjectId
34
+ BSON::Error::InvalidObjectId
35
+ ].exclude?(e.class.to_s)
36
+ end
37
+
38
+ def scoped
39
+ model.scoped
40
+ end
41
+
42
+ def first(options = {}, scope = nil)
43
+ all(options, scope).first
44
+ end
45
+
46
+ def all(options = {}, scope = nil)
47
+ scope ||= scoped
48
+ scope = scope.includes(*options[:include]) if options[:include]
49
+ scope = scope.limit(options[:limit]) if options[:limit]
50
+ scope = scope.any_in(_id: options[:bulk_ids]) if options[:bulk_ids]
51
+ scope = query_scope(scope, options[:query]) if options[:query]
52
+ scope = filter_scope(scope, options[:filters]) if options[:filters]
53
+ scope = scope.send(Kaminari.config.page_method_name, options[:page]).per(options[:per]) if options[:page] && options[:per]
54
+ scope = sort_by(options, scope) if options[:sort]
55
+ scope
56
+ rescue NoMethodError => e
57
+ if /page/.match?(e.message)
58
+ e = e.exception <<~ERROR
59
+ #{e.message}
60
+ If you don't have kaminari-mongoid installed, add `gem 'kaminari-mongoid'` to your Gemfile.
61
+ ERROR
62
+ end
63
+ raise e
64
+ end
65
+
66
+ def count(options = {}, scope = nil)
67
+ all(options.merge(limit: false, page: false), scope).count
68
+ end
69
+
70
+ def destroy(objects)
71
+ Array.wrap(objects).each(&:destroy)
72
+ end
73
+
74
+ def primary_key
75
+ '_id'
76
+ end
77
+
78
+ def associations
79
+ model.relations.values.collect do |association|
80
+ Association.new(association, model)
81
+ end
82
+ end
83
+
84
+ def properties
85
+ fields = model.fields.reject { |_name, field| DISABLED_COLUMN_TYPES.include?(field.type.to_s) }
86
+ fields.collect { |_name, field| Property.new(field, model) }
87
+ end
88
+
89
+ def base_class
90
+ klass = model
91
+ klass = klass.superclass while klass.hereditary?
92
+ klass
93
+ end
94
+
95
+ def table_name
96
+ model.collection_name.to_s
97
+ end
98
+
99
+ def encoding
100
+ Encoding::UTF_8
101
+ end
102
+
103
+ def embedded?
104
+ associations.detect { |a| a.macro == :embedded_in }
105
+ end
106
+
107
+ def cyclic?
108
+ model.cyclic?
109
+ end
110
+
111
+ def adapter_supports_joins?
112
+ false
113
+ end
114
+
115
+ private
116
+
117
+ def build_statement(column, type, value, operator)
118
+ StatementBuilder.new(column, type, value, operator).to_statement
119
+ end
120
+
121
+ def make_field_conditions(field, value, operator)
122
+ conditions_per_collection = {}
123
+ field.searchable_columns.each do |column_infos|
124
+ collection_name, column_name = parse_collection_name(column_infos[:column])
125
+ statement = build_statement(column_name, column_infos[:type], value, operator)
126
+ next unless statement
127
+
128
+ conditions_per_collection[collection_name] ||= []
129
+ conditions_per_collection[collection_name] << statement
130
+ end
131
+ conditions_per_collection
132
+ end
133
+
134
+ def query_scope(scope, query, fields = config.list.fields.select(&:queryable?))
135
+ if config.list.search_by
136
+ scope.send(config.list.search_by, query)
137
+ else
138
+ statements = []
139
+
140
+ fields.each do |field|
141
+ value = parse_field_value(field, query)
142
+ conditions_per_collection = make_field_conditions(field, value, field.search_operator)
143
+ statements.concat make_condition_for_current_collection(field, conditions_per_collection)
144
+ end
145
+
146
+ scope.where(statements.any? ? {'$or' => statements} : {})
147
+ end
148
+ end
149
+
150
+ # filters example => {"string_field"=>{"0055"=>{"o"=>"like", "v"=>"test_value"}}, ...}
151
+ # "0055" is the filter index, no use here. o is the operator, v the value
152
+ def filter_scope(scope, filters, fields = config.list.fields.select(&:filterable?))
153
+ statements = []
154
+
155
+ filters.each_pair do |field_name, filters_dump|
156
+ filters_dump.each_value do |filter_dump|
157
+ field = fields.detect { |f| f.name.to_s == field_name }
158
+ next unless field
159
+
160
+ value = parse_field_value(field, filter_dump[:v])
161
+ conditions_per_collection = make_field_conditions(field, value, (filter_dump[:o] || 'default'))
162
+ field_statements = make_condition_for_current_collection(field, conditions_per_collection)
163
+ if field_statements.many?
164
+ statements << {'$or' => field_statements}
165
+ elsif field_statements.any?
166
+ statements << field_statements.first
167
+ end
168
+ end
169
+ end
170
+
171
+ scope.where(statements.any? ? {'$and' => statements} : {})
172
+ end
173
+
174
+ def parse_collection_name(column)
175
+ collection_name, column_name = column.split('.')
176
+ if associations.detect { |a| a.name == collection_name.to_sym }.try(:embeds?)
177
+ [table_name, column]
178
+ else
179
+ [collection_name, column_name]
180
+ end
181
+ end
182
+
183
+ def make_condition_for_current_collection(target_field, conditions_per_collection)
184
+ result = []
185
+ conditions_per_collection.each do |collection_name, conditions|
186
+ if collection_name == table_name
187
+ # conditions referring current model column are passed directly
188
+ result.concat conditions
189
+ else
190
+ # otherwise, collect ids of documents that satisfy search condition
191
+ result.concat perform_search_on_associated_collection(target_field.name, conditions)
192
+ end
193
+ end
194
+ result
195
+ end
196
+
197
+ def perform_search_on_associated_collection(field_name, conditions)
198
+ target_association = associations.detect { |a| a.name == field_name }
199
+ return [] unless target_association
200
+
201
+ model = target_association.klass
202
+ case target_association.type
203
+ when :belongs_to, :has_and_belongs_to_many
204
+ [{target_association.foreign_key.to_s => {'$in' => model.where('$or' => conditions).all.collect { |r| r.send(target_association.primary_key) }}}]
205
+ when :has_many, :has_one
206
+ [{target_association.primary_key.to_s => {'$in' => model.where('$or' => conditions).all.collect { |r| r.send(target_association.foreign_key) }}}]
207
+ end
208
+ end
209
+
210
+ def sort_by(options, scope)
211
+ return scope unless options[:sort]
212
+
213
+ case options[:sort]
214
+ when String
215
+ field_name, collection_name = options[:sort].split('.').reverse
216
+ raise 'sorting by associated model column is not supported in Non-Relational databases' if collection_name && collection_name != table_name
217
+ when Symbol
218
+ field_name = options[:sort].to_s
219
+ end
220
+ if options[:sort_reverse]
221
+ scope.asc field_name
222
+ else
223
+ scope.desc field_name
224
+ end
225
+ end
226
+
227
+ class StatementBuilder < RailsAdmin::AbstractModel::StatementBuilder
228
+ protected
229
+
230
+ def unary_operators
231
+ {
232
+ '_blank' => {@column => {'$in' => [nil, '']}},
233
+ '_present' => {@column => {'$nin' => [nil, '']}},
234
+ '_null' => {@column => nil},
235
+ '_not_null' => {@column => {'$ne' => nil}},
236
+ '_empty' => {@column => ''},
237
+ '_not_empty' => {@column => {'$ne' => ''}},
238
+ }
239
+ end
240
+
241
+ private
242
+
243
+ def build_statement_for_type
244
+ case @type
245
+ when :boolean then build_statement_for_boolean
246
+ when :integer, :decimal, :float then build_statement_for_integer_decimal_or_float
247
+ when :string, :text then build_statement_for_string_or_text
248
+ when :enum then build_statement_for_enum
249
+ when :belongs_to_association, :bson_object_id then build_statement_for_belongs_to_association_or_bson_object_id
250
+ end
251
+ end
252
+
253
+ def build_statement_for_boolean
254
+ case @value
255
+ when 'false', 'f', '0'
256
+ {@column => false}
257
+ when 'true', 't', '1'
258
+ {@column => true}
259
+ end
260
+ end
261
+
262
+ def column_for_value(value)
263
+ {@column => value}
264
+ end
265
+
266
+ def build_statement_for_string_or_text
267
+ return if @value.blank?
268
+
269
+ @value =
270
+ case @operator
271
+ when 'not_like'
272
+ Regexp.compile("^((?!#{Regexp.escape(@value)}).)*$", Regexp::IGNORECASE)
273
+ when 'default', 'like'
274
+ Regexp.compile(Regexp.escape(@value), Regexp::IGNORECASE)
275
+ when 'starts_with'
276
+ Regexp.compile("^#{Regexp.escape(@value)}", Regexp::IGNORECASE)
277
+ when 'ends_with'
278
+ Regexp.compile("#{Regexp.escape(@value)}$", Regexp::IGNORECASE)
279
+ when 'is', '='
280
+ @value.to_s
281
+ else
282
+ return
283
+ end
284
+
285
+ {@column => @value}
286
+ end
287
+
288
+ def build_statement_for_enum
289
+ return if @value.blank?
290
+
291
+ {@column => {'$in' => Array.wrap(@value)}}
292
+ end
293
+
294
+ def build_statement_for_belongs_to_association_or_bson_object_id
295
+ {@column => @value} if @value
296
+ end
297
+
298
+ def range_filter(min, max)
299
+ if min && max && min == max
300
+ {@column => min}
301
+ elsif min && max
302
+ {@column => {'$gte' => min, '$lte' => max}}
303
+ elsif min
304
+ {@column => {'$gte' => min}}
305
+ elsif max
306
+ {@column => {'$lte' => max}}
307
+ end
308
+ end
309
+ end
310
+ end
311
+ end
312
+ end