yousty-activeadmin 1.0.0.pre

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 (490) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +43 -0
  3. data/.travis.yml +8 -0
  4. data/.yardopts +9 -0
  5. data/CHANGELOG.md +1056 -0
  6. data/CONTRIBUTING.md +110 -0
  7. data/Gemfile +41 -0
  8. data/Guardfile +7 -0
  9. data/LICENSE +25 -0
  10. data/README.md +67 -0
  11. data/Rakefile +25 -0
  12. data/activeadmin.gemspec +33 -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 +6 -0
  28. data/app/assets/javascripts/active_admin/base.js.coffee +5 -0
  29. data/app/assets/javascripts/active_admin/components/application.js.coffee +23 -0
  30. data/app/assets/javascripts/active_admin/components/batch_actions.js.coffee +26 -0
  31. data/app/assets/javascripts/active_admin/components/has_many.js.coffee +41 -0
  32. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +37 -0
  33. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +105 -0
  34. data/app/assets/javascripts/active_admin/lib/popover.js.coffee +97 -0
  35. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +25 -0
  36. data/app/assets/stylesheets/active_admin/_base.css.scss +41 -0
  37. data/app/assets/stylesheets/active_admin/_forms.css.scss +293 -0
  38. data/app/assets/stylesheets/active_admin/_header.css.scss +152 -0
  39. data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
  40. data/app/assets/stylesheets/active_admin/_typography.css.scss +100 -0
  41. data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +11 -0
  42. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +31 -0
  43. data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
  44. data/app/assets/stylesheets/active_admin/components/_buttons.scss +11 -0
  45. data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
  46. data/app/assets/stylesheets/active_admin/components/_comments.css.scss +41 -0
  47. data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +123 -0
  48. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +151 -0
  49. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +39 -0
  50. data/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
  51. data/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
  52. data/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
  53. data/app/assets/stylesheets/active_admin/components/_pagination.scss +34 -0
  54. data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
  55. data/app/assets/stylesheets/active_admin/components/_popovers.css.scss +123 -0
  56. data/app/assets/stylesheets/active_admin/components/_scopes.scss +10 -0
  57. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +12 -0
  58. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +95 -0
  59. data/app/assets/stylesheets/active_admin/components/_tables.css.scss +110 -0
  60. data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +11 -0
  61. data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +66 -0
  62. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +38 -0
  63. data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +21 -0
  64. data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
  65. data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
  66. data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +36 -0
  67. data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +22 -0
  68. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
  69. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +26 -0
  70. data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +32 -0
  71. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
  72. data/app/assets/stylesheets/active_admin/print.css.scss +284 -0
  73. data/app/assets/stylesheets/active_admin/structure/_footer.scss +14 -0
  74. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +29 -0
  75. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +43 -0
  76. data/app/views/active_admin/dashboard/index.html.arb +1 -0
  77. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  78. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  79. data/app/views/active_admin/devise/passwords/edit.html.erb +19 -0
  80. data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
  81. data/app/views/active_admin/devise/sessions/new.html.erb +20 -0
  82. data/app/views/active_admin/devise/shared/_links.erb +27 -0
  83. data/app/views/active_admin/devise/unlocks/new.html.erb +14 -0
  84. data/app/views/active_admin/page/index.html.arb +1 -0
  85. data/app/views/active_admin/resource/edit.html.arb +1 -0
  86. data/app/views/active_admin/resource/index.csv.erb +17 -0
  87. data/app/views/active_admin/resource/index.html.arb +1 -0
  88. data/app/views/active_admin/resource/new.html.arb +1 -0
  89. data/app/views/active_admin/resource/show.html.arb +1 -0
  90. data/app/views/layouts/active_admin.html.arb +1 -0
  91. data/app/views/layouts/active_admin_logged_out.html.erb +37 -0
  92. data/config/locales/bg.yml +101 -0
  93. data/config/locales/ca.yml +98 -0
  94. data/config/locales/cs.yml +105 -0
  95. data/config/locales/da.yml +102 -0
  96. data/config/locales/de-CH.yml +117 -0
  97. data/config/locales/de.yml +119 -0
  98. data/config/locales/en-GB.yml +91 -0
  99. data/config/locales/en.yml +110 -0
  100. data/config/locales/es.yml +106 -0
  101. data/config/locales/es_MX.yml +104 -0
  102. data/config/locales/fi.yml +109 -0
  103. data/config/locales/fr.yml +97 -0
  104. data/config/locales/he.yml +91 -0
  105. data/config/locales/hr.yml +93 -0
  106. data/config/locales/hu.yml +92 -0
  107. data/config/locales/it.yml +89 -0
  108. data/config/locales/ja.yml +104 -0
  109. data/config/locales/ko.yml +84 -0
  110. data/config/locales/lt.yml +90 -0
  111. data/config/locales/lv.yml +89 -0
  112. data/config/locales/nl.yml +90 -0
  113. data/config/locales/no-NB.yml +85 -0
  114. data/config/locales/pl.yml +93 -0
  115. data/config/locales/pt-BR.yml +90 -0
  116. data/config/locales/pt-PT.yml +89 -0
  117. data/config/locales/ro.yml +93 -0
  118. data/config/locales/ru.yml +103 -0
  119. data/config/locales/sv-SE.yml +89 -0
  120. data/config/locales/tr.yml +90 -0
  121. data/config/locales/uk.yml +100 -0
  122. data/config/locales/vi.yml +90 -0
  123. data/config/locales/zh-CN.yml +90 -0
  124. data/config/locales/zh-TW.yml +90 -0
  125. data/cucumber.yml +3 -0
  126. data/docs/0-installation.md +84 -0
  127. data/docs/1-general-configuration.md +137 -0
  128. data/docs/10-custom-pages.md +98 -0
  129. data/docs/11-decorators.md +66 -0
  130. data/docs/12-arbre-components.md +144 -0
  131. data/docs/13-authorization-adapter.md +227 -0
  132. data/docs/2-resource-customization.md +340 -0
  133. data/docs/3-index-pages/create-an-index.md +29 -0
  134. data/docs/3-index-pages/index-as-block.md +21 -0
  135. data/docs/3-index-pages/index-as-blog.md +71 -0
  136. data/docs/3-index-pages/index-as-grid.md +29 -0
  137. data/docs/3-index-pages/index-as-table.md +154 -0
  138. data/docs/3-index-pages.md +206 -0
  139. data/docs/4-csv-format.md +39 -0
  140. data/docs/5-forms.md +110 -0
  141. data/docs/6-show-pages.md +77 -0
  142. data/docs/7-sidebars.md +42 -0
  143. data/docs/8-custom-actions.md +139 -0
  144. data/docs/9-batch-actions.md +155 -0
  145. data/features/action_item.feature +73 -0
  146. data/features/authorization.feature +64 -0
  147. data/features/authorization_cancan.feature +52 -0
  148. data/features/belongs_to.feature +63 -0
  149. data/features/breadcrumb.feature +27 -0
  150. data/features/comments/commenting.feature +140 -0
  151. data/features/comments/viewing_index.feature +19 -0
  152. data/features/dashboard.feature +16 -0
  153. data/features/decorators.feature +41 -0
  154. data/features/development_reloading.feature +31 -0
  155. data/features/edit_page.feature +127 -0
  156. data/features/favicon.feature +20 -0
  157. data/features/first_boot.feature +16 -0
  158. data/features/global_navigation.feature +29 -0
  159. data/features/i18n.feature +38 -0
  160. data/features/index/batch_actions.feature +123 -0
  161. data/features/index/filters.feature +138 -0
  162. data/features/index/format_as_csv.feature +117 -0
  163. data/features/index/formats.feature +66 -0
  164. data/features/index/index_as_block.feature +15 -0
  165. data/features/index/index_as_blog.feature +69 -0
  166. data/features/index/index_as_grid.feature +45 -0
  167. data/features/index/index_as_table.feature +195 -0
  168. data/features/index/index_blank_slate.feature +61 -0
  169. data/features/index/index_parameters.feature +75 -0
  170. data/features/index/index_scope_to.feature +56 -0
  171. data/features/index/index_scopes.feature +251 -0
  172. data/features/index/page_title.feature +30 -0
  173. data/features/index/pagination.feature +59 -0
  174. data/features/index/switch_index_view.feature +73 -0
  175. data/features/menu.feature +53 -0
  176. data/features/new_page.feature +119 -0
  177. data/features/registering_assets.feature +35 -0
  178. data/features/registering_pages.feature +148 -0
  179. data/features/registering_resources.feature +33 -0
  180. data/features/root_to.feature +17 -0
  181. data/features/show/default_content.feature +43 -0
  182. data/features/show/page_title.feature +47 -0
  183. data/features/sidebar_sections.feature +198 -0
  184. data/features/site_title.feature +47 -0
  185. data/features/specifying_actions.feature +93 -0
  186. data/features/step_definitions/action_item_steps.rb +7 -0
  187. data/features/step_definitions/action_link_steps.rb +7 -0
  188. data/features/step_definitions/additional_web_steps.rb +82 -0
  189. data/features/step_definitions/asset_steps.rb +15 -0
  190. data/features/step_definitions/attribute_steps.rb +13 -0
  191. data/features/step_definitions/batch_action_steps.rb +55 -0
  192. data/features/step_definitions/breadcrumb_steps.rb +3 -0
  193. data/features/step_definitions/comment_steps.rb +12 -0
  194. data/features/step_definitions/configuration_steps.rb +100 -0
  195. data/features/step_definitions/dashboard_steps.rb +15 -0
  196. data/features/step_definitions/factory_steps.rb +34 -0
  197. data/features/step_definitions/filter_steps.rb +17 -0
  198. data/features/step_definitions/flash_steps.rb +11 -0
  199. data/features/step_definitions/format_steps.rb +45 -0
  200. data/features/step_definitions/i18n_steps.rb +3 -0
  201. data/features/step_definitions/index_scope_steps.rb +21 -0
  202. data/features/step_definitions/index_views_steps.rb +3 -0
  203. data/features/step_definitions/layout_steps.rb +3 -0
  204. data/features/step_definitions/member_link_steps.rb +7 -0
  205. data/features/step_definitions/menu_steps.rb +11 -0
  206. data/features/step_definitions/pagination_steps.rb +8 -0
  207. data/features/step_definitions/sidebar_steps.rb +8 -0
  208. data/features/step_definitions/site_title_steps.rb +15 -0
  209. data/features/step_definitions/symbol_leak_steps.rb +3 -0
  210. data/features/step_definitions/tab_steps.rb +3 -0
  211. data/features/step_definitions/table_steps.rb +119 -0
  212. data/features/step_definitions/user_steps.rb +39 -0
  213. data/features/step_definitions/web_steps.rb +86 -0
  214. data/features/sti_resource.feature +73 -0
  215. data/features/support/env.rb +112 -0
  216. data/features/support/paths.rb +71 -0
  217. data/features/support/selectors.rb +45 -0
  218. data/features/symbol_leak.feature +35 -0
  219. data/features/users/logging_in.feature +34 -0
  220. data/features/users/logging_out.feature +13 -0
  221. data/features/users/resetting_password.feature +34 -0
  222. data/lib/active_admin/abstract_view_factory.rb +95 -0
  223. data/lib/active_admin/application.rb +242 -0
  224. data/lib/active_admin/asset_registration.rb +29 -0
  225. data/lib/active_admin/authorization_adapter.rb +132 -0
  226. data/lib/active_admin/base_controller/authorization.rb +151 -0
  227. data/lib/active_admin/base_controller/menu.rb +34 -0
  228. data/lib/active_admin/base_controller.rb +78 -0
  229. data/lib/active_admin/batch_actions/controller.rb +24 -0
  230. data/lib/active_admin/batch_actions/resource_extension.rb +127 -0
  231. data/lib/active_admin/batch_actions/views/batch_action_form.rb +35 -0
  232. data/lib/active_admin/batch_actions/views/batch_action_popover.rb +28 -0
  233. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +66 -0
  234. data/lib/active_admin/batch_actions/views/selection_cells.rb +37 -0
  235. data/lib/active_admin/batch_actions.rb +17 -0
  236. data/lib/active_admin/callbacks.rb +87 -0
  237. data/lib/active_admin/cancan_adapter.rb +40 -0
  238. data/lib/active_admin/component.rb +5 -0
  239. data/lib/active_admin/controller_action.rb +12 -0
  240. data/lib/active_admin/csv_builder.rb +49 -0
  241. data/lib/active_admin/deprecation.rb +36 -0
  242. data/lib/active_admin/devise.rb +70 -0
  243. data/lib/active_admin/dsl.rb +166 -0
  244. data/lib/active_admin/engine.rb +7 -0
  245. data/lib/active_admin/event.rb +33 -0
  246. data/lib/active_admin/filters/dsl.rb +21 -0
  247. data/lib/active_admin/filters/forms.rb +89 -0
  248. data/lib/active_admin/filters/formtastic_addons.rb +70 -0
  249. data/lib/active_admin/filters/resource_extension.rb +136 -0
  250. data/lib/active_admin/filters.rb +9 -0
  251. data/lib/active_admin/form_builder.rb +152 -0
  252. data/lib/active_admin/helpers/collection.rb +23 -0
  253. data/lib/active_admin/helpers/optional_display.rb +38 -0
  254. data/lib/active_admin/helpers/scope_chain.rb +23 -0
  255. data/lib/active_admin/helpers/settings.rb +108 -0
  256. data/lib/active_admin/iconic/icons.rb +142 -0
  257. data/lib/active_admin/iconic.rb +51 -0
  258. data/lib/active_admin/inputs/datepicker_input.rb +20 -0
  259. data/lib/active_admin/inputs/filter_base/search_method_select.rb +73 -0
  260. data/lib/active_admin/inputs/filter_base.rb +33 -0
  261. data/lib/active_admin/inputs/filter_boolean_input.rb +32 -0
  262. data/lib/active_admin/inputs/filter_check_boxes_input.rb +51 -0
  263. data/lib/active_admin/inputs/filter_date_range_input.rb +34 -0
  264. data/lib/active_admin/inputs/filter_numeric_input.rb +10 -0
  265. data/lib/active_admin/inputs/filter_select_input.rb +61 -0
  266. data/lib/active_admin/inputs/filter_string_input.rb +24 -0
  267. data/lib/active_admin/inputs.rb +15 -0
  268. data/lib/active_admin/menu.rb +107 -0
  269. data/lib/active_admin/menu_collection.rb +96 -0
  270. data/lib/active_admin/menu_item.rb +97 -0
  271. data/lib/active_admin/namespace.rb +224 -0
  272. data/lib/active_admin/orm/active_record/comments/comment.rb +39 -0
  273. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +14 -0
  274. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +17 -0
  275. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +23 -0
  276. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +75 -0
  277. data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
  278. data/lib/active_admin/orm/active_record/comments.rb +84 -0
  279. data/lib/active_admin/orm/active_record.rb +3 -0
  280. data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
  281. data/lib/active_admin/orm/mongoid.rb +1 -0
  282. data/lib/active_admin/page.rb +88 -0
  283. data/lib/active_admin/page_controller.rb +29 -0
  284. data/lib/active_admin/page_dsl.rb +28 -0
  285. data/lib/active_admin/page_presenter.rb +32 -0
  286. data/lib/active_admin/resource/action_items.rb +91 -0
  287. data/lib/active_admin/resource/belongs_to.rb +36 -0
  288. data/lib/active_admin/resource/controllers.rb +18 -0
  289. data/lib/active_admin/resource/menu.rb +64 -0
  290. data/lib/active_admin/resource/naming.rb +84 -0
  291. data/lib/active_admin/resource/page_presenters.rb +82 -0
  292. data/lib/active_admin/resource/pagination.rb +19 -0
  293. data/lib/active_admin/resource/routes.rb +99 -0
  294. data/lib/active_admin/resource/scope_to.rb +74 -0
  295. data/lib/active_admin/resource/scopes.rb +50 -0
  296. data/lib/active_admin/resource/sidebars.rb +27 -0
  297. data/lib/active_admin/resource.rb +153 -0
  298. data/lib/active_admin/resource_collection.rb +42 -0
  299. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  300. data/lib/active_admin/resource_controller/data_access.rb +298 -0
  301. data/lib/active_admin/resource_controller/decorators.rb +20 -0
  302. data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
  303. data/lib/active_admin/resource_controller/scoping.rb +31 -0
  304. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  305. data/lib/active_admin/resource_controller.rb +50 -0
  306. data/lib/active_admin/resource_dsl.rb +134 -0
  307. data/lib/active_admin/router.rb +106 -0
  308. data/lib/active_admin/scope.rb +57 -0
  309. data/lib/active_admin/sidebar_section.rb +37 -0
  310. data/lib/active_admin/version.rb +3 -0
  311. data/lib/active_admin/view_factory.rb +27 -0
  312. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  313. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
  314. data/lib/active_admin/view_helpers/auto_link_helper.rb +34 -0
  315. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +26 -0
  316. data/lib/active_admin/view_helpers/display_helper.rb +49 -0
  317. data/lib/active_admin/view_helpers/download_format_links_helper.rb +49 -0
  318. data/lib/active_admin/view_helpers/fields_for.rb +50 -0
  319. data/lib/active_admin/view_helpers/flash_helper.rb +13 -0
  320. data/lib/active_admin/view_helpers/form_helper.rb +24 -0
  321. data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
  322. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +93 -0
  323. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  324. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  325. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  326. data/lib/active_admin/view_helpers.rb +21 -0
  327. data/lib/active_admin/views/action_items.rb +17 -0
  328. data/lib/active_admin/views/components/action_list_popover.rb +29 -0
  329. data/lib/active_admin/views/components/attributes_table.rb +103 -0
  330. data/lib/active_admin/views/components/blank_slate.rb +17 -0
  331. data/lib/active_admin/views/components/columns.rb +150 -0
  332. data/lib/active_admin/views/components/dropdown_menu.rb +73 -0
  333. data/lib/active_admin/views/components/index_list.rb +68 -0
  334. data/lib/active_admin/views/components/paginated_collection.rb +125 -0
  335. data/lib/active_admin/views/components/panel.rb +34 -0
  336. data/lib/active_admin/views/components/popover.rb +27 -0
  337. data/lib/active_admin/views/components/scopes.rb +66 -0
  338. data/lib/active_admin/views/components/sidebar_section.rb +28 -0
  339. data/lib/active_admin/views/components/site_title.rb +55 -0
  340. data/lib/active_admin/views/components/status_tag.rb +56 -0
  341. data/lib/active_admin/views/components/table_for.rb +191 -0
  342. data/lib/active_admin/views/footer.rb +20 -0
  343. data/lib/active_admin/views/header.rb +32 -0
  344. data/lib/active_admin/views/index_as_block.rb +36 -0
  345. data/lib/active_admin/views/index_as_blog.rb +156 -0
  346. data/lib/active_admin/views/index_as_grid.rb +80 -0
  347. data/lib/active_admin/views/index_as_table.rb +264 -0
  348. data/lib/active_admin/views/pages/base.rb +139 -0
  349. data/lib/active_admin/views/pages/form.rb +51 -0
  350. data/lib/active_admin/views/pages/index.rb +147 -0
  351. data/lib/active_admin/views/pages/layout.rb +26 -0
  352. data/lib/active_admin/views/pages/page.rb +30 -0
  353. data/lib/active_admin/views/pages/show.rb +59 -0
  354. data/lib/active_admin/views/tabbed_navigation.rb +62 -0
  355. data/lib/active_admin/views/title_bar.rb +53 -0
  356. data/lib/active_admin/views.rb +8 -0
  357. data/lib/active_admin.rb +125 -0
  358. data/lib/activeadmin.rb +1 -0
  359. data/lib/generators/active_admin/assets/assets_generator.rb +16 -0
  360. data/lib/generators/active_admin/assets/templates/active_admin.css.scss +17 -0
  361. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
  362. data/lib/generators/active_admin/devise/devise_generator.rb +86 -0
  363. data/lib/generators/active_admin/install/install_generator.rb +46 -0
  364. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +235 -0
  365. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +27 -0
  366. data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
  367. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +19 -0
  368. data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
  369. data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
  370. data/lib/ransack_ext.rb +12 -0
  371. data/script/local +44 -0
  372. data/script/use_rails +53 -0
  373. data/spec/integration/default_namespace_spec.rb +61 -0
  374. data/spec/integration/javascript_spec.rb +20 -0
  375. data/spec/integration/memory_spec.rb +29 -0
  376. data/spec/integration/stylesheets_spec.rb +41 -0
  377. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
  378. data/spec/javascripts/coffeescripts/jquery.aa.popover-spec.js.coffee +82 -0
  379. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
  380. data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +60 -0
  381. data/spec/javascripts/compiled/jquery.aa.popover-spec.js +106 -0
  382. data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +37 -0
  383. data/spec/javascripts/fixtures/checkboxes.html +9 -0
  384. data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
  385. data/spec/javascripts/helpers/SpecHelper.js +3 -0
  386. data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +108 -0
  387. data/spec/javascripts/helpers/vendor/jasmine-jquery.js +288 -0
  388. data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +2915 -0
  389. data/spec/javascripts/support/jasmine.yml +74 -0
  390. data/spec/javascripts/support/jasmine_config.rb +23 -0
  391. data/spec/javascripts/support/jasmine_runner.rb +32 -0
  392. data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +34 -0
  393. data/spec/javascripts/support/jquery.min.js +4 -0
  394. data/spec/spec_helper.rb +175 -0
  395. data/spec/spec_helper_without_rails.rb +16 -0
  396. data/spec/support/deferred_garbage_collection.rb +19 -0
  397. data/spec/support/detect_rails_version.rb +42 -0
  398. data/spec/support/integration_example_group.rb +31 -0
  399. data/spec/support/jslint.yml +80 -0
  400. data/spec/support/rails_template.rb +111 -0
  401. data/spec/support/rails_template_with_data.rb +59 -0
  402. data/spec/support/templates/admin/stores.rb +11 -0
  403. data/spec/support/templates/cucumber.rb +24 -0
  404. data/spec/support/templates/cucumber_with_reloading.rb +5 -0
  405. data/spec/support/templates/en.yml +8 -0
  406. data/spec/support/templates/post_decorator.rb +53 -0
  407. data/spec/unit/abstract_view_factory_spec.rb +79 -0
  408. data/spec/unit/action_builder_spec.rb +126 -0
  409. data/spec/unit/active_admin_spec.rb +11 -0
  410. data/spec/unit/application_spec.rb +141 -0
  411. data/spec/unit/asset_registration_spec.rb +52 -0
  412. data/spec/unit/authorization/authorization_adapter_spec.rb +61 -0
  413. data/spec/unit/authorization/controller_authorization_spec.rb +39 -0
  414. data/spec/unit/auto_link_spec.rb +32 -0
  415. data/spec/unit/batch_actions/resource_spec.rb +91 -0
  416. data/spec/unit/batch_actions/settings_spec.rb +61 -0
  417. data/spec/unit/belongs_to_spec.rb +42 -0
  418. data/spec/unit/cancan_adapter_spec.rb +43 -0
  419. data/spec/unit/comments_spec.rb +106 -0
  420. data/spec/unit/component_spec.rb +18 -0
  421. data/spec/unit/config_shared_examples.rb +59 -0
  422. data/spec/unit/controller_filters_spec.rb +32 -0
  423. data/spec/unit/csv_builder_spec.rb +103 -0
  424. data/spec/unit/devise_spec.rb +116 -0
  425. data/spec/unit/dsl_spec.rb +61 -0
  426. data/spec/unit/event_spec.rb +47 -0
  427. data/spec/unit/filters/filter_form_builder_spec.rb +423 -0
  428. data/spec/unit/filters/resource_spec.rb +119 -0
  429. data/spec/unit/form_builder_spec.rb +514 -0
  430. data/spec/unit/generators/install_spec.rb +23 -0
  431. data/spec/unit/helpers/collection_spec.rb +65 -0
  432. data/spec/unit/helpers/scope_chain_spec.rb +36 -0
  433. data/spec/unit/helpers/settings_spec.rb +30 -0
  434. data/spec/unit/menu_collection_spec.rb +62 -0
  435. data/spec/unit/menu_item_spec.rb +143 -0
  436. data/spec/unit/menu_spec.rb +71 -0
  437. data/spec/unit/namespace/authorization_spec.rb +27 -0
  438. data/spec/unit/namespace/register_page_spec.rb +74 -0
  439. data/spec/unit/namespace/register_resource_spec.rb +163 -0
  440. data/spec/unit/namespace_spec.rb +103 -0
  441. data/spec/unit/page_controller_spec.rb +5 -0
  442. data/spec/unit/page_spec.rb +72 -0
  443. data/spec/unit/pretty_format_spec.rb +35 -0
  444. data/spec/unit/resource/action_items_spec.rb +62 -0
  445. data/spec/unit/resource/menu_spec.rb +18 -0
  446. data/spec/unit/resource/naming_spec.rb +122 -0
  447. data/spec/unit/resource/page_presenters_spec.rb +44 -0
  448. data/spec/unit/resource/pagination_spec.rb +38 -0
  449. data/spec/unit/resource/routes_spec.rb +73 -0
  450. data/spec/unit/resource/scopes_spec.rb +43 -0
  451. data/spec/unit/resource/sidebars_spec.rb +43 -0
  452. data/spec/unit/resource_collection_spec.rb +160 -0
  453. data/spec/unit/resource_controller/data_access_spec.rb +73 -0
  454. data/spec/unit/resource_controller/sidebars_spec.rb +46 -0
  455. data/spec/unit/resource_controller_spec.rb +265 -0
  456. data/spec/unit/resource_registration_spec.rb +56 -0
  457. data/spec/unit/resource_spec.rb +243 -0
  458. data/spec/unit/routing_spec.rb +172 -0
  459. data/spec/unit/scope_spec.rb +108 -0
  460. data/spec/unit/settings_spec.rb +88 -0
  461. data/spec/unit/view_factory_spec.rb +21 -0
  462. data/spec/unit/view_helpers/breadcrumbs_spec.rb +149 -0
  463. data/spec/unit/view_helpers/display_name_spec.rb +41 -0
  464. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +39 -0
  465. data/spec/unit/view_helpers/fields_for_spec.rb +50 -0
  466. data/spec/unit/view_helpers/form_helper_spec.rb +56 -0
  467. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +101 -0
  468. data/spec/unit/views/components/action_list_popover_spec.rb +30 -0
  469. data/spec/unit/views/components/attributes_table_spec.rb +230 -0
  470. data/spec/unit/views/components/batch_action_popover_spec.rb +33 -0
  471. data/spec/unit/views/components/blank_slate_spec.rb +17 -0
  472. data/spec/unit/views/components/columns_spec.rb +142 -0
  473. data/spec/unit/views/components/index_list_spec.rb +32 -0
  474. data/spec/unit/views/components/paginated_collection_spec.rb +227 -0
  475. data/spec/unit/views/components/panel_spec.rb +51 -0
  476. data/spec/unit/views/components/popover_spec.rb +33 -0
  477. data/spec/unit/views/components/sidebar_section_spec.rb +37 -0
  478. data/spec/unit/views/components/site_title_spec.rb +78 -0
  479. data/spec/unit/views/components/status_tag_spec.rb +95 -0
  480. data/spec/unit/views/components/table_for_spec.rb +201 -0
  481. data/spec/unit/views/pages/form_spec.rb +35 -0
  482. data/spec/unit/views/pages/layout_spec.rb +63 -0
  483. data/spec/unit/views/pages/show_spec.rb +20 -0
  484. data/spec/unit/views/tabbed_navigation_spec.rb +149 -0
  485. data/tasks/docs.rake +37 -0
  486. data/tasks/js.rake +32 -0
  487. data/tasks/parallel_tests.rake +60 -0
  488. data/tasks/test.rake +79 -0
  489. data/tasks/yard.rake +7 -0
  490. metadata +896 -0
@@ -0,0 +1,230 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Views::AttributesTable do
4
+
5
+ describe "creating with the dsl" do
6
+ let(:helpers) { action_view }
7
+
8
+ let(:post) do
9
+ post = Post.new :title => "Hello World", :body => nil
10
+ post.stub(:id){ 1 }
11
+ post.stub(:new_record?){ false }
12
+ post
13
+ end
14
+
15
+ let(:assigns){ { :post => post } }
16
+
17
+ # Loop through a few different ways to make the same table
18
+ # and ensure that they produce the same results
19
+ {
20
+ "when attributes are passed in to the builder methods" => proc {
21
+ render_arbre_component(assigns) {
22
+ attributes_table_for post, :id, :title, :body
23
+ }
24
+ },
25
+ "when attributes are built using the block" => proc {
26
+ render_arbre_component(assigns) {
27
+ attributes_table_for post do
28
+ rows :id, :title, :body
29
+ end
30
+ }
31
+ },
32
+ "when each attribute is passed in by itself" => proc {
33
+ render_arbre_component(assigns) {
34
+ attributes_table_for post do
35
+ row :id
36
+ row :title
37
+ row :body
38
+ end
39
+ }
40
+ },
41
+ "when you create each row with a custom block" => proc {
42
+ render_arbre_component(assigns) {
43
+ attributes_table_for post do
44
+ row("Id") { post.id }
45
+ row("Title"){ post.title }
46
+ row("Body") { post.body }
47
+ end
48
+ }
49
+ },
50
+ "when you create each row with a custom block that returns nil" => proc {
51
+ render_arbre_component(assigns) {
52
+ attributes_table_for post do
53
+ row("Id") { text_node post.id; nil }
54
+ row("Title"){ text_node post.title; nil }
55
+ row("Body") { text_node post.body; nil }
56
+ end
57
+ }
58
+ },
59
+ }.each do |context_title, table_decleration|
60
+ context context_title do
61
+ let(:table) { instance_eval &table_decleration }
62
+
63
+ it "should render a div wrapper with the class '.attributes_table'" do
64
+ table.tag_name.should == 'div'
65
+ table.attr(:class).should include('attributes_table')
66
+ end
67
+
68
+ it "should add id and type class" do
69
+ table.class_names.should include("post")
70
+ table.id.should == "attributes_table_post_1"
71
+ end
72
+
73
+ it "should render 3 rows" do
74
+ table.find_by_tag("tr").size.should == 3
75
+ end
76
+
77
+ describe "rendering the rows" do
78
+ [
79
+ ["Id" , "1"],
80
+ ["Title" , "Hello World"],
81
+ ["Body" , "<span class=\"empty\">Empty</span>"]
82
+ ].each_with_index do |set, i|
83
+ describe "for #{set[0]}" do
84
+ let(:title){ set[0] }
85
+ let(:content){ set[1] }
86
+ let(:current_row){ table.find_by_tag("tr")[i] }
87
+
88
+ it "should have the title '#{set[0]}'" do
89
+ current_row.find_by_tag("th").first.content.should == title
90
+ end
91
+ it "should have the content '#{set[1]}'" do
92
+ current_row.find_by_tag("td").first.content.chomp.strip.should == content
93
+ end
94
+ end
95
+ end
96
+ end # describe rendering rows
97
+
98
+ end
99
+ end # describe dsl styles
100
+
101
+ it "should add a class for each row based on the col name" do
102
+ table = render_arbre_component(assigns) {
103
+ attributes_table_for(post) do
104
+ row :title
105
+ row :created_at
106
+ end
107
+ }
108
+ table.find_by_tag("tr").first.to_s.
109
+ split("\n").first.lstrip.
110
+ should == '<tr class="row row-title">'
111
+
112
+ table.find_by_tag("tr").last.to_s.
113
+ split("\n").first.lstrip.
114
+ should == '<tr class="row row-created_at">'
115
+ end
116
+
117
+ it "should allow html options for the row itself" do
118
+ table = render_arbre_component(assigns) {
119
+ attributes_table_for(post) do
120
+ row("Wee", :class => "custom_row", :style => "custom_style") { }
121
+ end
122
+ }
123
+ table.find_by_tag("tr").first.to_s.
124
+ split("\n").first.lstrip.
125
+ should == '<tr class="row custom_row" style="custom_style">'
126
+ end
127
+
128
+ it "should allow html content inside the attributes table" do
129
+ table = render_arbre_component(assigns) {
130
+ attributes_table_for(post) do
131
+ row("ID"){ span(post.id, :class => 'id') }
132
+ end
133
+ }
134
+ table.find_by_tag("td").first.content.chomp.strip.should == "<span class=\"id\">1</span>"
135
+ end
136
+
137
+ it "should check if an association exists when an attribute has id in it" do
138
+ post.author = User.new :username => 'john_doe', :first_name => 'John', :last_name => 'Doe'
139
+ table = render_arbre_component(assigns) {
140
+ attributes_table_for post, :author_id
141
+ }
142
+ table.find_by_tag('td').first.content.should == 'John Doe'
143
+ end
144
+
145
+ context "with a collection" do
146
+ let(:posts) do
147
+ [Post.new(:title => "Hello World", :id => 1), Post.new(:title => "Multi Column", :id => 2)].each_with_index do |post, index|
148
+ post.stub(:id => index + 1, :new_record? => false)
149
+ end
150
+ end
151
+
152
+ let(:assigns) { { :posts => posts } }
153
+
154
+ let(:table) do
155
+ render_arbre_component(assigns) do
156
+ attributes_table_for posts, :id, :title
157
+ end
158
+ end
159
+
160
+ it "does not set id on the table" do
161
+ table.attr(:id).should be_nil
162
+ end
163
+
164
+ context "colgroup" do
165
+ let(:cols) { table.find_by_tag "col" }
166
+
167
+ it "contains a col for each record (plus headers)" do
168
+ cols.size.should == (2 + 1)
169
+ end
170
+
171
+ it "assigns an id to each col" do
172
+ cols[1..-1].each_with_index do |col, index|
173
+ col.id.should == "attributes_table_post_#{index + 1}"
174
+ end
175
+ end
176
+
177
+ it "assigns a class to each col" do
178
+ cols[1..-1].each_with_index do |col, index|
179
+ col.class_names.should include("post")
180
+ end
181
+ end
182
+
183
+ it "assigns alternation classes to each col" do
184
+ cols[1..-1].each_with_index do |col, index|
185
+ col.class_names.should include(["even", "odd"][index % 2])
186
+ end
187
+ end
188
+ end
189
+
190
+ context "when rendering the rows" do
191
+ it "should contain 3 columns" do
192
+ table.find_by_tag("tr").first.children.size.should == 3
193
+ end
194
+
195
+ [
196
+ ["Id" , "1", "2"],
197
+ ["Title", "Hello World", "Multi Column"],
198
+ ].each_with_index do |set, i|
199
+ describe "for #{set[0]}" do
200
+ let(:title){ set[0] }
201
+ let(:content){ set[1] }
202
+ let(:current_row){ table.find_by_tag("tr")[i] }
203
+
204
+ it "should have the title '#{set[0]}'" do
205
+ current_row.find_by_tag("th").first.content.should == title
206
+ end
207
+
208
+ context "with defined attribute name translation" do
209
+ it "should have the translated attribute name in the title" do
210
+ begin
211
+ I18n.backend.store_translations(:en, :activerecord => { :attributes => { :post => { :title => 'Translated Title', :id => 'Translated Id' } } })
212
+ current_row.find_by_tag("th").first.content.should == "Translated #{title}"
213
+ ensure
214
+ I18n.backend.reload!
215
+ end
216
+ end
217
+ end
218
+
219
+ set[1..-1].each_with_index do |content, index|
220
+ it "column #{index} should have the content '#{content}'" do
221
+ current_row.find_by_tag("td")[index].content.chomp.strip.should == content
222
+ end
223
+ end
224
+ end
225
+ end
226
+ end # describe rendering rows
227
+ end # with a collection
228
+ end
229
+
230
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+ require 'active_admin/batch_actions/views/batch_action_popover'
3
+
4
+ describe ActiveAdmin::BatchActions::BatchActionPopover do
5
+
6
+ let(:the_popover) do
7
+ render_arbre_component do
8
+ batch_action_popover do
9
+ action ActiveAdmin::BatchAction.new( :action_1, "Action 1" )
10
+ action ActiveAdmin::BatchAction.new( :action_2, "Action 2" )
11
+ action ActiveAdmin::BatchAction.new( :action_3, "Action 3" )
12
+ end
13
+ end
14
+ end
15
+
16
+ it "should have an id" do
17
+ the_popover.id.should == "batch_actions_popover"
18
+ end
19
+
20
+ describe "the action list" do
21
+ subject do
22
+ the_popover.find_by_class("popover_contents").first
23
+ end
24
+
25
+ its(:tag_name) { should eql("ul") }
26
+
27
+ its(:content){ should include("class=\"batch_action\" data-action=\"action_1\"") }
28
+ its(:content){ should include("class=\"batch_action\" data-action=\"action_2\"") }
29
+ its(:content){ should include("class=\"batch_action\" data-action=\"action_3\"") }
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Views::BlankSlate do
4
+
5
+ describe "#blank_slate" do
6
+ subject do
7
+ render_arbre_component do
8
+ blank_slate("There are no Posts yet. <a href=\"/posts/new\">Create one</a></span>")
9
+ end
10
+ end
11
+
12
+ its(:tag_name) { should eql 'div' }
13
+ its(:class_list) { should include('blank_slate_container') }
14
+
15
+ its(:content) { should include '<span class="blank_slate">There are no Posts yet. <a href="/posts/new">Create one</a></span>' }
16
+ end
17
+ end
@@ -0,0 +1,142 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Views::Columns do
4
+
5
+ describe "Rendering one column" do
6
+ let(:cols) do
7
+ render_arbre_component do
8
+ columns do
9
+ column { span "Hello World" }
10
+ end
11
+ end
12
+ end
13
+
14
+ it "should have the class .columns" do
15
+ cols.class_list.should include("columns")
16
+ end
17
+
18
+ it "should have one column" do
19
+ cols.children.size.should == 1
20
+ cols.children.first.class_list.should include("column")
21
+ end
22
+
23
+ it "should have one column with the width 100.0%" do
24
+ cols.children.first.attr(:style).should include("width: 100.0%")
25
+ end
26
+ end
27
+
28
+ describe "Rendering two columns" do
29
+ let(:cols) do
30
+ render_arbre_component do
31
+ columns do
32
+ column { span "Hello World" }
33
+ column { span "Hello World" }
34
+ end
35
+ end
36
+ end
37
+
38
+ it "should have two columns" do
39
+ cols.children.size.should == 2
40
+ end
41
+
42
+ it "should have a first column with width 49% and margin 2%" do
43
+ cols.children.first.attr(:style).should == "width: 49.0%; margin-right: 2%;"
44
+ end
45
+
46
+ it "should have a second column with width 49% and no right margin" do
47
+ cols.children.last.attr(:style).should == "width: 49.0%;"
48
+ end
49
+ end
50
+
51
+ describe "Rendering four columns" do
52
+ let(:cols) do
53
+ render_arbre_component do
54
+ columns do
55
+ column { span "Hello World" }
56
+ column { span "Hello World" }
57
+ column { span "Hello World" }
58
+ column { span "Hello World" }
59
+ end
60
+ end
61
+ end
62
+
63
+ it "should have four columns" do
64
+ cols.children.size.should == 4
65
+ end
66
+
67
+
68
+ (0..2).to_a.each do |index|
69
+ it "should have column #{index + 1} with width 49% and margin 2%" do
70
+ cols.children[index].attr(:style).should == "width: 23.5%; margin-right: 2%;"
71
+ end
72
+ end
73
+
74
+ it "should have column 4 with width 49% and no margin" do
75
+ cols.children[3].attr(:style).should == "width: 23.5%;"
76
+ end
77
+ end
78
+
79
+
80
+ describe "Column Spans" do
81
+ let(:cols) do
82
+ render_arbre_component do
83
+ columns do
84
+ column(:span => 2){ "Hello World" }
85
+ column(){ "Hello World" }
86
+ column(){ "Hello World" }
87
+ end
88
+ end
89
+ end
90
+
91
+ it "should set the span when declared" do
92
+ cols.children.first.attr(:style).should == "width: 49.0%; margin-right: 2%;"
93
+ end
94
+
95
+ it "should default to 1 if not passed in" do
96
+ cols.children.last.attr(:style).should == "width: 23.5%;"
97
+ end
98
+ end
99
+
100
+ describe "Column max width" do
101
+
102
+ let(:cols) do
103
+ render_arbre_component do
104
+ columns do
105
+ column(:max_width => "100px"){ "Hello World" }
106
+ column(){ "Hello World" }
107
+ end
108
+ end
109
+ end
110
+
111
+ it "should set the max with if passed in" do
112
+ cols.children.first.attr(:style).should == "width: 49.0%; max-width: 100px; margin-right: 2%;"
113
+ end
114
+
115
+ it "should omit the value if not presetn" do
116
+ cols.children.last.attr(:style).should == "width: 49.0%;"
117
+ end
118
+
119
+ end
120
+
121
+ describe "Column min width" do
122
+
123
+ let(:cols) do
124
+ render_arbre_component do
125
+ columns do
126
+ column(:min_width => "100px"){ "Hello World" }
127
+ column(){ "Hello World" }
128
+ end
129
+ end
130
+ end
131
+
132
+ it "should set the min with if passed in" do
133
+ cols.children.first.attr(:style).should == "width: 49.0%; min-width: 100px; margin-right: 2%;"
134
+ end
135
+
136
+ it "should omit the value if not presetn" do
137
+ cols.children.last.attr(:style).should == "width: 49.0%;"
138
+ end
139
+
140
+ end
141
+
142
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Views::IndexList do
4
+
5
+ describe "#index_list_renderer" do
6
+
7
+
8
+ let(:index_classes) { [ActiveAdmin::Views::IndexAsTable, ActiveAdmin::Views::IndexAsBlock] }
9
+
10
+ let(:helpers) do
11
+ helpers = mock_action_view
12
+ helpers.stub url_for: "/"
13
+ helpers.stub(:params).and_return as: "table"
14
+ helpers
15
+ end
16
+
17
+ subject do
18
+ render_arbre_component({:index_classes => index_classes}, helpers) do
19
+ index_list_renderer(index_classes)
20
+ end
21
+ end
22
+
23
+ its(:tag_name) { should == 'ul' }
24
+
25
+ it "should contain the names of available indexes in links" do
26
+ a_tags = subject.find_by_tag("a")
27
+ a_tags.size.should == 2
28
+ a_tags.first.to_s.should include("Table")
29
+ a_tags.last.to_s.should include("List")
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,227 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Views::PaginatedCollection do
4
+ describe "creating with the dsl" do
5
+
6
+ before :all do
7
+ load_defaults!
8
+ reload_routes!
9
+ end
10
+
11
+ let(:view) do
12
+ view = mock_action_view
13
+ view.request.stub(:query_parameters).and_return page: '1'
14
+ view.request.stub(:path_parameters).and_return controller: 'admin/posts', action: 'index'
15
+ view
16
+ end
17
+
18
+ # Helper to render paginated collections within an arbre context
19
+ def paginated_collection(*args)
20
+ render_arbre_component({:paginated_collection_args => args}, view) do
21
+ paginated_collection(*paginated_collection_args)
22
+ end
23
+ end
24
+
25
+ let(:collection) do
26
+ posts = [Post.new(:title => "First Post"), Post.new(:title => "Second Post"), Post.new(:title => "Third Post")]
27
+ Kaminari.paginate_array(posts).page(1).per(5)
28
+ end
29
+
30
+ before do
31
+ collection.stub(:reorder) { collection }
32
+ end
33
+
34
+ context "when specifying collection" do
35
+ let(:pagination) do
36
+ paginated_collection(collection)
37
+ end
38
+
39
+ it "should set :collection as the passed in collection" do
40
+ pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>all 3</b> posts"
41
+ end
42
+
43
+ it "should raise error if collection has no pagination scope" do
44
+ expect {
45
+ paginated_collection([Post.new, Post.new])
46
+ }.to raise_error(StandardError, "Collection is not a paginated scope. Set collection.page(params[:page]).per(10) before calling :paginated_collection.")
47
+ end
48
+ end
49
+
50
+ context "when specifying :param_name option" do
51
+ let(:collection) do
52
+ posts = 10.times.map{ Post.new }
53
+ Kaminari.paginate_array(posts).page(1).per(5)
54
+ end
55
+
56
+ let(:pagination) { paginated_collection(collection, :param_name => :post_page) }
57
+
58
+ it "should customize the page number parameter in pagination links" do
59
+ pagination.children.last.content.should match(/\/admin\/posts\?post_page=2/)
60
+ end
61
+ end
62
+
63
+ context "when specifying :download_links => false option" do
64
+ let(:collection) do
65
+ posts = 10.times.map{ Post.new }
66
+ Kaminari.paginate_array(posts).page(1).per(5)
67
+ end
68
+
69
+ let(:pagination) { paginated_collection(collection, :download_links => false) }
70
+
71
+ it "should not render download links" do
72
+ pagination.find_by_tag('div').last.content.should_not match(/Download:/)
73
+ end
74
+ end
75
+
76
+ context "when specifying :entry_name option with a single item" do
77
+ let(:collection) do
78
+ posts = [Post.new]
79
+ Kaminari.paginate_array(posts).page(1).per(5)
80
+ end
81
+
82
+ let(:pagination) { paginated_collection(collection, :entry_name => "message") }
83
+
84
+ it "should use :entry_name as the collection name" do
85
+ pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>1</b> message"
86
+ end
87
+ end
88
+
89
+ context "when specifying :entry_name option with multiple items" do
90
+ let(:pagination) { paginated_collection(collection, :entry_name => "message") }
91
+
92
+ it "should use :entry_name as the collection name" do
93
+ pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>all 3</b> messages"
94
+ end
95
+ end
96
+
97
+ context "when specifying :entry_name and :entries_name option with a single item" do
98
+ let(:collection) do
99
+ posts = [Post.new]
100
+ Kaminari.paginate_array(posts).page(1).per(5)
101
+ end
102
+
103
+ let(:pagination) { paginated_collection(collection, :entry_name => "singular", :entries_name => "plural") }
104
+
105
+ it "should use :entry_name as the collection name" do
106
+ pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>1</b> singular"
107
+ end
108
+ end
109
+
110
+ context "when specifying :entry_name and :entries_name option with a multiple items" do
111
+ let(:pagination) { paginated_collection(collection, :entry_name => "singular", :entries_name => "plural") }
112
+
113
+ it "should use :entries_name as the collection name" do
114
+ pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>all 3</b> plural"
115
+ end
116
+ end
117
+
118
+ context "when omitting :entry_name with a single item" do
119
+ let(:collection) do
120
+ posts = [Post.new]
121
+ Kaminari.paginate_array(posts).page(1).per(5)
122
+ end
123
+
124
+ let(:pagination) { paginated_collection(collection) }
125
+
126
+ it "should use 'post' as the collection name when there is no I18n translation" do
127
+ pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>1</b> post"
128
+ end
129
+
130
+ it "should use 'Singular' as the collection name when there is an I18n translation" do
131
+ I18n.stub(:translate) { "Singular" }
132
+ pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>1</b> Singular"
133
+ end
134
+ end
135
+
136
+ context "when omitting :entry_name with multiple items" do
137
+ let(:pagination) { paginated_collection(collection) }
138
+
139
+ it "should use 'posts' as the collection name when there is no I18n translation" do
140
+ pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>all 3</b> posts"
141
+ end
142
+
143
+ it "should use 'Plural' as the collection name when there is an I18n translation" do
144
+ I18n.stub(:translate) { "Plural" }
145
+ pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>all 3</b> Plural"
146
+ end
147
+ end
148
+
149
+ context "when specifying an empty collection" do
150
+ let(:collection) do
151
+ posts = []
152
+ Kaminari.paginate_array(posts).page(1).per(5)
153
+ end
154
+
155
+ let(:pagination) { paginated_collection(collection) }
156
+
157
+ it "should display 'No entries found'" do
158
+ pagination.find_by_class('pagination_information').first.content.should == "No entries found"
159
+ end
160
+ end
161
+
162
+ context "when collection comes from find with GROUP BY" do
163
+ let(:collection) do
164
+ %w{Foo Foo Bar}.each {|title| Post.create(:title => title) }
165
+ Post.select(:title).group(:title).page(1).per(5)
166
+ end
167
+
168
+ let(:pagination) { paginated_collection(collection) }
169
+
170
+ it "should display proper message (including number and not hash)" do
171
+ pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>all 2</b> posts"
172
+ end
173
+ end
174
+
175
+ context "when collection with many pages comes from find with GROUP BY" do
176
+ let(:collection) do
177
+ %w{Foo Foo Bar Baz}.each {|title| Post.create(:title => title) }
178
+ Post.select(:title).group(:title).page(1).per(2)
179
+ end
180
+
181
+ let(:pagination) { paginated_collection(collection) }
182
+
183
+ it "should display proper message (including number and not hash)" do
184
+ pagination.find_by_class('pagination_information').first.content.
185
+ gsub('&nbsp;',' ').should == "Displaying posts <b>1 - 2</b> of <b>3</b> in total"
186
+ end
187
+ end
188
+
189
+ context "when viewing the last page of a collection that has multiple pages" do
190
+ let(:collection) do
191
+ Kaminari.paginate_array([Post.new] * 81).page(3).per(30)
192
+ end
193
+
194
+ let(:pagination) { paginated_collection(collection) }
195
+
196
+ it "should show the proper item counts" do
197
+ pagination.find_by_class('pagination_information').first.content.
198
+ gsub('&nbsp;',' ').should == "Displaying posts <b>61 - 81</b> of <b>81</b> in total"
199
+ end
200
+ end
201
+
202
+ context "with :pagination_total" do
203
+ let(:collection) do
204
+ Kaminari.paginate_array([Post.new] * 256).page(1).per(30)
205
+ end
206
+
207
+ describe "set to false" do
208
+ let(:pagination) { paginated_collection(collection, pagination_total: false) }
209
+
210
+ it "should not show the total item counts" do
211
+ info = pagination.find_by_class('pagination_information').first.content.gsub('&nbsp;',' ')
212
+ info.should eq "Displaying posts <b>1 - 30</b>"
213
+ end
214
+ end
215
+
216
+ describe "set to true" do
217
+ let(:pagination) { paginated_collection(collection, pagination_total: true) }
218
+
219
+ it "should show the total item counts" do
220
+ info = pagination.find_by_class('pagination_information').first.content.gsub('&nbsp;',' ')
221
+ info.should eq "Displaying posts <b>1 - 30</b> of <b>256</b> in total"
222
+ end
223
+ end
224
+ end
225
+
226
+ end
227
+ end