yousty-activeadmin 1.0.4.pre → 1.0.5.pre

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (467) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +261 -211
  3. data/CONTRIBUTING.md +73 -39
  4. data/Gemfile +38 -20
  5. data/Guardfile +1 -0
  6. data/LICENSE +1 -1
  7. data/README.md +48 -24
  8. data/Rakefile +12 -4
  9. data/activeadmin.gemspec +21 -26
  10. data/app/assets/javascripts/active_admin/application.js.coffee +34 -5
  11. data/app/assets/javascripts/active_admin/base.js.coffee +11 -2
  12. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
  13. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
  14. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +39 -0
  15. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +3 -4
  16. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +51 -55
  17. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +19 -0
  18. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +79 -0
  19. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +37 -0
  20. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +27 -0
  21. data/app/assets/javascripts/active_admin/lib/popover.js.coffee +29 -58
  22. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +2 -3
  23. data/app/assets/stylesheets/active_admin/{_base.css.scss → _base.scss} +3 -0
  24. data/app/assets/stylesheets/active_admin/{_forms.css.scss → _forms.scss} +51 -15
  25. data/app/assets/stylesheets/active_admin/{_header.css.scss → _header.scss} +9 -5
  26. data/app/assets/stylesheets/active_admin/{_mixins.css.scss → _mixins.scss} +0 -0
  27. data/app/assets/stylesheets/active_admin/{_typography.css.scss → _typography.scss} +0 -0
  28. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +11 -0
  29. data/app/assets/stylesheets/active_admin/components/_buttons.scss +1 -1
  30. data/app/assets/stylesheets/active_admin/components/{_comments.css.scss → _comments.scss} +0 -0
  31. data/app/assets/stylesheets/active_admin/components/{_date_picker.css.scss → _date_picker.scss} +40 -12
  32. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +3 -1
  33. data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
  34. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
  35. data/app/assets/stylesheets/active_admin/components/_pagination.scss +10 -0
  36. data/app/assets/stylesheets/active_admin/components/{_popovers.css.scss → _popovers.scss} +0 -0
  37. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +4 -0
  38. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
  39. data/app/assets/stylesheets/active_admin/components/{_tables.css.scss → _tables.scss} +1 -0
  40. data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
  41. data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
  42. data/app/assets/stylesheets/active_admin/mixins/{_all.css.scss → _all.scss} +0 -0
  43. data/app/assets/stylesheets/active_admin/mixins/{_buttons.css.scss → _buttons.scss} +0 -0
  44. data/app/assets/stylesheets/active_admin/mixins/{_gradients.css.scss → _gradients.scss} +1 -1
  45. data/app/assets/stylesheets/active_admin/mixins/{_icons.css.scss → _icons.scss} +1 -2
  46. data/app/assets/stylesheets/active_admin/mixins/{_reset.css.scss → _reset.scss} +0 -0
  47. data/app/assets/stylesheets/active_admin/mixins/{_rounded.css.scss → _rounded.scss} +0 -0
  48. data/app/assets/stylesheets/active_admin/mixins/{_sections.css.scss → _sections.scss} +7 -1
  49. data/app/assets/stylesheets/active_admin/mixins/{_shadows.css.scss → _shadows.scss} +0 -0
  50. data/app/assets/stylesheets/active_admin/mixins/{_variables.css.scss → _variables.scss} +10 -8
  51. data/app/assets/stylesheets/active_admin/{print.css.scss → print.scss} +4 -0
  52. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +10 -7
  53. data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
  54. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  55. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +1 -1
  56. data/app/views/active_admin/devise/passwords/edit.html.erb +9 -10
  57. data/app/views/active_admin/devise/passwords/new.html.erb +5 -4
  58. data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
  59. data/app/views/active_admin/devise/sessions/new.html.erb +8 -8
  60. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  61. data/app/views/active_admin/devise/unlocks/new.html.erb +5 -4
  62. data/app/views/layouts/active_admin_logged_out.html.erb +3 -5
  63. data/config/locales/ar.yml +120 -0
  64. data/config/locales/bg.yml +26 -6
  65. data/config/locales/bs.yml +122 -0
  66. data/config/locales/ca.yml +10 -1
  67. data/config/locales/cs.yml +7 -2
  68. data/config/locales/da.yml +7 -3
  69. data/config/locales/de-CH.yml +14 -31
  70. data/config/locales/de.yml +33 -33
  71. data/config/locales/el.yml +127 -0
  72. data/config/locales/en-GB.yml +11 -4
  73. data/config/locales/en.yml +21 -4
  74. data/config/locales/{es_MX.yml → es-MX.yml} +14 -24
  75. data/config/locales/es.yml +32 -25
  76. data/config/locales/fa.yml +120 -0
  77. data/config/locales/fi.yml +9 -5
  78. data/config/locales/fr.yml +28 -12
  79. data/config/locales/he.yml +7 -3
  80. data/config/locales/hr.yml +42 -11
  81. data/config/locales/hu.yml +10 -3
  82. data/config/locales/it.yml +31 -3
  83. data/config/locales/ja.yml +17 -4
  84. data/config/locales/ko.yml +7 -1
  85. data/config/locales/lt.yml +42 -11
  86. data/config/locales/lv.yml +7 -3
  87. data/config/locales/{no-NB.yml → nb.yml} +46 -15
  88. data/config/locales/nl.yml +36 -5
  89. data/config/locales/pl.yml +13 -8
  90. data/config/locales/pt-BR.yml +36 -5
  91. data/config/locales/pt-PT.yml +8 -4
  92. data/config/locales/ro.yml +7 -3
  93. data/config/locales/ru.yml +26 -5
  94. data/config/locales/sv-SE.yml +9 -5
  95. data/config/locales/tr.yml +10 -3
  96. data/config/locales/uk.yml +36 -12
  97. data/config/locales/vi.yml +7 -3
  98. data/config/locales/zh-CN.yml +26 -10
  99. data/config/locales/zh-TW.yml +19 -13
  100. data/docs/0-installation.md +14 -6
  101. data/docs/1-general-configuration.md +8 -5
  102. data/docs/10-custom-pages.md +68 -70
  103. data/docs/11-decorators.md +48 -59
  104. data/docs/12-arbre-components.md +79 -73
  105. data/docs/13-authorization-adapter.md +128 -107
  106. data/docs/14-gotchas.md +90 -0
  107. data/docs/2-resource-customization.md +82 -15
  108. data/docs/3-index-pages.md +71 -12
  109. data/docs/3-index-pages/custom-index.md +31 -0
  110. data/docs/3-index-pages/index-as-table.md +45 -2
  111. data/docs/4-csv-format.md +1 -1
  112. data/docs/5-forms.md +78 -29
  113. data/docs/6-show-pages.md +31 -3
  114. data/docs/7-sidebars.md +46 -25
  115. data/docs/8-custom-actions.md +98 -77
  116. data/docs/9-batch-actions.md +211 -133
  117. data/docs/README.md +24 -0
  118. data/features/action_item.feature +3 -3
  119. data/features/authorization_pundit.feature +37 -0
  120. data/features/belongs_to.feature +3 -0
  121. data/features/breadcrumb.feature +48 -0
  122. data/features/comments/commenting.feature +44 -13
  123. data/features/development_reloading.feature +3 -4
  124. data/features/edit_page.feature +9 -19
  125. data/features/favicon.feature +3 -3
  126. data/features/i18n.feature +5 -0
  127. data/features/index/batch_actions.feature +41 -0
  128. data/features/index/filters.feature +23 -0
  129. data/features/index/format_as_csv.feature +90 -4
  130. data/features/index/index_as_blog.feature +4 -4
  131. data/features/index/index_as_table.feature +102 -6
  132. data/features/index/index_blank_slate.feature +22 -0
  133. data/features/index/index_scope_to.feature +16 -16
  134. data/features/index/page_title.feature +11 -0
  135. data/features/index/pagination.feature +1 -1
  136. data/features/index/switch_index_view.feature +14 -14
  137. data/features/new_page.feature +10 -20
  138. data/features/registering_pages.feature +1 -1
  139. data/features/renamed_resource.feature +32 -0
  140. data/features/show/page_title.feature +11 -0
  141. data/features/show/tabs.feature +27 -0
  142. data/features/sidebar_sections.feature +12 -0
  143. data/features/specifying_actions.feature +3 -3
  144. data/features/step_definitions/action_item_steps.rb +2 -2
  145. data/features/step_definitions/action_link_steps.rb +14 -1
  146. data/features/step_definitions/additional_web_steps.rb +17 -18
  147. data/features/step_definitions/asset_steps.rb +3 -3
  148. data/features/step_definitions/attribute_steps.rb +8 -3
  149. data/features/step_definitions/batch_action_steps.rb +26 -9
  150. data/features/step_definitions/blog_steps.rb +3 -0
  151. data/features/step_definitions/breadcrumb_steps.rb +1 -1
  152. data/features/step_definitions/comment_steps.rb +1 -1
  153. data/features/step_definitions/configuration_steps.rb +1 -1
  154. data/features/step_definitions/dashboard_steps.rb +2 -2
  155. data/features/step_definitions/factory_steps.rb +6 -6
  156. data/features/step_definitions/filter_steps.rb +25 -3
  157. data/features/step_definitions/flash_steps.rb +3 -3
  158. data/features/step_definitions/format_steps.rb +17 -10
  159. data/features/step_definitions/index_scope_steps.rb +5 -5
  160. data/features/step_definitions/layout_steps.rb +1 -1
  161. data/features/step_definitions/member_link_steps.rb +2 -2
  162. data/features/step_definitions/menu_steps.rb +3 -3
  163. data/features/step_definitions/pagination_steps.rb +2 -3
  164. data/features/step_definitions/sidebar_steps.rb +8 -3
  165. data/features/step_definitions/site_title_steps.rb +6 -4
  166. data/features/step_definitions/symbol_leak_steps.rb +1 -1
  167. data/features/step_definitions/tab_steps.rb +5 -0
  168. data/features/step_definitions/table_steps.rb +4 -4
  169. data/features/step_definitions/user_steps.rb +15 -9
  170. data/features/step_definitions/web_steps.rb +10 -11
  171. data/features/sti_resource.feature +2 -10
  172. data/features/strong_parameters.feature +73 -0
  173. data/features/support/env.rb +35 -2
  174. data/features/support/paths.rb +2 -2
  175. data/features/support/selectors.rb +1 -1
  176. data/features/users/resetting_password.feature +7 -7
  177. data/lib/active_admin.rb +18 -13
  178. data/lib/active_admin/abstract_view_factory.rb +7 -17
  179. data/lib/active_admin/application.rb +50 -25
  180. data/lib/active_admin/asset_registration.rb +2 -2
  181. data/lib/active_admin/authorization_adapter.rb +2 -2
  182. data/lib/active_admin/base_controller.rb +2 -3
  183. data/lib/active_admin/base_controller/authorization.rb +13 -31
  184. data/lib/active_admin/batch_actions.rb +1 -1
  185. data/lib/active_admin/batch_actions/controller.rb +13 -7
  186. data/lib/active_admin/batch_actions/resource_extension.rb +43 -17
  187. data/lib/active_admin/batch_actions/views/batch_action_form.rb +7 -4
  188. data/lib/active_admin/batch_actions/views/batch_action_popover.rb +3 -3
  189. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +8 -17
  190. data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -4
  191. data/lib/active_admin/callbacks.rb +25 -24
  192. data/lib/active_admin/cancan_adapter.rb +7 -11
  193. data/lib/active_admin/csv_builder.rb +92 -15
  194. data/lib/active_admin/dependency.rb +93 -0
  195. data/lib/active_admin/deprecation.rb +6 -7
  196. data/lib/active_admin/devise.rb +26 -14
  197. data/lib/active_admin/dsl.rb +18 -11
  198. data/lib/active_admin/engine.rb +7 -2
  199. data/lib/active_admin/error.rb +59 -0
  200. data/lib/active_admin/filters/dsl.rb +2 -2
  201. data/lib/active_admin/filters/forms.rb +19 -30
  202. data/lib/active_admin/filters/formtastic_addons.rb +20 -11
  203. data/lib/active_admin/filters/resource_extension.rb +16 -9
  204. data/lib/active_admin/form_builder.rb +94 -105
  205. data/lib/active_admin/helpers/collection.rb +7 -13
  206. data/lib/active_admin/helpers/i18n.rb +7 -0
  207. data/lib/active_admin/helpers/optional_display.rb +5 -5
  208. data/lib/active_admin/helpers/scope_chain.rb +1 -1
  209. data/lib/active_admin/helpers/settings.rb +16 -9
  210. data/lib/active_admin/iconic.rb +17 -15
  211. data/lib/active_admin/iconic/icons.rb +136 -136
  212. data/lib/active_admin/inputs.rb +11 -7
  213. data/lib/active_admin/inputs/datepicker_input.rb +1 -1
  214. data/lib/active_admin/inputs/filters/base.rb +42 -0
  215. data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
  216. data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
  217. data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
  218. data/lib/active_admin/inputs/filters/date_range_input.rb +36 -0
  219. data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
  220. data/lib/active_admin/inputs/filters/select_input.rb +54 -0
  221. data/lib/active_admin/inputs/filters/string_input.rb +26 -0
  222. data/lib/active_admin/menu.rb +3 -3
  223. data/lib/active_admin/menu_collection.rb +1 -4
  224. data/lib/active_admin/namespace.rb +52 -29
  225. data/lib/active_admin/order_clause.rb +26 -0
  226. data/lib/active_admin/orm/active_record.rb +2 -0
  227. data/lib/active_admin/orm/active_record/comments.rb +48 -51
  228. data/lib/active_admin/orm/active_record/comments/comment.rb +16 -10
  229. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +1 -1
  230. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +1 -1
  231. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +15 -13
  232. data/lib/active_admin/page.rb +5 -1
  233. data/lib/active_admin/page_dsl.rb +1 -1
  234. data/lib/active_admin/page_presenter.rb +2 -2
  235. data/lib/active_admin/pundit_adapter.rb +68 -0
  236. data/lib/active_admin/resource.rb +12 -3
  237. data/lib/active_admin/resource/action_items.rb +15 -8
  238. data/lib/active_admin/resource/belongs_to.rb +7 -3
  239. data/lib/active_admin/resource/controllers.rb +1 -0
  240. data/lib/active_admin/resource/includes.rb +12 -0
  241. data/lib/active_admin/resource/menu.rb +5 -5
  242. data/lib/active_admin/resource/naming.rb +25 -47
  243. data/lib/active_admin/resource/page_presenters.rb +1 -1
  244. data/lib/active_admin/resource/routes.rb +26 -10
  245. data/lib/active_admin/resource/scope_to.rb +7 -7
  246. data/lib/active_admin/resource/sidebars.rb +1 -0
  247. data/lib/active_admin/resource_collection.rb +44 -16
  248. data/lib/active_admin/resource_controller.rb +6 -5
  249. data/lib/active_admin/resource_controller/data_access.rb +87 -82
  250. data/lib/active_admin/resource_controller/decorators.rb +91 -9
  251. data/lib/active_admin/resource_controller/streaming.rb +37 -0
  252. data/lib/active_admin/resource_dsl.rb +54 -10
  253. data/lib/active_admin/router.rb +7 -7
  254. data/lib/active_admin/scope.rb +6 -6
  255. data/lib/active_admin/sidebar_section.rb +10 -2
  256. data/lib/active_admin/version.rb +1 -1
  257. data/lib/active_admin/view_factory.rb +17 -16
  258. data/lib/active_admin/view_helpers.rb +0 -1
  259. data/lib/active_admin/view_helpers/auto_link_helper.rb +23 -12
  260. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +13 -6
  261. data/lib/active_admin/view_helpers/display_helper.rb +30 -17
  262. data/lib/active_admin/view_helpers/download_format_links_helper.rb +21 -24
  263. data/lib/active_admin/view_helpers/fields_for.rb +2 -2
  264. data/lib/active_admin/view_helpers/flash_helper.rb +4 -3
  265. data/lib/active_admin/view_helpers/form_helper.rb +5 -9
  266. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +6 -6
  267. data/lib/active_admin/views/action_items.rb +2 -2
  268. data/lib/active_admin/views/components/action_list_popover.rb +1 -1
  269. data/lib/active_admin/views/components/active_admin_form.rb +123 -0
  270. data/lib/active_admin/views/components/attributes_table.rb +22 -13
  271. data/lib/active_admin/views/components/blank_slate.rb +1 -1
  272. data/lib/active_admin/views/components/columns.rb +13 -7
  273. data/lib/active_admin/views/components/dropdown_menu.rb +6 -6
  274. data/lib/active_admin/views/components/index_list.rb +7 -7
  275. data/lib/active_admin/views/components/paginated_collection.rb +33 -17
  276. data/lib/active_admin/views/components/panel.rb +8 -2
  277. data/lib/active_admin/views/components/popover.rb +1 -1
  278. data/lib/active_admin/views/components/scopes.rb +1 -1
  279. data/lib/active_admin/views/components/sidebar_section.rb +3 -2
  280. data/lib/active_admin/views/components/site_title.rb +2 -2
  281. data/lib/active_admin/views/components/status_tag.rb +34 -11
  282. data/lib/active_admin/views/components/table_for.rb +67 -22
  283. data/lib/active_admin/views/components/tabs.rb +28 -0
  284. data/lib/active_admin/views/components/unsupported_browser.rb +11 -0
  285. data/lib/active_admin/views/footer.rb +3 -3
  286. data/lib/active_admin/views/header.rb +3 -3
  287. data/lib/active_admin/views/index_as_blog.rb +6 -6
  288. data/lib/active_admin/views/index_as_grid.rb +2 -2
  289. data/lib/active_admin/views/index_as_table.rb +127 -40
  290. data/lib/active_admin/views/pages/base.rb +22 -18
  291. data/lib/active_admin/views/pages/form.rb +16 -6
  292. data/lib/active_admin/views/pages/index.rb +36 -20
  293. data/lib/active_admin/views/pages/layout.rb +1 -1
  294. data/lib/active_admin/views/pages/show.rb +4 -4
  295. data/lib/active_admin/views/tabbed_navigation.rb +7 -3
  296. data/lib/active_admin/views/title_bar.rb +10 -8
  297. data/lib/generators/active_admin/assets/assets_generator.rb +1 -3
  298. data/lib/generators/active_admin/devise/devise_generator.rb +20 -28
  299. data/lib/generators/active_admin/install/install_generator.rb +8 -9
  300. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +20 -22
  301. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +12 -9
  302. data/lib/generators/active_admin/install/templates/dashboard.rb +4 -4
  303. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +3 -3
  304. data/lib/generators/active_admin/page/USAGE +8 -0
  305. data/lib/generators/active_admin/page/page_generator.rb +12 -0
  306. data/lib/generators/active_admin/page/templates/page.rb +5 -0
  307. data/lib/generators/active_admin/resource/resource_generator.rb +2 -4
  308. data/lib/generators/active_admin/resource/templates/admin.rb +15 -0
  309. data/lib/ransack_ext.rb +4 -4
  310. data/script/local +2 -2
  311. data/script/travis_cache +107 -0
  312. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +25 -0
  313. data/spec/javascripts/fixtures/flashes.html +2 -0
  314. data/spec/rails_helper.rb +154 -0
  315. data/spec/{integration → requests}/default_namespace_spec.rb +6 -6
  316. data/spec/{integration → requests}/javascript_spec.rb +5 -5
  317. data/spec/requests/memory_spec.rb +23 -0
  318. data/spec/requests/stylesheets_spec.rb +18 -0
  319. data/spec/spec_helper.rb +12 -170
  320. data/spec/support/detect_rails_version.rb +31 -39
  321. data/spec/support/rails_template.rb +61 -34
  322. data/spec/support/rails_template_with_data.rb +14 -14
  323. data/spec/support/templates/admin/stores.rb +3 -5
  324. data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
  325. data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
  326. data/spec/support/templates/policies/admin_user_policy.rb +11 -0
  327. data/spec/support/templates/policies/application_policy.rb +45 -0
  328. data/spec/support/templates/policies/category_policy.rb +7 -0
  329. data/spec/support/templates/policies/post_policy.rb +15 -0
  330. data/spec/support/templates/policies/store_policy.rb +11 -0
  331. data/spec/support/templates/policies/user_policy.rb +11 -0
  332. data/spec/support/templates/post_decorator.rb +4 -46
  333. data/spec/unit/abstract_view_factory_spec.rb +11 -11
  334. data/spec/unit/action_builder_spec.rb +24 -18
  335. data/spec/unit/active_admin_spec.rb +2 -2
  336. data/spec/unit/application_spec.rb +30 -31
  337. data/spec/unit/asset_registration_spec.rb +11 -11
  338. data/spec/unit/authorization/authorization_adapter_spec.rb +7 -7
  339. data/spec/unit/authorization/controller_authorization_spec.rb +11 -11
  340. data/spec/unit/authorization/index_overriding_spec.rb +22 -0
  341. data/spec/unit/auto_link_spec.rb +42 -5
  342. data/spec/unit/batch_actions/resource_spec.rb +15 -14
  343. data/spec/unit/batch_actions/settings_spec.rb +18 -18
  344. data/spec/unit/belongs_to_spec.rb +26 -17
  345. data/spec/unit/cancan_adapter_spec.rb +4 -4
  346. data/spec/unit/comments_spec.rb +99 -39
  347. data/spec/unit/component_spec.rb +3 -3
  348. data/spec/unit/config_shared_examples.rb +8 -8
  349. data/spec/unit/controller_filters_spec.rb +26 -14
  350. data/spec/unit/csv_builder_spec.rb +152 -24
  351. data/spec/unit/dependency_spec.rb +135 -0
  352. data/spec/unit/devise_spec.rb +17 -37
  353. data/spec/unit/dsl_spec.rb +70 -9
  354. data/spec/unit/event_spec.rb +9 -9
  355. data/spec/unit/filters/filter_form_builder_spec.rb +167 -157
  356. data/spec/unit/filters/resource_spec.rb +35 -33
  357. data/spec/unit/form_builder_spec.rb +383 -145
  358. data/spec/unit/generators/install_spec.rb +5 -5
  359. data/spec/unit/helpers/collection_spec.rb +18 -18
  360. data/spec/unit/helpers/scope_chain_spec.rb +5 -5
  361. data/spec/unit/helpers/settings_spec.rb +4 -4
  362. data/spec/unit/i18n_spec.rb +12 -0
  363. data/spec/unit/menu_collection_spec.rb +14 -14
  364. data/spec/unit/menu_item_spec.rb +42 -42
  365. data/spec/unit/menu_spec.rb +20 -20
  366. data/spec/unit/namespace/authorization_spec.rb +5 -5
  367. data/spec/unit/namespace/register_page_spec.rb +9 -9
  368. data/spec/unit/namespace/register_resource_spec.rb +26 -28
  369. data/spec/unit/namespace_spec.rb +20 -20
  370. data/spec/unit/order_clause_spec.rb +81 -0
  371. data/spec/unit/page_controller_spec.rb +1 -1
  372. data/spec/unit/page_spec.rb +18 -12
  373. data/spec/unit/pretty_format_spec.rb +42 -14
  374. data/spec/unit/pundit_adapter_spec.rb +98 -0
  375. data/spec/unit/resource/action_items_spec.rb +13 -10
  376. data/spec/unit/resource/includes_spec.rb +21 -0
  377. data/spec/unit/resource/menu_spec.rb +1 -1
  378. data/spec/unit/resource/naming_spec.rb +23 -23
  379. data/spec/unit/resource/page_presenters_spec.rb +8 -8
  380. data/spec/unit/resource/pagination_spec.rb +6 -6
  381. data/spec/unit/resource/routes_spec.rb +10 -10
  382. data/spec/unit/resource/scopes_spec.rb +14 -7
  383. data/spec/unit/resource/sidebars_spec.rb +6 -6
  384. data/spec/unit/resource_collection_spec.rb +66 -68
  385. data/spec/unit/resource_controller/data_access_spec.rb +39 -21
  386. data/spec/unit/resource_controller/decorators_spec.rb +83 -0
  387. data/spec/unit/resource_controller/sidebars_spec.rb +7 -8
  388. data/spec/unit/resource_controller_spec.rb +66 -62
  389. data/spec/unit/resource_registration_spec.rb +12 -12
  390. data/spec/unit/resource_spec.rb +75 -40
  391. data/spec/unit/routing_spec.rb +39 -31
  392. data/spec/unit/scope_spec.rb +112 -30
  393. data/spec/unit/settings_spec.rb +51 -21
  394. data/spec/unit/view_factory_spec.rb +2 -2
  395. data/spec/unit/view_helpers/breadcrumbs_spec.rb +137 -69
  396. data/spec/unit/view_helpers/display_name_spec.rb +49 -21
  397. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +5 -5
  398. data/spec/unit/view_helpers/fields_for_spec.rb +18 -18
  399. data/spec/unit/view_helpers/flash_helper_spec.rb +25 -0
  400. data/spec/unit/view_helpers/form_helper_spec.rb +9 -22
  401. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +59 -21
  402. data/spec/unit/views/components/action_list_popover_spec.rb +16 -6
  403. data/spec/unit/views/components/attributes_table_spec.rb +94 -52
  404. data/spec/unit/views/components/batch_action_popover_spec.rb +20 -6
  405. data/spec/unit/views/components/blank_slate_spec.rb +14 -4
  406. data/spec/unit/views/components/columns_spec.rb +52 -22
  407. data/spec/unit/views/components/index_list_spec.rb +11 -8
  408. data/spec/unit/views/components/index_table_for_spec.rb +46 -0
  409. data/spec/unit/views/components/paginated_collection_spec.rb +68 -59
  410. data/spec/unit/views/components/panel_spec.rb +32 -21
  411. data/spec/unit/views/components/popover_spec.rb +7 -7
  412. data/spec/unit/views/components/sidebar_section_spec.rb +18 -8
  413. data/spec/unit/views/components/site_title_spec.rb +8 -8
  414. data/spec/unit/views/components/status_tag_spec.rb +178 -38
  415. data/spec/unit/views/components/table_for_spec.rb +227 -44
  416. data/spec/unit/views/components/tabs_spec.rb +39 -0
  417. data/spec/unit/views/components/unsupported_browser_spec.rb +47 -0
  418. data/spec/unit/views/pages/form_spec.rb +17 -10
  419. data/spec/unit/views/pages/index_spec.rb +60 -0
  420. data/spec/unit/views/pages/layout_spec.rb +17 -21
  421. data/spec/unit/views/pages/show_spec.rb +16 -3
  422. data/spec/unit/views/tabbed_navigation_spec.rb +61 -52
  423. data/tasks/docs.rake +1 -1
  424. data/tasks/parallel_tests.rake +8 -2
  425. data/tasks/test.rake +8 -4
  426. data/tasks/yard.rake +7 -5
  427. metadata +180 -101
  428. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  429. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  430. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  431. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  432. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  433. data/app/assets/images/active_admin/index_list_icons/block_icon.svg +0 -10
  434. data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +0 -4
  435. data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +0 -13
  436. data/app/assets/images/active_admin/index_list_icons/table_icon.svg +0 -3
  437. data/app/assets/images/active_admin/loading.gif +0 -0
  438. data/app/assets/javascripts/active_admin/components/application.js.coffee +0 -23
  439. data/app/assets/javascripts/active_admin/components/batch_actions.js.coffee +0 -26
  440. data/app/assets/javascripts/active_admin/components/has_many.js.coffee +0 -41
  441. data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +0 -11
  442. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +0 -39
  443. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +0 -95
  444. data/app/views/active_admin/dashboard/index.html.arb +0 -1
  445. data/app/views/active_admin/resource/index.csv.erb +0 -17
  446. data/docs/3-index-pages/create-an-index.md +0 -29
  447. data/lib/active_admin/inputs/filter_base.rb +0 -33
  448. data/lib/active_admin/inputs/filter_base/search_method_select.rb +0 -73
  449. data/lib/active_admin/inputs/filter_boolean_input.rb +0 -32
  450. data/lib/active_admin/inputs/filter_check_boxes_input.rb +0 -51
  451. data/lib/active_admin/inputs/filter_date_range_input.rb +0 -34
  452. data/lib/active_admin/inputs/filter_numeric_input.rb +0 -10
  453. data/lib/active_admin/inputs/filter_select_input.rb +0 -61
  454. data/lib/active_admin/inputs/filter_string_input.rb +0 -24
  455. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +0 -7
  456. data/spec/integration/memory_spec.rb +0 -29
  457. data/spec/integration/stylesheets_spec.rb +0 -41
  458. data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +0 -60
  459. data/spec/javascripts/compiled/jquery.aa.popover-spec.js +0 -106
  460. data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +0 -37
  461. data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +0 -108
  462. data/spec/javascripts/helpers/vendor/jasmine-jquery.js +0 -288
  463. data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +0 -2915
  464. data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +0 -34
  465. data/spec/javascripts/support/jquery.min.js +0 -4
  466. data/spec/spec_helper_without_rails.rb +0 -16
  467. data/tasks/js.rake +0 -32
@@ -17,10 +17,9 @@ module ActiveAdmin
17
17
  # Returns the filters for this resource. If filters are not enabled,
18
18
  # it will always return an empty array.
19
19
  #
20
- # @return [Array] Filters that apply for this resource
20
+ # @return [Hash] Filters that apply for this resource
21
21
  def filters
22
- return [] unless filters_enabled?
23
- filter_lookup
22
+ filters_enabled? ? filter_lookup : {}
24
23
  end
25
24
 
26
25
  # Setter to enable / disable filters on this resource.
@@ -46,11 +45,11 @@ module ActiveAdmin
46
45
  # Remove a filter for this resource. If filters are not enabled, this method
47
46
  # will raise a RuntimeError
48
47
  #
49
- # @param [Symbol] attribute The attribute to not filter on
50
- def remove_filter(attribute)
48
+ # @param [Symbol] attributes The attributes to not filter on
49
+ def remove_filter(*attributes)
51
50
  raise Disabled unless filters_enabled?
52
51
 
53
- (@filters_to_remove ||= []) << attribute.to_sym
52
+ attributes.each { |attribute| (@filters_to_remove ||= []) << attribute.to_sym }
54
53
  end
55
54
 
56
55
  # Add a filter for this resource. If filters are not enabled, this method
@@ -76,7 +75,7 @@ module ActiveAdmin
76
75
  # Collapses the waveform, if you will, of which filters should be displayed.
77
76
  # Removes filters and adds in default filters as desired.
78
77
  def filter_lookup
79
- filters = @filters.try(:deep_dup) || {}
78
+ filters = @filters.try(:dup) || {}
80
79
 
81
80
  if filters.empty? || preserve_default_filters?
82
81
  default_filters.each do |f|
@@ -93,7 +92,15 @@ module ActiveAdmin
93
92
 
94
93
  # @return [Array] The array of default filters for this resource
95
94
  def default_filters
96
- default_association_filters + default_content_filters
95
+ default_association_filters + default_content_filters + custom_ransack_filters
96
+ end
97
+
98
+ def custom_ransack_filters
99
+ if resource_class.respond_to?(:_ransackers)
100
+ resource_class._ransackers.keys.map(&:to_sym)
101
+ else
102
+ []
103
+ end
97
104
  end
98
105
 
99
106
  # Returns a default set of filters for the associations
@@ -101,7 +108,7 @@ module ActiveAdmin
101
108
  if resource_class.respond_to?(:reflect_on_all_associations)
102
109
  poly, not_poly = resource_class.reflect_on_all_associations.partition{ |r| r.macro == :belongs_to && r.options[:polymorphic] }
103
110
 
104
- # remove associations nested more than twice
111
+ # remove deeply nested associations
105
112
  not_poly.reject!{ |r| r.chain.length > 2 }
106
113
 
107
114
  filters = poly.map(&:foreign_type) + not_poly.map(&:name)
@@ -1,146 +1,135 @@
1
- # Note for posterity:
2
- #
3
- # Here we have two core customizations on top of Formtastic. First, this allows
4
- # you to build forms in the AA DSL without dealing with the HTML return value of
5
- # individual form methods (hence the +form_buffers+ object). Second, this provides
6
- # an intuitive way to build has_many associated records in the same form.
7
- #
8
- module ActiveAdmin
9
- class FormBuilder < ::Formtastic::FormBuilder
10
-
11
- attr_reader :form_buffers
12
-
13
- def initialize(*args)
14
- @form_buffers = ["".html_safe]
15
- super
1
+ # Provides an intuitive way to build has_many associated records in the same form.
2
+ module Formtastic
3
+ module Inputs
4
+ module Base
5
+ def input_wrapping(&block)
6
+ html = super
7
+ template.concat(html) if template.output_buffer && template.assigns['has_many_block']
8
+ html
9
+ end
16
10
  end
11
+ end
12
+ end
17
13
 
18
- def inputs(*args, &block)
19
- @use_form_buffer = block_given?
20
- form_buffers.last << with_new_form_buffer{ super }
21
- end
14
+ module ActiveAdmin
15
+ class FormBuilder < ::Formtastic::FormBuilder
16
+ self.input_namespaces = [::Object, ::ActiveAdmin::Inputs, ::Formtastic::Inputs]
22
17
 
23
- # If this `input` call is inside a `inputs` block, add the content
24
- # to the form buffer. Else, return it directly.
25
- def input(method, *args)
26
- content = with_new_form_buffer{ super }
27
- @use_form_buffer ? form_buffers.last << content : content
28
- end
18
+ # TODO: remove both class finders after formtastic 4 (where it will be default)
19
+ self.input_class_finder = ::Formtastic::InputClassFinder
20
+ self.action_class_finder = ::Formtastic::ActionClassFinder
29
21
 
30
- def cancel_link(url = {:action => "index"}, html_options = {}, li_attrs = {})
22
+ def cancel_link(url = {action: "index"}, html_options = {}, li_attrs = {})
31
23
  li_attrs[:class] ||= "cancel"
32
24
  li_content = template.link_to I18n.t('active_admin.cancel'), url, html_options
33
- form_buffers.last << template.content_tag(:li, li_content, li_attrs)
25
+ template.content_tag(:li, li_content, li_attrs)
34
26
  end
35
27
 
36
- def actions(*args, &block)
37
- form_buffers.last << with_new_form_buffer do
38
- block_given? ? super : super{ commit_action_with_cancel_link }
39
- end
40
- end
41
-
42
- def action(*args)
43
- form_buffers.last << with_new_form_buffer{ super }
44
- end
28
+ attr_accessor :already_in_an_inputs_block
45
29
 
46
- def commit_action_with_cancel_link
47
- action(:submit)
48
- cancel_link
30
+ def assoc_heading(assoc)
31
+ object.class.reflect_on_association(assoc).klass.model_name.
32
+ human(count: ::ActiveAdmin::Helpers::I18n::PLURAL_MANY_COUNT)
49
33
  end
50
34
 
51
35
  def has_many(assoc, options = {}, &block)
52
- options = {for: assoc, new_record: true}.merge options
53
- options[:class] ||= ""
54
- options[:class] << "inputs has_many_fields"
55
-
56
- # Add Delete Links
57
- form_block = proc do |has_many_form|
58
- index = parent_child_index options[:parent] if options[:parent]
59
- contents = block.call has_many_form, index
60
-
61
- if has_many_form.object.new_record?
62
- contents << template.content_tag(:li) do
63
- template.link_to I18n.t('active_admin.has_many_remove'), "#", class: 'button has_many_remove'
64
- end
65
- elsif options[:allow_destroy]
66
- has_many_form.input :_destroy, as: :boolean, wrapper_html: {class: 'has_many_delete'},
67
- label: I18n.t('active_admin.has_many_delete')
68
- end
69
- contents
36
+ # remove options that should not render as attributes
37
+ custom_settings = :new_record, :allow_destroy, :heading, :sortable, :sortable_start
38
+ builder_options = {new_record: true}.merge! options.slice *custom_settings
39
+ options = {for: assoc }.merge! options.except *custom_settings
40
+ options[:class] = [options[:class], "inputs has_many_fields"].compact.join(' ')
41
+ sortable_column = builder_options[:sortable]
42
+ sortable_start = builder_options.fetch(:sortable_start, 0)
43
+
44
+ if sortable_column
45
+ options[:for] = [assoc, sorted_children(assoc, sortable_column)]
70
46
  end
71
47
 
72
- form_buffers.last << with_new_form_buffer do
73
- template.content_tag :div, class: "has_many #{assoc}" do
74
- unless options.key?(:heading) && !options[:heading]
75
- form_buffers.last << template.content_tag(:h3) do
76
- options[:heading] || object.class.reflect_on_association(assoc).klass.model_name.human(count: 1.1)
77
- end
78
- end
79
-
80
- inputs options, &form_block
48
+ html = "".html_safe
49
+ unless builder_options.key?(:heading) && !builder_options[:heading]
50
+ html << template.content_tag(:h3) do
51
+ builder_options[:heading] || assoc_heading(assoc)
52
+ end
53
+ end
81
54
 
82
- form_buffers.last << js_for_has_many(assoc, form_block, template, options[:new_record]) if options[:new_record]
55
+ html << template.capture do
56
+ contents = "".html_safe
57
+ form_block = proc do |has_many_form|
58
+ index = parent_child_index options[:parent] if options[:parent]
59
+ block.call has_many_form, index
60
+ template.concat has_many_actions(has_many_form, builder_options, "".html_safe)
61
+ end
62
+
63
+ template.assign('has_many_block'=> true)
64
+ contents = without_wrapper { inputs(options, &form_block) }
65
+
66
+ if builder_options[:new_record]
67
+ contents << js_for_has_many(assoc, form_block, template, builder_options[:new_record], options[:class])
68
+ else
69
+ contents
83
70
  end
84
71
  end
85
- end
86
72
 
87
- def semantic_errors(*args)
88
- form_buffers.last << with_new_form_buffer{ super }
73
+ tag = @already_in_an_inputs_block ? :li : :div
74
+ html = template.content_tag(tag, html, class: "has_many_container #{assoc}", 'data-sortable' => sortable_column, 'data-sortable-start' => sortable_start)
75
+ template.concat(html) if template.output_buffer
76
+ html
89
77
  end
90
78
 
91
79
  protected
92
80
 
93
- def active_admin_input_class_name(as)
94
- "ActiveAdmin::Inputs::#{as.to_s.camelize}Input"
95
- end
81
+ def has_many_actions(has_many_form, builder_options, contents)
82
+ if has_many_form.object.new_record?
83
+ contents << template.content_tag(:li) do
84
+ template.link_to I18n.t('active_admin.has_many_remove'), "#", class: 'button has_many_remove'
85
+ end
86
+ elsif builder_options[:allow_destroy]
87
+ has_many_form.input(:_destroy, as: :boolean,
88
+ wrapper_html: {class: 'has_many_delete'},
89
+ label: I18n.t('active_admin.has_many_delete'))
90
+ end
96
91
 
97
- def input_class(as)
98
- @input_classes_cache ||= {}
99
- @input_classes_cache[as] ||= begin
100
- begin
101
- custom_input_class_name(as).constantize
102
- rescue NameError
103
- begin
104
- active_admin_input_class_name(as).constantize
105
- rescue NameError
106
- standard_input_class_name(as).constantize
107
- end
92
+ if builder_options[:sortable]
93
+ has_many_form.input builder_options[:sortable], as: :hidden
94
+
95
+ contents << template.content_tag(:li, class: 'handle') do
96
+ Iconic.icon :move_vertical
108
97
  end
109
- rescue NameError
110
- raise Formtastic::UnknownInputError, "Unable to find input class for #{as}"
111
98
  end
99
+
100
+ contents
112
101
  end
113
102
 
114
- # This method calls the block it's passed (in our case, the `f.inputs` block)
115
- # and wraps the resulting HTML in a fieldset. If your block doesn't have a
116
- # valid return value but it was otherwise built correctly, we instead use
117
- # the most recent part of the Active Admin form buffer.
118
- def field_set_and_list_wrapping(*args, &block)
119
- block_given? ? super{
120
- (val = yield).is_a?(String) ? val : form_buffers.last
121
- } : super
103
+ def sorted_children(assoc, column)
104
+ object.public_send(assoc).sort_by do |o|
105
+ attribute = o.public_send column
106
+ [attribute.nil? ? Float::INFINITY : attribute, o.id || Float::INFINITY]
107
+ end
122
108
  end
123
109
 
124
110
  private
125
111
 
126
- def with_new_form_buffer
127
- form_buffers << ''.html_safe
128
- return_value = (yield || '').html_safe
129
- form_buffers.pop
130
- return_value
112
+ def without_wrapper
113
+ is_being_wrapped = @already_in_an_inputs_block
114
+ @already_in_an_inputs_block = false
115
+
116
+ html = yield
117
+
118
+ @already_in_an_inputs_block = is_being_wrapped
119
+ html
131
120
  end
132
121
 
133
122
  # Capture the ADD JS
134
- def js_for_has_many(assoc, form_block, template, new_record)
123
+ def js_for_has_many(assoc, form_block, template, new_record, class_string)
135
124
  assoc_reflection = object.class.reflect_on_association assoc
136
125
  assoc_name = assoc_reflection.klass.model_name
137
- placeholder = "NEW_#{assoc_name.to_s.upcase.split(' ').join('_')}_RECORD"
126
+ placeholder = "NEW_#{assoc_name.to_s.underscore.upcase.gsub(/\//, '_')}_RECORD"
138
127
  opts = {
139
- :for => [assoc, assoc_reflection.klass.new],
140
- :class => "inputs has_many_fields",
141
- :for_options => { child_index: placeholder }
128
+ for: [assoc, assoc_reflection.klass.new],
129
+ class: class_string,
130
+ for_options: { child_index: placeholder }
142
131
  }
143
- html = with_new_form_buffer{ inputs_for_nested_attributes opts, &form_block }
132
+ html = template.capture{ inputs_for_nested_attributes opts, &form_block }
144
133
  text = new_record.is_a?(String) ? new_record : I18n.t('active_admin.has_many_new', model: assoc_name.human)
145
134
 
146
135
  template.link_to text, '#', class: "button has_many_add", data: {
@@ -1,22 +1,16 @@
1
1
  module ActiveAdmin
2
2
  module Helpers
3
3
  module Collection
4
- # Works around this issue: https://github.com/rails/rails/issues/7121
5
- #
6
- # GROUP BY + COUNT drops SELECT statement. This leads to SQL error when
7
- # the ORDER statement mentions a column defined in the SELECT statement.
8
- #
9
- # We remove the ORDER statement to work around this issue.
10
- def collection_size(collection=collection)
11
- size = collection.reorder("").count
12
- # when GROUP BY is used, AR returns Hash instead of Fixnum for .size
13
- size = size.size if size.kind_of?(Hash)
4
+ # 1. removes `select` and `order` to prevent invalid SQL
5
+ # 2. correctly handles the Hash returned when `group by` is used
6
+ def collection_size(c = collection)
7
+ c = c.except :select, :order
14
8
 
15
- size
9
+ c.group_values.present? ? c.count.count : c.count
16
10
  end
17
11
 
18
- def collection_is_empty?(collection=collection)
19
- collection_size(collection) == 0
12
+ def collection_is_empty?(c = collection)
13
+ collection_size(c) == 0
20
14
  end
21
15
  end
22
16
  end
@@ -0,0 +1,7 @@
1
+ module ActiveAdmin
2
+ module Helpers
3
+ module I18n
4
+ PLURAL_MANY_COUNT = 2.1
5
+ end
6
+ end
7
+ end
@@ -5,10 +5,10 @@ module ActiveAdmin
5
5
  #
6
6
  # The options hash accepts:
7
7
  #
8
- # :only => :index
9
- # :only => [:index, :show]
10
- # :except => :index
11
- # :except => [:index, :show]
8
+ # only: :index
9
+ # only: [:index, :show]
10
+ # except: :index
11
+ # except: [:index, :show]
12
12
  #
13
13
  # call #normalize_display_options! after @options has been set
14
14
  # to ensure that the display options are setup correctly
@@ -20,7 +20,7 @@ module ActiveAdmin
20
20
 
21
21
  case condition = @options[:if]
22
22
  when Symbol, String
23
- render_context.send condition
23
+ render_context.public_send condition
24
24
  when Proc
25
25
  render_context.instance_exec &condition
26
26
  else
@@ -12,7 +12,7 @@ module ActiveAdmin
12
12
  #
13
13
  def scope_chain(scope, chain)
14
14
  if scope.scope_method
15
- chain.send(scope.scope_method)
15
+ chain.public_send scope.scope_method
16
16
  elsif scope.scope_block
17
17
  instance_exec chain, &scope.scope_block
18
18
  else
@@ -37,16 +37,23 @@ module ActiveAdmin
37
37
  default_settings[name] = default
38
38
  attr_writer name
39
39
 
40
- # Creates a reader that will grab the default if no value has been set.
41
- class_eval <<-EOC, __FILE__, __LINE__ + 1
42
- def #{name}
43
- if instance_variable_defined? :@#{name}
44
- @#{name}
45
- else
46
- read_default_setting(:#{name})
47
- end
40
+ # Create an accessor that looks up the default value if none is set.
41
+ define_method name do
42
+ if instance_variable_defined? "@#{name}"
43
+ instance_variable_get "@#{name}"
44
+ else
45
+ read_default_setting name.to_sym
48
46
  end
49
- EOC
47
+ end
48
+
49
+ define_method "#{name}?" do
50
+ value = public_send(name)
51
+ if value.is_a? Array
52
+ value.any?
53
+ else
54
+ value.present?
55
+ end
56
+ end
50
57
  end
51
58
 
52
59
  def deprecated_setting(name, default, message = nil)
@@ -7,32 +7,33 @@ module ActiveAdmin
7
7
  @@default_color = "#5E6469"
8
8
  mattr_accessor :default_color
9
9
 
10
- # Default width to use for icons
11
- @@default_width = 15
12
- mattr_accessor :default_width
13
-
14
- # Default height to use for icons
15
- @@default_height = 15
16
- mattr_accessor :default_height
17
10
 
18
11
  # Render an icon:
19
- # Iconic.icon :loop
12
+ # Iconic.icon :loop, width: 100, height: 100, color: "#5E6469"
13
+ # Iconic.icon :loop, width: "1em", height: "1em", color: "#5E6469"
14
+ # NOTE: you can omit the dimensions if they are specified in css
20
15
  def self.icon(name, options = {})
21
16
  options = {
22
- :color => default_color,
23
- :width => default_width,
24
- :height => default_height,
25
- :id => ""
17
+ color: default_color,
18
+ id: ""
26
19
  }.merge(options)
27
20
 
28
-
29
21
  options[:style] = "fill:#{options[:color]};"
30
22
  options[:fill] = options.delete(:color)
31
23
 
24
+ css = options.delete(:css) || {}
25
+
26
+ # extract desired dimensions to be used as the wrapper's inline styles
32
27
  # Convert to strings representations of pixels
33
28
  [:width, :height].each do |key|
34
- options[key] = "#{options[key]}px" unless options[key].is_a?(String)
29
+ value = options.delete key
30
+ css[key] ||= "#{value}px" unless value.blank? || value.is_a?(String)
35
31
  end
32
+ css_str = css.map {|k,v| "#{k}:#{v}"}.join(";")
33
+ css_str = "style=\"#{css_str}\"" if css_str.present?
34
+
35
+ # make the svg itself expand to its parent
36
+ options[:width] = options[:height] = "100%"
36
37
 
37
38
  template = ICONS[name.to_sym]
38
39
 
@@ -41,7 +42,8 @@ module ActiveAdmin
41
42
  options.each do |key, value|
42
43
  svg.gsub!("{#{key}}", value)
43
44
  end
44
- "<span class=\"icon icon_#{name}\">#{svg}</span>".html_safe
45
+
46
+ "<span class=\"icon icon_#{name}\" #{css_str}>#{svg}</span>".html_safe
45
47
  else
46
48
  raise "Could not find the icon named #{name}"
47
49
  end