activeadmin 0.6.6 → 1.0.0.pre1

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 (512) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +11 -8
  3. data/.hound.yml +11 -0
  4. data/.travis.yml +36 -10
  5. data/.yardopts +2 -1
  6. data/CHANGELOG.md +118 -67
  7. data/CONTRIBUTING.md +96 -73
  8. data/Gemfile +35 -35
  9. data/Guardfile +1 -0
  10. data/LICENSE +1 -1
  11. data/README.md +98 -0
  12. data/Rakefile +12 -4
  13. data/activeadmin.gemspec +21 -24
  14. data/app/assets/javascripts/active_admin/application.js.coffee +32 -0
  15. data/app/assets/javascripts/active_admin/base.js.coffee +14 -0
  16. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
  17. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
  18. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +39 -0
  19. data/app/assets/javascripts/active_admin/{components/jquery.aa.checkbox-toggler.js.coffee → lib/checkbox-toggler.js.coffee} +3 -4
  20. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +101 -0
  21. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +19 -0
  22. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +79 -0
  23. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +37 -0
  24. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +27 -0
  25. data/app/assets/javascripts/active_admin/lib/popover.js.coffee +68 -0
  26. data/app/assets/javascripts/active_admin/{components/jquery.aa.table-checkbox-toggler.js.coffee → lib/table-checkbox-toggler.js.coffee} +2 -3
  27. data/app/assets/stylesheets/active_admin/{_base.css.scss → _base.scss} +3 -0
  28. data/app/assets/stylesheets/active_admin/{_forms.css.scss → _forms.scss} +61 -17
  29. data/app/assets/stylesheets/active_admin/{_header.css.scss → _header.scss} +9 -5
  30. data/app/assets/stylesheets/active_admin/{_mixins.css.scss → _mixins.scss} +0 -0
  31. data/app/assets/stylesheets/active_admin/{_typography.css.scss → _typography.scss} +0 -0
  32. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +11 -0
  33. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +0 -1
  34. data/app/assets/stylesheets/active_admin/components/_buttons.scss +1 -1
  35. data/app/assets/stylesheets/active_admin/components/{_comments.css.scss → _comments.scss} +0 -0
  36. data/app/assets/stylesheets/active_admin/components/{_date_picker.css.scss → _date_picker.scss} +40 -14
  37. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +5 -4
  38. data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
  39. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
  40. data/app/assets/stylesheets/active_admin/components/_pagination.scss +10 -0
  41. data/app/assets/stylesheets/active_admin/components/{_popovers.css.scss → _popovers.scss} +2 -3
  42. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +4 -0
  43. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
  44. data/app/assets/stylesheets/active_admin/components/{_tables.css.scss → _tables.scss} +4 -2
  45. data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
  46. data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
  47. data/app/assets/stylesheets/active_admin/mixins/{_all.css.scss → _all.scss} +0 -0
  48. data/app/assets/stylesheets/active_admin/mixins/{_buttons.css.scss → _buttons.scss} +0 -1
  49. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
  50. data/app/assets/stylesheets/active_admin/mixins/{_icons.css.scss → _icons.scss} +1 -2
  51. data/app/assets/stylesheets/active_admin/mixins/{_reset.css.scss → _reset.scss} +0 -0
  52. data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
  53. data/app/assets/stylesheets/active_admin/mixins/{_sections.css.scss → _sections.scss} +8 -2
  54. data/app/assets/stylesheets/active_admin/mixins/{_shadows.css.scss → _shadows.scss} +0 -7
  55. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +0 -9
  56. data/app/assets/stylesheets/active_admin/mixins/{_variables.css.scss → _variables.scss} +10 -8
  57. data/app/assets/stylesheets/active_admin/{print.css.scss → print.scss} +4 -0
  58. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +5 -2
  59. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +11 -9
  60. data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
  61. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  62. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +1 -1
  63. data/app/views/active_admin/devise/passwords/edit.html.erb +9 -10
  64. data/app/views/active_admin/devise/passwords/new.html.erb +5 -4
  65. data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
  66. data/app/views/active_admin/devise/sessions/new.html.erb +9 -7
  67. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  68. data/app/views/active_admin/devise/unlocks/new.html.erb +5 -4
  69. data/app/views/layouts/active_admin_logged_out.html.erb +3 -5
  70. data/config/locales/ar.yml +120 -0
  71. data/config/locales/bg.yml +26 -6
  72. data/config/locales/bs.yml +122 -0
  73. data/config/locales/ca.yml +10 -1
  74. data/config/locales/cs.yml +7 -2
  75. data/config/locales/da.yml +7 -3
  76. data/config/locales/de-CH.yml +14 -31
  77. data/config/locales/de.yml +33 -33
  78. data/config/locales/el.yml +28 -2
  79. data/config/locales/en-GB.yml +12 -4
  80. data/config/locales/en.yml +29 -3
  81. data/config/locales/{es_MX.yml → es-MX.yml} +9 -24
  82. data/config/locales/es.yml +32 -25
  83. data/config/locales/fa.yml +120 -0
  84. data/config/locales/fi.yml +113 -0
  85. data/config/locales/fr.yml +21 -11
  86. data/config/locales/he.yml +7 -3
  87. data/config/locales/hr.yml +42 -11
  88. data/config/locales/hu.yml +10 -3
  89. data/config/locales/it.yml +31 -3
  90. data/config/locales/ja.yml +8 -3
  91. data/config/locales/ko.yml +7 -1
  92. data/config/locales/lt.yml +42 -11
  93. data/config/locales/lv.yml +7 -3
  94. data/config/locales/{no-NB.yml → nb.yml} +46 -15
  95. data/config/locales/nl.yml +36 -5
  96. data/config/locales/pl.yml +13 -8
  97. data/config/locales/pt-BR.yml +37 -5
  98. data/config/locales/pt-PT.yml +8 -4
  99. data/config/locales/ro.yml +7 -3
  100. data/config/locales/ru.yml +26 -5
  101. data/config/locales/sv-SE.yml +9 -5
  102. data/config/locales/tr.yml +10 -3
  103. data/config/locales/uk.yml +36 -12
  104. data/config/locales/vi.yml +7 -3
  105. data/config/locales/zh-CN.yml +26 -10
  106. data/config/locales/zh-TW.yml +19 -13
  107. data/docs/0-installation.md +65 -29
  108. data/docs/1-general-configuration.md +92 -81
  109. data/docs/10-custom-pages.md +68 -68
  110. data/docs/11-decorators.md +48 -59
  111. data/docs/12-arbre-components.md +80 -74
  112. data/docs/13-authorization-adapter.md +128 -107
  113. data/docs/14-gotchas.md +92 -0
  114. data/docs/2-resource-customization.md +293 -178
  115. data/docs/3-index-pages.md +160 -86
  116. data/docs/3-index-pages/custom-index.md +31 -0
  117. data/docs/3-index-pages/index-as-block.md +14 -9
  118. data/docs/3-index-pages/index-as-blog.md +41 -31
  119. data/docs/3-index-pages/index-as-grid.md +16 -8
  120. data/docs/3-index-pages/index-as-table.md +129 -52
  121. data/docs/4-csv-format.md +31 -24
  122. data/docs/5-forms.md +133 -56
  123. data/docs/6-show-pages.md +89 -27
  124. data/docs/7-sidebars.md +48 -27
  125. data/docs/8-custom-actions.md +98 -77
  126. data/docs/9-batch-actions.md +210 -146
  127. data/docs/README.md +24 -0
  128. data/features/action_item.feature +3 -3
  129. data/features/authorization_pundit.feature +37 -0
  130. data/features/breadcrumb.feature +48 -0
  131. data/features/comments/commenting.feature +56 -13
  132. data/features/development_reloading.feature +17 -30
  133. data/features/edit_page.feature +12 -1
  134. data/features/favicon.feature +3 -3
  135. data/features/i18n.feature +5 -4
  136. data/features/index/batch_actions.feature +41 -0
  137. data/features/index/filters.feature +67 -0
  138. data/features/index/format_as_csv.feature +90 -4
  139. data/features/index/formats.feature +27 -0
  140. data/features/index/index_as_blog.feature +4 -4
  141. data/features/index/index_as_table.feature +102 -6
  142. data/features/index/index_blank_slate.feature +22 -0
  143. data/features/index/index_scope_to.feature +16 -16
  144. data/features/index/page_title.feature +11 -0
  145. data/features/index/pagination.feature +1 -1
  146. data/features/index/switch_index_view.feature +14 -14
  147. data/features/new_page.feature +13 -2
  148. data/features/registering_pages.feature +1 -1
  149. data/features/renamed_resource.feature +32 -0
  150. data/features/show/page_title.feature +11 -0
  151. data/features/show/tabs.feature +27 -0
  152. data/features/sidebar_sections.feature +12 -0
  153. data/features/site_title.feature +2 -2
  154. data/features/specifying_actions.feature +3 -3
  155. data/features/step_definitions/action_item_steps.rb +2 -2
  156. data/features/step_definitions/action_link_steps.rb +14 -1
  157. data/features/step_definitions/additional_web_steps.rb +19 -20
  158. data/features/step_definitions/asset_steps.rb +3 -3
  159. data/features/step_definitions/attribute_steps.rb +8 -3
  160. data/features/step_definitions/batch_action_steps.rb +26 -9
  161. data/features/step_definitions/blog_steps.rb +3 -0
  162. data/features/step_definitions/breadcrumb_steps.rb +1 -1
  163. data/features/step_definitions/comment_steps.rb +1 -1
  164. data/features/step_definitions/configuration_steps.rb +9 -2
  165. data/features/step_definitions/dashboard_steps.rb +2 -2
  166. data/features/step_definitions/factory_steps.rb +9 -8
  167. data/features/step_definitions/filter_steps.rb +25 -3
  168. data/features/step_definitions/flash_steps.rb +3 -3
  169. data/features/step_definitions/format_steps.rb +18 -18
  170. data/features/step_definitions/index_scope_steps.rb +5 -5
  171. data/features/step_definitions/layout_steps.rb +1 -1
  172. data/features/step_definitions/member_link_steps.rb +2 -2
  173. data/features/step_definitions/menu_steps.rb +3 -3
  174. data/features/step_definitions/pagination_steps.rb +2 -3
  175. data/features/step_definitions/sidebar_steps.rb +8 -3
  176. data/features/step_definitions/site_title_steps.rb +6 -4
  177. data/features/step_definitions/symbol_leak_steps.rb +3 -0
  178. data/features/step_definitions/tab_steps.rb +5 -0
  179. data/features/step_definitions/table_steps.rb +4 -4
  180. data/features/step_definitions/user_steps.rb +10 -7
  181. data/features/step_definitions/web_steps.rb +14 -11
  182. data/features/sti_resource.feature +6 -2
  183. data/features/strong_parameters.feature +73 -0
  184. data/features/support/env.rb +34 -9
  185. data/features/support/paths.rb +14 -6
  186. data/features/support/selectors.rb +1 -1
  187. data/features/symbol_leak.feature +35 -0
  188. data/features/users/resetting_password.feature +5 -6
  189. data/lib/active_admin.rb +26 -25
  190. data/lib/active_admin/abstract_view_factory.rb +7 -17
  191. data/lib/active_admin/application.rb +72 -59
  192. data/lib/active_admin/asset_registration.rb +2 -2
  193. data/lib/active_admin/authorization_adapter.rb +2 -2
  194. data/lib/active_admin/base_controller.rb +2 -3
  195. data/lib/active_admin/base_controller/authorization.rb +13 -31
  196. data/lib/active_admin/batch_actions.rb +1 -1
  197. data/lib/active_admin/batch_actions/controller.rb +24 -8
  198. data/lib/active_admin/batch_actions/resource_extension.rb +47 -18
  199. data/lib/active_admin/batch_actions/views/batch_action_form.rb +7 -4
  200. data/lib/active_admin/batch_actions/views/batch_action_popover.rb +3 -3
  201. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +8 -17
  202. data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -4
  203. data/lib/active_admin/callbacks.rb +25 -24
  204. data/lib/active_admin/cancan_adapter.rb +7 -11
  205. data/lib/active_admin/csv_builder.rb +92 -15
  206. data/lib/active_admin/dependency.rb +93 -0
  207. data/lib/active_admin/deprecation.rb +6 -7
  208. data/lib/active_admin/devise.rb +28 -18
  209. data/lib/active_admin/dsl.rb +18 -11
  210. data/lib/active_admin/engine.rb +10 -8
  211. data/lib/active_admin/error.rb +62 -0
  212. data/lib/active_admin/filters/dsl.rb +2 -2
  213. data/lib/active_admin/filters/forms.rb +17 -27
  214. data/lib/active_admin/filters/formtastic_addons.rb +49 -15
  215. data/lib/active_admin/filters/resource_extension.rb +43 -34
  216. data/lib/active_admin/form_builder.rb +93 -154
  217. data/lib/active_admin/helpers/collection.rb +7 -13
  218. data/lib/active_admin/helpers/i18n.rb +7 -0
  219. data/lib/active_admin/helpers/optional_display.rb +5 -5
  220. data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
  221. data/lib/active_admin/helpers/scope_chain.rb +1 -1
  222. data/lib/active_admin/helpers/settings.rb +16 -9
  223. data/lib/active_admin/iconic.rb +17 -15
  224. data/lib/active_admin/iconic/icons.rb +136 -136
  225. data/lib/active_admin/inputs.rb +11 -7
  226. data/lib/active_admin/inputs/datepicker_input.rb +12 -3
  227. data/lib/active_admin/inputs/filters/base.rb +42 -0
  228. data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
  229. data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
  230. data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
  231. data/lib/active_admin/inputs/filters/date_range_input.rb +36 -0
  232. data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
  233. data/lib/active_admin/inputs/filters/select_input.rb +54 -0
  234. data/lib/active_admin/inputs/filters/string_input.rb +26 -0
  235. data/lib/active_admin/menu.rb +6 -4
  236. data/lib/active_admin/menu_collection.rb +1 -4
  237. data/lib/active_admin/namespace.rb +55 -29
  238. data/lib/active_admin/order_clause.rb +26 -0
  239. data/lib/active_admin/orm/active_record.rb +5 -0
  240. data/lib/active_admin/orm/active_record/comments.rb +81 -0
  241. data/lib/active_admin/orm/active_record/comments/comment.rb +45 -0
  242. data/lib/active_admin/{comments → orm/active_record/comments}/namespace_helper.rb +2 -2
  243. data/lib/active_admin/{comments → orm/active_record/comments}/resource_helper.rb +1 -1
  244. data/lib/active_admin/{comments → orm/active_record/comments}/show_page_helper.rb +0 -0
  245. data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
  246. data/lib/active_admin/{comments → orm/active_record/comments}/views/active_admin_comments.rb +16 -14
  247. data/lib/active_admin/orm/mongoid.rb +1 -0
  248. data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
  249. data/lib/active_admin/page.rb +7 -3
  250. data/lib/active_admin/page_dsl.rb +1 -1
  251. data/lib/active_admin/page_presenter.rb +2 -2
  252. data/lib/active_admin/pundit_adapter.rb +68 -0
  253. data/lib/active_admin/resource.rb +16 -17
  254. data/lib/active_admin/resource/action_items.rb +23 -18
  255. data/lib/active_admin/resource/belongs_to.rb +7 -3
  256. data/lib/active_admin/resource/controllers.rb +1 -0
  257. data/lib/active_admin/resource/includes.rb +12 -0
  258. data/lib/active_admin/resource/menu.rb +5 -5
  259. data/lib/active_admin/resource/naming.rb +27 -43
  260. data/lib/active_admin/resource/page_presenters.rb +1 -1
  261. data/lib/active_admin/resource/routes.rb +27 -11
  262. data/lib/active_admin/resource/scope_to.rb +7 -7
  263. data/lib/active_admin/resource/sidebars.rb +1 -0
  264. data/lib/active_admin/resource_controller.rb +6 -7
  265. data/lib/active_admin/resource_controller/data_access.rb +101 -93
  266. data/lib/active_admin/resource_controller/decorators.rb +91 -9
  267. data/lib/active_admin/resource_controller/streaming.rb +37 -0
  268. data/lib/active_admin/resource_dsl.rb +53 -10
  269. data/lib/active_admin/router.rb +7 -7
  270. data/lib/active_admin/scope.rb +6 -6
  271. data/lib/active_admin/sidebar_section.rb +10 -2
  272. data/lib/active_admin/version.rb +1 -1
  273. data/lib/active_admin/view_factory.rb +17 -17
  274. data/lib/active_admin/view_helpers.rb +0 -1
  275. data/lib/active_admin/view_helpers/auto_link_helper.rb +23 -12
  276. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +4 -3
  277. data/lib/active_admin/view_helpers/display_helper.rb +30 -15
  278. data/lib/active_admin/view_helpers/download_format_links_helper.rb +21 -25
  279. data/lib/active_admin/view_helpers/fields_for.rb +4 -4
  280. data/lib/active_admin/view_helpers/flash_helper.rb +4 -3
  281. data/lib/active_admin/view_helpers/form_helper.rb +5 -9
  282. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +6 -6
  283. data/lib/active_admin/views/action_items.rb +2 -2
  284. data/lib/active_admin/views/components/action_list_popover.rb +1 -1
  285. data/lib/active_admin/views/components/active_admin_form.rb +123 -0
  286. data/lib/active_admin/views/components/attributes_table.rb +63 -21
  287. data/lib/active_admin/views/components/blank_slate.rb +1 -1
  288. data/lib/active_admin/views/components/columns.rb +13 -7
  289. data/lib/active_admin/views/components/dropdown_menu.rb +6 -6
  290. data/lib/active_admin/views/components/index_list.rb +7 -7
  291. data/lib/active_admin/views/components/paginated_collection.rb +38 -20
  292. data/lib/active_admin/views/components/panel.rb +8 -2
  293. data/lib/active_admin/views/components/popover.rb +1 -1
  294. data/lib/active_admin/views/components/scopes.rb +5 -4
  295. data/lib/active_admin/views/components/sidebar_section.rb +3 -2
  296. data/lib/active_admin/views/components/site_title.rb +2 -2
  297. data/lib/active_admin/views/components/status_tag.rb +34 -11
  298. data/lib/active_admin/views/components/table_for.rb +90 -45
  299. data/lib/active_admin/views/components/tabs.rb +28 -0
  300. data/lib/active_admin/views/components/unsupported_browser.rb +11 -0
  301. data/lib/active_admin/views/footer.rb +3 -3
  302. data/lib/active_admin/views/header.rb +3 -3
  303. data/lib/active_admin/views/index_as_block.rb +10 -10
  304. data/lib/active_admin/views/index_as_blog.rb +45 -39
  305. data/lib/active_admin/views/index_as_grid.rb +14 -10
  306. data/lib/active_admin/views/index_as_table.rb +242 -129
  307. data/lib/active_admin/views/pages/base.rb +22 -18
  308. data/lib/active_admin/views/pages/form.rb +21 -11
  309. data/lib/active_admin/views/pages/index.rb +40 -35
  310. data/lib/active_admin/views/pages/layout.rb +1 -1
  311. data/lib/active_admin/views/pages/show.rb +4 -4
  312. data/lib/active_admin/views/tabbed_navigation.rb +7 -3
  313. data/lib/active_admin/views/title_bar.rb +10 -8
  314. data/lib/generators/active_admin/assets/assets_generator.rb +3 -28
  315. data/lib/generators/active_admin/assets/templates/{3.1/active_admin.css.scss → active_admin.css.scss} +0 -0
  316. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
  317. data/lib/generators/active_admin/devise/devise_generator.rb +24 -26
  318. data/lib/generators/active_admin/install/install_generator.rb +8 -9
  319. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +28 -26
  320. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +12 -2
  321. data/lib/generators/active_admin/install/templates/dashboard.rb +4 -4
  322. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +3 -3
  323. data/lib/generators/active_admin/page/USAGE +8 -0
  324. data/lib/generators/active_admin/page/page_generator.rb +12 -0
  325. data/lib/generators/active_admin/page/templates/page.rb +5 -0
  326. data/lib/generators/active_admin/resource/resource_generator.rb +3 -5
  327. data/lib/generators/active_admin/resource/templates/admin.rb +15 -0
  328. data/lib/ransack_ext.rb +12 -0
  329. data/script/local +2 -2
  330. data/script/travis_cache +107 -0
  331. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +25 -0
  332. data/spec/javascripts/fixtures/flashes.html +2 -0
  333. data/spec/rails_helper.rb +154 -0
  334. data/spec/{integration → requests}/default_namespace_spec.rb +6 -6
  335. data/spec/{integration → requests}/javascript_spec.rb +5 -5
  336. data/spec/requests/memory_spec.rb +23 -0
  337. data/spec/requests/stylesheets_spec.rb +18 -0
  338. data/spec/spec_helper.rb +12 -173
  339. data/spec/support/detect_rails_version.rb +9 -17
  340. data/spec/support/rails_template.rb +64 -35
  341. data/spec/support/rails_template_with_data.rb +14 -14
  342. data/spec/support/templates/admin/stores.rb +5 -1
  343. data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
  344. data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
  345. data/spec/support/templates/policies/admin_user_policy.rb +11 -0
  346. data/spec/support/templates/policies/application_policy.rb +45 -0
  347. data/spec/support/templates/policies/category_policy.rb +7 -0
  348. data/spec/support/templates/policies/post_policy.rb +15 -0
  349. data/spec/support/templates/policies/store_policy.rb +11 -0
  350. data/spec/support/templates/policies/user_policy.rb +11 -0
  351. data/spec/support/templates/post_decorator.rb +4 -46
  352. data/spec/unit/abstract_view_factory_spec.rb +16 -16
  353. data/spec/unit/action_builder_spec.rb +24 -18
  354. data/spec/unit/active_admin_spec.rb +2 -2
  355. data/spec/unit/application_spec.rb +33 -34
  356. data/spec/unit/asset_registration_spec.rb +25 -29
  357. data/spec/unit/authorization/authorization_adapter_spec.rb +10 -10
  358. data/spec/unit/authorization/controller_authorization_spec.rb +11 -11
  359. data/spec/unit/authorization/index_overriding_spec.rb +22 -0
  360. data/spec/unit/auto_link_spec.rb +43 -13
  361. data/spec/unit/batch_actions/resource_spec.rb +15 -14
  362. data/spec/unit/batch_actions/settings_spec.rb +18 -18
  363. data/spec/unit/belongs_to_spec.rb +28 -19
  364. data/spec/unit/cancan_adapter_spec.rb +8 -8
  365. data/spec/unit/comments_spec.rb +99 -39
  366. data/spec/unit/component_spec.rb +3 -3
  367. data/spec/unit/config_shared_examples.rb +10 -10
  368. data/spec/unit/controller_filters_spec.rb +23 -16
  369. data/spec/unit/csv_builder_spec.rb +165 -24
  370. data/spec/unit/dependency_spec.rb +135 -0
  371. data/spec/unit/devise_spec.rb +17 -37
  372. data/spec/unit/dsl_spec.rb +70 -9
  373. data/spec/unit/event_spec.rb +11 -11
  374. data/spec/unit/filters/filter_form_builder_spec.rb +207 -148
  375. data/spec/unit/filters/resource_spec.rb +60 -26
  376. data/spec/unit/form_builder_spec.rb +419 -145
  377. data/spec/unit/generators/install_spec.rb +23 -0
  378. data/spec/unit/helpers/collection_spec.rb +18 -18
  379. data/spec/unit/helpers/scope_chain_spec.rb +6 -6
  380. data/spec/unit/helpers/settings_spec.rb +4 -4
  381. data/spec/unit/i18n_spec.rb +12 -0
  382. data/spec/unit/menu_collection_spec.rb +14 -14
  383. data/spec/unit/menu_item_spec.rb +42 -42
  384. data/spec/unit/menu_spec.rb +20 -20
  385. data/spec/unit/namespace/authorization_spec.rb +8 -8
  386. data/spec/unit/namespace/register_page_spec.rb +11 -11
  387. data/spec/unit/namespace/register_resource_spec.rb +28 -30
  388. data/spec/unit/namespace_spec.rb +20 -20
  389. data/spec/unit/order_clause_spec.rb +81 -0
  390. data/spec/unit/page_controller_spec.rb +1 -1
  391. data/spec/unit/page_spec.rb +18 -12
  392. data/spec/unit/pretty_format_spec.rb +42 -14
  393. data/spec/unit/pundit_adapter_spec.rb +98 -0
  394. data/spec/unit/resource/action_items_spec.rb +15 -12
  395. data/spec/unit/resource/includes_spec.rb +21 -0
  396. data/spec/unit/resource/menu_spec.rb +1 -1
  397. data/spec/unit/resource/naming_spec.rb +35 -21
  398. data/spec/unit/resource/page_presenters_spec.rb +8 -8
  399. data/spec/unit/resource/pagination_spec.rb +6 -6
  400. data/spec/unit/resource/routes_spec.rb +10 -10
  401. data/spec/unit/resource/scopes_spec.rb +14 -7
  402. data/spec/unit/resource/sidebars_spec.rb +6 -6
  403. data/spec/unit/resource_collection_spec.rb +31 -38
  404. data/spec/unit/resource_controller/data_access_spec.rb +96 -30
  405. data/spec/unit/resource_controller/decorators_spec.rb +83 -0
  406. data/spec/unit/resource_controller/sidebars_spec.rb +7 -8
  407. data/spec/unit/resource_controller_spec.rb +73 -70
  408. data/spec/unit/resource_registration_spec.rb +12 -12
  409. data/spec/unit/resource_spec.rb +77 -42
  410. data/spec/unit/routing_spec.rb +39 -31
  411. data/spec/unit/scope_spec.rb +112 -30
  412. data/spec/unit/settings_spec.rb +51 -21
  413. data/spec/unit/view_factory_spec.rb +2 -3
  414. data/spec/unit/view_helpers/breadcrumbs_spec.rb +71 -60
  415. data/spec/unit/view_helpers/display_name_spec.rb +49 -21
  416. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +5 -5
  417. data/spec/unit/view_helpers/fields_for_spec.rb +18 -18
  418. data/spec/unit/view_helpers/flash_helper_spec.rb +25 -0
  419. data/spec/unit/view_helpers/form_helper_spec.rb +10 -23
  420. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +64 -22
  421. data/spec/unit/views/components/action_list_popover_spec.rb +16 -6
  422. data/spec/unit/views/components/attributes_table_spec.rb +171 -30
  423. data/spec/unit/views/components/batch_action_popover_spec.rb +20 -6
  424. data/spec/unit/views/components/blank_slate_spec.rb +14 -4
  425. data/spec/unit/views/components/columns_spec.rb +52 -22
  426. data/spec/unit/views/components/index_list_spec.rb +11 -8
  427. data/spec/unit/views/components/index_table_for_spec.rb +46 -0
  428. data/spec/unit/views/components/paginated_collection_spec.rb +79 -90
  429. data/spec/unit/views/components/panel_spec.rb +32 -21
  430. data/spec/unit/views/components/popover_spec.rb +7 -7
  431. data/spec/unit/views/components/sidebar_section_spec.rb +18 -8
  432. data/spec/unit/views/components/site_title_spec.rb +26 -26
  433. data/spec/unit/views/components/status_tag_spec.rb +178 -38
  434. data/spec/unit/views/components/table_for_spec.rb +237 -35
  435. data/spec/unit/views/components/tabs_spec.rb +39 -0
  436. data/spec/unit/views/components/unsupported_browser_spec.rb +47 -0
  437. data/spec/unit/views/pages/form_spec.rb +17 -10
  438. data/spec/unit/views/pages/index_spec.rb +60 -0
  439. data/spec/unit/views/pages/layout_spec.rb +17 -21
  440. data/spec/unit/views/pages/show_spec.rb +18 -6
  441. data/spec/unit/views/tabbed_navigation_spec.rb +61 -52
  442. data/tasks/docs.rake +9 -11
  443. data/tasks/parallel_tests.rake +8 -2
  444. data/tasks/test.rake +13 -9
  445. data/tasks/yard.rake +7 -4
  446. metadata +219 -163
  447. data/.document +0 -5
  448. data/README.rdoc +0 -88
  449. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  450. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  451. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  452. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  453. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  454. data/app/assets/images/active_admin/index_list_icons/block_icon.svg +0 -10
  455. data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +0 -4
  456. data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +0 -13
  457. data/app/assets/images/active_admin/index_list_icons/table_icon.svg +0 -3
  458. data/app/assets/images/active_admin/loading.gif +0 -0
  459. data/app/assets/javascripts/active_admin/application.js +0 -3
  460. data/app/assets/javascripts/active_admin/base.js +0 -5
  461. data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +0 -105
  462. data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +0 -97
  463. data/app/assets/javascripts/active_admin/lib/namespace.js.coffee +0 -4
  464. data/app/assets/javascripts/active_admin/pages/application.js.coffee +0 -21
  465. data/app/assets/javascripts/active_admin/pages/batch_actions.js.coffee +0 -26
  466. data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +0 -11
  467. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +0 -41
  468. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +0 -95
  469. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +0 -38
  470. data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +0 -43
  471. data/app/views/active_admin/dashboard/index.html.arb +0 -1
  472. data/app/views/active_admin/resource/index.csv.erb +0 -23
  473. data/docs/3-index-pages/create-an-index.md +0 -29
  474. data/lib/active_admin/comments.rb +0 -83
  475. data/lib/active_admin/comments/comment.rb +0 -42
  476. data/lib/active_admin/comments/views.rb +0 -2
  477. data/lib/active_admin/dependency_checker.rb +0 -46
  478. data/lib/active_admin/inputs/filter_base.rb +0 -33
  479. data/lib/active_admin/inputs/filter_base/search_method_select.rb +0 -73
  480. data/lib/active_admin/inputs/filter_boolean_input.rb +0 -36
  481. data/lib/active_admin/inputs/filter_check_boxes_input.rb +0 -40
  482. data/lib/active_admin/inputs/filter_date_range_input.rb +0 -34
  483. data/lib/active_admin/inputs/filter_numeric_input.rb +0 -10
  484. data/lib/active_admin/inputs/filter_select_input.rb +0 -49
  485. data/lib/active_admin/inputs/filter_string_input.rb +0 -24
  486. data/lib/active_admin/reloader.rb +0 -130
  487. data/lib/active_admin/resource_controller/actions.rb +0 -81
  488. data/lib/active_admin/sass/active_admin.scss +0 -3
  489. data/lib/active_admin/sass/css_loader.rb +0 -16
  490. data/lib/active_admin/sass/helpers.rb +0 -45
  491. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +0 -7
  492. data/lib/active_admin/views/dashboard_section_renderer.rb +0 -19
  493. data/lib/active_admin/views/pages/dashboard.rb +0 -62
  494. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +0 -1
  495. data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +0 -1
  496. data/lib/meta_search_ext.rb +0 -10
  497. data/spec/integration/memory_spec.rb +0 -29
  498. data/spec/integration/stylesheets_spec.rb +0 -41
  499. data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +0 -60
  500. data/spec/javascripts/compiled/jquery.aa.popover-spec.js +0 -106
  501. data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +0 -37
  502. data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +0 -108
  503. data/spec/javascripts/helpers/vendor/jasmine-jquery.js +0 -288
  504. data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +0 -2915
  505. data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +0 -34
  506. data/spec/javascripts/support/jquery.min.js +0 -4
  507. data/spec/spec_helper_without_rails.rb +0 -11
  508. data/spec/unit/generators/install_rails_3_1_spec.rb +0 -16
  509. data/spec/unit/rails_spec.rb +0 -43
  510. data/spec/unit/reloader_spec.rb +0 -124
  511. data/spec/unit/sass/helpers_spec.rb +0 -47
  512. data/tasks/js.rake +0 -32
@@ -46,21 +46,21 @@ module ActiveAdmin
46
46
  private
47
47
 
48
48
  def build_button(name, button_options)
49
- button_options[:class] ||= ""
50
- button_options[:class] << " dropdown_menu_button"
49
+ button_options[:class] ||= ''
50
+ button_options[:class] << ' dropdown_menu_button'
51
51
 
52
- button_options[:href] = "#"
52
+ button_options[:href] = '#'
53
53
 
54
54
  a name, button_options
55
55
  end
56
56
 
57
57
  def build_menu(options)
58
- options[:class] ||= ""
59
- options[:class] << " dropdown_menu_list"
58
+ options[:class] ||= ''
59
+ options[:class] << ' dropdown_menu_list'
60
60
 
61
61
  menu_list = nil
62
62
 
63
- div :class => "dropdown_menu_list_wrapper", :style => "display:none;" do
63
+ div :class => 'dropdown_menu_list_wrapper' do
64
64
  menu_list = ul(options)
65
65
  end
66
66
 
@@ -1,11 +1,11 @@
1
1
  require 'active_admin/helpers/collection'
2
2
 
3
3
  module ActiveAdmin
4
- module Views
4
+ module Views
5
5
 
6
6
  # Renders a collection of index views available to the resource
7
7
  # as a list with a separator
8
- class IndexList < ActiveAdmin::Component
8
+ class IndexList < ActiveAdmin::Component
9
9
  builder_method :index_list_renderer
10
10
 
11
11
  include ::ActiveAdmin::Helpers::Collection
@@ -35,10 +35,10 @@ module ActiveAdmin
35
35
  #
36
36
  # @param [Class] index_class The class on which to build the link and html classes
37
37
  def build_index_list(index_class)
38
- li :class => classes_for_index(index_class) do
39
- a :href => url_for(params.merge(:as => index_class.index_name.to_sym)), :class => "table_tools_button" do
38
+ li class: classes_for_index(index_class) do
39
+ a href: url_for(params.merge(as: index_class.index_name.to_sym)), class: "table_tools_button" do
40
40
  name = index_class.index_name
41
- I18n.t("active_admin.index_list.#{name}", :default => name.to_s.titleize)
41
+ I18n.t("active_admin.index_list.#{name}", default: name.to_s.titleize)
42
42
  end
43
43
  end
44
44
  end
@@ -61,8 +61,8 @@ module ActiveAdmin
61
61
  params.include?(:q) && collection_is_empty?
62
62
  end
63
63
 
64
- end
65
- end
64
+ end
65
+ end
66
66
  end
67
67
 
68
68
 
@@ -7,7 +7,7 @@ module ActiveAdmin
7
7
  #
8
8
  # *Example:*
9
9
  #
10
- # paginated_collection collection, :entry_name => "Post" do
10
+ # paginated_collection collection, entry_name: "Post" do
11
11
  # div do
12
12
  # h2 "Inside the
13
13
  # end
@@ -40,12 +40,13 @@ module ActiveAdmin
40
40
  @param_name = options.delete(:param_name)
41
41
  @download_links = options.delete(:download_links)
42
42
  @display_total = options.delete(:pagination_total) { true }
43
+ @per_page = options.delete(:per_page)
43
44
 
44
45
  unless collection.respond_to?(:num_pages)
45
46
  raise(StandardError, "Collection is not a paginated scope. Set collection.page(params[:page]).per(10) before calling :paginated_collection.")
46
47
  end
47
48
 
48
- @contents = div(:class => "paginated_collection_contents")
49
+ @contents = div(class: "paginated_collection_contents")
49
50
  build_pagination_with_formats(options)
50
51
  @built = true
51
52
  end
@@ -62,24 +63,41 @@ module ActiveAdmin
62
63
  protected
63
64
 
64
65
  def build_pagination_with_formats(options)
65
- div :id => "index_footer" do
66
+ div id: "index_footer" do
67
+ build_per_page_select if @per_page.is_a?(Array)
66
68
  build_pagination
67
- div(page_entries_info(options).html_safe, :class => "pagination_information")
69
+ div(page_entries_info(options).html_safe, class: "pagination_information")
68
70
 
69
- if @download_links.is_a?(Array) && !@download_links.empty?
70
- build_download_format_links @download_links
71
+ download_links = @download_links.is_a?(Proc) ? instance_exec(&@download_links) : @download_links
72
+
73
+ if download_links.is_a?(Array) && !download_links.empty?
74
+ build_download_format_links download_links
71
75
  else
72
- build_download_format_links unless @download_links == false
76
+ build_download_format_links unless download_links == false
73
77
  end
78
+ end
79
+ end
74
80
 
81
+ def build_per_page_select
82
+ div class: "pagination_per_page" do
83
+ text_node "Per page:"
84
+ select do
85
+ @per_page.each do |per_page|
86
+ option(
87
+ per_page,
88
+ value: per_page,
89
+ selected: collection.limit_value == per_page ? "selected" : nil
90
+ )
91
+ end
92
+ end
75
93
  end
76
94
  end
77
95
 
78
96
  def build_pagination
79
- options = request.query_parameters.except(:commit, :format)
97
+ options = {}
80
98
  options[:param_name] = @param_name if @param_name
81
99
 
82
- text_node paginate(collection, options.symbolize_keys)
100
+ text_node paginate collection, options
83
101
  end
84
102
 
85
103
  include ::ActiveAdmin::Helpers::Collection
@@ -91,29 +109,29 @@ module ActiveAdmin
91
109
  entry_name = options[:entry_name]
92
110
  entries_name = options[:entries_name] || entry_name.pluralize
93
111
  elsif collection_is_empty?
94
- entry_name = I18n.t "active_admin.pagination.entry", :count => 1, :default => 'entry'
95
- entries_name = I18n.t "active_admin.pagination.entry", :count => 2, :default => 'entries'
112
+ entry_name = I18n.t "active_admin.pagination.entry", count: 1, default: 'entry'
113
+ entries_name = I18n.t "active_admin.pagination.entry", count: 2, default: 'entries'
96
114
  else
97
115
  key = "activerecord.models." + collection.first.class.model_name.i18n_key.to_s
98
- entry_name = I18n.translate key, :count => 1, :default => collection.first.class.name.underscore.sub('_', ' ')
99
- entries_name = I18n.translate key, :count => collection.size, :default => entry_name.pluralize
116
+ entry_name = I18n.translate key, count: 1, default: collection.first.class.name.underscore.sub('_', ' ')
117
+ entries_name = I18n.translate key, count: collection.size, default: entry_name.pluralize
100
118
  end
101
119
 
102
120
  if collection.num_pages < 2
103
121
  case collection_size
104
- when 0; I18n.t('active_admin.pagination.empty', :model => entries_name)
105
- when 1; I18n.t('active_admin.pagination.one', :model => entry_name)
106
- else; I18n.t('active_admin.pagination.one_page', :model => entries_name, :n => collection.total_count)
122
+ when 0; I18n.t('active_admin.pagination.empty', model: entries_name)
123
+ when 1; I18n.t('active_admin.pagination.one', model: entry_name)
124
+ else; I18n.t('active_admin.pagination.one_page', model: entries_name, n: collection.total_count)
107
125
  end
108
126
  else
109
127
  offset = (collection.current_page - 1) * collection.limit_value
110
128
  if @display_total
111
129
  total = collection.total_count
112
- I18n.t 'active_admin.pagination.multiple', :model => entries_name, :total => total,
113
- :from => offset + 1, :to => offset + collection_size
130
+ I18n.t 'active_admin.pagination.multiple', model: entries_name, total: total,
131
+ from: offset + 1, to: offset + collection_size
114
132
  else
115
- I18n.t 'active_admin.pagination.multiple_without_total', :model => entries_name,
116
- :from => offset + 1, :to => offset + collection_size
133
+ I18n.t 'active_admin.pagination.multiple_without_total', model: entries_name,
134
+ from: offset + 1, to: offset + collection_size
117
135
  end
118
136
  end
119
137
  end
@@ -10,7 +10,7 @@ module ActiveAdmin
10
10
  super(attributes)
11
11
  add_class "panel"
12
12
  @title = h3(icn + title.to_s)
13
- @contents = div(:class => "panel_contents")
13
+ @contents = div(class: "panel_contents")
14
14
  end
15
15
 
16
16
  def add_child(child)
@@ -28,7 +28,13 @@ module ActiveAdmin
28
28
  @contents.children?
29
29
  end
30
30
 
31
- end
31
+ def header_action(*args)
32
+ action = args[0]
32
33
 
34
+ @title << div(class: 'header_action') do
35
+ action
36
+ end
37
+ end
38
+ end
33
39
  end
34
40
  end
@@ -11,7 +11,7 @@ module ActiveAdmin
11
11
 
12
12
  super(options)
13
13
 
14
- @contents_root = send(contents_root_tag, :class => "popover_contents")
14
+ @contents_root = send(contents_root_tag, class: "popover_contents")
15
15
  end
16
16
 
17
17
  def add_child(child)
@@ -30,12 +30,13 @@ module ActiveAdmin
30
30
  protected
31
31
 
32
32
  def build_scope(scope, options)
33
- li :class => classes_for_scope(scope) do
34
- scope_name = I18n.t("active_admin.scopes.#{scope.id}", :default => scope.name)
33
+ li class: classes_for_scope(scope) do
34
+ scope_name = I18n.t "active_admin.scopes.#{scope.id}", default: scope.name
35
+ params = request.query_parameters.except :page, :scope, :commit, :format
35
36
 
36
- a :href => url_for(params.merge(:scope => scope.id, :page => 1)), :class => "table_tools_button" do
37
+ a href: url_for(scope: scope.id, params: params), class: 'table_tools_button' do
37
38
  text_node scope_name
38
- span :class => 'count' do
39
+ span class: 'count' do
39
40
  "(#{get_scope_count(scope)})"
40
41
  end if options[:scope_count] && scope.show_count
41
42
  end
@@ -7,7 +7,8 @@ module ActiveAdmin
7
7
  # Takes a ActiveAdmin::SidebarSection instance
8
8
  def build(section)
9
9
  @section = section
10
- super(@section.title, :icon => @section.icon)
10
+ super(@section.title, icon: @section.icon)
11
+ add_class @section.custom_class if @section.custom_class
11
12
  self.id = @section.id
12
13
  build_sidebar_content
13
14
  end
@@ -16,7 +17,7 @@ module ActiveAdmin
16
17
 
17
18
  def build_sidebar_content
18
19
  if @section.block
19
- rvalue = instance_eval(&@section.block)
20
+ rvalue = instance_exec(&@section.block)
20
21
  self << rvalue if rvalue.is_a?(String)
21
22
  else
22
23
  render(@section.partial_name)
@@ -8,7 +8,7 @@ module ActiveAdmin
8
8
  end
9
9
 
10
10
  def build(namespace)
11
- super(:id => "site_title")
11
+ super(id: "site_title")
12
12
  @namespace = namespace
13
13
 
14
14
  if site_title_link?
@@ -46,7 +46,7 @@ module ActiveAdmin
46
46
 
47
47
  def title_image
48
48
  path = helpers.render_or_call_method_or_proc_on(self, @namespace.site_title_image)
49
- helpers.image_tag(path, :id => "site_title_image", :alt => @namespace.site_title)
49
+ helpers.image_tag(path, id: "site_title_image", alt: @namespace.site_title)
50
50
  end
51
51
 
52
52
  end
@@ -12,22 +12,25 @@ module ActiveAdmin
12
12
  'status_tag'
13
13
  end
14
14
 
15
- # @method status_tag(status, type = nil, options = {})
15
+ # @overload status_tag(status, type = nil, options = {})
16
+ # @param [String] status the status to display. One of the span classes will be an underscored version of the status.
17
+ # @param [Symbol] type type of status. Will become a class of the span. ActiveAdmin provide style for :ok, :warning and :error.
18
+ # @param [Hash] options
19
+ # @option options [String] :class to override the default class
20
+ # @option options [String] :id to override the default id
21
+ # @option options [String] :label to override the default label
22
+ # @return [ActiveAdmin::Views::StatusTag]
16
23
  #
17
- # @param [String] status the status to display. One of the span classes will be an underscored version of the status.
18
- # @param [Symbol] type type of status. Will become a class of the span. ActiveAdmin provide style for :ok, :warning and :error.
19
- # @param [Hash] options such as :class, :id and :label to override the default label
20
- #
21
- # @return [ActiveAdmin::Views::StatusTag]
22
- #
23
- # Examples:
24
+ # @example
24
25
  # status_tag('In Progress')
25
26
  # # => <span class='status_tag in_progress'>In Progress</span>
26
27
  #
28
+ # @example
27
29
  # status_tag('active', :ok)
28
30
  # # => <span class='status_tag active ok'>Active</span>
29
31
  #
30
- # status_tag('active', :ok, :class => 'important', :id => 'status_123', :label => 'on')
32
+ # @example
33
+ # status_tag('active', :ok, class: 'important', id: 'status_123', label: 'on')
31
34
  # # => <span class='status_tag active ok important' id='status_123'>on</span>
32
35
  #
33
36
  def build(*args)
@@ -36,8 +39,13 @@ module ActiveAdmin
36
39
  type = args[1]
37
40
  label = options.delete(:label)
38
41
  classes = options.delete(:class)
42
+ status = convert_to_boolean_status(status)
39
43
 
40
- content = label || status.titleize if status
44
+ if status
45
+ content = label || if s = status.to_s and s.present?
46
+ I18n.t "active_admin.status_tag.#{s.downcase}", default: s.titleize
47
+ end
48
+ end
41
49
 
42
50
  super(content, options)
43
51
 
@@ -48,8 +56,23 @@ module ActiveAdmin
48
56
 
49
57
  protected
50
58
 
59
+ def convert_to_boolean_status(status)
60
+ if status == 'true'
61
+ 'Yes'
62
+ elsif ['false', nil].include?(status)
63
+ 'No'
64
+ else
65
+ status
66
+ end
67
+ end
68
+
51
69
  def status_to_class(status)
52
- status.titleize.gsub(/\s/, '').underscore
70
+ case status
71
+ when String, Symbol
72
+ status.to_s.titleize.gsub(/\s/, '').underscore
73
+ else
74
+ ''
75
+ end
53
76
  end
54
77
  end
55
78
  end
@@ -7,13 +7,21 @@ module ActiveAdmin
7
7
  'table'
8
8
  end
9
9
 
10
- def build(collection, options = {})
11
- @sortable = options.delete(:sortable)
10
+ def build(obj, *attrs)
11
+ options = attrs.extract_options!
12
+ @sortable = options.delete(:sortable)
12
13
  @resource_class = options.delete(:i18n)
13
- @collection = collection
14
- @columns = []
14
+ @collection = obj.respond_to?(:each) && !obj.is_a?(Hash) ? obj : [obj]
15
+ @columns = []
16
+ @row_class = options.delete(:row_class)
17
+
15
18
  build_table
16
19
  super(options)
20
+ columns(*attrs)
21
+ end
22
+
23
+ def columns(*attrs)
24
+ attrs.each {|attr| column(attr) }
17
25
  end
18
26
 
19
27
  def column(*args, &block)
@@ -32,18 +40,13 @@ module ActiveAdmin
32
40
  # Add a table cell for each item
33
41
  @collection.each_with_index do |item, i|
34
42
  within @tbody.children[i] do
35
- build_table_cell(col, item)
43
+ build_table_cell col, item
36
44
  end
37
45
  end
38
46
  end
39
47
 
40
48
  def sortable?
41
- @sortable
42
- end
43
-
44
- # Returns the columns to display based on the conditional block
45
- def visible_columns
46
- @visible_columns ||= @columns.select{|col| col.display_column? }
49
+ !!@sortable
47
50
  end
48
51
 
49
52
  protected
@@ -60,36 +63,62 @@ module ActiveAdmin
60
63
  end
61
64
 
62
65
  def build_table_header(col)
63
- classes = Arbre::HTML::ClassList.new
66
+ classes = Arbre::HTML::ClassList.new
64
67
  sort_key = sortable? && col.sortable? && col.sort_key
68
+ params = request.query_parameters.except :page, :order, :commit, :format
65
69
 
66
70
  classes << 'sortable' if sort_key
67
71
  classes << "sorted-#{current_sort[1]}" if sort_key && current_sort[0] == sort_key
68
72
  classes << col.html_class
69
73
 
70
74
  if sort_key
71
- th :class => classes do
72
- link_to(col.pretty_title, params.merge(:order => "#{sort_key}_#{order_for_sort_key(sort_key)}").except(:page))
75
+ th class: classes do
76
+ link_to col.pretty_title, params: params, order: "#{sort_key}_#{order_for_sort_key(sort_key)}"
73
77
  end
74
78
  else
75
- th(col.pretty_title, :class => classes)
79
+ th col.pretty_title, class: classes
76
80
  end
77
81
  end
78
82
 
79
83
  def build_table_body
80
84
  @tbody = tbody do
81
85
  # Build enough rows for our collection
82
- @collection.each{|elem| tr(:class => cycle('odd', 'even'), :id => dom_id(elem)) }
86
+ @collection.each do |elem|
87
+ classes = [cycle('odd', 'even')]
88
+
89
+ if @row_class
90
+ classes << @row_class.call(elem)
91
+ end
92
+
93
+ tr(class: classes.flatten.join(' '), id: dom_id_for(elem))
94
+ end
83
95
  end
84
96
  end
85
97
 
86
98
  def build_table_cell(col, item)
87
- td(:class => col.html_class) do
88
- rvalue = call_method_or_proc_on(item, col.data, :exec => false)
89
- if col.data.is_a?(Symbol)
90
- rvalue = pretty_format(rvalue)
91
- end
92
- rvalue
99
+ td class: col.html_class do
100
+ render_data col.data, item
101
+ end
102
+ end
103
+
104
+ def render_data(data, item)
105
+ value = if data.is_a? Proc
106
+ data.call item
107
+ elsif item.respond_to? data
108
+ item.public_send data
109
+ elsif item.respond_to? :[]
110
+ item[data]
111
+ end
112
+ value = pretty_format(value) if data.is_a?(Symbol)
113
+ value = status_tag value if is_boolean? data, item
114
+ value
115
+ end
116
+
117
+ def is_boolean?(data, item)
118
+ if item.respond_to? :has_attribute?
119
+ item.has_attribute?(data) &&
120
+ item.column_for_attribute(data) &&
121
+ item.column_for_attribute(data).type == :boolean
93
122
  end
94
123
  end
95
124
 
@@ -97,10 +126,14 @@ module ActiveAdmin
97
126
  # current_sort[0] #=> sort_key
98
127
  # current_sort[1] #=> asc | desc
99
128
  def current_sort
100
- @current_sort ||= if params[:order] && params[:order] =~ /^([\w\_\.]+)_(desc|asc)$/
101
- [$1,$2]
102
- else
103
- []
129
+ @current_sort ||= begin
130
+ order_clause = OrderClause.new params[:order]
131
+
132
+ if order_clause.valid?
133
+ [order_clause.field, order_clause.order]
134
+ else
135
+ []
136
+ end
104
137
  end
105
138
  end
106
139
 
@@ -116,7 +149,7 @@ module ActiveAdmin
116
149
 
117
150
  def default_options
118
151
  {
119
- :i18n => @resource_class
152
+ i18n: @resource_class
120
153
  }
121
154
  end
122
155
 
@@ -124,25 +157,29 @@ module ActiveAdmin
124
157
 
125
158
  attr_accessor :title, :data , :html_class
126
159
 
127
- def initialize(*args, &block)
160
+ def initialize(*args, &block)
128
161
  @options = args.extract_options!
129
162
 
130
163
  @title = args[0]
131
- @html_class = @options.delete(:class) || @title.to_s.downcase.underscore.gsub(/ +/,'_')
132
- @data = args[1] || args[0]
164
+ html_classes = [:col]
165
+ if @options.has_key?(:class)
166
+ html_classes << @options.delete(:class)
167
+ elsif @title.present?
168
+ html_classes << "col-#{@title.to_s.parameterize('_')}"
169
+ end
170
+ @html_class = html_classes.join(' ')
171
+ @data = args[1] || args[0]
133
172
  @data = block if block
134
173
  @resource_class = args[2]
135
174
  end
136
175
 
137
176
  def sortable?
138
- if @data.is_a?(Proc)
139
- [String, Symbol].include?(@options[:sortable].class)
140
- elsif @options.has_key?(:sortable)
141
- @options[:sortable]
142
- elsif @data.respond_to?(:to_sym) && @resource_class
143
- !@resource_class.reflect_on_association(@data.to_sym)
177
+ if @options.has_key?(:sortable)
178
+ !!@options[:sortable]
179
+ elsif @resource_class
180
+ @resource_class.column_names.include?(sort_column_name)
144
181
  else
145
- true
182
+ @title.present?
146
183
  end
147
184
  end
148
185
 
@@ -155,36 +192,44 @@ module ActiveAdmin
155
192
  #
156
193
  # You can set the sort key by passing a string or symbol
157
194
  # to the sortable option:
158
- # column :username, :sortable => 'other_column_to_sort_on'
195
+ # column :username, sortable: 'other_column_to_sort_on'
159
196
  #
160
197
  # If you pass a block to be rendered for this column, the column
161
198
  # will not be sortable unless you pass a string to sortable to
162
199
  # sort the column on:
163
200
  #
164
- # column('Username', :sortable => 'login'){ @user.pretty_name }
201
+ # column('Username', sortable: 'login'){ @user.pretty_name }
165
202
  # # => Sort key will be 'login'
166
203
  #
167
204
  def sort_key
168
205
  # If boolean or nil, use the default sort key.
169
- if @options[:sortable] == true || @options[:sortable] == false || @options[:sortable].nil?
206
+ if @options[:sortable] == true || @options[:sortable] == false
170
207
  @data.to_s
208
+ elsif @options[:sortable].nil?
209
+ sort_column_name
171
210
  else
172
211
  @options[:sortable].to_s
173
212
  end
174
213
  end
175
214
 
176
215
  def pretty_title
177
- if @title.is_a?(Symbol)
178
- default_title = @title.to_s.titleize
179
- if @options[:i18n] && @options[:i18n].respond_to?(:human_attribute_name)
180
- @title = @options[:i18n].human_attribute_name(@title, :default => default_title)
216
+ if @title.is_a? Symbol
217
+ default = @title.to_s.titleize
218
+ if @options[:i18n].respond_to? :human_attribute_name
219
+ @title = @options[:i18n].human_attribute_name @title, default: default
181
220
  else
182
- default_title
221
+ default
183
222
  end
184
223
  else
185
224
  @title
186
225
  end
187
226
  end
227
+
228
+ private
229
+
230
+ def sort_column_name
231
+ @data.is_a?(Symbol) ? @data.to_s : @title.to_s
232
+ end
188
233
  end
189
234
  end
190
235
  end