activeadmin-orac 1.0.0.pre4

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 (529) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +49 -0
  3. data/.hound.yml +14 -0
  4. data/.travis.yml +40 -0
  5. data/.yardopts +8 -0
  6. data/CHANGELOG.md +120 -0
  7. data/CODE_OF_CONDUCT.md +22 -0
  8. data/CONTRIBUTING.md +144 -0
  9. data/Gemfile +78 -0
  10. data/Guardfile +8 -0
  11. data/LICENSE +20 -0
  12. data/README.md +102 -0
  13. data/Rakefile +33 -0
  14. data/activeadmin.gemspec +31 -0
  15. data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
  16. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  17. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  18. data/app/assets/images/active_admin/orderable.png +0 -0
  19. data/app/assets/javascripts/active_admin/base.js.coffee +9 -0
  20. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
  21. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
  22. data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +7 -0
  23. data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +10 -0
  24. data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +22 -0
  25. data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +3 -0
  26. data/app/assets/javascripts/active_admin/jquery_ui.js.erb +11 -0
  27. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +39 -0
  28. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +44 -0
  29. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +101 -0
  30. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +19 -0
  31. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +79 -0
  32. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +45 -0
  33. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +42 -0
  34. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +24 -0
  35. data/app/assets/stylesheets/active_admin/_base.scss +41 -0
  36. data/app/assets/stylesheets/active_admin/_forms.scss +333 -0
  37. data/app/assets/stylesheets/active_admin/_header.scss +156 -0
  38. data/app/assets/stylesheets/active_admin/_mixins.scss +1 -0
  39. data/app/assets/stylesheets/active_admin/_typography.scss +100 -0
  40. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +11 -0
  41. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +30 -0
  42. data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
  43. data/app/assets/stylesheets/active_admin/components/_buttons.scss +6 -0
  44. data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
  45. data/app/assets/stylesheets/active_admin/components/_comments.scss +41 -0
  46. data/app/assets/stylesheets/active_admin/components/_date_picker.scss +149 -0
  47. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +152 -0
  48. data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
  49. data/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
  50. data/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
  51. data/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
  52. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
  53. data/app/assets/stylesheets/active_admin/components/_pagination.scss +44 -0
  54. data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
  55. data/app/assets/stylesheets/active_admin/components/_scopes.scss +10 -0
  56. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +16 -0
  57. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
  58. data/app/assets/stylesheets/active_admin/components/_tables.scss +110 -0
  59. data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
  60. data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
  61. data/app/assets/stylesheets/active_admin/mixins/_all.scss +10 -0
  62. data/app/assets/stylesheets/active_admin/mixins/_buttons.scss +65 -0
  63. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
  64. data/app/assets/stylesheets/active_admin/mixins/_reset.scss +165 -0
  65. data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
  66. data/app/assets/stylesheets/active_admin/mixins/_sections.scss +41 -0
  67. data/app/assets/stylesheets/active_admin/mixins/_shadows.scss +15 -0
  68. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
  69. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +17 -0
  70. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +34 -0
  71. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
  72. data/app/assets/stylesheets/active_admin/print.scss +288 -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 +41 -0
  76. data/app/views/active_admin/devise/confirmations/new.html.erb +15 -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 +18 -0
  80. data/app/views/active_admin/devise/passwords/new.html.erb +15 -0
  81. data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
  82. data/app/views/active_admin/devise/sessions/new.html.erb +20 -0
  83. data/app/views/active_admin/devise/shared/_links.erb +27 -0
  84. data/app/views/active_admin/devise/unlocks/new.html.erb +15 -0
  85. data/app/views/active_admin/page/index.html.arb +1 -0
  86. data/app/views/active_admin/resource/edit.html.arb +1 -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 +39 -0
  92. data/config/locales/ar.yml +136 -0
  93. data/config/locales/bg.yml +121 -0
  94. data/config/locales/bs.yml +122 -0
  95. data/config/locales/ca.yml +107 -0
  96. data/config/locales/cs.yml +110 -0
  97. data/config/locales/da.yml +106 -0
  98. data/config/locales/de-CH.yml +102 -0
  99. data/config/locales/de.yml +135 -0
  100. data/config/locales/el.yml +127 -0
  101. data/config/locales/en-GB.yml +98 -0
  102. data/config/locales/en.yml +136 -0
  103. data/config/locales/es-MX.yml +94 -0
  104. data/config/locales/es.yml +136 -0
  105. data/config/locales/fa.yml +120 -0
  106. data/config/locales/fi.yml +113 -0
  107. data/config/locales/fr.yml +119 -0
  108. data/config/locales/he.yml +95 -0
  109. data/config/locales/hr.yml +124 -0
  110. data/config/locales/hu.yml +99 -0
  111. data/config/locales/id.yml +136 -0
  112. data/config/locales/it.yml +136 -0
  113. data/config/locales/ja.yml +136 -0
  114. data/config/locales/ko.yml +121 -0
  115. data/config/locales/lt.yml +121 -0
  116. data/config/locales/lv.yml +93 -0
  117. data/config/locales/nb.yml +121 -0
  118. data/config/locales/nl.yml +134 -0
  119. data/config/locales/pl.yml +98 -0
  120. data/config/locales/pt-BR.yml +136 -0
  121. data/config/locales/pt-PT.yml +93 -0
  122. data/config/locales/ro.yml +97 -0
  123. data/config/locales/ru.yml +140 -0
  124. data/config/locales/sv-SE.yml +134 -0
  125. data/config/locales/tr.yml +136 -0
  126. data/config/locales/uk.yml +137 -0
  127. data/config/locales/vi.yml +94 -0
  128. data/config/locales/zh-CN.yml +112 -0
  129. data/config/locales/zh-TW.yml +136 -0
  130. data/cucumber.yml +3 -0
  131. data/docs/0-installation.md +112 -0
  132. data/docs/1-general-configuration.md +171 -0
  133. data/docs/10-custom-pages.md +106 -0
  134. data/docs/11-decorators.md +55 -0
  135. data/docs/12-arbre-components.md +150 -0
  136. data/docs/13-authorization-adapter.md +248 -0
  137. data/docs/14-gotchas.md +116 -0
  138. data/docs/2-resource-customization.md +422 -0
  139. data/docs/3-index-pages.md +272 -0
  140. data/docs/3-index-pages/custom-index.md +31 -0
  141. data/docs/3-index-pages/index-as-block.md +21 -0
  142. data/docs/3-index-pages/index-as-blog.md +71 -0
  143. data/docs/3-index-pages/index-as-grid.md +29 -0
  144. data/docs/3-index-pages/index-as-table.md +213 -0
  145. data/docs/4-csv-format.md +58 -0
  146. data/docs/5-forms.md +172 -0
  147. data/docs/6-show-pages.md +105 -0
  148. data/docs/7-sidebars.md +71 -0
  149. data/docs/8-custom-actions.md +160 -0
  150. data/docs/9-batch-actions.md +233 -0
  151. data/docs/README.md +24 -0
  152. data/features/action_item.feature +73 -0
  153. data/features/authorization.feature +64 -0
  154. data/features/authorization_cancan.feature +52 -0
  155. data/features/authorization_pundit.feature +37 -0
  156. data/features/belongs_to.feature +66 -0
  157. data/features/breadcrumb.feature +75 -0
  158. data/features/comments/commenting.feature +171 -0
  159. data/features/comments/viewing_index.feature +19 -0
  160. data/features/dashboard.feature +16 -0
  161. data/features/decorators.feature +43 -0
  162. data/features/development_reloading.feature +30 -0
  163. data/features/edit_page.feature +117 -0
  164. data/features/favicon.feature +20 -0
  165. data/features/first_boot.feature +16 -0
  166. data/features/global_navigation.feature +29 -0
  167. data/features/i18n.feature +43 -0
  168. data/features/index/batch_actions.feature +196 -0
  169. data/features/index/filters.feature +161 -0
  170. data/features/index/format_as_csv.feature +203 -0
  171. data/features/index/formats.feature +66 -0
  172. data/features/index/index_as_block.feature +15 -0
  173. data/features/index/index_as_blog.feature +69 -0
  174. data/features/index/index_as_grid.feature +45 -0
  175. data/features/index/index_as_table.feature +291 -0
  176. data/features/index/index_blank_slate.feature +83 -0
  177. data/features/index/index_parameters.feature +75 -0
  178. data/features/index/index_scope_to.feature +56 -0
  179. data/features/index/index_scopes.feature +251 -0
  180. data/features/index/page_title.feature +42 -0
  181. data/features/index/pagination.feature +63 -0
  182. data/features/index/switch_index_view.feature +73 -0
  183. data/features/menu.feature +53 -0
  184. data/features/meta_tags.feature +21 -0
  185. data/features/new_page.feature +109 -0
  186. data/features/registering_assets.feature +34 -0
  187. data/features/registering_pages.feature +148 -0
  188. data/features/registering_resources.feature +33 -0
  189. data/features/renamed_resource.feature +32 -0
  190. data/features/root_to.feature +17 -0
  191. data/features/show/columns.feature +40 -0
  192. data/features/show/default_content.feature +44 -0
  193. data/features/show/page_title.feature +59 -0
  194. data/features/show/tabs.feature +27 -0
  195. data/features/sidebar_sections.feature +210 -0
  196. data/features/site_title.feature +47 -0
  197. data/features/specifying_actions.feature +93 -0
  198. data/features/step_definitions/action_item_steps.rb +7 -0
  199. data/features/step_definitions/action_link_steps.rb +20 -0
  200. data/features/step_definitions/additional_web_steps.rb +81 -0
  201. data/features/step_definitions/asset_steps.rb +15 -0
  202. data/features/step_definitions/attribute_steps.rb +18 -0
  203. data/features/step_definitions/batch_action_steps.rb +81 -0
  204. data/features/step_definitions/blog_steps.rb +3 -0
  205. data/features/step_definitions/breadcrumb_steps.rb +3 -0
  206. data/features/step_definitions/column_steps.rb +8 -0
  207. data/features/step_definitions/comment_steps.rb +12 -0
  208. data/features/step_definitions/configuration_steps.rb +100 -0
  209. data/features/step_definitions/dashboard_steps.rb +15 -0
  210. data/features/step_definitions/factory_steps.rb +35 -0
  211. data/features/step_definitions/filter_steps.rb +39 -0
  212. data/features/step_definitions/flash_steps.rb +11 -0
  213. data/features/step_definitions/format_steps.rb +52 -0
  214. data/features/step_definitions/i18n_steps.rb +3 -0
  215. data/features/step_definitions/index_scope_steps.rb +21 -0
  216. data/features/step_definitions/index_views_steps.rb +3 -0
  217. data/features/step_definitions/layout_steps.rb +3 -0
  218. data/features/step_definitions/member_link_steps.rb +7 -0
  219. data/features/step_definitions/menu_steps.rb +11 -0
  220. data/features/step_definitions/meta_tag_steps.rb +3 -0
  221. data/features/step_definitions/pagination_steps.rb +15 -0
  222. data/features/step_definitions/sidebar_steps.rb +13 -0
  223. data/features/step_definitions/site_title_steps.rb +17 -0
  224. data/features/step_definitions/symbol_leak_steps.rb +3 -0
  225. data/features/step_definitions/tab_steps.rb +8 -0
  226. data/features/step_definitions/table_steps.rb +116 -0
  227. data/features/step_definitions/user_steps.rb +52 -0
  228. data/features/step_definitions/web_steps.rb +85 -0
  229. data/features/sti_resource.feature +65 -0
  230. data/features/strong_parameters.feature +73 -0
  231. data/features/support/env.rb +162 -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 +36 -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 +130 -0
  239. data/lib/active_admin/abstract_view_factory.rb +85 -0
  240. data/lib/active_admin/application.rb +324 -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 +87 -0
  244. data/lib/active_admin/base_controller/authorization.rb +130 -0
  245. data/lib/active_admin/base_controller/menu.rb +38 -0
  246. data/lib/active_admin/batch_actions.rb +16 -0
  247. data/lib/active_admin/batch_actions/controller.rb +40 -0
  248. data/lib/active_admin/batch_actions/resource_extension.rb +159 -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_selector.rb +58 -0
  251. data/lib/active_admin/batch_actions/views/selection_cells.rb +37 -0
  252. data/lib/active_admin/callbacks.rb +88 -0
  253. data/lib/active_admin/cancan_adapter.rb +36 -0
  254. data/lib/active_admin/component.rb +5 -0
  255. data/lib/active_admin/controller_action.rb +12 -0
  256. data/lib/active_admin/csv_builder.rb +129 -0
  257. data/lib/active_admin/dependency.rb +168 -0
  258. data/lib/active_admin/deprecation.rb +35 -0
  259. data/lib/active_admin/devise.rb +80 -0
  260. data/lib/active_admin/dsl.rb +173 -0
  261. data/lib/active_admin/engine.rb +16 -0
  262. data/lib/active_admin/error.rb +62 -0
  263. data/lib/active_admin/event.rb +24 -0
  264. data/lib/active_admin/filters.rb +9 -0
  265. data/lib/active_admin/filters/active.rb +30 -0
  266. data/lib/active_admin/filters/dsl.rb +21 -0
  267. data/lib/active_admin/filters/forms.rb +83 -0
  268. data/lib/active_admin/filters/formtastic_addons.rb +79 -0
  269. data/lib/active_admin/filters/humanized.rb +68 -0
  270. data/lib/active_admin/filters/resource_extension.rb +194 -0
  271. data/lib/active_admin/form_builder.rb +145 -0
  272. data/lib/active_admin/generators/boilerplate.rb +45 -0
  273. data/lib/active_admin/helpers/collection.rb +17 -0
  274. data/lib/active_admin/helpers/i18n.rb +7 -0
  275. data/lib/active_admin/helpers/optional_display.rb +38 -0
  276. data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
  277. data/lib/active_admin/helpers/scope_chain.rb +23 -0
  278. data/lib/active_admin/helpers/settings.rb +115 -0
  279. data/lib/active_admin/inputs.rb +20 -0
  280. data/lib/active_admin/inputs/datepicker_input.rb +20 -0
  281. data/lib/active_admin/inputs/filters/base.rb +44 -0
  282. data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
  283. data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
  284. data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
  285. data/lib/active_admin/inputs/filters/date_picker_input.rb +13 -0
  286. data/lib/active_admin/inputs/filters/date_range_input.rb +36 -0
  287. data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
  288. data/lib/active_admin/inputs/filters/select_input.rb +55 -0
  289. data/lib/active_admin/inputs/filters/string_input.rb +26 -0
  290. data/lib/active_admin/menu.rb +108 -0
  291. data/lib/active_admin/menu_collection.rb +93 -0
  292. data/lib/active_admin/menu_item.rb +97 -0
  293. data/lib/active_admin/namespace.rb +247 -0
  294. data/lib/active_admin/order_clause.rb +26 -0
  295. data/lib/active_admin/orm/active_record.rb +5 -0
  296. data/lib/active_admin/orm/active_record/comments.rb +95 -0
  297. data/lib/active_admin/orm/active_record/comments/comment.rb +45 -0
  298. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +14 -0
  299. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +17 -0
  300. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +23 -0
  301. data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
  302. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +88 -0
  303. data/lib/active_admin/orm/mongoid.rb +1 -0
  304. data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
  305. data/lib/active_admin/page.rb +92 -0
  306. data/lib/active_admin/page_controller.rb +33 -0
  307. data/lib/active_admin/page_dsl.rb +28 -0
  308. data/lib/active_admin/page_presenter.rb +32 -0
  309. data/lib/active_admin/pundit_adapter.rb +68 -0
  310. data/lib/active_admin/reloader.rb +25 -0
  311. data/lib/active_admin/resource.rb +168 -0
  312. data/lib/active_admin/resource/action_items.rb +108 -0
  313. data/lib/active_admin/resource/belongs_to.rb +44 -0
  314. data/lib/active_admin/resource/controllers.rb +19 -0
  315. data/lib/active_admin/resource/includes.rb +12 -0
  316. data/lib/active_admin/resource/menu.rb +64 -0
  317. data/lib/active_admin/resource/naming.rb +62 -0
  318. data/lib/active_admin/resource/page_presenters.rb +82 -0
  319. data/lib/active_admin/resource/pagination.rb +23 -0
  320. data/lib/active_admin/resource/routes.rb +115 -0
  321. data/lib/active_admin/resource/scope_to.rb +74 -0
  322. data/lib/active_admin/resource/scopes.rb +50 -0
  323. data/lib/active_admin/resource/sidebars.rb +28 -0
  324. data/lib/active_admin/resource_collection.rb +72 -0
  325. data/lib/active_admin/resource_controller.rb +51 -0
  326. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  327. data/lib/active_admin/resource_controller/data_access.rb +317 -0
  328. data/lib/active_admin/resource_controller/decorators.rb +102 -0
  329. data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
  330. data/lib/active_admin/resource_controller/scoping.rb +31 -0
  331. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  332. data/lib/active_admin/resource_controller/streaming.rb +43 -0
  333. data/lib/active_admin/resource_dsl.rb +190 -0
  334. data/lib/active_admin/router.rb +106 -0
  335. data/lib/active_admin/scope.rb +56 -0
  336. data/lib/active_admin/sidebar_section.rb +37 -0
  337. data/lib/active_admin/version.rb +3 -0
  338. data/lib/active_admin/view_factory.rb +27 -0
  339. data/lib/active_admin/view_helpers.rb +19 -0
  340. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  341. data/lib/active_admin/view_helpers/auto_link_helper.rb +45 -0
  342. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +33 -0
  343. data/lib/active_admin/view_helpers/display_helper.rb +97 -0
  344. data/lib/active_admin/view_helpers/download_format_links_helper.rb +46 -0
  345. data/lib/active_admin/view_helpers/fields_for.rb +51 -0
  346. data/lib/active_admin/view_helpers/flash_helper.rb +14 -0
  347. data/lib/active_admin/view_helpers/form_helper.rb +20 -0
  348. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +97 -0
  349. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  350. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  351. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  352. data/lib/active_admin/views.rb +8 -0
  353. data/lib/active_admin/views/action_items.rb +17 -0
  354. data/lib/active_admin/views/components/active_admin_form.rb +124 -0
  355. data/lib/active_admin/views/components/attributes_table.rb +94 -0
  356. data/lib/active_admin/views/components/blank_slate.rb +17 -0
  357. data/lib/active_admin/views/components/columns.rb +161 -0
  358. data/lib/active_admin/views/components/dropdown_menu.rb +71 -0
  359. data/lib/active_admin/views/components/index_list.rb +68 -0
  360. data/lib/active_admin/views/components/paginated_collection.rb +163 -0
  361. data/lib/active_admin/views/components/panel.rb +38 -0
  362. data/lib/active_admin/views/components/scopes.rb +66 -0
  363. data/lib/active_admin/views/components/sidebar_section.rb +34 -0
  364. data/lib/active_admin/views/components/site_title.rb +55 -0
  365. data/lib/active_admin/views/components/status_tag.rb +80 -0
  366. data/lib/active_admin/views/components/table_for.rb +218 -0
  367. data/lib/active_admin/views/components/tabs.rb +28 -0
  368. data/lib/active_admin/views/components/unsupported_browser.rb +11 -0
  369. data/lib/active_admin/views/footer.rb +20 -0
  370. data/lib/active_admin/views/header.rb +32 -0
  371. data/lib/active_admin/views/index_as_block.rb +36 -0
  372. data/lib/active_admin/views/index_as_blog.rb +156 -0
  373. data/lib/active_admin/views/index_as_grid.rb +80 -0
  374. data/lib/active_admin/views/index_as_table.rb +373 -0
  375. data/lib/active_admin/views/pages/base.rb +147 -0
  376. data/lib/active_admin/views/pages/form.rb +65 -0
  377. data/lib/active_admin/views/pages/index.rb +163 -0
  378. data/lib/active_admin/views/pages/layout.rb +26 -0
  379. data/lib/active_admin/views/pages/page.rb +30 -0
  380. data/lib/active_admin/views/pages/show.rb +59 -0
  381. data/lib/active_admin/views/tabbed_navigation.rb +66 -0
  382. data/lib/active_admin/views/title_bar.rb +55 -0
  383. data/lib/activeadmin.rb +1 -0
  384. data/lib/generators/active_admin/assets/assets_generator.rb +14 -0
  385. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
  386. data/lib/generators/active_admin/assets/templates/active_admin.scss +17 -0
  387. data/lib/generators/active_admin/devise/devise_generator.rb +65 -0
  388. data/lib/generators/active_admin/install/install_generator.rb +45 -0
  389. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +272 -0
  390. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +30 -0
  391. data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
  392. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +19 -0
  393. data/lib/generators/active_admin/page/USAGE +8 -0
  394. data/lib/generators/active_admin/page/page_generator.rb +12 -0
  395. data/lib/generators/active_admin/page/templates/page.rb +5 -0
  396. data/lib/generators/active_admin/resource/resource_generator.rb +20 -0
  397. data/lib/generators/active_admin/resource/templates/admin.rb +45 -0
  398. data/lib/ransack_ext.rb +20 -0
  399. data/script/local +53 -0
  400. data/script/travis_cache +107 -0
  401. data/script/use_rails +53 -0
  402. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
  403. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +25 -0
  404. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
  405. data/spec/javascripts/fixtures/checkboxes.html +9 -0
  406. data/spec/javascripts/fixtures/flashes.html +2 -0
  407. data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
  408. data/spec/javascripts/helpers/SpecHelper.js +3 -0
  409. data/spec/javascripts/support/jasmine.yml +74 -0
  410. data/spec/javascripts/support/jasmine_config.rb +23 -0
  411. data/spec/javascripts/support/jasmine_runner.rb +32 -0
  412. data/spec/rails_helper.rb +161 -0
  413. data/spec/requests/default_namespace_spec.rb +61 -0
  414. data/spec/requests/javascript_spec.rb +22 -0
  415. data/spec/requests/memory_spec.rb +21 -0
  416. data/spec/requests/stylesheets_spec.rb +18 -0
  417. data/spec/spec_helper.rb +17 -0
  418. data/spec/support/active_admin_request_helpers.rb +27 -0
  419. data/spec/support/deferred_garbage_collection.rb +19 -0
  420. data/spec/support/detect_rails_version.rb +34 -0
  421. data/spec/support/jslint.yml +80 -0
  422. data/spec/support/rails_template.rb +162 -0
  423. data/spec/support/rails_template_with_data.rb +74 -0
  424. data/spec/support/templates/admin/stores.rb +9 -0
  425. data/spec/support/templates/en.yml +8 -0
  426. data/spec/support/templates/manifest.js +3 -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 +134 -0
  438. data/spec/unit/active_admin_spec.rb +11 -0
  439. data/spec/unit/application_spec.rb +165 -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/authorization/index_overriding_spec.rb +23 -0
  444. data/spec/unit/auto_link_spec.rb +69 -0
  445. data/spec/unit/batch_actions/resource_spec.rb +97 -0
  446. data/spec/unit/batch_actions/settings_spec.rb +61 -0
  447. data/spec/unit/belongs_to_spec.rb +65 -0
  448. data/spec/unit/cancan_adapter_spec.rb +43 -0
  449. data/spec/unit/comments_spec.rb +188 -0
  450. data/spec/unit/component_spec.rb +18 -0
  451. data/spec/unit/config_shared_examples.rb +59 -0
  452. data/spec/unit/controller_filters_spec.rb +41 -0
  453. data/spec/unit/csv_builder_spec.rb +303 -0
  454. data/spec/unit/dependency_spec.rb +135 -0
  455. data/spec/unit/devise_spec.rb +96 -0
  456. data/spec/unit/dsl_spec.rb +122 -0
  457. data/spec/unit/filters/filter_form_builder_spec.rb +434 -0
  458. data/spec/unit/filters/humanized_spec.rb +64 -0
  459. data/spec/unit/filters/resource_spec.rb +128 -0
  460. data/spec/unit/form_builder_spec.rb +932 -0
  461. data/spec/unit/generators/install_spec.rb +24 -0
  462. data/spec/unit/helpers/collection_spec.rb +65 -0
  463. data/spec/unit/helpers/scope_chain_spec.rb +36 -0
  464. data/spec/unit/helpers/settings_spec.rb +30 -0
  465. data/spec/unit/i18n_spec.rb +12 -0
  466. data/spec/unit/menu_collection_spec.rb +62 -0
  467. data/spec/unit/menu_item_spec.rb +143 -0
  468. data/spec/unit/menu_spec.rb +71 -0
  469. data/spec/unit/namespace/authorization_spec.rb +27 -0
  470. data/spec/unit/namespace/register_page_spec.rb +73 -0
  471. data/spec/unit/namespace/register_resource_spec.rb +160 -0
  472. data/spec/unit/namespace_spec.rb +103 -0
  473. data/spec/unit/order_clause_spec.rb +81 -0
  474. data/spec/unit/page_controller_spec.rb +5 -0
  475. data/spec/unit/page_spec.rb +78 -0
  476. data/spec/unit/pretty_format_spec.rb +77 -0
  477. data/spec/unit/pundit_adapter_spec.rb +98 -0
  478. data/spec/unit/resource/action_items_spec.rb +65 -0
  479. data/spec/unit/resource/includes_spec.rb +21 -0
  480. data/spec/unit/resource/menu_spec.rb +18 -0
  481. data/spec/unit/resource/naming_spec.rb +122 -0
  482. data/spec/unit/resource/page_presenters_spec.rb +44 -0
  483. data/spec/unit/resource/pagination_spec.rb +38 -0
  484. data/spec/unit/resource/routes_spec.rb +77 -0
  485. data/spec/unit/resource/scopes_spec.rb +50 -0
  486. data/spec/unit/resource/sidebars_spec.rb +43 -0
  487. data/spec/unit/resource_collection_spec.rb +175 -0
  488. data/spec/unit/resource_controller/data_access_spec.rb +140 -0
  489. data/spec/unit/resource_controller/decorators_spec.rb +94 -0
  490. data/spec/unit/resource_controller/sidebars_spec.rb +38 -0
  491. data/spec/unit/resource_controller_spec.rb +269 -0
  492. data/spec/unit/resource_registration_spec.rb +56 -0
  493. data/spec/unit/resource_spec.rb +337 -0
  494. data/spec/unit/routing_spec.rb +185 -0
  495. data/spec/unit/scope_spec.rb +185 -0
  496. data/spec/unit/settings_spec.rb +118 -0
  497. data/spec/unit/view_factory_spec.rb +19 -0
  498. data/spec/unit/view_helpers/breadcrumbs_spec.rb +217 -0
  499. data/spec/unit/view_helpers/display_helper_spec.rb +165 -0
  500. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +39 -0
  501. data/spec/unit/view_helpers/fields_for_spec.rb +50 -0
  502. data/spec/unit/view_helpers/flash_helper_spec.rb +25 -0
  503. data/spec/unit/view_helpers/form_helper_spec.rb +43 -0
  504. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +139 -0
  505. data/spec/unit/views/components/attributes_table_spec.rb +272 -0
  506. data/spec/unit/views/components/batch_action_selector_spec.rb +43 -0
  507. data/spec/unit/views/components/blank_slate_spec.rb +27 -0
  508. data/spec/unit/views/components/columns_spec.rb +189 -0
  509. data/spec/unit/views/components/index_list_spec.rb +35 -0
  510. data/spec/unit/views/components/index_table_for_spec.rb +127 -0
  511. data/spec/unit/views/components/paginated_collection_spec.rb +249 -0
  512. data/spec/unit/views/components/panel_spec.rb +58 -0
  513. data/spec/unit/views/components/sidebar_section_spec.rb +68 -0
  514. data/spec/unit/views/components/site_title_spec.rb +78 -0
  515. data/spec/unit/views/components/status_tag_spec.rb +249 -0
  516. data/spec/unit/views/components/table_for_spec.rb +434 -0
  517. data/spec/unit/views/components/tabs_spec.rb +39 -0
  518. data/spec/unit/views/components/unsupported_browser_spec.rb +41 -0
  519. data/spec/unit/views/index_as_blog_spec.rb +76 -0
  520. data/spec/unit/views/pages/form_spec.rb +51 -0
  521. data/spec/unit/views/pages/index_spec.rb +60 -0
  522. data/spec/unit/views/pages/layout_spec.rb +59 -0
  523. data/spec/unit/views/pages/show_spec.rb +33 -0
  524. data/spec/unit/views/tabbed_navigation_spec.rb +158 -0
  525. data/tasks/docs.rake +37 -0
  526. data/tasks/parallel_tests.rake +66 -0
  527. data/tasks/test.rake +91 -0
  528. data/tasks/yard.rake +9 -0
  529. metadata +974 -0
@@ -0,0 +1,78 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rails_helper'
4
+ require File.expand_path('config_shared_examples', File.dirname(__FILE__))
5
+
6
+ module ActiveAdmin
7
+ describe Page do
8
+
9
+ it_should_behave_like "ActiveAdmin::Resource"
10
+ before { load_defaults! }
11
+
12
+ let(:application){ ActiveAdmin::Application.new }
13
+ let(:namespace){ Namespace.new(application, :admin) }
14
+
15
+ def config(options = {})
16
+ @config ||= namespace.register_page("Chocolate I lØve You!", options)
17
+ end
18
+
19
+ describe "controller name" do
20
+ it "should return a namespaced controller name" do
21
+ expect(config.controller_name).to eq "Admin::ChocolateILoveYouController"
22
+ end
23
+ context "when non namespaced controller" do
24
+ let(:namespace){ ActiveAdmin::Namespace.new(application, :root) }
25
+ it "should return a non namespaced controller name" do
26
+ expect(config.controller_name).to eq "ChocolateILoveYouController"
27
+ end
28
+ end
29
+ end
30
+
31
+ describe "#resource_name" do
32
+ it "returns the name" do
33
+ expect(config.resource_name).to eq "Chocolate I lØve You!"
34
+ end
35
+
36
+ it "returns the singular, lowercase name" do
37
+ expect(config.resource_name.singular).to eq "chocolate i lØve you!"
38
+ end
39
+ end
40
+
41
+ describe "#plural_resource_label" do
42
+ it "returns the singular name" do
43
+ expect(config.plural_resource_label).to eq "Chocolate I lØve You!"
44
+ end
45
+ end
46
+
47
+ describe "#underscored_resource_name" do
48
+ it "returns the resource name underscored" do
49
+ expect(config.underscored_resource_name).to eq "chocolate_i_love_you"
50
+ end
51
+ end
52
+
53
+ describe "#camelized_resource_name" do
54
+ it "returns the resource name camel case" do
55
+ expect(config.camelized_resource_name).to eq "ChocolateILoveYou"
56
+ end
57
+ end
58
+
59
+ describe "#namespace_name" do
60
+ it "returns the name of the namespace" do
61
+ expect(config.namespace_name).to eq "admin"
62
+ end
63
+ end
64
+
65
+ it "should not belong_to anything" do
66
+ expect(config.belongs_to?).to eq false
67
+ end
68
+
69
+ it "should not have any action_items" do
70
+ expect(config.action_items?).to eq false
71
+ end
72
+
73
+ it "should not have any sidebar_sections" do
74
+ expect(config.sidebar_sections?).to eq false
75
+ end
76
+
77
+ end
78
+ end
@@ -0,0 +1,77 @@
1
+ require 'rails_helper'
2
+
3
+ describe "#pretty_format" do
4
+ include ActiveAdmin::ViewHelpers::DisplayHelper
5
+
6
+ def method_missing(*args, &block)
7
+ mock_action_view.send *args, &block
8
+ end
9
+
10
+ {String: 'hello', Fixnum: 23, Float: 5.67, Bignum: 10**30, Symbol: :foo,
11
+ 'Arbre::Element' => Arbre::Element.new.br(:foo)
12
+ }.each do |klass, obj|
13
+ it "should call `to_s` on #{klass}s" do
14
+ expect(obj).to be_a klass.to_s.constantize # safeguard for Bignum
15
+ expect(pretty_format(obj)).to eq obj.to_s
16
+ end
17
+ end
18
+
19
+ context "given a Date or a Time" do
20
+ it "should return a localized Date or Time with long format" do
21
+ t = Time.now
22
+ expect(self).to receive(:localize).with(t, {format: :long}) { "Just Now!" }
23
+ expect(pretty_format(t)).to eq "Just Now!"
24
+ end
25
+
26
+ context "actually do the formatting" do
27
+ it "should actually do the formatting" do
28
+ t = Time.utc(1985,"feb",28,20,15,1)
29
+ expect(pretty_format(t)).to eq "February 28, 1985 20:15"
30
+ end
31
+
32
+ context "apply custom localize format" do
33
+ before do
34
+ ActiveAdmin.application.localize_format = :short
35
+ end
36
+ after do
37
+ ActiveAdmin.application = nil
38
+ end
39
+ it "should actually do the formatting" do
40
+ t = Time.utc(1985, "feb", 28, 20, 15, 1)
41
+
42
+ expect(pretty_format(t)).to eq "28 Feb 20:15"
43
+ end
44
+ end
45
+
46
+ context "with non-English locale" do
47
+ before(:all) do
48
+ @previous_locale = I18n.locale.to_s
49
+ I18n.locale = "es"
50
+ end
51
+ after(:all) do
52
+ I18n.locale = @previous_locale
53
+ end
54
+ it "should return a localized Date or Time with long format for non-english locale" do
55
+ t = Time.utc(1985,"feb",28,20,15,1)
56
+ expect(pretty_format(t)).to eq "28 de febrero de 1985 20:15"
57
+ end
58
+ end
59
+ end
60
+ end
61
+
62
+ context "given an ActiveRecord object" do
63
+ it "should delegate to auto_link" do
64
+ post = Post.new
65
+ expect(self).to receive(:auto_link).with(post) { "model name" }
66
+ expect(pretty_format(post)).to eq "model name"
67
+ end
68
+ end
69
+
70
+ context "given an arbitrary object" do
71
+ it "should delegate to `display_name`" do
72
+ something = Class.new.new
73
+ expect(self).to receive(:display_name).with(something) { "I'm not famous" }
74
+ expect(pretty_format(something)).to eq "I'm not famous"
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,98 @@
1
+ require 'rails_helper'
2
+
3
+ class DefaultPolicy < ApplicationPolicy
4
+ def respond_to_missing?(method, include_private = false)
5
+ method.to_s[0...3] == "foo" || super
6
+ end
7
+
8
+ def method_missing(method, *args, &block)
9
+ if method.to_s[0...3] == "foo"
10
+ method.to_s[4...7] == "yes"
11
+ else
12
+ super
13
+ end
14
+ end
15
+
16
+ class Scope
17
+
18
+ attr_reader :user, :scope
19
+
20
+ def initialize(user, scope)
21
+ @user = user
22
+ @scope = scope
23
+ end
24
+
25
+ def resolve
26
+ scope
27
+ end
28
+ end
29
+ end
30
+
31
+ describe ActiveAdmin::PunditAdapter do
32
+
33
+ describe "full integration" do
34
+
35
+ let(:application) { ActiveAdmin::Application.new }
36
+ let(:namespace) { ActiveAdmin::Namespace.new(application, "Admin") }
37
+ let(:resource) { namespace.register(Post) }
38
+ let(:auth) { namespace.authorization_adapter.new(resource, double) }
39
+ let(:default_policy_klass) { DefaultPolicy }
40
+ let(:default_policy_klass_name) { "DefaultPolicy" }
41
+
42
+ before do
43
+ namespace.authorization_adapter = ActiveAdmin::PunditAdapter
44
+ end
45
+
46
+ it "should initialize the ability stored in the namespace configuration" do
47
+ expect(auth.authorized?(:read, Post)).to eq true
48
+ expect(auth.authorized?(:update, Post)).to eq false
49
+ end
50
+
51
+ it "should scope the collection" do
52
+ class RSpec::Mocks::DoublePolicy < ApplicationPolicy
53
+ class Scope < Struct.new(:user, :scope)
54
+ def resolve
55
+ scope
56
+ end
57
+ end
58
+ end
59
+
60
+ collection = double
61
+ auth.scope_collection(collection, :read)
62
+ expect(collection).to eq collection
63
+ end
64
+
65
+ it "works well with method_missing" do
66
+ allow(auth).to receive(:retrieve_policy).and_return(DefaultPolicy.new(double, double))
67
+ expect(auth.authorized?(:foo_no)).to eq false
68
+ expect(auth.authorized?(:foo_yes)).to eq true
69
+ expect(auth.authorized?(:bar_yes)).to eq false
70
+ end
71
+
72
+ context 'when Pundit is unable to find policy scope' do
73
+ let(:collection) { double("collection", to_sym: :collection) }
74
+ subject(:scope) { auth.scope_collection(collection, :read) }
75
+
76
+ before do
77
+ allow(ActiveAdmin.application).to receive(:pundit_default_policy).and_return default_policy_klass_name
78
+ allow(Pundit).to receive(:policy_scope!) { raise Pundit::NotDefinedError.new }
79
+ end
80
+
81
+ it("should return default policy's scope if defined") { is_expected.to eq(collection) }
82
+ end
83
+
84
+ context "when Pundit is unable to find policy" do
85
+ let(:record) { double }
86
+
87
+ subject(:policy) { auth.retrieve_policy(record) }
88
+
89
+ before do
90
+ allow(ActiveAdmin.application).to receive(:pundit_default_policy).and_return default_policy_klass_name
91
+ allow(Pundit).to receive(:policy!) { raise Pundit::NotDefinedError.new }
92
+ end
93
+
94
+ it("should return default policy instance") { is_expected.to be_instance_of(default_policy_klass) }
95
+ end
96
+ end
97
+
98
+ end
@@ -0,0 +1,65 @@
1
+ require 'rails_helper'
2
+
3
+ describe ActiveAdmin::Resource::ActionItems do
4
+
5
+ let(:resource) do
6
+ namespace = ActiveAdmin::Namespace.new(ActiveAdmin::Application.new, :admin)
7
+ namespace.register(Post)
8
+ end
9
+
10
+ describe "adding a new action item" do
11
+
12
+ before do
13
+ resource.clear_action_items!
14
+ resource.add_action_item :empty do
15
+ # Empty ...
16
+ end
17
+ end
18
+
19
+ it "should add an action item" do
20
+ expect(resource.action_items.size).to eq 1
21
+ end
22
+
23
+ it "should store an instance of ActionItem" do
24
+ expect(resource.action_items.first).to be_an_instance_of(ActiveAdmin::ActionItem)
25
+ end
26
+
27
+ it "should store the block in the action item" do
28
+ expect(resource.action_items.first.block).to_not eq nil
29
+ end
30
+
31
+ end
32
+
33
+ describe "setting an action item to only display on specific controller actions" do
34
+
35
+ before do
36
+ resource.clear_action_items!
37
+ resource.add_action_item :new, only: :index do
38
+ raise StandardError
39
+ end
40
+ resource.add_action_item :edit, only: :show do
41
+ # Empty ...
42
+ end
43
+ end
44
+
45
+ it "should return only relevant action items" do
46
+ expect(resource.action_items_for(:index).size).to eq 1
47
+ expect {
48
+ resource.action_items_for(:index).first.call
49
+ }.to raise_exception(StandardError)
50
+ end
51
+
52
+ end
53
+
54
+ describe "default action items" do
55
+ it "should have 3 action items" do
56
+ expect(resource.action_items.size).to eq 3
57
+ end
58
+
59
+ it 'can be removed by name' do
60
+ resource.remove_action_item :new
61
+ expect(resource.action_items.size).to eq 2
62
+ end
63
+ end
64
+
65
+ end
@@ -0,0 +1,21 @@
1
+ require 'rails_helper'
2
+
3
+ module ActiveAdmin
4
+ describe Resource, "Includes" do
5
+ describe "#includes" do
6
+
7
+ let(:application) { ActiveAdmin::Application.new }
8
+ let(:namespace) { ActiveAdmin::Namespace.new application, :admin }
9
+ let(:resource_config) { ActiveAdmin::Resource.new namespace, Post }
10
+ let(:dsl){ ActiveAdmin::ResourceDSL.new(resource_config, Post) }
11
+
12
+ it "should register the includes in the config" do
13
+ dsl.run_registration_block do
14
+ includes :taggings, :author
15
+ end
16
+ expect(resource_config.includes.size).to eq(2)
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ require 'rails_helper'
2
+
3
+ module ActiveAdmin
4
+ describe Resource, "Menu" do
5
+
6
+ before { load_defaults! }
7
+
8
+ let(:application){ ActiveAdmin::Application.new }
9
+ let(:namespace){ Namespace.new(application, :admin) }
10
+
11
+ def config(options = {})
12
+ @config ||= Resource.new(namespace, Category, options)
13
+ end
14
+
15
+ # TODO...
16
+
17
+ end
18
+ end
@@ -0,0 +1,122 @@
1
+ # -*- coding: UTF-8 -*-
2
+
3
+ require 'rails_helper'
4
+
5
+ module ActiveAdmin
6
+ describe Resource, "Naming" do
7
+
8
+ before { load_defaults! }
9
+
10
+ let(:application){ ActiveAdmin::Application.new }
11
+ let(:namespace){ Namespace.new(application, :admin) }
12
+
13
+ def config(options = {})
14
+ @config ||= Resource.new(namespace, Category, options)
15
+ end
16
+
17
+ module ::Mock class Resource < ActiveRecord::Base; end; end
18
+ module NoActiveModel class Resource; end; end
19
+
20
+ describe "singular resource name" do
21
+ context "when class" do
22
+ it "should be the underscored singular resource name" do
23
+ expect(config.resource_name.singular).to eq "category"
24
+ end
25
+ end
26
+ context "when a class in a module" do
27
+ it "should underscore the module and the class" do
28
+ expect(Resource.new(namespace, Mock::Resource).resource_name.singular).to eq "mock_resource"
29
+ end
30
+ end
31
+ context "when you pass the 'as' option" do
32
+ it "should underscore the passed through string" do
33
+ expect(config(as: "Blog Category").resource_name.singular).to eq "blog_category"
34
+ end
35
+ end
36
+ end
37
+
38
+ describe "resource label" do
39
+ it "should return a pretty name" do
40
+ expect(config.resource_label).to eq "Category"
41
+ end
42
+
43
+ it "should return the plural version" do
44
+ expect(config.plural_resource_label).to eq "Categories"
45
+ end
46
+
47
+ context "when the :as option is given" do
48
+ it "should return the custom name" do
49
+ expect(config(as: "My Category").resource_label).to eq "My Category"
50
+ end
51
+ end
52
+
53
+ context "when a class in a module" do
54
+ it "should include the module and the class" do
55
+ expect(Resource.new(namespace, Mock::Resource).resource_label).to eq "Mock Resource"
56
+ end
57
+
58
+ it "should include the module and the pluralized class" do
59
+ expect(Resource.new(namespace, Mock::Resource).plural_resource_label).to eq "Mock Resources"
60
+ end
61
+ end
62
+
63
+ describe "I18n integration" do
64
+ describe "singular label" do
65
+ it "should return the titleized model_name.human" do
66
+ expect(config.resource_name).to receive(:translate).and_return "Da category"
67
+
68
+ expect(config.resource_label).to eq "Da category"
69
+ end
70
+ end
71
+
72
+ describe "plural label" do
73
+ it "should return the titleized plural version defined by i18n if available" do
74
+ expect(config.resource_name).to receive(:translate).at_least(:once).and_return "Da categories"
75
+ expect(config.plural_resource_label).to eq "Da categories"
76
+ end
77
+ end
78
+
79
+ describe "plural label with not default locale" do
80
+ it "should return the titleized plural version defined by i18n with custom :count if available" do
81
+ expect(config.resource_name).to receive(:translate).at_least(:once).and_return "Категории"
82
+ expect(config.plural_resource_label(count: 3)).to eq "Категории"
83
+ end
84
+ end
85
+
86
+ context "when the :as option is given" do
87
+ describe "singular label" do
88
+ it "should translate the custom name" do
89
+ config = config(as: 'My Category')
90
+ expect(config.resource_name).to receive(:translate).and_return "Translated category"
91
+ expect(config.resource_label).to eq "Translated category"
92
+ end
93
+ end
94
+
95
+ describe "plural label" do
96
+ it "should translate the custom name" do
97
+ config = config(as: 'My Category')
98
+ expect(config.resource_name).to receive(:translate).at_least(:once).and_return "Translated categories"
99
+ expect(config.plural_resource_label).to eq "Translated categories"
100
+ end
101
+ end
102
+ end
103
+
104
+ end
105
+ end
106
+
107
+ describe "duplicate resource names" do
108
+ let(:resource_name) { config.resource_name }
109
+ let(:duplicate_resource_name) { Resource.new(namespace, Category).resource_name }
110
+
111
+ [:==, :===, :eql?].each do |method|
112
+ it "are equivalent when compared with #{method}" do
113
+ expect(resource_name.public_send(method, duplicate_resource_name)).to eq true
114
+ end
115
+ end
116
+
117
+ it "have identical hash values" do
118
+ expect(resource_name.hash).to eq duplicate_resource_name.hash
119
+ end
120
+ end
121
+ end
122
+ end