activeadmin 1.0.0.pre4 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activeadmin might be problematic. Click here for more details.

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