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,61 @@
1
+ Feature: STI Resource
2
+
3
+ Ensure that standard CRUD works with STI models
4
+
5
+ Background:
6
+ Given I am logged in
7
+ And a configuration of:
8
+ """
9
+ ActiveAdmin.register Publisher
10
+ ActiveAdmin.register User
11
+ """
12
+
13
+ Scenario: Create, update and delete a child STI resource
14
+ Given I am on the index page for publishers
15
+ When I follow "New Publisher"
16
+ And I fill in "First name" with "Terry"
17
+ And I fill in "Last name" with "Fox"
18
+ And I fill in "Username" with "terry_fox"
19
+ And I press "Create Publisher"
20
+ Then I should see "Publisher was successfully created"
21
+ And I should see "Terry"
22
+
23
+ When I follow "Edit Publisher"
24
+ And I fill in "First name" with "Joe"
25
+ And I press "Update Publisher"
26
+ Then I should see "Publisher was successfully updated"
27
+ And I should see "Joe"
28
+
29
+ When I follow "Delete Publisher"
30
+ Then I should see "Publisher was successfully destroyed"
31
+
32
+ Scenario: Create, update and delete a parent STI resource
33
+ Given I am on the index page for users
34
+ When I follow "New User"
35
+ And I fill in "First name" with "Terry"
36
+ And I fill in "Last name" with "Fox"
37
+ And I fill in "Username" with "terry_fox"
38
+ And I press "Create User"
39
+ Then I should see "User was successfully created"
40
+ And I should see "Terry"
41
+
42
+ When I follow "Edit User"
43
+ And I fill in "First name" with "Joe"
44
+ And I press "Update User"
45
+ Then I should see "User was successfully updated"
46
+ And I should see "Joe"
47
+
48
+ When I follow "Delete User"
49
+ Then I should see "User was successfully destroyed"
50
+
51
+ Scenario: Update and delete a child STI when the parent is registered
52
+ Given a publisher named "Terry Fox" exists
53
+ And I am on the index page for users
54
+ When I follow "Edit"
55
+ And I fill in "First name" with "Joe"
56
+ And I press "Update Publisher"
57
+ Then I should see "Publisher was successfully updated"
58
+ And I should see "Joe"
59
+
60
+ When I follow "Delete User"
61
+ Then I should see "Publisher was successfully destroyed"
@@ -0,0 +1,96 @@
1
+ # IMPORTANT: This file is generated by cucumber-rails - edit at your own peril.
2
+ # It is recommended to regenerate this file in the future when you upgrade to a
3
+ # newer version of cucumber-rails. Consider adding your own code to a new file
4
+ # instead of editing this one. Cucumber will automatically load all features/**/*.rb
5
+ # files.
6
+
7
+ ENV['BUNDLE_GEMFILE'] = File.expand_path('../../../Gemfile', __FILE__)
8
+
9
+ require File.expand_path('../../../spec/support/detect_rails_version', __FILE__)
10
+ ENV["RAILS"] = detect_rails_version
11
+
12
+ ENV["RAILS_ENV"] ||= "cucumber"
13
+ ENV['RAILS_ROOT'] = File.expand_path("../../../spec/rails/rails-#{ENV["RAILS"]}", __FILE__)
14
+
15
+
16
+ require 'rubygems'
17
+ require "bundler"
18
+ Bundler.setup
19
+
20
+ # Create the test app if it doesn't exists
21
+ unless File.exists?(ENV['RAILS_ROOT'])
22
+ system 'rake setup'
23
+ end
24
+
25
+ # Ensure the Active Admin load path is happy
26
+ require 'rails'
27
+ require 'active_admin'
28
+ ActiveAdmin.application.load_paths = [ENV['RAILS_ROOT'] + "/app/admin"]
29
+
30
+ require ENV['RAILS_ROOT'] + '/config/environment'
31
+
32
+ # Setup autoloading of ActiveAdmin and the load path
33
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
34
+ autoload :ActiveAdmin, 'active_admin'
35
+
36
+ require 'cucumber/rails'
37
+
38
+ require 'capybara/rails'
39
+ require 'capybara/cucumber'
40
+ require 'capybara/session'
41
+ # Capybara defaults to XPath selectors rather than Webrat's default of CSS3. In
42
+ # order to ease the transition to Capybara we set the default here. If you'd
43
+ # prefer to use XPath just remove this line and adjust any selectors in your
44
+ # steps to use the XPath syntax.
45
+ Capybara.default_selector = :css
46
+
47
+ # If you set this to false, any error raised from within your app will bubble
48
+ # up to your step definition and out to cucumber unless you catch it somewhere
49
+ # on the way. You can make Rails rescue errors and render error pages on a
50
+ # per-scenario basis by tagging a scenario or feature with the @allow-rescue tag.
51
+ #
52
+ # If you set this to true, Rails will rescue all errors and render error
53
+ # pages, more or less in the same way your application would behave in the
54
+ # default production environment. It's not recommended to do this for all
55
+ # of your scenarios, as this makes it hard to discover errors in your application.
56
+ ActionController::Base.allow_rescue = false
57
+
58
+ # If you set this to true, each scenario will run in a database transaction.
59
+ # You can still turn off transactions on a per-scenario basis, simply tagging
60
+ # a feature or scenario with the @no-txn tag. If you are using Capybara,
61
+ # tagging with @culerity or @javascript will also turn transactions off.
62
+ #
63
+ # If you set this to false, transactions will be off for all scenarios,
64
+ # regardless of whether you use @no-txn or not.
65
+ #
66
+ # Beware that turning transactions off will leave data in your database
67
+ # after each scenario, which can lead to hard-to-debug failures in
68
+ # subsequent scenarios. If you do this, we recommend you create a Before
69
+ # block that will explicitly put your database in a known state.
70
+ Cucumber::Rails::World.use_transactional_fixtures = false
71
+ # How to clean your database when transactions are turned off. See
72
+ # http://github.com/bmabey/database_cleaner for more info.
73
+ if defined?(ActiveRecord::Base)
74
+ begin
75
+ require 'database_cleaner'
76
+ require 'database_cleaner/cucumber'
77
+ DatabaseCleaner.strategy = :truncation
78
+ rescue LoadError => ignore_if_database_cleaner_not_present
79
+ end
80
+ end
81
+
82
+ # Create the test app if it doesn't exists
83
+ unless File.exists?(ENV['RAILS_ROOT'])
84
+ system 'rake setup'
85
+ end
86
+
87
+ # Remove all our constants
88
+ Before do
89
+ # We are cachine classes, but need to manually clear references to
90
+ # the controllers. If they aren't clear, the router stores references
91
+ ActiveSupport::Dependencies.clear
92
+
93
+ # Reload Active Admin
94
+ ActiveAdmin.unload!
95
+ ActiveAdmin.load!
96
+ end
@@ -0,0 +1,50 @@
1
+ module NavigationHelpers
2
+ # Maps a name to a path. Used by the
3
+ #
4
+ # When /^I go to (.+)$/ do |page_name|
5
+ #
6
+ # step definition in web_steps.rb
7
+ #
8
+ def path_to(page_name)
9
+ case page_name
10
+
11
+ when /the home\s?page/
12
+ '/'
13
+ when /the dashboard/
14
+ "/admin"
15
+ when /the new post page/
16
+ "/admin/posts/new"
17
+
18
+ # the index page for posts in the root namespace
19
+ # the index page for posts in the user_admin namespace
20
+ when /^the index page for (.*) in the (.*) namespace$/
21
+ if $2 != 'root'
22
+ send(:"#{$2}_#{$1}_path")
23
+ else
24
+ send(:"#{$1}_path")
25
+ end
26
+
27
+ # same as above, except defaults to admin namespace
28
+ when /^the index page for (.*)$/
29
+ send(:"admin_#{$1}_path")
30
+
31
+ # Add more mappings here.
32
+ # Here is an example that pulls values out of the Regexp:
33
+ #
34
+ # when /^(.*)'s profile page$/i
35
+ # user_profile_path(User.find_by_login($1))
36
+
37
+ else
38
+ begin
39
+ page_name =~ /the (.*) page/
40
+ path_components = $1.split(/\s+/)
41
+ self.send(path_components.push('path').join('_').to_sym)
42
+ rescue Object => e
43
+ raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
44
+ "Now, go and add a mapping in #{__FILE__}"
45
+ end
46
+ end
47
+ end
48
+ end
49
+
50
+ World(NavigationHelpers)
@@ -0,0 +1,45 @@
1
+ module HtmlSelectorsHelpers
2
+ # Maps a name to a selector. Used primarily by the
3
+ #
4
+ # When /^(.+) within (.+)$/ do |step, scope|
5
+ #
6
+ # step definitions in web_steps.rb
7
+ #
8
+ def selector_for(locator)
9
+ case locator
10
+
11
+ when "the page"
12
+ "html > body"
13
+
14
+ # Add more mappings here.
15
+ # Here is an example that pulls values out of the Regexp:
16
+ #
17
+ # when /^the (notice|error|info) flash$/
18
+ # ".flash.#{$1}"
19
+
20
+ # You can also return an array to use a different selector
21
+ # type, like:
22
+ #
23
+ # when /the header/
24
+ # [:xpath, "//header"]
25
+
26
+ when "index grid"
27
+ [:css, "table.index_grid"]
28
+
29
+ when /^the "([^"]*)" sidebar$/
30
+ [:css, "##{$1.gsub(" ", '').underscore}_sidebar_section"]
31
+
32
+ # This allows you to provide a quoted selector as the scope
33
+ # for "within" steps as was previously the default for the
34
+ # web steps:
35
+ when /^"(.+)"$/
36
+ $1
37
+
38
+ else
39
+ raise "Can't find mapping from \"#{locator}\" to a selector.\n" +
40
+ "Now, go and add a mapping in #{__FILE__}"
41
+ end
42
+ end
43
+ end
44
+
45
+ World(HtmlSelectorsHelpers)
@@ -0,0 +1,34 @@
1
+ Feature: User Logging In
2
+
3
+ Logging in to the system as an admin user
4
+
5
+ Background:
6
+ Given a configuration of:
7
+ """
8
+ ActiveAdmin.register Post
9
+ """
10
+ And I am logged out
11
+ And an admin user "admin@example.com" exists
12
+ When I go to the dashboard
13
+
14
+ Scenario: Logging in Successfully
15
+ When I fill in "Email" with "admin@example.com"
16
+ And I fill in "Password" with "password"
17
+ And I press "Login"
18
+ Then I should be on the the dashboard
19
+ And I should see "Logout"
20
+ And I should see "admin@example.com"
21
+
22
+ Scenario: Attempting to log in with an incorrent email address
23
+ When I fill in "Email" with "not-an-admin@example.com"
24
+ And I fill in "Password" with "not-my-password"
25
+ And I press "Login"
26
+ Then I should see "Login"
27
+ And I should see "Invalid email or password."
28
+
29
+ Scenario: Attempting to log in with an incorrect password
30
+ When I fill in "Email" with "admin@example.com"
31
+ And I fill in "Password" with "not-my-password"
32
+ And I press "Login"
33
+ Then I should see "Login"
34
+ And I should see "Invalid email or password."
@@ -0,0 +1,13 @@
1
+ Feature: User Logging out
2
+
3
+ Logging out of the system as an admin user
4
+
5
+ Scenario: Logging out successfully
6
+ Given a configuration of:
7
+ """
8
+ ActiveAdmin.register Post
9
+ """
10
+ And I am logged in
11
+ When I go to the dashboard
12
+ And I follow "Logout"
13
+ Then I should see "Login"
@@ -0,0 +1,82 @@
1
+ require 'meta_search'
2
+ require 'devise'
3
+ require 'kaminari'
4
+ require 'sass'
5
+ require 'active_admin/arbre'
6
+ require 'active_admin/engine'
7
+
8
+ module ActiveAdmin
9
+
10
+ autoload :VERSION, 'active_admin/version'
11
+ autoload :Application, 'active_admin/application'
12
+ autoload :AssetRegistration, 'active_admin/asset_registration'
13
+ autoload :Breadcrumbs, 'active_admin/breadcrumbs'
14
+ autoload :Callbacks, 'active_admin/callbacks'
15
+ autoload :Component, 'active_admin/component'
16
+ autoload :ControllerAction, 'active_admin/controller_action'
17
+ autoload :CSVBuilder, 'active_admin/csv_builder'
18
+ autoload :Dashboards, 'active_admin/dashboards'
19
+ autoload :DependencyChecker, 'active_admin/dependency_checker'
20
+ autoload :Deprecation, 'active_admin/deprecation'
21
+ autoload :Devise, 'active_admin/devise'
22
+ autoload :DSL, 'active_admin/dsl'
23
+ autoload :Event, 'active_admin/event'
24
+ autoload :FormBuilder, 'active_admin/form_builder'
25
+ autoload :Iconic, 'active_admin/iconic'
26
+ autoload :Menu, 'active_admin/menu'
27
+ autoload :MenuItem, 'active_admin/menu_item'
28
+ autoload :Namespace, 'active_admin/namespace'
29
+ autoload :PageConfig, 'active_admin/page_config'
30
+ autoload :Reloader, 'active_admin/reloader'
31
+ autoload :Resource, 'active_admin/resource'
32
+ autoload :ResourceController, 'active_admin/resource_controller'
33
+ autoload :Renderer, 'active_admin/renderer'
34
+ autoload :Scope, 'active_admin/scope'
35
+ autoload :ScopeChain, 'active_admin/helpers/scope_chain'
36
+ autoload :SidebarSection, 'active_admin/sidebar_section'
37
+ autoload :TableBuilder, 'active_admin/table_builder'
38
+ autoload :ViewFactory, 'active_admin/view_factory'
39
+ autoload :ViewHelpers, 'active_admin/view_helpers'
40
+ autoload :Views, 'active_admin/views'
41
+
42
+ class Railtie < ::Rails::Railtie
43
+ # Add load paths straight to I18n, so engines and application can overwrite it.
44
+ require 'active_support/i18n'
45
+ I18n.load_path += Dir[File.expand_path('../active_admin/locales/*.yml', __FILE__)]
46
+ end
47
+
48
+ # The instance of the configured application
49
+ @@application = ::ActiveAdmin::Application.new
50
+ mattr_accessor :application
51
+
52
+ class << self
53
+
54
+ # Gets called within the initializer
55
+ def setup
56
+ yield(application)
57
+ application.prepare!
58
+ end
59
+
60
+ delegate :register, :to => :application
61
+ delegate :unload!, :to => :application
62
+ delegate :load!, :to => :application
63
+ delegate :routes, :to => :application
64
+
65
+ # Returns true if this rails application has the asset
66
+ # pipeline enabled.
67
+ def use_asset_pipeline?
68
+ DependencyChecker.rails_3_1? && Rails.application.config.assets.enabled
69
+ end
70
+
71
+ # Migration MoveAdminNotesToComments generated with version 0.2.2 might reference
72
+ # to ActiveAdmin.default_namespace.
73
+ delegate :default_namespace, :to => :application
74
+ ActiveAdmin::Deprecation.deprecate self, :default_namespace,
75
+ "ActiveAdmin.default_namespace is deprecated. Please use ActiveAdmin.application.default_namespace"
76
+
77
+ end
78
+ end
79
+
80
+ ActiveAdmin::DependencyChecker.check!
81
+
82
+ require 'active_admin/comments'
@@ -0,0 +1,95 @@
1
+ module ActiveAdmin
2
+ class AbstractViewFactory
3
+ @@default_views = {}
4
+
5
+ def self.register(view_hash)
6
+ view_hash.each do |view_key, view_class|
7
+ @@default_views[view_key] = view_class
8
+ end
9
+ end
10
+
11
+ def initialize
12
+ @views = {}
13
+ end
14
+
15
+ # Register a new view key with the view factory
16
+ #
17
+ # eg:
18
+ #
19
+ # factory = AbstractViewFactory.new
20
+ # factory.register :my_view => SomeViewClass
21
+ #
22
+ # You can setup many at the same time:
23
+ #
24
+ # factory.register :my_view => SomeClass,
25
+ # :another_view => OtherViewClass
26
+ #
27
+ def register(view_hash)
28
+ view_hash.each do |view_key, view_class|
29
+ @views[view_key] = view_class
30
+ end
31
+ end
32
+
33
+ def default_for(key)
34
+ @@default_views[key.to_sym]
35
+ end
36
+
37
+ def has_key?(key)
38
+ @views.has_key?(key.to_sym) || @@default_views.has_key?(key.to_sym)
39
+ end
40
+
41
+ def [](key)
42
+ get_view_for_key(key)
43
+ end
44
+
45
+ def []=(key, value)
46
+ set_view_for_key(key, value)
47
+ end
48
+
49
+ # Override respond to to include keys
50
+ def respond_to?(method)
51
+ key = key_from_method_name(method)
52
+ if has_key?(key)
53
+ true
54
+ else
55
+ super
56
+ end
57
+ end
58
+
59
+ private
60
+
61
+ def method_missing(method, *args)
62
+ key = key_from_method_name(method)
63
+ if has_key?(key)
64
+ if method.to_s.include?('=')
65
+ self.class_eval <<-EOS
66
+ def #{key}=(value)
67
+ set_view_for_key(:#{key}, value)
68
+ end
69
+ EOS
70
+ else
71
+ self.class_eval <<-EOS
72
+ def #{key}
73
+ get_view_for_key(:#{key})
74
+ end
75
+ EOS
76
+ end
77
+ self.send(method, *args)
78
+ else
79
+ super
80
+ end
81
+ end
82
+
83
+ def key_from_method_name(method)
84
+ method.to_s.gsub('=', '').to_sym
85
+ end
86
+
87
+ def get_view_for_key(key)
88
+ @views[key.to_sym] || @@default_views[key.to_sym]
89
+ end
90
+
91
+ def set_view_for_key(key, view)
92
+ @views[key.to_sym] = view
93
+ end
94
+ end
95
+ end