activeadmin 0.6.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. data/.gitignore +5 -1
  2. data/.travis.yml +1 -1
  3. data/.yardopts +2 -3
  4. data/CHANGELOG.md +180 -36
  5. data/CONTRIBUTING.md +12 -2
  6. data/Gemfile +9 -3
  7. data/README.rdoc +38 -65
  8. data/Rakefile +1 -3
  9. data/activeadmin.gemspec +10 -11
  10. data/app/assets/images/active_admin/index_list_icons/block_icon.svg +1 -1
  11. data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +1 -1
  12. data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +1 -1
  13. data/app/assets/images/active_admin/index_list_icons/table_icon.svg +1 -1
  14. data/app/assets/javascripts/active_admin/components/jquery.aa.checkbox-toggler.js.coffee +2 -2
  15. data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +2 -2
  16. data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +2 -2
  17. data/app/assets/javascripts/active_admin/components/jquery.aa.table-checkbox-toggler.js.coffee +2 -2
  18. data/app/assets/javascripts/active_admin/lib/namespace.js.coffee +2 -1
  19. data/app/assets/javascripts/active_admin/pages/application.js.coffee +6 -1
  20. data/app/assets/stylesheets/active_admin/_base.css.scss +29 -34
  21. data/app/assets/stylesheets/active_admin/_forms.css.scss +65 -62
  22. data/app/assets/stylesheets/active_admin/_header.css.scss +57 -45
  23. data/app/assets/stylesheets/active_admin/_typography.css.scss +9 -9
  24. data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +1 -1
  25. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +5 -5
  26. data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +2 -2
  27. data/app/assets/stylesheets/active_admin/components/_comments.css.scss +1 -1
  28. data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +20 -20
  29. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +16 -16
  30. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +25 -23
  31. data/app/assets/stylesheets/active_admin/components/_grid.scss +2 -2
  32. data/app/assets/stylesheets/active_admin/components/_index_list.scss +1 -1
  33. data/app/assets/stylesheets/active_admin/components/_pagination.scss +10 -10
  34. data/app/assets/stylesheets/active_admin/components/_panels.scss +1 -1
  35. data/app/assets/stylesheets/active_admin/components/_popovers.css.scss +27 -27
  36. data/app/assets/stylesheets/active_admin/components/_scopes.scss +1 -1
  37. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +10 -10
  38. data/app/assets/stylesheets/active_admin/components/_tables.css.scss +9 -9
  39. data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +3 -3
  40. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +4 -4
  41. data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +4 -7
  42. data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +5 -5
  43. data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +3 -3
  44. data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +6 -6
  45. data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +8 -8
  46. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +1 -1
  47. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +1 -1
  48. data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +9 -1
  49. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +1 -1
  50. data/app/assets/stylesheets/active_admin/print.css.scss +2 -8
  51. data/app/assets/stylesheets/active_admin/structure/_footer.scss +5 -5
  52. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +13 -13
  53. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +14 -14
  54. data/app/views/active_admin/devise/passwords/edit.html.erb +1 -1
  55. data/app/views/active_admin/devise/sessions/new.html.erb +1 -1
  56. data/app/views/active_admin/devise/shared/_links.erb +8 -1
  57. data/app/views/active_admin/resource/index.csv.erb +3 -3
  58. data/app/views/layouts/active_admin_logged_out.html.erb +5 -3
  59. data/config/locales/bg.yml +101 -0
  60. data/{lib/active_admin → config}/locales/ca.yml +24 -7
  61. data/{lib/active_admin → config}/locales/cs.yml +34 -12
  62. data/{lib/active_admin → config}/locales/da.yml +29 -7
  63. data/config/locales/de-CH.yml +117 -0
  64. data/{lib/active_admin → config}/locales/de.yml +19 -9
  65. data/config/locales/en-GB.yml +90 -0
  66. data/{lib/active_admin → config}/locales/en.yml +16 -6
  67. data/config/locales/es.yml +106 -0
  68. data/{lib/active_admin/locales/es.yml → config/locales/es_MX.yml} +14 -8
  69. data/{lib/active_admin → config}/locales/fr.yml +14 -6
  70. data/{lib/active_admin → config}/locales/he.yml +16 -6
  71. data/{lib/active_admin → config}/locales/hr.yml +14 -6
  72. data/{lib/active_admin → config}/locales/hu.yml +31 -6
  73. data/{lib/active_admin → config}/locales/it.yml +14 -6
  74. data/{lib/active_admin → config}/locales/ja.yml +32 -7
  75. data/{lib/active_admin → config}/locales/ko.yml +14 -6
  76. data/{lib/active_admin → config}/locales/lt.yml +15 -6
  77. data/{lib/active_admin → config}/locales/lv.yml +14 -6
  78. data/{lib/active_admin → config}/locales/nl.yml +14 -6
  79. data/{lib/active_admin → config}/locales/no-NB.yml +14 -6
  80. data/{lib/active_admin → config}/locales/pl.yml +14 -6
  81. data/{lib/active_admin → config}/locales/pt-BR.yml +14 -6
  82. data/{lib/active_admin → config}/locales/pt-PT.yml +14 -6
  83. data/{lib/active_admin → config}/locales/ro.yml +32 -7
  84. data/{lib/active_admin → config}/locales/ru.yml +30 -8
  85. data/{lib/active_admin → config}/locales/sv-SE.yml +14 -6
  86. data/{lib/active_admin → config}/locales/tr.yml +15 -6
  87. data/config/locales/uk.yml +100 -0
  88. data/{lib/active_admin → config}/locales/vi.yml +15 -6
  89. data/{lib/active_admin → config}/locales/zh-CN.yml +15 -6
  90. data/{lib/active_admin → config}/locales/zh-TW.yml +15 -6
  91. data/docs/0-installation.md +22 -18
  92. data/docs/1-general-configuration.md +1 -1
  93. data/docs/10-custom-pages.md +3 -3
  94. data/docs/11-decorators.md +18 -2
  95. data/docs/12-arbre-components.md +53 -54
  96. data/docs/13-authorization-adapter.md +31 -10
  97. data/docs/2-resource-customization.md +16 -1
  98. data/docs/3-index-pages.md +13 -1
  99. data/docs/3-index-pages/create-an-index.md +4 -4
  100. data/docs/3-index-pages/index-as-block.md +1 -1
  101. data/docs/3-index-pages/index-as-blog.md +1 -1
  102. data/docs/3-index-pages/index-as-grid.md +1 -1
  103. data/docs/4-csv-format.md +4 -4
  104. data/docs/5-forms.md +46 -3
  105. data/docs/{6-show-screens.md → 6-show-pages.md} +3 -3
  106. data/docs/8-custom-actions.md +3 -3
  107. data/docs/9-batch-actions.md +9 -1
  108. data/features/action_item.feature +6 -6
  109. data/features/authorization_cancan.feature +1 -1
  110. data/features/belongs_to.feature +3 -3
  111. data/features/breadcrumb.feature +2 -2
  112. data/features/comments/commenting.feature +7 -5
  113. data/features/dashboard.feature +0 -51
  114. data/features/favicon.feature +20 -0
  115. data/features/global_navigation.feature +0 -1
  116. data/features/index/batch_actions.feature +12 -11
  117. data/features/index/filters.feature +6 -6
  118. data/features/index/format_as_csv.feature +4 -5
  119. data/features/index/index_as_blog.feature +20 -1
  120. data/features/index/index_as_table.feature +1 -1
  121. data/features/index/index_blank_slate.feature +3 -3
  122. data/features/index/index_parameters.feature +4 -10
  123. data/features/index/index_scope_to.feature +24 -0
  124. data/features/index/index_scopes.feature +17 -5
  125. data/features/index/pagination.feature +15 -0
  126. data/features/registering_pages.feature +1 -1
  127. data/features/registering_resources.feature +2 -2
  128. data/features/show/default_content.feature +3 -3
  129. data/features/sidebar_sections.feature +3 -3
  130. data/features/specifying_actions.feature +1 -1
  131. data/features/step_definitions/additional_web_steps.rb +3 -16
  132. data/features/step_definitions/asset_steps.rb +5 -1
  133. data/features/step_definitions/attribute_steps.rb +4 -4
  134. data/features/step_definitions/batch_action_steps.rb +25 -74
  135. data/features/step_definitions/breadcrumb_steps.rb +1 -3
  136. data/features/step_definitions/comment_steps.rb +0 -1
  137. data/features/step_definitions/configuration_steps.rb +53 -69
  138. data/features/step_definitions/dashboard_steps.rb +2 -2
  139. data/features/step_definitions/factory_steps.rb +17 -33
  140. data/features/step_definitions/filter_steps.rb +2 -2
  141. data/features/step_definitions/format_steps.rb +10 -14
  142. data/features/step_definitions/index_scope_steps.rb +9 -25
  143. data/features/step_definitions/index_views_steps.rb +1 -1
  144. data/features/step_definitions/sidebar_steps.rb +2 -1
  145. data/features/step_definitions/site_title_steps.rb +1 -1
  146. data/features/step_definitions/table_steps.rb +6 -1
  147. data/features/step_definitions/user_steps.rb +23 -38
  148. data/features/step_definitions/web_steps.rb +18 -147
  149. data/features/support/env.rb +13 -34
  150. data/features/support/paths.rb +2 -0
  151. data/features/users/logging_in.feature +2 -2
  152. data/features/users/logging_out.feature +0 -12
  153. data/features/users/resetting_password.feature +1 -1
  154. data/lib/active_admin.rb +4 -17
  155. data/lib/active_admin/abstract_view_factory.rb +1 -1
  156. data/lib/active_admin/application.rb +19 -28
  157. data/lib/active_admin/asset_registration.rb +7 -25
  158. data/lib/active_admin/authorization_adapter.rb +9 -5
  159. data/lib/active_admin/base_controller.rb +2 -2
  160. data/lib/active_admin/base_controller/authorization.rb +25 -27
  161. data/lib/active_admin/batch_actions/resource_extension.rb +3 -3
  162. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +1 -1
  163. data/lib/active_admin/batch_actions/views/selection_cells.rb +1 -1
  164. data/lib/active_admin/callbacks.rb +1 -1
  165. data/lib/active_admin/cancan_adapter.rb +2 -2
  166. data/lib/active_admin/comments.rb +32 -38
  167. data/lib/active_admin/comments/comment.rb +6 -8
  168. data/lib/active_admin/comments/views.rb +0 -1
  169. data/lib/active_admin/comments/views/active_admin_comments.rb +27 -38
  170. data/lib/active_admin/csv_builder.rb +4 -6
  171. data/lib/active_admin/dependency_checker.rb +4 -0
  172. data/lib/active_admin/deprecation.rb +3 -3
  173. data/lib/active_admin/dsl.rb +5 -5
  174. data/lib/active_admin/engine.rb +1 -1
  175. data/lib/active_admin/filters.rb +2 -1
  176. data/lib/active_admin/filters/forms.rb +36 -43
  177. data/lib/active_admin/filters/formtastic_addons.rb +45 -0
  178. data/lib/active_admin/filters/resource_extension.rb +9 -1
  179. data/lib/active_admin/form_builder.rb +30 -19
  180. data/lib/active_admin/helpers/optional_display.rb +11 -13
  181. data/lib/active_admin/helpers/settings.rb +50 -8
  182. data/lib/active_admin/inputs/filter_base.rb +5 -18
  183. data/lib/active_admin/inputs/filter_base/search_method_select.rb +73 -0
  184. data/lib/active_admin/inputs/filter_boolean_input.rb +6 -14
  185. data/lib/active_admin/inputs/filter_check_boxes_input.rb +1 -1
  186. data/lib/active_admin/inputs/filter_numeric_input.rb +2 -47
  187. data/lib/active_admin/inputs/filter_select_input.rb +32 -10
  188. data/lib/active_admin/inputs/filter_string_input.rb +12 -14
  189. data/lib/active_admin/namespace.rb +8 -40
  190. data/lib/active_admin/page.rb +2 -2
  191. data/lib/active_admin/page_dsl.rb +1 -1
  192. data/lib/active_admin/reloader.rb +3 -3
  193. data/lib/active_admin/resource.rb +16 -23
  194. data/lib/active_admin/resource/belongs_to.rb +8 -5
  195. data/lib/active_admin/resource/menu.rb +10 -23
  196. data/lib/active_admin/resource/naming.rb +3 -3
  197. data/lib/active_admin/resource/page_presenters.rb +2 -2
  198. data/lib/active_admin/resource/routes.rb +74 -21
  199. data/lib/active_admin/resource/scope_to.rb +74 -0
  200. data/lib/active_admin/resource/scopes.rb +8 -4
  201. data/lib/active_admin/resource_collection.rb +20 -66
  202. data/lib/active_admin/resource_controller.rb +12 -16
  203. data/lib/active_admin/resource_controller/data_access.rb +19 -22
  204. data/lib/active_admin/resource_controller/resource_class_methods.rb +2 -2
  205. data/lib/active_admin/resource_controller/scoping.rb +4 -9
  206. data/lib/active_admin/resource_dsl.rb +5 -32
  207. data/lib/active_admin/router.rb +34 -47
  208. data/lib/active_admin/scope.rb +5 -3
  209. data/lib/active_admin/sidebar_section.rb +1 -1
  210. data/lib/active_admin/version.rb +1 -1
  211. data/lib/active_admin/view_factory.rb +1 -1
  212. data/lib/active_admin/view_helpers/auto_link_helper.rb +1 -1
  213. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +8 -8
  214. data/lib/active_admin/view_helpers/display_helper.rb +15 -6
  215. data/lib/active_admin/view_helpers/download_format_links_helper.rb +2 -2
  216. data/lib/active_admin/view_helpers/form_helper.rb +6 -1
  217. data/lib/active_admin/view_helpers/icon_helper.rb +1 -1
  218. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +5 -5
  219. data/lib/active_admin/view_helpers/title_helper.rb +1 -1
  220. data/lib/active_admin/views/components/action_list_popover.rb +6 -6
  221. data/lib/active_admin/views/components/attributes_table.rb +9 -12
  222. data/lib/active_admin/views/components/blank_slate.rb +4 -4
  223. data/lib/active_admin/views/components/columns.rb +1 -1
  224. data/lib/active_admin/views/components/index_list.rb +1 -1
  225. data/lib/active_admin/views/components/paginated_collection.rb +20 -12
  226. data/lib/active_admin/views/components/panel.rb +1 -1
  227. data/lib/active_admin/views/components/scopes.rb +2 -1
  228. data/lib/active_admin/views/components/sidebar_section.rb +1 -1
  229. data/lib/active_admin/views/components/status_tag.rb +1 -1
  230. data/lib/active_admin/views/header.rb +2 -2
  231. data/lib/active_admin/views/index_as_blog.rb +16 -3
  232. data/lib/active_admin/views/index_as_table.rb +2 -2
  233. data/lib/active_admin/views/pages/base.rb +8 -3
  234. data/lib/active_admin/views/pages/form.rb +2 -2
  235. data/lib/active_admin/views/pages/index.rb +19 -17
  236. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +1 -1
  237. data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +1 -13
  238. data/lib/generators/active_admin/devise/devise_generator.rb +22 -1
  239. data/lib/generators/active_admin/install/install_generator.rb +1 -5
  240. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +40 -19
  241. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +18 -18
  242. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +19 -0
  243. data/lib/generators/active_admin/resource/resource_generator.rb +1 -1
  244. data/lib/generators/active_admin/resource/templates/admin.rb +1 -1
  245. data/script/use_rails +1 -1
  246. data/spec/integration/memory_spec.rb +3 -2
  247. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +4 -4
  248. data/spec/javascripts/coffeescripts/jquery.aa.popover-spec.js.coffee +1 -1
  249. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +2 -2
  250. data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +4 -4
  251. data/spec/javascripts/compiled/jquery.aa.popover-spec.js +1 -1
  252. data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +2 -2
  253. data/spec/spec_helper.rb +16 -6
  254. data/spec/spec_helper_without_rails.rb +2 -0
  255. data/spec/support/deferred_garbage_collection.rb +19 -0
  256. data/spec/support/jslint.yml +1 -1
  257. data/spec/support/rails_template.rb +29 -27
  258. data/spec/support/templates/admin/stores.rb +5 -1
  259. data/spec/unit/abstract_view_factory_spec.rb +1 -1
  260. data/spec/unit/action_builder_spec.rb +7 -7
  261. data/spec/unit/active_admin_spec.rb +0 -14
  262. data/spec/unit/application_spec.rb +16 -17
  263. data/spec/unit/asset_registration_spec.rb +21 -8
  264. data/spec/unit/authorization/authorization_adapter_spec.rb +3 -3
  265. data/spec/unit/authorization/controller_authorization_spec.rb +16 -24
  266. data/spec/unit/batch_actions/resource_spec.rb +11 -11
  267. data/spec/unit/belongs_to_spec.rb +1 -1
  268. data/spec/unit/cancan_adapter_spec.rb +11 -3
  269. data/spec/unit/comments_spec.rb +10 -28
  270. data/spec/unit/controller_filters_spec.rb +22 -24
  271. data/spec/unit/csv_builder_spec.rb +3 -3
  272. data/spec/unit/devise_spec.rb +10 -10
  273. data/spec/unit/filters/filter_form_builder_spec.rb +140 -45
  274. data/spec/unit/filters/resource_spec.rb +20 -19
  275. data/spec/unit/form_builder_spec.rb +122 -70
  276. data/spec/unit/menu_item_spec.rb +3 -3
  277. data/spec/unit/namespace/authorization_spec.rb +4 -8
  278. data/spec/unit/namespace/register_page_spec.rb +1 -1
  279. data/spec/unit/namespace/register_resource_spec.rb +12 -7
  280. data/spec/unit/namespace_spec.rb +4 -10
  281. data/spec/unit/page_spec.rb +1 -1
  282. data/spec/unit/resource/menu_spec.rb +1 -1
  283. data/spec/unit/resource/naming_spec.rb +9 -0
  284. data/spec/unit/resource/pagination_spec.rb +2 -2
  285. data/spec/unit/resource/routes_spec.rb +73 -0
  286. data/spec/unit/resource/scopes_spec.rb +1 -1
  287. data/spec/unit/resource_collection_spec.rb +95 -43
  288. data/spec/unit/resource_registration_spec.rb +3 -12
  289. data/spec/unit/resource_spec.rb +41 -48
  290. data/spec/unit/routing_spec.rb +10 -64
  291. data/spec/unit/scope_spec.rb +19 -0
  292. data/spec/unit/settings_spec.rb +88 -0
  293. data/spec/unit/view_factory_spec.rb +1 -0
  294. data/spec/unit/{breadcrumbs_spec.rb → view_helpers/breadcrumbs_spec.rb} +16 -7
  295. data/spec/unit/view_helpers/display_name_spec.rb +41 -0
  296. data/spec/unit/view_helpers/form_helper_spec.rb +36 -2
  297. data/spec/unit/views/components/attributes_table_spec.rb +17 -9
  298. data/spec/unit/views/components/batch_action_popover_spec.rb +4 -4
  299. data/spec/unit/views/components/index_list_spec.rb +2 -2
  300. data/spec/unit/views/components/paginated_collection_spec.rb +42 -0
  301. data/spec/unit/views/components/panel_spec.rb +8 -0
  302. data/spec/unit/views/components/site_title_spec.rb +2 -2
  303. data/spec/unit/views/components/table_for_spec.rb +4 -4
  304. data/spec/unit/views/pages/form_spec.rb +35 -0
  305. data/spec/unit/views/pages/layout_spec.rb +1 -1
  306. data/spec/unit/views/tabbed_navigation_spec.rb +10 -10
  307. data/tasks/parallel_tests.rake +1 -1
  308. data/tasks/test.rake +4 -1
  309. metadata +117 -106
  310. data/app/assets/stylesheets/active_admin/pages/_dashboard.scss +0 -5
  311. data/lib/active_admin/comments/views/active_admin_comment.rb +0 -0
  312. data/lib/active_admin/dashboards.rb +0 -68
  313. data/lib/active_admin/dashboards/dashboard_controller.rb +0 -50
  314. data/lib/active_admin/dashboards/section.rb +0 -34
  315. data/lib/active_admin/locales/bg.yml +0 -77
  316. data/lib/generators/active_admin/install/templates/migrations/1_create_admin_notes.rb +0 -17
  317. data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +0 -26
  318. data/spec/unit/base_controller_spec.rb +0 -6
  319. data/spec/unit/dashboard_controller_spec.rb +0 -76
  320. data/spec/unit/dashboard_section_spec.rb +0 -56
  321. data/spec/unit/dashboards_spec.rb +0 -59
  322. data/spec/unit/display_name_spec.rb +0 -29
@@ -1,6 +1,6 @@
1
1
  (function() {
2
2
 
3
- describe("AA.Popover", function() {
3
+ describe("ActiveAdmin.Popover", function() {
4
4
  var $button, $popover, $wrapper, popover;
5
5
  $wrapper = void 0;
6
6
  $button = void 0;
@@ -1,12 +1,12 @@
1
1
  (function() {
2
2
 
3
- describe("AA.TableCheckboxToggler", function() {
3
+ describe("ActiveAdmin.TableCheckboxToggler", function() {
4
4
  beforeEach(function() {
5
5
  loadFixtures('table_checkboxes.html');
6
6
  this.collection = $("#collection");
7
7
  this.toggle_all = this.collection.find(".toggle_all");
8
8
  this.checkboxes = this.collection.find(":checkbox").not(this.toggle_all);
9
- return new AA.TableCheckboxToggler({}, this.collection);
9
+ return new ActiveAdmin.TableCheckboxToggler({}, this.collection);
10
10
  });
11
11
  describe("'selected' class for table row", function() {
12
12
  it("should add the class 'selected' to rows when their checkbox is checked ", function() {
@@ -1,4 +1,4 @@
1
- require File.expand_path("../spec_helper_without_rails", __FILE__)
1
+ require 'spec_helper_without_rails'
2
2
 
3
3
  module ActiveAdminIntegrationSpecHelper
4
4
  extend self
@@ -37,13 +37,13 @@ module ActiveAdminIntegrationSpecHelper
37
37
  reload_routes!
38
38
  end
39
39
 
40
- # Sets up a describe block where you can render controller
40
+ # Sets up a describe block where you can render controller
41
41
  # actions. Uses the Admin::PostsController as the subject
42
42
  # for the describe block
43
43
  def describe_with_render(*args, &block)
44
44
  describe *args do
45
45
  include RSpec::Rails::ControllerExampleGroup
46
- render_views
46
+ render_views
47
47
  # metadata[:behaviour][:describes] = ActiveAdmin.namespaces[:admin].resources['Post'].controller
48
48
  module_eval &block
49
49
  end
@@ -73,7 +73,7 @@ module ActiveAdminIntegrationSpecHelper
73
73
  ActionView::Base.send :include, ActiveAdmin::ViewHelpers
74
74
  ActionView::Base.send :include, Rails.application.routes.url_helpers
75
75
  ActionView::Base.new(ActionController::Base.view_paths, assigns, controller)
76
- end
76
+ end
77
77
  alias_method :action_view, :mock_action_view
78
78
 
79
79
  # A mock resource to register
@@ -136,11 +136,11 @@ RSpec::Matchers.define :have_tag do |*args|
136
136
  match_unless_raises Test::Unit::AssertionFailedError do |response|
137
137
  tag = args.shift
138
138
  content = args.first.is_a?(Hash) ? nil : args.shift
139
-
139
+
140
140
  options = {
141
141
  :tag => tag.to_s
142
142
  }.merge(args[0] || {})
143
-
143
+
144
144
  options[:content] = content if content
145
145
 
146
146
  begin
@@ -163,3 +163,13 @@ end
163
163
  # improve the performance of the specs suite by not logging anything
164
164
  # see http://blog.plataformatec.com.br/2011/12/three-tips-to-improve-the-performance-of-your-test-suite/
165
165
  Rails.logger.level = 4
166
+
167
+
168
+ # Improves performance by forcing the garbage collector to run less often.
169
+ unless ENV['DEFER_GC'] == '0' || ENV['DEFER_GC'] == 'false'
170
+ require 'support/deferred_garbage_collection'
171
+ RSpec.configure do |config|
172
+ config.before(:all) { DeferredGarbageCollection.start }
173
+ config.after(:all) { DeferredGarbageCollection.reconsider }
174
+ end
175
+ end
@@ -7,3 +7,5 @@ Bundler.setup
7
7
 
8
8
  require 'detect_rails_version'
9
9
  ENV['RAILS'] = detect_rails_version
10
+
11
+ require 'coveralls' and Coveralls.wear_merged! if ENV['TRAVIS']
@@ -0,0 +1,19 @@
1
+ class DeferredGarbageCollection
2
+
3
+ DEFERRED_GC_THRESHOLD = (ENV['DEFER_GC'] || 15.0).to_f
4
+
5
+ @@last_gc_run = Time.now
6
+
7
+ def self.start
8
+ GC.disable
9
+ end
10
+
11
+ def self.reconsider
12
+ if Time.now - @@last_gc_run >= DEFERRED_GC_THRESHOLD
13
+ GC.enable
14
+ GC.start
15
+ GC.disable
16
+ @@last_gc_run = Time.now
17
+ end
18
+ end
19
+ end
@@ -77,4 +77,4 @@ newstat: false
77
77
  # although these will still cause a warning:
78
78
  # element && link;
79
79
  # selected ? 5 : 10;
80
- statinexp: false
80
+ statinexp: false
@@ -1,42 +1,50 @@
1
1
  # Rails template to build the sample app for specs
2
2
 
3
3
  # Create a cucumber database and environment
4
- copy_file File.expand_path('../templates/cucumber.rb', __FILE__), "config/environments/cucumber.rb"
4
+ copy_file File.expand_path('../templates/cucumber.rb', __FILE__), "config/environments/cucumber.rb"
5
5
  copy_file File.expand_path('../templates/cucumber_with_reloading.rb', __FILE__), "config/environments/cucumber_with_reloading.rb"
6
6
 
7
7
  gsub_file 'config/database.yml', /^test:.*\n/, "test: &test\n"
8
8
  gsub_file 'config/database.yml', /\z/, "\ncucumber:\n <<: *test\n database: db/cucumber.sqlite3"
9
9
  gsub_file 'config/database.yml', /\z/, "\ncucumber_with_reloading:\n <<: *test\n database: db/cucumber.sqlite3"
10
10
 
11
- # Generate some test models
12
11
  generate :model, "post title:string body:text published_at:datetime author_id:integer category_id:integer starred:boolean"
13
- inject_into_file 'app/models/post.rb', " belongs_to :author, :class_name => 'User'\n belongs_to :category\n accepts_nested_attributes_for :author\n", :after => "class Post < ActiveRecord::Base\n"
14
-
15
- # We'll put this basic delegator in app/models in order to simplify auto-loading.
12
+ inject_into_file 'app/models/post.rb', %q{
13
+ belongs_to :category
14
+ belongs_to :author, :class_name => 'User'
15
+ accepts_nested_attributes_for :author
16
+ attr_accessible :author if Rails::VERSION::STRING >= '3.2'
17
+ }, :after => 'class Post < ActiveRecord::Base'
16
18
  copy_file File.expand_path('../templates/post_decorator.rb', __FILE__), "app/models/post_decorator.rb"
17
19
 
18
- # Rails 3.2.3 model generator declare attr_accessible
19
- inject_into_file 'app/models/post.rb', " attr_accessible :author\n", :before => "end" if Rails::VERSION::STRING >= '3.2'
20
20
  generate :model, "user type:string first_name:string last_name:string username:string age:integer"
21
- inject_into_file 'app/models/user.rb', " has_many :posts, :foreign_key => 'author_id'\n", :after => "class User < ActiveRecord::Base\n"
22
- generate :model, "publisher --migration=false --parent=User"
21
+ inject_into_file 'app/models/user.rb', %q{
22
+ has_many :posts, :foreign_key => 'author_id'
23
+ def display_name
24
+ "#{first_name} #{last_name}"
25
+ end
26
+ }, :after => 'class User < ActiveRecord::Base'
27
+
28
+ generate :model, 'publisher --migration=false --parent=User'
23
29
  generate :model, 'category name:string description:text'
24
- inject_into_file 'app/models/category.rb', " has_many :posts\n accepts_nested_attributes_for :posts\n", :after => "class Category < ActiveRecord::Base\n"
30
+ inject_into_file 'app/models/category.rb', %q{
31
+ has_many :posts
32
+ accepts_nested_attributes_for :posts
33
+ }, :after => 'class Category < ActiveRecord::Base'
25
34
  generate :model, 'store name:string'
26
35
 
27
36
  # Generate a model with string ids
28
37
  generate :model, "tag name:string"
29
38
  gsub_file(Dir['db/migrate/*_create_tags.rb'][0], /\:tags\sdo\s.*/, ":tags, :id => false, :primary_key => :id do |t|\n\t\t\tt.string :id\n")
30
- id_model_setup = <<-EOF
39
+ inject_into_file 'app/models/tag.rb', %q{
31
40
  self.primary_key = :id
32
41
  before_create :set_id
33
-
42
+
34
43
  private
35
44
  def set_id
36
45
  self.id = 8.times.inject("") { |s,e| s << (i = Kernel.rand(62); i += ((i < 10) ? 48 : ((i < 36) ? 55 : 61 ))).chr }
37
46
  end
38
- EOF
39
- inject_into_file 'app/models/tag.rb', id_model_setup, :after => "class Tag < ActiveRecord::Base\n"
47
+ }, :after => 'class Tag < ActiveRecord::Base'
40
48
 
41
49
  if Rails::VERSION::MAJOR == 3 && Rails::VERSION::MINOR == 1 #Rails 3.1 Gotcha
42
50
  gsub_file 'app/models/tag.rb', /self\.primary_key.*$/, "define_attr_method :primary_key, :id"
@@ -60,18 +68,8 @@ run "rm -r spec"
60
68
 
61
69
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
62
70
 
63
- # we need this routing path, named "logout_path", for testing
64
- route <<-EOS
65
- devise_scope :user do
66
- match '/admin/logout' => 'active_admin/devise/sessions#destroy', :as => :logout
67
- end
68
- EOS
69
-
70
71
  generate :'active_admin:install'
71
72
 
72
- # Setup a root path for devise
73
- route "root :to => 'admin/dashboard#index'"
74
-
75
73
  rake "db:migrate"
76
74
  rake "db:test:prepare"
77
75
  run "/usr/bin/env RAILS_ENV=cucumber rake db:migrate"
@@ -88,8 +86,7 @@ setup_parallel_tests_database "cucumber.sqlite3", true
88
86
  # Somehow, calling parallel_tests tasks from Rails generator using Thor does not work ...
89
87
  # RAILS_ENV variable never makes it to parallel_tests tasks.
90
88
  # We need to call these tasks in the after set up hook in order to creates cucumber DBs + run migrations on test & cucumber DBs
91
- create_file 'lib/tasks/parallel.rake' do
92
- <<'RAKE'
89
+ create_file 'lib/tasks/parallel.rake', %q{
93
90
  namespace :parallel do
94
91
  def run_in_parallel(cmd, options)
95
92
  count = "-n #{options[:count]}" if options[:count]
@@ -108,5 +105,10 @@ namespace :parallel do
108
105
  run_in_parallel("rake db:schema:load RAILS_ENV=cucumber", args)
109
106
  end
110
107
  end
111
- RAKE
108
+ }
109
+
110
+ # If using Devise after 3.1, this is required for the tests to pass:
111
+ require 'devise/version'
112
+ if Devise::VERSION.to_f >= 3.1
113
+ inject_into_file 'config/initializers/devise.rb', "\n config.allow_insecure_token_lookup = true", after: 'Devise.setup do |config|'
112
114
  end
@@ -1 +1,5 @@
1
- ActiveAdmin.register Store
1
+ ActiveAdmin.register Store do
2
+
3
+ index :pagination_total => false
4
+
5
+ end
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  require 'active_admin/abstract_view_factory'
4
4
 
5
5
  describe ActiveAdmin::AbstractViewFactory do
6
-
6
+
7
7
  let(:view_factory){ ActiveAdmin::AbstractViewFactory.new }
8
8
  let(:mock_view){ Class.new }
9
9
 
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe 'defining new actions from registration blocks' do
4
4
 
@@ -13,7 +13,7 @@ describe 'defining new actions from registration blocks' do
13
13
  after(:each) do
14
14
  controller.clear_member_actions!
15
15
  end
16
-
16
+
17
17
  context "with a block" do
18
18
  let(:action!) do
19
19
  ActiveAdmin.register Post do
@@ -22,7 +22,7 @@ describe 'defining new actions from registration blocks' do
22
22
  end
23
23
  end
24
24
  end
25
-
25
+
26
26
  it "should create a new public instance method" do
27
27
  controller.public_instance_methods.collect(&:to_s).should include("comment")
28
28
  end
@@ -35,7 +35,7 @@ describe 'defining new actions from registration blocks' do
35
35
  end
36
36
 
37
37
  context "without a block" do
38
- let(:action!) do
38
+ let(:action!) do
39
39
  ActiveAdmin.register Post do
40
40
  member_action :comment
41
41
  end
@@ -46,7 +46,7 @@ describe 'defining new actions from registration blocks' do
46
46
  end
47
47
 
48
48
  context "with :title" do
49
- let(:action!) do
49
+ let(:action!) do
50
50
  ActiveAdmin.register Post do
51
51
  member_action :comment, :title => "My Awesome Comment"
52
52
  end
@@ -86,7 +86,7 @@ describe 'defining new actions from registration blocks' do
86
86
  end
87
87
  end
88
88
  context "without a block" do
89
- let(:action!) do
89
+ let(:action!) do
90
90
  ActiveAdmin.register Post do
91
91
  collection_action :comments
92
92
  end
@@ -96,7 +96,7 @@ describe 'defining new actions from registration blocks' do
96
96
  end
97
97
  end
98
98
  context "with :title" do
99
- let(:action!) do
99
+ let(:action!) do
100
100
  ActiveAdmin.register Post do
101
101
  collection_action :comments, :title => "My Awesome Comments"
102
102
  end
@@ -1,20 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe ActiveAdmin do
4
- describe "#default_namespace" do
5
- it "should delegate to ActiveAdmin.application" do
6
- ActiveAdmin.application.should_receive(:default_namespace)
7
-
8
- ActiveAdmin.default_namespace
9
- end
10
-
11
- it "should be deprecated" do
12
- ActiveAdmin::Deprecation.should_receive(:warn)
13
-
14
- ActiveAdmin.default_namespace
15
- end
16
- end
17
-
18
4
  %w(register register_page unload! load! routes).each do |method|
19
5
  it "delegates ##{method} to application" do
20
6
  ActiveAdmin.application.should_receive(method)
@@ -48,13 +48,18 @@ describe ActiveAdmin::Application do
48
48
  application.site_title_image = "http://railscasts.com/assets/episodes/stills/284-active-admin.png?1316476106"
49
49
  application.site_title_image.should == "http://railscasts.com/assets/episodes/stills/284-active-admin.png?1316476106"
50
50
  end
51
+
52
+ it "should store the site's favicon" do
53
+ application.favicon.should == false
54
+ end
51
55
 
52
- it "should have a view factory" do
53
- application.view_factory.should be_an_instance_of(ActiveAdmin::ViewFactory)
56
+ it "should set the site's favicon" do
57
+ application.favicon = "/a/favicon.ico"
58
+ application.favicon.should == "/a/favicon.ico"
54
59
  end
55
60
 
56
- it "should have deprecated admin notes by default" do
57
- application.admin_notes.should be_nil
61
+ it "should have a view factory" do
62
+ application.view_factory.should be_an_instance_of(ActiveAdmin::ViewFactory)
58
63
  end
59
64
 
60
65
  it "should allow comments by default" do
@@ -80,19 +85,6 @@ describe ActiveAdmin::Application do
80
85
  end
81
86
  end
82
87
 
83
- describe "inheritable settings" do
84
- it "should set csv_options" do
85
- application.csv_options.should == {}
86
- end
87
-
88
- context "when deprecated" do
89
- it "should set and warn csv_column_separator" do
90
- ActiveAdmin::Deprecation.should_receive(:warn)
91
- application.csv_column_separator.should == ','
92
- end
93
- end
94
- end
95
-
96
88
  describe "files in load path" do
97
89
  it "should load files in the first level directory" do
98
90
  application.files.should include(File.expand_path("app/admin/dashboard.rb", Rails.root))
@@ -127,6 +119,13 @@ describe ActiveAdmin::Application do
127
119
  end
128
120
  }.to raise_error("found")
129
121
  end
122
+
123
+ it "should not pollute the global app" do
124
+ application.namespaces.keys.should be_empty
125
+ application.namespace(:brand_new_ns)
126
+ application.namespaces.keys.should eq [:brand_new_ns]
127
+ ActiveAdmin.application.namespaces.keys.should eq [:admin]
128
+ end
130
129
  end
131
130
 
132
131
  describe "#register_page" do
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  module MockRegistration
4
4
  extend ActiveAdmin::AssetRegistration
@@ -14,30 +14,43 @@ describe ActiveAdmin::AssetRegistration do
14
14
  it "should register a stylesheet file" do
15
15
  MockRegistration.register_stylesheet "active_admin.css"
16
16
  MockRegistration.stylesheets.length.should == 1
17
- MockRegistration.stylesheets.first.path.should == "active_admin.css"
17
+ MockRegistration.stylesheets.keys.first.should == "active_admin.css"
18
18
  end
19
19
 
20
20
  it "should clear all existing stylesheets" do
21
21
  MockRegistration.register_stylesheet "active_admin.css"
22
22
  MockRegistration.stylesheets.length.should == 1
23
23
  MockRegistration.clear_stylesheets!
24
- MockRegistration.stylesheets.length.should == 0
24
+ MockRegistration.stylesheets.should be_empty
25
25
  end
26
-
26
+
27
27
  it "should allow media option when registering stylesheet" do
28
28
  MockRegistration.register_stylesheet "active_admin.css", :media => :print
29
- MockRegistration.stylesheets.first.options[:media].should == :print
29
+ MockRegistration.stylesheets.values.first[:media].should == :print
30
+ end
31
+
32
+ it "shouldn't register a stylesheet twice" do
33
+ MockRegistration.register_stylesheet "active_admin.css"
34
+ MockRegistration.register_stylesheet "active_admin.css"
35
+ MockRegistration.stylesheets.length.should == 1
30
36
  end
31
37
 
38
+
32
39
  it "should register a javascript file" do
33
40
  MockRegistration.register_javascript "active_admin.js"
34
- MockRegistration.javascripts.should == ["active_admin.js"]
41
+ MockRegistration.javascripts.should == ["active_admin.js"].to_set
35
42
  end
36
43
 
37
44
  it "should clear all existing javascripts" do
38
45
  MockRegistration.register_javascript "active_admin.js"
39
- MockRegistration.javascripts.should == ["active_admin.js"]
46
+ MockRegistration.javascripts.should == ["active_admin.js"].to_set
40
47
  MockRegistration.clear_javascripts!
41
- MockRegistration.javascripts.should == []
48
+ MockRegistration.javascripts.should be_empty
49
+ end
50
+
51
+ it "shouldn't register a javascript twice" do
52
+ MockRegistration.register_javascript "active_admin.js"
53
+ MockRegistration.register_javascript "active_admin.js"
54
+ MockRegistration.javascripts.length.should == 1
42
55
  end
43
56
  end
@@ -16,7 +16,7 @@ describe ActiveAdmin::AuthorizationAdapter do
16
16
 
17
17
  it "should return the collection unscoped" do
18
18
  collection = stub
19
- adapter.scope_collection(collection).should == collection
19
+ adapter.scope_collection(collection, ActiveAdmin::Auth::READ).should == collection
20
20
  end
21
21
 
22
22
  end
@@ -24,7 +24,7 @@ describe ActiveAdmin::AuthorizationAdapter do
24
24
  describe "using #normalized in a subclass" do
25
25
 
26
26
  let(:auth_class) do
27
- Class.new(ActiveAdmin::AuthorizationAdapter) do
27
+ Class.new(ActiveAdmin::AuthorizationAdapter) do
28
28
 
29
29
  def authorized?(action, subject = nil)
30
30
  case subject
@@ -40,7 +40,7 @@ describe ActiveAdmin::AuthorizationAdapter do
40
40
 
41
41
  let(:adapter) { auth_class.new(stub, stub) }
42
42
 
43
- it "should match agains a class" do
43
+ it "should match against a class" do
44
44
  adapter.authorized?(:read, String).should == true
45
45
  end
46
46