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
@@ -17,6 +17,17 @@ ActiveAdmin.application.view_factory.show_page.send :include, ActiveAdmin::Comme
17
17
  # Load the model as soon as it's referenced. By that point, Rails & Kaminari will be ready
18
18
  ActiveAdmin.autoload :Comment, 'active_admin/orm/active_record/comments/comment'
19
19
 
20
+ # Hint i18n-tasks about model and attribute translations used by default install
21
+ # i18n-tasks-use t('activerecord.models.comment')
22
+ # i18n-tasks-use t('activerecord.models.active_admin/comment')
23
+ # i18n-tasks-use t('activerecord.attributes.active_admin/comment.author_type')
24
+ # i18n-tasks-use t('activerecord.attributes.active_admin/comment.body')
25
+ # i18n-tasks-use t('activerecord.attributes.active_admin/comment.created_at')
26
+ # i18n-tasks-use t('activerecord.attributes.active_admin/comment.namespace')
27
+ # i18n-tasks-use t('activerecord.attributes.active_admin/comment.resource_type')
28
+ # i18n-tasks-use t('activerecord.attributes.active_admin/comment.updated_at')
29
+ # i18n-tasks-use t('active_admin.scopes.all')
30
+
20
31
  # Walk through all the loaded namespaces after they're loaded
21
32
  ActiveAdmin.after_load do |app|
22
33
  app.namespaces.each do |namespace|
@@ -3,7 +3,7 @@ module ActiveAdmin
3
3
 
4
4
  self.table_name = "#{table_name_prefix}active_admin_comments#{table_name_suffix}"
5
5
 
6
- belongs_to :resource, polymorphic: true
6
+ belongs_to :resource, { polymorphic: true }.merge(ActiveAdmin::Dependency.rails.optional_belongs_to_flag)
7
7
  belongs_to :author, polymorphic: true
8
8
 
9
9
  validates_presence_of :body, :namespace, :resource
@@ -24,6 +24,7 @@ module ActiveAdmin
24
24
  # this action item on.
25
25
  # :except: A single or array of controller actions not to
26
26
  # display this action item on.
27
+ # :priority: A single integer value. To control the display order. Default is 10.
27
28
  def add_action_item(name, options = {}, &block)
28
29
  self.action_items << ActiveAdmin::ActionItem.new(name, options, &block)
29
30
  end
@@ -38,7 +39,7 @@ module ActiveAdmin
38
39
  #
39
40
  # @return [Array] Array of ActionItems for the controller actions
40
41
  def action_items_for(action, render_context = nil)
41
- action_items.select{ |item| item.display_on? action, render_context }
42
+ action_items.select { |item| item.display_on? action, render_context }.sort_by(&:priority)
42
43
  end
43
44
 
44
45
  # Clears all the existing action items for this resource
@@ -110,6 +111,10 @@ module ActiveAdmin
110
111
  def html_class
111
112
  "action_item #{@options[:class]}".rstrip
112
113
  end
114
+
115
+ def priority
116
+ @options[:priority] || 10
117
+ end
113
118
  end
114
119
 
115
120
  end
@@ -2,7 +2,7 @@ module ActiveAdmin
2
2
  class ResourceController < BaseController
3
3
  module Decorators
4
4
 
5
- protected
5
+ protected
6
6
 
7
7
  def apply_decorator(resource)
8
8
  decorate? ? decorator_class.new(resource) : resource
@@ -24,7 +24,7 @@ module ActiveAdmin
24
24
  end
25
25
  end
26
26
 
27
- private
27
+ private
28
28
 
29
29
  def decorate?
30
30
  case action_name
@@ -62,7 +62,7 @@ module ActiveAdmin
62
62
  end
63
63
  end
64
64
 
65
- private
65
+ private
66
66
 
67
67
  def self.wrap!(parent, name)
68
68
  ::Class.new parent do
@@ -15,7 +15,7 @@ module ActiveAdmin
15
15
  # Collection can be scoped conditionally with an :if or :unless proc.
16
16
  def begin_of_association_chain
17
17
  return nil unless active_admin_config.scope_to?(self)
18
- render_in_context(self, active_admin_config.scope_to_method)
18
+ StringSymbolOrProcSetting.new(active_admin_config.scope_to_method).value(self)
19
19
  end
20
20
 
21
21
  # Overriding from InheritedResources::BaseHelpers
@@ -1,108 +1,113 @@
1
1
  module ActiveAdmin
2
+ # @private
2
3
  class Router
3
- def initialize(application)
4
- @application = application
4
+ attr_reader :namespaces, :router
5
+
6
+ def initialize(router:, namespaces:)
7
+ @router, @namespaces = router, namespaces
5
8
  end
6
9
 
7
- # Creates all the necessary routes for the ActiveAdmin configurations
8
- #
9
- # Use this within the routes.rb file:
10
- #
11
- # Application.routes.draw do |map|
12
- # ActiveAdmin.routes(self)
13
- # end
14
- #
15
- def apply(router)
16
- define_root_routes router
17
- define_resource_routes router
10
+ def apply
11
+ define_root_routes
12
+ define_resources_routes
18
13
  end
19
14
 
20
- def define_root_routes(router)
21
- router.instance_exec @application.namespaces do |namespaces|
22
- namespaces.each do |namespace|
23
- if namespace.root?
24
- root namespace.root_to_options.merge(to: namespace.root_to)
25
- else
26
- namespace namespace.name, namespace.route_options.dup do
27
- root namespace.root_to_options.merge(to: namespace.root_to, as: :root)
28
- end
15
+ private
16
+
17
+ def define_root_routes
18
+ namespaces.each do |namespace|
19
+ if namespace.root?
20
+ router.root namespace.root_to_options.merge(to: namespace.root_to)
21
+ else
22
+ router.namespace namespace.name, namespace.route_options.dup do
23
+ router.root namespace.root_to_options.merge(to: namespace.root_to, as: :root)
29
24
  end
30
25
  end
31
26
  end
32
27
  end
33
28
 
34
29
  # Defines the routes for each resource
35
- def define_resource_routes(router)
36
- router.instance_exec @application.namespaces, self do |namespaces, aa_router|
37
- resources = namespaces.flat_map{ |n| n.resources.values }
38
- resources.each do |config|
39
- routes = aa_router.resource_routes(config)
40
-
41
- # Add in the parent if it exists
42
- if config.belongs_to?
43
- belongs_to = routes
44
- routes = Proc.new do
45
- # If it's optional, make the normal resource routes
46
- instance_exec &belongs_to if config.belongs_to_config.optional?
47
-
48
- # Make the nested belongs_to routes
49
- # :only is set to nothing so that we don't clobber any existing routes on the resource
50
- resources config.belongs_to_config.target.resource_name.plural, only: [] do
51
- instance_exec &belongs_to
52
- end
53
- end
54
- end
30
+ def define_resources_routes
31
+ resources = namespaces.flat_map{ |n| n.resources.values }
32
+ resources.each do |config|
33
+ define_resource_routes(config)
34
+ end
35
+ end
55
36
 
56
- # Add on the namespace if required
57
- unless config.namespace.root?
58
- nested = routes
59
- routes = Proc.new do
60
- namespace config.namespace.name, config.namespace.route_options.dup do
61
- instance_exec &nested
62
- end
63
- end
64
- end
37
+ def define_resource_routes(config)
38
+ if config.namespace.root?
39
+ define_routes(config)
40
+ else
41
+ # Add on the namespace if required
42
+ define_namespace(config)
43
+ end
44
+ end
65
45
 
66
- instance_exec &routes
67
- end
46
+ def define_routes(config)
47
+ if config.belongs_to?
48
+ define_belongs_to_routes(config)
49
+ else
50
+ page_or_resource_routes(config)
68
51
  end
69
52
  end
70
53
 
54
+ def page_or_resource_routes(config)
55
+ config.is_a?(Page) ? page_routes(config) : resource_routes(config)
56
+ end
57
+
71
58
  def resource_routes(config)
72
- Proc.new do
73
- # Builds one route for each HTTP verb passed in
74
- build_route = proc{ |verbs, *args|
75
- [*verbs].each{ |verb| send verb, *args }
76
- }
77
- # Deals with +ControllerAction+ instances
78
- build_action = proc{ |action|
79
- build_route.call(action.http_verb, action.name)
80
- }
81
- case config
82
- when ::ActiveAdmin::Resource
83
- resources config.resource_name.route_key, only: config.defined_actions do
84
- member do
85
- config.member_actions.each &build_action
86
- end
87
-
88
- collection do
89
- config.collection_actions.each &build_action
90
- post :batch_action if config.batch_actions_enabled?
91
- end
92
- end
93
- when ::ActiveAdmin::Page
94
- page = config.underscored_resource_name
95
- get "/#{page}" => "#{page}#index"
96
- config.page_actions.each do |action|
97
- Array.wrap(action.http_verb).each do |verb|
98
- build_route.call verb, "/#{page}/#{action.name}" => "#{page}##{action.name}"
99
- end
100
- end
101
- else
102
- raise "Unsupported config class: #{config.class}"
59
+ router.resources config.resource_name.route_key, only: config.defined_actions do
60
+ define_actions(config)
61
+ end
62
+ end
63
+
64
+ def page_routes(config)
65
+ page = config.underscored_resource_name
66
+ router.get "/#{page}" => "#{page}#index"
67
+ config.page_actions.each do |action|
68
+ Array.wrap(action.http_verb).each do |verb|
69
+ build_route(verb, "/#{page}/#{action.name}" => "#{page}##{action.name}")
103
70
  end
104
71
  end
72
+ end
73
+
74
+ # Defines member and collection actions
75
+ def define_actions(config)
76
+ router.member do
77
+ config.member_actions.each { |action| build_action(action) }
78
+ end
79
+
80
+ router.collection do
81
+ config.collection_actions.each { |action| build_action(action) }
82
+ router.post :batch_action if config.batch_actions_enabled?
83
+ end
84
+ end
85
+
86
+ # Deals with +ControllerAction+ instances
87
+ # Builds one route for each HTTP verb passed in
88
+ def build_action(action)
89
+ build_route(action.http_verb, action.name)
90
+ end
91
+
92
+ def build_route(verbs, *args)
93
+ Array.wrap(verbs).each { |verb| router.send(verb, *args) }
94
+ end
95
+
96
+ def define_belongs_to_routes(config)
97
+ # If it's optional, make the normal resource routes
98
+ page_or_resource_routes(config) if config.belongs_to_config.optional?
99
+
100
+ # Make the nested belongs_to routes
101
+ # :only is set to nothing so that we don't clobber any existing routes on the resource
102
+ router.resources config.belongs_to_config.target.resource_name.plural, only: [] do
103
+ page_or_resource_routes(config)
104
+ end
105
+ end
105
106
 
107
+ def define_namespace(config)
108
+ router.namespace config.namespace.name, config.namespace.route_options.dup do
109
+ define_routes(config)
110
+ end
106
111
  end
107
112
  end
108
113
  end
@@ -1,7 +1,7 @@
1
1
  module ActiveAdmin
2
2
  class Scope
3
3
 
4
- attr_reader :scope_method, :id, :scope_block, :display_if_block, :show_count, :default_block
4
+ attr_reader :scope_method, :id, :scope_block, :display_if_block, :show_count, :default_block, :group
5
5
 
6
6
  # Create a Scope
7
7
  #
@@ -24,6 +24,9 @@ module ActiveAdmin
24
24
  # Scope.new ->{Date.today.strftime '%A'}, :published_today
25
25
  # # => Scope with dynamic title using the :published_today scope method
26
26
  #
27
+ # Scope.new :published, nil, group: :status
28
+ # # => Scope with the group :status
29
+ #
27
30
  def initialize(name, method = nil, options = {}, &block)
28
31
  @name, @scope_method = name, method.try(:to_sym)
29
32
 
@@ -42,6 +45,7 @@ module ActiveAdmin
42
45
  @show_count = options.fetch(:show_count, true)
43
46
  @display_if_block = options[:if] || proc{ true }
44
47
  @default_block = options[:default] || proc{ false }
48
+ @group = options[:group].try(:to_sym)
45
49
  end
46
50
 
47
51
  def name
@@ -0,0 +1,19 @@
1
+ module ActiveAdmin
2
+
3
+ class SettingsNode
4
+ class << self
5
+ # Never instantiated. Variables are stored in the singleton_class.
6
+ private_class_method :new
7
+
8
+ # @returns anonymous class with same accessors as the superclass.
9
+ def build(superclass = self)
10
+ Class.new(superclass)
11
+ end
12
+
13
+ def register(name, value)
14
+ class_attribute name
15
+ send "#{name}=", value
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,3 +1,3 @@
1
1
  module ActiveAdmin
2
- VERSION = '1.3.1'
2
+ VERSION = '1.4.0'
3
3
  end
@@ -105,13 +105,12 @@ module ActiveAdmin
105
105
  create_another = params[:create_another]
106
106
  label = @resource.class.model_name.human
107
107
  Arbre::Context.new do
108
- li do
108
+ li class: 'create_another' do
109
109
  input(
110
110
  checked: create_another,
111
111
  id: 'create_another',
112
- class: 'create_another',
113
112
  name: 'create_another',
114
- type: 'checkbox',
113
+ type: 'checkbox'
115
114
  )
116
115
  label(I18n.t('active_admin.create_another', model: label), for: 'create_another')
117
116
  end
@@ -0,0 +1,32 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ # Renders an ActiveAdmin::Menu as a set of unordered list items.
5
+ #
6
+ # This component takes cares of deciding which items should be
7
+ # displayed given the current context and renders them appropriately.
8
+ #
9
+ # The entire component is rendered within one ul element.
10
+ class Menu < Component
11
+ attr_reader :menu
12
+ builder_method :menu
13
+
14
+ # @param [ActiveAdmin::Menu] menu the Menu to render
15
+ # @param [Hash] options the options as passed to the underlying ul element.
16
+ #
17
+ def build(menu, options = {})
18
+ @menu = menu
19
+ super(options)
20
+
21
+ menu.items.each do |item|
22
+ menu_item(item) if helpers.render_in_context self, item.should_display
23
+ end
24
+ children.sort!
25
+ end
26
+
27
+ def tag_name
28
+ 'ul'
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,58 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ # Arbre component used to render ActiveAdmin::MenuItem
5
+ class MenuItem < Component
6
+ builder_method :menu_item
7
+ attr_reader :label
8
+ attr_reader :url
9
+ attr_reader :priority
10
+
11
+ def build(item, options = {})
12
+ super(options.merge(id: item.id))
13
+ @label = helpers.render_in_context self, item.label
14
+ @url = helpers.render_in_context self, item.url
15
+ @priority = item.priority
16
+ @submenu = nil
17
+
18
+ add_class "current" if item.current? assigns[:current_tab]
19
+
20
+ if url
21
+ a label, item.html_options.merge(href: url)
22
+ else
23
+ span label, item.html_options
24
+ end
25
+
26
+ if item.items.any?
27
+ add_class "has_nested"
28
+ @submenu = menu(item)
29
+ end
30
+ end
31
+
32
+ def tag_name
33
+ 'li'
34
+ end
35
+
36
+ # Sorts by priority first, then alphabetically by label if needed.
37
+ def <=>(other)
38
+ result = priority <=> other.priority
39
+ result == 0 ? label <=> other.label : result
40
+ end
41
+
42
+ def visible?
43
+ url.nil? || real_url? || @submenu && @submenu.children.any?
44
+ end
45
+
46
+ def to_s
47
+ visible? ? super : ''
48
+ end
49
+
50
+ private
51
+
52
+ # URL is not nil, empty, or '#'
53
+ def real_url?
54
+ url && url.present? && url != '#'
55
+ end
56
+ end
57
+ end
58
+ end