activeadmin 1.3.1 → 1.4.0

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 (333) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +467 -0
  3. data/.gitignore +2 -5
  4. data/.rspec +1 -0
  5. data/.rspec_parallel +2 -0
  6. data/.rubocop.yml +25 -7
  7. data/.simplecov +4 -6
  8. data/CHANGELOG.md +175 -83
  9. data/CODE_OF_CONDUCT.md +64 -12
  10. data/CONTRIBUTING.md +77 -40
  11. data/Gemfile +7 -55
  12. data/Gemfile.common +53 -0
  13. data/Gemfile.lock +431 -0
  14. data/README.md +39 -18
  15. data/Rakefile +1 -32
  16. data/app/assets/stylesheets/active_admin/_forms.scss +1 -1
  17. data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
  18. data/app/views/active_admin/devise/confirmations/new.html.erb +1 -1
  19. data/app/views/active_admin/devise/passwords/edit.html.erb +1 -1
  20. data/app/views/active_admin/devise/passwords/new.html.erb +1 -1
  21. data/app/views/active_admin/devise/registrations/new.html.erb +1 -1
  22. data/app/views/active_admin/devise/sessions/new.html.erb +1 -1
  23. data/app/views/active_admin/devise/unlocks/new.html.erb +1 -1
  24. data/app/views/layouts/active_admin_logged_out.html.erb +1 -1
  25. data/bin/install_chromedriver.sh +17 -0
  26. data/config/locales/de.yml +10 -0
  27. data/config/locales/en.yml +19 -1
  28. data/config/locales/es.yml +20 -1
  29. data/config/locales/fi.yml +1 -1
  30. data/config/locales/it.yml +4 -0
  31. data/config/locales/nb.yml +15 -5
  32. data/config/locales/nl.yml +11 -0
  33. data/config/locales/pl.yml +71 -3
  34. data/config/locales/ru.yml +2 -0
  35. data/config/locales/tr.yml +9 -0
  36. data/config/locales/zh-CN.yml +33 -5
  37. data/config/mdl_style.rb +2 -0
  38. data/cucumber.yml +7 -3
  39. data/docs/.gitignore +1 -0
  40. data/docs/1-general-configuration.md +16 -1
  41. data/docs/10-custom-pages.md +14 -0
  42. data/docs/12-arbre-components.md +28 -1
  43. data/docs/13-authorization-adapter.md +36 -17
  44. data/docs/2-resource-customization.md +8 -3
  45. data/docs/3-index-pages.md +17 -0
  46. data/docs/3-index-pages/custom-index.md +1 -1
  47. data/docs/3-index-pages/index-as-blog.md +1 -1
  48. data/docs/3-index-pages/index-as-table.md +5 -5
  49. data/docs/5-forms.md +16 -2
  50. data/docs/8-custom-actions.md +11 -0
  51. data/docs/Gemfile +2 -0
  52. data/docs/Gemfile.lock +249 -0
  53. data/docs/_config.yml +1 -1
  54. data/docs/_includes/toc.html +1 -1
  55. data/docs/_includes/top-menu.html +9 -1
  56. data/docs/documentation.md +1 -1
  57. data/docs/images/tidelift.svg +14 -0
  58. data/docs/stylesheets/main.css +26 -2
  59. data/gemfiles/rails_42.gemfile +2 -2
  60. data/gemfiles/rails_42.gemfile.lock +410 -0
  61. data/gemfiles/rails_50.gemfile +2 -2
  62. data/gemfiles/rails_50.gemfile.lock +424 -0
  63. data/gemfiles/rails_51.gemfile +2 -2
  64. data/gemfiles/rails_51.gemfile.lock +423 -0
  65. data/lib/active_admin/abstract_view_factory.rb +13 -51
  66. data/lib/active_admin/application.rb +42 -142
  67. data/lib/active_admin/application_settings.rb +39 -0
  68. data/lib/active_admin/base_controller/authorization.rb +1 -2
  69. data/lib/active_admin/batch_actions/controller.rb +1 -1
  70. data/lib/active_admin/dependency.rb +8 -0
  71. data/lib/active_admin/deprecation.rb +0 -25
  72. data/lib/active_admin/dynamic_setting.rb +38 -0
  73. data/lib/active_admin/dynamic_settings_node.rb +28 -0
  74. data/lib/active_admin/engine.rb +5 -0
  75. data/lib/active_admin/filters/active_filter.rb +1 -1
  76. data/lib/active_admin/filters/resource_extension.rb +1 -1
  77. data/lib/active_admin/form_builder.rb +95 -60
  78. data/lib/active_admin/inputs/datepicker_input.rb +7 -0
  79. data/lib/active_admin/menu.rb +2 -8
  80. data/lib/active_admin/menu_item.rb +3 -31
  81. data/lib/active_admin/namespace.rb +18 -6
  82. data/lib/active_admin/namespace_settings.rb +107 -0
  83. data/lib/active_admin/orm/active_record/comments.rb +11 -0
  84. data/lib/active_admin/orm/active_record/comments/comment.rb +1 -1
  85. data/lib/active_admin/resource/action_items.rb +6 -1
  86. data/lib/active_admin/resource_controller/decorators.rb +3 -3
  87. data/lib/active_admin/resource_controller/scoping.rb +1 -1
  88. data/lib/active_admin/router.rb +89 -84
  89. data/lib/active_admin/scope.rb +5 -1
  90. data/lib/active_admin/settings_node.rb +19 -0
  91. data/lib/active_admin/version.rb +1 -1
  92. data/lib/active_admin/views/components/active_admin_form.rb +2 -3
  93. data/lib/active_admin/views/components/menu.rb +32 -0
  94. data/lib/active_admin/views/components/menu_item.rb +58 -0
  95. data/lib/active_admin/views/components/scopes.rb +11 -4
  96. data/lib/active_admin/views/components/sidebar.rb +13 -0
  97. data/lib/active_admin/views/components/site_title.rb +5 -6
  98. data/lib/active_admin/views/components/table_for.rb +1 -10
  99. data/lib/active_admin/views/components/tabs.rb +4 -1
  100. data/lib/active_admin/views/footer.rb +2 -6
  101. data/lib/active_admin/views/header.rb +3 -15
  102. data/lib/active_admin/views/index_as_blog.rb +1 -1
  103. data/lib/active_admin/views/index_as_grid.rb +25 -25
  104. data/lib/active_admin/views/index_as_table.rb +6 -6
  105. data/lib/active_admin/views/pages/base.rb +27 -53
  106. data/lib/active_admin/views/tabbed_navigation.rb +4 -59
  107. data/lib/bug_report_templates/active_admin_master.rb +2 -3
  108. data/tasks/application_generator.rb +48 -0
  109. data/tasks/gemfiles.rake +8 -0
  110. data/tasks/lint.rake +96 -7
  111. data/tasks/local.rake +10 -8
  112. data/tasks/test.rake +30 -16
  113. metadata +26 -440
  114. data/.travis.yml +0 -51
  115. data/features/action_item.feature +0 -73
  116. data/features/authorization.feature +0 -64
  117. data/features/authorization_cancan.feature +0 -52
  118. data/features/authorization_pundit.feature +0 -37
  119. data/features/belongs_to.feature +0 -124
  120. data/features/breadcrumb.feature +0 -75
  121. data/features/comments/commenting.feature +0 -178
  122. data/features/comments/viewing_index.feature +0 -19
  123. data/features/create_another.feature +0 -55
  124. data/features/dashboard.feature +0 -16
  125. data/features/decorators.feature +0 -43
  126. data/features/development_reloading.feature +0 -28
  127. data/features/edit_page.feature +0 -116
  128. data/features/favicon.feature +0 -20
  129. data/features/first_boot.feature +0 -16
  130. data/features/footer.feature +0 -28
  131. data/features/global_navigation.feature +0 -29
  132. data/features/i18n.feature +0 -55
  133. data/features/index/batch_actions.feature +0 -218
  134. data/features/index/filters.feature +0 -250
  135. data/features/index/format_as_csv.feature +0 -220
  136. data/features/index/formats.feature +0 -88
  137. data/features/index/index_as_block.feature +0 -15
  138. data/features/index/index_as_blog.feature +0 -69
  139. data/features/index/index_as_grid.feature +0 -45
  140. data/features/index/index_as_table.feature +0 -291
  141. data/features/index/index_blank_slate.feature +0 -83
  142. data/features/index/index_parameters.feature +0 -75
  143. data/features/index/index_scope_to.feature +0 -56
  144. data/features/index/index_scopes.feature +0 -285
  145. data/features/index/page_title.feature +0 -41
  146. data/features/index/pagination.feature +0 -63
  147. data/features/index/switch_index_view.feature +0 -73
  148. data/features/menu.feature +0 -72
  149. data/features/meta_tags.feature +0 -21
  150. data/features/new_page.feature +0 -136
  151. data/features/registering_assets.feature +0 -38
  152. data/features/registering_pages.feature +0 -237
  153. data/features/registering_resources.feature +0 -33
  154. data/features/renamed_resource.feature +0 -30
  155. data/features/root_to.feature +0 -17
  156. data/features/show/attributes_table_title.feature +0 -54
  157. data/features/show/columns.feature +0 -40
  158. data/features/show/default_content.feature +0 -44
  159. data/features/show/page_title.feature +0 -58
  160. data/features/show/tabs.feature +0 -33
  161. data/features/sidebar_sections.feature +0 -210
  162. data/features/site_title.feature +0 -47
  163. data/features/specifying_actions.feature +0 -118
  164. data/features/step_definitions/action_item_steps.rb +0 -7
  165. data/features/step_definitions/action_link_steps.rb +0 -19
  166. data/features/step_definitions/additional_web_steps.rb +0 -81
  167. data/features/step_definitions/asset_steps.rb +0 -15
  168. data/features/step_definitions/attribute_steps.rb +0 -18
  169. data/features/step_definitions/attributes_table_title_steps.rb +0 -11
  170. data/features/step_definitions/batch_action_steps.rb +0 -81
  171. data/features/step_definitions/blog_steps.rb +0 -3
  172. data/features/step_definitions/breadcrumb_steps.rb +0 -3
  173. data/features/step_definitions/column_steps.rb +0 -8
  174. data/features/step_definitions/comment_steps.rb +0 -32
  175. data/features/step_definitions/configuration_steps.rb +0 -100
  176. data/features/step_definitions/dashboard_steps.rb +0 -15
  177. data/features/step_definitions/factory_steps.rb +0 -35
  178. data/features/step_definitions/filter_steps.rb +0 -47
  179. data/features/step_definitions/flash_steps.rb +0 -11
  180. data/features/step_definitions/footer_steps.rb +0 -11
  181. data/features/step_definitions/format_steps.rb +0 -56
  182. data/features/step_definitions/i18n_steps.rb +0 -11
  183. data/features/step_definitions/index_scope_steps.rb +0 -29
  184. data/features/step_definitions/index_views_steps.rb +0 -3
  185. data/features/step_definitions/layout_steps.rb +0 -3
  186. data/features/step_definitions/member_link_steps.rb +0 -7
  187. data/features/step_definitions/menu_steps.rb +0 -11
  188. data/features/step_definitions/meta_tag_steps.rb +0 -3
  189. data/features/step_definitions/pagination_steps.rb +0 -15
  190. data/features/step_definitions/sidebar_steps.rb +0 -11
  191. data/features/step_definitions/site_title_steps.rb +0 -17
  192. data/features/step_definitions/tab_steps.rb +0 -8
  193. data/features/step_definitions/table_steps.rb +0 -116
  194. data/features/step_definitions/user_steps.rb +0 -52
  195. data/features/step_definitions/web_steps.rb +0 -86
  196. data/features/sti_resource.feature +0 -65
  197. data/features/strong_parameters.feature +0 -69
  198. data/features/support/env.rb +0 -122
  199. data/features/support/paths.rb +0 -73
  200. data/features/support/regular_env.rb +0 -7
  201. data/features/support/reload_env.rb +0 -7
  202. data/features/support/selectors.rb +0 -45
  203. data/features/users/logging_in.feature +0 -36
  204. data/features/users/logging_out.feature +0 -13
  205. data/features/users/resetting_password.feature +0 -34
  206. data/gemfiles/rails_52.gemfile +0 -11
  207. data/lib/active_admin/helpers/settings.rb +0 -114
  208. data/spec/bug_report_templates_spec.rb +0 -26
  209. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +0 -50
  210. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +0 -25
  211. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +0 -34
  212. data/spec/javascripts/fixtures/checkboxes.html +0 -9
  213. data/spec/javascripts/fixtures/flashes.html +0 -2
  214. data/spec/javascripts/fixtures/table_checkboxes.html +0 -17
  215. data/spec/javascripts/helpers/SpecHelper.js +0 -3
  216. data/spec/javascripts/support/jasmine.yml +0 -74
  217. data/spec/javascripts/support/jasmine_runner.rb +0 -19
  218. data/spec/rails_helper.rb +0 -59
  219. data/spec/requests/default_namespace_spec.rb +0 -81
  220. data/spec/requests/memory_spec.rb +0 -25
  221. data/spec/requests/stylesheets_spec.rb +0 -18
  222. data/spec/spec_helper.rb +0 -1
  223. data/spec/support/active_admin_integration_spec_helper.rb +0 -73
  224. data/spec/support/active_admin_request_helpers.rb +0 -39
  225. data/spec/support/rails_template.rb +0 -153
  226. data/spec/support/rails_template_with_data.rb +0 -327
  227. data/spec/support/templates/admin/stores.rb +0 -7
  228. data/spec/support/templates/en.yml +0 -8
  229. data/spec/support/templates/manifest.js +0 -3
  230. data/spec/support/templates/policies/active_admin/comment_policy.rb +0 -9
  231. data/spec/support/templates/policies/active_admin/page_policy.rb +0 -18
  232. data/spec/support/templates/policies/admin_user_policy.rb +0 -11
  233. data/spec/support/templates/policies/application_policy.rb +0 -44
  234. data/spec/support/templates/policies/category_policy.rb +0 -7
  235. data/spec/support/templates/policies/post_policy.rb +0 -15
  236. data/spec/support/templates/policies/store_policy.rb +0 -11
  237. data/spec/support/templates/policies/user_policy.rb +0 -11
  238. data/spec/support/templates/post_decorator.rb +0 -24
  239. data/spec/unit/abstract_view_factory_spec.rb +0 -78
  240. data/spec/unit/action_builder_spec.rb +0 -158
  241. data/spec/unit/active_admin_spec.rb +0 -11
  242. data/spec/unit/application_spec.rb +0 -184
  243. data/spec/unit/asset_registration_spec.rb +0 -81
  244. data/spec/unit/authorization/authorization_adapter_spec.rb +0 -61
  245. data/spec/unit/authorization/controller_authorization_spec.rb +0 -43
  246. data/spec/unit/authorization/index_overriding_spec.rb +0 -23
  247. data/spec/unit/auto_link_spec.rb +0 -93
  248. data/spec/unit/batch_actions/resource_spec.rb +0 -84
  249. data/spec/unit/batch_actions/settings_spec.rb +0 -61
  250. data/spec/unit/belongs_to_spec.rb +0 -76
  251. data/spec/unit/cancan_adapter_spec.rb +0 -43
  252. data/spec/unit/comments_spec.rb +0 -176
  253. data/spec/unit/component_spec.rb +0 -18
  254. data/spec/unit/config_shared_examples.rb +0 -59
  255. data/spec/unit/controller_filters_spec.rb +0 -41
  256. data/spec/unit/csv_builder_spec.rb +0 -313
  257. data/spec/unit/dependency_spec.rb +0 -135
  258. data/spec/unit/devise_spec.rb +0 -110
  259. data/spec/unit/dsl_spec.rb +0 -120
  260. data/spec/unit/filters/active_filter_spec.rb +0 -189
  261. data/spec/unit/filters/active_spec.rb +0 -24
  262. data/spec/unit/filters/filter_form_builder_spec.rb +0 -524
  263. data/spec/unit/filters/resource_spec.rb +0 -128
  264. data/spec/unit/form_builder_spec.rb +0 -990
  265. data/spec/unit/generators/install_spec.rb +0 -31
  266. data/spec/unit/helpers/collection_spec.rb +0 -68
  267. data/spec/unit/helpers/output_safety_helper_spec.rb +0 -79
  268. data/spec/unit/helpers/scope_chain_spec.rb +0 -35
  269. data/spec/unit/helpers/settings_spec.rb +0 -30
  270. data/spec/unit/i18n_spec.rb +0 -29
  271. data/spec/unit/localizers/resource_localizer_spec.rb +0 -36
  272. data/spec/unit/menu_collection_spec.rb +0 -62
  273. data/spec/unit/menu_item_spec.rb +0 -141
  274. data/spec/unit/menu_spec.rb +0 -71
  275. data/spec/unit/namespace/authorization_spec.rb +0 -27
  276. data/spec/unit/namespace/register_page_spec.rb +0 -99
  277. data/spec/unit/namespace/register_resource_spec.rb +0 -162
  278. data/spec/unit/namespace_spec.rb +0 -124
  279. data/spec/unit/order_clause_spec.rb +0 -81
  280. data/spec/unit/page_controller_spec.rb +0 -5
  281. data/spec/unit/page_spec.rb +0 -128
  282. data/spec/unit/pretty_format_spec.rb +0 -82
  283. data/spec/unit/pundit_adapter_spec.rb +0 -98
  284. data/spec/unit/resource/action_items_spec.rb +0 -69
  285. data/spec/unit/resource/attributes_spec.rb +0 -49
  286. data/spec/unit/resource/includes_spec.rb +0 -21
  287. data/spec/unit/resource/menu_spec.rb +0 -18
  288. data/spec/unit/resource/naming_spec.rb +0 -122
  289. data/spec/unit/resource/ordering_spec.rb +0 -35
  290. data/spec/unit/resource/page_presenters_spec.rb +0 -44
  291. data/spec/unit/resource/pagination_spec.rb +0 -38
  292. data/spec/unit/resource/routes_spec.rb +0 -125
  293. data/spec/unit/resource/scopes_spec.rb +0 -50
  294. data/spec/unit/resource/sidebars_spec.rb +0 -43
  295. data/spec/unit/resource_collection_spec.rb +0 -175
  296. data/spec/unit/resource_controller/data_access_spec.rb +0 -234
  297. data/spec/unit/resource_controller/decorators_spec.rb +0 -94
  298. data/spec/unit/resource_controller/sidebars_spec.rb +0 -37
  299. data/spec/unit/resource_controller_spec.rb +0 -273
  300. data/spec/unit/resource_registration_spec.rb +0 -61
  301. data/spec/unit/resource_spec.rb +0 -320
  302. data/spec/unit/routing_spec.rb +0 -211
  303. data/spec/unit/scope_spec.rb +0 -209
  304. data/spec/unit/settings_spec.rb +0 -117
  305. data/spec/unit/view_factory_spec.rb +0 -19
  306. data/spec/unit/view_helpers/breadcrumbs_spec.rb +0 -253
  307. data/spec/unit/view_helpers/display_helper_spec.rb +0 -203
  308. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +0 -39
  309. data/spec/unit/view_helpers/fields_for_spec.rb +0 -50
  310. data/spec/unit/view_helpers/flash_helper_spec.rb +0 -24
  311. data/spec/unit/view_helpers/form_helper_spec.rb +0 -42
  312. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -138
  313. data/spec/unit/views/components/attributes_table_spec.rb +0 -271
  314. data/spec/unit/views/components/batch_action_selector_spec.rb +0 -43
  315. data/spec/unit/views/components/blank_slate_spec.rb +0 -27
  316. data/spec/unit/views/components/columns_spec.rb +0 -187
  317. data/spec/unit/views/components/index_list_spec.rb +0 -49
  318. data/spec/unit/views/components/index_table_for_spec.rb +0 -127
  319. data/spec/unit/views/components/paginated_collection_spec.rb +0 -249
  320. data/spec/unit/views/components/panel_spec.rb +0 -58
  321. data/spec/unit/views/components/sidebar_section_spec.rb +0 -68
  322. data/spec/unit/views/components/site_title_spec.rb +0 -76
  323. data/spec/unit/views/components/status_tag_spec.rb +0 -265
  324. data/spec/unit/views/components/table_for_spec.rb +0 -436
  325. data/spec/unit/views/components/tabs_spec.rb +0 -67
  326. data/spec/unit/views/components/unsupported_browser_spec.rb +0 -41
  327. data/spec/unit/views/index_as_blog_spec.rb +0 -76
  328. data/spec/unit/views/pages/form_spec.rb +0 -54
  329. data/spec/unit/views/pages/index_spec.rb +0 -60
  330. data/spec/unit/views/pages/layout_spec.rb +0 -59
  331. data/spec/unit/views/pages/show_spec.rb +0 -32
  332. data/spec/unit/views/tabbed_navigation_spec.rb +0 -158
  333. data/tasks/parallel_tests.rake +0 -66
@@ -1,203 +0,0 @@
1
- require 'rails_helper'
2
- require 'active_admin/view_helpers/active_admin_application_helper'
3
- require 'active_admin/view_helpers/auto_link_helper'
4
- require 'active_admin/view_helpers/display_helper'
5
- require 'active_admin/view_helpers/method_or_proc_helper'
6
-
7
- RSpec.describe ActiveAdmin::ViewHelpers::DisplayHelper do
8
- include ActiveAdmin::ViewHelpers::ActiveAdminApplicationHelper
9
- include ActiveAdmin::ViewHelpers::AutoLinkHelper
10
- include ActiveAdmin::ViewHelpers::DisplayHelper
11
- include MethodOrProcHelper
12
- include ActionView::Helpers::UrlHelper
13
- include ActionView::Helpers::TranslationHelper
14
- include ActionView::Helpers::SanitizeHelper
15
-
16
- def active_admin_namespace
17
- active_admin_application.namespaces[:admin]
18
- end
19
-
20
- def authorized?(*)
21
- true
22
- end
23
-
24
- def url_options
25
- { locale: nil }
26
- end
27
-
28
- before do
29
- load_resources do
30
- ActiveAdmin.register(User)
31
- ActiveAdmin.register(Post){ belongs_to :user, optional: true }
32
- end
33
- end
34
-
35
- describe '#display_name' do
36
- ActiveAdmin::Application.new.display_name_methods.map(&:to_s).each do |m|
37
- it "should return #{m} when defined" do
38
- klass = Class.new do
39
- define_method(m) { m }
40
- end
41
- expect(display_name klass.new).to eq m
42
- end
43
-
44
- it "should sanitize the result of #{m} when defined" do
45
- klass = Class.new do
46
- define_method(m) { '<script>alert(1)</script>' }
47
- end
48
- expect(display_name klass.new).to eq 'alert(1)'
49
- end
50
- end
51
-
52
- it "should memoize the result for the class" do
53
- subject = Class.new.new
54
- expect(subject).to receive(:name).twice.and_return "My Name"
55
-
56
- expect(display_name subject).to eq "My Name"
57
-
58
- expect(ActiveAdmin.application).to_not receive(:display_name_methods)
59
- expect(display_name subject).to eq "My Name"
60
- end
61
-
62
- it "should not call a method if it's an association" do
63
- klass = Class.new
64
- subject = klass.new
65
- allow(klass).to receive(:reflect_on_all_associations).and_return [ double(name: :login) ]
66
- allow(subject).to receive :login
67
- expect(subject).to_not receive :login
68
- allow(subject).to receive(:email).and_return 'foo@bar.baz'
69
-
70
- expect(display_name subject).to eq 'foo@bar.baz'
71
- end
72
-
73
- it "should return `nil` when the passed object is `nil`" do
74
- expect(display_name nil).to eq nil
75
- end
76
-
77
- it "should return 'false' when the passed object is `false`" do
78
- expect(display_name false).to eq "false"
79
- end
80
-
81
- it "should default to `to_s`" do
82
- subject = Class.new.new
83
- expect(display_name subject).to eq sanitize(subject.to_s)
84
- end
85
-
86
- context "when no display name method is defined" do
87
- context "on a Rails model" do
88
- it "should show the model name" do
89
- class ThisModel
90
- extend ActiveModel::Naming
91
- end
92
- subject = ThisModel.new
93
- expect(display_name subject).to eq "This model"
94
- end
95
-
96
- it "should show the model name, plus the ID if in use" do
97
- subject = Tagging.create!
98
- expect(display_name subject).to eq "Tagging #1"
99
- end
100
-
101
- it "should translate the model name" do
102
- with_translation activerecord: {models: {tagging: {one: "Different"}}} do
103
- subject = Tagging.create!
104
- expect(display_name subject).to eq "Different #1"
105
- end
106
- end
107
- end
108
- end
109
- end
110
-
111
- describe '#format_attribute' do
112
- it 'calls the provided block to format the value' do
113
- value = format_attribute double(foo: 2), ->r { r.foo + 1 }
114
-
115
- expect(value).to eq '3'
116
- end
117
-
118
- it 'finds values as methods' do
119
- value = format_attribute double(name: 'Joe'), :name
120
-
121
- expect(value).to eq 'Joe'
122
- end
123
-
124
- it 'finds values from hashes' do
125
- value = format_attribute({id: 100}, :id)
126
-
127
- expect(value).to eq '100'
128
- end
129
-
130
- [1, 1.2, :a_symbol].each do |val|
131
- it "calls to_s to format the value of type #{val.class}" do
132
- value = format_attribute double(foo: val), :foo
133
-
134
- expect(value).to eq val.to_s
135
- end
136
- end
137
-
138
- it 'localizes dates' do
139
- date = Date.parse '2016/02/28'
140
-
141
- value = format_attribute double(date: date), :date
142
-
143
- expect(value).to eq 'February 28, 2016'
144
- end
145
-
146
- it 'localizes times' do
147
- time = Time.parse '2016/02/28 9:34 PM'
148
-
149
- value = format_attribute double(time: time), :time
150
-
151
- expect(value).to eq 'February 28, 2016 21:34'
152
- end
153
-
154
- it 'uses a display_name method for arbitrary objects' do
155
- object = double to_s: :wrong, display_name: :right
156
-
157
- value = format_attribute double(object: object), :object
158
-
159
- expect(value).to eq 'right'
160
- end
161
-
162
- it 'auto-links ActiveRecord records by association' do
163
- post = Post.create! author: User.new
164
-
165
- value = format_attribute post, :author
166
-
167
- expect(value).to match /<a href="\/admin\/users\/\d+"> <\/a>/
168
- end
169
-
170
- it 'auto-links ActiveRecord records & uses a display_name method' do
171
- post = Post.create! author: User.new(first_name: 'A', last_name: 'B')
172
-
173
- value = format_attribute post, :author
174
-
175
- expect(value).to match /<a href="\/admin\/users\/\d+">A B<\/a>/
176
- end
177
-
178
- pending 'auto-links Mongoid records'
179
-
180
- it 'calls status_tag for boolean values' do
181
- post = Post.new starred: true
182
-
183
- value = format_attribute post, :starred
184
-
185
- expect(value.to_s).to eq "<span class=\"status_tag yes\">Yes</span>\n"
186
- end
187
-
188
- it 'calls status_tag for boolean non-database values' do
189
- post = Post.new
190
- post.define_singleton_method(:true_method) do
191
- true
192
- end
193
- post.define_singleton_method(:false_method) do
194
- false
195
- end
196
- true_value = format_attribute post, :true_method
197
- expect(true_value.to_s).to eq "<span class=\"status_tag yes\">Yes</span>\n"
198
- false_value = format_attribute post, :false_method
199
- expect(false_value.to_s).to eq "<span class=\"status_tag no\">No</span>\n"
200
- end
201
-
202
- end
203
- end
@@ -1,39 +0,0 @@
1
- require 'rails_helper'
2
-
3
- RSpec.describe ActiveAdmin::ViewHelpers::DownloadFormatLinksHelper do
4
- describe "class methods" do
5
- before :all do
6
- begin
7
- # The mime type to be used in respond_to |format| style web-services in rails
8
- Mime::Type.register "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", :xlsx
9
- rescue NameError
10
- puts "Mime module not defined. Skipping registration of xlsx"
11
- end
12
- end
13
-
14
- subject do
15
- Class.new do
16
- include ActiveAdmin::ViewHelpers::DownloadFormatLinksHelper
17
- end
18
- end
19
-
20
- it "extends the class to add a formats class method that returns the default formats." do
21
- expect(subject.formats).to eq [:csv, :xml, :json]
22
- end
23
-
24
- it "does not let you alter the formats array directly" do
25
- subject.formats << :xlsx
26
- expect(subject.formats).to eq [:csv, :xml, :json]
27
- end
28
-
29
- it "allows us to add new formats" do
30
- subject.add_format :xlsx
31
- expect(subject.formats).to eq [:csv, :xml, :json, :xlsx]
32
- end
33
-
34
- it "raises an exception if you provide an unregisterd mime type extension" do
35
- expect{ subject.add_format :hoge }.to raise_error 'Please register the hoge mime type with `Mime::Type.register`'
36
- end
37
-
38
- end
39
- end
@@ -1,50 +0,0 @@
1
- require 'rails_helper'
2
-
3
- RSpec.describe ActiveAdmin::ViewHelpers::FormHelper, ".fields_for" do
4
- include ActiveAdmin::ViewHelpers::FormHelper
5
-
6
- it "should skip :action, :controller and :commit" do
7
- expect(fields_for_params(
8
- scope: "All", action: "index", controller: "PostController", commit: "Filter", utf8: "Yes!")).
9
- to eq [ { scope: "All" } ]
10
- end
11
-
12
- it "should skip the except" do
13
- expect(fields_for_params({scope: "All", name: "Greg"}, except: :name)).
14
- to eq [ { scope: "All" } ]
15
- end
16
-
17
- it "should allow an array for the except" do
18
- expect(fields_for_params({scope: "All", name: "Greg", age: "12"}, except: [:name, :age])).
19
- to eq [ { scope: "All" } ]
20
- end
21
-
22
- it "should work with hashes" do
23
- params = fields_for_params(filters: { name: "John", age: "12" })
24
-
25
- expect(params.size).to eq 2
26
- expect(params).to include({"filters[name]" => "John" })
27
- expect(params).to include({ "filters[age]" => "12" })
28
- end
29
-
30
- it "should work with nested hashes" do
31
- expect(fields_for_params(filters: { user: { name: "John" }})).
32
- to eq [ { "filters[user][name]" => "John" } ]
33
- end
34
-
35
- it "should work with arrays" do
36
- expect(fields_for_params(people: ["greg", "emily", "philippe"])).
37
- to eq [ { "people[]" => "greg" },
38
- { "people[]" => "emily" },
39
- { "people[]" => "philippe" } ]
40
- end
41
-
42
- it "should work with symbols" do
43
- expect(fields_for_params(filter: :id)).
44
- to eq [ { filter: "id" } ]
45
- end
46
-
47
- it "should work with booleans" do
48
- expect(fields_for_params(booleantest: false)).to eq [ { booleantest: false } ]
49
- end
50
- end
@@ -1,24 +0,0 @@
1
- require 'rails_helper'
2
-
3
- RSpec.describe ActiveAdmin::ViewHelpers::FlashHelper do
4
-
5
- describe '.flash_messages' do
6
- let(:view) { action_view }
7
-
8
- it "should not include 'timedout' flash messages by default" do
9
- view.request.flash[:alert] = "Alert"
10
- view.request.flash[:timedout] = true
11
- expect(view.flash_messages).to include 'alert'
12
- expect(view.flash_messages).to_not include 'timedout'
13
- end
14
-
15
- it "should not return flash messages included in flash_keys_to_except" do
16
- expect(view.active_admin_application).to receive(:flash_keys_to_except).and_return ["hideme"]
17
- view.request.flash[:alert] = "Alert"
18
- view.request.flash[:hideme] = "Do not show"
19
- expect(view.flash_messages).to include 'alert'
20
- expect(view.flash_messages).to_not include 'hideme'
21
- end
22
-
23
- end
24
- end
@@ -1,42 +0,0 @@
1
- require 'rails_helper'
2
-
3
- RSpec.describe ActiveAdmin::ViewHelpers::FormHelper do
4
-
5
- describe '.active_admin_form_for' do
6
- let(:view) { action_view }
7
- let(:resource) { double 'resource' }
8
- let(:default_options) { { builder: ActiveAdmin::FormBuilder } }
9
-
10
- it 'calls semantic_form_for with the ActiveAdmin form builder' do
11
- expect(view).to receive(:semantic_form_for).with(resource, builder: ActiveAdmin::FormBuilder)
12
- view.active_admin_form_for(resource)
13
- end
14
-
15
- it 'allows the form builder to be customized' do
16
- # We can't use a stub here because options gets marshalled, and a new
17
- # instance built. Any constant will work.
18
- custom_builder = Object
19
- expect(view).to receive(:semantic_form_for).with(resource, builder: custom_builder)
20
- view.active_admin_form_for(resource, builder: custom_builder)
21
- end
22
- end
23
-
24
- describe ".hidden_field_tags_for" do
25
- let(:view) { action_view }
26
-
27
- it "should render hidden field tags for params" do
28
- html = Capybara.string view.hidden_field_tags_for(ActionController::Parameters.new(scope: "All", filter: "None"))
29
- expect(html).to have_selector("input#hidden_active_admin_scope[name=scope][type=hidden][value=All]", visible: false)
30
- expect(html).to have_selector("input#hidden_active_admin_filter[name=filter][type=hidden][value=None]", visible: false)
31
- end
32
-
33
- it "should generate not default id for hidden input" do
34
- expect(view.hidden_field_tags_for(ActionController::Parameters.new(scope: "All"))[/id="([^"]+)"/, 1]).to_not eq "scope"
35
- end
36
-
37
- it "should filter out the field passed via the option :except" do
38
- html = Capybara.string view.hidden_field_tags_for(ActionController::Parameters.new(scope: "All", filter: "None"), except: :filter)
39
- expect(html).to have_selector("input#hidden_active_admin_scope[name=scope][type=hidden][value=All]", visible: false)
40
- end
41
- end
42
- end
@@ -1,138 +0,0 @@
1
- require 'rails_helper'
2
-
3
- RSpec.describe MethodOrProcHelper do
4
- let(:receiver) { double }
5
-
6
- let(:context) do
7
- obj = double receiver_in_context: receiver
8
- obj.extend MethodOrProcHelper
9
- obj
10
- end
11
-
12
- describe "#call_method_or_exec_proc" do
13
-
14
- it "should call the method in the context when a symbol" do
15
- expect(context.call_method_or_exec_proc(:receiver_in_context)).to eq receiver
16
- end
17
-
18
- it "should call the method in the context when a string" do
19
- expect(context.call_method_or_exec_proc("receiver_in_context")).to eq receiver
20
- end
21
-
22
- it "should exec a proc in the context" do
23
- test_proc = Proc.new{ raise "Success" if receiver_in_context }
24
-
25
- expect {
26
- context.call_method_or_exec_proc(test_proc)
27
- }.to raise_error("Success")
28
- end
29
-
30
- end
31
-
32
- describe "#call_method_or_proc_on" do
33
-
34
- [:hello, 'hello'].each do |key|
35
- context "when a #{key.class}" do
36
- it "should call the method on the receiver" do
37
- expect(receiver).to receive(key).and_return 'hello'
38
-
39
- expect(context.call_method_or_proc_on(receiver, key)).to eq 'hello'
40
- end
41
-
42
- it "should receive additional arguments" do
43
- expect(receiver).to receive(key).with(:world).and_return 'hello world'
44
-
45
- expect(context.call_method_or_proc_on(receiver, key, :world)).to eq 'hello world'
46
- end
47
- end
48
- end
49
-
50
- context "when a proc" do
51
-
52
- it "should exec the block in the context and pass in the receiver" do
53
- test_proc = Proc.new do |arg|
54
- raise "Success!" if arg == receiver_in_context
55
- end
56
-
57
- expect {
58
- context.call_method_or_proc_on(receiver, test_proc)
59
- }.to raise_error("Success!")
60
- end
61
-
62
- it "should receive additional arguments" do
63
- test_proc = Proc.new do |arg1, arg2|
64
- raise "Success!" if arg1 == receiver_in_context && arg2 == "Hello"
65
- end
66
-
67
- expect {
68
- context.call_method_or_proc_on(receiver, test_proc, "Hello")
69
- }.to raise_error("Success!")
70
- end
71
-
72
- end
73
-
74
- context "when a proc and exec: false" do
75
-
76
- it "should call the proc and pass in the receiver" do
77
- obj_not_in_context = double
78
-
79
- test_proc = Proc.new do |arg|
80
- raise "Success!" if arg == receiver && obj_not_in_context
81
- end
82
-
83
- expect {
84
- context.call_method_or_proc_on(receiver, test_proc, exec: false)
85
- }.to raise_error("Success!")
86
- end
87
-
88
- end
89
-
90
- end
91
-
92
- describe "#render_or_call_method_or_proc_on" do
93
- [ :symbol, Proc.new{} ].each do |key|
94
- context "when a #{key.class}" do
95
- it "should call #call_method_or_proc_on" do
96
- options = { foo: :bar }
97
- expect(context).to receive(:call_method_or_proc_on).with(receiver, key, options).and_return("data")
98
- expect(context.render_or_call_method_or_proc_on(receiver, key, options)).to eq "data"
99
- end
100
- end
101
- end
102
-
103
- context "when a string" do
104
- it "should return the string" do
105
- expect(context.render_or_call_method_or_proc_on(receiver, "string")).to eq "string"
106
- end
107
- end
108
- end
109
-
110
- describe "#render_in_context" do
111
- let(:args) { [1, 2, 3] }
112
-
113
- context "when a Proc" do
114
- let(:object) { Proc.new { } }
115
-
116
- it "should instance_exec the Proc" do
117
- expect(receiver).to receive(:instance_exec).with(args, &object).and_return("data")
118
- expect(context.render_in_context(receiver, object, args)).to eq "data"
119
- end
120
- end
121
-
122
- context "when a Symbol" do
123
- it "should send the symbol" do
124
- expect(receiver).to receive(:public_send).with(:symbol, args).and_return("data")
125
- expect(context.render_in_context(receiver, :symbol, args)).to eq "data"
126
- end
127
- end
128
-
129
- context "when a Object (not Proc or String)" do
130
- let(:object) { Object.new }
131
-
132
- it "should return the Object" do
133
- expect(context.render_in_context(receiver, object)).to eq object
134
- end
135
- end
136
- end
137
-
138
- end