andrewroth_activeadmin 0.3.4

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 (338) hide show
  1. data/.document +5 -0
  2. data/.gitignore +35 -0
  3. data/.travis.yml +4 -0
  4. data/.yardopts +8 -0
  5. data/CHANGELOG.md +301 -0
  6. data/Gemfile +40 -0
  7. data/Guardfile +8 -0
  8. data/LICENSE +25 -0
  9. data/README.rdoc +113 -0
  10. data/Rakefile +18 -0
  11. data/activeadmin.gemspec +28 -0
  12. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  13. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  14. data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
  15. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  16. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  17. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  18. data/app/assets/images/active_admin/loading.gif +0 -0
  19. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  20. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  21. data/app/assets/images/active_admin/orderable.png +0 -0
  22. data/app/assets/javascripts/active_admin/base.js +12 -0
  23. data/app/assets/javascripts/active_admin/vendor.js +382 -0
  24. data/app/assets/stylesheets/active_admin/_base.css.scss +363 -0
  25. data/app/assets/stylesheets/active_admin/_forms.css.scss +259 -0
  26. data/app/assets/stylesheets/active_admin/_header.css.scss +121 -0
  27. data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
  28. data/app/assets/stylesheets/active_admin/_typography.css.scss +102 -0
  29. data/app/assets/stylesheets/active_admin/components/_comments.css.scss +43 -0
  30. data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +125 -0
  31. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +39 -0
  32. data/app/assets/stylesheets/active_admin/components/_tables.css.scss +68 -0
  33. data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +10 -0
  34. data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +27 -0
  35. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +29 -0
  36. data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +20 -0
  37. data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
  38. data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
  39. data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +34 -0
  40. data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +21 -0
  41. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +17 -0
  42. data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +21 -0
  43. data/app/views/active_admin/dashboard/index.html.arb +1 -0
  44. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  45. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  46. data/app/views/active_admin/devise/passwords/edit.html.erb +16 -0
  47. data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
  48. data/app/views/active_admin/devise/sessions/new.html.erb +18 -0
  49. data/app/views/active_admin/devise/shared/_links.erb +20 -0
  50. data/app/views/active_admin/devise/unlocks/new.html.erb +12 -0
  51. data/app/views/active_admin/resource/edit.html.arb +1 -0
  52. data/app/views/active_admin/resource/index.csv.erb +20 -0
  53. data/app/views/active_admin/resource/index.html.arb +1 -0
  54. data/app/views/active_admin/resource/new.html.arb +1 -0
  55. data/app/views/active_admin/resource/show.html.arb +1 -0
  56. data/app/views/layouts/active_admin.html.arb +1 -0
  57. data/app/views/layouts/active_admin_logged_out.html.erb +35 -0
  58. data/cucumber.yml +2 -0
  59. data/docs/0-installation.md +50 -0
  60. data/docs/1-general-configuration.md +43 -0
  61. data/docs/2-resource-customization.md +114 -0
  62. data/docs/3-index-pages.md +55 -0
  63. data/docs/3-index-pages/index-as-block.md +16 -0
  64. data/docs/3-index-pages/index-as-blog.md +61 -0
  65. data/docs/3-index-pages/index-as-grid.md +21 -0
  66. data/docs/3-index-pages/index-as-table.md +90 -0
  67. data/docs/4-csv-format.md +14 -0
  68. data/docs/5-forms.md +39 -0
  69. data/docs/6-show-screens.md +36 -0
  70. data/docs/7-sidebars.md +35 -0
  71. data/docs/8-custom-actions.md +123 -0
  72. data/features/comments/commenting.feature +112 -0
  73. data/features/comments/viewing_index.feature +19 -0
  74. data/features/dashboard.feature +26 -0
  75. data/features/edit_page.feature +106 -0
  76. data/features/first_boot.feature +16 -0
  77. data/features/global_navigation.feature +30 -0
  78. data/features/index/filters.feature +35 -0
  79. data/features/index/format_as_csv.feature +46 -0
  80. data/features/index/formats.feature +12 -0
  81. data/features/index/index_as_block.feature +15 -0
  82. data/features/index/index_as_blog.feature +50 -0
  83. data/features/index/index_as_grid.feature +45 -0
  84. data/features/index/index_as_table.feature +81 -0
  85. data/features/index/index_blank_slate.feature +56 -0
  86. data/features/index/index_scopes.feature +52 -0
  87. data/features/index/pagination.feature +17 -0
  88. data/features/menu.feature +37 -0
  89. data/features/new_page.feature +75 -0
  90. data/features/registering_assets.feature +35 -0
  91. data/features/registering_resources.feature +33 -0
  92. data/features/show/default_content.feature +43 -0
  93. data/features/show/page_title.feature +33 -0
  94. data/features/sidebar_sections.feature +127 -0
  95. data/features/specifying_actions.feature +87 -0
  96. data/features/step_definitions/action_item_steps.rb +7 -0
  97. data/features/step_definitions/additional_web_steps.rb +77 -0
  98. data/features/step_definitions/asset_steps.rb +7 -0
  99. data/features/step_definitions/attribute_steps.rb +13 -0
  100. data/features/step_definitions/comment_steps.rb +8 -0
  101. data/features/step_definitions/configuration_steps.rb +31 -0
  102. data/features/step_definitions/dashboard_steps.rb +11 -0
  103. data/features/step_definitions/factory_steps.rb +29 -0
  104. data/features/step_definitions/flash_steps.rb +3 -0
  105. data/features/step_definitions/format_steps.rb +35 -0
  106. data/features/step_definitions/index_scope_steps.rb +20 -0
  107. data/features/step_definitions/layout_steps.rb +3 -0
  108. data/features/step_definitions/menu_steps.rb +7 -0
  109. data/features/step_definitions/pagination_steps.rb +8 -0
  110. data/features/step_definitions/sidebar_steps.rb +7 -0
  111. data/features/step_definitions/tab_steps.rb +3 -0
  112. data/features/step_definitions/user_steps.rb +26 -0
  113. data/features/step_definitions/web_steps.rb +211 -0
  114. data/features/sti_resource.feature +61 -0
  115. data/features/support/env.rb +96 -0
  116. data/features/support/paths.rb +50 -0
  117. data/features/support/selectors.rb +45 -0
  118. data/features/users/logging_in.feature +34 -0
  119. data/features/users/logging_out.feature +13 -0
  120. data/lib/active_admin.rb +82 -0
  121. data/lib/active_admin/abstract_view_factory.rb +95 -0
  122. data/lib/active_admin/application.rb +231 -0
  123. data/lib/active_admin/arbre.rb +23 -0
  124. data/lib/active_admin/arbre/builder.rb +111 -0
  125. data/lib/active_admin/arbre/context.rb +45 -0
  126. data/lib/active_admin/arbre/core_extensions.rb +5 -0
  127. data/lib/active_admin/arbre/html/attributes.rb +20 -0
  128. data/lib/active_admin/arbre/html/class_list.rb +28 -0
  129. data/lib/active_admin/arbre/html/collection.rb +27 -0
  130. data/lib/active_admin/arbre/html/document.rb +42 -0
  131. data/lib/active_admin/arbre/html/element.rb +151 -0
  132. data/lib/active_admin/arbre/html/html5_elements.rb +47 -0
  133. data/lib/active_admin/arbre/html/tag.rb +137 -0
  134. data/lib/active_admin/arbre/html/text_node.rb +35 -0
  135. data/lib/active_admin/asset_registration.rb +34 -0
  136. data/lib/active_admin/callbacks.rb +89 -0
  137. data/lib/active_admin/comments.rb +88 -0
  138. data/lib/active_admin/comments/comment.rb +21 -0
  139. data/lib/active_admin/comments/configuration.rb +18 -0
  140. data/lib/active_admin/comments/namespace_helper.rb +14 -0
  141. data/lib/active_admin/comments/resource_helper.rb +17 -0
  142. data/lib/active_admin/comments/show_page_helper.rb +23 -0
  143. data/lib/active_admin/comments/views.rb +3 -0
  144. data/lib/active_admin/comments/views/active_admin_comment.rb +0 -0
  145. data/lib/active_admin/comments/views/active_admin_comments.rb +82 -0
  146. data/lib/active_admin/component.rb +22 -0
  147. data/lib/active_admin/controller_action.rb +12 -0
  148. data/lib/active_admin/csv_builder.rb +45 -0
  149. data/lib/active_admin/dashboards.rb +48 -0
  150. data/lib/active_admin/dashboards/dashboard_controller.rb +38 -0
  151. data/lib/active_admin/dashboards/section.rb +34 -0
  152. data/lib/active_admin/dependency_checker.rb +30 -0
  153. data/lib/active_admin/deprecation.rb +36 -0
  154. data/lib/active_admin/devise.rb +54 -0
  155. data/lib/active_admin/dsl.rb +224 -0
  156. data/lib/active_admin/engine.rb +4 -0
  157. data/lib/active_admin/event.rb +31 -0
  158. data/lib/active_admin/form_builder.rb +118 -0
  159. data/lib/active_admin/helpers/optional_display.rb +34 -0
  160. data/lib/active_admin/helpers/scope_chain.rb +23 -0
  161. data/lib/active_admin/helpers/settings.rb +70 -0
  162. data/lib/active_admin/iconic.rb +51 -0
  163. data/lib/active_admin/iconic/icons.rb +142 -0
  164. data/lib/active_admin/locales/bg.yml +40 -0
  165. data/lib/active_admin/locales/cs.yml +34 -0
  166. data/lib/active_admin/locales/da.yml +28 -0
  167. data/lib/active_admin/locales/en.yml +40 -0
  168. data/lib/active_admin/locales/es.yml +40 -0
  169. data/lib/active_admin/locales/fr.yml +40 -0
  170. data/lib/active_admin/locales/it.yml +40 -0
  171. data/lib/active_admin/locales/ja.yml +40 -0
  172. data/lib/active_admin/locales/pl.yml +34 -0
  173. data/lib/active_admin/locales/pt-BR.yml +41 -0
  174. data/lib/active_admin/locales/ru.yml +40 -0
  175. data/lib/active_admin/locales/sv-SE.yml +40 -0
  176. data/lib/active_admin/locales/zh_cn.yml +40 -0
  177. data/lib/active_admin/menu.rb +42 -0
  178. data/lib/active_admin/menu_item.rb +73 -0
  179. data/lib/active_admin/namespace.rb +206 -0
  180. data/lib/active_admin/page_config.rb +15 -0
  181. data/lib/active_admin/reloader.rb +64 -0
  182. data/lib/active_admin/renderer.rb +87 -0
  183. data/lib/active_admin/resource.rb +159 -0
  184. data/lib/active_admin/resource/action_items.rb +88 -0
  185. data/lib/active_admin/resource/belongs_to.rb +31 -0
  186. data/lib/active_admin/resource/menu.rb +45 -0
  187. data/lib/active_admin/resource/naming.rb +50 -0
  188. data/lib/active_admin/resource/scopes.rb +33 -0
  189. data/lib/active_admin/resource/sidebars.rb +36 -0
  190. data/lib/active_admin/resource_controller.rb +105 -0
  191. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  192. data/lib/active_admin/resource_controller/actions.rb +79 -0
  193. data/lib/active_admin/resource_controller/callbacks.rb +47 -0
  194. data/lib/active_admin/resource_controller/collection.rb +138 -0
  195. data/lib/active_admin/resource_controller/filters.rb +58 -0
  196. data/lib/active_admin/resource_controller/form.rb +42 -0
  197. data/lib/active_admin/resource_controller/menu.rb +29 -0
  198. data/lib/active_admin/resource_controller/page_configurations.rb +53 -0
  199. data/lib/active_admin/resource_controller/scoping.rb +36 -0
  200. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  201. data/lib/active_admin/router.rb +85 -0
  202. data/lib/active_admin/sass/active_admin.scss +3 -0
  203. data/lib/active_admin/sass/css_loader.rb +16 -0
  204. data/lib/active_admin/sass/helpers.rb +45 -0
  205. data/lib/active_admin/scope.rb +31 -0
  206. data/lib/active_admin/sidebar_section.rb +41 -0
  207. data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
  208. data/lib/active_admin/version.rb +3 -0
  209. data/lib/active_admin/view_factory.rb +23 -0
  210. data/lib/active_admin/view_helpers.rb +22 -0
  211. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  212. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
  213. data/lib/active_admin/view_helpers/auto_link_helper.rb +42 -0
  214. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +29 -0
  215. data/lib/active_admin/view_helpers/display_helper.rb +38 -0
  216. data/lib/active_admin/view_helpers/filter_form_helper.rb +186 -0
  217. data/lib/active_admin/view_helpers/form_helper.rb +13 -0
  218. data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
  219. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +26 -0
  220. data/lib/active_admin/view_helpers/renderer_helper.rb +29 -0
  221. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  222. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  223. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  224. data/lib/active_admin/views.rb +8 -0
  225. data/lib/active_admin/views/action_items.rb +17 -0
  226. data/lib/active_admin/views/components/attributes_table.rb +66 -0
  227. data/lib/active_admin/views/components/blank_slate.rb +17 -0
  228. data/lib/active_admin/views/components/columns.rb +47 -0
  229. data/lib/active_admin/views/components/paginated_collection.rb +92 -0
  230. data/lib/active_admin/views/components/panel.rb +26 -0
  231. data/lib/active_admin/views/components/scopes.rb +69 -0
  232. data/lib/active_admin/views/components/sidebar_section.rb +28 -0
  233. data/lib/active_admin/views/components/status_tag.rb +55 -0
  234. data/lib/active_admin/views/components/table_for.rb +193 -0
  235. data/lib/active_admin/views/dashboard_section_renderer.rb +19 -0
  236. data/lib/active_admin/views/header_renderer.rb +57 -0
  237. data/lib/active_admin/views/index_as_block.rb +29 -0
  238. data/lib/active_admin/views/index_as_blog.rb +129 -0
  239. data/lib/active_admin/views/index_as_grid.rb +70 -0
  240. data/lib/active_admin/views/index_as_table.rb +164 -0
  241. data/lib/active_admin/views/pages/base.rb +167 -0
  242. data/lib/active_admin/views/pages/dashboard.rb +62 -0
  243. data/lib/active_admin/views/pages/edit.rb +28 -0
  244. data/lib/active_admin/views/pages/index.rb +91 -0
  245. data/lib/active_admin/views/pages/layout.rb +26 -0
  246. data/lib/active_admin/views/pages/new.rb +28 -0
  247. data/lib/active_admin/views/pages/show.rb +56 -0
  248. data/lib/active_admin/views/tabbed_navigation.rb +94 -0
  249. data/lib/activeadmin.rb +1 -0
  250. data/lib/generators/active_admin/assets/assets_generator.rb +21 -0
  251. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +427 -0
  252. data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +6 -0
  253. data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +1 -0
  254. data/lib/generators/active_admin/assets/templates/dashboards.rb +36 -0
  255. data/lib/generators/active_admin/devise/devise_generator.rb +49 -0
  256. data/lib/generators/active_admin/install/install_generator.rb +44 -0
  257. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +103 -0
  258. data/lib/generators/active_admin/install/templates/dashboards.rb +38 -0
  259. data/lib/generators/active_admin/install/templates/migrations/1_create_admin_notes.rb +16 -0
  260. data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +25 -0
  261. data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
  262. data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
  263. data/script/local +44 -0
  264. data/script/use_rails +46 -0
  265. data/spec/integration/belongs_to_spec.rb +42 -0
  266. data/spec/integration/default_namespace.rb +77 -0
  267. data/spec/integration/javascript_spec.rb +20 -0
  268. data/spec/integration/memory_spec.rb +38 -0
  269. data/spec/integration/stylesheets_spec.rb +41 -0
  270. data/spec/spec_helper.rb +167 -0
  271. data/spec/support/detect_rails_version.rb +10 -0
  272. data/spec/support/integration_example_group.rb +33 -0
  273. data/spec/support/jslint.yml +80 -0
  274. data/spec/support/rails_template.rb +32 -0
  275. data/spec/support/rails_template_with_data.rb +33 -0
  276. data/spec/support/templates/cucumber.rb +24 -0
  277. data/spec/unit/abstract_view_factory_spec.rb +79 -0
  278. data/spec/unit/action_builder_spec.rb +88 -0
  279. data/spec/unit/active_admin_spec.rb +17 -0
  280. data/spec/unit/application_spec.rb +87 -0
  281. data/spec/unit/arbre/context_spec.rb +35 -0
  282. data/spec/unit/arbre/html/element_finder_methods_spec.rb +54 -0
  283. data/spec/unit/arbre/html/element_spec.rb +223 -0
  284. data/spec/unit/arbre/html/tag_attributes_spec.rb +61 -0
  285. data/spec/unit/arbre/html/tag_spec.rb +63 -0
  286. data/spec/unit/arbre/html_spec.rb +209 -0
  287. data/spec/unit/asset_registration_spec.rb +37 -0
  288. data/spec/unit/auto_link_spec.rb +39 -0
  289. data/spec/unit/belongs_to_spec.rb +45 -0
  290. data/spec/unit/breadcrumbs_spec.rb +110 -0
  291. data/spec/unit/comments_spec.rb +57 -0
  292. data/spec/unit/component_spec.rb +18 -0
  293. data/spec/unit/controller_filters_spec.rb +34 -0
  294. data/spec/unit/csv_builder_spec.rb +83 -0
  295. data/spec/unit/dashboard_controller_spec.rb +26 -0
  296. data/spec/unit/dashboard_section_spec.rb +56 -0
  297. data/spec/unit/dashboards_spec.rb +59 -0
  298. data/spec/unit/devise_spec.rb +66 -0
  299. data/spec/unit/display_name_spec.rb +29 -0
  300. data/spec/unit/event_spec.rb +41 -0
  301. data/spec/unit/filter_form_builder_spec.rb +182 -0
  302. data/spec/unit/form_builder_spec.rb +256 -0
  303. data/spec/unit/generators/install_rails_3_1_spec.rb +16 -0
  304. data/spec/unit/helpers/scope_chain_spec.rb +36 -0
  305. data/spec/unit/helpers/settings_spec.rb +30 -0
  306. data/spec/unit/menu_item_spec.rb +143 -0
  307. data/spec/unit/menu_spec.rb +53 -0
  308. data/spec/unit/namespace_spec.rb +214 -0
  309. data/spec/unit/pretty_format_spec.rb +35 -0
  310. data/spec/unit/rails_spec.rb +43 -0
  311. data/spec/unit/registration_spec.rb +76 -0
  312. data/spec/unit/reloader_spec.rb +80 -0
  313. data/spec/unit/renderer_spec.rb +108 -0
  314. data/spec/unit/resource/action_items_spec.rb +62 -0
  315. data/spec/unit/resource/menu_spec.rb +80 -0
  316. data/spec/unit/resource/naming_spec.rb +75 -0
  317. data/spec/unit/resource/scopes_spec.rb +30 -0
  318. data/spec/unit/resource/sidebars_spec.rb +50 -0
  319. data/spec/unit/resource_controller/collection_spec.rb +34 -0
  320. data/spec/unit/resource_controller_spec.rb +152 -0
  321. data/spec/unit/resource_spec.rb +269 -0
  322. data/spec/unit/routing_spec.rb +88 -0
  323. data/spec/unit/sass/helpers_spec.rb +47 -0
  324. data/spec/unit/scope_spec.rb +41 -0
  325. data/spec/unit/view_factory_spec.rb +19 -0
  326. data/spec/unit/views/components/attributes_table_spec.rb +100 -0
  327. data/spec/unit/views/components/blank_slate_spec.rb +15 -0
  328. data/spec/unit/views/components/columns_spec.rb +75 -0
  329. data/spec/unit/views/components/panel_spec.rb +29 -0
  330. data/spec/unit/views/components/sidebar_section_spec.rb +37 -0
  331. data/spec/unit/views/components/status_tag_spec.rb +79 -0
  332. data/spec/unit/views/components/table_for_spec.rb +131 -0
  333. data/spec/unit/views/pages/layout_spec.rb +22 -0
  334. data/spec/unit/views/tabbed_navigation_spec.rb +125 -0
  335. data/tasks/docs.rake +39 -0
  336. data/tasks/test.rake +57 -0
  337. data/tasks/yard.rake +6 -0
  338. metadata +646 -0
@@ -0,0 +1,75 @@
1
+ require 'spec_helper'
2
+
3
+ module ActiveAdmin
4
+ describe Resource, "Naming" do
5
+
6
+ before { load_defaults! }
7
+
8
+ let(:application){ ActiveAdmin::Application.new }
9
+ let(:namespace){ Namespace.new(application, :admin) }
10
+
11
+ def config(options = {})
12
+ @config ||= Resource.new(namespace, Category, options)
13
+ end
14
+
15
+
16
+ describe "underscored resource name" do
17
+ context "when class" do
18
+ it "should be the underscored singular resource name" do
19
+ config.underscored_resource_name.should == "category"
20
+ end
21
+ end
22
+ context "when a class in a module" do
23
+ it "should underscore the module and the class" do
24
+ module ::Mock; class Resource; end; end
25
+ Resource.new(namespace, Mock::Resource).underscored_resource_name.should == "mock_resource"
26
+ end
27
+ end
28
+ context "when you pass the 'as' option" do
29
+ it "should underscore the passed through string and singulralize" do
30
+ config(:as => "Blog Categories").underscored_resource_name.should == "blog_category"
31
+ end
32
+ end
33
+ end
34
+
35
+ describe "camelized resource name" do
36
+ it "should return a camelized version of the underscored resource name" do
37
+ config(:as => "Blog Categories").camelized_resource_name.should == "BlogCategory"
38
+ end
39
+ end
40
+
41
+ describe "plural underscored resource name" do
42
+ before(:all) do
43
+ class ::CandyCane; end
44
+ @config = Resource.new(namespace, CandyCane, {})
45
+ end
46
+
47
+ it "should return an underscored and pluralized resource name" do
48
+ config.plural_underscored_resource_name.should == "candy_canes"
49
+ end
50
+ end
51
+
52
+ describe "resource name" do
53
+ it "should return a pretty name" do
54
+ config.resource_name.should == "Category"
55
+ end
56
+ it "should return the plural version" do
57
+ config.plural_resource_name.should == "Categories"
58
+ end
59
+ context "when the :as option is given" do
60
+ it "should return the custom name" do
61
+ config(:as => "My Category").resource_name.should == "My Category"
62
+ end
63
+ end
64
+ context "I18n" do
65
+ before do
66
+ I18n.stub(:translate) { 'Categorie' }
67
+ end
68
+ it "should return the plural version defined in the i18n if available" do
69
+ config.plural_resource_name.should == "Categorie"
70
+ end
71
+ end
72
+ end
73
+
74
+ end
75
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ module ActiveAdmin
4
+ describe Resource, "Scopes" do
5
+
6
+ before { load_defaults! }
7
+
8
+ let(:application){ ActiveAdmin::Application.new }
9
+ let(:namespace){ Namespace.new(application, :admin) }
10
+
11
+ def config(options = {})
12
+ @config ||= Resource.new(namespace, Category, options)
13
+ end
14
+
15
+ describe "adding a scope" do
16
+
17
+ it "should add a scope" do
18
+ config.scope :published
19
+ config.scopes.first.should be_a(ActiveAdmin::Scope)
20
+ config.scopes.first.name.should == "Published"
21
+ end
22
+
23
+ it "should retrive a scope by its id" do
24
+ config.scope :published
25
+ config.get_scope_by_id(:published).name.should == "Published"
26
+ end
27
+
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Resource::Sidebars do
4
+
5
+ let(:resource) do
6
+ namespace = ActiveAdmin::Namespace.new(ActiveAdmin::Application.new, :admin)
7
+ namespace.register(Post)
8
+ end
9
+
10
+ let(:sidebar) { ActiveAdmin::SidebarSection.new(:help) }
11
+
12
+ describe "adding a new sidebar section" do
13
+
14
+ before do
15
+ resource.clear_sidebar_sections!
16
+ resource.sidebar_sections << sidebar
17
+ end
18
+
19
+ it "should add a sidebar section" do
20
+ resource.should have(1).sidebar_sections
21
+ end
22
+
23
+ end
24
+
25
+ describe "retrieving sections for a controller action" do
26
+
27
+ let(:only_index){ ActiveAdmin::SidebarSection.new(:help, :only => :index) }
28
+ let(:only_show){ ActiveAdmin::SidebarSection.new(:help, :only => :show) }
29
+
30
+ before do
31
+ resource.clear_sidebar_sections!
32
+ resource.sidebar_sections << only_index
33
+ resource.sidebar_sections << only_show
34
+ end
35
+
36
+ it "should only return the relevant action items" do
37
+ resource.should have(2).sidebar_sections
38
+ resource.sidebar_sections_for("index").should == [only_index]
39
+ end
40
+
41
+ end
42
+
43
+ describe "default sidebar sections" do
44
+
45
+ it "should have a filters section by default" do
46
+ resource.sidebar_sections.first.name.should == :filters
47
+ end
48
+
49
+ end
50
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::ResourceController::Collection do
4
+ let(:params) do
5
+ {}
6
+ end
7
+
8
+ let(:controller) do
9
+ rc = Admin::PostsController.new
10
+ rc.stub!(:params) do
11
+ params
12
+ end
13
+ rc
14
+ end
15
+
16
+ describe ActiveAdmin::ResourceController::Collection::Search do
17
+ let(:params){ {:q => {} }}
18
+ it "should call the metasearch method" do
19
+ chain = mock("ChainObj")
20
+ chain.should_receive(:metasearch).with(params[:q]).once.and_return(Post.search)
21
+ controller.send :search, chain
22
+ end
23
+ end
24
+
25
+ describe ActiveAdmin::ResourceController::Collection::Sorting do
26
+ let(:params){ {:order => "id_asc" }}
27
+ it "should prepend the table name" do
28
+ chain = mock("ChainObj")
29
+ chain.should_receive(:order).with("\"posts\".id asc").once.and_return(Post.search)
30
+ controller.send :sort_order, chain
31
+ end
32
+ end
33
+
34
+ end
@@ -0,0 +1,152 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::ResourceController do
4
+
5
+ [:index, :show].each do |page|
6
+ describe "#{page} config" do
7
+ before do
8
+ Admin::PostsController.send(:"reset_#{page}_config!")
9
+ end
10
+
11
+ it "should be set" do
12
+ Admin::PostsController.send(:set_page_config, page, {})
13
+ Admin::PostsController.send(:"#{page}_config").should be_an_instance_of(ActiveAdmin::PageConfig)
14
+ end
15
+
16
+ it "should store the block" do
17
+ block = Proc.new {}
18
+ Admin::PostsController.send(:set_page_config, page, {}, &block)
19
+ Admin::PostsController.send(:"#{page}_config").block.should == block
20
+ end
21
+
22
+ it "should be reset" do
23
+ Admin::PostsController.send(:"reset_#{page}_config!")
24
+ Admin::PostsController.send(:"#{page}_config").should == nil
25
+ end
26
+ end
27
+ end
28
+
29
+ describe "setting the current tab" do
30
+ let(:controller) { ActiveAdmin::ResourceController.new }
31
+ before do
32
+ controller.stub!(:active_admin_config => resource, :parent? => true)
33
+ controller.send :set_current_tab # Run the before filter
34
+ end
35
+ subject{ controller.instance_variable_get(:@current_tab) }
36
+
37
+ context "when menu item name is 'Resources' without a parent menu item" do
38
+ let(:resource){ mock(:menu_item_name => "Resources", :parent_menu_item_name => nil, :belongs_to? => false) }
39
+ it { should == "Resources" }
40
+ end
41
+
42
+ context "when there is a parent menu item of 'Admin'" do
43
+ let(:resource){ mock(:parent_menu_item_name => "Admin", :menu_item_name => "Resources", :belongs_to? => false) }
44
+ it { should == "Admin/Resources" }
45
+ end
46
+ end
47
+
48
+ describe "callbacks" do
49
+ let(:application){ ::ActiveAdmin::Application.new }
50
+ let(:namespace){ ActiveAdmin::Namespace.new(application, :admin) }
51
+
52
+ before :all do
53
+ namespace.register Post do
54
+ after_build :call_after_build
55
+ before_save :call_before_save
56
+ after_save :call_after_save
57
+ before_create :call_before_create
58
+ after_create :call_after_create
59
+ before_update :call_before_update
60
+ after_update :call_after_update
61
+ before_destroy :call_before_destroy
62
+ after_destroy :call_after_destroy
63
+
64
+ controller do
65
+ def call_after_build(obj); end
66
+ def call_before_save(obj); end
67
+ def call_after_save(obj); end
68
+ def call_before_create(obj); end
69
+ def call_after_create(obj); end
70
+ def call_before_update(obj); end
71
+ def call_after_update(obj); end
72
+ def call_before_destroy(obj); end
73
+ def call_after_destroy(obj); end
74
+ end
75
+ end
76
+ end
77
+
78
+ describe "performing create" do
79
+ let(:controller){ Admin::PostsController.new }
80
+ let(:resource){ mock("Resource", :save => true) }
81
+
82
+ before do
83
+ resource.should_receive(:save)
84
+ end
85
+
86
+ it "should call the before create callback" do
87
+ controller.should_receive(:call_before_create).with(resource)
88
+ controller.send :create_resource, resource
89
+ end
90
+ it "should call the before save callback" do
91
+ controller.should_receive(:call_before_save).with(resource)
92
+ controller.send :create_resource, resource
93
+ end
94
+ it "should call the after save callback" do
95
+ controller.should_receive(:call_after_save).with(resource)
96
+ controller.send :create_resource, resource
97
+ end
98
+ it "should call the after create callback" do
99
+ controller.should_receive(:call_after_create).with(resource)
100
+ controller.send :create_resource, resource
101
+ end
102
+ end
103
+
104
+ describe "performing update" do
105
+ let(:controller){ Admin::PostsController.new }
106
+ let(:resource){ mock("Resource", :attributes= => true, :save => true) }
107
+ let(:attributes){ {} }
108
+
109
+ before do
110
+ resource.should_receive(:attributes=).with(attributes)
111
+ resource.should_receive(:save)
112
+ end
113
+
114
+ it "should call the before update callback" do
115
+ controller.should_receive(:call_before_update).with(resource)
116
+ controller.send :update_resource, resource, attributes
117
+ end
118
+ it "should call the before save callback" do
119
+ controller.should_receive(:call_before_save).with(resource)
120
+ controller.send :update_resource, resource, attributes
121
+ end
122
+ it "should call the after save callback" do
123
+ controller.should_receive(:call_after_save).with(resource)
124
+ controller.send :update_resource, resource, attributes
125
+ end
126
+ it "should call the after create callback" do
127
+ controller.should_receive(:call_after_update).with(resource)
128
+ controller.send :update_resource, resource, attributes
129
+ end
130
+ end
131
+
132
+ describe "performing destroy" do
133
+ let(:controller){ Admin::PostsController.new }
134
+ let(:resource){ mock("Resource", :destroy => true) }
135
+
136
+ before do
137
+ resource.should_receive(:destroy)
138
+ end
139
+
140
+ it "should call the before destroy callback" do
141
+ controller.should_receive(:call_before_destroy).with(resource)
142
+ controller.send :destroy_resource, resource
143
+ end
144
+
145
+ it "should call the after destroy callback" do
146
+ controller.should_receive(:call_after_destroy).with(resource)
147
+ controller.send :destroy_resource, resource
148
+ end
149
+ end
150
+ end
151
+
152
+ end
@@ -0,0 +1,269 @@
1
+ require 'spec_helper'
2
+
3
+ module ActiveAdmin
4
+ describe Resource do
5
+
6
+ before { load_defaults! }
7
+
8
+ let(:application){ ActiveAdmin::Application.new }
9
+ let(:namespace){ Namespace.new(application, :admin) }
10
+
11
+ def config(options = {})
12
+ @config ||= Resource.new(namespace, Category, options)
13
+ end
14
+
15
+ describe "#resource_table_name" do
16
+ it "should return the resource's table name" do
17
+ config.resource_table_name.should == '"categories"'
18
+ end
19
+ context "when the :as option is given" do
20
+ it "should return the resource's table name" do
21
+ config(:as => "My Category").resource_table_name.should == '"categories"'
22
+ end
23
+ end
24
+ end
25
+
26
+ describe "namespace" do
27
+ it "should return the namespace" do
28
+ config.namespace.should == namespace
29
+ end
30
+ end
31
+
32
+ describe "controller name" do
33
+ it "should return a namespaced controller name" do
34
+ config.controller_name.should == "Admin::CategoriesController"
35
+ end
36
+ context "when non namespaced controller" do
37
+ let(:namespace){ ActiveAdmin::Namespace.new(application, :root) }
38
+ it "should return a non namespaced controller name" do
39
+ config.controller_name.should == "CategoriesController"
40
+ end
41
+ end
42
+ end
43
+
44
+ describe "#include_in_menu?" do
45
+ let(:namespace){ ActiveAdmin::Namespace.new(application, :admin) }
46
+ subject{ resource }
47
+
48
+ context "when regular resource" do
49
+ let(:resource){ namespace.register(Post) }
50
+ it { should be_include_in_menu }
51
+ end
52
+ context "when belongs to" do
53
+ let(:resource){ namespace.register(Post){ belongs_to :author } }
54
+ it { should_not be_include_in_menu }
55
+ end
56
+ context "when belongs to optional" do
57
+ let(:resource){ namespace.register(Post){ belongs_to :author, :optional => true} }
58
+ it { should be_include_in_menu }
59
+ end
60
+ context "when menu set to false" do
61
+ let(:resource){ namespace.register(Post){ menu false } }
62
+ it { should_not be_include_in_menu }
63
+ end
64
+ end
65
+
66
+ describe "menu item name" do
67
+ it "should be the resource name when not set" do
68
+ config.menu_item_name.should == "Categories"
69
+ end
70
+ it "should be settable" do
71
+ config.menu :label => "My Label"
72
+ config.menu_item_name.should == "My Label"
73
+ end
74
+ end
75
+
76
+ describe "parent menu item name" do
77
+ it "should be nil when not set" do
78
+ config.parent_menu_item_name.should == nil
79
+ end
80
+ it "should return the name if set" do
81
+ config.tap do |c|
82
+ c.menu :parent => "Blog"
83
+ end.parent_menu_item_name.should == "Blog"
84
+ end
85
+ end
86
+
87
+ describe "menu item priority" do
88
+ it "should be 10 when not set" do
89
+ config.menu_item_priority.should == 10
90
+ end
91
+ it "should be settable" do
92
+ config.menu :priority => 2
93
+ config.menu_item_priority.should == 2
94
+ end
95
+ end
96
+
97
+ describe "menu item display if" do
98
+ it "should be a proc always returning true if not set" do
99
+ config.menu_item_display_if.should be_instance_of(Proc)
100
+ config.menu_item_display_if.call.should == true
101
+ end
102
+ it "should be settable" do
103
+ config.menu :if => proc { false }
104
+ config.menu_item_display_if.call.should == false
105
+ end
106
+ end
107
+
108
+ describe "route names" do
109
+ let(:config){ application.register Category }
110
+ it "should return the route prefix" do
111
+ config.route_prefix.should == "admin"
112
+ end
113
+ it "should return the route collection path" do
114
+ config.route_collection_path.should == :admin_categories_path
115
+ end
116
+
117
+ context "when in the root namespace" do
118
+ let(:config){ application.register Category, :namespace => false}
119
+ it "should have a nil route_prefix" do
120
+ config.route_prefix.should == nil
121
+ end
122
+ end
123
+
124
+ context "when registering a plural resource" do
125
+ class ::News; def self.has_many(*); end end
126
+
127
+ let(:config){ application.register News }
128
+ it "should return the plurali route with _index" do
129
+ config.route_collection_path.should == :admin_news_index_path
130
+ end
131
+ end
132
+ end
133
+
134
+ describe "page configs" do
135
+ context "when initialized" do
136
+ it "should be empty" do
137
+ config.page_configs.should == {}
138
+ end
139
+ end
140
+ it "should be set-able" do
141
+ config.page_configs[:index] = "hello world"
142
+ config.page_configs[:index].should == "hello world"
143
+ end
144
+ end
145
+
146
+ describe "scoping" do
147
+ context "when using a block" do
148
+ before do
149
+ @resource = application.register Category do
150
+ scope_to do
151
+ "scoped"
152
+ end
153
+ end
154
+ end
155
+ it "should call the proc for the begin of association chain" do
156
+ begin_of_association_chain = @resource.controller.new.send(:begin_of_association_chain)
157
+ begin_of_association_chain.should == "scoped"
158
+ end
159
+ end
160
+
161
+ context "when using a symbol" do
162
+ before do
163
+ @resource = application.register Category do
164
+ scope_to :current_user
165
+ end
166
+ end
167
+ it "should call the method for the begin of association chain" do
168
+ controller = @resource.controller.new
169
+ controller.should_receive(:current_user).and_return(true)
170
+ begin_of_association_chain = controller.send(:begin_of_association_chain)
171
+ begin_of_association_chain.should == true
172
+ end
173
+ end
174
+
175
+ context "when not using a block or symbol" do
176
+ before do
177
+ @resource = application.register Category do
178
+ scope_to "Some string"
179
+ end
180
+ end
181
+ it "should raise and exception" do
182
+ lambda {
183
+ @resource.controller.new.send(:begin_of_association_chain)
184
+ }.should raise_error(ArgumentError)
185
+ end
186
+ end
187
+
188
+ describe "getting the method for the association chain" do
189
+ context "when a simple registration" do
190
+ before do
191
+ @resource = application.register Category do
192
+ scope_to :current_user
193
+ end
194
+ end
195
+ it "should return the pluralized collection name" do
196
+ @resource.controller.new.send(:method_for_association_chain).should == :categories
197
+ end
198
+ end
199
+ context "when passing in the method as an option" do
200
+ before do
201
+ @resource = application.register Category do
202
+ scope_to :current_user, :association_method => :blog_categories
203
+ end
204
+ end
205
+ it "should return the method from the option" do
206
+ @resource.controller.new.send(:method_for_association_chain).should == :blog_categories
207
+ end
208
+ end
209
+ end
210
+ end
211
+
212
+
213
+ describe "sort order" do
214
+
215
+ context "when resource class responds to primary_key" do
216
+ it "should sort by primary key desc by default" do
217
+ mock_resource = mock
218
+ mock_resource.should_receive(:primary_key).and_return("pk")
219
+ config = Resource.new(namespace, mock_resource)
220
+ config.sort_order.should == "pk_desc"
221
+ end
222
+ end
223
+
224
+ context "when resource class does not respond to primary_key" do
225
+ it "should default to id" do
226
+ mock_resource = mock
227
+ config = Resource.new(namespace, mock_resource)
228
+ config.sort_order.should == "id_desc"
229
+ end
230
+ end
231
+
232
+ it "should be set-able" do
233
+ config.sort_order = "task_id_desc"
234
+ config.sort_order.should == "task_id_desc"
235
+ end
236
+
237
+ end
238
+
239
+ describe "adding a scope" do
240
+
241
+ it "should add a scope" do
242
+ config.scope :published
243
+ config.scopes.first.should be_a(ActiveAdmin::Scope)
244
+ config.scopes.first.name.should == "Published"
245
+ end
246
+
247
+ it "should retrive a scope by its id" do
248
+ config.scope :published
249
+ config.get_scope_by_id(:published).name.should == "Published"
250
+ end
251
+ end
252
+
253
+ describe "#csv_builder" do
254
+ context "when no csv builder set" do
255
+ it "should return a default column builder with id and content columns" do
256
+ config.csv_builder.columns.size.should == Category.content_columns.size + 1
257
+ end
258
+ end
259
+
260
+ context "when csv builder set" do
261
+ it "shuld return the csv_builder we set" do
262
+ csv_builder = CSVBuilder.new
263
+ config.csv_builder = csv_builder
264
+ config.csv_builder.should == csv_builder
265
+ end
266
+ end
267
+ end
268
+ end
269
+ end