activeadmin 0.4.4 → 0.5.0.pre

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 (310) hide show
  1. data/.gitignore +3 -0
  2. data/.travis.yml +5 -0
  3. data/CHANGELOG.md +50 -0
  4. data/CONTRIBUTING.md +2 -4
  5. data/Gemfile +10 -4
  6. data/Guardfile +0 -1
  7. data/LICENSE +1 -1
  8. data/README.rdoc +19 -8
  9. data/Rakefile +10 -1
  10. data/activeadmin.gemspec +2 -1
  11. data/app/assets/javascripts/active_admin/application.js +3 -9
  12. data/app/assets/javascripts/active_admin/base.js +1 -0
  13. data/app/assets/javascripts/active_admin/components/jquery.aa.checkbox-toggler.js.coffee +64 -0
  14. data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +107 -0
  15. data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +100 -0
  16. data/app/assets/javascripts/active_admin/components/jquery.aa.table-checkbox-toggler.js.coffee +27 -0
  17. data/app/assets/javascripts/active_admin/lib/namespace.js.coffee +3 -0
  18. data/app/assets/javascripts/active_admin/pages/application.js.coffee +13 -0
  19. data/app/assets/javascripts/active_admin/pages/batch_actions.js.coffee +26 -0
  20. data/app/assets/stylesheets/active_admin/_base.css.scss +32 -26
  21. data/app/assets/stylesheets/active_admin/_forms.css.scss +12 -5
  22. data/app/assets/stylesheets/active_admin/_header.css.scss +1 -2
  23. data/app/assets/stylesheets/active_admin/_typography.css.scss +1 -1
  24. data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +11 -0
  25. data/app/assets/stylesheets/active_admin/components/_buttons.scss +1 -2
  26. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +151 -0
  27. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +3 -3
  28. data/app/assets/stylesheets/active_admin/components/_popovers.css.scss +123 -0
  29. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +1 -1
  30. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +20 -27
  31. data/app/assets/stylesheets/active_admin/components/_tables.css.scss +1 -0
  32. data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +38 -36
  33. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +5 -5
  34. data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +7 -3
  35. data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +19 -17
  36. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +2 -2
  37. data/app/assets/stylesheets/active_admin/print.css.scss +290 -0
  38. data/app/views/active_admin/dashboard/index.html.arb +1 -1
  39. data/app/views/active_admin/devise/passwords/edit.html.erb +17 -14
  40. data/app/views/active_admin/devise/passwords/new.html.erb +4 -4
  41. data/app/views/active_admin/devise/sessions/new.html.erb +6 -6
  42. data/app/views/active_admin/devise/shared/_links.erb +6 -6
  43. data/app/views/active_admin/page/index.html.arb +1 -1
  44. data/app/views/active_admin/resource/edit.html.arb +1 -1
  45. data/app/views/active_admin/resource/index.csv.erb +1 -1
  46. data/app/views/active_admin/resource/index.html.arb +1 -1
  47. data/app/views/active_admin/resource/new.html.arb +1 -1
  48. data/app/views/active_admin/resource/show.html.arb +1 -1
  49. data/app/views/layouts/active_admin.html.arb +1 -1
  50. data/app/views/layouts/active_admin_logged_out.html.erb +2 -2
  51. data/cucumber.yml +1 -1
  52. data/docs/0-installation.md +10 -1
  53. data/docs/{9-custom-pages.md → 10-custom-pages.md} +0 -0
  54. data/docs/2-resource-customization.md +19 -1
  55. data/docs/3-index-pages.md +31 -0
  56. data/docs/4-csv-format.md +9 -0
  57. data/docs/6-show-screens.md +1 -1
  58. data/docs/9-batch-actions.md +161 -0
  59. data/features/dashboard.feature +31 -8
  60. data/features/development_reloading.feature +1 -1
  61. data/features/edit_page.feature +3 -3
  62. data/features/i18n.feature +35 -0
  63. data/features/index/batch_actions.feature +98 -0
  64. data/features/index/filters.feature +26 -0
  65. data/features/index/format_as_csv.feature +35 -0
  66. data/features/index/index_as_table.feature +30 -2
  67. data/features/index/index_blank_slate.feature +8 -3
  68. data/features/index/index_scopes.feature +130 -24
  69. data/features/index/page_title.feature +12 -0
  70. data/features/new_page.feature +3 -3
  71. data/features/registering_pages.feature +61 -0
  72. data/features/root_to.feature +17 -0
  73. data/features/show/default_content.feature +1 -1
  74. data/features/show/page_title.feature +14 -0
  75. data/features/sidebar_sections.feature +26 -0
  76. data/features/site_title.feature +1 -1
  77. data/features/specifying_actions.feature +7 -6
  78. data/features/step_definitions/action_link_steps.rb +1 -1
  79. data/features/step_definitions/additional_web_steps.rb +7 -1
  80. data/features/step_definitions/batch_action_steps.rb +94 -0
  81. data/features/step_definitions/configuration_steps.rb +30 -8
  82. data/features/step_definitions/factory_steps.rb +12 -0
  83. data/features/step_definitions/format_steps.rb +6 -2
  84. data/features/step_definitions/i18n_steps.rb +3 -0
  85. data/features/step_definitions/table_steps.rb +114 -0
  86. data/features/step_definitions/user_steps.rb +30 -4
  87. data/features/support/env.rb +54 -15
  88. data/features/support/paths.rb +2 -0
  89. data/features/users/logging_in.feature +1 -1
  90. data/features/users/logging_out.feature +2 -1
  91. data/features/users/resetting_password.feature +34 -0
  92. data/lib/active_admin.rb +46 -7
  93. data/lib/active_admin/application.rb +30 -15
  94. data/lib/active_admin/base_controller/menu.rb +3 -3
  95. data/lib/active_admin/batch_actions.rb +17 -0
  96. data/lib/active_admin/batch_actions/controller.rb +25 -0
  97. data/lib/active_admin/batch_actions/resource_extension.rb +126 -0
  98. data/lib/active_admin/batch_actions/views/batch_action_form.rb +35 -0
  99. data/lib/active_admin/batch_actions/views/batch_action_popover.rb +28 -0
  100. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +63 -0
  101. data/lib/active_admin/batch_actions/views/selection_cells.rb +37 -0
  102. data/lib/active_admin/comments.rb +5 -2
  103. data/lib/active_admin/comments/comment.rb +4 -3
  104. data/lib/active_admin/comments/views/active_admin_comments.rb +5 -5
  105. data/lib/active_admin/component.rb +1 -18
  106. data/lib/active_admin/csv_builder.rb +8 -3
  107. data/lib/active_admin/dashboards.rb +21 -4
  108. data/lib/active_admin/dashboards/dashboard_controller.rb +1 -5
  109. data/lib/active_admin/dependency_checker.rb +1 -1
  110. data/lib/active_admin/dsl.rb +61 -4
  111. data/lib/active_admin/engine.rb +1 -1
  112. data/lib/active_admin/filters.rb +8 -0
  113. data/lib/active_admin/filters/dsl.rb +12 -0
  114. data/lib/active_admin/filters/forms.rb +93 -0
  115. data/lib/active_admin/filters/resource_extension.rb +92 -0
  116. data/lib/active_admin/form_builder.rb +88 -33
  117. data/lib/active_admin/helpers/collection.rb +23 -0
  118. data/lib/active_admin/helpers/optional_display.rb +1 -1
  119. data/lib/active_admin/inputs/filter_select_input.rb +1 -1
  120. data/lib/active_admin/locales/bg.yml +37 -1
  121. data/lib/active_admin/locales/ca.yml +36 -0
  122. data/lib/active_admin/locales/cs.yml +36 -0
  123. data/lib/active_admin/locales/da.yml +36 -0
  124. data/lib/active_admin/locales/de.yml +42 -0
  125. data/lib/active_admin/locales/en.yml +27 -2
  126. data/lib/active_admin/locales/es.yml +45 -4
  127. data/lib/active_admin/locales/fr.yml +22 -0
  128. data/lib/active_admin/locales/{he_il.yml → he.yml} +37 -2
  129. data/lib/active_admin/locales/hr.yml +49 -5
  130. data/lib/active_admin/locales/hu.yml +21 -0
  131. data/lib/active_admin/locales/it.yml +36 -1
  132. data/lib/active_admin/locales/ja.yml +36 -0
  133. data/lib/active_admin/locales/ko.yml +36 -1
  134. data/lib/active_admin/locales/lv.yml +28 -2
  135. data/lib/active_admin/locales/nl.yml +42 -1
  136. data/lib/active_admin/locales/no-NB.yml +15 -0
  137. data/lib/active_admin/locales/pl.yml +45 -1
  138. data/lib/active_admin/locales/pt-BR.yml +36 -1
  139. data/lib/active_admin/locales/ro.yml +67 -0
  140. data/lib/active_admin/locales/ru.yml +43 -3
  141. data/lib/active_admin/locales/sv-SE.yml +41 -1
  142. data/lib/active_admin/locales/tr.yml +80 -0
  143. data/lib/active_admin/locales/vi.yml +80 -0
  144. data/lib/active_admin/locales/{zh_cn.yml → zh-CN.yml} +42 -2
  145. data/lib/active_admin/locales/zh-TW.yml +36 -1
  146. data/lib/active_admin/menu.rb +55 -30
  147. data/lib/active_admin/menu_builder.rb +65 -0
  148. data/lib/active_admin/menu_item.rb +55 -14
  149. data/lib/active_admin/namespace.rb +25 -55
  150. data/lib/active_admin/page.rb +15 -10
  151. data/lib/active_admin/resource.rb +9 -0
  152. data/lib/active_admin/resource/action_items.rb +4 -4
  153. data/lib/active_admin/resource/controllers.rb +1 -1
  154. data/lib/active_admin/resource/menu.rb +19 -21
  155. data/lib/active_admin/resource/naming.rb +55 -45
  156. data/lib/active_admin/resource/sidebars.rb +0 -13
  157. data/lib/active_admin/resource_collection.rb +10 -10
  158. data/lib/active_admin/resource_controller.rb +5 -5
  159. data/lib/active_admin/resource_controller/actions.rb +2 -0
  160. data/lib/active_admin/resource_controller/collection.rb +13 -4
  161. data/lib/active_admin/resource_dsl.rb +12 -6
  162. data/lib/active_admin/router.rb +27 -8
  163. data/lib/active_admin/scope.rb +1 -0
  164. data/lib/active_admin/sidebar_section.rb +2 -6
  165. data/lib/active_admin/version.rb +1 -1
  166. data/lib/active_admin/view_factory.rb +18 -13
  167. data/lib/active_admin/view_helpers.rb +0 -2
  168. data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -1
  169. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +24 -25
  170. data/lib/active_admin/view_helpers/display_helper.rb +1 -1
  171. data/lib/active_admin/view_helpers/fields_for.rb +44 -0
  172. data/lib/active_admin/view_helpers/form_helper.rb +6 -0
  173. data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -1
  174. data/lib/active_admin/views/components/action_list_popover.rb +29 -0
  175. data/lib/active_admin/views/components/attributes_table.rb +6 -2
  176. data/lib/active_admin/views/components/dropdown_menu.rb +73 -0
  177. data/lib/active_admin/views/components/paginated_collection.rb +13 -14
  178. data/lib/active_admin/views/components/popover.rb +27 -0
  179. data/lib/active_admin/views/components/scopes.rb +8 -13
  180. data/lib/active_admin/views/components/sidebar_section.rb +1 -1
  181. data/lib/active_admin/views/components/site_title.rb +55 -0
  182. data/lib/active_admin/views/components/status_tag.rb +4 -4
  183. data/lib/active_admin/views/components/table_for.rb +18 -18
  184. data/lib/active_admin/views/dashboard_section_renderer.rb +1 -1
  185. data/lib/active_admin/views/footer.rb +18 -0
  186. data/lib/active_admin/views/header.rb +31 -0
  187. data/lib/active_admin/views/index_as_block.rb +3 -0
  188. data/lib/active_admin/views/index_as_blog.rb +4 -0
  189. data/lib/active_admin/views/index_as_grid.rb +2 -0
  190. data/lib/active_admin/views/index_as_table.rb +19 -6
  191. data/lib/active_admin/views/pages/base.rb +14 -48
  192. data/lib/active_admin/views/pages/form.rb +3 -3
  193. data/lib/active_admin/views/pages/index.rb +56 -24
  194. data/lib/active_admin/views/pages/layout.rb +2 -2
  195. data/lib/active_admin/views/pages/page.rb +10 -4
  196. data/lib/active_admin/views/pages/show.rb +11 -8
  197. data/lib/active_admin/views/tabbed_navigation.rb +3 -3
  198. data/lib/active_admin/views/title_bar.rb +50 -0
  199. data/lib/active_admin/views/utility_nav.rb +41 -0
  200. data/lib/generators/active_admin/assets/assets_generator.rb +1 -1
  201. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +1 -0
  202. data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +26 -3
  203. data/lib/generators/active_admin/devise/devise_generator.rb +2 -2
  204. data/lib/generators/active_admin/install/install_generator.rb +10 -10
  205. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +21 -1
  206. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +20 -0
  207. data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
  208. data/lib/generators/active_admin/resource/templates/admin.rb +1 -1
  209. data/spec/integration/memory_spec.rb +1 -11
  210. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
  211. data/spec/javascripts/coffeescripts/jquery.aa.popover-spec.js.coffee +82 -0
  212. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
  213. data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +60 -0
  214. data/spec/javascripts/compiled/jquery.aa.popover-spec.js +106 -0
  215. data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +37 -0
  216. data/spec/javascripts/fixtures/checkboxes.html +9 -0
  217. data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
  218. data/spec/javascripts/helpers/SpecHelper.js +3 -0
  219. data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +108 -0
  220. data/spec/javascripts/helpers/vendor/jasmine-jquery.js +288 -0
  221. data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +2915 -0
  222. data/spec/javascripts/support/jasmine.yml +74 -0
  223. data/spec/javascripts/support/jasmine_config.rb +23 -0
  224. data/spec/javascripts/support/jasmine_runner.rb +32 -0
  225. data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +34 -0
  226. data/spec/javascripts/support/jquery.min.js +4 -0
  227. data/spec/spec_helper.rb +13 -13
  228. data/spec/spec_helper_without_rails.rb +2 -3
  229. data/spec/support/detect_rails_version.rb +16 -10
  230. data/spec/support/rails_template.rb +13 -1
  231. data/spec/support/templates/admin/stores.rb +1 -0
  232. data/spec/support/templates/en.yml +6 -0
  233. data/spec/unit/action_builder_spec.rb +38 -0
  234. data/spec/unit/application_spec.rb +12 -16
  235. data/spec/unit/base_controller_shared_examples.rb +3 -6
  236. data/spec/unit/batch_actions/resource_spec.rb +91 -0
  237. data/spec/unit/batch_actions/settings_spec.rb +61 -0
  238. data/spec/unit/breadcrumbs_spec.rb +33 -0
  239. data/spec/unit/comments_spec.rb +6 -0
  240. data/spec/unit/config_shared_examples.rb +17 -64
  241. data/spec/unit/csv_builder_spec.rb +12 -2
  242. data/spec/unit/dashboard_controller_spec.rb +11 -5
  243. data/spec/unit/dsl_include_spec.rb +20 -0
  244. data/spec/unit/{filter_form_builder_spec.rb → filters/filter_form_builder_spec.rb} +10 -7
  245. data/spec/unit/filters/resource_spec.rb +60 -0
  246. data/spec/unit/form_builder_spec.rb +180 -28
  247. data/spec/unit/helpers/collection_spec.rb +65 -0
  248. data/spec/unit/menu_item_spec.rb +48 -53
  249. data/spec/unit/menu_spec.rb +46 -32
  250. data/spec/unit/namespace/register_page_spec.rb +0 -6
  251. data/spec/unit/namespace/register_resource_spec.rb +1 -8
  252. data/spec/unit/namespace_spec.rb +8 -2
  253. data/spec/unit/page_spec.rb +20 -8
  254. data/spec/unit/resource/naming_spec.rb +27 -26
  255. data/spec/unit/resource/sidebars_spec.rb +0 -7
  256. data/spec/unit/resource_collection_spec.rb +11 -11
  257. data/spec/unit/resource_controller/collection_spec.rb +23 -1
  258. data/spec/unit/resource_controller/sidebars_spec.rb +46 -0
  259. data/spec/unit/resource_controller_spec.rb +43 -0
  260. data/spec/unit/resource_registration_spec.rb +2 -13
  261. data/spec/unit/resource_spec.rb +0 -42
  262. data/spec/unit/routing_spec.rb +60 -14
  263. data/spec/unit/scope_spec.rb +7 -0
  264. data/spec/unit/view_factory_spec.rb +9 -6
  265. data/spec/unit/view_helpers/fields_for_spec.rb +41 -0
  266. data/spec/unit/view_helpers/form_helper_spec.rb +18 -0
  267. data/spec/unit/views/components/action_list_popover_spec.rb +30 -0
  268. data/spec/unit/views/components/attributes_table_spec.rb +32 -20
  269. data/spec/unit/views/components/batch_action_popover_spec.rb +33 -0
  270. data/spec/unit/views/components/blank_slate_spec.rb +5 -3
  271. data/spec/unit/views/components/columns_spec.rb +32 -22
  272. data/spec/unit/views/components/paginated_collection_spec.rb +54 -12
  273. data/spec/unit/views/components/panel_spec.rb +11 -6
  274. data/spec/unit/views/components/popover_spec.rb +33 -0
  275. data/spec/unit/views/components/sidebar_section_spec.rb +6 -6
  276. data/spec/unit/views/components/site_title_spec.rb +78 -0
  277. data/spec/unit/views/components/status_tag_spec.rb +17 -10
  278. data/spec/unit/views/components/table_for_spec.rb +37 -17
  279. data/spec/unit/views/pages/layout_spec.rb +51 -10
  280. data/spec/unit/views/tabbed_navigation_spec.rb +44 -23
  281. data/tasks/js.rake +32 -0
  282. data/tasks/test.rake +1 -1
  283. metadata +233 -200
  284. data/lib/active_admin/arbre.rb +0 -22
  285. data/lib/active_admin/arbre/builder.rb +0 -125
  286. data/lib/active_admin/arbre/context.rb +0 -45
  287. data/lib/active_admin/arbre/html/attributes.rb +0 -20
  288. data/lib/active_admin/arbre/html/class_list.rb +0 -24
  289. data/lib/active_admin/arbre/html/collection.rb +0 -27
  290. data/lib/active_admin/arbre/html/document.rb +0 -42
  291. data/lib/active_admin/arbre/html/element.rb +0 -161
  292. data/lib/active_admin/arbre/html/html5_elements.rb +0 -47
  293. data/lib/active_admin/arbre/html/tag.rb +0 -145
  294. data/lib/active_admin/arbre/html/text_node.rb +0 -35
  295. data/lib/active_admin/filter_form_builder.rb +0 -53
  296. data/lib/active_admin/renderer.rb +0 -87
  297. data/lib/active_admin/resource_controller/filters.rb +0 -58
  298. data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
  299. data/lib/active_admin/view_helpers/filter_form_helper.rb +0 -36
  300. data/lib/active_admin/view_helpers/renderer_helper.rb +0 -29
  301. data/lib/active_admin/views/header_renderer.rb +0 -82
  302. data/lib/generators/active_admin/assets/templates/dashboards.rb +0 -36
  303. data/lib/generators/active_admin/install/templates/dashboards.rb +0 -44
  304. data/spec/unit/arbre/context_spec.rb +0 -35
  305. data/spec/unit/arbre/html/element_finder_methods_spec.rb +0 -110
  306. data/spec/unit/arbre/html/element_spec.rb +0 -236
  307. data/spec/unit/arbre/html/tag_attributes_spec.rb +0 -61
  308. data/spec/unit/arbre/html/tag_spec.rb +0 -63
  309. data/spec/unit/arbre/html_spec.rb +0 -228
  310. data/spec/unit/renderer_spec.rb +0 -126
@@ -26,9 +26,31 @@ describe ActiveAdmin::ResourceController::Collection do
26
26
  let(:params){ {:order => "id_asc" }}
27
27
  it "should prepend the table name" do
28
28
  chain = mock("ChainObj")
29
- chain.should_receive(:order).with("\"posts\".\"id\" asc").once.and_return(Post.search)
29
+ chain.should_receive(:reorder).with("\"posts\".\"id\" asc").once.and_return(Post.search)
30
30
  controller.send :sort_order, chain
31
31
  end
32
32
  end
33
+
34
+ describe ActiveAdmin::ResourceController::Collection::Scoping, "#scope_current_collection" do
35
+ context "when no current scope" do
36
+ it "should set collection_before_scope to the chain and return the chain" do
37
+ chain = mock("ChainObj")
38
+ controller.send(:scope_current_collection, chain).should == chain
39
+ controller.send(:collection_before_scope).should == chain
40
+ end
41
+ end
42
+
43
+ context "when current scope" do
44
+ it "should set collection_before_scope to the chain and return the scoped chain" do
45
+ chain = mock("ChainObj")
46
+ scoped_chain = mock("ScopedChain")
47
+ current_scope = mock("CurrentScope")
48
+ controller.stub!(:current_scope) { current_scope }
33
49
 
50
+ controller.should_receive(:scope_chain).with(current_scope, chain) { scoped_chain }
51
+ controller.send(:scope_current_collection, chain).should == scoped_chain
52
+ controller.send(:collection_before_scope).should == chain
53
+ end
54
+ end
55
+ end
34
56
  end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::ResourceController::Sidebars do
4
+ let(:controller){ Admin::PostsController }
5
+
6
+ context 'without before_filter' do
7
+ before do
8
+ ActiveAdmin.register Post
9
+ end
10
+
11
+ subject { find_before_filter controller, :skip_sidebar! }
12
+
13
+ it { should set_skip_sidebar_to nil }
14
+ end
15
+
16
+ describe '#skip_sidebar!' do
17
+ before do
18
+ ActiveAdmin.register Post do
19
+ before_filter :skip_sidebar!
20
+ end
21
+ end
22
+
23
+ subject { find_before_filter controller, :skip_sidebar! }
24
+
25
+ it { should set_skip_sidebar_to true }
26
+ end
27
+
28
+ def find_before_filter(controller, filter)
29
+ #raise controller._process_action_callbacks.map(&:filter).inspect
30
+ controller._process_action_callbacks.detect { |f| f.raw_filter == filter.to_sym }
31
+ end
32
+
33
+ RSpec::Matchers.define :set_skip_sidebar_to do |expected|
34
+ match do |filter|
35
+ klass = filter && filter.klass || controller
36
+ object = klass.new
37
+ object.send filter.raw_filter if filter
38
+ @actual = object.instance_variable_get(:@skip_sidebar)
39
+ @actual == expected
40
+ end
41
+
42
+ failure_message_for_should do |filter|
43
+ message = "expected before_filter to set @skip_sidebar to '#{expected}', but was '#{@actual}'"
44
+ end
45
+ end
46
+ end
@@ -3,6 +3,8 @@ require File.expand_path('base_controller_shared_examples', File.dirname(__FILE_
3
3
 
4
4
  describe ActiveAdmin::ResourceController do
5
5
 
6
+ before(:all) { load_defaults! }
7
+
6
8
  let(:controller) { ActiveAdmin::ResourceController.new }
7
9
 
8
10
  it_should_behave_like "BaseController"
@@ -156,5 +158,46 @@ describe ActiveAdmin::ResourceController do
156
158
  end
157
159
  end
158
160
  end
161
+ end
162
+
163
+ describe Admin::PostsController, :type => "controller" do
164
+
165
+ describe "performing batch_action" do
166
+ let(:controller){ Admin::PostsController.new }
167
+ before do
168
+ batch_action = ActiveAdmin::BatchAction.new :flag, "Flag" do
169
+ redirect_to collection_path
170
+ end
171
+
172
+ controller.class.active_admin_config.stub!(:batch_actions).and_return([batch_action])
173
+ end
174
+
175
+ describe "when params batch_action matches existing BatchAction" do
176
+ it "should call the block with args" do
177
+ pending # dont know how to check if the block was called
178
+ end
179
+ end
180
+
181
+ describe "when params batch_action doesn't match a BatchAction" do
182
+ it "should raise an error" do
183
+ pending # doesn't pass when running whole spec suite (WTF)
184
+
185
+ lambda {
186
+ post(:batch_action, :batch_action => "derp", :collection_selection => ["1"])
187
+ }.should raise_error("Couldn't find batch action \"derp\"")
188
+ end
189
+ end
190
+
191
+ describe "when params batch_action is blank" do
192
+ it "should raise an error" do
193
+ pending # doesn't pass when running whole spec suite (WTF)
194
+
195
+ lambda {
196
+ post(:batch_action, :collection_selection => ["1"])
197
+ }.should raise_error("Couldn't find batch action \"\"")
198
+ end
199
+ end
200
+
201
+ end
159
202
 
160
203
  end
@@ -26,11 +26,7 @@ describe "Registering an object to administer" do
26
26
 
27
27
  application.register Category, :namespace => :hello_world
28
28
  end
29
- it "should generate a menu item for the dashboard" do
30
- application.register Category, :namespace => :hello_world
31
- application.namespaces[:hello_world].load_menu!
32
- application.namespaces[:hello_world].menu['Dashboard'].instance_variable_get("@url").should == :hello_world_dashboard_path
33
- end
29
+
34
30
  it "should generate a Namespace::RegisterEvent and a Resource::RegisterEvent" do
35
31
  ActiveAdmin::Event.should_receive(:dispatch).with(ActiveAdmin::Namespace::RegisterEvent, an_instance_of(ActiveAdmin::Namespace))
36
32
  ActiveAdmin::Event.should_receive(:dispatch).with(ActiveAdmin::Resource::RegisterEvent, an_instance_of(ActiveAdmin::Resource))
@@ -46,13 +42,6 @@ describe "Registering an object to administer" do
46
42
 
47
43
  application.register Category, :namespace => false
48
44
  end
49
-
50
- it "should generate a menu item for the dashboard" do
51
- application.register Category, :namespace => false
52
- application.namespaces[:root].load_menu!
53
- application.namespaces[:root].menu['Dashboard'].instance_variable_get("@url").should == :dashboard_path
54
- end
55
-
56
45
  end
57
46
 
58
47
  context "when being registered multiple times" do
@@ -60,7 +49,7 @@ describe "Registering an object to administer" do
60
49
  config_1 = ActiveAdmin.register(Category) { filter :name }
61
50
  config_2 = ActiveAdmin.register(Category) { filter :id }
62
51
  config_1.should == config_2
63
- config_1.controller.filters_config.size.should == 2
52
+ config_1.filters.size.should == 2
64
53
  end
65
54
 
66
55
  context "with different resource classes" do
@@ -62,48 +62,6 @@ module ActiveAdmin
62
62
  end
63
63
  end
64
64
 
65
- describe "menu item name" do
66
- it "should be the resource name when not set" do
67
- config.menu_item_name.should == "Categories"
68
- end
69
- it "should be settable" do
70
- config.menu :label => "My Label"
71
- config.menu_item_name.should == "My Label"
72
- end
73
- end
74
-
75
- describe "parent menu item name" do
76
- it "should be nil when not set" do
77
- config.parent_menu_item_name.should == nil
78
- end
79
- it "should return the name if set" do
80
- config.tap do |c|
81
- c.menu :parent => "Blog"
82
- end.parent_menu_item_name.should == "Blog"
83
- end
84
- end
85
-
86
- describe "menu item priority" do
87
- it "should be 10 when not set" do
88
- config.menu_item_priority.should == 10
89
- end
90
- it "should be settable" do
91
- config.menu :priority => 2
92
- config.menu_item_priority.should == 2
93
- end
94
- end
95
-
96
- describe "menu item display if" do
97
- it "should be a proc always returning true if not set" do
98
- config.menu_item_display_if.should be_instance_of(Proc)
99
- config.menu_item_display_if.call.should == true
100
- end
101
- it "should be settable" do
102
- config.menu :if => proc { false }
103
- config.menu_item_display_if.call.should == false
104
- end
105
- end
106
-
107
65
  describe "route names" do
108
66
  it "should return the route prefix" do
109
67
  config.route_prefix.should == "admin"
@@ -1,26 +1,72 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ActiveAdmin, "Routing", :type => :routing do
4
6
 
5
- before :each do
7
+ before do
6
8
  load_defaults!
7
9
  reload_routes!
8
10
  end
9
11
 
10
12
  include Rails.application.routes.url_helpers
11
13
 
12
- describe "dashboard" do
13
- context "when in admin namespace" do
14
- it "should route the admin dashboard" do
15
- admin_dashboard_path.should == "/admin"
14
+ describe "root" do
15
+ before do
16
+ pending "Y U NO PASS?"
17
+ end
18
+ context "when default configuration" do
19
+ context "when in admin namespace" do
20
+ it "should route the admin dashboard" do
21
+ get('/admin').should route_to('admin/dashboard#index')
22
+ end
23
+ end
24
+
25
+ context "when in root namespace" do
26
+ before(:each) do
27
+ load_resources { ActiveAdmin.register(Post, :namespace => false) }
28
+ reload_routes!
29
+ end
30
+
31
+ it "should route the root dashboard" do
32
+ pending "Y U NO PASS?"
33
+
34
+ get('/').should route_to('dashboard#index')
35
+ end
16
36
  end
17
37
  end
18
- context "when in root namespace" do
19
- before(:each) do
20
- load_resources { ActiveAdmin.register(Post, :namespace => false) }
38
+
39
+ context "when customized configuration to root to post#index" do
40
+ before do
41
+ @original_root = ActiveAdmin.application.root_to
42
+ ActiveAdmin.application.root_to = "posts#index"
43
+ end
44
+
45
+ after do
46
+ ActiveAdmin.application.root_to = @original_root
47
+ reload_routes!
48
+ end
49
+
50
+ context "when in admin namespace" do
51
+ before do
52
+ load_resources { ActiveAdmin.register(Post) }
53
+ end
54
+
55
+ it "should route to admin/posts#index" do
56
+ get('/admin').should route_to('admin/posts#index')
57
+ end
21
58
  end
22
- it "should route the root dashboard" do
23
- dashboard_path.should == "/"
59
+
60
+ context "when in root namespace" do
61
+ before do
62
+ load_resources { ActiveAdmin.register(Post, :namespace => false) }
63
+ end
64
+
65
+ it "should route to posts#index" do
66
+ pending "Y U NO PASS?"
67
+
68
+ get('/').should route_to('posts#index')
69
+ end
24
70
  end
25
71
  end
26
72
  end
@@ -106,20 +152,20 @@ describe ActiveAdmin, "Routing", :type => :routing do
106
152
  describe "page" do
107
153
  context "when default namespace" do
108
154
  before(:each) do
109
- load_resources { ActiveAdmin.register_page("Status") }
155
+ load_resources { ActiveAdmin.register_page("Chocolate I lØve You!") }
110
156
  end
111
157
 
112
158
  it "should route to the page under /admin" do
113
- admin_status_path.should == "/admin/status"
159
+ admin_chocolate_i_love_you_path.should == "/admin/chocolate_i_love_you"
114
160
  end
115
161
 
116
162
  context "when in the root namespace" do
117
163
  before(:each) do
118
- load_resources { ActiveAdmin.register_page("Status", :namespace => false) }
164
+ load_resources { ActiveAdmin.register_page("Chocolate I lØve You!", :namespace => false) }
119
165
  end
120
166
 
121
167
  it "should route to page under /" do
122
- status_path.should == "/status"
168
+ chocolate_i_love_you_path.should == "/chocolate_i_love_you"
123
169
  end
124
170
  end
125
171
 
@@ -22,6 +22,13 @@ describe ActiveAdmin::Scope do
22
22
  its(:scope_block) { should == nil }
23
23
  end
24
24
 
25
+ context 'when a name and scope method is :all' do
26
+ let(:scope) { ActiveAdmin::Scope.new 'Tous', :all }
27
+ its(:name) { should eq 'Tous' }
28
+ its(:scope_method) { should be_nil }
29
+ its(:scope_block) { should be_nil }
30
+ end
31
+
25
32
  context "when a name and scope method" do
26
33
  let(:scope) { ActiveAdmin::Scope.new "With API Access", :with_api_access }
27
34
  its(:name) { should == "With API Access"}
@@ -8,12 +8,15 @@ end
8
8
 
9
9
  describe ActiveAdmin::ViewFactory do
10
10
 
11
- it_should_have_view :global_navigation, ActiveAdmin::Views::TabbedNavigation
12
- it_should_have_view :action_items, ActiveAdmin::Views::ActionItems
13
- it_should_have_view :header, ActiveAdmin::Views::HeaderRenderer
14
- it_should_have_view :blank_slate, ActiveAdmin::Views::BlankSlate
11
+ it_should_have_view :global_navigation, ActiveAdmin::Views::TabbedNavigation
12
+ it_should_have_view :utility_navigation, ActiveAdmin::Views::UtilityNav
13
+ it_should_have_view :site_title, ActiveAdmin::Views::SiteTitle
14
+ it_should_have_view :action_items, ActiveAdmin::Views::ActionItems
15
+ it_should_have_view :header, ActiveAdmin::Views::Header
16
+ it_should_have_view :blank_slate, ActiveAdmin::Views::BlankSlate
17
+ it_should_have_view :action_list_popover, ActiveAdmin::Views::ActionListPopover
15
18
 
16
- it_should_have_view :dashboard_page, ActiveAdmin::Views::Pages::Dashboard
17
- it_should_have_view :layout, ActiveAdmin::Views::Pages::Layout
19
+ it_should_have_view :dashboard_page, ActiveAdmin::Views::Pages::Dashboard
20
+ it_should_have_view :layout, ActiveAdmin::Views::Pages::Layout
18
21
 
19
22
  end
@@ -0,0 +1,41 @@
1
+ require 'active_admin/view_helpers/fields_for'
2
+
3
+ describe ActiveAdmin::ViewHelpers::FormHelper, ".fields_for" do
4
+ include ActiveAdmin::ViewHelpers::FormHelper
5
+
6
+ it "should skip :action, :controller and :commit" do
7
+ fields_for_params(
8
+ :scope => "All", :action => "index", :controller => "PostController", :commit => "Filter", :utf8 => "Yes!").
9
+ should == [ { :scope => "All" } ]
10
+ end
11
+
12
+ it "should skip the except" do
13
+ fields_for_params({:scope => "All", :name => "Greg"}, :except => :name).
14
+ should == [ { :scope => "All" } ]
15
+ end
16
+
17
+ it "should allow an array for the except" do
18
+ fields_for_params({:scope => "All", :name => "Greg", :age => "12"}, :except => [:name, :age]).
19
+ should == [ { :scope => "All" } ]
20
+ end
21
+
22
+ it "should work with hashes" do
23
+ params = fields_for_params(:filters => { :name => "John", :age => "12" })
24
+
25
+ params.size.should == 2
26
+ params.should include({"filters[name]" => "John" })
27
+ params.should include({ "filters[age]" => "12" })
28
+ end
29
+
30
+ it "should work with nested hashes" do
31
+ fields_for_params(:filters => { :user => { :name => "John" }}).
32
+ should == [ { "filters[user][name]" => "John" } ]
33
+ end
34
+
35
+ it "should work with arrays" do
36
+ fields_for_params(:people => ["greg", "emily", "philippe"]).
37
+ should == [ { "people[]" => "greg" },
38
+ { "people[]" => "emily" },
39
+ { "people[]" => "philippe" } ]
40
+ end
41
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::ViewHelpers::FormHelper do
4
+ describe ".hidden_field_tags_for" do
5
+ let(:view) { action_view }
6
+
7
+ it "should render hidden field tags for params" do
8
+ view.hidden_field_tags_for(:scope => "All", :filter => "None").should ==
9
+ %{<input id="scope" name="scope" type="hidden" value="All" />\n<input id="filter" name="filter" type="hidden" value="None" />}
10
+ end
11
+
12
+ it "should filter out the field passed via the option :except" do
13
+ view.hidden_field_tags_for({:scope => "All", :filter => "None"}, :except => :filter).should ==
14
+ %{<input id="scope" name="scope" type="hidden" value="All" />}
15
+ end
16
+ end
17
+ end
18
+
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Views::ActionListPopover do
4
+
5
+ let(:the_popover) do
6
+ arbre {
7
+ action_list_popover :id => "my_awesome_action_list_popover" do
8
+ action "My First Great Action", "#"
9
+ action "My Second Great Action", "http://www.google.com"
10
+ end
11
+ }.children.first
12
+ end
13
+
14
+ it "should have an id" do
15
+ the_popover.id.should == "my_awesome_action_list_popover"
16
+ end
17
+
18
+ describe "the action list" do
19
+ subject do
20
+ the_popover.find_by_class("popover_contents").first
21
+ end
22
+
23
+ its(:tag_name) { should eql("ul") }
24
+
25
+ its(:content){ should include("<li><a href=\"#\">My First Great Action</a></li>") }
26
+ its(:content){ should include("<li><a href=\"http://www.google.com\">My Second Great Action</a></li>") }
27
+
28
+ end
29
+
30
+ end