rails_admin 1.4.2 → 3.1.2

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 (542) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +19 -12
  3. data/README.md +46 -50
  4. data/Rakefile +15 -2
  5. data/app/assets/javascripts/rails_admin/application.js.erb +29 -0
  6. data/app/assets/javascripts/rails_admin/custom/ui.js +1 -0
  7. data/app/assets/stylesheets/rails_admin/application.scss.erb +35 -0
  8. data/app/assets/stylesheets/rails_admin/custom/mixins.scss +1 -1
  9. data/app/assets/stylesheets/rails_admin/custom/variables.scss +1 -1
  10. data/app/controllers/rails_admin/application_controller.rb +8 -3
  11. data/app/controllers/rails_admin/main_controller.rb +55 -50
  12. data/app/helpers/rails_admin/application_helper.rb +143 -62
  13. data/app/helpers/rails_admin/form_builder.rb +25 -13
  14. data/app/helpers/rails_admin/main_helper.rb +19 -42
  15. data/app/views/kaminari/ra-twitter-bootstrap/_gap.html.erb +5 -0
  16. data/app/views/kaminari/ra-twitter-bootstrap/_next_page.html.erb +9 -0
  17. data/app/views/kaminari/ra-twitter-bootstrap/_page.html.erb +9 -0
  18. data/app/views/kaminari/ra-twitter-bootstrap/_paginator.html.erb +15 -0
  19. data/app/views/kaminari/ra-twitter-bootstrap/_prev_page.html.erb +9 -0
  20. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_next_page.html.erb +9 -0
  21. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_paginator.html.erb +8 -0
  22. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_prev_page.html.erb +9 -0
  23. data/app/views/layouts/rails_admin/_head.html.erb +29 -0
  24. data/app/views/layouts/rails_admin/_navigation.html.erb +17 -0
  25. data/app/views/layouts/rails_admin/_secondary_navigation.html.erb +26 -0
  26. data/app/views/layouts/rails_admin/_sidebar_navigation.html.erb +5 -0
  27. data/app/views/layouts/rails_admin/application.html.erb +27 -0
  28. data/app/views/layouts/rails_admin/content.html.erb +22 -0
  29. data/app/views/layouts/rails_admin/modal.js.erb +7 -0
  30. data/app/views/rails_admin/main/_dashboard_history.html.erb +45 -0
  31. data/app/views/rails_admin/main/_delete_notice.html.erb +35 -0
  32. data/app/views/rails_admin/main/_form_action_text.html.erb +8 -0
  33. data/app/views/rails_admin/main/_form_boolean.html.erb +14 -0
  34. data/app/views/rails_admin/main/{_form_ck_editor.html.haml → _form_ck_editor.html.erb} +3 -3
  35. data/app/views/rails_admin/main/_form_code_mirror.html.erb +9 -0
  36. data/app/views/rails_admin/main/_form_colorpicker.html.erb +5 -0
  37. data/app/views/rails_admin/main/_form_datetime.html.erb +10 -0
  38. data/app/views/rails_admin/main/_form_enumeration.html.erb +25 -0
  39. data/app/views/rails_admin/main/_form_field.html.erb +1 -0
  40. data/app/views/rails_admin/main/_form_file_upload.html.erb +17 -0
  41. data/app/views/rails_admin/main/_form_filtering_multiselect.html.erb +49 -0
  42. data/app/views/rails_admin/main/_form_filtering_select.html.erb +33 -0
  43. data/app/views/rails_admin/main/_form_froala.html.erb +8 -0
  44. data/app/views/rails_admin/main/_form_multiple_file_upload.html.erb +20 -0
  45. data/app/views/rails_admin/main/_form_nested_many.html.erb +21 -0
  46. data/app/views/rails_admin/main/_form_nested_one.html.erb +21 -0
  47. data/app/views/rails_admin/main/_form_polymorphic_association.html.erb +32 -0
  48. data/app/views/rails_admin/main/_form_simple_mde.html.erb +8 -0
  49. data/app/views/rails_admin/main/_form_text.html.erb +1 -0
  50. data/app/views/rails_admin/main/_form_wysihtml5.html.erb +8 -0
  51. data/app/views/rails_admin/main/_submit_buttons.html.erb +25 -0
  52. data/app/views/rails_admin/main/bulk_delete.html.erb +19 -0
  53. data/app/views/rails_admin/main/dashboard.html.erb +64 -0
  54. data/app/views/rails_admin/main/delete.html.erb +21 -0
  55. data/app/views/rails_admin/main/edit.html.erb +3 -0
  56. data/app/views/rails_admin/main/export.html.erb +149 -0
  57. data/app/views/rails_admin/main/history.html.erb +80 -0
  58. data/app/views/rails_admin/main/index.html.erb +184 -0
  59. data/app/views/rails_admin/main/new.html.erb +3 -0
  60. data/app/views/rails_admin/main/show.html.erb +30 -0
  61. data/config/initializers/active_record_extensions.rb +25 -0
  62. data/config/initializers/mongoid_extensions.rb +3 -1
  63. data/config/locales/rails_admin.en.yml +11 -4
  64. data/config/routes.rb +2 -0
  65. data/lib/generators/rails_admin/importmap_formatter.rb +28 -0
  66. data/lib/generators/rails_admin/install_generator.rb +117 -5
  67. data/lib/generators/rails_admin/templates/initializer.erb +4 -3
  68. data/lib/generators/rails_admin/templates/rails_admin.js +1 -0
  69. data/lib/generators/rails_admin/templates/rails_admin.scss.erb +1 -0
  70. data/lib/generators/rails_admin/templates/rails_admin.webpacker.js +2 -0
  71. data/lib/generators/rails_admin/utils.rb +2 -0
  72. data/lib/rails_admin/abstract_model.rb +36 -16
  73. data/lib/rails_admin/adapters/active_record/association.rb +31 -2
  74. data/lib/rails_admin/adapters/active_record/object_extension.rb +31 -0
  75. data/lib/rails_admin/adapters/active_record/property.rb +4 -6
  76. data/lib/rails_admin/adapters/active_record.rb +92 -41
  77. data/lib/rails_admin/adapters/composite_primary_keys/association.rb +45 -0
  78. data/lib/rails_admin/adapters/composite_primary_keys.rb +40 -0
  79. data/lib/rails_admin/adapters/mongoid/association.rb +52 -13
  80. data/lib/rails_admin/adapters/mongoid/bson.rb +6 -5
  81. data/lib/rails_admin/adapters/mongoid/extension.rb +2 -0
  82. data/lib/rails_admin/adapters/mongoid/object_extension.rb +34 -0
  83. data/lib/rails_admin/adapters/mongoid/property.rb +7 -5
  84. data/lib/rails_admin/adapters/mongoid.rb +60 -33
  85. data/lib/rails_admin/config/actions/base.rb +28 -5
  86. data/lib/rails_admin/config/actions/bulk_delete.rb +4 -2
  87. data/lib/rails_admin/config/actions/dashboard.rb +16 -9
  88. data/lib/rails_admin/config/actions/delete.rb +11 -9
  89. data/lib/rails_admin/config/actions/edit.rb +13 -9
  90. data/lib/rails_admin/config/actions/export.rb +6 -3
  91. data/lib/rails_admin/config/actions/history_index.rb +4 -2
  92. data/lib/rails_admin/config/actions/history_show.rb +4 -2
  93. data/lib/rails_admin/config/actions/index.rb +12 -11
  94. data/lib/rails_admin/config/actions/new.rb +18 -12
  95. data/lib/rails_admin/config/actions/show.rb +3 -1
  96. data/lib/rails_admin/config/actions/show_in_app.rb +9 -3
  97. data/lib/rails_admin/config/actions.rb +6 -4
  98. data/lib/rails_admin/config/configurable.rb +25 -14
  99. data/lib/rails_admin/config/const_load_suppressor.rb +78 -0
  100. data/lib/rails_admin/config/fields/association.rb +21 -11
  101. data/lib/rails_admin/config/fields/base.rb +87 -33
  102. data/lib/rails_admin/config/fields/factories/action_text.rb +14 -0
  103. data/lib/rails_admin/config/fields/factories/active_storage.rb +6 -2
  104. data/lib/rails_admin/config/fields/factories/association.rb +12 -13
  105. data/lib/rails_admin/config/fields/factories/carrierwave.rb +6 -2
  106. data/lib/rails_admin/config/fields/factories/devise.rb +6 -2
  107. data/lib/rails_admin/config/fields/factories/dragonfly.rb +7 -3
  108. data/lib/rails_admin/config/fields/factories/enum.rb +2 -0
  109. data/lib/rails_admin/config/fields/factories/paperclip.rb +6 -2
  110. data/lib/rails_admin/config/fields/factories/password.rb +2 -0
  111. data/lib/rails_admin/config/fields/factories/shrine.rb +29 -0
  112. data/lib/rails_admin/config/fields/group.rb +3 -2
  113. data/lib/rails_admin/config/fields/types/action_text.rb +36 -0
  114. data/lib/rails_admin/config/fields/types/active_record_enum.rb +7 -19
  115. data/lib/rails_admin/config/fields/types/active_storage.rb +24 -3
  116. data/lib/rails_admin/config/fields/types/all.rb +6 -1
  117. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +9 -11
  118. data/lib/rails_admin/config/fields/types/boolean.rb +38 -8
  119. data/lib/rails_admin/config/fields/types/bson_object_id.rb +2 -0
  120. data/lib/rails_admin/config/fields/types/carrierwave.rb +3 -0
  121. data/lib/rails_admin/config/fields/types/citext.rb +15 -0
  122. data/lib/rails_admin/config/fields/types/ck_editor.rb +9 -7
  123. data/lib/rails_admin/config/fields/types/code_mirror.rb +12 -12
  124. data/lib/rails_admin/config/fields/types/color.rb +10 -4
  125. data/lib/rails_admin/config/fields/types/composite_keys_belongs_to_association.rb +31 -0
  126. data/lib/rails_admin/config/fields/types/date.rb +12 -6
  127. data/lib/rails_admin/config/fields/types/datetime.rb +36 -21
  128. data/lib/rails_admin/config/fields/types/decimal.rb +11 -2
  129. data/lib/rails_admin/config/fields/types/dragonfly.rb +5 -1
  130. data/lib/rails_admin/config/fields/types/enum.rb +16 -3
  131. data/lib/rails_admin/config/fields/types/file_upload.rb +15 -4
  132. data/lib/rails_admin/config/fields/types/float.rb +11 -2
  133. data/lib/rails_admin/config/fields/types/froala.rb +11 -11
  134. data/lib/rails_admin/config/fields/types/has_and_belongs_to_many_association.rb +2 -0
  135. data/lib/rails_admin/config/fields/types/has_many_association.rb +7 -5
  136. data/lib/rails_admin/config/fields/types/has_one_association.rb +12 -14
  137. data/lib/rails_admin/config/fields/types/hidden.rb +4 -2
  138. data/lib/rails_admin/config/fields/types/inet.rb +2 -0
  139. data/lib/rails_admin/config/fields/types/integer.rb +4 -6
  140. data/lib/rails_admin/config/fields/types/json.rb +2 -0
  141. data/lib/rails_admin/config/fields/types/multiple_active_storage.rb +31 -3
  142. data/lib/rails_admin/config/fields/types/multiple_carrierwave.rb +18 -3
  143. data/lib/rails_admin/config/fields/types/multiple_file_upload.rb +23 -5
  144. data/lib/rails_admin/config/fields/types/numeric.rb +24 -0
  145. data/lib/rails_admin/config/fields/types/paperclip.rb +2 -0
  146. data/lib/rails_admin/config/fields/types/password.rb +7 -1
  147. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +12 -2
  148. data/lib/rails_admin/config/fields/types/serialized.rb +2 -0
  149. data/lib/rails_admin/config/fields/types/shrine.rb +56 -0
  150. data/lib/rails_admin/config/fields/types/simple_mde.rb +10 -5
  151. data/lib/rails_admin/config/fields/types/string.rb +5 -3
  152. data/lib/rails_admin/config/fields/types/string_like.rb +25 -0
  153. data/lib/rails_admin/config/fields/types/text.rb +4 -20
  154. data/lib/rails_admin/config/fields/types/time.rb +16 -4
  155. data/lib/rails_admin/config/fields/types/timestamp.rb +2 -4
  156. data/lib/rails_admin/config/fields/types/uuid.rb +2 -0
  157. data/lib/rails_admin/config/fields/types/wysihtml5.rb +16 -10
  158. data/lib/rails_admin/config/fields/types.rb +3 -1
  159. data/lib/rails_admin/config/fields.rb +8 -3
  160. data/lib/rails_admin/config/groupable.rb +2 -0
  161. data/lib/rails_admin/config/has_description.rb +2 -0
  162. data/lib/rails_admin/config/has_fields.rb +12 -7
  163. data/lib/rails_admin/config/has_groups.rb +3 -1
  164. data/lib/rails_admin/config/hideable.rb +3 -1
  165. data/lib/rails_admin/config/inspectable.rb +3 -3
  166. data/lib/rails_admin/config/lazy_model.rb +16 -10
  167. data/lib/rails_admin/config/model.rb +27 -14
  168. data/lib/rails_admin/config/proxyable/proxy.rb +9 -9
  169. data/lib/rails_admin/config/proxyable.rb +15 -1
  170. data/lib/rails_admin/config/sections/base.rb +4 -3
  171. data/lib/rails_admin/config/sections/create.rb +2 -0
  172. data/lib/rails_admin/config/sections/edit.rb +2 -0
  173. data/lib/rails_admin/config/sections/export.rb +2 -0
  174. data/lib/rails_admin/config/sections/list.rb +22 -4
  175. data/lib/rails_admin/config/sections/modal.rb +2 -0
  176. data/lib/rails_admin/config/sections/nested.rb +2 -0
  177. data/lib/rails_admin/config/sections/show.rb +2 -0
  178. data/lib/rails_admin/config/sections/update.rb +2 -0
  179. data/lib/rails_admin/config/sections.rb +3 -1
  180. data/lib/rails_admin/config.rb +85 -50
  181. data/lib/rails_admin/engine.rb +48 -35
  182. data/lib/rails_admin/extension.rb +18 -12
  183. data/lib/rails_admin/extensions/cancancan/authorization_adapter.rb +64 -21
  184. data/lib/rails_admin/extensions/cancancan.rb +2 -0
  185. data/lib/rails_admin/extensions/controller_extension.rb +8 -0
  186. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +88 -42
  187. data/lib/rails_admin/extensions/paper_trail.rb +2 -0
  188. data/lib/rails_admin/extensions/pundit/authorization_adapter.rb +8 -9
  189. data/lib/rails_admin/extensions/pundit.rb +2 -0
  190. data/lib/rails_admin/support/csv_converter.rb +20 -15
  191. data/lib/rails_admin/support/datetime.rb +50 -85
  192. data/lib/rails_admin/support/es_module_processor.rb +23 -0
  193. data/lib/rails_admin/support/hash_helper.rb +8 -5
  194. data/lib/rails_admin/version.rb +41 -2
  195. data/lib/rails_admin.rb +7 -6
  196. data/lib/tasks/rails_admin.rake +19 -8
  197. data/package.json +30 -0
  198. data/src/rails_admin/base.js +29 -0
  199. data/src/rails_admin/filter-box.js +360 -0
  200. data/src/rails_admin/filtering-multiselect.js +389 -0
  201. data/src/rails_admin/filtering-select.js +308 -0
  202. data/src/rails_admin/i18n.js +18 -0
  203. data/src/rails_admin/jquery.js +3 -0
  204. data/src/rails_admin/nested-form-hooks.js +110 -0
  205. data/src/rails_admin/remote-form.js +193 -0
  206. data/src/rails_admin/sidescroll.js +20 -0
  207. data/src/rails_admin/styles/base/theming.scss +342 -0
  208. data/src/rails_admin/styles/base/variables.scss +3 -0
  209. data/src/rails_admin/styles/base.scss +27 -0
  210. data/src/rails_admin/styles/filtering-multiselect.scss +53 -0
  211. data/src/rails_admin/styles/filtering-select.scss +70 -0
  212. data/src/rails_admin/styles/widgets.scss +26 -0
  213. data/src/rails_admin/ui.js +176 -0
  214. data/src/rails_admin/vendor/jquery_nested_form.js +122 -0
  215. data/src/rails_admin/widgets.js +507 -0
  216. data/vendor/assets/fonts/rails_admin/fa-solid-900.ttf +0 -0
  217. data/vendor/assets/fonts/rails_admin/fa-solid-900.woff2 +0 -0
  218. data/vendor/assets/javascripts/rails_admin/bootstrap.js +5046 -0
  219. data/vendor/assets/javascripts/rails_admin/flatpickr-with-locales.js +11246 -0
  220. data/vendor/assets/javascripts/rails_admin/jquery-ui/data.js +41 -0
  221. data/vendor/assets/javascripts/rails_admin/jquery-ui/effect.js +1637 -0
  222. data/vendor/assets/javascripts/rails_admin/jquery-ui/ie.js +17 -0
  223. data/vendor/assets/javascripts/rails_admin/jquery-ui/keycode.js +47 -0
  224. data/vendor/assets/javascripts/rails_admin/jquery-ui/position.js +500 -0
  225. data/vendor/assets/javascripts/rails_admin/jquery-ui/safe-active-element.js +42 -0
  226. data/vendor/assets/javascripts/rails_admin/jquery-ui/scroll-parent.js +47 -0
  227. data/vendor/assets/javascripts/rails_admin/jquery-ui/unique-id.js +51 -0
  228. data/vendor/assets/javascripts/rails_admin/jquery-ui/version.js +17 -0
  229. data/vendor/assets/javascripts/rails_admin/jquery-ui/widget.js +735 -0
  230. data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/autocomplete.js +689 -0
  231. data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/menu.js +680 -0
  232. data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/mouse.js +230 -0
  233. data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/sortable.js +1561 -0
  234. data/vendor/assets/javascripts/rails_admin/jquery3.js +10881 -0
  235. data/vendor/assets/javascripts/rails_admin/popper.js +1974 -0
  236. data/vendor/assets/stylesheets/rails_admin/bootstrap/_accordion.scss +118 -0
  237. data/vendor/assets/stylesheets/rails_admin/bootstrap/_alert.scss +57 -0
  238. data/vendor/assets/stylesheets/rails_admin/bootstrap/_badge.scss +29 -0
  239. data/vendor/assets/stylesheets/rails_admin/bootstrap/_breadcrumb.scss +28 -0
  240. data/vendor/assets/stylesheets/rails_admin/bootstrap/_button-group.scss +139 -0
  241. data/vendor/assets/stylesheets/rails_admin/bootstrap/_buttons.scss +111 -0
  242. data/vendor/assets/stylesheets/rails_admin/bootstrap/_card.scss +216 -0
  243. data/vendor/assets/stylesheets/rails_admin/bootstrap/_carousel.scss +229 -0
  244. data/vendor/assets/stylesheets/rails_admin/bootstrap/_close.scss +40 -0
  245. data/vendor/assets/stylesheets/rails_admin/bootstrap/_containers.scss +41 -0
  246. data/vendor/assets/stylesheets/rails_admin/bootstrap/_dropdown.scss +240 -0
  247. data/vendor/assets/stylesheets/rails_admin/bootstrap/_forms.scss +9 -0
  248. data/vendor/assets/stylesheets/rails_admin/bootstrap/_functions.scss +302 -0
  249. data/vendor/assets/stylesheets/rails_admin/bootstrap/_grid.scss +33 -0
  250. data/vendor/assets/stylesheets/rails_admin/bootstrap/_helpers.scss +9 -0
  251. data/vendor/assets/stylesheets/rails_admin/bootstrap/_images.scss +42 -0
  252. data/vendor/assets/stylesheets/rails_admin/bootstrap/_list-group.scss +174 -0
  253. data/vendor/assets/stylesheets/rails_admin/bootstrap/_mixins.scss +43 -0
  254. data/vendor/assets/stylesheets/rails_admin/bootstrap/_modal.scss +209 -0
  255. data/vendor/assets/stylesheets/rails_admin/bootstrap/_nav.scss +139 -0
  256. data/vendor/assets/stylesheets/rails_admin/bootstrap/_navbar.scss +335 -0
  257. data/vendor/assets/stylesheets/rails_admin/bootstrap/_offcanvas.scss +83 -0
  258. data/vendor/assets/stylesheets/rails_admin/bootstrap/_pagination.scss +64 -0
  259. data/vendor/assets/stylesheets/rails_admin/bootstrap/_placeholders.scss +51 -0
  260. data/vendor/assets/stylesheets/rails_admin/bootstrap/_popover.scss +158 -0
  261. data/vendor/assets/stylesheets/rails_admin/bootstrap/_progress.scss +48 -0
  262. data/vendor/assets/stylesheets/rails_admin/bootstrap/_reboot.scss +625 -0
  263. data/vendor/assets/stylesheets/rails_admin/bootstrap/_root.scss +54 -0
  264. data/vendor/assets/stylesheets/rails_admin/bootstrap/_spinners.scss +69 -0
  265. data/vendor/assets/stylesheets/rails_admin/bootstrap/_tables.scss +155 -0
  266. data/vendor/assets/stylesheets/rails_admin/bootstrap/_toasts.scss +51 -0
  267. data/vendor/assets/stylesheets/rails_admin/bootstrap/_tooltip.scss +115 -0
  268. data/vendor/assets/stylesheets/rails_admin/bootstrap/_transitions.scss +27 -0
  269. data/vendor/assets/stylesheets/rails_admin/bootstrap/_type.scss +104 -0
  270. data/vendor/assets/stylesheets/rails_admin/bootstrap/_utilities.scss +630 -0
  271. data/vendor/assets/stylesheets/rails_admin/bootstrap/_variables.scss +1641 -0
  272. data/vendor/assets/stylesheets/rails_admin/bootstrap/bootstrap.scss +53 -0
  273. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_floating-labels.scss +63 -0
  274. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-check.scss +152 -0
  275. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-control.scss +219 -0
  276. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-range.scss +91 -0
  277. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-select.scss +72 -0
  278. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-text.scss +11 -0
  279. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_input-group.scss +121 -0
  280. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_labels.scss +36 -0
  281. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_validation.scss +12 -0
  282. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_clearfix.scss +3 -0
  283. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_colored-links.scss +12 -0
  284. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_position.scss +30 -0
  285. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_ratio.scss +26 -0
  286. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_stacks.scss +15 -0
  287. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_stretched-link.scss +15 -0
  288. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_text-truncation.scss +7 -0
  289. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_visually-hidden.scss +8 -0
  290. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_vr.scss +8 -0
  291. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_alert.scss +11 -0
  292. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_backdrop.scss +14 -0
  293. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_border-radius.scss +78 -0
  294. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_box-shadow.scss +18 -0
  295. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_breakpoints.scss +127 -0
  296. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_buttons.scss +133 -0
  297. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_caret.scss +64 -0
  298. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_clearfix.scss +9 -0
  299. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_color-scheme.scss +7 -0
  300. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_container.scss +9 -0
  301. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_deprecate.scss +10 -0
  302. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_forms.scss +144 -0
  303. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_gradients.scss +47 -0
  304. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_grid.scss +151 -0
  305. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_image.scss +16 -0
  306. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_list-group.scss +24 -0
  307. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_lists.scss +7 -0
  308. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_pagination.scss +31 -0
  309. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_reset-text.scss +17 -0
  310. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_table-variants.scss +21 -0
  311. data/{app/assets/stylesheets/rails_admin/bootstrap/mixins/_text-overflow.scss → vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_text-truncate.scss} +2 -2
  312. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_transition.scss +26 -0
  313. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_utilities.scss +89 -0
  314. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_visually-hidden.scss +29 -0
  315. data/vendor/assets/stylesheets/rails_admin/bootstrap/utilities/_api.scss +47 -0
  316. data/vendor/assets/stylesheets/rails_admin/bootstrap/vendor/_rfs.scss +354 -0
  317. data/vendor/assets/stylesheets/rails_admin/flatpickr.css +791 -0
  318. data/vendor/assets/stylesheets/rails_admin/font-awesome.scss +6351 -0
  319. metadata +218 -374
  320. data/app/assets/images/rails_admin/aristo/images/bg_fallback.png +0 -0
  321. data/app/assets/images/rails_admin/aristo/images/icon_sprite.png +0 -0
  322. data/app/assets/images/rails_admin/aristo/images/progress_bar.gif +0 -0
  323. data/app/assets/images/rails_admin/aristo/images/slider_handles.png +0 -0
  324. data/app/assets/images/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
  325. data/app/assets/images/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
  326. data/app/assets/images/rails_admin/bootstrap/glyphicons-halflings-white.png +0 -0
  327. data/app/assets/images/rails_admin/bootstrap/glyphicons-halflings.png +0 -0
  328. data/app/assets/images/rails_admin/bullet_black.png +0 -0
  329. data/app/assets/images/rails_admin/bullet_white.png +0 -0
  330. data/app/assets/images/rails_admin/calendar.png +0 -0
  331. data/app/assets/images/rails_admin/clock.png +0 -0
  332. data/app/assets/images/rails_admin/colorpicker/colorpicker_background.png +0 -0
  333. data/app/assets/images/rails_admin/colorpicker/colorpicker_hex.png +0 -0
  334. data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_b.png +0 -0
  335. data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_h.png +0 -0
  336. data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_s.png +0 -0
  337. data/app/assets/images/rails_admin/colorpicker/colorpicker_indic.gif +0 -0
  338. data/app/assets/images/rails_admin/colorpicker/colorpicker_overlay.png +0 -0
  339. data/app/assets/images/rails_admin/colorpicker/colorpicker_rgb_b.png +0 -0
  340. data/app/assets/images/rails_admin/colorpicker/colorpicker_rgb_g.png +0 -0
  341. data/app/assets/images/rails_admin/colorpicker/colorpicker_rgb_r.png +0 -0
  342. data/app/assets/images/rails_admin/colorpicker/colorpicker_select.gif +0 -0
  343. data/app/assets/images/rails_admin/colorpicker/colorpicker_submit.png +0 -0
  344. data/app/assets/images/rails_admin/colorpicker/custom_background.png +0 -0
  345. data/app/assets/images/rails_admin/colorpicker/custom_hex.png +0 -0
  346. data/app/assets/images/rails_admin/colorpicker/custom_hsb_b.png +0 -0
  347. data/app/assets/images/rails_admin/colorpicker/custom_hsb_h.png +0 -0
  348. data/app/assets/images/rails_admin/colorpicker/custom_hsb_s.png +0 -0
  349. data/app/assets/images/rails_admin/colorpicker/custom_indic.gif +0 -0
  350. data/app/assets/images/rails_admin/colorpicker/custom_rgb_b.png +0 -0
  351. data/app/assets/images/rails_admin/colorpicker/custom_rgb_g.png +0 -0
  352. data/app/assets/images/rails_admin/colorpicker/custom_rgb_r.png +0 -0
  353. data/app/assets/images/rails_admin/colorpicker/custom_submit.png +0 -0
  354. data/app/assets/images/rails_admin/colorpicker/select.png +0 -0
  355. data/app/assets/images/rails_admin/colorpicker/select2.png +0 -0
  356. data/app/assets/images/rails_admin/colorpicker/slider.png +0 -0
  357. data/app/assets/images/rails_admin/logo.png +0 -0
  358. data/app/assets/images/rails_admin/magnifier.png +0 -0
  359. data/app/assets/images/rails_admin/multiselect/icon_sprite.png +0 -0
  360. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-n-dark.png +0 -0
  361. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-n-light.png +0 -0
  362. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-s-dark.png +0 -0
  363. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-s-light.png +0 -0
  364. data/app/assets/javascripts/rails_admin/bootstrap/bootstrap-affix.js +0 -142
  365. data/app/assets/javascripts/rails_admin/bootstrap/bootstrap-alert.js +0 -92
  366. data/app/assets/javascripts/rails_admin/bootstrap/bootstrap-button.js +0 -110
  367. data/app/assets/javascripts/rails_admin/bootstrap/bootstrap-carousel.js +0 -223
  368. data/app/assets/javascripts/rails_admin/bootstrap/bootstrap-collapse.js +0 -170
  369. data/app/assets/javascripts/rails_admin/bootstrap/bootstrap-dropdown.js +0 -151
  370. data/app/assets/javascripts/rails_admin/bootstrap/bootstrap-modal.js +0 -280
  371. data/app/assets/javascripts/rails_admin/bootstrap/bootstrap-popover.js +0 -113
  372. data/app/assets/javascripts/rails_admin/bootstrap/bootstrap-scrollspy.js +0 -170
  373. data/app/assets/javascripts/rails_admin/bootstrap/bootstrap-tab.js +0 -128
  374. data/app/assets/javascripts/rails_admin/bootstrap/bootstrap-tooltip.js +0 -457
  375. data/app/assets/javascripts/rails_admin/bootstrap/bootstrap-transition.js +0 -59
  376. data/app/assets/javascripts/rails_admin/bootstrap/bootstrap-typeahead.js +0 -1782
  377. data/app/assets/javascripts/rails_admin/bootstrap/bootstrap.js +0 -13
  378. data/app/assets/javascripts/rails_admin/custom/ui.coffee +0 -1
  379. data/app/assets/javascripts/rails_admin/jquery-ui.js.erb +0 -8
  380. data/app/assets/javascripts/rails_admin/jquery.colorpicker.js +0 -484
  381. data/app/assets/javascripts/rails_admin/jquery.pjax.js +0 -743
  382. data/app/assets/javascripts/rails_admin/ra.filter-box.js +0 -226
  383. data/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +0 -331
  384. data/app/assets/javascripts/rails_admin/ra.filtering-select.js +0 -292
  385. data/app/assets/javascripts/rails_admin/ra.i18n.coffee +0 -10
  386. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +0 -55
  387. data/app/assets/javascripts/rails_admin/ra.remote-form.js +0 -155
  388. data/app/assets/javascripts/rails_admin/ra.widgets.coffee +0 -350
  389. data/app/assets/javascripts/rails_admin/rails_admin.js +0 -19
  390. data/app/assets/javascripts/rails_admin/ui.coffee +0 -102
  391. data/app/assets/stylesheets/rails_admin/aristo/images/bg_fallback.png +0 -0
  392. data/app/assets/stylesheets/rails_admin/aristo/images/icon_sprite.png +0 -0
  393. data/app/assets/stylesheets/rails_admin/aristo/images/progress_bar.gif +0 -0
  394. data/app/assets/stylesheets/rails_admin/aristo/images/slider_handles.png +0 -0
  395. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
  396. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
  397. data/app/assets/stylesheets/rails_admin/aristo/jquery-ui-1.8.7.custom.scss +0 -733
  398. data/app/assets/stylesheets/rails_admin/base/font-awesome-4-compability.scss +0 -153
  399. data/app/assets/stylesheets/rails_admin/base/theming.scss +0 -341
  400. data/app/assets/stylesheets/rails_admin/base/variables.scss +0 -1
  401. data/app/assets/stylesheets/rails_admin/bootstrap/_alerts.scss +0 -68
  402. data/app/assets/stylesheets/rails_admin/bootstrap/_badges.scss +0 -57
  403. data/app/assets/stylesheets/rails_admin/bootstrap/_breadcrumbs.scss +0 -26
  404. data/app/assets/stylesheets/rails_admin/bootstrap/_button-groups.scss +0 -240
  405. data/app/assets/stylesheets/rails_admin/bootstrap/_buttons.scss +0 -157
  406. data/app/assets/stylesheets/rails_admin/bootstrap/_carousel.scss +0 -243
  407. data/app/assets/stylesheets/rails_admin/bootstrap/_close.scss +0 -35
  408. data/app/assets/stylesheets/rails_admin/bootstrap/_code.scss +0 -68
  409. data/app/assets/stylesheets/rails_admin/bootstrap/_component-animations.scss +0 -35
  410. data/app/assets/stylesheets/rails_admin/bootstrap/_dropdowns.scss +0 -215
  411. data/app/assets/stylesheets/rails_admin/bootstrap/_forms.scss +0 -538
  412. data/app/assets/stylesheets/rails_admin/bootstrap/_glyphicons.scss +0 -237
  413. data/app/assets/stylesheets/rails_admin/bootstrap/_grid.scss +0 -84
  414. data/app/assets/stylesheets/rails_admin/bootstrap/_input-groups.scss +0 -166
  415. data/app/assets/stylesheets/rails_admin/bootstrap/_jumbotron.scss +0 -48
  416. data/app/assets/stylesheets/rails_admin/bootstrap/_labels.scss +0 -66
  417. data/app/assets/stylesheets/rails_admin/bootstrap/_list-group.scss +0 -131
  418. data/app/assets/stylesheets/rails_admin/bootstrap/_media.scss +0 -56
  419. data/app/assets/stylesheets/rails_admin/bootstrap/_mixins.scss +0 -39
  420. data/app/assets/stylesheets/rails_admin/bootstrap/_modals.scss +0 -150
  421. data/app/assets/stylesheets/rails_admin/bootstrap/_navbar.scss +0 -659
  422. data/app/assets/stylesheets/rails_admin/bootstrap/_navs.scss +0 -242
  423. data/app/assets/stylesheets/rails_admin/bootstrap/_normalize.scss +0 -425
  424. data/app/assets/stylesheets/rails_admin/bootstrap/_pager.scss +0 -55
  425. data/app/assets/stylesheets/rails_admin/bootstrap/_pagination.scss +0 -88
  426. data/app/assets/stylesheets/rails_admin/bootstrap/_panels.scss +0 -243
  427. data/app/assets/stylesheets/rails_admin/bootstrap/_popovers.scss +0 -133
  428. data/app/assets/stylesheets/rails_admin/bootstrap/_print.scss +0 -101
  429. data/app/assets/stylesheets/rails_admin/bootstrap/_progress-bars.scss +0 -105
  430. data/app/assets/stylesheets/rails_admin/bootstrap/_responsive-embed.scss +0 -34
  431. data/app/assets/stylesheets/rails_admin/bootstrap/_responsive-utilities.scss +0 -174
  432. data/app/assets/stylesheets/rails_admin/bootstrap/_scaffolding.scss +0 -150
  433. data/app/assets/stylesheets/rails_admin/bootstrap/_tables.scss +0 -233
  434. data/app/assets/stylesheets/rails_admin/bootstrap/_theme.scss +0 -258
  435. data/app/assets/stylesheets/rails_admin/bootstrap/_thumbnails.scss +0 -38
  436. data/app/assets/stylesheets/rails_admin/bootstrap/_tooltip.scss +0 -95
  437. data/app/assets/stylesheets/rails_admin/bootstrap/_type.scss +0 -304
  438. data/app/assets/stylesheets/rails_admin/bootstrap/_utilities.scss +0 -57
  439. data/app/assets/stylesheets/rails_admin/bootstrap/_variables.scss +0 -850
  440. data/app/assets/stylesheets/rails_admin/bootstrap/_wells.scss +0 -29
  441. data/app/assets/stylesheets/rails_admin/bootstrap/bootstrap.scss +0 -50
  442. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_alerts.scss +0 -14
  443. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_background-variant.scss +0 -11
  444. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_border-radius.scss +0 -18
  445. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_buttons.scss +0 -50
  446. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_center-block.scss +0 -7
  447. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_clearfix.scss +0 -22
  448. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_forms.scss +0 -84
  449. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_gradients.scss +0 -58
  450. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_grid-framework.scss +0 -81
  451. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_grid.scss +0 -122
  452. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_hide-text.scss +0 -21
  453. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_image.scss +0 -34
  454. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_labels.scss +0 -12
  455. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_list-group.scss +0 -31
  456. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-divider.scss +0 -10
  457. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-vertical-align.scss +0 -9
  458. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_opacity.scss +0 -8
  459. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_pagination.scss +0 -23
  460. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_panels.scss +0 -24
  461. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_progress-bar.scss +0 -10
  462. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_reset-filter.scss +0 -8
  463. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_responsive-visibility.scss +0 -21
  464. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_size.scss +0 -10
  465. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_tab-focus.scss +0 -9
  466. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_table-row.scss +0 -28
  467. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_text-emphasis.scss +0 -11
  468. data/app/assets/stylesheets/rails_admin/bootstrap/mixins/_vendor-prefixes.scss +0 -219
  469. data/app/assets/stylesheets/rails_admin/jquery.colorpicker.scss +0 -182
  470. data/app/assets/stylesheets/rails_admin/ra.filtering-multiselect.scss +0 -88
  471. data/app/assets/stylesheets/rails_admin/ra.widgets.scss +0 -13
  472. data/app/assets/stylesheets/rails_admin/rails_admin.scss.erb +0 -109
  473. data/app/assets/stylesheets/rails_admin/themes/cerulean/mixins.scss +0 -0
  474. data/app/assets/stylesheets/rails_admin/themes/cerulean/theming.scss +0 -133
  475. data/app/assets/stylesheets/rails_admin/themes/cerulean/variables.scss +0 -857
  476. data/app/assets/stylesheets/rails_admin/themes/default/mixins.scss +0 -8
  477. data/app/assets/stylesheets/rails_admin/themes/default/theming.scss +0 -11
  478. data/app/assets/stylesheets/rails_admin/themes/default/variables.scss +0 -12
  479. data/app/views/kaminari/ra-twitter-bootstrap/_gap.html.haml +0 -2
  480. data/app/views/kaminari/ra-twitter-bootstrap/_next_page.html.haml +0 -4
  481. data/app/views/kaminari/ra-twitter-bootstrap/_page.html.haml +0 -4
  482. data/app/views/kaminari/ra-twitter-bootstrap/_paginator.html.haml +0 -9
  483. data/app/views/kaminari/ra-twitter-bootstrap/_prev_page.html.haml +0 -4
  484. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_next_page.html.haml +0 -4
  485. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_paginator.html.haml +0 -4
  486. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_prev_page.html.haml +0 -4
  487. data/app/views/layouts/rails_admin/_navigation.html.haml +0 -12
  488. data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +0 -10
  489. data/app/views/layouts/rails_admin/_sidebar_navigation.html.haml +0 -2
  490. data/app/views/layouts/rails_admin/application.html.haml +0 -24
  491. data/app/views/layouts/rails_admin/pjax.html.haml +0 -16
  492. data/app/views/rails_admin/main/_dashboard_history.html.haml +0 -21
  493. data/app/views/rails_admin/main/_delete_notice.html.haml +0 -24
  494. data/app/views/rails_admin/main/_form_boolean.html.haml +0 -3
  495. data/app/views/rails_admin/main/_form_code_mirror.html.haml +0 -9
  496. data/app/views/rails_admin/main/_form_colorpicker.html.haml +0 -1
  497. data/app/views/rails_admin/main/_form_datetime.html.haml +0 -5
  498. data/app/views/rails_admin/main/_form_enumeration.html.haml +0 -18
  499. data/app/views/rails_admin/main/_form_field.html.haml +0 -1
  500. data/app/views/rails_admin/main/_form_file_upload.html.haml +0 -17
  501. data/app/views/rails_admin/main/_form_filtering_multiselect.html.haml +0 -48
  502. data/app/views/rails_admin/main/_form_filtering_select.html.haml +0 -37
  503. data/app/views/rails_admin/main/_form_froala.html.haml +0 -8
  504. data/app/views/rails_admin/main/_form_multiple_file_upload.html.haml +0 -14
  505. data/app/views/rails_admin/main/_form_nested_many.html.haml +0 -15
  506. data/app/views/rails_admin/main/_form_nested_one.html.haml +0 -17
  507. data/app/views/rails_admin/main/_form_polymorphic_association.html.haml +0 -11
  508. data/app/views/rails_admin/main/_form_simple_mde.haml +0 -8
  509. data/app/views/rails_admin/main/_form_text.html.haml +0 -1
  510. data/app/views/rails_admin/main/_form_wysihtml5.html.haml +0 -8
  511. data/app/views/rails_admin/main/_submit_buttons.html.haml +0 -16
  512. data/app/views/rails_admin/main/bulk_delete.html.haml +0 -11
  513. data/app/views/rails_admin/main/dashboard.html.haml +0 -35
  514. data/app/views/rails_admin/main/delete.html.haml +0 -18
  515. data/app/views/rails_admin/main/edit.html.haml +0 -2
  516. data/app/views/rails_admin/main/export.html.haml +0 -92
  517. data/app/views/rails_admin/main/history.html.haml +0 -51
  518. data/app/views/rails_admin/main/index.html.haml +0 -122
  519. data/app/views/rails_admin/main/new.html.haml +0 -2
  520. data/app/views/rails_admin/main/show.html.haml +0 -16
  521. data/config/initializers/devise_patch.rb +0 -9
  522. data/config/initializers/haml.rb +0 -5
  523. data/lib/rails_admin/adapters/active_record/abstract_object.rb +0 -32
  524. data/lib/rails_admin/adapters/mongoid/abstract_object.rb +0 -42
  525. data/lib/rails_admin/bootstrap-sass/compass_functions.rb +0 -28
  526. data/lib/rails_admin/bootstrap-sass/sass_functions.rb +0 -18
  527. data/lib/rails_admin/bootstrap-sass.rb +0 -45
  528. data/lib/rails_admin/config/fields/factories/refile.rb +0 -25
  529. data/lib/rails_admin/config/fields/types/refile.rb +0 -27
  530. data/lib/rails_admin/extensions/cancan/authorization_adapter.rb +0 -57
  531. data/lib/rails_admin/extensions/cancan.rb +0 -3
  532. data/lib/rails_admin/extensions/history/auditing_adapter.rb +0 -37
  533. data/lib/rails_admin/extensions/history/history.rb +0 -44
  534. data/lib/rails_admin/extensions/history.rb +0 -3
  535. data/lib/rails_admin/support/i18n.rb +0 -43
  536. data/vendor/assets/javascripts/rails_admin/bootstrap-datetimepicker.js +0 -2444
  537. data/vendor/assets/javascripts/rails_admin/moment-with-locales.js +0 -9977
  538. data/vendor/assets/stylesheets/rails_admin/_bootstrap-datetimepicker.scss +0 -343
  539. data/vendor/assets/stylesheets/rails_admin/bootstrap-datetimepicker-build.scss +0 -16
  540. data/{app/assets/stylesheets/rails_admin → src/rails_admin/styles}/base/README.txt +0 -0
  541. data/{app/assets/stylesheets/rails_admin → src/rails_admin/styles}/base/mixins.scss +0 -0
  542. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_resize.scss +1 -1
@@ -1,66 +1,79 @@
1
- require 'font-awesome-rails'
2
- require 'jquery-rails'
3
- require 'jquery-ui-rails'
1
+ # frozen_string_literal: true
2
+
4
3
  require 'kaminari'
5
4
  require 'nested_form'
6
- require 'rack-pjax'
7
5
  require 'rails'
8
6
  require 'rails_admin'
9
- require 'remotipart'
7
+ require 'rails_admin/version'
8
+ require 'turbo-rails'
10
9
 
11
10
  module RailsAdmin
12
11
  class Engine < Rails::Engine
13
12
  isolate_namespace RailsAdmin
14
13
 
14
+ attr_accessor :importmap
15
+
15
16
  config.action_dispatch.rescue_responses['RailsAdmin::ActionNotAllowed'] = :forbidden
16
17
 
17
- initializer 'RailsAdmin precompile hook', group: :all do |app|
18
- app.config.assets.precompile += %w(
19
- rails_admin/rails_admin.js
20
- rails_admin/rails_admin.css
21
- rails_admin/jquery.colorpicker.js
22
- rails_admin/jquery.colorpicker.css
23
- )
24
- end
18
+ initializer 'RailsAdmin reload config in development' do |app|
19
+ config.initializer_path = app.root.join('config/initializers/rails_admin.rb')
25
20
 
26
- initializer 'RailsAdmin setup middlewares' do |app|
27
- app.config.middleware.use Rack::Pjax
28
- end
21
+ unless Rails.application.config.cache_classes
22
+ ActiveSupport::Reloader.before_class_unload do
23
+ RailsAdmin::Config.reload!
24
+ end
29
25
 
30
- initializer 'RailsAdmin reload config in development' do
31
- if Rails.application.config.cache_classes
32
- if defined?(ActiveSupport::Reloader)
33
- ActiveSupport::Reloader.before_class_unload do
34
- RailsAdmin::Config.reset_all_models
35
- end
36
- # else
37
- # For Rails 4 not implemented
26
+ reloader = app.config.file_watcher.new([config.initializer_path], []) do
27
+ # Do nothing, ActiveSupport::Reloader will trigger class_unload! anyway
38
28
  end
29
+
30
+ app.reloaders << reloader
31
+ app.reloader.to_run do
32
+ reloader.execute_if_updated { require_unload_lock! }
33
+ end
34
+ reloader.execute
39
35
  end
40
36
  end
41
37
 
42
- rake_tasks do
43
- Dir[File.join(File.dirname(__FILE__), '../tasks/*.rake')].each { |f| load f }
38
+ initializer 'RailsAdmin precompile hook', group: :all do |app|
39
+ case RailsAdmin.config.asset_source
40
+ when :sprockets
41
+ app.config.assets.precompile += %w[
42
+ rails_admin/application.js
43
+ rails_admin/application.css
44
+ ]
45
+ app.config.assets.paths << RailsAdmin::Engine.root.join('src')
46
+ require 'rails_admin/support/es_module_processor'
47
+ Sprockets.register_bundle_processor 'application/javascript', RailsAdmin::Support::ESModuleProcessor
48
+ when :importmap
49
+ self.importmap = Importmap::Map.new.draw(app.root.join('config/importmap.rails_admin.rb'))
50
+ end
44
51
  end
45
52
 
46
- # Check for required middlewares, can be missing in Rails API mode
53
+ # Check for required middlewares, users may forget to use them in Rails API mode
47
54
  config.after_initialize do |app|
48
- has_session_store = app.config.middleware.to_a.any? { |m| m.klass.try(:<=, ActionDispatch::Session::AbstractStore) } || ::Rails.version < '5.0'
55
+ has_session_store = app.config.middleware.to_a.any? do |m|
56
+ m.klass.try(:<=, ActionDispatch::Session::AbstractStore) ||
57
+ m.klass.try(:<=, ActionDispatch::Session::AbstractSecureStore) ||
58
+ m.klass.name =~ /^ActionDispatch::Session::/
59
+ end
49
60
  loaded = app.config.middleware.to_a.map(&:name)
50
- required = %w(ActionDispatch::Cookies ActionDispatch::Flash Rack::MethodOverride)
61
+ required = %w[ActionDispatch::Cookies ActionDispatch::Flash Rack::MethodOverride]
51
62
  missing = required - loaded
52
63
  unless missing.empty? && has_session_store
53
64
  configs = missing.map { |m| "config.middleware.use #{m}" }
54
65
  configs << "config.middleware.use #{app.config.session_store.try(:name) || 'ActionDispatch::Session::CookieStore'}, #{app.config.session_options}" unless has_session_store
55
- raise <<-EOM
56
- Required middlewares for RailsAdmin are not added
57
- To fix tihs, add
66
+ raise <<~ERROR
67
+ Required middlewares for RailsAdmin are not added
68
+ To fix this, add
58
69
 
59
- #{configs.join("\n ")}
70
+ #{configs.join("\n ")}
60
71
 
61
- to config/application.rb.
62
- EOM
72
+ to config/application.rb.
73
+ ERROR
63
74
  end
75
+
76
+ RailsAdmin::Version.warn_with_js_version
64
77
  end
65
78
  end
66
79
  end
@@ -1,9 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_admin/extensions/controller_extension'
1
4
 
2
5
  module RailsAdmin
3
- EXTENSIONS = [] # rubocop:disable MutableConstant
4
- AUTHORIZATION_ADAPTERS = {} # rubocop:disable MutableConstant
5
- AUDITING_ADAPTERS = {} # rubocop:disable MutableConstant
6
- CONFIGURATION_ADAPTERS = {} # rubocop:disable MutableConstant
6
+ EXTENSIONS = [] # rubocop:disable Style/MutableConstant
7
+ AUTHORIZATION_ADAPTERS = {} # rubocop:disable Style/MutableConstant
8
+ AUDITING_ADAPTERS = {} # rubocop:disable Style/MutableConstant
9
+ CONFIGURATION_ADAPTERS = {} # rubocop:disable Style/MutableConstant
7
10
 
8
11
  # Extend RailsAdmin
9
12
  #
@@ -14,16 +17,19 @@ module RailsAdmin
14
17
 
15
18
  EXTENSIONS << extension_key
16
19
 
17
- if options[:authorization]
18
- AUTHORIZATION_ADAPTERS[extension_key] = extension_definition::AuthorizationAdapter
19
- end
20
+ AUTHORIZATION_ADAPTERS[extension_key] = extension_definition::AuthorizationAdapter if options[:authorization]
20
21
 
21
- if options[:configuration]
22
- CONFIGURATION_ADAPTERS[extension_key] = extension_definition::ConfigurationAdapter
23
- end
22
+ CONFIGURATION_ADAPTERS[extension_key] = extension_definition::ConfigurationAdapter if options[:configuration]
23
+
24
+ AUDITING_ADAPTERS[extension_key] = extension_definition::AuditingAdapter if options[:auditing]
25
+ end
24
26
 
25
- if options[:auditing]
26
- AUDITING_ADAPTERS[extension_key] = extension_definition::AuditingAdapter
27
+ # Setup all extensions for testing
28
+ def self.setup_all_extensions
29
+ (AUTHORIZATION_ADAPTERS.values + AUDITING_ADAPTERS.values).each do |klass|
30
+ klass.setup if klass.respond_to? :setup
31
+ rescue # rubocop:disable Style/RescueStandardError
32
+ # ignore errors
27
33
  end
28
34
  end
29
35
  end
@@ -1,39 +1,82 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RailsAdmin
2
4
  module Extensions
3
5
  module CanCanCan
4
6
  # This adapter is for the CanCanCan[https://github.com/CanCanCommunity/cancancan] authorization library.
5
- class AuthorizationAdapter < RailsAdmin::Extensions::CanCan::AuthorizationAdapter
7
+ class AuthorizationAdapter
8
+ module ControllerExtension
9
+ def current_ability
10
+ # use _current_user instead of default current_user so it works with
11
+ # whatever current user method is defined with RailsAdmin
12
+ @current_ability ||= ability_class.new(_current_user)
13
+ end
14
+ end
15
+
16
+ include RailsAdmin::Config::Configurable
17
+
18
+ def self.setup
19
+ RailsAdmin::Extensions::ControllerExtension.include ControllerExtension
20
+ end
21
+
22
+ # See the +authorize_with+ config method for where the initialization happens.
23
+ def initialize(controller, ability = nil, &block)
24
+ @controller = controller
25
+ ability_class { ability } if ability
26
+ instance_eval(&block) if block
27
+
28
+ adapter = self
29
+ ControllerExtension.define_method(:ability_class) do
30
+ adapter.ability_class
31
+ end
32
+ @controller.current_ability.authorize! :access, :rails_admin
33
+ end
34
+
35
+ register_instance_option :ability_class do
36
+ Ability
37
+ end
38
+
39
+ # This method is called in every controller action and should raise an exception
40
+ # when the authorization fails. The first argument is the name of the controller
41
+ # action as a symbol (:create, :bulk_delete, etc.). The second argument is the
42
+ # AbstractModel instance that applies. The third argument is the actual model
43
+ # instance if it is available.
6
44
  def authorize(action, abstract_model = nil, model_object = nil)
7
45
  return unless action
8
- subject = model_object || abstract_model && abstract_model.model
9
- if authorized_for_dashboard_in_legacy_way?(action)
10
- subject
11
- else
12
- @controller.current_ability.authorize!(*resolve_with_compatibility(action, subject))
13
- end
46
+
47
+ action, subject = resolve_action_and_subject(action, abstract_model, model_object)
48
+ @controller.current_ability.authorize!(action, subject)
14
49
  end
15
50
 
51
+ # This method is called primarily from the view to determine whether the given user
52
+ # has access to perform the action on a given model. It should return true when authorized.
53
+ # This takes the same arguments as +authorize+. The difference is that this will
54
+ # return a boolean whereas +authorize+ will raise an exception when not authorized.
16
55
  def authorized?(action, abstract_model = nil, model_object = nil)
17
56
  return unless action
18
- subject = model_object || abstract_model && abstract_model.model
19
- authorized_for_dashboard_in_legacy_way?(action, true) ||
20
- @controller.current_ability.can?(*resolve_with_compatibility(action, subject))
57
+
58
+ action, subject = resolve_action_and_subject(action, abstract_model, model_object)
59
+ @controller.current_ability.can?(action, subject)
21
60
  end
22
61
 
23
- private
62
+ # This is called when needing to scope a database query. It is called within the list
63
+ # and bulk_delete/destroy actions and should return a scope which limits the records
64
+ # to those which the user can perform the given action on.
65
+ def query(action, abstract_model)
66
+ abstract_model.model.accessible_by(@controller.current_ability, action)
67
+ end
24
68
 
25
- def authorized_for_dashboard_in_legacy_way?(action, silent = false)
26
- return false unless action == :dashboard
27
- legacy_ability = @controller.current_ability.permissions[:can][:dashboard]
28
- if legacy_ability && (legacy_ability.empty? || legacy_ability.all?(&:empty?))
29
- ActiveSupport::Deprecation.warn('RailsAdmin CanCanCan Ability with `can :dashboard` is old and support will be removed in the next major release, use `can :read, :dashboard` instead. See https://github.com/sferik/rails_admin/issues/2901') unless silent
30
- true
31
- else
32
- false
33
- end
69
+ # This is called in the new/create actions to determine the initial attributes for new
70
+ # records. It should return a hash of attributes which match what the user
71
+ # is authorized to create.
72
+ def attributes_for(action, abstract_model)
73
+ @controller.current_ability.attributes_for(action, abstract_model&.model)
34
74
  end
35
75
 
36
- def resolve_with_compatibility(action, subject)
76
+ private
77
+
78
+ def resolve_action_and_subject(action, abstract_model, model_object)
79
+ subject = model_object || abstract_model&.model
37
80
  if subject
38
81
  [action, subject]
39
82
  else
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rails_admin/extensions/cancancan/authorization_adapter'
2
4
 
3
5
  RailsAdmin.add_extension(:cancancan, RailsAdmin::Extensions::CanCanCan, authorization: true)
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsAdmin
4
+ module Extensions
5
+ module ControllerExtension
6
+ end
7
+ end
8
+ end
@@ -1,3 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/string/strip'
4
+
1
5
  module RailsAdmin
2
6
  module Extensions
3
7
  module PaperTrail
@@ -9,7 +13,7 @@ module RailsAdmin
9
13
 
10
14
  def message
11
15
  @message = @version.event
12
- @version.respond_to?(:changeset) && @version.changeset.present? ? @message + ' [' + @version.changeset.to_a.collect { |c| c[0] + ' = ' + c[1][1].to_s }.join(', ') + ']' : @message
16
+ @version.respond_to?(:changeset) && @version.changeset.present? ? @message + ' [' + @version.changeset.to_a.collect { |c| "#{c[0]} = #{c[1][1]}" }.join(', ') + ']' : @message
13
17
  end
14
18
 
15
19
  def created_at
@@ -21,7 +25,11 @@ module RailsAdmin
21
25
  end
22
26
 
23
27
  def username
24
- @user_class.find(@version.whodunnit).try(:email) rescue nil || @version.whodunnit
28
+ begin
29
+ @user_class.find(@version.whodunnit).try(:email)
30
+ rescue StandardError
31
+ nil
32
+ end || @version.whodunnit
25
33
  end
26
34
 
27
35
  def item
@@ -29,6 +37,12 @@ module RailsAdmin
29
37
  end
30
38
  end
31
39
 
40
+ module ControllerExtension
41
+ def user_for_paper_trail
42
+ _current_user.try(:id) || _current_user
43
+ end
44
+ end
45
+
32
46
  class AuditingAdapter
33
47
  COLUMN_MAPPING = {
34
48
  table: :item_type,
@@ -37,46 +51,63 @@ module RailsAdmin
37
51
  created_at: :created_at,
38
52
  message: :event,
39
53
  }.freeze
40
- E_VERSION_MODEL_NOT_SET = <<-EOS.strip_heredoc.freeze
54
+ E_USER_CLASS_NOT_SET = <<~ERROR
55
+ Please set up PaperTrail's user class explicitly.
56
+
57
+ config.audit_with :paper_trail do
58
+ user_class { User }
59
+ end
60
+ ERROR
61
+ E_VERSION_MODEL_NOT_SET = <<~ERROR
41
62
  Please set up PaperTrail's version model explicitly.
42
63
 
43
- config.audit_with :paper_trail, 'User', 'PaperTrail::Version'
64
+ config.audit_with :paper_trail do
65
+ version_class { PaperTrail::Version }
66
+ end
44
67
 
45
68
  If you have configured a model to use a custom version class
46
69
  (https://github.com/paper-trail-gem/paper_trail#6a-custom-version-classes)
47
- that configuration will take precedence over what you specify in
48
- `audit_with`.
49
- EOS
70
+ that configuration will take precedence over what you specify in `audit_with`.
71
+ ERROR
72
+
73
+ include RailsAdmin::Config::Configurable
50
74
 
51
75
  def self.setup
52
- raise('PaperTrail not found') unless defined?(::PaperTrail)
53
- RailsAdmin::ApplicationController.class_eval do
54
- def user_for_paper_trail
55
- _current_user.try(:id) || _current_user
56
- end
57
- end
76
+ raise 'PaperTrail not found' unless defined?(::PaperTrail)
77
+
78
+ RailsAdmin::Extensions::ControllerExtension.include ControllerExtension
58
79
  end
59
80
 
60
- def initialize(controller, user_class = 'User', version_class = '::Version')
81
+ def initialize(controller, user_class_name = nil, version_class_name = nil, &block)
61
82
  @controller = controller
62
- @controller.send(:set_paper_trail_whodunnit) if @controller
63
- begin
64
- @user_class = user_class.to_s.constantize
65
- rescue NameError
66
- raise "Please set up Papertrail's user model explicitly. Ex: config.audit_with :paper_trail, 'User'"
67
- end
83
+ @controller&.send(:set_paper_trail_whodunnit)
68
84
 
69
- begin
70
- @version_class = version_class.to_s.constantize
71
- rescue NameError
72
- raise E_VERSION_MODEL_NOT_SET
73
- end
85
+ user_class { user_class_name.to_s.constantize } if user_class_name
86
+ version_class { version_class_name.to_s.constantize } if version_class_name
87
+
88
+ instance_eval(&block) if block
89
+ end
90
+
91
+ register_instance_option :user_class do
92
+ User
93
+ rescue NameError
94
+ raise E_USER_CLASS_NOT_SET
95
+ end
96
+
97
+ register_instance_option :version_class do
98
+ PaperTrail::Version
99
+ rescue NameError
100
+ raise E_VERSION_MODEL_NOT_SET
101
+ end
102
+
103
+ register_instance_option :sort_by do
104
+ {id: :desc}
74
105
  end
75
106
 
76
107
  def latest(count = 100)
77
- @version_class.
78
- order(id: :desc).includes(:item).limit(count).
79
- collect { |version| VersionProxy.new(version, @user_class) }
108
+ version_class.
109
+ order(sort_by).includes(:item).limit(count).
110
+ collect { |version| VersionProxy.new(version, user_class) }
80
111
  end
81
112
 
82
113
  def delete_object(_object, _model, _user)
@@ -103,37 +134,52 @@ module RailsAdmin
103
134
 
104
135
  # - model - a RailsAdmin::AbstractModel
105
136
  def listing_for_model_or_object(model, object, query, sort, sort_reverse, all, page, per_page)
106
- if sort.present?
107
- sort = COLUMN_MAPPING[sort.to_sym]
108
- else
109
- sort = :created_at
110
- sort_reverse = 'true'
111
- end
137
+ sort =
138
+ if sort.present?
139
+ {COLUMN_MAPPING[sort.to_sym] => sort_reverse ? :desc : :asc}
140
+ else
141
+ sort_by
142
+ end
112
143
 
113
- ar_model = model.model
114
144
  current_page = page.presence || '1'
115
145
 
116
- versions = version_class_for(ar_model).where item_type: ar_model.name
117
- versions = versions.where item_id: object.id if object
146
+ versions = object.nil? ? versions_for_model(model) : object.public_send(model.model.versions_association_name)
118
147
  versions = versions.where('event LIKE ?', "%#{query}%") if query.present?
119
- versions = versions.order(sort_reverse == 'true' ? "#{sort} DESC" : sort)
148
+ versions = versions.order(sort)
120
149
  versions = all ? versions : versions.send(Kaminari.config.page_method_name, current_page).per(per_page)
121
150
  paginated_proxies = Kaminari.paginate_array([], total_count: versions.try(:total_count) || versions.count)
122
- paginated_proxies = paginated_proxies.page(current_page).per(per_page)
151
+ paginated_proxies = paginated_proxies.send(
152
+ paginated_proxies.respond_to?(Kaminari.config.page_method_name) ? Kaminari.config.page_method_name : :page,
153
+ current_page,
154
+ ).per(per_page)
123
155
  versions.each do |version|
124
- paginated_proxies << VersionProxy.new(version, @user_class)
156
+ paginated_proxies << VersionProxy.new(version, user_class)
125
157
  end
126
158
  paginated_proxies
127
159
  end
128
160
 
161
+ def versions_for_model(model)
162
+ model_name = model.model.name
163
+ base_class_name = model.model.base_class.name
164
+
165
+ options =
166
+ if base_class_name == model_name
167
+ {item_type: model_name}
168
+ else
169
+ {item_type: base_class_name, item_id: model.model.all}
170
+ end
171
+
172
+ version_class_for(model.model).where(options)
173
+ end
174
+
129
175
  # PT can be configured to use [custom version
130
176
  # classes](https://github.com/paper-trail-gem/paper_trail#6a-custom-version-classes)
131
177
  #
132
178
  # ```ruby
133
- # has_paper_trail class_name: 'MyVersion'
179
+ # has_paper_trail versions: { class_name: 'MyVersion' }
134
180
  # ```
135
181
  def version_class_for(model)
136
- model.paper_trail_options[:class_name].try(:constantize) || @version_class
182
+ model.paper_trail.version_class
137
183
  end
138
184
  end
139
185
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rails_admin/extensions/paper_trail/auditing_adapter'
2
4
 
3
5
  RailsAdmin.add_extension(:paper_trail, RailsAdmin::Extensions::PaperTrail, auditing: true)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RailsAdmin
2
4
  module Extensions
3
5
  module Pundit
@@ -7,9 +9,7 @@ module RailsAdmin
7
9
  class AuthorizationAdapter
8
10
  # This method is called first time only and used for setup
9
11
  def self.setup
10
- RailsAdmin::ApplicationController.class_eval do
11
- include ::Pundit
12
- end unless RailsAdmin::ApplicationController.ancestors.include? 'Pundit'
12
+ RailsAdmin::Extensions::ControllerExtension.include defined?(::Pundit::Authorization) ? ::Pundit::Authorization : ::Pundit
13
13
  end
14
14
 
15
15
  # See the +authorize_with+ config method for where the initialization happens.
@@ -23,10 +23,9 @@ module RailsAdmin
23
23
  # AbstractModel instance that applies. The third argument is the actual model
24
24
  # instance if it is available.
25
25
  def authorize(action, abstract_model = nil, model_object = nil)
26
- record = model_object || abstract_model && abstract_model.model
27
- if action && !policy(record).send(action_for_pundit(action))
28
- raise ::Pundit::NotAuthorizedError.new("not allowed to #{action} this #{record}")
29
- end
26
+ record = model_object || abstract_model&.model
27
+ raise ::Pundit::NotAuthorizedError.new("not allowed to #{action} this #{record}") if action && !policy(record).send(action_for_pundit(action))
28
+
30
29
  @controller.instance_variable_set(:@_pundit_policy_authorized, true)
31
30
  end
32
31
 
@@ -35,7 +34,7 @@ module RailsAdmin
35
34
  # This takes the same arguments as +authorize+. The difference is that this will
36
35
  # return a boolean whereas +authorize+ will raise an exception when not authorized.
37
36
  def authorized?(action, abstract_model = nil, model_object = nil)
38
- record = model_object || abstract_model && abstract_model.model
37
+ record = model_object || abstract_model&.model
39
38
  policy(record).send(action_for_pundit(action)) if action
40
39
  end
41
40
 
@@ -52,7 +51,7 @@ module RailsAdmin
52
51
  # records. It should return a hash of attributes which match what the user
53
52
  # is authorized to create.
54
53
  def attributes_for(action, abstract_model)
55
- record = abstract_model && abstract_model.model
54
+ record = abstract_model&.model
56
55
  policy(record).try(:attributes_for, action) || {}
57
56
  end
58
57
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rails_admin/extensions/pundit/authorization_adapter'
2
4
 
3
5
  RailsAdmin.add_extension(:pundit, RailsAdmin::Extensions::Pundit, authorization: true)
@@ -1,11 +1,13 @@
1
- # encoding: UTF-8
1
+ # frozen_string_literal: true
2
+
2
3
  require 'csv'
3
4
 
4
5
  module RailsAdmin
5
6
  class CSVConverter
6
- def initialize(objects = [], schema = {})
7
+ def initialize(objects = [], schema = nil)
7
8
  @fields = []
8
9
  @associations = []
10
+ schema ||= {}
9
11
 
10
12
  return self if (@objects = objects).blank?
11
13
 
@@ -13,12 +15,14 @@ module RailsAdmin
13
15
  @abstract_model = RailsAdmin::AbstractModel.new(@model)
14
16
  @model_config = @abstract_model.config
15
17
  @methods = [(schema[:only] || []) + (schema[:methods] || [])].flatten.compact
16
- @fields = @methods.collect { |m| export_fields_for(m).first }
18
+ @fields = @methods.collect { |m| export_field_for(m) }.compact
17
19
  @empty = ::I18n.t('admin.export.empty_value_for_associated_objects')
18
20
  schema_include = schema.delete(:include) || {}
19
21
 
20
22
  @associations = schema_include.each_with_object({}) do |(key, values), hash|
21
- association = association_for(key)
23
+ association = export_field_for(key)
24
+ next unless association&.association?
25
+
22
26
  model_config = association.associated_model_config
23
27
  abstract_model = model_config.abstract_model
24
28
  methods = [(values[:only] || []) + (values[:methods] || [])].flatten.compact
@@ -28,20 +32,25 @@ module RailsAdmin
28
32
  model: abstract_model.model,
29
33
  abstract_model: abstract_model,
30
34
  model_config: model_config,
31
- fields: methods.collect { |m| export_fields_for(m, model_config).first },
35
+ fields: methods.collect { |m| export_field_for(m, model_config) }.compact,
32
36
  }
33
37
  hash
34
38
  end
35
39
  end
36
40
 
37
41
  def to_csv(options = {})
42
+ if CSV::VERSION == '3.0.2'
43
+ raise <<~MSG
44
+ CSV library bundled with Ruby 2.6.0 has encoding issue, please upgrade Ruby to 2.6.1 or later.
45
+ https://github.com/ruby/csv/issues/62
46
+ MSG
47
+ end
48
+
38
49
  options = HashWithIndifferentAccess.new(options)
39
50
  encoding_to = Encoding.find(options[:encoding_to]) if options[:encoding_to].present?
40
51
 
41
52
  csv_string = generate_csv_string(options)
42
- if encoding_to
43
- csv_string = csv_string.encode(encoding_to, invalid: :replace, undef: :replace, replace: '?')
44
- end
53
+ csv_string = csv_string.encode(encoding_to, invalid: :replace, undef: :replace, replace: '?') if encoding_to
45
54
 
46
55
  # Add a BOM for utf8 encodings, helps with utf8 auto-detect for some versions of Excel.
47
56
  # Don't add if utf8 but user don't want to touch input encoding:
@@ -55,19 +64,15 @@ module RailsAdmin
55
64
 
56
65
  private
57
66
 
58
- def association_for(key)
59
- export_fields_for(key).detect(&:association?)
60
- end
61
-
62
- def export_fields_for(method, model_config = @model_config)
63
- model_config.export.fields.select { |f| f.name == method }
67
+ def export_field_for(method, model_config = @model_config)
68
+ model_config.export.fields.detect { |f| f.name == method }
64
69
  end
65
70
 
66
71
  def generate_csv_string(options)
67
72
  generator_options = (options[:generator] || {}).symbolize_keys.delete_if { |_, value| value.blank? }
68
73
  method = @objects.respond_to?(:find_each) ? :find_each : :each
69
74
 
70
- CSV.generate(generator_options) do |csv|
75
+ CSV.generate(**generator_options) do |csv|
71
76
  csv << generate_csv_header unless options[:skip_header]
72
77
 
73
78
  @objects.send(method) do |object|