ultra-quick-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-quick-hub might be problematic. Click here for more details.

Files changed (345) hide show
  1. checksums.yaml +7 -0
  2. data/activeadmin-3.5.1/CHANGELOG.md +1153 -0
  3. data/activeadmin-3.5.1/CODE_OF_CONDUCT.md +74 -0
  4. data/activeadmin-3.5.1/CONTRIBUTING.md +187 -0
  5. data/activeadmin-3.5.1/LICENSE +20 -0
  6. data/activeadmin-3.5.1/README.md +117 -0
  7. data/activeadmin-3.5.1/app/assets/javascripts/active_admin/base.js +520 -0
  8. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_base.scss +57 -0
  9. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_forms.scss +315 -0
  10. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_header.scss +188 -0
  11. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_mixins.scss +1 -0
  12. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_normalize.scss +349 -0
  13. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_print.scss +287 -0
  14. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_typography.scss +100 -0
  15. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_batch_actions.scss +6 -0
  16. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_blank_slates.scss +30 -0
  17. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
  18. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_buttons.scss +6 -0
  19. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
  20. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_comments.scss +41 -0
  21. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_date_picker.scss +148 -0
  22. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +154 -0
  23. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
  24. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
  25. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
  26. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
  27. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
  28. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_pagination.scss +58 -0
  29. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
  30. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_scopes.scss +13 -0
  31. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_status_tags.scss +12 -0
  32. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_table_tools.scss +70 -0
  33. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_tables.scss +112 -0
  34. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_tabs.scss +68 -0
  35. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
  36. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -0
  37. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_buttons.scss +65 -0
  38. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
  39. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
  40. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_sections.scss +41 -0
  41. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_shadows.scss +15 -0
  42. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
  43. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_utilities.scss +17 -0
  44. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_variables.scss +51 -0
  45. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
  46. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/structure/_footer.scss +19 -0
  47. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/structure/_main_structure.scss +29 -0
  48. data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/structure/_title_bar.scss +43 -0
  49. data/activeadmin-3.5.1/app/javascript/active_admin/base.js +28 -0
  50. data/activeadmin-3.5.1/app/javascript/active_admin/ext/jquery-ui.js +7 -0
  51. data/activeadmin-3.5.1/app/javascript/active_admin/ext/jquery.js +9 -0
  52. data/activeadmin-3.5.1/app/javascript/active_admin/initializers/batch-actions.js +61 -0
  53. data/activeadmin-3.5.1/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
  54. data/activeadmin-3.5.1/app/javascript/active_admin/initializers/datepicker.js +19 -0
  55. data/activeadmin-3.5.1/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
  56. data/activeadmin-3.5.1/app/javascript/active_admin/initializers/filters.js +10 -0
  57. data/activeadmin-3.5.1/app/javascript/active_admin/initializers/has-many.js +98 -0
  58. data/activeadmin-3.5.1/app/javascript/active_admin/initializers/per-page.js +13 -0
  59. data/activeadmin-3.5.1/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
  60. data/activeadmin-3.5.1/app/javascript/active_admin/initializers/tabs.js +6 -0
  61. data/activeadmin-3.5.1/app/javascript/active_admin/lib/checkbox-toggler.js +49 -0
  62. data/activeadmin-3.5.1/app/javascript/active_admin/lib/core_ext.rb +148 -0
  63. data/activeadmin-3.5.1/app/javascript/active_admin/lib/dropdown-menu.js +116 -0
  64. data/activeadmin-3.5.1/app/javascript/active_admin/lib/filters.js +39 -0
  65. data/activeadmin-3.5.1/app/javascript/active_admin/lib/modal-dialog.js +63 -0
  66. data/activeadmin-3.5.1/app/javascript/active_admin/lib/per-page.js +38 -0
  67. data/activeadmin-3.5.1/app/javascript/active_admin/lib/table-checkbox-toggler.js +38 -0
  68. data/activeadmin-3.5.1/app/javascript/active_admin/lib/utils.js +40 -0
  69. data/activeadmin-3.5.1/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
  70. data/activeadmin-3.5.1/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  71. data/activeadmin-3.5.1/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  72. data/activeadmin-3.5.1/app/views/active_admin/devise/passwords/edit.html.erb +18 -0
  73. data/activeadmin-3.5.1/app/views/active_admin/devise/passwords/new.html.erb +15 -0
  74. data/activeadmin-3.5.1/app/views/active_admin/devise/registrations/new.html.erb +21 -0
  75. data/activeadmin-3.5.1/app/views/active_admin/devise/sessions/new.html.erb +20 -0
  76. data/activeadmin-3.5.1/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
  77. data/activeadmin-3.5.1/app/views/active_admin/devise/shared/_links.erb +33 -0
  78. data/activeadmin-3.5.1/app/views/active_admin/devise/unlocks/new.html.erb +15 -0
  79. data/activeadmin-3.5.1/app/views/active_admin/page/index.html.arb +2 -0
  80. data/activeadmin-3.5.1/app/views/active_admin/resource/edit.html.arb +2 -0
  81. data/activeadmin-3.5.1/app/views/active_admin/resource/index.html.arb +2 -0
  82. data/activeadmin-3.5.1/app/views/active_admin/resource/new.html.arb +2 -0
  83. data/activeadmin-3.5.1/app/views/active_admin/resource/show.html.arb +2 -0
  84. data/activeadmin-3.5.1/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
  85. data/activeadmin-3.5.1/app/views/kaminari/active_admin/_gap.html.erb +8 -0
  86. data/activeadmin-3.5.1/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
  87. data/activeadmin-3.5.1/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
  88. data/activeadmin-3.5.1/app/views/kaminari/active_admin/_page.html.erb +12 -0
  89. data/activeadmin-3.5.1/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
  90. data/activeadmin-3.5.1/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
  91. data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
  92. data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
  93. data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
  94. data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
  95. data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
  96. data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
  97. data/activeadmin-3.5.1/app/views/layouts/active_admin.html.arb +2 -0
  98. data/activeadmin-3.5.1/app/views/layouts/active_admin_logged_out.html.erb +50 -0
  99. data/activeadmin-3.5.1/config/locales/ar.yml +128 -0
  100. data/activeadmin-3.5.1/config/locales/az.yml +131 -0
  101. data/activeadmin-3.5.1/config/locales/bg.yml +112 -0
  102. data/activeadmin-3.5.1/config/locales/bs.yml +114 -0
  103. data/activeadmin-3.5.1/config/locales/ca.yml +98 -0
  104. data/activeadmin-3.5.1/config/locales/cs.yml +102 -0
  105. data/activeadmin-3.5.1/config/locales/da.yml +130 -0
  106. data/activeadmin-3.5.1/config/locales/de-CH.yml +94 -0
  107. data/activeadmin-3.5.1/config/locales/de.yml +154 -0
  108. data/activeadmin-3.5.1/config/locales/el.yml +119 -0
  109. data/activeadmin-3.5.1/config/locales/en-CA.yml +132 -0
  110. data/activeadmin-3.5.1/config/locales/en-GB.yml +132 -0
  111. data/activeadmin-3.5.1/config/locales/en.yml +154 -0
  112. data/activeadmin-3.5.1/config/locales/eo.yml +137 -0
  113. data/activeadmin-3.5.1/config/locales/es-MX.yml +90 -0
  114. data/activeadmin-3.5.1/config/locales/es.yml +154 -0
  115. data/activeadmin-3.5.1/config/locales/fa.yml +112 -0
  116. data/activeadmin-3.5.1/config/locales/fi.yml +105 -0
  117. data/activeadmin-3.5.1/config/locales/fr.yml +133 -0
  118. data/activeadmin-3.5.1/config/locales/he.yml +132 -0
  119. data/activeadmin-3.5.1/config/locales/hr.yml +116 -0
  120. data/activeadmin-3.5.1/config/locales/hu.yml +94 -0
  121. data/activeadmin-3.5.1/config/locales/id.yml +128 -0
  122. data/activeadmin-3.5.1/config/locales/it.yml +154 -0
  123. data/activeadmin-3.5.1/config/locales/ja.yml +133 -0
  124. data/activeadmin-3.5.1/config/locales/ko.yml +113 -0
  125. data/activeadmin-3.5.1/config/locales/lt.yml +134 -0
  126. data/activeadmin-3.5.1/config/locales/lv.yml +85 -0
  127. data/activeadmin-3.5.1/config/locales/mk.yml +126 -0
  128. data/activeadmin-3.5.1/config/locales/nb.yml +122 -0
  129. data/activeadmin-3.5.1/config/locales/nl.yml +136 -0
  130. data/activeadmin-3.5.1/config/locales/pl.yml +160 -0
  131. data/activeadmin-3.5.1/config/locales/pt-BR.yml +135 -0
  132. data/activeadmin-3.5.1/config/locales/pt-PT.yml +85 -0
  133. data/activeadmin-3.5.1/config/locales/ro.yml +90 -0
  134. data/activeadmin-3.5.1/config/locales/ru.yml +135 -0
  135. data/activeadmin-3.5.1/config/locales/sk.yml +160 -0
  136. data/activeadmin-3.5.1/config/locales/sv-SE.yml +154 -0
  137. data/activeadmin-3.5.1/config/locales/tr.yml +133 -0
  138. data/activeadmin-3.5.1/config/locales/uk.yml +132 -0
  139. data/activeadmin-3.5.1/config/locales/vi.yml +154 -0
  140. data/activeadmin-3.5.1/config/locales/zh-CN.yml +154 -0
  141. data/activeadmin-3.5.1/config/locales/zh-TW.yml +128 -0
  142. data/activeadmin-3.5.1/lib/active_admin/abstract_view_factory.rb +48 -0
  143. data/activeadmin-3.5.1/lib/active_admin/application.rb +234 -0
  144. data/activeadmin-3.5.1/lib/active_admin/application_settings.rb +43 -0
  145. data/activeadmin-3.5.1/lib/active_admin/asset_registration.rb +30 -0
  146. data/activeadmin-3.5.1/lib/active_admin/authorization_adapter.rb +132 -0
  147. data/activeadmin-3.5.1/lib/active_admin/base_controller/authorization.rb +129 -0
  148. data/activeadmin-3.5.1/lib/active_admin/base_controller/menu.rb +35 -0
  149. data/activeadmin-3.5.1/lib/active_admin/base_controller.rb +82 -0
  150. data/activeadmin-3.5.1/lib/active_admin/batch_actions/controller.rb +41 -0
  151. data/activeadmin-3.5.1/lib/active_admin/batch_actions/resource_extension.rb +157 -0
  152. data/activeadmin-3.5.1/lib/active_admin/batch_actions/views/batch_action_form.rb +39 -0
  153. data/activeadmin-3.5.1/lib/active_admin/batch_actions/views/batch_action_selector.rb +59 -0
  154. data/activeadmin-3.5.1/lib/active_admin/batch_actions/views/selection_cells.rb +39 -0
  155. data/activeadmin-3.5.1/lib/active_admin/batch_actions.rb +17 -0
  156. data/activeadmin-3.5.1/lib/active_admin/callbacks.rb +89 -0
  157. data/activeadmin-3.5.1/lib/active_admin/cancan_adapter.rb +37 -0
  158. data/activeadmin-3.5.1/lib/active_admin/collection_decorator.rb +32 -0
  159. data/activeadmin-3.5.1/lib/active_admin/component.rb +6 -0
  160. data/activeadmin-3.5.1/lib/active_admin/controller_action.rb +14 -0
  161. data/activeadmin-3.5.1/lib/active_admin/csv_builder.rb +144 -0
  162. data/activeadmin-3.5.1/lib/active_admin/dependency.rb +97 -0
  163. data/activeadmin-3.5.1/lib/active_admin/devise.rb +91 -0
  164. data/activeadmin-3.5.1/lib/active_admin/dsl.rb +161 -0
  165. data/activeadmin-3.5.1/lib/active_admin/dynamic_setting.rb +39 -0
  166. data/activeadmin-3.5.1/lib/active_admin/dynamic_settings_node.rb +29 -0
  167. data/activeadmin-3.5.1/lib/active_admin/engine.rb +29 -0
  168. data/activeadmin-3.5.1/lib/active_admin/error.rb +63 -0
  169. data/activeadmin-3.5.1/lib/active_admin/filters/active.rb +30 -0
  170. data/activeadmin-3.5.1/lib/active_admin/filters/active_filter.rb +124 -0
  171. data/activeadmin-3.5.1/lib/active_admin/filters/active_sidebar.rb +28 -0
  172. data/activeadmin-3.5.1/lib/active_admin/filters/dsl.rb +22 -0
  173. data/activeadmin-3.5.1/lib/active_admin/filters/forms.rb +86 -0
  174. data/activeadmin-3.5.1/lib/active_admin/filters/formtastic_addons.rb +75 -0
  175. data/activeadmin-3.5.1/lib/active_admin/filters/resource_extension.rb +180 -0
  176. data/activeadmin-3.5.1/lib/active_admin/filters.rb +12 -0
  177. data/activeadmin-3.5.1/lib/active_admin/form_builder.rb +186 -0
  178. data/activeadmin-3.5.1/lib/active_admin/generators/boilerplate.rb +54 -0
  179. data/activeadmin-3.5.1/lib/active_admin/helpers/collection.rb +21 -0
  180. data/activeadmin-3.5.1/lib/active_admin/helpers/i18n.rb +8 -0
  181. data/activeadmin-3.5.1/lib/active_admin/helpers/optional_display.rb +39 -0
  182. data/activeadmin-3.5.1/lib/active_admin/helpers/routes/url_helpers.rb +16 -0
  183. data/activeadmin-3.5.1/lib/active_admin/helpers/scope_chain.rb +25 -0
  184. data/activeadmin-3.5.1/lib/active_admin/inputs/datepicker_input.rb +28 -0
  185. data/activeadmin-3.5.1/lib/active_admin/inputs/filters/base/search_method_select.rb +76 -0
  186. data/activeadmin-3.5.1/lib/active_admin/inputs/filters/base.rb +45 -0
  187. data/activeadmin-3.5.1/lib/active_admin/inputs/filters/boolean_input.rb +25 -0
  188. data/activeadmin-3.5.1/lib/active_admin/inputs/filters/check_boxes_input.rb +51 -0
  189. data/activeadmin-3.5.1/lib/active_admin/inputs/filters/date_picker_input.rb +14 -0
  190. data/activeadmin-3.5.1/lib/active_admin/inputs/filters/date_range_input.rb +53 -0
  191. data/activeadmin-3.5.1/lib/active_admin/inputs/filters/numeric_input.rb +13 -0
  192. data/activeadmin-3.5.1/lib/active_admin/inputs/filters/select_input.rb +59 -0
  193. data/activeadmin-3.5.1/lib/active_admin/inputs/filters/string_input.rb +27 -0
  194. data/activeadmin-3.5.1/lib/active_admin/inputs/filters/text_input.rb +26 -0
  195. data/activeadmin-3.5.1/lib/active_admin/inputs.rb +22 -0
  196. data/activeadmin-3.5.1/lib/active_admin/localizers/resource_localizer.rb +36 -0
  197. data/activeadmin-3.5.1/lib/active_admin/localizers.rb +12 -0
  198. data/activeadmin-3.5.1/lib/active_admin/menu.rb +107 -0
  199. data/activeadmin-3.5.1/lib/active_admin/menu_collection.rb +92 -0
  200. data/activeadmin-3.5.1/lib/active_admin/menu_item.rb +70 -0
  201. data/activeadmin-3.5.1/lib/active_admin/namespace.rb +267 -0
  202. data/activeadmin-3.5.1/lib/active_admin/namespace_settings.rb +127 -0
  203. data/activeadmin-3.5.1/lib/active_admin/order_clause.rb +49 -0
  204. data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/comment.rb +40 -0
  205. data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/namespace_helper.rb +15 -0
  206. data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/resource_helper.rb +18 -0
  207. data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/show_page_helper.rb +24 -0
  208. data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +101 -0
  209. data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/views.rb +3 -0
  210. data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments.rb +102 -0
  211. data/activeadmin-3.5.1/lib/active_admin/orm/active_record.rb +6 -0
  212. data/activeadmin-3.5.1/lib/active_admin/orm/mongoid.rb +2 -0
  213. data/activeadmin-3.5.1/lib/active_admin/page.rb +112 -0
  214. data/activeadmin-3.5.1/lib/active_admin/page_controller.rb +30 -0
  215. data/activeadmin-3.5.1/lib/active_admin/page_dsl.rb +33 -0
  216. data/activeadmin-3.5.1/lib/active_admin/page_presenter.rb +34 -0
  217. data/activeadmin-3.5.1/lib/active_admin/pundit_adapter.rb +123 -0
  218. data/activeadmin-3.5.1/lib/active_admin/resource/action_items.rb +121 -0
  219. data/activeadmin-3.5.1/lib/active_admin/resource/attributes.rb +55 -0
  220. data/activeadmin-3.5.1/lib/active_admin/resource/belongs_to.rb +53 -0
  221. data/activeadmin-3.5.1/lib/active_admin/resource/controllers.rb +20 -0
  222. data/activeadmin-3.5.1/lib/active_admin/resource/includes.rb +13 -0
  223. data/activeadmin-3.5.1/lib/active_admin/resource/menu.rb +68 -0
  224. data/activeadmin-3.5.1/lib/active_admin/resource/model.rb +16 -0
  225. data/activeadmin-3.5.1/lib/active_admin/resource/naming.rb +63 -0
  226. data/activeadmin-3.5.1/lib/active_admin/resource/ordering.rb +12 -0
  227. data/activeadmin-3.5.1/lib/active_admin/resource/page_presenters.rb +83 -0
  228. data/activeadmin-3.5.1/lib/active_admin/resource/pagination.rb +24 -0
  229. data/activeadmin-3.5.1/lib/active_admin/resource/routes.rb +146 -0
  230. data/activeadmin-3.5.1/lib/active_admin/resource/scope_to.rb +75 -0
  231. data/activeadmin-3.5.1/lib/active_admin/resource/scopes.rb +53 -0
  232. data/activeadmin-3.5.1/lib/active_admin/resource/sidebars.rb +29 -0
  233. data/activeadmin-3.5.1/lib/active_admin/resource.rb +227 -0
  234. data/activeadmin-3.5.1/lib/active_admin/resource_collection.rb +73 -0
  235. data/activeadmin-3.5.1/lib/active_admin/resource_controller/action_builder.rb +32 -0
  236. data/activeadmin-3.5.1/lib/active_admin/resource_controller/data_access.rb +348 -0
  237. data/activeadmin-3.5.1/lib/active_admin/resource_controller/decorators.rb +81 -0
  238. data/activeadmin-3.5.1/lib/active_admin/resource_controller/polymorphic_routes.rb +38 -0
  239. data/activeadmin-3.5.1/lib/active_admin/resource_controller/resource_class_methods.rb +27 -0
  240. data/activeadmin-3.5.1/lib/active_admin/resource_controller/scoping.rb +32 -0
  241. data/activeadmin-3.5.1/lib/active_admin/resource_controller/sidebars.rb +19 -0
  242. data/activeadmin-3.5.1/lib/active_admin/resource_controller/streaming.rb +45 -0
  243. data/activeadmin-3.5.1/lib/active_admin/resource_controller.rb +68 -0
  244. data/activeadmin-3.5.1/lib/active_admin/resource_dsl.rb +210 -0
  245. data/activeadmin-3.5.1/lib/active_admin/router.rb +115 -0
  246. data/activeadmin-3.5.1/lib/active_admin/scope.rb +65 -0
  247. data/activeadmin-3.5.1/lib/active_admin/settings_node.rb +20 -0
  248. data/activeadmin-3.5.1/lib/active_admin/sidebar_section.rb +40 -0
  249. data/activeadmin-3.5.1/lib/active_admin/version.rb +4 -0
  250. data/activeadmin-3.5.1/lib/active_admin/view_factory.rb +28 -0
  251. data/activeadmin-3.5.1/lib/active_admin/view_helpers/active_admin_application_helper.rb +13 -0
  252. data/activeadmin-3.5.1/lib/active_admin/view_helpers/auto_link_helper.rb +46 -0
  253. data/activeadmin-3.5.1/lib/active_admin/view_helpers/breadcrumb_helper.rb +34 -0
  254. data/activeadmin-3.5.1/lib/active_admin/view_helpers/display_helper.rb +119 -0
  255. data/activeadmin-3.5.1/lib/active_admin/view_helpers/download_format_links_helper.rb +60 -0
  256. data/activeadmin-3.5.1/lib/active_admin/view_helpers/fields_for.rb +51 -0
  257. data/activeadmin-3.5.1/lib/active_admin/view_helpers/flash_helper.rb +15 -0
  258. data/activeadmin-3.5.1/lib/active_admin/view_helpers/form_helper.rb +21 -0
  259. data/activeadmin-3.5.1/lib/active_admin/view_helpers/method_or_proc_helper.rb +101 -0
  260. data/activeadmin-3.5.1/lib/active_admin/view_helpers/scope_name_helper.rb +17 -0
  261. data/activeadmin-3.5.1/lib/active_admin/view_helpers/sidebar_helper.rb +16 -0
  262. data/activeadmin-3.5.1/lib/active_admin/view_helpers/title_helper.rb +12 -0
  263. data/activeadmin-3.5.1/lib/active_admin/view_helpers/view_factory_helper.rb +12 -0
  264. data/activeadmin-3.5.1/lib/active_admin/view_helpers.rb +21 -0
  265. data/activeadmin-3.5.1/lib/active_admin/views/action_items.rb +18 -0
  266. data/activeadmin-3.5.1/lib/active_admin/views/components/active_admin_form.rb +164 -0
  267. data/activeadmin-3.5.1/lib/active_admin/views/components/active_filters_sidebar_content.rb +59 -0
  268. data/activeadmin-3.5.1/lib/active_admin/views/components/attributes_table.rb +95 -0
  269. data/activeadmin-3.5.1/lib/active_admin/views/components/blank_slate.rb +18 -0
  270. data/activeadmin-3.5.1/lib/active_admin/views/components/columns.rb +162 -0
  271. data/activeadmin-3.5.1/lib/active_admin/views/components/dropdown_menu.rb +69 -0
  272. data/activeadmin-3.5.1/lib/active_admin/views/components/index_list.rb +70 -0
  273. data/activeadmin-3.5.1/lib/active_admin/views/components/menu.rb +33 -0
  274. data/activeadmin-3.5.1/lib/active_admin/views/components/menu_item.rb +59 -0
  275. data/activeadmin-3.5.1/lib/active_admin/views/components/paginated_collection.rb +164 -0
  276. data/activeadmin-3.5.1/lib/active_admin/views/components/panel.rb +39 -0
  277. data/activeadmin-3.5.1/lib/active_admin/views/components/scopes.rb +75 -0
  278. data/activeadmin-3.5.1/lib/active_admin/views/components/sidebar.rb +14 -0
  279. data/activeadmin-3.5.1/lib/active_admin/views/components/sidebar_section.rb +35 -0
  280. data/activeadmin-3.5.1/lib/active_admin/views/components/site_title.rb +55 -0
  281. data/activeadmin-3.5.1/lib/active_admin/views/components/status_tag.rb +76 -0
  282. data/activeadmin-3.5.1/lib/active_admin/views/components/table_for.rb +211 -0
  283. data/activeadmin-3.5.1/lib/active_admin/views/components/tabs.rb +41 -0
  284. data/activeadmin-3.5.1/lib/active_admin/views/components/unsupported_browser.rb +12 -0
  285. data/activeadmin-3.5.1/lib/active_admin/views/footer.rb +32 -0
  286. data/activeadmin-3.5.1/lib/active_admin/views/header.rb +20 -0
  287. data/activeadmin-3.5.1/lib/active_admin/views/index_as_block.rb +37 -0
  288. data/activeadmin-3.5.1/lib/active_admin/views/index_as_blog.rb +156 -0
  289. data/activeadmin-3.5.1/lib/active_admin/views/index_as_grid.rb +81 -0
  290. data/activeadmin-3.5.1/lib/active_admin/views/index_as_table.rb +401 -0
  291. data/activeadmin-3.5.1/lib/active_admin/views/pages/base.rb +134 -0
  292. data/activeadmin-3.5.1/lib/active_admin/views/pages/form.rb +65 -0
  293. data/activeadmin-3.5.1/lib/active_admin/views/pages/index.rb +166 -0
  294. data/activeadmin-3.5.1/lib/active_admin/views/pages/layout.rb +27 -0
  295. data/activeadmin-3.5.1/lib/active_admin/views/pages/page.rb +31 -0
  296. data/activeadmin-3.5.1/lib/active_admin/views/pages/show.rb +60 -0
  297. data/activeadmin-3.5.1/lib/active_admin/views/tabbed_navigation.rb +12 -0
  298. data/activeadmin-3.5.1/lib/active_admin/views/title_bar.rb +56 -0
  299. data/activeadmin-3.5.1/lib/active_admin/views.rb +9 -0
  300. data/activeadmin-3.5.1/lib/active_admin.rb +135 -0
  301. data/activeadmin-3.5.1/lib/activeadmin.rb +2 -0
  302. data/activeadmin-3.5.1/lib/generators/active_admin/assets/assets_generator.rb +15 -0
  303. data/activeadmin-3.5.1/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
  304. data/activeadmin-3.5.1/lib/generators/active_admin/assets/templates/active_admin.scss +17 -0
  305. data/activeadmin-3.5.1/lib/generators/active_admin/devise/devise_generator.rb +69 -0
  306. data/activeadmin-3.5.1/lib/generators/active_admin/install/install_generator.rb +56 -0
  307. data/activeadmin-3.5.1/lib/generators/active_admin/install/templates/active_admin.rb.erb +352 -0
  308. data/activeadmin-3.5.1/lib/generators/active_admin/install/templates/admin_users.rb.erb +28 -0
  309. data/activeadmin-3.5.1/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
  310. data/activeadmin-3.5.1/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +16 -0
  311. data/activeadmin-3.5.1/lib/generators/active_admin/page/USAGE +8 -0
  312. data/activeadmin-3.5.1/lib/generators/active_admin/page/page_generator.rb +13 -0
  313. data/activeadmin-3.5.1/lib/generators/active_admin/page/templates/page.rb +6 -0
  314. data/activeadmin-3.5.1/lib/generators/active_admin/resource/resource_generator.rb +21 -0
  315. data/activeadmin-3.5.1/lib/generators/active_admin/resource/templates/admin.rb.erb +46 -0
  316. data/activeadmin-3.5.1/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
  317. data/activeadmin-3.5.1/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
  318. data/activeadmin-3.5.1/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
  319. data/activeadmin-3.5.1/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
  320. data/activeadmin-3.5.1/lib/generators/active_admin/webpacker/webpacker_generator.rb +27 -0
  321. data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/data.js +39 -0
  322. data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/disable-selection.js +51 -0
  323. data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/focusable.js +79 -0
  324. data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +81 -0
  325. data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/keycode.js +51 -0
  326. data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/labels.js +70 -0
  327. data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/plugin.js +49 -0
  328. data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/position.js +513 -0
  329. data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/scroll-parent.js +50 -0
  330. data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/tabbable.js +41 -0
  331. data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/unique-id.js +54 -0
  332. data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/version.js +20 -0
  333. data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widget.js +761 -0
  334. data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/button.js +454 -0
  335. data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +294 -0
  336. data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +304 -0
  337. data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +2240 -0
  338. data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +957 -0
  339. data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +1264 -0
  340. data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +226 -0
  341. data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +1281 -0
  342. data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +1614 -0
  343. data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +918 -0
  344. data/ultra-quick-hub.gemspec +12 -0
  345. metadata +384 -0
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+ module ActiveAdmin
3
+ module BatchActions
4
+ module Controller
5
+
6
+ # Controller action that is called when submitting the batch action form
7
+ def batch_action
8
+ if action_present?
9
+ selection = params[:collection_selection] || []
10
+ inputs = JSON.parse params[:batch_action_inputs] || "{}"
11
+ valid_keys = MethodOrProcHelper.render_in_context(self, current_batch_action.inputs).try(:keys)
12
+ inputs = inputs.with_indifferent_access.slice *valid_keys
13
+ instance_exec selection, inputs, &current_batch_action.block
14
+ else
15
+ raise "Couldn't find batch action \"#{params[:batch_action]}\""
16
+ end
17
+ end
18
+
19
+ protected
20
+
21
+ def action_present?
22
+ params[:batch_action].present? && current_batch_action
23
+ end
24
+
25
+ def current_batch_action
26
+ active_admin_config.batch_actions.detect { |action| action.sym.to_s == params[:batch_action] }
27
+ end
28
+
29
+ COLLECTION_APPLIES = [
30
+ :authorization_scope,
31
+ :filtering,
32
+ :scoping,
33
+ :includes,
34
+ ].freeze
35
+
36
+ def batch_action_collection(only = COLLECTION_APPLIES)
37
+ find_collection(only: only)
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,157 @@
1
+ # frozen_string_literal: true
2
+ module ActiveAdmin
3
+
4
+ module BatchActions
5
+ module ResourceExtension
6
+ def initialize(*)
7
+ super
8
+ @batch_actions = {}
9
+ add_default_batch_action
10
+ end
11
+
12
+ # @return [Array] The set of batch actions for this resource
13
+ def batch_actions
14
+ batch_actions_enabled? ? @batch_actions.values.sort : []
15
+ end
16
+
17
+ # @return [Boolean] If batch actions are enabled for this resource
18
+ def batch_actions_enabled?
19
+ # If the resource config has been set, use it. Otherwise
20
+ # return the namespace setting
21
+ @batch_actions_enabled.nil? ? namespace.batch_actions : @batch_actions_enabled
22
+ end
23
+
24
+ # Disable or Enable batch actions for this resource
25
+ # Set to `nil` to inherit the setting from the namespace
26
+ def batch_actions=(bool)
27
+ @batch_actions_enabled = bool
28
+ end
29
+
30
+ # Add a new batch item to a resource
31
+ # @param [String] title
32
+ # @param [Hash] options
33
+ # => :if is a proc that will be called to determine if the BatchAction should be displayed
34
+ # => :sort_order is used to sort the batch actions ascending
35
+ # => :confirm is a string to prompt the user with (or a boolean to use the default message)
36
+ # => :form is a Hash of form fields you want the user to fill out
37
+ #
38
+ def add_batch_action(sym, title, options = {}, &block)
39
+ @batch_actions[sym] = ActiveAdmin::BatchAction.new(sym, title, options, &block)
40
+ end
41
+
42
+ # Remove a batch action
43
+ # @param [Symbol] sym
44
+ # @return [ActiveAdmin::BatchAction] the batch action, if it was present
45
+ #
46
+ def remove_batch_action(sym)
47
+ @batch_actions.delete(sym.to_sym)
48
+ end
49
+
50
+ # Clears all the existing batch actions for this resource
51
+ def clear_batch_actions!
52
+ @batch_actions = {}
53
+ end
54
+
55
+ private
56
+
57
+ # @return [ActiveAdmin::BatchAction] The default "delete" action
58
+ def add_default_batch_action
59
+ destroy_options = {
60
+ priority: 100,
61
+ confirm: proc { I18n.t("active_admin.batch_actions.delete_confirmation", plural_model: active_admin_config.plural_resource_label.downcase) },
62
+ if: proc { controller.action_methods.include?("destroy") && authorized?(ActiveAdmin::Auth::DESTROY, active_admin_config.resource_class) }
63
+ }
64
+
65
+ add_batch_action :destroy, proc { I18n.t("active_admin.delete") }, destroy_options do |selected_ids|
66
+ batch_action_collection.find(selected_ids).each do |record|
67
+ authorize! ActiveAdmin::Auth::DESTROY, record
68
+ destroy_resource(record)
69
+ end
70
+
71
+ redirect_to active_admin_config.route_collection_path(params),
72
+ notice: I18n.t(
73
+ "active_admin.batch_actions.succesfully_destroyed",
74
+ count: selected_ids.count,
75
+ model: active_admin_config.resource_label.downcase,
76
+ plural_model: active_admin_config.plural_resource_label(count: selected_ids.count).downcase)
77
+ end
78
+ end
79
+
80
+ end
81
+ end
82
+
83
+ class BatchAction
84
+
85
+ include Comparable
86
+
87
+ attr_reader :block, :title, :sym
88
+
89
+ DEFAULT_CONFIRM_MESSAGE = proc { I18n.t "active_admin.batch_actions.default_confirmation" }
90
+
91
+ # Create a Batch Action
92
+ #
93
+ # Examples:
94
+ #
95
+ # BatchAction.new :flag
96
+ # => Will create an action that appears in the action list popover
97
+ #
98
+ # BatchAction.new(:flag) { |selection| redirect_to collection_path, notice: "#{selection.length} users flagged" }
99
+ # => Will create an action that uses a block to process the request (which receives one paramater of the selected objects)
100
+ #
101
+ # BatchAction.new("Perform Long Operation on") { |selection| }
102
+ # => You can create batch actions with a title instead of a Symbol
103
+ #
104
+ # BatchAction.new(:flag, if: proc{ can? :flag, AdminUser }) { |selection| }
105
+ # => You can provide an `:if` proc to choose when the batch action should be displayed
106
+ #
107
+ # BatchAction.new :flag, confirm: true
108
+ # => You can pass `true` to `:confirm` to use the default confirm message.
109
+ #
110
+ # BatchAction.new(:flag, confirm: "Are you sure?") { |selection| }
111
+ # => You can pass a custom confirmation message through `:confirm`
112
+ #
113
+ # BatchAction.new(:flag, form: {foo: :text, bar: :checkbox}) { |selection, inputs| }
114
+ # => You can pass a hash of options to `:form` that will be rendered as form input fields for the user to fill out.
115
+ #
116
+ def initialize(sym, title, options = {}, &block)
117
+ @sym = sym
118
+ @title = title
119
+ @options = options
120
+ @block = block
121
+ @confirm = options[:confirm]
122
+ @block ||= proc {}
123
+ end
124
+
125
+ def confirm
126
+ if @confirm == true
127
+ DEFAULT_CONFIRM_MESSAGE
128
+ elsif !@confirm && @options[:form]
129
+ DEFAULT_CONFIRM_MESSAGE
130
+ else
131
+ @confirm
132
+ end
133
+ end
134
+
135
+ def inputs
136
+ @options[:form]
137
+ end
138
+
139
+ # Returns the display if block. If the block was not explicitly defined
140
+ # a default block always returning true will be returned.
141
+ def display_if_block
142
+ @options[:if] || proc { true }
143
+ end
144
+
145
+ # Used for sorting
146
+ def priority
147
+ @options[:priority] || 10
148
+ end
149
+
150
+ # sort operator
151
+ def <=>(other)
152
+ self.priority <=> other.priority
153
+ end
154
+
155
+ end
156
+
157
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+ require "active_admin/component"
3
+
4
+ module ActiveAdmin
5
+ module BatchActions
6
+
7
+ # Build a BatchActionForm
8
+ class BatchActionForm < ActiveAdmin::Component
9
+ builder_method :batch_action_form
10
+
11
+ attr_reader :prefix_html
12
+
13
+ def build(options = {}, &block)
14
+ options[:id] ||= "collection_selection"
15
+
16
+ # Open a form with two hidden input fields:
17
+ # batch_action => name of the specific action called
18
+ # batch_action_inputs => a JSON string of any requested confirmation values
19
+ text_node form_tag active_admin_config.route_batch_action_path(params, url_options), id: options[:id]
20
+ input name: :batch_action, id: :batch_action, type: :hidden
21
+ input name: :batch_action_inputs, id: :batch_action_inputs, type: :hidden
22
+
23
+ super(options)
24
+ end
25
+
26
+ # Override the default to_s to include a closing form tag
27
+ def to_s
28
+ content + closing_form_tag
29
+ end
30
+
31
+ private
32
+
33
+ def closing_form_tag
34
+ "</form>".html_safe
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+ require "active_admin/component"
3
+
4
+ module ActiveAdmin
5
+ module BatchActions
6
+
7
+ class BatchActionSelector < ActiveAdmin::Component
8
+ builder_method :batch_action_selector
9
+
10
+ # Build a new batch actions selector
11
+ #
12
+ # @param [Array] batch_actions An array of batch actions
13
+ def build(batch_actions)
14
+ @batch_actions = Array(batch_actions)
15
+ @drop_down = build_drop_down
16
+ end
17
+
18
+ # We don't want to wrap the action list (or any other children) in
19
+ # an unnecessary div, so instead we just return the children
20
+ def to_s
21
+ children.to_s
22
+ end
23
+
24
+ private
25
+
26
+ def build_drop_down
27
+ return if batch_actions_to_display.empty?
28
+ dropdown_menu I18n.t("active_admin.batch_actions.button_label"),
29
+ class: "batch_actions_selector dropdown_menu",
30
+ button: { class: "disabled" } do
31
+ batch_actions_to_display.each do |batch_action|
32
+ confirmation_text = render_or_call_method_or_proc_on(self, batch_action.confirm)
33
+
34
+ options = {
35
+ class: "batch_action",
36
+ "data-action": batch_action.sym,
37
+ "data-confirm": confirmation_text,
38
+ "data-inputs": render_in_context(self, batch_action.inputs).to_json
39
+ }
40
+
41
+ default_title = render_or_call_method_or_proc_on(self, batch_action.title)
42
+ title = I18n.t("active_admin.batch_actions.labels.#{batch_action.sym}", default: default_title)
43
+ label = I18n.t("active_admin.batch_actions.action_label", title: title)
44
+
45
+ item label, "#", **options
46
+ end
47
+ end
48
+ end
49
+
50
+ # Return the set of batch actions that should be displayed
51
+ def batch_actions_to_display
52
+ @batch_actions.select do |batch_action|
53
+ call_method_or_proc_on(self, batch_action.display_if_block)
54
+ end
55
+ end
56
+
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+ require "active_admin/component"
3
+
4
+ module ActiveAdmin
5
+ module BatchActions
6
+
7
+ # Creates the toggle checkbox used to toggle the collection selection on/off
8
+ class ResourceSelectionToggleCell < ActiveAdmin::Component
9
+ builder_method :resource_selection_toggle_cell
10
+
11
+ def build(label_text = "")
12
+ label do
13
+ input type: "checkbox", id: "collection_selection_toggle_all", name: "collection_selection_toggle_all", class: "toggle_all"
14
+ text_node label_text if label_text.present?
15
+ end
16
+ end
17
+ end
18
+
19
+ # Creates the checkbox used to select a resource in the collection selection
20
+ class ResourceSelectionCell < ActiveAdmin::Component
21
+ builder_method :resource_selection_cell
22
+
23
+ def build(resource)
24
+ input type: "checkbox", id: "batch_action_item_#{resource.id}", value: resource.id, class: "collection_selection", name: "collection_selection[]"
25
+ end
26
+ end
27
+
28
+ # Creates a wrapper panel for all index pages, except for the table, as the table has the checkbox in the thead
29
+ class ResourceSelectionTogglePanel < ActiveAdmin::Component
30
+ builder_method :resource_selection_toggle_panel
31
+
32
+ def build
33
+ super(id: "collection_selection_toggle_panel")
34
+ resource_selection_toggle_cell(I18n.t("active_admin.batch_actions.selection_toggle_explanation", default: "(Toggle Selection)"))
35
+ end
36
+ end
37
+
38
+ end
39
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+ ActiveAdmin.before_load do |app|
3
+ require "active_admin/batch_actions/resource_extension"
4
+ require "active_admin/batch_actions/controller"
5
+
6
+ # Add our Extensions
7
+ ActiveAdmin::Resource.send :include, ActiveAdmin::BatchActions::ResourceExtension
8
+ ActiveAdmin::ResourceController.send :include, ActiveAdmin::BatchActions::Controller
9
+
10
+ # Require all the views
11
+ require "active_admin/batch_actions/views/batch_action_form"
12
+ require "active_admin/batch_actions/views/selection_cells"
13
+ require "active_admin/batch_actions/views/batch_action_selector"
14
+
15
+ # Register the views with the view factory
16
+ app.view_factory.register batch_action_selector: ActiveAdmin::BatchActions::BatchActionSelector
17
+ end
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+ module ActiveAdmin
3
+ module Callbacks
4
+ extend ActiveSupport::Concern
5
+
6
+ private
7
+
8
+ # Simple callback system. Implements before and after callbacks for
9
+ # use within the controllers.
10
+ #
11
+ # We didn't use the ActiveSupport callbacks because they do not support
12
+ # passing in any arbitrary object into the callback method (which we
13
+ # need to do)
14
+
15
+ def run_callback(method, *args)
16
+ case method
17
+ when Symbol
18
+ send(method, *args)
19
+ when Proc
20
+ instance_exec(*args, &method)
21
+ else
22
+ raise "Please register with callbacks using a symbol or a block/proc."
23
+ end
24
+ end
25
+
26
+ module ClassMethods
27
+
28
+ private
29
+
30
+ # Define a new callback.
31
+ #
32
+ # Example:
33
+ #
34
+ # class MyClassWithCallbacks
35
+ # include ActiveAdmin::Callbacks
36
+ #
37
+ # define_active_admin_callbacks :save
38
+ #
39
+ # before_save do |arg1, arg2|
40
+ # # runs before save
41
+ # end
42
+ #
43
+ # after_save :call_after_save
44
+ #
45
+ # def save
46
+ # # Will run before, yield, then after
47
+ # run_save_callbacks :arg1, :arg2 do
48
+ # save!
49
+ # end
50
+ # end
51
+ #
52
+ # protected
53
+ #
54
+ # def call_after_save(arg1, arg2)
55
+ # # runs after save
56
+ # end
57
+ # end
58
+ #
59
+ def define_active_admin_callbacks(*names)
60
+ names.each do |name|
61
+ [:before, :after].each do |type|
62
+ callback_name = "#{type}_#{name}_callbacks"
63
+ callback_ivar = "@#{callback_name}"
64
+
65
+ # def self.before_create_callbacks
66
+ singleton_class.send :define_method, callback_name do
67
+ instance_variable_get(callback_ivar) || instance_variable_set(callback_ivar, [])
68
+ end
69
+ singleton_class.send :private, callback_name
70
+
71
+ # def self.before_create
72
+ singleton_class.send :define_method, "#{type}_#{name}" do |method = nil, &block|
73
+ send(callback_name).push method || block
74
+ end
75
+ end
76
+
77
+ # def run_create_callbacks
78
+ define_method "run_#{name}_callbacks" do |*args, &block|
79
+ self.class.send("before_#{name}_callbacks").each { |cbk| run_callback(cbk, *args) }
80
+ value = block.try :call
81
+ self.class.send("after_#{name}_callbacks").each { |cbk| run_callback(cbk, *args) }
82
+ return value
83
+ end
84
+ send :private, "run_#{name}_callbacks"
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+ unless ActiveAdmin::Dependency.cancan? || ActiveAdmin::Dependency.cancancan?
3
+ ActiveAdmin::Dependency.cancan!
4
+ end
5
+
6
+ require "cancan"
7
+
8
+ # Add a setting to the application to configure the ability
9
+ ActiveAdmin::Application.inheritable_setting :cancan_ability_class, "Ability"
10
+
11
+ module ActiveAdmin
12
+
13
+ class CanCanAdapter < AuthorizationAdapter
14
+
15
+ def authorized?(action, subject = nil)
16
+ cancan_ability.can?(action, subject)
17
+ end
18
+
19
+ def cancan_ability
20
+ @cancan_ability ||= initialize_cancan_ability
21
+ end
22
+
23
+ def scope_collection(collection, action = ActiveAdmin::Auth::READ)
24
+ collection.accessible_by(cancan_ability, action)
25
+ end
26
+
27
+ private
28
+
29
+ def initialize_cancan_ability
30
+ klass = resource.namespace.cancan_ability_class
31
+ klass = klass.constantize if klass.is_a? String
32
+ klass.new user
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+ module ActiveAdmin
3
+ # This class decorates a collection of objects delegating
4
+ # mehods to behave like an Array. It's used to decouple ActiveAdmin
5
+ # from Draper and thus being able to use PORO decorators as well.
6
+ #
7
+ # It's implementation is heavily based on the Draper::CollectionDecorator
8
+ # https://github.com/drapergem/draper/blob/aaa06bd2f1e219838b241a5534e7ca513edd1fe2/lib/draper/collection_decorator.rb
9
+ class CollectionDecorator
10
+ # @return the collection being decorated.
11
+ attr_reader :object
12
+
13
+ # @return [Class] the decorator class used to decorate each item, as set by {#initialize}.
14
+ attr_reader :decorator_class
15
+
16
+ array_methods = Array.instance_methods - Object.instance_methods
17
+ delegate :==, :as_json, *array_methods, to: :decorated_collection
18
+
19
+ def initialize(object, with:)
20
+ @object = object
21
+ @decorator_class = with
22
+ end
23
+
24
+ class << self
25
+ alias_method :decorate, :new
26
+ end
27
+
28
+ def decorated_collection
29
+ @decorated_collection ||= object.map { |item| decorator_class.new(item) }
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ module ActiveAdmin
3
+ class Component < Arbre::Component
4
+
5
+ end
6
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+ module ActiveAdmin
3
+ class ControllerAction
4
+ attr_reader :name
5
+ def initialize(name, options = {})
6
+ @name = name
7
+ @options = options
8
+ end
9
+
10
+ def http_verb
11
+ @options[:method] ||= :get
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,144 @@
1
+ # frozen_string_literal: true
2
+ module ActiveAdmin
3
+ # CSVBuilder stores CSV configuration
4
+ #
5
+ # Usage example:
6
+ #
7
+ # csv_builder = CSVBuilder.new
8
+ # csv_builder.column :id
9
+ # csv_builder.column("Name") { |resource| resource.full_name }
10
+ # csv_builder.column(:name, humanize_name: false)
11
+ # csv_builder.column("name", humanize_name: false) { |resource| resource.full_name }
12
+ #
13
+ # csv_builder = CSVBuilder.new col_sep: ";"
14
+ # csv_builder = CSVBuilder.new humanize_name: false
15
+ # csv_builder.column :id
16
+ #
17
+ #
18
+ class CSVBuilder
19
+
20
+ # Return a default CSVBuilder for a resource
21
+ # The CSVBuilder's columns would be Id followed by this
22
+ # resource's content columns
23
+ def self.default_for_resource(resource)
24
+ new resource: resource do
25
+ column :id
26
+ resource.content_columns.each { |c| column c }
27
+ end
28
+ end
29
+
30
+ attr_reader :columns, :options, :view_context
31
+
32
+ COLUMN_TRANSITIVE_OPTIONS = [:humanize_name].freeze
33
+
34
+ def initialize(options = {}, &block)
35
+ @resource = options.delete(:resource)
36
+ @columns = []
37
+ @options = ActiveAdmin.application.csv_options.merge options
38
+ @block = block
39
+ end
40
+
41
+ def column(name, options = {}, &block)
42
+ @columns << Column.new(name, @resource, column_transitive_options.merge(options), block)
43
+ end
44
+
45
+ def build(controller, csv)
46
+ columns = exec_columns controller.view_context
47
+ bom = options[:byte_order_mark]
48
+ column_names = options.delete(:column_names) { true }
49
+ csv_options = options.except :encoding_options, :humanize_name, :byte_order_mark
50
+
51
+ csv << bom if bom
52
+
53
+ if column_names
54
+ csv << CSV.generate_line(columns.map { |c| sanitize(encode(c.name, options)) }, **csv_options)
55
+ end
56
+
57
+ controller.send(:in_paginated_batches) do |resource|
58
+ csv << CSV.generate_line(build_row(resource, columns, options), **csv_options)
59
+ end
60
+
61
+ csv
62
+ end
63
+
64
+ def exec_columns(view_context = nil)
65
+ @view_context = view_context
66
+ @columns = [] # we want to re-render these every instance
67
+ instance_exec &@block if @block.present?
68
+ columns
69
+ end
70
+
71
+ def build_row(resource, columns, options)
72
+ columns.map do |column|
73
+ sanitize(encode(call_method_or_proc_on(resource, column.data), options))
74
+ end
75
+ end
76
+
77
+ def encode(content, options)
78
+ if options[:encoding]
79
+ if options[:encoding_options]
80
+ content.to_s.encode options[:encoding], **options[:encoding_options]
81
+ else
82
+ content.to_s.encode options[:encoding]
83
+ end
84
+ else
85
+ content
86
+ end
87
+ end
88
+
89
+ def sanitize(content)
90
+ Sanitizer.sanitize(content)
91
+ end
92
+
93
+ def method_missing(method, *args, &block)
94
+ if @view_context.respond_to? method
95
+ @view_context.public_send method, *args, &block
96
+ else
97
+ super
98
+ end
99
+ end
100
+
101
+ class Column
102
+ attr_reader :name, :data, :options
103
+
104
+ DEFAULT_OPTIONS = { humanize_name: true }
105
+
106
+ def initialize(name, resource = nil, options = {}, block = nil)
107
+ @options = options.reverse_merge(DEFAULT_OPTIONS)
108
+ @name = humanize_name(name, resource, @options[:humanize_name])
109
+ @data = block || name.to_sym
110
+ end
111
+
112
+ def humanize_name(name, resource, humanize_name_option)
113
+ if humanize_name_option
114
+ name.is_a?(Symbol) && resource ? resource.resource_class.human_attribute_name(name) : name.to_s.humanize
115
+ else
116
+ name.to_s
117
+ end
118
+ end
119
+ end
120
+
121
+ private
122
+
123
+ def column_transitive_options
124
+ @column_transitive_options ||= @options.slice(*COLUMN_TRANSITIVE_OPTIONS)
125
+ end
126
+ end
127
+
128
+ # Prevents CSV Injection according to https://owasp.org/www-community/attacks/CSV_Injection
129
+ module Sanitizer
130
+ extend self
131
+
132
+ ATTACK_CHARACTERS = ["=", "+", "-", "@", "\t", "\r"].freeze
133
+
134
+ def sanitize(value)
135
+ return "'#{value}" if require_sanitization?(value)
136
+
137
+ value
138
+ end
139
+
140
+ def require_sanitization?(value)
141
+ value.is_a?(String) && value.starts_with?(*ATTACK_CHARACTERS)
142
+ end
143
+ end
144
+ end