activeadmin 1.0.0.pre1 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (595) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +587 -939
  3. data/CODE_OF_CONDUCT.md +74 -0
  4. data/CONTRIBUTING.md +110 -59
  5. data/LICENSE +0 -5
  6. data/README.md +80 -61
  7. data/app/assets/javascripts/active_admin/base.js +517 -0
  8. data/app/assets/stylesheets/active_admin/_base.scss +31 -34
  9. data/app/assets/stylesheets/active_admin/_forms.scss +33 -35
  10. data/app/assets/stylesheets/active_admin/_header.scss +40 -8
  11. data/app/assets/stylesheets/active_admin/_mixins.scss +1 -1
  12. data/app/assets/stylesheets/active_admin/_normalize.scss +447 -0
  13. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +0 -5
  14. data/app/assets/stylesheets/active_admin/components/_buttons.scss +0 -5
  15. data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
  16. data/app/assets/stylesheets/active_admin/components/_pagination.scss +11 -0
  17. data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
  18. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -4
  19. data/app/assets/stylesheets/active_admin/components/_tables.scss +5 -3
  20. data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
  21. data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -11
  22. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
  23. data/app/assets/stylesheets/active_admin/mixins/_sections.scss +0 -1
  24. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +1 -1
  25. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +9 -1
  26. data/app/assets/stylesheets/active_admin/print.scss +3 -4
  27. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +1 -1
  28. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +0 -5
  29. data/app/javascript/active_admin/base.js +28 -0
  30. data/app/javascript/active_admin/ext/jquery-ui.js +7 -0
  31. data/app/javascript/active_admin/ext/jquery.js +9 -0
  32. data/app/javascript/active_admin/initializers/batch-actions.js +61 -0
  33. data/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
  34. data/app/javascript/active_admin/initializers/datepicker.js +16 -0
  35. data/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
  36. data/app/javascript/active_admin/initializers/filters.js +10 -0
  37. data/app/javascript/active_admin/initializers/has-many.js +95 -0
  38. data/app/javascript/active_admin/initializers/per-page.js +13 -0
  39. data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
  40. data/app/javascript/active_admin/initializers/tabs.js +6 -0
  41. data/app/javascript/active_admin/lib/checkbox-toggler.js +49 -0
  42. data/app/javascript/active_admin/lib/dropdown-menu.js +116 -0
  43. data/app/javascript/active_admin/lib/filters.js +39 -0
  44. data/app/javascript/active_admin/lib/modal-dialog.js +63 -0
  45. data/app/javascript/active_admin/lib/per-page.js +38 -0
  46. data/app/javascript/active_admin/lib/table-checkbox-toggler.js +38 -0
  47. data/app/javascript/active_admin/lib/utils.js +40 -0
  48. data/app/views/active_admin/devise/confirmations/new.html.erb +2 -2
  49. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  50. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +2 -2
  51. data/app/views/active_admin/devise/passwords/edit.html.erb +2 -2
  52. data/app/views/active_admin/devise/passwords/new.html.erb +2 -2
  53. data/app/views/active_admin/devise/registrations/new.html.erb +3 -4
  54. data/app/views/active_admin/devise/sessions/new.html.erb +2 -2
  55. data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
  56. data/app/views/active_admin/devise/shared/_links.erb +12 -6
  57. data/app/views/active_admin/devise/unlocks/new.html.erb +2 -2
  58. data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
  59. data/app/views/kaminari/active_admin/_gap.html.erb +8 -0
  60. data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
  61. data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
  62. data/app/views/kaminari/active_admin/_page.html.erb +12 -0
  63. data/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
  64. data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
  65. data/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
  66. data/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
  67. data/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
  68. data/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
  69. data/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
  70. data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
  71. data/app/views/layouts/active_admin_logged_out.html.erb +21 -7
  72. data/config/locales/ar.yml +62 -47
  73. data/config/locales/az.yml +138 -0
  74. data/config/locales/bg.yml +1 -3
  75. data/config/locales/bs.yml +1 -2
  76. data/config/locales/ca.yml +2 -4
  77. data/config/locales/cs.yml +1 -2
  78. data/config/locales/da.yml +45 -14
  79. data/config/locales/de-CH.yml +4 -3
  80. data/config/locales/de.yml +46 -3
  81. data/config/locales/el.yml +3 -4
  82. data/config/locales/en-CA.yml +139 -0
  83. data/config/locales/en-GB.yml +46 -5
  84. data/config/locales/en.yml +44 -9
  85. data/config/locales/eo.yml +145 -0
  86. data/config/locales/es-MX.yml +9 -6
  87. data/config/locales/es.yml +63 -14
  88. data/config/locales/fa.yml +1 -2
  89. data/config/locales/fi.yml +2 -3
  90. data/config/locales/fr.yml +36 -8
  91. data/config/locales/he.yml +53 -7
  92. data/config/locales/hr.yml +1 -2
  93. data/config/locales/hu.yml +6 -3
  94. data/config/locales/id.yml +135 -0
  95. data/config/locales/it.yml +49 -4
  96. data/config/locales/ja.yml +31 -7
  97. data/config/locales/ko.yml +66 -36
  98. data/config/locales/lt.yml +27 -6
  99. data/config/locales/lv.yml +3 -4
  100. data/config/locales/mk.yml +134 -0
  101. data/config/locales/nb.yml +22 -8
  102. data/config/locales/nl.yml +26 -3
  103. data/config/locales/pl.yml +75 -5
  104. data/config/locales/pt-BR.yml +24 -2
  105. data/config/locales/pt-PT.yml +1 -2
  106. data/config/locales/ro.yml +1 -2
  107. data/config/locales/ru.yml +21 -4
  108. data/config/locales/sk.yml +168 -0
  109. data/config/locales/sv-SE.yml +50 -8
  110. data/config/locales/tr.yml +92 -45
  111. data/config/locales/uk.yml +30 -16
  112. data/config/locales/vi.yml +53 -12
  113. data/config/locales/zh-CN.yml +44 -7
  114. data/config/locales/zh-TW.yml +42 -3
  115. data/docs/.gitignore +1 -0
  116. data/docs/0-installation.md +68 -18
  117. data/docs/1-general-configuration.md +88 -4
  118. data/docs/10-custom-pages.md +56 -2
  119. data/docs/11-decorators.md +20 -5
  120. data/docs/12-arbre-components.md +75 -11
  121. data/docs/13-authorization-adapter.md +73 -36
  122. data/docs/14-gotchas.md +64 -18
  123. data/docs/2-resource-customization.md +91 -23
  124. data/docs/3-index-pages/custom-index.md +5 -1
  125. data/docs/3-index-pages/index-as-block.md +3 -5
  126. data/docs/3-index-pages/index-as-blog.md +4 -6
  127. data/docs/3-index-pages/index-as-grid.md +3 -5
  128. data/docs/3-index-pages/index-as-table.md +46 -9
  129. data/docs/3-index-pages.md +73 -10
  130. data/docs/4-csv-format.md +35 -0
  131. data/docs/5-forms.md +96 -18
  132. data/docs/6-show-pages.md +13 -25
  133. data/docs/7-sidebars.md +13 -1
  134. data/docs/8-custom-actions.md +18 -1
  135. data/docs/9-batch-actions.md +9 -5
  136. data/docs/CNAME +1 -0
  137. data/docs/Gemfile +3 -0
  138. data/docs/Gemfile.lock +259 -0
  139. data/docs/_config.yml +4 -0
  140. data/docs/_includes/footer.html +8 -0
  141. data/docs/_includes/google-analytics.html +16 -0
  142. data/docs/_includes/head.html +7 -0
  143. data/docs/_includes/toc.html +98 -0
  144. data/docs/_includes/top-menu.html +17 -0
  145. data/docs/_layouts/default.html +21 -0
  146. data/docs/documentation.md +60 -0
  147. data/docs/images/activeadmin.png +0 -0
  148. data/docs/images/code-header.png +0 -0
  149. data/docs/images/divider.png +0 -0
  150. data/docs/images/features.png +0 -0
  151. data/docs/images/tidelift.svg +14 -0
  152. data/docs/index.html +226 -0
  153. data/docs/stylesheets/main.css +1205 -0
  154. data/lib/active_admin/abstract_view_factory.rb +13 -51
  155. data/lib/active_admin/application.rb +105 -138
  156. data/lib/active_admin/application_settings.rb +42 -0
  157. data/lib/active_admin/authorization_adapter.rb +4 -7
  158. data/lib/active_admin/base_controller/authorization.rb +16 -21
  159. data/lib/active_admin/base_controller/menu.rb +10 -10
  160. data/lib/active_admin/base_controller.rb +15 -11
  161. data/lib/active_admin/batch_actions/controller.rb +6 -7
  162. data/lib/active_admin/batch_actions/resource_extension.rb +15 -15
  163. data/lib/active_admin/batch_actions/views/batch_action_form.rb +4 -4
  164. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +8 -7
  165. data/lib/active_admin/batch_actions/views/selection_cells.rb +7 -6
  166. data/lib/active_admin/batch_actions.rb +0 -1
  167. data/lib/active_admin/callbacks.rb +2 -2
  168. data/lib/active_admin/cancan_adapter.rb +1 -1
  169. data/lib/active_admin/collection_decorator.rb +31 -0
  170. data/lib/active_admin/controller_action.rb +2 -1
  171. data/lib/active_admin/csv_builder.rb +30 -20
  172. data/lib/active_admin/dependency.rb +36 -29
  173. data/lib/active_admin/deprecation.rb +0 -25
  174. data/lib/active_admin/devise.rb +9 -9
  175. data/lib/active_admin/dsl.rb +5 -18
  176. data/lib/active_admin/dynamic_setting.rb +38 -0
  177. data/lib/active_admin/dynamic_settings_node.rb +28 -0
  178. data/lib/active_admin/engine.rb +14 -7
  179. data/lib/active_admin/error.rb +6 -6
  180. data/lib/active_admin/filters/active.rb +29 -0
  181. data/lib/active_admin/filters/active_filter.rb +123 -0
  182. data/lib/active_admin/filters/active_sidebar.rb +54 -0
  183. data/lib/active_admin/filters/forms.rb +17 -10
  184. data/lib/active_admin/filters/formtastic_addons.rb +2 -7
  185. data/lib/active_admin/filters/resource_extension.rb +50 -14
  186. data/lib/active_admin/filters.rb +7 -5
  187. data/lib/active_admin/form_builder.rb +112 -67
  188. data/lib/active_admin/generators/boilerplate.rb +53 -0
  189. data/lib/active_admin/helpers/collection.rb +2 -0
  190. data/lib/active_admin/helpers/optional_display.rb +2 -2
  191. data/lib/active_admin/helpers/routes/url_helpers.rb +1 -1
  192. data/lib/active_admin/helpers/scope_chain.rb +1 -0
  193. data/lib/active_admin/inputs/datepicker_input.rb +13 -6
  194. data/lib/active_admin/inputs/filters/base/search_method_select.rb +9 -9
  195. data/lib/active_admin/inputs/filters/base.rb +3 -1
  196. data/lib/active_admin/inputs/filters/boolean_input.rb +1 -1
  197. data/lib/active_admin/inputs/filters/check_boxes_input.rb +1 -1
  198. data/lib/active_admin/inputs/filters/date_picker_input.rb +13 -0
  199. data/lib/active_admin/inputs/filters/date_range_input.rb +25 -9
  200. data/lib/active_admin/inputs/filters/select_input.rb +8 -4
  201. data/lib/active_admin/inputs/filters/text_input.rb +25 -0
  202. data/lib/active_admin/inputs.rb +2 -0
  203. data/lib/active_admin/localizers/resource_localizer.rb +35 -0
  204. data/lib/active_admin/localizers.rb +11 -0
  205. data/lib/active_admin/menu.rb +13 -15
  206. data/lib/active_admin/menu_collection.rb +0 -2
  207. data/lib/active_admin/menu_item.rb +10 -38
  208. data/lib/active_admin/namespace.rb +51 -32
  209. data/lib/active_admin/namespace_settings.rb +126 -0
  210. data/lib/active_admin/order_clause.rb +30 -8
  211. data/lib/active_admin/orm/active_record/comments/comment.rb +6 -20
  212. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +44 -21
  213. data/lib/active_admin/orm/active_record/comments/views.rb +2 -2
  214. data/lib/active_admin/orm/active_record/comments.rb +49 -29
  215. data/lib/active_admin/orm/active_record.rb +1 -1
  216. data/lib/active_admin/page.rb +24 -5
  217. data/lib/active_admin/page_controller.rb +2 -2
  218. data/lib/active_admin/page_dsl.rb +5 -1
  219. data/lib/active_admin/page_presenter.rb +2 -1
  220. data/lib/active_admin/pundit_adapter.rb +22 -9
  221. data/lib/active_admin/resource/action_items.rb +34 -12
  222. data/lib/active_admin/resource/attributes.rb +47 -0
  223. data/lib/active_admin/resource/belongs_to.rb +17 -4
  224. data/lib/active_admin/resource/controllers.rb +1 -1
  225. data/lib/active_admin/resource/menu.rb +9 -6
  226. data/lib/active_admin/resource/model.rb +15 -0
  227. data/lib/active_admin/resource/naming.rb +5 -5
  228. data/lib/active_admin/resource/ordering.rb +11 -0
  229. data/lib/active_admin/resource/page_presenters.rb +1 -1
  230. data/lib/active_admin/resource/pagination.rb +4 -0
  231. data/lib/active_admin/resource/routes.rb +56 -26
  232. data/lib/active_admin/resource/scope_to.rb +7 -7
  233. data/lib/active_admin/resource/scopes.rb +5 -3
  234. data/lib/active_admin/resource/sidebars.rb +2 -2
  235. data/lib/active_admin/resource.rb +80 -22
  236. data/lib/active_admin/resource_collection.rb +5 -3
  237. data/lib/active_admin/resource_controller/action_builder.rb +10 -0
  238. data/lib/active_admin/resource_controller/data_access.rb +56 -43
  239. data/lib/active_admin/resource_controller/decorators.rb +9 -31
  240. data/lib/active_admin/resource_controller/polymorphic_routes.rb +37 -0
  241. data/lib/active_admin/resource_controller/resource_class_methods.rb +2 -0
  242. data/lib/active_admin/resource_controller/scoping.rb +1 -1
  243. data/lib/active_admin/resource_controller/streaming.rb +12 -5
  244. data/lib/active_admin/resource_controller.rb +26 -10
  245. data/lib/active_admin/resource_dsl.rb +67 -21
  246. data/lib/active_admin/router.rb +90 -82
  247. data/lib/active_admin/scope.rb +21 -14
  248. data/lib/active_admin/settings_node.rb +19 -0
  249. data/lib/active_admin/sidebar_section.rb +6 -12
  250. data/lib/active_admin/version.rb +1 -1
  251. data/lib/active_admin/view_factory.rb +17 -18
  252. data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -2
  253. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +5 -5
  254. data/lib/active_admin/view_helpers/display_helper.rb +51 -9
  255. data/lib/active_admin/view_helpers/download_format_links_helper.rb +14 -1
  256. data/lib/active_admin/view_helpers/fields_for.rb +4 -4
  257. data/lib/active_admin/view_helpers/form_helper.rb +2 -2
  258. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +11 -4
  259. data/lib/active_admin/view_helpers/scope_name_helper.rb +16 -0
  260. data/lib/active_admin/view_helpers.rb +2 -2
  261. data/lib/active_admin/views/action_items.rb +1 -1
  262. data/lib/active_admin/views/components/active_admin_form.rb +45 -13
  263. data/lib/active_admin/views/components/attributes_table.rb +11 -29
  264. data/lib/active_admin/views/components/blank_slate.rb +1 -1
  265. data/lib/active_admin/views/components/columns.rb +12 -7
  266. data/lib/active_admin/views/components/dropdown_menu.rb +11 -13
  267. data/lib/active_admin/views/components/index_list.rb +6 -5
  268. data/lib/active_admin/views/components/menu.rb +32 -0
  269. data/lib/active_admin/views/components/menu_item.rb +58 -0
  270. data/lib/active_admin/views/components/paginated_collection.rb +52 -33
  271. data/lib/active_admin/views/components/panel.rb +2 -4
  272. data/lib/active_admin/views/components/scopes.rb +20 -12
  273. data/lib/active_admin/views/components/sidebar.rb +13 -0
  274. data/lib/active_admin/views/components/sidebar_section.rb +6 -1
  275. data/lib/active_admin/views/components/site_title.rb +6 -7
  276. data/lib/active_admin/views/components/status_tag.rb +19 -23
  277. data/lib/active_admin/views/components/table_for.rb +31 -57
  278. data/lib/active_admin/views/components/tabs.rb +17 -5
  279. data/lib/active_admin/views/footer.rb +15 -4
  280. data/lib/active_admin/views/header.rb +3 -16
  281. data/lib/active_admin/views/index_as_blog.rb +3 -4
  282. data/lib/active_admin/views/index_as_grid.rb +28 -28
  283. data/lib/active_admin/views/index_as_table.rb +76 -28
  284. data/lib/active_admin/views/pages/base.rb +45 -58
  285. data/lib/active_admin/views/pages/form.rb +5 -2
  286. data/lib/active_admin/views/pages/index.rb +15 -13
  287. data/lib/active_admin/views/pages/layout.rb +1 -1
  288. data/lib/active_admin/views/pages/show.rb +9 -3
  289. data/lib/active_admin/views/tabbed_navigation.rb +4 -59
  290. data/lib/active_admin/views/title_bar.rb +6 -6
  291. data/lib/active_admin/views.rb +1 -1
  292. data/lib/active_admin.rb +69 -67
  293. data/lib/activeadmin.rb +1 -1
  294. data/lib/generators/active_admin/assets/assets_generator.rb +3 -3
  295. data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
  296. data/lib/generators/active_admin/assets/templates/{active_admin.css.scss → active_admin.scss} +3 -3
  297. data/lib/generators/active_admin/devise/devise_generator.rb +17 -26
  298. data/lib/generators/active_admin/install/install_generator.rb +18 -8
  299. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +107 -5
  300. data/lib/generators/active_admin/install/templates/{admin_user.rb.erb → admin_users.rb.erb} +1 -3
  301. data/lib/generators/active_admin/install/templates/dashboard.rb +2 -3
  302. data/lib/generators/active_admin/install/templates/migrations/{create_active_admin_comments.rb → create_active_admin_comments.rb.erb} +2 -5
  303. data/lib/generators/active_admin/page/page_generator.rb +1 -1
  304. data/lib/generators/active_admin/page/templates/page.rb +1 -1
  305. data/lib/generators/active_admin/resource/resource_generator.rb +8 -2
  306. data/lib/generators/active_admin/resource/templates/admin.rb.erb +46 -0
  307. data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
  308. data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
  309. data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
  310. data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
  311. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +26 -0
  312. data/lib/ransack_ext.rb +11 -3
  313. data/vendor/assets/javascripts/jquery-ui/data.js +41 -0
  314. data/vendor/assets/javascripts/jquery-ui/disable-selection.js +48 -0
  315. data/vendor/assets/javascripts/jquery-ui/escape-selector.js +23 -0
  316. data/vendor/assets/javascripts/jquery-ui/focusable.js +86 -0
  317. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
  318. data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
  319. data/vendor/assets/javascripts/jquery-ui/ie.js +17 -0
  320. data/vendor/assets/javascripts/jquery-ui/keycode.js +47 -0
  321. data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
  322. data/vendor/assets/javascripts/jquery-ui/plugin.js +46 -0
  323. data/vendor/assets/javascripts/jquery-ui/position.js +500 -0
  324. data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +42 -0
  325. data/vendor/assets/javascripts/jquery-ui/safe-blur.js +23 -0
  326. data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +47 -0
  327. data/vendor/assets/javascripts/jquery-ui/tabbable.js +38 -0
  328. data/vendor/assets/javascripts/jquery-ui/unique-id.js +51 -0
  329. data/vendor/assets/javascripts/jquery-ui/version.js +17 -0
  330. data/vendor/assets/javascripts/jquery-ui/widget.js +735 -0
  331. data/vendor/assets/javascripts/jquery-ui/widgets/button.js +391 -0
  332. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +291 -0
  333. data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +300 -0
  334. data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +2123 -0
  335. data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +954 -0
  336. data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +1259 -0
  337. data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +230 -0
  338. data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +1207 -0
  339. data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +1561 -0
  340. data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +931 -0
  341. metadata +182 -553
  342. data/.gitignore +0 -49
  343. data/.hound.yml +0 -11
  344. data/.travis.yml +0 -42
  345. data/.yardopts +0 -8
  346. data/Gemfile +0 -54
  347. data/Guardfile +0 -8
  348. data/Rakefile +0 -33
  349. data/activeadmin.gemspec +0 -28
  350. data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
  351. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  352. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  353. data/app/assets/images/active_admin/orderable.png +0 -0
  354. data/app/assets/javascripts/active_admin/application.js.coffee +0 -32
  355. data/app/assets/javascripts/active_admin/base.js.coffee +0 -14
  356. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
  357. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
  358. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -39
  359. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -36
  360. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -101
  361. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
  362. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
  363. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -37
  364. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -27
  365. data/app/assets/javascripts/active_admin/lib/popover.js.coffee +0 -68
  366. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -24
  367. data/app/assets/stylesheets/active_admin/components/_popovers.scss +0 -122
  368. data/app/assets/stylesheets/active_admin/mixins/_icons.scss +0 -20
  369. data/app/assets/stylesheets/active_admin/mixins/_reset.scss +0 -165
  370. data/cucumber.yml +0 -3
  371. data/features/action_item.feature +0 -73
  372. data/features/authorization.feature +0 -64
  373. data/features/authorization_cancan.feature +0 -52
  374. data/features/authorization_pundit.feature +0 -37
  375. data/features/belongs_to.feature +0 -66
  376. data/features/breadcrumb.feature +0 -75
  377. data/features/comments/commenting.feature +0 -171
  378. data/features/comments/viewing_index.feature +0 -19
  379. data/features/dashboard.feature +0 -16
  380. data/features/decorators.feature +0 -41
  381. data/features/development_reloading.feature +0 -30
  382. data/features/edit_page.feature +0 -117
  383. data/features/favicon.feature +0 -20
  384. data/features/first_boot.feature +0 -16
  385. data/features/global_navigation.feature +0 -29
  386. data/features/i18n.feature +0 -43
  387. data/features/index/batch_actions.feature +0 -164
  388. data/features/index/filters.feature +0 -161
  389. data/features/index/format_as_csv.feature +0 -203
  390. data/features/index/formats.feature +0 -66
  391. data/features/index/index_as_block.feature +0 -15
  392. data/features/index/index_as_blog.feature +0 -69
  393. data/features/index/index_as_grid.feature +0 -45
  394. data/features/index/index_as_table.feature +0 -291
  395. data/features/index/index_blank_slate.feature +0 -83
  396. data/features/index/index_parameters.feature +0 -75
  397. data/features/index/index_scope_to.feature +0 -56
  398. data/features/index/index_scopes.feature +0 -251
  399. data/features/index/page_title.feature +0 -41
  400. data/features/index/pagination.feature +0 -59
  401. data/features/index/switch_index_view.feature +0 -73
  402. data/features/menu.feature +0 -53
  403. data/features/new_page.feature +0 -109
  404. data/features/registering_assets.feature +0 -35
  405. data/features/registering_pages.feature +0 -148
  406. data/features/registering_resources.feature +0 -33
  407. data/features/renamed_resource.feature +0 -32
  408. data/features/root_to.feature +0 -17
  409. data/features/show/default_content.feature +0 -43
  410. data/features/show/page_title.feature +0 -58
  411. data/features/show/tabs.feature +0 -27
  412. data/features/sidebar_sections.feature +0 -210
  413. data/features/site_title.feature +0 -47
  414. data/features/specifying_actions.feature +0 -93
  415. data/features/step_definitions/action_item_steps.rb +0 -7
  416. data/features/step_definitions/action_link_steps.rb +0 -20
  417. data/features/step_definitions/additional_web_steps.rb +0 -81
  418. data/features/step_definitions/asset_steps.rb +0 -15
  419. data/features/step_definitions/attribute_steps.rb +0 -18
  420. data/features/step_definitions/batch_action_steps.rb +0 -72
  421. data/features/step_definitions/blog_steps.rb +0 -3
  422. data/features/step_definitions/breadcrumb_steps.rb +0 -3
  423. data/features/step_definitions/comment_steps.rb +0 -12
  424. data/features/step_definitions/configuration_steps.rb +0 -100
  425. data/features/step_definitions/dashboard_steps.rb +0 -15
  426. data/features/step_definitions/factory_steps.rb +0 -34
  427. data/features/step_definitions/filter_steps.rb +0 -39
  428. data/features/step_definitions/flash_steps.rb +0 -11
  429. data/features/step_definitions/format_steps.rb +0 -52
  430. data/features/step_definitions/i18n_steps.rb +0 -3
  431. data/features/step_definitions/index_scope_steps.rb +0 -21
  432. data/features/step_definitions/index_views_steps.rb +0 -3
  433. data/features/step_definitions/layout_steps.rb +0 -3
  434. data/features/step_definitions/member_link_steps.rb +0 -7
  435. data/features/step_definitions/menu_steps.rb +0 -11
  436. data/features/step_definitions/pagination_steps.rb +0 -7
  437. data/features/step_definitions/sidebar_steps.rb +0 -13
  438. data/features/step_definitions/site_title_steps.rb +0 -17
  439. data/features/step_definitions/symbol_leak_steps.rb +0 -3
  440. data/features/step_definitions/tab_steps.rb +0 -8
  441. data/features/step_definitions/table_steps.rb +0 -119
  442. data/features/step_definitions/user_steps.rb +0 -45
  443. data/features/step_definitions/web_steps.rb +0 -85
  444. data/features/sti_resource.feature +0 -65
  445. data/features/strong_parameters.feature +0 -73
  446. data/features/support/env.rb +0 -145
  447. data/features/support/paths.rb +0 -71
  448. data/features/support/selectors.rb +0 -45
  449. data/features/symbol_leak.feature +0 -35
  450. data/features/users/logging_in.feature +0 -34
  451. data/features/users/logging_out.feature +0 -13
  452. data/features/users/resetting_password.feature +0 -34
  453. data/lib/active_admin/batch_actions/views/batch_action_popover.rb +0 -28
  454. data/lib/active_admin/event.rb +0 -33
  455. data/lib/active_admin/helpers/settings.rb +0 -115
  456. data/lib/active_admin/iconic/icons.rb +0 -142
  457. data/lib/active_admin/iconic.rb +0 -53
  458. data/lib/active_admin/view_helpers/icon_helper.rb +0 -12
  459. data/lib/active_admin/views/components/action_list_popover.rb +0 -29
  460. data/lib/active_admin/views/components/popover.rb +0 -27
  461. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
  462. data/lib/generators/active_admin/resource/templates/admin.rb +0 -18
  463. data/script/local +0 -44
  464. data/script/travis_cache +0 -107
  465. data/script/use_rails +0 -53
  466. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +0 -50
  467. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +0 -25
  468. data/spec/javascripts/coffeescripts/jquery.aa.popover-spec.js.coffee +0 -82
  469. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +0 -34
  470. data/spec/javascripts/fixtures/checkboxes.html +0 -9
  471. data/spec/javascripts/fixtures/flashes.html +0 -2
  472. data/spec/javascripts/fixtures/table_checkboxes.html +0 -17
  473. data/spec/javascripts/helpers/SpecHelper.js +0 -3
  474. data/spec/javascripts/support/jasmine.yml +0 -74
  475. data/spec/javascripts/support/jasmine_config.rb +0 -23
  476. data/spec/javascripts/support/jasmine_runner.rb +0 -32
  477. data/spec/rails_helper.rb +0 -154
  478. data/spec/requests/default_namespace_spec.rb +0 -61
  479. data/spec/requests/javascript_spec.rb +0 -20
  480. data/spec/requests/memory_spec.rb +0 -23
  481. data/spec/requests/stylesheets_spec.rb +0 -18
  482. data/spec/spec_helper.rb +0 -17
  483. data/spec/support/deferred_garbage_collection.rb +0 -19
  484. data/spec/support/detect_rails_version.rb +0 -34
  485. data/spec/support/integration_example_group.rb +0 -31
  486. data/spec/support/jslint.yml +0 -80
  487. data/spec/support/rails_template.rb +0 -138
  488. data/spec/support/rails_template_with_data.rb +0 -59
  489. data/spec/support/templates/admin/stores.rb +0 -9
  490. data/spec/support/templates/cucumber.rb +0 -24
  491. data/spec/support/templates/cucumber_with_reloading.rb +0 -5
  492. data/spec/support/templates/en.yml +0 -8
  493. data/spec/support/templates/policies/active_admin/comment_policy.rb +0 -9
  494. data/spec/support/templates/policies/active_admin/page_policy.rb +0 -18
  495. data/spec/support/templates/policies/admin_user_policy.rb +0 -11
  496. data/spec/support/templates/policies/application_policy.rb +0 -45
  497. data/spec/support/templates/policies/category_policy.rb +0 -7
  498. data/spec/support/templates/policies/post_policy.rb +0 -15
  499. data/spec/support/templates/policies/store_policy.rb +0 -11
  500. data/spec/support/templates/policies/user_policy.rb +0 -11
  501. data/spec/support/templates/post_decorator.rb +0 -11
  502. data/spec/unit/abstract_view_factory_spec.rb +0 -79
  503. data/spec/unit/action_builder_spec.rb +0 -132
  504. data/spec/unit/active_admin_spec.rb +0 -11
  505. data/spec/unit/application_spec.rb +0 -140
  506. data/spec/unit/asset_registration_spec.rb +0 -52
  507. data/spec/unit/authorization/authorization_adapter_spec.rb +0 -61
  508. data/spec/unit/authorization/controller_authorization_spec.rb +0 -39
  509. data/spec/unit/authorization/index_overriding_spec.rb +0 -22
  510. data/spec/unit/auto_link_spec.rb +0 -69
  511. data/spec/unit/batch_actions/resource_spec.rb +0 -92
  512. data/spec/unit/batch_actions/settings_spec.rb +0 -61
  513. data/spec/unit/belongs_to_spec.rb +0 -51
  514. data/spec/unit/cancan_adapter_spec.rb +0 -43
  515. data/spec/unit/comments_spec.rb +0 -166
  516. data/spec/unit/component_spec.rb +0 -18
  517. data/spec/unit/config_shared_examples.rb +0 -59
  518. data/spec/unit/controller_filters_spec.rb +0 -44
  519. data/spec/unit/csv_builder_spec.rb +0 -244
  520. data/spec/unit/dependency_spec.rb +0 -135
  521. data/spec/unit/devise_spec.rb +0 -96
  522. data/spec/unit/dsl_spec.rb +0 -122
  523. data/spec/unit/event_spec.rb +0 -47
  524. data/spec/unit/filters/filter_form_builder_spec.rb +0 -433
  525. data/spec/unit/filters/resource_spec.rb +0 -121
  526. data/spec/unit/form_builder_spec.rb +0 -752
  527. data/spec/unit/generators/install_spec.rb +0 -23
  528. data/spec/unit/helpers/collection_spec.rb +0 -65
  529. data/spec/unit/helpers/scope_chain_spec.rb +0 -36
  530. data/spec/unit/helpers/settings_spec.rb +0 -30
  531. data/spec/unit/i18n_spec.rb +0 -12
  532. data/spec/unit/menu_collection_spec.rb +0 -62
  533. data/spec/unit/menu_item_spec.rb +0 -143
  534. data/spec/unit/menu_spec.rb +0 -71
  535. data/spec/unit/namespace/authorization_spec.rb +0 -27
  536. data/spec/unit/namespace/register_page_spec.rb +0 -74
  537. data/spec/unit/namespace/register_resource_spec.rb +0 -161
  538. data/spec/unit/namespace_spec.rb +0 -103
  539. data/spec/unit/order_clause_spec.rb +0 -81
  540. data/spec/unit/page_controller_spec.rb +0 -5
  541. data/spec/unit/page_spec.rb +0 -78
  542. data/spec/unit/pretty_format_spec.rb +0 -63
  543. data/spec/unit/pundit_adapter_spec.rb +0 -98
  544. data/spec/unit/resource/action_items_spec.rb +0 -65
  545. data/spec/unit/resource/includes_spec.rb +0 -21
  546. data/spec/unit/resource/menu_spec.rb +0 -18
  547. data/spec/unit/resource/naming_spec.rb +0 -122
  548. data/spec/unit/resource/page_presenters_spec.rb +0 -44
  549. data/spec/unit/resource/pagination_spec.rb +0 -38
  550. data/spec/unit/resource/routes_spec.rb +0 -73
  551. data/spec/unit/resource/scopes_spec.rb +0 -50
  552. data/spec/unit/resource/sidebars_spec.rb +0 -43
  553. data/spec/unit/resource_collection_spec.rb +0 -158
  554. data/spec/unit/resource_controller/data_access_spec.rb +0 -140
  555. data/spec/unit/resource_controller/decorators_spec.rb +0 -83
  556. data/spec/unit/resource_controller/sidebars_spec.rb +0 -45
  557. data/spec/unit/resource_controller_spec.rb +0 -269
  558. data/spec/unit/resource_registration_spec.rb +0 -56
  559. data/spec/unit/resource_spec.rb +0 -278
  560. data/spec/unit/routing_spec.rb +0 -180
  561. data/spec/unit/scope_spec.rb +0 -190
  562. data/spec/unit/settings_spec.rb +0 -118
  563. data/spec/unit/view_factory_spec.rb +0 -21
  564. data/spec/unit/view_helpers/breadcrumbs_spec.rb +0 -217
  565. data/spec/unit/view_helpers/display_name_spec.rb +0 -69
  566. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +0 -39
  567. data/spec/unit/view_helpers/fields_for_spec.rb +0 -50
  568. data/spec/unit/view_helpers/flash_helper_spec.rb +0 -25
  569. data/spec/unit/view_helpers/form_helper_spec.rb +0 -43
  570. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -139
  571. data/spec/unit/views/components/action_list_popover_spec.rb +0 -40
  572. data/spec/unit/views/components/attributes_table_spec.rb +0 -272
  573. data/spec/unit/views/components/batch_action_popover_spec.rb +0 -47
  574. data/spec/unit/views/components/blank_slate_spec.rb +0 -27
  575. data/spec/unit/views/components/columns_spec.rb +0 -172
  576. data/spec/unit/views/components/index_list_spec.rb +0 -35
  577. data/spec/unit/views/components/index_table_for_spec.rb +0 -46
  578. data/spec/unit/views/components/paginated_collection_spec.rb +0 -236
  579. data/spec/unit/views/components/panel_spec.rb +0 -62
  580. data/spec/unit/views/components/popover_spec.rb +0 -33
  581. data/spec/unit/views/components/sidebar_section_spec.rb +0 -47
  582. data/spec/unit/views/components/site_title_spec.rb +0 -78
  583. data/spec/unit/views/components/status_tag_spec.rb +0 -235
  584. data/spec/unit/views/components/table_for_spec.rb +0 -384
  585. data/spec/unit/views/components/tabs_spec.rb +0 -39
  586. data/spec/unit/views/components/unsupported_browser_spec.rb +0 -47
  587. data/spec/unit/views/pages/form_spec.rb +0 -42
  588. data/spec/unit/views/pages/index_spec.rb +0 -60
  589. data/spec/unit/views/pages/layout_spec.rb +0 -59
  590. data/spec/unit/views/pages/show_spec.rb +0 -33
  591. data/spec/unit/views/tabbed_navigation_spec.rb +0 -158
  592. data/tasks/docs.rake +0 -37
  593. data/tasks/parallel_tests.rake +0 -66
  594. data/tasks/test.rake +0 -83
  595. data/tasks/yard.rake +0 -9
@@ -1,752 +0,0 @@
1
- require 'rails_helper'
2
- require "rspec/mocks/standalone"
3
-
4
- describe ActiveAdmin::FormBuilder do
5
-
6
- # Setup an ActionView::Base object which can be used for
7
- # generating the form for.
8
- let(:helpers) do
9
- view = action_view
10
- def view.posts_path
11
- "/posts"
12
- end
13
-
14
- def view.protect_against_forgery?
15
- false
16
- end
17
-
18
- def view.url_for(*args)
19
- if args.first == {action: "index"}
20
- posts_path
21
- else
22
- super
23
- end
24
- end
25
-
26
- def view.a_helper_method
27
- "A Helper Method"
28
- end
29
-
30
- view
31
- end
32
-
33
- def build_form(options = {}, form_object = Post.new, &block)
34
- options = {url: helpers.posts_path}.merge(options)
35
-
36
- form = render_arbre_component({form_object: form_object, form_options: options, form_block: block}, helpers) do
37
- active_admin_form_for(assigns[:form_object], assigns[:form_options], &assigns[:form_block])
38
- end.to_s
39
-
40
- Capybara.string(form)
41
- end
42
-
43
- context "in general" do
44
- context "it without custom settings" do
45
- let :body do
46
- build_form do |f|
47
- f.inputs do
48
- f.input :title
49
- f.input :body
50
- end
51
- end
52
- end
53
-
54
- it "should generate a fieldset with a inputs class" do
55
- expect(body).to have_selector("fieldset.inputs")
56
- end
57
- end
58
-
59
- context "it with custom settings" do
60
- let :body do
61
- build_form do |f|
62
- f.inputs class: "custom_class" do
63
- f.input :title
64
- f.input :body
65
- end
66
- end
67
- end
68
-
69
- it "should generate a fieldset with a inputs and custom class" do
70
- expect(body).to have_selector("fieldset.inputs.custom_class")
71
- end
72
- end
73
- end
74
-
75
- context "in general with actions" do
76
- let :body do
77
- build_form do |f|
78
- f.inputs do
79
- f.input :title
80
- f.input :body
81
- end
82
- f.actions do
83
- f.action :submit, label: "Submit Me"
84
- f.action :submit, label: "Another Button"
85
- end
86
- end
87
- end
88
-
89
- it "should generate a text input" do
90
- expect(body).to have_selector("input[type=text][name='post[title]']")
91
- end
92
- it "should generate a textarea" do
93
- expect(body).to have_selector("textarea[name='post[body]']")
94
- end
95
- it "should only generate the form once" do
96
- expect(body).to have_selector("form", count: 1)
97
- end
98
- it "should generate actions" do
99
- expect(body).to have_selector("input[type=submit][value='Submit Me']")
100
- expect(body).to have_selector("input[type=submit][value='Another Button']")
101
- end
102
- end
103
-
104
- context "when polymorphic relationship" do
105
- it "should raise error" do
106
- expect {
107
- comment = ActiveAdmin::Comment.new
108
- build_form({url: "admins/comments"}, comment) do |f|
109
- f.inputs :resource
110
- end
111
- }.to raise_error(Formtastic::PolymorphicInputWithoutCollectionError)
112
- end
113
- end
114
-
115
- describe "passing in options with actions" do
116
- let :body do
117
- build_form html: { multipart: true } do |f|
118
- f.inputs :title
119
- f.actions
120
- end
121
- end
122
- it "should pass the options on to the form" do
123
- expect(body).to have_selector("form[enctype='multipart/form-data']")
124
- end
125
- end
126
-
127
- if Rails::VERSION::MAJOR > 3
128
- context "file input present" do
129
- let :body do
130
- build_form do |f|
131
- f.input :body, as: :file
132
- end
133
- end
134
-
135
- it "adds multipart attribute automatically" do
136
- expect(body).to have_selector("form[enctype='multipart/form-data']")
137
- end
138
- end
139
- end
140
-
141
- context "with actions" do
142
- it "should generate the form once" do
143
- body = build_form do |f|
144
- f.inputs do
145
- f.input :title
146
- end
147
- f.actions
148
- end
149
- expect(body).to have_selector("[id=post_title]", count: 1)
150
- end
151
- it "should generate one button and a cancel link" do
152
- body = build_form do |f|
153
- f.actions
154
- end
155
- expect(body).to have_selector("[type=submit]", count: 1)
156
- expect(body).to have_selector("[class=cancel]", count: 1)
157
- end
158
- it "should generate multiple actions" do
159
- body = build_form do |f|
160
- f.actions do
161
- f.action :submit, label: "Create & Continue"
162
- f.action :submit, label: "Create & Edit"
163
- end
164
- end
165
- expect(body).to have_selector("[type=submit]", count: 2)
166
- expect(body).to have_selector("[class=cancel]", count: 0)
167
- end
168
-
169
- end
170
-
171
- context "with Arbre inside" do
172
- it "should render the Arbre in the expected place" do
173
- body = build_form do |f|
174
- div do
175
- h1 'Heading'
176
- end
177
- f.inputs do
178
- span 'Top note'
179
- f.input :title
180
- span 'Bottom note'
181
- end
182
- h3 'Footer'
183
- f.actions
184
- end
185
-
186
- expect(body).to have_selector("div > h1")
187
- expect(body).to have_selector("h1", count: 1)
188
- expect(body).to have_selector(".inputs > ol > span")
189
- expect(body).to have_selector("span", count: 2)
190
- end
191
- it "should allow a simplified syntax" do
192
- body = build_form do |f|
193
- div do
194
- h1 'Heading'
195
- end
196
- inputs do
197
- span 'Top note'
198
- input :title
199
- span 'Bottom note'
200
- end
201
- h3 'Footer'
202
- actions
203
- end
204
-
205
- expect(body).to have_selector("div > h1")
206
- expect(body).to have_selector("h1", count: 1)
207
- expect(body).to have_selector(".inputs > ol > span")
208
- expect(body).to have_selector("span", count: 2)
209
- end
210
- end
211
-
212
- context "without passing a block to inputs" do
213
- let :body do
214
- build_form do |f|
215
- f.inputs :title, :body
216
- end
217
- end
218
- it "should have a title input" do
219
- expect(body).to have_selector("input[type=text][name='post[title]']")
220
- end
221
- it "should have a body textarea" do
222
- expect(body).to have_selector("textarea[name='post[body]']")
223
- end
224
- end
225
-
226
- context "with semantic fields for" do
227
- let :body do
228
- build_form do |f|
229
- f.inputs do
230
- f.input :title
231
- f.input :body
232
- end
233
- f.form_builder.instance_eval do
234
- @object.author = User.new
235
- end
236
- f.semantic_fields_for :author do |author|
237
- author.inputs :first_name, :last_name
238
- end
239
- end
240
- end
241
- it "should generate a nested text input once" do
242
- expect(body).to have_selector("[id=post_author_attributes_first_name_input]", count: 1)
243
- end
244
- end
245
-
246
- context "with collection inputs" do
247
- before do
248
- User.create first_name: "John", last_name: "Doe"
249
- User.create first_name: "Jane", last_name: "Doe"
250
- end
251
-
252
- describe "as select" do
253
- let :body do
254
- build_form do |f|
255
- f.input :author, include_blank: false
256
- end
257
- end
258
- it "should create 2 options" do
259
- expect(body).to have_selector("option", count: 2)
260
- end
261
- end
262
-
263
- describe "as radio buttons" do
264
- let :body do
265
- build_form do |f|
266
- f.input :author, as: :radio
267
- end
268
- end
269
- it "should create 2 radio buttons" do
270
- expect(body).to have_selector("[type=radio]", count: 2)
271
- end
272
- end
273
-
274
- end
275
-
276
- context "with inputs 'for'" do
277
- let :body do
278
- build_form do |f|
279
- f.inputs do
280
- f.input :title
281
- f.input :body
282
- end
283
- f.form_builder.instance_eval do
284
- @object.author = User.new
285
- end
286
- f.inputs name: 'Author', for: :author do |author|
287
- author.inputs :first_name, :last_name
288
- end
289
- end
290
- end
291
- it "should generate a nested text input once" do
292
- expect(body).to have_selector("[id=post_author_attributes_first_name_input]", count: 1)
293
- expect(body).to have_selector("[id=post_author_attributes_last_name_input]", count: 1)
294
- end
295
- it "should add author first and last name fields" do
296
- expect(body).to have_selector("input[name='post[author_attributes][first_name]']")
297
- expect(body).to have_selector("input[name='post[author_attributes][last_name]']")
298
- end
299
- end
300
-
301
- context "with two input fields 'for'" do
302
- let :body do
303
- build_form do |f|
304
- f.inputs do
305
- f.input :title
306
- f.input :body
307
- end
308
- f.form_builder.instance_eval do
309
- @object.author = User.new
310
- end
311
- f.inputs name: 'Author', for: :author do |author|
312
- author.input :first_name
313
- author.input :last_name
314
- end
315
- end
316
- end
317
- it "should generate a nested text input once" do
318
- expect(body).to have_selector("[id=post_author_attributes_first_name_input]", count: 1)
319
- expect(body).to have_selector("[id=post_author_attributes_last_name_input]", count: 1)
320
- end
321
- it "should add author first and last name fields" do
322
- expect(body).to have_selector("input[name='post[author_attributes][first_name]']")
323
- expect(body).to have_selector("input[name='post[author_attributes][last_name]']")
324
- end
325
- end
326
-
327
- context "with wrapper html" do
328
- it "should set a class" do
329
- body = build_form do |f|
330
- f.input :title, wrapper_html: { class: "important" }
331
- end
332
- expect(body).to have_selector("li[class='important string input optional stringish']")
333
- end
334
- end
335
-
336
- context "with inputs twice" do
337
- let :body do
338
- build_form do |f|
339
- f.inputs do
340
- f.input :title
341
- f.input :body
342
- end
343
- f.inputs do
344
- f.input :author
345
- f.input :published_at
346
- end
347
- end
348
- end
349
- it "should render four inputs" do
350
- expect(body).to have_selector("input[name='post[title]']", count: 1)
351
- expect(body).to have_selector("textarea[name='post[body]']", count: 1)
352
- expect(body).to have_selector("select[name='post[author_id]']", count: 1)
353
- expect(body).to have_selector("select[name='post[published_at(1i)]']", count: 1)
354
- expect(body).to have_selector("select[name='post[published_at(2i)]']", count: 1)
355
- expect(body).to have_selector("select[name='post[published_at(3i)]']", count: 1)
356
- expect(body).to have_selector("select[name='post[published_at(4i)]']", count: 1)
357
- end
358
- end
359
-
360
- context "with has many inputs" do
361
- describe "with simple block" do
362
- let :body do
363
- build_form({url: '/categories'}, Category.new) do |f|
364
- f.object.posts.build
365
- f.has_many :posts do |p|
366
- p.input :title
367
- p.input :body
368
- end
369
- f.inputs
370
- end
371
- end
372
-
373
- let(:valid_html_id) { /^[A-Za-z]+[\w\-\:\.]*$/ }
374
-
375
- it "should translate the association name in header" do
376
- with_translation activerecord: {models: {post: {one: 'Blog Post', other: 'Blog Posts'}}} do
377
- expect(body).to have_selector("h3", text: "Blog Posts")
378
- end
379
- end
380
-
381
- it "should use model name when there is no translation for given model in header" do
382
- expect(body).to have_selector("h3", text: "Post")
383
- end
384
-
385
- it "should translate the association name in has many new button" do
386
- with_translation activerecord: {models: {post: {one: 'Blog Post', other: 'Blog Posts'}}} do
387
- expect(body).to have_selector("a", text: "Add New Blog Post")
388
- end
389
- end
390
-
391
- it "should translate the attribute name" do
392
- with_translation activerecord: {attributes: {post: {title: 'A very nice title'}}} do
393
- expect(body).to have_selector("label", text: "A very nice title")
394
- end
395
- end
396
-
397
- it "should use model name when there is no translation for given model in has many new button" do
398
- expect(body).to have_selector("a", text: "Add New Post")
399
- end
400
-
401
- it "should render the nested form" do
402
- expect(body).to have_selector("input[name='category[posts_attributes][0][title]']")
403
- expect(body).to have_selector("textarea[name='category[posts_attributes][0][body]']")
404
- end
405
-
406
- it "should add a link to remove new nested records" do
407
- expect(body).to have_selector(".has_many_container > fieldset > ol > li > a.button.has_many_remove[href='#']", text: "Remove")
408
- end
409
-
410
- it "should add a link to add new nested records" do
411
- expect(body).to have_selector(".has_many_container > a.button.has_many_add[href='#']", text: "Add New Post")
412
- end
413
-
414
- it "should set an HTML-id valid placeholder" do
415
- link = body.find('.has_many_container > a.button.has_many_add')
416
- expect(link[:'data-placeholder']).to match valid_html_id
417
- end
418
-
419
- describe "with namespaced model" do
420
- it "should set an HTML-id valid placeholder" do
421
- allow(Post).to receive(:name).and_return "ActiveAdmin::Post"
422
- link = body.find('.has_many_container > a.button.has_many_add')
423
- expect(link[:'data-placeholder']).to match valid_html_id
424
- end
425
- end
426
- end
427
-
428
- describe "with complex block" do
429
- let :body do
430
- build_form({url: '/categories'}, Category.new) do |f|
431
- f.object.posts.build
432
- f.has_many :posts do |p,i|
433
- p.input :title, label: "Title #{i}"
434
- end
435
- end
436
- end
437
-
438
- it "should accept a block with a second argument" do
439
- expect(body).to have_selector("label", text: "Title 1")
440
- end
441
-
442
- it "should add a custom header" do
443
- expect(body).to have_selector("h3", text: "Post")
444
- end
445
-
446
- end
447
-
448
- describe "without heading and new record link" do
449
- let :body do
450
- build_form({url: '/categories'}, Category.new) do |f|
451
- f.object.posts.build
452
- f.has_many :posts, heading: false, new_record: false do |p|
453
- p.input :title
454
- end
455
- end
456
- end
457
-
458
- it "should not add a header" do
459
- expect(body).not_to have_selector("h3", text: "Post")
460
- end
461
-
462
- it "should not add link to new nested records" do
463
- expect(body).not_to have_selector("a", text: "Add New Post")
464
- end
465
-
466
- it "should render the nested form" do
467
- expect(body).to have_selector("input[name='category[posts_attributes][0][title]']")
468
- end
469
- end
470
-
471
- describe "with custom heading" do
472
- let :body do
473
- build_form({url: '/categories'}, Category.new) do |f|
474
- f.object.posts.build
475
- f.has_many :posts, heading: "Test heading" do |p|
476
- p.input :title
477
- end
478
- end
479
- end
480
-
481
- it "should add a custom header" do
482
- expect(body).to have_selector("h3", "Test heading")
483
- end
484
-
485
- end
486
-
487
- describe "with custom new record link" do
488
- let :body do
489
- build_form({url: '/categories'}, Category.new) do |f|
490
- f.object.posts.build
491
- f.has_many :posts, new_record: 'My Custom New Post' do |p|
492
- p.input :title
493
- end
494
- end
495
- end
496
-
497
- it "should add a custom new record link" do
498
- expect(body).to have_selector("a", text: "My Custom New Post")
499
- end
500
-
501
- end
502
-
503
- describe "with allow destroy" do
504
- context "with an existing post" do
505
- let :body do
506
- build_form({url: '/categories'}, Category.new) do |f|
507
- allow(f.object.posts.build).to receive(:new_record?).and_return(false)
508
- f.has_many :posts, allow_destroy: true do |p|
509
- p.input :title
510
- end
511
- end
512
- end
513
-
514
- it "should include a boolean field for _destroy" do
515
- expect(body).to have_selector("input[name='category[posts_attributes][0][_destroy]']")
516
- end
517
-
518
- it "should have a check box with 'Remove' as its label" do
519
- expect(body).to have_selector("label[for=category_posts_attributes_0__destroy]", text: "Delete")
520
- end
521
-
522
- it "should wrap the destroy field in an li with class 'has_many_delete'" do
523
- expect(body).to have_selector(".has_many_container > fieldset > ol > li.has_many_delete > input", count: 1)
524
- end
525
- end
526
-
527
- context "with a new post" do
528
- let :body do
529
- build_form({url: '/categories'}, Category.new) do |f|
530
- f.object.posts.build
531
- f.has_many :posts, allow_destroy: true do |p|
532
- p.input :title
533
- end
534
- end
535
- end
536
-
537
- it "should not have a boolean field for _destroy" do
538
- expect(body).not_to have_selector("input[name='category[posts_attributes][0][_destroy]']")
539
- end
540
-
541
- it "should not have a check box with 'Remove' as its label" do
542
- expect(body).not_to have_selector("label[for=category_posts_attributes_0__destroy]", text: "Remove")
543
- end
544
- end
545
- end
546
-
547
- describe "sortable" do
548
- # TODO: it doesn't make any sense to use your foreign key as something that's sortable (and therefore editable)
549
- context "with a new post" do
550
- let :body do
551
- build_form({url: '/categories'}, Category.new) do |f|
552
- f.object.posts.build
553
- f.has_many :posts, sortable: :position do |p|
554
- p.input :title
555
- end
556
- end
557
- end
558
-
559
- it "shows the nested fields for unsaved records" do
560
- expect(body).to have_selector("fieldset.inputs.has_many_fields")
561
- end
562
-
563
- end
564
-
565
- context "with post returning nil for the sortable attribute" do
566
- let :body do
567
- build_form({url: '/categories'}, Category.new) do |f|
568
- f.object.posts.build position: 3
569
- f.object.posts.build
570
- f.has_many :posts, sortable: :position do |p|
571
- p.input :title
572
- end
573
- end
574
- end
575
-
576
- it "shows the nested fields for unsaved records" do
577
- expect(body).to have_selector("fieldset.inputs.has_many_fields")
578
- end
579
-
580
- end
581
-
582
- context "with existing and new posts" do
583
- let! :category do
584
- Category.create name: 'Name'
585
- end
586
- let! :post do
587
- category.posts.create
588
- end
589
- let :body do
590
- build_form({url: '/categories'}, category) do |f|
591
- f.object.posts.build
592
- f.has_many :posts, sortable: :position do |p|
593
- p.input :title
594
- end
595
- end
596
- end
597
-
598
- it "shows the nested fields for saved and unsaved records" do
599
- expect(body).to have_selector("fieldset.inputs.has_many_fields")
600
- end
601
- end
602
-
603
- context "without sortable_start set" do
604
- let :body do
605
- build_form({url: '/categories'}, Category.new) do |f|
606
- f.object.posts.build
607
- f.has_many :posts, sortable: :position do |p|
608
- p.input :title
609
- end
610
- end
611
- end
612
-
613
- it "defaults to 0" do
614
- expect(body).to have_selector("div.has_many_container[data-sortable-start='0']")
615
- end
616
- end
617
-
618
- context "with sortable_start set" do
619
- let :body do
620
- build_form({url: '/categories'}, Category.new) do |f|
621
- f.object.posts.build
622
- f.has_many :posts, sortable: :position, sortable_start: 15 do |p|
623
- p.input :title
624
- end
625
- end
626
- end
627
-
628
- it "sets the data attribute" do
629
- expect(body).to have_selector("div.has_many_container[data-sortable-start='15']")
630
- end
631
- end
632
- end
633
-
634
- describe "with nesting" do
635
- context "in an inputs block" do
636
- let :body do
637
- build_form({url: '/categories'}, Category.new) do |f|
638
- f.inputs "Field Wrapper" do
639
- f.object.posts.build
640
- f.has_many :posts do |p|
641
- p.input :title
642
- end
643
- end
644
- end
645
- end
646
-
647
- it "should wrap the has_many fieldset in an li" do
648
- expect(body).to have_selector("ol > li.has_many_container")
649
- end
650
-
651
- it "should have a direct fieldset child" do
652
- expect(body).to have_selector("li.has_many_container > fieldset")
653
- end
654
-
655
- it "should not contain invalid li children" do
656
- expect(body).not_to have_selector("div.has_many_container > li")
657
- end
658
- end
659
-
660
- context "in another has_many block" do
661
- let :body do
662
- build_form({url: '/categories'}, Category.new) do |f|
663
- f.object.posts.build
664
- f.has_many :posts do |p|
665
- p.object.taggings.build
666
- p.has_many :taggings do |t|
667
- t.input :tag
668
- end
669
- end
670
- end
671
- end
672
-
673
- it "should wrap the inner has_many fieldset in an ol > li" do
674
- expect(body).to have_selector(".has_many_container ol > li.has_many_container > fieldset")
675
- end
676
-
677
- it "should not contain invalid li children" do
678
- expect(body).not_to have_selector(".has_many_container div.has_many_container > li")
679
- end
680
- end
681
- end
682
-
683
- it "should render the block if it returns nil" do
684
- body = build_form({url: '/categories'}, Category.new) do |f|
685
- f.object.posts.build
686
- f.has_many :posts do |p|
687
- p.input :title
688
- nil
689
- end
690
- end
691
-
692
- expect(body).to have_selector("input[name='category[posts_attributes][0][title]']")
693
- end
694
- end
695
-
696
- { # Testing that the same input can be used multiple times
697
- "f.input :title, as: :string" => "post_title",
698
- "f.input :title, as: :text" => "post_title",
699
- "f.input :created_at, as: :time_select" => "post_created_at_2i",
700
- "f.input :created_at, as: :datetime_select" => "post_created_at_2i",
701
- "f.input :created_at, as: :date_select" => "post_created_at_2i",
702
- # Testing that return values don't screw up the form
703
- "f.input :title; nil" => "post_title",
704
- "f.input :title; []" => "post_title",
705
- "[:title].each{ |r| f.input r }" => "post_title",
706
- "[:title].map { |r| f.input r }" => "post_title",
707
- }.each do |source, selector|
708
- it "should properly buffer `#{source}`" do
709
- body = build_form do |f|
710
- f.inputs do
711
- eval source
712
- eval source
713
- end
714
- end
715
- expect(body).to have_selector("[id=#{selector}]", count: 2)
716
- end
717
- end
718
-
719
- describe "datepicker input" do
720
- context 'with default options' do
721
- let :body do
722
- build_form do |f|
723
- f.inputs do
724
- f.input :created_at, as: :datepicker
725
- end
726
- end
727
- end
728
- it "should generate a text input with the class of datepicker" do
729
- expect(body).to have_selector("input.datepicker[type=text][name='post[created_at]']")
730
- end
731
- end
732
-
733
- context 'with date range options' do
734
- let :body do
735
- build_form do |f|
736
- f.inputs do
737
- f.input :created_at, as: :datepicker,
738
- datepicker_options: {
739
- min_date: Date.new(2013, 10, 18),
740
- max_date: "2013-12-31" }
741
- end
742
- end
743
- end
744
-
745
- it 'should generate a datepicker text input with data min and max dates' do
746
- selector = "input.datepicker[type=text][name='post[created_at]']"
747
- expect(body).to have_selector(selector)
748
- expect(body.find(selector)["data-datepicker-options"]).to eq({ minDate: '2013-10-18', maxDate: '2013-12-31' }.to_json)
749
- end
750
- end
751
- end
752
- end