nsm-activeadmin 0.2.2

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 (321) hide show
  1. data/.document +5 -0
  2. data/.gitignore +34 -0
  3. data/.travis.yml +4 -0
  4. data/.yardopts +8 -0
  5. data/CHANGELOG.rdoc +76 -0
  6. data/Gemfile +39 -0
  7. data/LICENSE +25 -0
  8. data/README.rdoc +487 -0
  9. data/Rakefile +27 -0
  10. data/activeadmin.gemspec +28 -0
  11. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  12. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  13. data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
  14. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  15. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  16. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  17. data/app/assets/images/active_admin/loading.gif +0 -0
  18. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  19. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  20. data/app/assets/images/active_admin/orderable.png +0 -0
  21. data/app/assets/javascripts/active_admin/base.js +12 -0
  22. data/app/assets/javascripts/active_admin/vendor.js +382 -0
  23. data/app/assets/stylesheets/active_admin/_base.css.scss +400 -0
  24. data/app/assets/stylesheets/active_admin/_forms.css.scss +256 -0
  25. data/app/assets/stylesheets/active_admin/_header.css.scss +110 -0
  26. data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
  27. data/app/assets/stylesheets/active_admin/_typography.css.scss +100 -0
  28. data/app/assets/stylesheets/active_admin/components/_comments.css.scss +40 -0
  29. data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +123 -0
  30. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +38 -0
  31. data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +8 -0
  32. data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +27 -0
  33. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +29 -0
  34. data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +20 -0
  35. data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
  36. data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
  37. data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +34 -0
  38. data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +21 -0
  39. data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +21 -0
  40. data/app/views/active_admin/dashboard/index.html.arb +1 -0
  41. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  42. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  43. data/app/views/active_admin/devise/passwords/edit.html.erb +16 -0
  44. data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
  45. data/app/views/active_admin/devise/sessions/new.html.erb +18 -0
  46. data/app/views/active_admin/devise/shared/_links.erb +20 -0
  47. data/app/views/active_admin/devise/unlocks/new.html.erb +12 -0
  48. data/app/views/active_admin/resource/edit.html.arb +1 -0
  49. data/app/views/active_admin/resource/index.csv.erb +20 -0
  50. data/app/views/active_admin/resource/index.html.arb +1 -0
  51. data/app/views/active_admin/resource/new.html.arb +1 -0
  52. data/app/views/active_admin/resource/show.html.arb +1 -0
  53. data/app/views/layouts/active_admin.html.arb +1 -0
  54. data/app/views/layouts/active_admin_logged_out.html.erb +35 -0
  55. data/cucumber.yml +2 -0
  56. data/docs/1-general-configuration.md +52 -0
  57. data/docs/2-resource-customization.md +35 -0
  58. data/docs/3-index-pages.md +55 -0
  59. data/docs/3-index-pages/index-as-block.md +16 -0
  60. data/docs/3-index-pages/index-as-blog.md +61 -0
  61. data/docs/3-index-pages/index-as-grid.md +21 -0
  62. data/docs/3-index-pages/index-as-table.md +74 -0
  63. data/docs/4-csv-format.md +14 -0
  64. data/docs/5-forms.md +39 -0
  65. data/docs/6-show-screens.md +22 -0
  66. data/docs/7-sidebars.md +35 -0
  67. data/docs/8-custom-actions.md +123 -0
  68. data/features/comments/commenting.feature +112 -0
  69. data/features/comments/viewing_index.feature +19 -0
  70. data/features/dashboard.feature +26 -0
  71. data/features/edit_page.feature +106 -0
  72. data/features/first_boot.feature +16 -0
  73. data/features/global_navigation.feature +30 -0
  74. data/features/index/format_as_csv.feature +46 -0
  75. data/features/index/formats.feature +12 -0
  76. data/features/index/index_as_block.feature +15 -0
  77. data/features/index/index_as_blog.feature +50 -0
  78. data/features/index/index_as_grid.feature +45 -0
  79. data/features/index/index_as_table.feature +81 -0
  80. data/features/index/index_blank_slate.feature +55 -0
  81. data/features/index/index_scopes.feature +52 -0
  82. data/features/index/pagination.feature +17 -0
  83. data/features/menu.feature +26 -0
  84. data/features/new_page.feature +75 -0
  85. data/features/registering_assets.feature +35 -0
  86. data/features/registering_resources.feature +33 -0
  87. data/features/show/default_content.feature +43 -0
  88. data/features/show/page_title.feature +33 -0
  89. data/features/sidebar_sections.feature +127 -0
  90. data/features/specifying_actions.feature +87 -0
  91. data/features/step_definitions/action_item_steps.rb +7 -0
  92. data/features/step_definitions/additional_web_steps.rb +77 -0
  93. data/features/step_definitions/asset_steps.rb +7 -0
  94. data/features/step_definitions/attribute_steps.rb +13 -0
  95. data/features/step_definitions/comment_steps.rb +8 -0
  96. data/features/step_definitions/configuration_steps.rb +31 -0
  97. data/features/step_definitions/dashboard_steps.rb +11 -0
  98. data/features/step_definitions/factory_steps.rb +29 -0
  99. data/features/step_definitions/flash_steps.rb +3 -0
  100. data/features/step_definitions/format_steps.rb +35 -0
  101. data/features/step_definitions/index_scope_steps.rb +20 -0
  102. data/features/step_definitions/layout_steps.rb +3 -0
  103. data/features/step_definitions/menu_steps.rb +7 -0
  104. data/features/step_definitions/pagination_steps.rb +8 -0
  105. data/features/step_definitions/sidebar_steps.rb +7 -0
  106. data/features/step_definitions/tab_steps.rb +3 -0
  107. data/features/step_definitions/user_steps.rb +26 -0
  108. data/features/step_definitions/web_steps.rb +211 -0
  109. data/features/sti_resource.feature +61 -0
  110. data/features/support/env.rb +90 -0
  111. data/features/support/paths.rb +50 -0
  112. data/features/support/selectors.rb +45 -0
  113. data/features/users/logging_in.feature +34 -0
  114. data/features/users/logging_out.feature +13 -0
  115. data/lib/active_admin.rb +74 -0
  116. data/lib/active_admin/abstract_view_factory.rb +95 -0
  117. data/lib/active_admin/application.rb +228 -0
  118. data/lib/active_admin/arbre.rb +23 -0
  119. data/lib/active_admin/arbre/attributes.rb +20 -0
  120. data/lib/active_admin/arbre/class_list.rb +28 -0
  121. data/lib/active_admin/arbre/collection.rb +27 -0
  122. data/lib/active_admin/arbre/context.rb +14 -0
  123. data/lib/active_admin/arbre/core_extensions.rb +5 -0
  124. data/lib/active_admin/arbre/document.rb +42 -0
  125. data/lib/active_admin/arbre/element.rb +151 -0
  126. data/lib/active_admin/arbre/html.rb +84 -0
  127. data/lib/active_admin/arbre/html5_elements.rb +47 -0
  128. data/lib/active_admin/arbre/tag.rb +137 -0
  129. data/lib/active_admin/arbre/text_node.rb +35 -0
  130. data/lib/active_admin/asset_registration.rb +34 -0
  131. data/lib/active_admin/callbacks.rb +89 -0
  132. data/lib/active_admin/comments.rb +88 -0
  133. data/lib/active_admin/comments/comment.rb +21 -0
  134. data/lib/active_admin/comments/configuration.rb +18 -0
  135. data/lib/active_admin/comments/namespace_helper.rb +14 -0
  136. data/lib/active_admin/comments/resource_helper.rb +17 -0
  137. data/lib/active_admin/comments/show_page_helper.rb +23 -0
  138. data/lib/active_admin/comments/views.rb +3 -0
  139. data/lib/active_admin/comments/views/active_admin_comment.rb +0 -0
  140. data/lib/active_admin/comments/views/active_admin_comments.rb +82 -0
  141. data/lib/active_admin/component.rb +22 -0
  142. data/lib/active_admin/controller_action.rb +12 -0
  143. data/lib/active_admin/csv_builder.rb +45 -0
  144. data/lib/active_admin/dashboards.rb +48 -0
  145. data/lib/active_admin/dashboards/dashboard_controller.rb +38 -0
  146. data/lib/active_admin/dashboards/section.rb +34 -0
  147. data/lib/active_admin/deprecation.rb +36 -0
  148. data/lib/active_admin/devise.rb +43 -0
  149. data/lib/active_admin/dsl.rb +224 -0
  150. data/lib/active_admin/engine.rb +4 -0
  151. data/lib/active_admin/event.rb +31 -0
  152. data/lib/active_admin/form_builder.rb +109 -0
  153. data/lib/active_admin/helpers/optional_display.rb +34 -0
  154. data/lib/active_admin/helpers/settings.rb +63 -0
  155. data/lib/active_admin/iconic.rb +51 -0
  156. data/lib/active_admin/iconic/icons.rb +142 -0
  157. data/lib/active_admin/locales/da.yml +28 -0
  158. data/lib/active_admin/locales/en.yml +40 -0
  159. data/lib/active_admin/locales/es.yml +39 -0
  160. data/lib/active_admin/locales/it.yml +39 -0
  161. data/lib/active_admin/locales/pt-BR.yml +36 -0
  162. data/lib/active_admin/locales/ru.yml +40 -0
  163. data/lib/active_admin/locales/zh_cn.yml +40 -0
  164. data/lib/active_admin/menu.rb +42 -0
  165. data/lib/active_admin/menu_item.rb +73 -0
  166. data/lib/active_admin/namespace.rb +206 -0
  167. data/lib/active_admin/page_config.rb +15 -0
  168. data/lib/active_admin/reloader.rb +30 -0
  169. data/lib/active_admin/renderer.rb +87 -0
  170. data/lib/active_admin/resource.rb +151 -0
  171. data/lib/active_admin/resource/action_items.rb +88 -0
  172. data/lib/active_admin/resource/belongs_to.rb +31 -0
  173. data/lib/active_admin/resource/menu.rb +45 -0
  174. data/lib/active_admin/resource/naming.rb +36 -0
  175. data/lib/active_admin/resource/scopes.rb +33 -0
  176. data/lib/active_admin/resource/sidebars.rb +36 -0
  177. data/lib/active_admin/resource_controller.rb +103 -0
  178. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  179. data/lib/active_admin/resource_controller/actions.rb +79 -0
  180. data/lib/active_admin/resource_controller/callbacks.rb +47 -0
  181. data/lib/active_admin/resource_controller/collection.rb +144 -0
  182. data/lib/active_admin/resource_controller/filters.rb +58 -0
  183. data/lib/active_admin/resource_controller/form.rb +42 -0
  184. data/lib/active_admin/resource_controller/menu.rb +29 -0
  185. data/lib/active_admin/resource_controller/page_configurations.rb +53 -0
  186. data/lib/active_admin/resource_controller/scoping.rb +36 -0
  187. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  188. data/lib/active_admin/router.rb +85 -0
  189. data/lib/active_admin/sass/active_admin.scss +3 -0
  190. data/lib/active_admin/sass/css_loader.rb +16 -0
  191. data/lib/active_admin/sass/helpers.rb +40 -0
  192. data/lib/active_admin/scope.rb +17 -0
  193. data/lib/active_admin/sidebar_section.rb +41 -0
  194. data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
  195. data/lib/active_admin/version.rb +3 -0
  196. data/lib/active_admin/view_factory.rb +23 -0
  197. data/lib/active_admin/view_helpers.rb +22 -0
  198. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  199. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
  200. data/lib/active_admin/view_helpers/auto_link_helper.rb +42 -0
  201. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +29 -0
  202. data/lib/active_admin/view_helpers/display_helper.rb +38 -0
  203. data/lib/active_admin/view_helpers/filter_form_helper.rb +186 -0
  204. data/lib/active_admin/view_helpers/form_helper.rb +13 -0
  205. data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
  206. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +26 -0
  207. data/lib/active_admin/view_helpers/renderer_helper.rb +29 -0
  208. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  209. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  210. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  211. data/lib/active_admin/views.rb +8 -0
  212. data/lib/active_admin/views/action_items.rb +17 -0
  213. data/lib/active_admin/views/components/attributes_table.rb +66 -0
  214. data/lib/active_admin/views/components/blank_slate.rb +33 -0
  215. data/lib/active_admin/views/components/columns.rb +47 -0
  216. data/lib/active_admin/views/components/paginated_collection.rb +92 -0
  217. data/lib/active_admin/views/components/panel.rb +26 -0
  218. data/lib/active_admin/views/components/scopes.rb +70 -0
  219. data/lib/active_admin/views/components/sidebar_section.rb +28 -0
  220. data/lib/active_admin/views/components/status_tag.rb +55 -0
  221. data/lib/active_admin/views/components/table_for.rb +193 -0
  222. data/lib/active_admin/views/dashboard_section_renderer.rb +19 -0
  223. data/lib/active_admin/views/header_renderer.rb +53 -0
  224. data/lib/active_admin/views/index_as_block.rb +29 -0
  225. data/lib/active_admin/views/index_as_blog.rb +129 -0
  226. data/lib/active_admin/views/index_as_grid.rb +70 -0
  227. data/lib/active_admin/views/index_as_table.rb +148 -0
  228. data/lib/active_admin/views/pages/base.rb +155 -0
  229. data/lib/active_admin/views/pages/dashboard.rb +62 -0
  230. data/lib/active_admin/views/pages/edit.rb +28 -0
  231. data/lib/active_admin/views/pages/index.rb +74 -0
  232. data/lib/active_admin/views/pages/layout.rb +26 -0
  233. data/lib/active_admin/views/pages/new.rb +28 -0
  234. data/lib/active_admin/views/pages/show.rb +56 -0
  235. data/lib/active_admin/views/tabs_renderer.rb +58 -0
  236. data/lib/activeadmin.rb +1 -0
  237. data/lib/generators/active_admin/assets/assets_generator.rb +21 -0
  238. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +427 -0
  239. data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +6 -0
  240. data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +1 -0
  241. data/lib/generators/active_admin/assets/templates/dashboards.rb +36 -0
  242. data/lib/generators/active_admin/devise/devise_generator.rb +49 -0
  243. data/lib/generators/active_admin/install/install_generator.rb +44 -0
  244. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +93 -0
  245. data/lib/generators/active_admin/install/templates/dashboards.rb +38 -0
  246. data/lib/generators/active_admin/install/templates/migrations/1_create_admin_notes.rb +16 -0
  247. data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +25 -0
  248. data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
  249. data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
  250. data/script/local +44 -0
  251. data/script/use_rails +45 -0
  252. data/spec/integration/belongs_to_spec.rb +42 -0
  253. data/spec/integration/default_namespace.rb +77 -0
  254. data/spec/integration/javascript_spec.rb +20 -0
  255. data/spec/integration/stylesheets_spec.rb +41 -0
  256. data/spec/spec_helper.rb +157 -0
  257. data/spec/support/detect_rails_version.rb +11 -0
  258. data/spec/support/integration_example_group.rb +33 -0
  259. data/spec/support/jslint.yml +80 -0
  260. data/spec/support/rails_template.rb +32 -0
  261. data/spec/support/rails_template_with_data.rb +33 -0
  262. data/spec/support/templates/cucumber.rb +24 -0
  263. data/spec/unit/abstract_view_factory_spec.rb +79 -0
  264. data/spec/unit/action_builder_spec.rb +88 -0
  265. data/spec/unit/application_spec.rb +78 -0
  266. data/spec/unit/arbre/html/context_spec.rb +22 -0
  267. data/spec/unit/arbre/html/element_finder_methods_spec.rb +54 -0
  268. data/spec/unit/arbre/html/element_spec.rb +224 -0
  269. data/spec/unit/arbre/html/tag_attributes_spec.rb +61 -0
  270. data/spec/unit/arbre/html/tag_spec.rb +63 -0
  271. data/spec/unit/arbre/html_spec.rb +210 -0
  272. data/spec/unit/asset_registration_spec.rb +37 -0
  273. data/spec/unit/auto_link_spec.rb +39 -0
  274. data/spec/unit/belongs_to_spec.rb +45 -0
  275. data/spec/unit/breadcrumbs_spec.rb +110 -0
  276. data/spec/unit/comments_spec.rb +57 -0
  277. data/spec/unit/component_spec.rb +18 -0
  278. data/spec/unit/controller_filters_spec.rb +34 -0
  279. data/spec/unit/csv_builder_spec.rb +83 -0
  280. data/spec/unit/dashboard_controller_spec.rb +26 -0
  281. data/spec/unit/dashboard_section_spec.rb +56 -0
  282. data/spec/unit/dashboards_spec.rb +59 -0
  283. data/spec/unit/display_name_spec.rb +29 -0
  284. data/spec/unit/event_spec.rb +41 -0
  285. data/spec/unit/filter_form_builder_spec.rb +182 -0
  286. data/spec/unit/form_builder_spec.rb +239 -0
  287. data/spec/unit/generators/install_rails_3_1_spec.rb +16 -0
  288. data/spec/unit/helpers/settings_spec.rb +30 -0
  289. data/spec/unit/menu_item_spec.rb +143 -0
  290. data/spec/unit/menu_spec.rb +53 -0
  291. data/spec/unit/namespace_spec.rb +214 -0
  292. data/spec/unit/pretty_format_spec.rb +35 -0
  293. data/spec/unit/rails_spec.rb +43 -0
  294. data/spec/unit/registration_spec.rb +76 -0
  295. data/spec/unit/reloader_spec.rb +28 -0
  296. data/spec/unit/renderer_spec.rb +108 -0
  297. data/spec/unit/resource/action_items_spec.rb +62 -0
  298. data/spec/unit/resource/menu_spec.rb +80 -0
  299. data/spec/unit/resource/naming_spec.rb +56 -0
  300. data/spec/unit/resource/scopes_spec.rb +30 -0
  301. data/spec/unit/resource/sidebars_spec.rb +50 -0
  302. data/spec/unit/resource_controller/collection_spec.rb +34 -0
  303. data/spec/unit/resource_controller_spec.rb +152 -0
  304. data/spec/unit/resource_spec.rb +260 -0
  305. data/spec/unit/routing_spec.rb +88 -0
  306. data/spec/unit/sass/helpers_spec.rb +47 -0
  307. data/spec/unit/scope_spec.rb +31 -0
  308. data/spec/unit/tabs_renderer_spec.rb +85 -0
  309. data/spec/unit/view_factory_spec.rb +19 -0
  310. data/spec/unit/views/components/attributes_table_spec.rb +100 -0
  311. data/spec/unit/views/components/blank_slate_spec.rb +31 -0
  312. data/spec/unit/views/components/columns_spec.rb +75 -0
  313. data/spec/unit/views/components/panel_spec.rb +31 -0
  314. data/spec/unit/views/components/sidebar_section_spec.rb +37 -0
  315. data/spec/unit/views/components/status_tag_spec.rb +81 -0
  316. data/spec/unit/views/components/table_for_spec.rb +130 -0
  317. data/spec/unit/views/pages/layout_spec.rb +22 -0
  318. data/tasks/docs.rake +39 -0
  319. data/tasks/test.rake +49 -0
  320. data/tasks/yard.rake +6 -0
  321. metadata +510 -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,90 @@
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
+ require 'rubygems'
13
+ require "bundler"
14
+ Bundler.setup
15
+
16
+ ENV["RAILS_ENV"] ||= "cucumber"
17
+ ENV['RAILS_ROOT'] = File.expand_path("../../../spec/rails/rails-#{ENV["RAILS"]}", __FILE__)
18
+
19
+ # Create the test app if it doesn't exists
20
+ unless File.exists?(ENV['RAILS_ROOT'])
21
+ system 'rake setup'
22
+ end
23
+
24
+ require ENV['RAILS_ROOT'] + '/config/environment'
25
+
26
+ # Setup autoloading of ActiveAdmin and the load path
27
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
28
+ autoload :ActiveAdmin, 'active_admin'
29
+
30
+ require 'cucumber/rails'
31
+
32
+ require 'capybara/rails'
33
+ require 'capybara/cucumber'
34
+ require 'capybara/session'
35
+ # Capybara defaults to XPath selectors rather than Webrat's default of CSS3. In
36
+ # order to ease the transition to Capybara we set the default here. If you'd
37
+ # prefer to use XPath just remove this line and adjust any selectors in your
38
+ # steps to use the XPath syntax.
39
+ Capybara.default_selector = :css
40
+
41
+ # If you set this to false, any error raised from within your app will bubble
42
+ # up to your step definition and out to cucumber unless you catch it somewhere
43
+ # on the way. You can make Rails rescue errors and render error pages on a
44
+ # per-scenario basis by tagging a scenario or feature with the @allow-rescue tag.
45
+ #
46
+ # If you set this to true, Rails will rescue all errors and render error
47
+ # pages, more or less in the same way your application would behave in the
48
+ # default production environment. It's not recommended to do this for all
49
+ # of your scenarios, as this makes it hard to discover errors in your application.
50
+ ActionController::Base.allow_rescue = false
51
+
52
+ # If you set this to true, each scenario will run in a database transaction.
53
+ # You can still turn off transactions on a per-scenario basis, simply tagging
54
+ # a feature or scenario with the @no-txn tag. If you are using Capybara,
55
+ # tagging with @culerity or @javascript will also turn transactions off.
56
+ #
57
+ # If you set this to false, transactions will be off for all scenarios,
58
+ # regardless of whether you use @no-txn or not.
59
+ #
60
+ # Beware that turning transactions off will leave data in your database
61
+ # after each scenario, which can lead to hard-to-debug failures in
62
+ # subsequent scenarios. If you do this, we recommend you create a Before
63
+ # block that will explicitly put your database in a known state.
64
+ Cucumber::Rails::World.use_transactional_fixtures = false
65
+ # How to clean your database when transactions are turned off. See
66
+ # http://github.com/bmabey/database_cleaner for more info.
67
+ if defined?(ActiveRecord::Base)
68
+ begin
69
+ require 'database_cleaner'
70
+ require 'database_cleaner/cucumber'
71
+ DatabaseCleaner.strategy = :truncation
72
+ rescue LoadError => ignore_if_database_cleaner_not_present
73
+ end
74
+ end
75
+
76
+ # Create the test app if it doesn't exists
77
+ unless File.exists?(ENV['RAILS_ROOT'])
78
+ system 'rake setup'
79
+ end
80
+
81
+ # Remove all our constants
82
+ Before do
83
+ # We are cachine classes, but need to manually clear references to
84
+ # the controllers. If they aren't clear, the router stores references
85
+ ActiveSupport::Dependencies.clear
86
+
87
+ # Reload Active Admin
88
+ ActiveAdmin.unload!
89
+ ActiveAdmin.load!
90
+ 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,74 @@
1
+ require 'meta_search'
2
+ require 'devise'
3
+ require 'kaminari'
4
+ require 'sass'
5
+ require 'active_admin/arbre'
6
+ require 'active_admin/engine'
7
+ require 'rails/version'
8
+
9
+ module ActiveAdmin
10
+
11
+ autoload :VERSION, 'active_admin/version'
12
+ autoload :Application, 'active_admin/application'
13
+ autoload :AssetRegistration, 'active_admin/asset_registration'
14
+ autoload :Breadcrumbs, 'active_admin/breadcrumbs'
15
+ autoload :Callbacks, 'active_admin/callbacks'
16
+ autoload :Component, 'active_admin/component'
17
+ autoload :ControllerAction, 'active_admin/controller_action'
18
+ autoload :CSVBuilder, 'active_admin/csv_builder'
19
+ autoload :Dashboards, 'active_admin/dashboards'
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 :SidebarSection, 'active_admin/sidebar_section'
36
+ autoload :TableBuilder, 'active_admin/table_builder'
37
+ autoload :ViewFactory, 'active_admin/view_factory'
38
+ autoload :ViewHelpers, 'active_admin/view_helpers'
39
+ autoload :Views, 'active_admin/views'
40
+
41
+ class Railtie < ::Rails::Railtie
42
+ # Add load paths straight to I18n, so engines and application can overwrite it.
43
+ require 'active_support/i18n'
44
+ I18n.load_path += Dir[File.expand_path('../active_admin/locales/*.yml', __FILE__)]
45
+ end
46
+
47
+ # The instance of the configured application
48
+ @@application = ::ActiveAdmin::Application.new
49
+ mattr_accessor :application
50
+
51
+ class << self
52
+
53
+ # Gets called within the initializer
54
+ def setup
55
+ yield(application)
56
+ application.prepare!
57
+ end
58
+
59
+ delegate :register, :to => :application
60
+ delegate :unload!, :to => :application
61
+ delegate :load!, :to => :application
62
+ delegate :routes, :to => :application
63
+
64
+ # Returns true if this rails application has the asset
65
+ # pipeline enabled.
66
+ def use_asset_pipeline?
67
+ return false unless Rails::VERSION::MINOR > 0
68
+ Rails.application.config.assets.enabled
69
+ end
70
+
71
+ end
72
+ end
73
+
74
+ 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