activeadministration 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (522) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +47 -0
  3. data/.travis.yml +19 -0
  4. data/.yardopts +9 -0
  5. data/CHANGELOG.md +1074 -0
  6. data/CONTRIBUTING.md +139 -0
  7. data/Gemfile +52 -0
  8. data/Guardfile +7 -0
  9. data/LICENSE +25 -0
  10. data/README.md +8 -0
  11. data/Rakefile +33 -0
  12. data/activeadministration.gemspec +34 -0
  13. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  14. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  15. data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
  16. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  17. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  18. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  19. data/app/assets/images/active_admin/index_list_icons/block_icon.svg +10 -0
  20. data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +4 -0
  21. data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +13 -0
  22. data/app/assets/images/active_admin/index_list_icons/table_icon.svg +3 -0
  23. data/app/assets/images/active_admin/loading.gif +0 -0
  24. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  25. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  26. data/app/assets/images/active_admin/orderable.png +0 -0
  27. data/app/assets/javascripts/active_admin/application.js.coffee +30 -0
  28. data/app/assets/javascripts/active_admin/base.js.coffee +14 -0
  29. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
  30. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
  31. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +39 -0
  32. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +36 -0
  33. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +85 -0
  34. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +75 -0
  35. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +36 -0
  36. data/app/assets/javascripts/active_admin/lib/popover.js.coffee +68 -0
  37. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +24 -0
  38. data/app/assets/stylesheets/active_admin/_base.css.scss +42 -0
  39. data/app/assets/stylesheets/active_admin/_forms.css.scss +329 -0
  40. data/app/assets/stylesheets/active_admin/_header.css.scss +156 -0
  41. data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
  42. data/app/assets/stylesheets/active_admin/_typography.css.scss +100 -0
  43. data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +11 -0
  44. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +31 -0
  45. data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
  46. data/app/assets/stylesheets/active_admin/components/_buttons.scss +11 -0
  47. data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
  48. data/app/assets/stylesheets/active_admin/components/_comments.css.scss +41 -0
  49. data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +127 -0
  50. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +151 -0
  51. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +39 -0
  52. data/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
  53. data/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
  54. data/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
  55. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +31 -0
  56. data/app/assets/stylesheets/active_admin/components/_pagination.scss +34 -0
  57. data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
  58. data/app/assets/stylesheets/active_admin/components/_popovers.css.scss +123 -0
  59. data/app/assets/stylesheets/active_admin/components/_scopes.scss +10 -0
  60. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +16 -0
  61. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +65 -0
  62. data/app/assets/stylesheets/active_admin/components/_tables.css.scss +111 -0
  63. data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +11 -0
  64. data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +66 -0
  65. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +38 -0
  66. data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +20 -0
  67. data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
  68. data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
  69. data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +36 -0
  70. data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +22 -0
  71. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
  72. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +26 -0
  73. data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +34 -0
  74. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
  75. data/app/assets/stylesheets/active_admin/print.css.scss +284 -0
  76. data/app/assets/stylesheets/active_admin/structure/_footer.scss +14 -0
  77. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +29 -0
  78. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +46 -0
  79. data/app/views/active_admin/dashboard/index.html.arb +1 -0
  80. data/app/views/active_admin/devise/confirmations/new.html.erb +14 -0
  81. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  82. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  83. data/app/views/active_admin/devise/passwords/edit.html.erb +19 -0
  84. data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
  85. data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
  86. data/app/views/active_admin/devise/sessions/new.html.erb +20 -0
  87. data/app/views/active_admin/devise/shared/_links.erb +27 -0
  88. data/app/views/active_admin/devise/unlocks/new.html.erb +14 -0
  89. data/app/views/active_admin/page/index.html.arb +1 -0
  90. data/app/views/active_admin/resource/edit.html.arb +1 -0
  91. data/app/views/active_admin/resource/index.csv.erb +17 -0
  92. data/app/views/active_admin/resource/index.html.arb +1 -0
  93. data/app/views/active_admin/resource/new.html.arb +1 -0
  94. data/app/views/active_admin/resource/show.html.arb +1 -0
  95. data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
  96. data/app/views/kaminari/active_admin/_gap.html.erb +8 -0
  97. data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
  98. data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
  99. data/app/views/kaminari/active_admin/_page.html.erb +12 -0
  100. data/app/views/kaminari/active_admin/_paginator.html.erb +23 -0
  101. data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
  102. data/app/views/layouts/active_admin.html.arb +1 -0
  103. data/app/views/layouts/active_admin_logged_out.html.erb +37 -0
  104. data/config/locales/bg.yml +102 -0
  105. data/config/locales/bs.yml +121 -0
  106. data/config/locales/ca.yml +102 -0
  107. data/config/locales/cs.yml +106 -0
  108. data/config/locales/da.yml +103 -0
  109. data/config/locales/de-CH.yml +118 -0
  110. data/config/locales/de.yml +143 -0
  111. data/config/locales/el.yml +111 -0
  112. data/config/locales/en-GB.yml +95 -0
  113. data/config/locales/en.yml +117 -0
  114. data/config/locales/es.yml +127 -0
  115. data/config/locales/es_MX.yml +110 -0
  116. data/config/locales/fi.yml +110 -0
  117. data/config/locales/fr.yml +109 -0
  118. data/config/locales/he.yml +92 -0
  119. data/config/locales/hr.yml +121 -0
  120. data/config/locales/hu.yml +96 -0
  121. data/config/locales/it.yml +114 -0
  122. data/config/locales/ja.yml +114 -0
  123. data/config/locales/ko.yml +85 -0
  124. data/config/locales/lt.yml +118 -0
  125. data/config/locales/lv.yml +90 -0
  126. data/config/locales/nl.yml +94 -0
  127. data/config/locales/no-NB.yml +111 -0
  128. data/config/locales/pl.yml +100 -0
  129. data/config/locales/pt-BR.yml +117 -0
  130. data/config/locales/pt-PT.yml +90 -0
  131. data/config/locales/ro.yml +94 -0
  132. data/config/locales/ru.yml +121 -0
  133. data/config/locales/sv-SE.yml +90 -0
  134. data/config/locales/tr.yml +94 -0
  135. data/config/locales/uk.yml +121 -0
  136. data/config/locales/vi.yml +91 -0
  137. data/config/locales/zh-CN.yml +112 -0
  138. data/config/locales/zh-TW.yml +94 -0
  139. data/cucumber.yml +3 -0
  140. data/docs/0-installation.md +84 -0
  141. data/docs/1-general-configuration.md +138 -0
  142. data/docs/10-custom-pages.md +84 -0
  143. data/docs/11-decorators.md +50 -0
  144. data/docs/12-arbre-components.md +150 -0
  145. data/docs/13-authorization-adapter.md +239 -0
  146. data/docs/2-resource-customization.md +359 -0
  147. data/docs/3-index-pages.md +245 -0
  148. data/docs/3-index-pages/create-an-index.md +31 -0
  149. data/docs/3-index-pages/index-as-block.md +21 -0
  150. data/docs/3-index-pages/index-as-blog.md +71 -0
  151. data/docs/3-index-pages/index-as-grid.md +29 -0
  152. data/docs/3-index-pages/index-as-table.md +163 -0
  153. data/docs/4-csv-format.md +39 -0
  154. data/docs/5-forms.md +118 -0
  155. data/docs/6-show-pages.md +77 -0
  156. data/docs/7-sidebars.md +63 -0
  157. data/docs/8-custom-actions.md +159 -0
  158. data/docs/9-batch-actions.md +233 -0
  159. data/features/action_item.feature +73 -0
  160. data/features/authorization.feature +64 -0
  161. data/features/authorization_cancan.feature +52 -0
  162. data/features/authorization_pundit.feature +37 -0
  163. data/features/belongs_to.feature +66 -0
  164. data/features/breadcrumb.feature +75 -0
  165. data/features/comments/commenting.feature +159 -0
  166. data/features/comments/viewing_index.feature +19 -0
  167. data/features/dashboard.feature +16 -0
  168. data/features/decorators.feature +41 -0
  169. data/features/development_reloading.feature +31 -0
  170. data/features/edit_page.feature +114 -0
  171. data/features/favicon.feature +20 -0
  172. data/features/first_boot.feature +16 -0
  173. data/features/global_navigation.feature +29 -0
  174. data/features/i18n.feature +43 -0
  175. data/features/index/batch_actions.feature +123 -0
  176. data/features/index/filters.feature +138 -0
  177. data/features/index/format_as_csv.feature +117 -0
  178. data/features/index/formats.feature +66 -0
  179. data/features/index/index_as_block.feature +15 -0
  180. data/features/index/index_as_blog.feature +69 -0
  181. data/features/index/index_as_grid.feature +45 -0
  182. data/features/index/index_as_table.feature +208 -0
  183. data/features/index/index_blank_slate.feature +83 -0
  184. data/features/index/index_parameters.feature +75 -0
  185. data/features/index/index_scope_to.feature +56 -0
  186. data/features/index/index_scopes.feature +251 -0
  187. data/features/index/page_title.feature +41 -0
  188. data/features/index/pagination.feature +59 -0
  189. data/features/index/switch_index_view.feature +73 -0
  190. data/features/menu.feature +53 -0
  191. data/features/new_page.feature +106 -0
  192. data/features/registering_assets.feature +35 -0
  193. data/features/registering_pages.feature +148 -0
  194. data/features/registering_resources.feature +33 -0
  195. data/features/root_to.feature +17 -0
  196. data/features/show/default_content.feature +43 -0
  197. data/features/show/page_title.feature +58 -0
  198. data/features/sidebar_sections.feature +210 -0
  199. data/features/site_title.feature +47 -0
  200. data/features/specifying_actions.feature +93 -0
  201. data/features/step_definitions/action_item_steps.rb +7 -0
  202. data/features/step_definitions/action_link_steps.rb +7 -0
  203. data/features/step_definitions/additional_web_steps.rb +82 -0
  204. data/features/step_definitions/asset_steps.rb +15 -0
  205. data/features/step_definitions/attribute_steps.rb +18 -0
  206. data/features/step_definitions/batch_action_steps.rb +55 -0
  207. data/features/step_definitions/breadcrumb_steps.rb +3 -0
  208. data/features/step_definitions/comment_steps.rb +12 -0
  209. data/features/step_definitions/configuration_steps.rb +100 -0
  210. data/features/step_definitions/dashboard_steps.rb +15 -0
  211. data/features/step_definitions/factory_steps.rb +34 -0
  212. data/features/step_definitions/filter_steps.rb +17 -0
  213. data/features/step_definitions/flash_steps.rb +11 -0
  214. data/features/step_definitions/format_steps.rb +45 -0
  215. data/features/step_definitions/i18n_steps.rb +3 -0
  216. data/features/step_definitions/index_scope_steps.rb +21 -0
  217. data/features/step_definitions/index_views_steps.rb +3 -0
  218. data/features/step_definitions/layout_steps.rb +3 -0
  219. data/features/step_definitions/member_link_steps.rb +7 -0
  220. data/features/step_definitions/menu_steps.rb +11 -0
  221. data/features/step_definitions/pagination_steps.rb +8 -0
  222. data/features/step_definitions/sidebar_steps.rb +12 -0
  223. data/features/step_definitions/site_title_steps.rb +15 -0
  224. data/features/step_definitions/symbol_leak_steps.rb +3 -0
  225. data/features/step_definitions/tab_steps.rb +3 -0
  226. data/features/step_definitions/table_steps.rb +119 -0
  227. data/features/step_definitions/user_steps.rb +41 -0
  228. data/features/step_definitions/web_steps.rb +86 -0
  229. data/features/sti_resource.feature +65 -0
  230. data/features/strong_parameters.feature +72 -0
  231. data/features/support/env.rb +119 -0
  232. data/features/support/paths.rb +71 -0
  233. data/features/support/selectors.rb +45 -0
  234. data/features/symbol_leak.feature +35 -0
  235. data/features/users/logging_in.feature +34 -0
  236. data/features/users/logging_out.feature +13 -0
  237. data/features/users/resetting_password.feature +34 -0
  238. data/lib/active_admin.rb +135 -0
  239. data/lib/active_admin/abstract_view_factory.rb +86 -0
  240. data/lib/active_admin/application.rb +250 -0
  241. data/lib/active_admin/asset_registration.rb +29 -0
  242. data/lib/active_admin/authorization_adapter.rb +132 -0
  243. data/lib/active_admin/base_controller.rb +78 -0
  244. data/lib/active_admin/base_controller/authorization.rb +151 -0
  245. data/lib/active_admin/base_controller/menu.rb +34 -0
  246. data/lib/active_admin/batch_actions.rb +17 -0
  247. data/lib/active_admin/batch_actions/controller.rb +29 -0
  248. data/lib/active_admin/batch_actions/resource_extension.rb +154 -0
  249. data/lib/active_admin/batch_actions/views/batch_action_form.rb +38 -0
  250. data/lib/active_admin/batch_actions/views/batch_action_popover.rb +28 -0
  251. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +57 -0
  252. data/lib/active_admin/batch_actions/views/selection_cells.rb +37 -0
  253. data/lib/active_admin/callbacks.rb +84 -0
  254. data/lib/active_admin/cancan_adapter.rb +40 -0
  255. data/lib/active_admin/component.rb +5 -0
  256. data/lib/active_admin/controller_action.rb +12 -0
  257. data/lib/active_admin/csv_builder.rb +70 -0
  258. data/lib/active_admin/dependencies.rb +38 -0
  259. data/lib/active_admin/deprecation.rb +35 -0
  260. data/lib/active_admin/devise.rb +80 -0
  261. data/lib/active_admin/dsl.rb +165 -0
  262. data/lib/active_admin/engine.rb +7 -0
  263. data/lib/active_admin/error.rb +22 -0
  264. data/lib/active_admin/event.rb +33 -0
  265. data/lib/active_admin/filters.rb +9 -0
  266. data/lib/active_admin/filters/dsl.rb +21 -0
  267. data/lib/active_admin/filters/forms.rb +87 -0
  268. data/lib/active_admin/filters/formtastic_addons.rb +73 -0
  269. data/lib/active_admin/filters/resource_extension.rb +135 -0
  270. data/lib/active_admin/form_builder.rb +185 -0
  271. data/lib/active_admin/helpers/collection.rb +23 -0
  272. data/lib/active_admin/helpers/i18n.rb +7 -0
  273. data/lib/active_admin/helpers/optional_display.rb +38 -0
  274. data/lib/active_admin/helpers/scope_chain.rb +23 -0
  275. data/lib/active_admin/helpers/settings.rb +106 -0
  276. data/lib/active_admin/iconic.rb +54 -0
  277. data/lib/active_admin/iconic/icons.rb +142 -0
  278. data/lib/active_admin/inputs.rb +15 -0
  279. data/lib/active_admin/inputs/datepicker_input.rb +20 -0
  280. data/lib/active_admin/inputs/filter_base.rb +40 -0
  281. data/lib/active_admin/inputs/filter_base/search_method_select.rb +73 -0
  282. data/lib/active_admin/inputs/filter_boolean_input.rb +32 -0
  283. data/lib/active_admin/inputs/filter_check_boxes_input.rb +48 -0
  284. data/lib/active_admin/inputs/filter_date_range_input.rb +34 -0
  285. data/lib/active_admin/inputs/filter_numeric_input.rb +10 -0
  286. data/lib/active_admin/inputs/filter_select_input.rb +53 -0
  287. data/lib/active_admin/inputs/filter_string_input.rb +24 -0
  288. data/lib/active_admin/menu.rb +107 -0
  289. data/lib/active_admin/menu_collection.rb +96 -0
  290. data/lib/active_admin/menu_item.rb +97 -0
  291. data/lib/active_admin/namespace.rb +231 -0
  292. data/lib/active_admin/order_clause.rb +26 -0
  293. data/lib/active_admin/orm/active_record.rb +3 -0
  294. data/lib/active_admin/orm/active_record/comments.rb +84 -0
  295. data/lib/active_admin/orm/active_record/comments/comment.rb +49 -0
  296. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +14 -0
  297. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +17 -0
  298. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +23 -0
  299. data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
  300. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +75 -0
  301. data/lib/active_admin/orm/mongoid.rb +1 -0
  302. data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
  303. data/lib/active_admin/page.rb +88 -0
  304. data/lib/active_admin/page_controller.rb +29 -0
  305. data/lib/active_admin/page_dsl.rb +28 -0
  306. data/lib/active_admin/page_presenter.rb +32 -0
  307. data/lib/active_admin/pundit_adapter.rb +42 -0
  308. data/lib/active_admin/resource.rb +156 -0
  309. data/lib/active_admin/resource/action_items.rb +91 -0
  310. data/lib/active_admin/resource/belongs_to.rb +36 -0
  311. data/lib/active_admin/resource/controllers.rb +18 -0
  312. data/lib/active_admin/resource/menu.rb +64 -0
  313. data/lib/active_admin/resource/naming.rb +84 -0
  314. data/lib/active_admin/resource/page_presenters.rb +82 -0
  315. data/lib/active_admin/resource/pagination.rb +19 -0
  316. data/lib/active_admin/resource/routes.rb +99 -0
  317. data/lib/active_admin/resource/scope_to.rb +74 -0
  318. data/lib/active_admin/resource/scopes.rb +50 -0
  319. data/lib/active_admin/resource/sidebars.rb +28 -0
  320. data/lib/active_admin/resource_collection.rb +70 -0
  321. data/lib/active_admin/resource_controller.rb +50 -0
  322. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  323. data/lib/active_admin/resource_controller/data_access.rb +284 -0
  324. data/lib/active_admin/resource_controller/decorators.rb +100 -0
  325. data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
  326. data/lib/active_admin/resource_controller/scoping.rb +31 -0
  327. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  328. data/lib/active_admin/resource_dsl.rb +171 -0
  329. data/lib/active_admin/router.rb +106 -0
  330. data/lib/active_admin/scope.rb +57 -0
  331. data/lib/active_admin/sidebar_section.rb +45 -0
  332. data/lib/active_admin/version.rb +3 -0
  333. data/lib/active_admin/view_factory.rb +27 -0
  334. data/lib/active_admin/view_helpers.rb +21 -0
  335. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  336. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
  337. data/lib/active_admin/view_helpers/auto_link_helper.rb +37 -0
  338. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +27 -0
  339. data/lib/active_admin/view_helpers/display_helper.rb +64 -0
  340. data/lib/active_admin/view_helpers/download_format_links_helper.rb +49 -0
  341. data/lib/active_admin/view_helpers/fields_for.rb +50 -0
  342. data/lib/active_admin/view_helpers/flash_helper.rb +13 -0
  343. data/lib/active_admin/view_helpers/form_helper.rb +21 -0
  344. data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
  345. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +93 -0
  346. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  347. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  348. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  349. data/lib/active_admin/views.rb +8 -0
  350. data/lib/active_admin/views/action_items.rb +17 -0
  351. data/lib/active_admin/views/components/action_list_popover.rb +29 -0
  352. data/lib/active_admin/views/components/attributes_table.rb +105 -0
  353. data/lib/active_admin/views/components/blank_slate.rb +17 -0
  354. data/lib/active_admin/views/components/columns.rb +157 -0
  355. data/lib/active_admin/views/components/dropdown_menu.rb +73 -0
  356. data/lib/active_admin/views/components/index_list.rb +68 -0
  357. data/lib/active_admin/views/components/paginated_collection.rb +126 -0
  358. data/lib/active_admin/views/components/panel.rb +34 -0
  359. data/lib/active_admin/views/components/popover.rb +27 -0
  360. data/lib/active_admin/views/components/scopes.rb +66 -0
  361. data/lib/active_admin/views/components/sidebar_section.rb +29 -0
  362. data/lib/active_admin/views/components/site_title.rb +55 -0
  363. data/lib/active_admin/views/components/status_tag.rb +67 -0
  364. data/lib/active_admin/views/components/table_for.rb +212 -0
  365. data/lib/active_admin/views/footer.rb +20 -0
  366. data/lib/active_admin/views/header.rb +32 -0
  367. data/lib/active_admin/views/index_as_block.rb +36 -0
  368. data/lib/active_admin/views/index_as_blog.rb +156 -0
  369. data/lib/active_admin/views/index_as_grid.rb +80 -0
  370. data/lib/active_admin/views/index_as_table.rb +277 -0
  371. data/lib/active_admin/views/pages/base.rb +139 -0
  372. data/lib/active_admin/views/pages/form.rb +51 -0
  373. data/lib/active_admin/views/pages/index.rb +163 -0
  374. data/lib/active_admin/views/pages/layout.rb +26 -0
  375. data/lib/active_admin/views/pages/page.rb +30 -0
  376. data/lib/active_admin/views/pages/show.rb +59 -0
  377. data/lib/active_admin/views/tabbed_navigation.rb +62 -0
  378. data/lib/active_admin/views/title_bar.rb +55 -0
  379. data/lib/activeadmin.rb +1 -0
  380. data/lib/generators/active_admin/assets/assets_generator.rb +16 -0
  381. data/lib/generators/active_admin/assets/templates/active_admin.css.scss +17 -0
  382. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
  383. data/lib/generators/active_admin/devise/devise_generator.rb +66 -0
  384. data/lib/generators/active_admin/install/install_generator.rb +46 -0
  385. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +243 -0
  386. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +30 -0
  387. data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
  388. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +19 -0
  389. data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
  390. data/lib/generators/active_admin/resource/templates/admin.rb +17 -0
  391. data/lib/ransack_ext.rb +12 -0
  392. data/script/local +44 -0
  393. data/script/use_rails +53 -0
  394. data/spec/integration/default_namespace_spec.rb +61 -0
  395. data/spec/integration/javascript_spec.rb +20 -0
  396. data/spec/integration/memory_spec.rb +29 -0
  397. data/spec/integration/stylesheets_spec.rb +18 -0
  398. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
  399. data/spec/javascripts/coffeescripts/jquery.aa.popover-spec.js.coffee +82 -0
  400. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
  401. data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +60 -0
  402. data/spec/javascripts/compiled/jquery.aa.popover-spec.js +106 -0
  403. data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +37 -0
  404. data/spec/javascripts/fixtures/checkboxes.html +9 -0
  405. data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
  406. data/spec/javascripts/helpers/SpecHelper.js +3 -0
  407. data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +108 -0
  408. data/spec/javascripts/helpers/vendor/jasmine-jquery.js +288 -0
  409. data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +2915 -0
  410. data/spec/javascripts/support/jasmine.yml +74 -0
  411. data/spec/javascripts/support/jasmine_config.rb +23 -0
  412. data/spec/javascripts/support/jasmine_runner.rb +32 -0
  413. data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +34 -0
  414. data/spec/javascripts/support/jquery.min.js +4 -0
  415. data/spec/spec_helper.rb +182 -0
  416. data/spec/spec_helper_without_rails.rb +16 -0
  417. data/spec/support/deferred_garbage_collection.rb +19 -0
  418. data/spec/support/detect_rails_version.rb +42 -0
  419. data/spec/support/integration_example_group.rb +31 -0
  420. data/spec/support/jslint.yml +80 -0
  421. data/spec/support/rails_template.rb +117 -0
  422. data/spec/support/rails_template_with_data.rb +59 -0
  423. data/spec/support/templates/admin/stores.rb +11 -0
  424. data/spec/support/templates/cucumber.rb +24 -0
  425. data/spec/support/templates/cucumber_with_reloading.rb +5 -0
  426. data/spec/support/templates/en.yml +8 -0
  427. data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
  428. data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
  429. data/spec/support/templates/policies/admin_user_policy.rb +11 -0
  430. data/spec/support/templates/policies/application_policy.rb +45 -0
  431. data/spec/support/templates/policies/category_policy.rb +7 -0
  432. data/spec/support/templates/policies/post_policy.rb +15 -0
  433. data/spec/support/templates/policies/store_policy.rb +11 -0
  434. data/spec/support/templates/policies/user_policy.rb +11 -0
  435. data/spec/support/templates/post_decorator.rb +11 -0
  436. data/spec/unit/abstract_view_factory_spec.rb +79 -0
  437. data/spec/unit/action_builder_spec.rb +126 -0
  438. data/spec/unit/active_admin_spec.rb +11 -0
  439. data/spec/unit/application_spec.rb +140 -0
  440. data/spec/unit/asset_registration_spec.rb +52 -0
  441. data/spec/unit/authorization/authorization_adapter_spec.rb +61 -0
  442. data/spec/unit/authorization/controller_authorization_spec.rb +39 -0
  443. data/spec/unit/auto_link_spec.rb +34 -0
  444. data/spec/unit/batch_actions/resource_spec.rb +92 -0
  445. data/spec/unit/batch_actions/settings_spec.rb +61 -0
  446. data/spec/unit/belongs_to_spec.rb +42 -0
  447. data/spec/unit/cancan_adapter_spec.rb +43 -0
  448. data/spec/unit/comments_spec.rb +144 -0
  449. data/spec/unit/component_spec.rb +18 -0
  450. data/spec/unit/config_shared_examples.rb +59 -0
  451. data/spec/unit/controller_filters_spec.rb +37 -0
  452. data/spec/unit/csv_builder_spec.rb +134 -0
  453. data/spec/unit/devise_spec.rb +116 -0
  454. data/spec/unit/dsl_spec.rb +61 -0
  455. data/spec/unit/event_spec.rb +47 -0
  456. data/spec/unit/filters/filter_form_builder_spec.rb +418 -0
  457. data/spec/unit/filters/resource_spec.rb +121 -0
  458. data/spec/unit/form_builder_spec.rb +576 -0
  459. data/spec/unit/generators/install_spec.rb +23 -0
  460. data/spec/unit/helpers/collection_spec.rb +65 -0
  461. data/spec/unit/helpers/scope_chain_spec.rb +36 -0
  462. data/spec/unit/helpers/settings_spec.rb +30 -0
  463. data/spec/unit/menu_collection_spec.rb +62 -0
  464. data/spec/unit/menu_item_spec.rb +143 -0
  465. data/spec/unit/menu_spec.rb +71 -0
  466. data/spec/unit/namespace/authorization_spec.rb +27 -0
  467. data/spec/unit/namespace/register_page_spec.rb +74 -0
  468. data/spec/unit/namespace/register_resource_spec.rb +163 -0
  469. data/spec/unit/namespace_spec.rb +103 -0
  470. data/spec/unit/order_clause_spec.rb +57 -0
  471. data/spec/unit/page_controller_spec.rb +5 -0
  472. data/spec/unit/page_spec.rb +72 -0
  473. data/spec/unit/pretty_format_spec.rb +63 -0
  474. data/spec/unit/pundit_adapter_spec.rb +36 -0
  475. data/spec/unit/resource/action_items_spec.rb +62 -0
  476. data/spec/unit/resource/menu_spec.rb +18 -0
  477. data/spec/unit/resource/naming_spec.rb +122 -0
  478. data/spec/unit/resource/page_presenters_spec.rb +44 -0
  479. data/spec/unit/resource/pagination_spec.rb +38 -0
  480. data/spec/unit/resource/routes_spec.rb +73 -0
  481. data/spec/unit/resource/scopes_spec.rb +50 -0
  482. data/spec/unit/resource/sidebars_spec.rb +43 -0
  483. data/spec/unit/resource_collection_spec.rb +158 -0
  484. data/spec/unit/resource_controller/data_access_spec.rb +73 -0
  485. data/spec/unit/resource_controller/decorators_spec.rb +86 -0
  486. data/spec/unit/resource_controller/sidebars_spec.rb +46 -0
  487. data/spec/unit/resource_controller_spec.rb +265 -0
  488. data/spec/unit/resource_registration_spec.rb +56 -0
  489. data/spec/unit/resource_spec.rb +263 -0
  490. data/spec/unit/routing_spec.rb +172 -0
  491. data/spec/unit/scope_spec.rb +114 -0
  492. data/spec/unit/settings_spec.rb +88 -0
  493. data/spec/unit/view_factory_spec.rb +21 -0
  494. data/spec/unit/view_helpers/breadcrumbs_spec.rb +180 -0
  495. data/spec/unit/view_helpers/display_name_spec.rb +68 -0
  496. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +39 -0
  497. data/spec/unit/view_helpers/fields_for_spec.rb +50 -0
  498. data/spec/unit/view_helpers/form_helper_spec.rb +42 -0
  499. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +97 -0
  500. data/spec/unit/views/components/action_list_popover_spec.rb +29 -0
  501. data/spec/unit/views/components/attributes_table_spec.rb +259 -0
  502. data/spec/unit/views/components/batch_action_popover_spec.rb +33 -0
  503. data/spec/unit/views/components/blank_slate_spec.rb +17 -0
  504. data/spec/unit/views/components/columns_spec.rb +172 -0
  505. data/spec/unit/views/components/index_list_spec.rb +32 -0
  506. data/spec/unit/views/components/paginated_collection_spec.rb +229 -0
  507. data/spec/unit/views/components/panel_spec.rb +51 -0
  508. data/spec/unit/views/components/popover_spec.rb +33 -0
  509. data/spec/unit/views/components/sidebar_section_spec.rb +47 -0
  510. data/spec/unit/views/components/site_title_spec.rb +78 -0
  511. data/spec/unit/views/components/status_tag_spec.rb +102 -0
  512. data/spec/unit/views/components/table_for_spec.rb +242 -0
  513. data/spec/unit/views/pages/form_spec.rb +35 -0
  514. data/spec/unit/views/pages/layout_spec.rb +63 -0
  515. data/spec/unit/views/pages/show_spec.rb +20 -0
  516. data/spec/unit/views/tabbed_navigation_spec.rb +149 -0
  517. data/tasks/docs.rake +37 -0
  518. data/tasks/js.rake +32 -0
  519. data/tasks/parallel_tests.rake +60 -0
  520. data/tasks/test.rake +79 -0
  521. data/tasks/yard.rake +7 -0
  522. metadata +741 -0
@@ -0,0 +1,7 @@
1
+ Then /^I should see an action item link to "([^"]*)"$/ do |link|
2
+ page.should have_css('.action_item a', text: link)
3
+ end
4
+
5
+ Then /^I should not see an action item link to "([^"]*)"$/ do |link|
6
+ page.should_not have_css('.action_item a', text: link)
7
+ end
@@ -0,0 +1,7 @@
1
+ Then /^I should see a member link to "([^"]*)"$/ do |name|
2
+ page.should have_css("a.member_link", text: name)
3
+ end
4
+
5
+ Then /^I should not see a member link to "([^"]*)"$/ do |name|
6
+ %{Then I should not see "#{name}" within "a.member_link"}
7
+ end
@@ -0,0 +1,82 @@
1
+ Then /^I should see a table header with "([^"]*)"$/ do |content|
2
+ page.should have_xpath('//th', text: content)
3
+ end
4
+
5
+ Then /^I should not see a table header with "([^"]*)"$/ do |content|
6
+ page.should_not have_xpath('//th', text: content)
7
+ end
8
+
9
+ Then /^I should see a sortable table header with "([^"]*)"$/ do |content|
10
+ page.should have_css('th.sortable', text: content)
11
+ end
12
+
13
+ Then /^I should not see a sortable table header with "([^"]*)"$/ do |content|
14
+ page.should_not have_css('th.sortable', text: content)
15
+ end
16
+
17
+ Then /^I should not see a sortable table header$/ do
18
+ step %{I should not see "th.sortable"}
19
+ end
20
+
21
+ Then /^the table "([^"]*)" should have (\d+) rows/ do |selector, count|
22
+ table = page.find(selector)
23
+ table.all(:css, 'tr').size.should == count.to_i
24
+ end
25
+
26
+ Then /^the table "([^"]*)" should have (\d+) columns/ do |selector, count|
27
+ table = page.find(selector)
28
+ row = table.find('tr:first')
29
+ row.all(:css, "td").size.should == count.to_i
30
+ end
31
+
32
+ Then /^there should be (\d+) "([^"]*)" tags$/ do |count, tag|
33
+ page.all(:css, tag).size.should == count.to_i
34
+ end
35
+
36
+ Then /^I should see a link to "([^"]*)"$/ do |link|
37
+ page.should have_xpath('//a', text: link)
38
+ end
39
+
40
+ Then /^an "([^"]*)" exception should be raised when I follow "([^"]*)"$/ do |error, link|
41
+ expect {
42
+ step "I follow \"#{link}\""
43
+ }.to raise_error(error.constantize)
44
+ end
45
+
46
+ Then /^I should be in the resource section for (.+)$/ do |resource_name|
47
+ current_url.should include resource_name.gsub(' ', '').underscore.pluralize
48
+ end
49
+
50
+ Then /^I should wait and see "([^"]*)"(?: within "([^"]*)")?$/ do |text, selector|
51
+ sleep 1
52
+ step 'show me the page'
53
+ selector ||= "*"
54
+ locate(:xpath, "//#{selector}[text()='#{text}']")
55
+ end
56
+
57
+ Then /^I should see the page title "([^"]*)"$/ do |title|
58
+ within('h2#page_title') do
59
+ page.should have_content(title)
60
+ end
61
+ end
62
+
63
+ Then /^I should see a fieldset titled "([^"]*)"$/ do |title|
64
+ page.should have_css('fieldset legend', text: title)
65
+ end
66
+
67
+ Then /^the "([^"]*)" field should contain the option "([^"]*)"$/ do |field, option|
68
+ field = find_field(field)
69
+ field.should have_css("option", text: option)
70
+ end
71
+
72
+ Then /^I should see the content "([^"]*)"$/ do |content|
73
+ page.should have_css("#active_admin_content", text: content)
74
+ end
75
+
76
+ Then /^I should see a validation error "([^"]*)"$/ do |error_message|
77
+ page.should have_css(".inline-errors", text: error_message)
78
+ end
79
+
80
+ Then /^I should see a table with id "([^"]*)"$/ do |dom_id|
81
+ page.should have_css('table', id: dom_id)
82
+ end
@@ -0,0 +1,15 @@
1
+ Then /^I should see the css file "([^"]*)"$/ do |path|
2
+ step %{I should see the css file "#{path}" of media "screen"}
3
+ end
4
+
5
+ Then /^I should see the css file "([^"]*)" of media "([^"]*)"$/ do |path, media|
6
+ page.should have_xpath("//link[contains(@href, /stylesheets/#{path}) and contains(@media, #{media})]")
7
+ end
8
+
9
+ Then /^I should see the js file "([^"]*)"$/ do |path|
10
+ page.should have_xpath("//script[contains(@src, /javascripts/#{path})]")
11
+ end
12
+
13
+ Then /^I should see the favicon "([^"]*)"$/ do |path|
14
+ page.should have_xpath("//link[contains(@href, \"#{path}\")]")
15
+ end
@@ -0,0 +1,18 @@
1
+ Then /^I should see the attribute "([^"]*)" with "([^"]*)"$/ do |title, value|
2
+ elems = all ".attributes_table th:contains('#{title}') ~ td:contains('#{value}')"
3
+ elems.first.should_not be_nil, 'attribute missing'
4
+ end
5
+
6
+ Then /^I should see the attribute "([^"]*)" with a nicely formatted datetime$/ do |title|
7
+ text = all(".attributes_table th:contains('#{title}') ~ td").first.text
8
+ text.should match /\w+ \d{1,2}, \d{4} \d{2}:\d{2}/
9
+ end
10
+
11
+ Then /^the attribute "([^"]*)" should be empty$/ do |title|
12
+ elems = all ".attributes_table th:contains('#{title}') ~ td > span.empty"
13
+ elems.first.should_not be_nil, 'attribute not empty'
14
+ end
15
+
16
+ Then /^I should not see the attribute "([^"]*)"$/ do |title|
17
+ page.should_not have_css('.attributes_table th', text: title)
18
+ end
@@ -0,0 +1,55 @@
1
+ Then /^I (should|should not) be asked to confirm "([^"]*)" for "([^"]*)"$/ do |maybe, confirmation, title|
2
+ selector = "#batch_actions_popover a.batch_action:contains('#{title}')"
3
+ selector << "[data-confirm='#{confirmation}']" if maybe == 'should'
4
+ page.send maybe.sub(' ', '_'), have_css(selector)
5
+ end
6
+
7
+ Then /^I (should|should not) see the batch action :([^\s]*) "([^"]*)"$/ do |maybe, sym, title|
8
+ selector = ".batch_actions_selector a.batch_action:contains('#{title}')"
9
+ selector << "[href='#'][data-action='#{sym}']" if maybe == 'should'
10
+ page.send maybe.sub(' ', '_'), have_css(selector)
11
+ end
12
+
13
+ Then /^the (\d+)(?:st|nd|rd|th) batch action should be "([^"]*)"$/ do |index, title|
14
+ page.all(".batch_actions_selector a.batch_action")[index.to_i - 1].text.should match title
15
+ end
16
+
17
+ When /^I check the (\d+)(?:st|nd|rd|th) record$/ do |index|
18
+ page.all("table.index_table input[type=checkbox]")[index.to_i].set true
19
+ end
20
+
21
+ When /^I toggle the collection selection$/ do
22
+ page.find("#collection_selection_toggle_all").click
23
+ end
24
+
25
+ Then /^I should see that the batch action button is disabled$/ do
26
+ page.should have_css ".batch_actions_selector .dropdown_menu_button.disabled"
27
+ end
28
+
29
+ Then /^I (should|should not) see the batch action (button|selector)$/ do |maybe, type|
30
+ selector = "div.table_tools .batch_actions_selector"
31
+ selector << ' .dropdown_menu_button' if maybe == 'should' && type == 'button'
32
+ page.send maybe.sub(' ', '_'), have_css(selector)
33
+ end
34
+
35
+ Then /^I should see the batch action popover exists$/ do
36
+ page.should have_css ".batch_actions_selector"
37
+ end
38
+
39
+ Given /^I submit the batch action form with "([^"]*)"$/ do |action|
40
+ page.find("#batch_action").set action
41
+ form = page.find "#collection_selection"
42
+ params = page.all("#main_content input").each_with_object({}) do |input, obj|
43
+ key, value = input['name'], input['value']
44
+ if key == 'collection_selection[]'
45
+ (obj[key] ||= []).push value if input.checked?
46
+ else
47
+ obj[key] = value
48
+ end
49
+ end
50
+ page.driver.submit form['method'], form['action'], params
51
+ end
52
+
53
+ Then /^I should not see checkboxes in the table$/ do
54
+ page.should_not have_css ".paginated_collection table input[type=checkbox]"
55
+ end
@@ -0,0 +1,3 @@
1
+ Then /^I should see a link to "([^"]*)" in the breadcrumb$/ do |text|
2
+ page.should have_css('.breadcrumb > a', text: text)
3
+ end
@@ -0,0 +1,12 @@
1
+ Then /^I should see a comment by "([^"]*)"$/ do |name|
2
+ step %{I should see "#{name}" within ".active_admin_comment_author"}
3
+ end
4
+
5
+ When /^I add a comment "([^"]*)"$/ do |comment|
6
+ step %{I fill in "active_admin_comment_body" with "#{comment}"}
7
+ step %{I press "Add Comment"}
8
+ end
9
+
10
+ Given /^a tag with the name "([^"]*)" exists$/ do |tag_name|
11
+ Tag.create(name: tag_name)
12
+ end
@@ -0,0 +1,100 @@
1
+ module ActiveAdminReloading
2
+ def load_aa_config(config_content)
3
+ ActiveAdmin::Event.dispatch ActiveAdmin::Application::BeforeLoadEvent, ActiveAdmin.application
4
+ eval(config_content)
5
+ ActiveAdmin::Event.dispatch ActiveAdmin::Application::AfterLoadEvent, ActiveAdmin.application
6
+ Rails.application.reload_routes!
7
+ ActiveAdmin.application.namespaces.values.each &:reset_menu!
8
+ end
9
+ end
10
+
11
+ module ActiveAdminContentsRollback
12
+ def files
13
+ @files ||= {}
14
+ end
15
+
16
+ # Records the contents of a file the first time we are
17
+ # about to change it
18
+ def record(filename)
19
+ contents = File.read(filename) rescue nil
20
+ files[filename] = contents unless files.has_key? filename
21
+ end
22
+
23
+ # Rolls the recorded files back to their original states
24
+ def rollback!
25
+ files.each{ |file, contents| rollback_file(file, contents) }
26
+ @files = {}
27
+ end
28
+
29
+ # If the file originally had content, override the stuff on disk.
30
+ # Else, remove the file and its parent folder structure until Rails.root OR other files exist.
31
+ def rollback_file(file, contents)
32
+ if contents.present?
33
+ File.open(file,'w') { |f| f << contents }
34
+ else
35
+ File.delete(file)
36
+ begin
37
+ dir = File.dirname(file)
38
+ until dir == Rails.root
39
+ Dir.rmdir(dir) # delete current folder
40
+ dir = dir.split('/')[0..-2].join('/') # select parent folder
41
+ end
42
+ rescue Errno::ENOTEMPTY # Directory not empty
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ World(ActiveAdminReloading)
49
+ World(ActiveAdminContentsRollback)
50
+
51
+ After do
52
+ rollback!
53
+ end
54
+
55
+ Given /^a(?:n? (index|show))? configuration of:$/ do |action, config_content|
56
+ load_aa_config(config_content)
57
+
58
+ case action
59
+ when 'index'
60
+ step 'I am logged in'
61
+ case resource = config_content.match(/ActiveAdmin\.register (\w+)/)[1]
62
+ when 'Post'
63
+ step 'I am on the index page for posts'
64
+ when 'Category'
65
+ step 'I am on the index page for categories'
66
+ else
67
+ raise "#{resource} is not supported"
68
+ end
69
+ when 'show'
70
+ case resource = config_content.match(/ActiveAdmin\.register (\w+)/)[1]
71
+ when 'Post'
72
+ step 'I am logged in'
73
+ step 'I am on the index page for posts'
74
+ step 'I follow "View"'
75
+ when 'Tag'
76
+ step 'I am logged in'
77
+ Tag.create!
78
+ visit admin_tag_path Tag.last
79
+ else
80
+ raise "#{resource} is not supported"
81
+ end
82
+ end
83
+ end
84
+
85
+ Given /^"([^"]*)" contains:$/ do |filename, contents|
86
+ path = Rails.root + filename
87
+ FileUtils.mkdir_p File.dirname path
88
+ record path
89
+
90
+ File.open(path,'w+'){ |f| f << contents }
91
+ end
92
+
93
+ Given /^I add "([^"]*)" to the "([^"]*)" model$/ do |code, model_name|
94
+ path = File.join Rails.root, "app", "models", "#{model_name}.rb"
95
+ record path
96
+
97
+ str = File.read(path).gsub /^(class .+)$/, "\\1\n #{code}\n"
98
+ File.open(path, 'w+') { |f| f << str }
99
+ ActiveSupport::Dependencies.clear
100
+ end
@@ -0,0 +1,15 @@
1
+ Then /^I should see the default welcome message$/ do
2
+ step %{I should see "Welcome to Active Admin" within "#dashboard_default_message"}
3
+ end
4
+
5
+ Then /^I should not see the default welcome message$/ do
6
+ step %{I should not see "Welcome to Active Admin"}
7
+ end
8
+
9
+ Then /^I should see a dashboard widget "([^"]*)"$/ do |name|
10
+ page.should have_css('.dashboard .panel h3', text: name)
11
+ end
12
+
13
+ Then /^I should not see a dashboard widget "([^"]*)"$/ do |name|
14
+ page.should_not have_css('.dashboard .panel h3', text: name)
15
+ end
@@ -0,0 +1,34 @@
1
+ def create_user(name, type = 'User')
2
+ first_name, last_name = name.split(' ')
3
+ user = type.camelize.constantize.where(first_name: first_name, last_name: last_name).first_or_create(username: name.gsub(' ', '').underscore)
4
+ end
5
+
6
+ Given /^(a|\d+)( published)? posts?(?: with the title "([^"]*)")?(?: and body "([^"]*)")?(?: written by "([^"]*)")?(?: in category "([^"]*)")? exists?$/ do |count, published, title, body, user, category_name|
7
+ count = count == 'a' ? 1 : count.to_i
8
+ published = Time.now if published
9
+ author = create_user(user) if user
10
+ category = Category.where(name: category_name).first_or_create if category_name
11
+ title ||= "Hello World %i"
12
+ count.times do |i|
13
+ Post.create! title: title % i, body: body, author: author, published_at: published, custom_category_id: category.try(:id)
14
+ end
15
+ end
16
+
17
+ Given /^a category named "([^"]*)" exists$/ do |name|
18
+ Category.create! name: name
19
+ end
20
+
21
+ Given /^a (user|publisher) named "([^"]*)" exists$/ do |type, name|
22
+ create_user name, type
23
+ end
24
+
25
+ Given /^a store named "([^"]*)" exists$/ do |name|
26
+ Store.create! name: name
27
+ end
28
+
29
+ Given /^I create a new post with the title "([^"]*)"$/ do |title|
30
+ click_link "Posts"
31
+ click_link "New Post"
32
+ fill_in :title, with: title
33
+ click_button "Create Post"
34
+ end
@@ -0,0 +1,17 @@
1
+ Then /^I should see a select filter for "([^"]*)"$/ do |label|
2
+ page.should have_css(".filter_select label", text: label)
3
+ end
4
+
5
+ Then /^I should see a string filter for "([^"]*)"$/ do |label|
6
+ page.should have_css(".filter_string label", text: label)
7
+ end
8
+
9
+ Then /^I should see a date range filter for "([^"]*)"$/ do |label|
10
+ page.should have_css(".filter_date_range label", text: label)
11
+ end
12
+
13
+ Then /^I should see the following filters:$/ do |table|
14
+ table.rows_hash.each do |label, type|
15
+ step %{I should see a #{type} filter for "#{label}"}
16
+ end
17
+ end
@@ -0,0 +1,11 @@
1
+ Then /^I should see a flash with "([^"]*)"$/ do |text|
2
+ page.should have_content(text)
3
+ end
4
+
5
+ Then /^I should see a successful create flash$/ do
6
+ page.should have_css('div.flash_notice', text: /was successfully created/)
7
+ end
8
+
9
+ Then /^I should not see a successful create flash$/ do
10
+ page.should_not have_css('div.flash_notice', text: /was successfully created/)
11
+ end
@@ -0,0 +1,45 @@
1
+ require 'csv'
2
+
3
+ Then "I should see nicely formatted datetimes" do
4
+ page.body.should =~ /\w+ \d{1,2}, \d{4} \d{2}:\d{2}/
5
+ end
6
+
7
+ Then /^I should( not)? see a link to download "([^"]*)"$/ do |negate, format|
8
+ method = negate ? :should_not : :should
9
+ page.send method, have_css("#index_footer a", text: format)
10
+ end
11
+
12
+ # Check first rows of the displayed CSV.
13
+ Then /^I should download a CSV file with "([^"]*)" separator for "([^"]*)" containing:$/ do |sep, resource_name, table|
14
+ body = page.driver.response.body
15
+ headers = page.response_headers
16
+ headers['Content-Type'].should eq 'text/csv; charset=utf-8'
17
+
18
+ begin
19
+ csv = CSV.parse(body, col_sep: sep)
20
+ table.raw.each_with_index do |expected_row, row_index|
21
+ expected_row.each_with_index do |expected_cell, col_index|
22
+ cell = csv.try(:[], row_index).try(:[], col_index)
23
+ if expected_cell.blank?
24
+ cell.should be_nil
25
+ else
26
+ (cell || '').should match /#{expected_cell}/
27
+ end
28
+ end
29
+ end
30
+ rescue
31
+ puts "Expecting:"
32
+ p table.raw
33
+ puts "to match:"
34
+ p csv
35
+ raise $!
36
+ end
37
+ end
38
+
39
+ Then /^I should download a CSV file for "([^"]*)" containing:$/ do |resource_name, table|
40
+ step %{I should download a CSV file with "," separator for "#{resource_name}" containing:}, table
41
+ end
42
+
43
+ Then /^the CSV file should contain "([^"]*)" in quotes$/ do |text|
44
+ page.driver.response.body.should match /"#{text}"/
45
+ end