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,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
+ expect(the_popover.id).to eq "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,172 @@
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
+ expect(cols.class_list).to include("columns")
16
+ end
17
+
18
+ it "should have one column" do
19
+ expect(cols.children.size).to eq 1
20
+ expect(cols.children.first.class_list).to include("column")
21
+ end
22
+
23
+ it "should have one column with the width 100.0%" do
24
+ expect(cols.children.first.attr(:style)).to 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
+ expect(cols.children.size).to eq 2
40
+ end
41
+
42
+ it "should have a first column with width 49% and margin 2%" do
43
+ expect(cols.children.first.attr(:style)).to eq "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
+ expect(cols.children.last.attr(:style)).to eq "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
+ expect(cols.children.size).to eq 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
+ expect(cols.children[index].attr(:style)).to eq "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
+ expect(cols.children[3].attr(:style)).to eq "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
+ expect(cols.children.first.attr(:style)).to eq "width: 49.0%; margin-right: 2%;"
93
+ end
94
+
95
+ it "should default to 1 if not passed in" do
96
+ expect(cols.children.last.attr(:style)).to eq "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
+ expect(cols.children.first.attr(:style)).to eq "width: 49.0%; max-width: 100px; margin-right: 2%;"
113
+ end
114
+
115
+ it "should omit the value if not present" do
116
+ expect(cols.children.last.attr(:style)).to eq "width: 49.0%;"
117
+ end
118
+
119
+ context "when passed an integer value" do
120
+ let(:cols) do
121
+ render_arbre_component do
122
+ columns do
123
+ column(max_width: 100){ "Hello World" }
124
+ column(){ "Hello World" }
125
+ end
126
+ end
127
+ end
128
+
129
+ it "should be treated as pixels" do
130
+ expect(cols.children.first.attr(:style)).to eq "width: 49.0%; max-width: 100px; margin-right: 2%;"
131
+ end
132
+ end
133
+
134
+ end
135
+
136
+ describe "Column min width" do
137
+
138
+ let(:cols) do
139
+ render_arbre_component do
140
+ columns do
141
+ column(min_width: "100px"){ "Hello World" }
142
+ column(){ "Hello World" }
143
+ end
144
+ end
145
+ end
146
+
147
+ it "should set the min with if passed in" do
148
+ expect(cols.children.first.attr(:style)).to eq "width: 49.0%; min-width: 100px; margin-right: 2%;"
149
+ end
150
+
151
+ it "should omit the value if not present" do
152
+ expect(cols.children.last.attr(:style)).to eq "width: 49.0%;"
153
+ end
154
+
155
+ context "when passed an integer value" do
156
+ let(:cols) do
157
+ render_arbre_component do
158
+ columns do
159
+ column(min_width: 100){ "Hello World" }
160
+ column(){ "Hello World" }
161
+ end
162
+ end
163
+ end
164
+
165
+ it "should be treated as pixels" do
166
+ expect(cols.children.first.attr(:style)).to eq "width: 49.0%; min-width: 100px; margin-right: 2%;"
167
+ end
168
+ end
169
+
170
+ end
171
+
172
+ 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 eq 'ul'}
24
+
25
+ it "should contain the names of available indexes in links" do
26
+ a_tags = subject.find_by_tag("a")
27
+ expect(a_tags.size).to eq 2
28
+ expect(a_tags.first.to_s).to include("Table")
29
+ expect(a_tags.last.to_s).to include("List")
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,229 @@
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
+ collection.stub(:scoped) { collection }
33
+ collection.stub(:group_values) { [] } unless collection.respond_to?(:group_values)
34
+ end
35
+
36
+ context "when specifying collection" do
37
+ let(:pagination) do
38
+ paginated_collection(collection)
39
+ end
40
+
41
+ it "should set :collection as the passed in collection" do
42
+ expect(pagination.find_by_class('pagination_information').first.content).to eq "Displaying <b>all 3</b> posts"
43
+ end
44
+
45
+ it "should raise error if collection has no pagination scope" do
46
+ expect {
47
+ paginated_collection([Post.new, Post.new])
48
+ }.to raise_error(StandardError, "Collection is not a paginated scope. Set collection.page(params[:page]).per(10) before calling :paginated_collection.")
49
+ end
50
+ end
51
+
52
+ context "when specifying :param_name option" do
53
+ let(:collection) do
54
+ posts = 10.times.map{ Post.new }
55
+ Kaminari.paginate_array(posts).page(1).per(5)
56
+ end
57
+
58
+ let(:pagination) { paginated_collection(collection, param_name: :post_page) }
59
+
60
+ it "should customize the page number parameter in pagination links" do
61
+ expect(pagination.children.last.content).to match(/\/admin\/posts\?post_page=2/)
62
+ end
63
+ end
64
+
65
+ context "when specifying download_links: false option" do
66
+ let(:collection) do
67
+ posts = 10.times.map{ Post.new }
68
+ Kaminari.paginate_array(posts).page(1).per(5)
69
+ end
70
+
71
+ let(:pagination) { paginated_collection(collection, download_links: false) }
72
+
73
+ it "should not render download links" do
74
+ expect(pagination.find_by_tag('div').last.content).to_not match(/Download:/)
75
+ end
76
+ end
77
+
78
+ context "when specifying :entry_name option with a single item" do
79
+ let(:collection) do
80
+ posts = [Post.new]
81
+ Kaminari.paginate_array(posts).page(1).per(5)
82
+ end
83
+
84
+ let(:pagination) { paginated_collection(collection, entry_name: "message") }
85
+
86
+ it "should use :entry_name as the collection name" do
87
+ expect(pagination.find_by_class('pagination_information').first.content).to eq "Displaying <b>1</b> message"
88
+ end
89
+ end
90
+
91
+ context "when specifying :entry_name option with multiple items" do
92
+ let(:pagination) { paginated_collection(collection, entry_name: "message") }
93
+
94
+ it "should use :entry_name as the collection name" do
95
+ expect(pagination.find_by_class('pagination_information').first.content).to eq "Displaying <b>all 3</b> messages"
96
+ end
97
+ end
98
+
99
+ context "when specifying :entry_name and :entries_name option with a single item" do
100
+ let(:collection) do
101
+ posts = [Post.new]
102
+ Kaminari.paginate_array(posts).page(1).per(5)
103
+ end
104
+
105
+ let(:pagination) { paginated_collection(collection, entry_name: "singular", entries_name: "plural") }
106
+
107
+ it "should use :entry_name as the collection name" do
108
+ expect(pagination.find_by_class('pagination_information').first.content).to eq "Displaying <b>1</b> singular"
109
+ end
110
+ end
111
+
112
+ context "when specifying :entry_name and :entries_name option with a multiple items" do
113
+ let(:pagination) { paginated_collection(collection, entry_name: "singular", entries_name: "plural") }
114
+
115
+ it "should use :entries_name as the collection name" do
116
+ expect(pagination.find_by_class('pagination_information').first.content).to eq "Displaying <b>all 3</b> plural"
117
+ end
118
+ end
119
+
120
+ context "when omitting :entry_name with a single item" do
121
+ let(:collection) do
122
+ posts = [Post.new]
123
+ Kaminari.paginate_array(posts).page(1).per(5)
124
+ end
125
+
126
+ let(:pagination) { paginated_collection(collection) }
127
+
128
+ it "should use 'post' as the collection name when there is no I18n translation" do
129
+ expect(pagination.find_by_class('pagination_information').first.content).to eq "Displaying <b>1</b> post"
130
+ end
131
+
132
+ it "should use 'Singular' as the collection name when there is an I18n translation" do
133
+ I18n.stub(:translate) { "Singular" }
134
+ expect(pagination.find_by_class('pagination_information').first.content).to eq "Displaying <b>1</b> Singular"
135
+ end
136
+ end
137
+
138
+ context "when omitting :entry_name with multiple items" do
139
+ let(:pagination) { paginated_collection(collection) }
140
+
141
+ it "should use 'posts' as the collection name when there is no I18n translation" do
142
+ expect(pagination.find_by_class('pagination_information').first.content).to eq "Displaying <b>all 3</b> posts"
143
+ end
144
+
145
+ it "should use 'Plural' as the collection name when there is an I18n translation" do
146
+ I18n.stub(:translate) { "Plural" }
147
+ expect(pagination.find_by_class('pagination_information').first.content).to eq "Displaying <b>all 3</b> Plural"
148
+ end
149
+ end
150
+
151
+ context "when specifying an empty collection" do
152
+ let(:collection) do
153
+ posts = []
154
+ Kaminari.paginate_array(posts).page(1).per(5)
155
+ end
156
+
157
+ let(:pagination) { paginated_collection(collection) }
158
+
159
+ it "should display 'No entries found'" do
160
+ expect(pagination.find_by_class('pagination_information').first.content).to eq "No entries found"
161
+ end
162
+ end
163
+
164
+ context "when collection comes from find with GROUP BY" do
165
+ let(:collection) do
166
+ %w{Foo Foo Bar}.each {|title| Post.create(title: title) }
167
+ Post.select(:title).group(:title).page(1).per(5)
168
+ end
169
+
170
+ let(:pagination) { paginated_collection(collection) }
171
+
172
+ it "should display proper message (including number and not hash)" do
173
+ expect(pagination.find_by_class('pagination_information').first.content).to eq "Displaying <b>all 2</b> posts"
174
+ end
175
+ end
176
+
177
+ context "when collection with many pages comes from find with GROUP BY" do
178
+ let(:collection) do
179
+ %w{Foo Foo Bar Baz}.each {|title| Post.create(title: title) }
180
+ Post.select(:title).group(:title).page(1).per(2)
181
+ end
182
+
183
+ let(:pagination) { paginated_collection(collection) }
184
+
185
+ it "should display proper message (including number and not hash)" do
186
+ expect(pagination.find_by_class('pagination_information').first.content.gsub('&nbsp;',' ')).
187
+ to eq "Displaying posts <b>1 - 2</b> of <b>3</b> in total"
188
+ end
189
+ end
190
+
191
+ context "when viewing the last page of a collection that has multiple pages" do
192
+ let(:collection) do
193
+ Kaminari.paginate_array([Post.new] * 81).page(3).per(30)
194
+ end
195
+
196
+ let(:pagination) { paginated_collection(collection) }
197
+
198
+ it "should show the proper item counts" do
199
+ expect(pagination.find_by_class('pagination_information').first.content.gsub('&nbsp;',' ')).
200
+ to eq "Displaying posts <b>61 - 81</b> of <b>81</b> in total"
201
+ end
202
+ end
203
+
204
+ context "with :pagination_total" do
205
+ let(:collection) do
206
+ Kaminari.paginate_array([Post.new] * 256).page(1).per(30)
207
+ end
208
+
209
+ describe "set to false" do
210
+ let(:pagination) { paginated_collection(collection, pagination_total: false) }
211
+
212
+ it "should not show the total item counts" do
213
+ info = pagination.find_by_class('pagination_information').first.content.gsub('&nbsp;',' ')
214
+ expect(info).to eq "Displaying posts <b>1 - 30</b>"
215
+ end
216
+ end
217
+
218
+ describe "set to true" do
219
+ let(:pagination) { paginated_collection(collection, pagination_total: true) }
220
+
221
+ it "should show the total item counts" do
222
+ info = pagination.find_by_class('pagination_information').first.content.gsub('&nbsp;',' ')
223
+ expect(info).to eq "Displaying posts <b>1 - 30</b> of <b>256</b> in total"
224
+ end
225
+ end
226
+ end
227
+
228
+ end
229
+ end