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,22 @@
1
+ # frozen_string_literal: true
2
+ module ActiveAdmin
3
+ module Filters
4
+ module DSL
5
+
6
+ # For docs, please see ActiveAdmin::Filters::ResourceExtension#add_filter
7
+ def filter(attribute, options = {})
8
+ config.add_filter(attribute, options)
9
+ end
10
+
11
+ # For docs, please see ActiveAdmin::Filters::ResourceExtension#remove_filter
12
+ def remove_filter(*attributes)
13
+ config.remove_filter(*attributes)
14
+ end
15
+
16
+ # For docs, please see ActiveAdmin::Filters::ResourceExtension#preserve_default_filters!
17
+ def preserve_default_filters!
18
+ config.preserve_default_filters!
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+ module ActiveAdmin
3
+ module Filters
4
+ # This form builder defines methods to build filter forms such
5
+ # as the one found in the sidebar of the index page of a standard resource.
6
+ class FormBuilder < ::ActiveAdmin::FormBuilder
7
+ include ::ActiveAdmin::Filters::FormtasticAddons
8
+ self.input_namespaces = [::Object, ::ActiveAdmin::Inputs::Filters, ::ActiveAdmin::Inputs, ::Formtastic::Inputs]
9
+
10
+ # TODO: remove input class finders after formtastic 4 (where it will be default)
11
+ self.input_class_finder = ::Formtastic::InputClassFinder
12
+
13
+ def filter(method, options = {})
14
+ if method.present? && options[:as] ||= default_input_type(method)
15
+ template.concat input(method, options)
16
+ end
17
+ end
18
+
19
+ protected
20
+
21
+ # Returns the default filter type for a given attribute. If you want
22
+ # to use a custom search method, you have to specify the type yourself.
23
+ def default_input_type(method, options = {})
24
+ if method =~ /_(eq|cont|start|end)\z/
25
+ :string
26
+ elsif klass._ransackers.key?(method.to_s)
27
+ klass._ransackers[method.to_s].type
28
+ elsif reflection_for(method) || polymorphic_foreign_type?(method)
29
+ :select
30
+ elsif column = column_for(method)
31
+ case column.type
32
+ when :date, :datetime
33
+ :date_range
34
+ when :string, :text, :citext
35
+ :string
36
+ when :integer, :float, :decimal
37
+ :numeric
38
+ when :boolean
39
+ :boolean
40
+ end
41
+ end
42
+ end
43
+ end
44
+
45
+ # This module is included into the view
46
+ module ViewHelper
47
+
48
+ # Helper method to render a filter form
49
+ def active_admin_filters_form_for(search, filters, options = {})
50
+ defaults = { builder: ActiveAdmin::Filters::FormBuilder,
51
+ url: collection_path,
52
+ html: { class: "filter_form" } }
53
+ required = { html: { method: :get },
54
+ as: :q }
55
+ options = defaults.deep_merge(options).deep_merge(required)
56
+
57
+ form_for search, options do |f|
58
+ filters.each do |attribute, opts|
59
+ next if opts.key?(:if) && !call_method_or_proc_on(self, opts[:if])
60
+ next if opts.key?(:unless) && call_method_or_proc_on(self, opts[:unless])
61
+
62
+ filter_opts = opts.except(:if, :unless)
63
+ filter_opts[:input_html] = instance_exec(&filter_opts[:input_html]) if filter_opts[:input_html].is_a?(Proc)
64
+
65
+ f.filter attribute, filter_opts
66
+ end
67
+
68
+ buttons = content_tag :div, class: "buttons" do
69
+ f.submit(I18n.t("active_admin.filters.buttons.filter")) +
70
+ link_to(I18n.t("active_admin.filters.buttons.clear"), "#", class: "clear_filters_btn") +
71
+ hidden_field_tags_for(params, except: except_hidden_fields)
72
+ end
73
+
74
+ f.template.concat buttons
75
+ end
76
+ end
77
+
78
+ private
79
+
80
+ def except_hidden_fields
81
+ [:q, :page]
82
+ end
83
+ end
84
+
85
+ end
86
+ end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+ module ActiveAdmin
3
+ module Filters
4
+ module FormtasticAddons
5
+
6
+ #
7
+ # The below are Formtastic method overrides that jump inside of the Ransack
8
+ # search object to get at the object being searched upon.
9
+ #
10
+
11
+ def humanized_method_name
12
+ if klass.respond_to?(:human_attribute_name)
13
+ klass.human_attribute_name(method)
14
+ else
15
+ method.to_s.public_send(builder.label_str_method)
16
+ end
17
+ end
18
+
19
+ def reflection_for(method)
20
+ klass.reflect_on_association(method) if klass.respond_to? :reflect_on_association
21
+ end
22
+
23
+ def column_for(method)
24
+ klass.columns_hash[method.to_s] if klass.respond_to? :columns_hash
25
+ end
26
+
27
+ def column
28
+ column_for method
29
+ end
30
+
31
+ #
32
+ # The below are custom methods that Formtastic does not provide.
33
+ #
34
+
35
+ # The resource class, unwrapped from Ransack
36
+ def klass
37
+ @object.object.klass
38
+ end
39
+
40
+ def polymorphic_foreign_type?(method)
41
+ klass.reflect_on_all_associations.select { |r| r.macro == :belongs_to && r.options[:polymorphic] }
42
+ .map(&:foreign_type).include? method.to_s
43
+ end
44
+
45
+ #
46
+ # These help figure out whether the given method or association will be recognized by Ransack.
47
+ #
48
+
49
+ def searchable_has_many_through?
50
+ if klass.ransackable_associations.include?(method.to_s) && reflection && reflection.options[:through]
51
+ reflection.through_reflection.klass.ransackable_attributes.include? reflection.foreign_key
52
+ else
53
+ false
54
+ end
55
+ end
56
+
57
+ def seems_searchable?
58
+ column_for(method).nil? && (has_predicate? || scope?)
59
+ end
60
+
61
+ # If the given method has a predicate (like _eq or _lteq), it's pretty
62
+ # likely we're dealing with a valid search method.
63
+ def has_predicate?
64
+ !!Ransack::Predicate.detect_from_string(method.to_s)
65
+ end
66
+
67
+ # Ransack supports exposing selected scopes on your model for advanced searches.
68
+ def scope?
69
+ context = Ransack::Context.for klass
70
+ context.respond_to?(:ransackable_scope?) && context.ransackable_scope?(method.to_s, klass)
71
+ end
72
+
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,180 @@
1
+ # frozen_string_literal: true
2
+ module ActiveAdmin
3
+ module Filters
4
+
5
+ class Disabled < RuntimeError
6
+ def initialize(action)
7
+ super "Cannot #{action} a filter when filters are disabled. Enable filters with 'config.filters = true'"
8
+ end
9
+ end
10
+
11
+ module ResourceExtension
12
+
13
+ def initialize(*)
14
+ super
15
+ add_filters_sidebar_section
16
+ add_search_status_sidebar_section
17
+ end
18
+
19
+ # Returns the filters for this resource. If filters are not enabled,
20
+ # it will always return an empty hash.
21
+ #
22
+ # @return [Hash] Filters that apply for this resource
23
+ def filters
24
+ filters_enabled? ? filter_lookup : {}
25
+ end
26
+
27
+ # Setter to enable / disable filters on this resource.
28
+ #
29
+ # Set to `nil` to inherit the setting from the namespace
30
+ def filters=(bool)
31
+ @filters_enabled = bool
32
+ end
33
+
34
+ # Setter to enable/disable showing current filters on this resource.
35
+ #
36
+ # Set to `nil` to inherit the setting from the namespace
37
+ def current_filters=(bool)
38
+ @current_filters_enabled = bool
39
+ end
40
+
41
+ # @return [Boolean] If filters are enabled for this resource
42
+ def filters_enabled?
43
+ @filters_enabled.nil? ? namespace.filters : @filters_enabled
44
+ end
45
+
46
+ # @return [Boolean] If show current filters are enabled for this resource
47
+ def current_filters_enabled?
48
+ @current_filters_enabled.nil? ? namespace.current_filters : @current_filters_enabled
49
+ end
50
+
51
+ def preserve_default_filters!
52
+ @preserve_default_filters = true
53
+ end
54
+
55
+ def preserve_default_filters?
56
+ @preserve_default_filters == true
57
+ end
58
+
59
+ # Remove a filter for this resource. If filters are not enabled, this method
60
+ # will raise a RuntimeError
61
+ #
62
+ # @param [Symbol] attributes The attributes to not filter on
63
+ def remove_filter(*attributes)
64
+ raise Disabled, "remove" unless filters_enabled?
65
+
66
+ attributes.each { |attribute| (@filters_to_remove ||= []) << attribute.to_sym }
67
+ end
68
+
69
+ # Add a filter for this resource. If filters are not enabled, this method
70
+ # will raise a RuntimeError
71
+ #
72
+ # @param [Symbol] attribute The attribute to filter on
73
+ # @param [Hash] options The set of options that are passed through to
74
+ # ransack for the field definition.
75
+ def add_filter(attribute, options = {})
76
+ raise Disabled, "add" unless filters_enabled?
77
+
78
+ (@filters ||= {})[attribute.to_sym] = options
79
+ end
80
+
81
+ # Reset the filters to use defaults
82
+ def reset_filters!
83
+ @filters = nil
84
+ @filters_to_remove = nil
85
+ end
86
+
87
+ private
88
+
89
+ # Collapses the waveform, if you will, of which filters should be displayed.
90
+ # Removes filters and adds in default filters as desired.
91
+ def filter_lookup
92
+ filters = @filters.try(:dup) || {}
93
+
94
+ if filters.empty? || preserve_default_filters?
95
+ default_filters.each do |f|
96
+ filters[f] ||= {}
97
+ end
98
+ end
99
+
100
+ if @filters_to_remove
101
+ @filters_to_remove.each &filters.method(:delete)
102
+ end
103
+
104
+ filters
105
+ end
106
+
107
+ # @return [Array] The array of default filters for this resource
108
+ def default_filters
109
+ result = []
110
+ result.concat default_association_filters if namespace.include_default_association_filters
111
+ result.concat content_columns
112
+ result.concat custom_ransack_filters
113
+ result
114
+ end
115
+
116
+ def custom_ransack_filters
117
+ if resource_class.respond_to?(:_ransackers)
118
+ resource_class._ransackers.keys.map(&:to_sym)
119
+ else
120
+ []
121
+ end
122
+ end
123
+
124
+ # Returns a default set of filters for the associations
125
+ def default_association_filters
126
+ if resource_class.respond_to?(:reflect_on_all_associations)
127
+ poly, not_poly = resource_class.reflect_on_all_associations.partition { |r| r.macro == :belongs_to && r.options[:polymorphic] }
128
+
129
+ # remove deeply nested associations
130
+ not_poly.reject! { |r| r.chain.length > 2 }
131
+
132
+ filters = poly.map(&:foreign_type) + not_poly.map(&:name)
133
+
134
+ # Check high-arity associations for filterable columns
135
+ max = namespace.maximum_association_filter_arity
136
+ if max != :unlimited
137
+ high_arity, low_arity = not_poly.partition do |r|
138
+ r.klass.reorder(nil).limit(max + 1).count > max
139
+ end
140
+
141
+ # Remove high-arity associations with no searchable column
142
+ high_arity = high_arity.select(&method(:searchable_column_for))
143
+
144
+ high_arity = high_arity.map { |r| r.name.to_s + "_" + searchable_column_for(r) + namespace.filter_method_for_large_association }
145
+
146
+ filters = poly.map(&:foreign_type) + low_arity.map(&:name) + high_arity
147
+ end
148
+
149
+ filters.map &:to_sym
150
+ else
151
+ []
152
+ end
153
+ end
154
+
155
+ def search_columns
156
+ @search_columns ||= namespace.filter_columns_for_large_association.map(&:to_s)
157
+ end
158
+
159
+ def searchable_column_for(relation)
160
+ relation.klass.column_names.find { |name| search_columns.include?(name) }
161
+ end
162
+
163
+ def add_filters_sidebar_section
164
+ self.sidebar_sections << filters_sidebar_section
165
+ end
166
+
167
+ def filters_sidebar_section
168
+ ActiveAdmin::SidebarSection.new :filters, only: :index, if: -> { active_admin_config.filters.any? } do
169
+ active_admin_filters_form_for assigns[:search], **active_admin_config.filters
170
+ end
171
+ end
172
+
173
+ def add_search_status_sidebar_section
174
+ self.sidebar_sections << ActiveAdmin::Filters::ActiveSidebar.new
175
+ end
176
+
177
+ end
178
+
179
+ end
180
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+ require "active_admin/filters/dsl"
3
+ require "active_admin/filters/resource_extension"
4
+ require "active_admin/filters/formtastic_addons"
5
+ require "active_admin/filters/forms"
6
+ require "active_admin/helpers/optional_display"
7
+ require "active_admin/filters/active_sidebar"
8
+
9
+ # Add our Extensions
10
+ ActiveAdmin::ResourceDSL.send :include, ActiveAdmin::Filters::DSL
11
+ ActiveAdmin::Resource.send :include, ActiveAdmin::Filters::ResourceExtension
12
+ ActiveAdmin::ViewHelpers.send :include, ActiveAdmin::Filters::ViewHelper
@@ -0,0 +1,186 @@
1
+ # frozen_string_literal: true
2
+ # Provides an intuitive way to build has_many associated records in the same form.
3
+ module Formtastic
4
+ module Inputs
5
+ module Base
6
+ def input_wrapping(&block)
7
+ html = super
8
+ template.concat(html) if template.output_buffer && template.assigns[:has_many_block]
9
+ html
10
+ end
11
+ end
12
+ end
13
+ end
14
+
15
+ module ActiveAdmin
16
+ class FormBuilder < ::Formtastic::FormBuilder
17
+
18
+ self.input_namespaces = [::Object, ::ActiveAdmin::Inputs, ::Formtastic::Inputs]
19
+
20
+ # TODO: remove both class finders after formtastic 4 (where it will be default)
21
+ self.input_class_finder = ::Formtastic::InputClassFinder
22
+ self.action_class_finder = ::Formtastic::ActionClassFinder
23
+
24
+ def cancel_link(url = { action: "index" }, html_options = {}, li_attrs = {})
25
+ li_attrs[:class] ||= "cancel"
26
+ li_content = template.link_to I18n.t("active_admin.cancel"), url, html_options
27
+ template.content_tag(:li, li_content, li_attrs)
28
+ end
29
+
30
+ attr_accessor :already_in_an_inputs_block
31
+
32
+ def has_many(assoc, options = {}, &block)
33
+ HasManyBuilder.new(self, assoc, options).render(&block)
34
+ end
35
+ end
36
+
37
+ # Decorates a FormBuilder with the additional attributes and methods
38
+ # to build a has_many block. Nested has_many blocks are handled by
39
+ # nested decorators.
40
+ class HasManyBuilder < SimpleDelegator
41
+ attr_reader :assoc
42
+ attr_reader :options
43
+ attr_reader :heading, :sortable_column, :sortable_start
44
+ attr_reader :new_record, :destroy_option, :remove_record
45
+
46
+ def initialize(has_many_form, assoc, options)
47
+ super has_many_form
48
+ @assoc = assoc
49
+ @options = extract_custom_settings!(options.dup)
50
+ @options.reverse_merge!(for: assoc)
51
+ @options[:class] = [options[:class], "inputs has_many_fields"].compact.join(" ")
52
+
53
+ if sortable_column
54
+ @options[:for] = [assoc, sorted_children(sortable_column)]
55
+ end
56
+ end
57
+
58
+ def render(&block)
59
+ html = "".html_safe
60
+ html << template.content_tag(:h3) { heading } if heading.present?
61
+ html << template.capture { content_has_many(&block) }
62
+ html = wrap_div_or_li(html)
63
+ template.concat(html) if template.output_buffer
64
+ html
65
+ end
66
+
67
+ protected
68
+
69
+ # remove options that should not render as attributes
70
+ def extract_custom_settings!(options)
71
+ @heading = options.key?(:heading) ? options.delete(:heading) : default_heading
72
+ @sortable_column = options.delete(:sortable)
73
+ @sortable_start = options.delete(:sortable_start) || 0
74
+ @new_record = options.key?(:new_record) ? options.delete(:new_record) : true
75
+ @destroy_option = options.delete(:allow_destroy)
76
+ @remove_record = options.delete(:remove_record)
77
+ options
78
+ end
79
+
80
+ def default_heading
81
+ assoc_klass.model_name.
82
+ human(count: ::ActiveAdmin::Helpers::I18n::PLURAL_MANY_COUNT)
83
+ end
84
+
85
+ def assoc_klass
86
+ @assoc_klass ||= __getobj__.object.class.reflect_on_association(assoc).klass
87
+ end
88
+
89
+ def content_has_many(&block)
90
+ form_block = proc do |form_builder|
91
+ render_has_many_form(form_builder, options[:parent], &block)
92
+ end
93
+
94
+ template.assigns[:has_many_block] = true
95
+ contents = without_wrapper { inputs(options, &form_block) }
96
+ contents ||= "".html_safe
97
+
98
+ js = new_record ? js_for_has_many(&form_block) : ""
99
+ contents << js
100
+ end
101
+
102
+ # Renders the Formtastic inputs then appends ActiveAdmin delete and sort actions.
103
+ def render_has_many_form(form_builder, parent, &block)
104
+ index = parent && form_builder.send(:parent_child_index, parent)
105
+ template.concat template.capture { yield(form_builder, index) }
106
+ template.concat has_many_actions(form_builder, "".html_safe)
107
+ end
108
+
109
+ def has_many_actions(form_builder, contents)
110
+ if form_builder.object.new_record?
111
+ contents << template.content_tag(:li) do
112
+ remove_text = remove_record.is_a?(String) ? remove_record : I18n.t("active_admin.has_many_remove")
113
+ template.link_to remove_text, "#", class: "button has_many_remove"
114
+ end
115
+ elsif allow_destroy?(form_builder.object)
116
+ form_builder.input(
117
+ :_destroy, as: :boolean,
118
+ wrapper_html: { class: "has_many_delete" },
119
+ label: I18n.t("active_admin.has_many_delete"))
120
+ end
121
+
122
+ if sortable_column
123
+ form_builder.input sortable_column, as: :hidden
124
+
125
+ contents << template.content_tag(:li, class: "handle") do
126
+ I18n.t("active_admin.move")
127
+ end
128
+ end
129
+
130
+ contents
131
+ end
132
+
133
+ def allow_destroy?(form_object)
134
+ !! case destroy_option
135
+ when Symbol, String
136
+ form_object.public_send destroy_option
137
+ when Proc
138
+ destroy_option.call form_object
139
+ else
140
+ destroy_option
141
+ end
142
+ end
143
+
144
+ def sorted_children(column)
145
+ __getobj__.object.public_send(assoc).sort_by do |o|
146
+ attribute = o.public_send column
147
+ [attribute.nil? ? Float::INFINITY : attribute, o.id || Float::INFINITY]
148
+ end
149
+ end
150
+
151
+ def without_wrapper
152
+ is_being_wrapped = already_in_an_inputs_block
153
+ self.already_in_an_inputs_block = false
154
+
155
+ html = yield
156
+
157
+ self.already_in_an_inputs_block = is_being_wrapped
158
+ html
159
+ end
160
+
161
+ # Capture the ADD JS
162
+ def js_for_has_many(&form_block)
163
+ assoc_name = assoc_klass.model_name
164
+ placeholder = "NEW_#{assoc_name.to_s.underscore.upcase.tr('/', '_')}_RECORD"
165
+ opts = options.merge(
166
+ for: [assoc, assoc_klass.new],
167
+ for_options: { child_index: placeholder }
168
+ )
169
+ html = template.capture { __getobj__.send(:inputs_for_nested_attributes, opts, &form_block) }
170
+ text = new_record.is_a?(String) ? new_record : I18n.t("active_admin.has_many_new", model: assoc_name.human)
171
+
172
+ template.link_to text, "#", class: "button has_many_add", data: {
173
+ html: CGI.escapeHTML(html).html_safe, placeholder: placeholder
174
+ }
175
+ end
176
+
177
+ def wrap_div_or_li(html)
178
+ template.content_tag(
179
+ already_in_an_inputs_block ? :li : :div,
180
+ html,
181
+ class: "has_many_container #{assoc}",
182
+ "data-sortable" => sortable_column,
183
+ "data-sortable-start" => sortable_start)
184
+ end
185
+ end
186
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+ module ActiveAdmin
3
+ module Generators
4
+ class Boilerplate
5
+ def initialize(class_name)
6
+ @class_name = class_name
7
+ end
8
+
9
+ def attributes
10
+ @class_name.constantize.new.attributes.keys
11
+ end
12
+
13
+ def assignable_attributes
14
+ attributes - %w(id created_at updated_at)
15
+ end
16
+
17
+ def permit_params
18
+ assignable_attributes.map { |a| a.to_sym.inspect }.join(", ")
19
+ end
20
+
21
+ def rows
22
+ attributes.map { |a| row(a) }.join("\n ")
23
+ end
24
+
25
+ def row(name)
26
+ "# row :#{name.gsub(/_id$/, '')}"
27
+ end
28
+
29
+ def columns
30
+ attributes.map { |a| column(a) }.join("\n ")
31
+ end
32
+
33
+ def column(name)
34
+ "# column :#{name.gsub(/_id$/, '')}"
35
+ end
36
+
37
+ def filters
38
+ attributes.map { |a| filter(a) }.join("\n ")
39
+ end
40
+
41
+ def filter(name)
42
+ "# filter :#{name.gsub(/_id$/, '')}"
43
+ end
44
+
45
+ def form_inputs
46
+ assignable_attributes.map { |a| form_input(a) }.join("\n ")
47
+ end
48
+
49
+ def form_input(name)
50
+ "# f.input :#{name.gsub(/_id$/, '')}"
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+ module ActiveAdmin
3
+ module Helpers
4
+ module Collection
5
+ # 1. removes `select` and `order` to prevent invalid SQL
6
+ # 2. correctly handles the Hash returned when `group by` is used
7
+ def collection_size(c = collection)
8
+ return c.count if c.is_a?(Array)
9
+ return c.length if c.limit_value
10
+
11
+ c = c.except :select, :order
12
+
13
+ c.group_values.present? ? c.count.count : c.count
14
+ end
15
+
16
+ def collection_is_empty?(c = collection)
17
+ collection_size(c) == 0
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+ module ActiveAdmin
3
+ module Helpers
4
+ module I18n
5
+ PLURAL_MANY_COUNT = 2.1
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+ module ActiveAdmin
3
+
4
+ # Shareable module to give a #display_on?(action) method
5
+ # which returns true or false depending on an options hash.
6
+ #
7
+ # The options hash accepts:
8
+ #
9
+ # only: :index
10
+ # only: [:index, :show]
11
+ # except: :index
12
+ # except: [:index, :show]
13
+ #
14
+ # call #normalize_display_options! after @options has been set
15
+ # to ensure that the display options are setup correctly
16
+
17
+ module OptionalDisplay
18
+ def display_on?(action, render_context = self)
19
+ return false if @options[:only] && !@options[:only].include?(action.to_sym)
20
+ return false if @options[:except] && @options[:except].include?(action.to_sym)
21
+
22
+ case condition = @options[:if]
23
+ when Symbol, String
24
+ render_context.public_send condition
25
+ when Proc
26
+ render_context.instance_exec &condition
27
+ else
28
+ true
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def normalize_display_options!
35
+ @options[:only] = Array(@options[:only]) if @options[:only]
36
+ @options[:except] = Array(@options[:except]) if @options[:except]
37
+ end
38
+ end
39
+ end