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.
- checksums.yaml +4 -4
- data/.circleci/config.yml +467 -0
- data/.gitignore +2 -5
- data/.rspec +1 -0
- data/.rspec_parallel +2 -0
- data/.rubocop.yml +25 -7
- data/.simplecov +4 -6
- data/CHANGELOG.md +175 -83
- data/CODE_OF_CONDUCT.md +64 -12
- data/CONTRIBUTING.md +77 -40
- data/Gemfile +7 -55
- data/Gemfile.common +53 -0
- data/Gemfile.lock +431 -0
- data/README.md +39 -18
- data/Rakefile +1 -32
- data/app/assets/stylesheets/active_admin/_forms.scss +1 -1
- data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
- data/app/views/active_admin/devise/confirmations/new.html.erb +1 -1
- data/app/views/active_admin/devise/passwords/edit.html.erb +1 -1
- data/app/views/active_admin/devise/passwords/new.html.erb +1 -1
- data/app/views/active_admin/devise/registrations/new.html.erb +1 -1
- data/app/views/active_admin/devise/sessions/new.html.erb +1 -1
- data/app/views/active_admin/devise/unlocks/new.html.erb +1 -1
- data/app/views/layouts/active_admin_logged_out.html.erb +1 -1
- data/bin/install_chromedriver.sh +17 -0
- data/config/locales/de.yml +10 -0
- data/config/locales/en.yml +19 -1
- data/config/locales/es.yml +20 -1
- data/config/locales/fi.yml +1 -1
- data/config/locales/it.yml +4 -0
- data/config/locales/nb.yml +15 -5
- data/config/locales/nl.yml +11 -0
- data/config/locales/pl.yml +71 -3
- data/config/locales/ru.yml +2 -0
- data/config/locales/tr.yml +9 -0
- data/config/locales/zh-CN.yml +33 -5
- data/config/mdl_style.rb +2 -0
- data/cucumber.yml +7 -3
- data/docs/.gitignore +1 -0
- data/docs/1-general-configuration.md +16 -1
- data/docs/10-custom-pages.md +14 -0
- data/docs/12-arbre-components.md +28 -1
- data/docs/13-authorization-adapter.md +36 -17
- data/docs/2-resource-customization.md +8 -3
- data/docs/3-index-pages.md +17 -0
- data/docs/3-index-pages/custom-index.md +1 -1
- data/docs/3-index-pages/index-as-blog.md +1 -1
- data/docs/3-index-pages/index-as-table.md +5 -5
- data/docs/5-forms.md +16 -2
- data/docs/8-custom-actions.md +11 -0
- data/docs/Gemfile +2 -0
- data/docs/Gemfile.lock +249 -0
- data/docs/_config.yml +1 -1
- data/docs/_includes/toc.html +1 -1
- data/docs/_includes/top-menu.html +9 -1
- data/docs/documentation.md +1 -1
- data/docs/images/tidelift.svg +14 -0
- data/docs/stylesheets/main.css +26 -2
- data/gemfiles/rails_42.gemfile +2 -2
- data/gemfiles/rails_42.gemfile.lock +410 -0
- data/gemfiles/rails_50.gemfile +2 -2
- data/gemfiles/rails_50.gemfile.lock +424 -0
- data/gemfiles/rails_51.gemfile +2 -2
- data/gemfiles/rails_51.gemfile.lock +423 -0
- data/lib/active_admin/abstract_view_factory.rb +13 -51
- data/lib/active_admin/application.rb +42 -142
- data/lib/active_admin/application_settings.rb +39 -0
- data/lib/active_admin/base_controller/authorization.rb +1 -2
- data/lib/active_admin/batch_actions/controller.rb +1 -1
- data/lib/active_admin/dependency.rb +8 -0
- data/lib/active_admin/deprecation.rb +0 -25
- data/lib/active_admin/dynamic_setting.rb +38 -0
- data/lib/active_admin/dynamic_settings_node.rb +28 -0
- data/lib/active_admin/engine.rb +5 -0
- data/lib/active_admin/filters/active_filter.rb +1 -1
- data/lib/active_admin/filters/resource_extension.rb +1 -1
- data/lib/active_admin/form_builder.rb +95 -60
- data/lib/active_admin/inputs/datepicker_input.rb +7 -0
- data/lib/active_admin/menu.rb +2 -8
- data/lib/active_admin/menu_item.rb +3 -31
- data/lib/active_admin/namespace.rb +18 -6
- data/lib/active_admin/namespace_settings.rb +107 -0
- data/lib/active_admin/orm/active_record/comments.rb +11 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +1 -1
- data/lib/active_admin/resource/action_items.rb +6 -1
- data/lib/active_admin/resource_controller/decorators.rb +3 -3
- data/lib/active_admin/resource_controller/scoping.rb +1 -1
- data/lib/active_admin/router.rb +89 -84
- data/lib/active_admin/scope.rb +5 -1
- data/lib/active_admin/settings_node.rb +19 -0
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/views/components/active_admin_form.rb +2 -3
- data/lib/active_admin/views/components/menu.rb +32 -0
- data/lib/active_admin/views/components/menu_item.rb +58 -0
- data/lib/active_admin/views/components/scopes.rb +11 -4
- data/lib/active_admin/views/components/sidebar.rb +13 -0
- data/lib/active_admin/views/components/site_title.rb +5 -6
- data/lib/active_admin/views/components/table_for.rb +1 -10
- data/lib/active_admin/views/components/tabs.rb +4 -1
- data/lib/active_admin/views/footer.rb +2 -6
- data/lib/active_admin/views/header.rb +3 -15
- data/lib/active_admin/views/index_as_blog.rb +1 -1
- data/lib/active_admin/views/index_as_grid.rb +25 -25
- data/lib/active_admin/views/index_as_table.rb +6 -6
- data/lib/active_admin/views/pages/base.rb +27 -53
- data/lib/active_admin/views/tabbed_navigation.rb +4 -59
- data/lib/bug_report_templates/active_admin_master.rb +2 -3
- data/tasks/application_generator.rb +48 -0
- data/tasks/gemfiles.rake +8 -0
- data/tasks/lint.rake +96 -7
- data/tasks/local.rake +10 -8
- data/tasks/test.rake +30 -16
- metadata +26 -440
- data/.travis.yml +0 -51
- data/features/action_item.feature +0 -73
- data/features/authorization.feature +0 -64
- data/features/authorization_cancan.feature +0 -52
- data/features/authorization_pundit.feature +0 -37
- data/features/belongs_to.feature +0 -124
- data/features/breadcrumb.feature +0 -75
- data/features/comments/commenting.feature +0 -178
- data/features/comments/viewing_index.feature +0 -19
- data/features/create_another.feature +0 -55
- data/features/dashboard.feature +0 -16
- data/features/decorators.feature +0 -43
- data/features/development_reloading.feature +0 -28
- data/features/edit_page.feature +0 -116
- data/features/favicon.feature +0 -20
- data/features/first_boot.feature +0 -16
- data/features/footer.feature +0 -28
- data/features/global_navigation.feature +0 -29
- data/features/i18n.feature +0 -55
- data/features/index/batch_actions.feature +0 -218
- data/features/index/filters.feature +0 -250
- data/features/index/format_as_csv.feature +0 -220
- data/features/index/formats.feature +0 -88
- data/features/index/index_as_block.feature +0 -15
- data/features/index/index_as_blog.feature +0 -69
- data/features/index/index_as_grid.feature +0 -45
- data/features/index/index_as_table.feature +0 -291
- data/features/index/index_blank_slate.feature +0 -83
- data/features/index/index_parameters.feature +0 -75
- data/features/index/index_scope_to.feature +0 -56
- data/features/index/index_scopes.feature +0 -285
- data/features/index/page_title.feature +0 -41
- data/features/index/pagination.feature +0 -63
- data/features/index/switch_index_view.feature +0 -73
- data/features/menu.feature +0 -72
- data/features/meta_tags.feature +0 -21
- data/features/new_page.feature +0 -136
- data/features/registering_assets.feature +0 -38
- data/features/registering_pages.feature +0 -237
- data/features/registering_resources.feature +0 -33
- data/features/renamed_resource.feature +0 -30
- data/features/root_to.feature +0 -17
- data/features/show/attributes_table_title.feature +0 -54
- data/features/show/columns.feature +0 -40
- data/features/show/default_content.feature +0 -44
- data/features/show/page_title.feature +0 -58
- data/features/show/tabs.feature +0 -33
- data/features/sidebar_sections.feature +0 -210
- data/features/site_title.feature +0 -47
- data/features/specifying_actions.feature +0 -118
- data/features/step_definitions/action_item_steps.rb +0 -7
- data/features/step_definitions/action_link_steps.rb +0 -19
- data/features/step_definitions/additional_web_steps.rb +0 -81
- data/features/step_definitions/asset_steps.rb +0 -15
- data/features/step_definitions/attribute_steps.rb +0 -18
- data/features/step_definitions/attributes_table_title_steps.rb +0 -11
- data/features/step_definitions/batch_action_steps.rb +0 -81
- data/features/step_definitions/blog_steps.rb +0 -3
- data/features/step_definitions/breadcrumb_steps.rb +0 -3
- data/features/step_definitions/column_steps.rb +0 -8
- data/features/step_definitions/comment_steps.rb +0 -32
- data/features/step_definitions/configuration_steps.rb +0 -100
- data/features/step_definitions/dashboard_steps.rb +0 -15
- data/features/step_definitions/factory_steps.rb +0 -35
- data/features/step_definitions/filter_steps.rb +0 -47
- data/features/step_definitions/flash_steps.rb +0 -11
- data/features/step_definitions/footer_steps.rb +0 -11
- data/features/step_definitions/format_steps.rb +0 -56
- data/features/step_definitions/i18n_steps.rb +0 -11
- data/features/step_definitions/index_scope_steps.rb +0 -29
- data/features/step_definitions/index_views_steps.rb +0 -3
- data/features/step_definitions/layout_steps.rb +0 -3
- data/features/step_definitions/member_link_steps.rb +0 -7
- data/features/step_definitions/menu_steps.rb +0 -11
- data/features/step_definitions/meta_tag_steps.rb +0 -3
- data/features/step_definitions/pagination_steps.rb +0 -15
- data/features/step_definitions/sidebar_steps.rb +0 -11
- data/features/step_definitions/site_title_steps.rb +0 -17
- data/features/step_definitions/tab_steps.rb +0 -8
- data/features/step_definitions/table_steps.rb +0 -116
- data/features/step_definitions/user_steps.rb +0 -52
- data/features/step_definitions/web_steps.rb +0 -86
- data/features/sti_resource.feature +0 -65
- data/features/strong_parameters.feature +0 -69
- data/features/support/env.rb +0 -122
- data/features/support/paths.rb +0 -73
- data/features/support/regular_env.rb +0 -7
- data/features/support/reload_env.rb +0 -7
- data/features/support/selectors.rb +0 -45
- data/features/users/logging_in.feature +0 -36
- data/features/users/logging_out.feature +0 -13
- data/features/users/resetting_password.feature +0 -34
- data/gemfiles/rails_52.gemfile +0 -11
- data/lib/active_admin/helpers/settings.rb +0 -114
- data/spec/bug_report_templates_spec.rb +0 -26
- data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +0 -50
- data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +0 -25
- data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +0 -34
- data/spec/javascripts/fixtures/checkboxes.html +0 -9
- data/spec/javascripts/fixtures/flashes.html +0 -2
- data/spec/javascripts/fixtures/table_checkboxes.html +0 -17
- data/spec/javascripts/helpers/SpecHelper.js +0 -3
- data/spec/javascripts/support/jasmine.yml +0 -74
- data/spec/javascripts/support/jasmine_runner.rb +0 -19
- data/spec/rails_helper.rb +0 -59
- data/spec/requests/default_namespace_spec.rb +0 -81
- data/spec/requests/memory_spec.rb +0 -25
- data/spec/requests/stylesheets_spec.rb +0 -18
- data/spec/spec_helper.rb +0 -1
- data/spec/support/active_admin_integration_spec_helper.rb +0 -73
- data/spec/support/active_admin_request_helpers.rb +0 -39
- data/spec/support/rails_template.rb +0 -153
- data/spec/support/rails_template_with_data.rb +0 -327
- data/spec/support/templates/admin/stores.rb +0 -7
- data/spec/support/templates/en.yml +0 -8
- data/spec/support/templates/manifest.js +0 -3
- data/spec/support/templates/policies/active_admin/comment_policy.rb +0 -9
- data/spec/support/templates/policies/active_admin/page_policy.rb +0 -18
- data/spec/support/templates/policies/admin_user_policy.rb +0 -11
- data/spec/support/templates/policies/application_policy.rb +0 -44
- data/spec/support/templates/policies/category_policy.rb +0 -7
- data/spec/support/templates/policies/post_policy.rb +0 -15
- data/spec/support/templates/policies/store_policy.rb +0 -11
- data/spec/support/templates/policies/user_policy.rb +0 -11
- data/spec/support/templates/post_decorator.rb +0 -24
- data/spec/unit/abstract_view_factory_spec.rb +0 -78
- data/spec/unit/action_builder_spec.rb +0 -158
- data/spec/unit/active_admin_spec.rb +0 -11
- data/spec/unit/application_spec.rb +0 -184
- data/spec/unit/asset_registration_spec.rb +0 -81
- data/spec/unit/authorization/authorization_adapter_spec.rb +0 -61
- data/spec/unit/authorization/controller_authorization_spec.rb +0 -43
- data/spec/unit/authorization/index_overriding_spec.rb +0 -23
- data/spec/unit/auto_link_spec.rb +0 -93
- data/spec/unit/batch_actions/resource_spec.rb +0 -84
- data/spec/unit/batch_actions/settings_spec.rb +0 -61
- data/spec/unit/belongs_to_spec.rb +0 -76
- data/spec/unit/cancan_adapter_spec.rb +0 -43
- data/spec/unit/comments_spec.rb +0 -176
- data/spec/unit/component_spec.rb +0 -18
- data/spec/unit/config_shared_examples.rb +0 -59
- data/spec/unit/controller_filters_spec.rb +0 -41
- data/spec/unit/csv_builder_spec.rb +0 -313
- data/spec/unit/dependency_spec.rb +0 -135
- data/spec/unit/devise_spec.rb +0 -110
- data/spec/unit/dsl_spec.rb +0 -120
- data/spec/unit/filters/active_filter_spec.rb +0 -189
- data/spec/unit/filters/active_spec.rb +0 -24
- data/spec/unit/filters/filter_form_builder_spec.rb +0 -524
- data/spec/unit/filters/resource_spec.rb +0 -128
- data/spec/unit/form_builder_spec.rb +0 -990
- data/spec/unit/generators/install_spec.rb +0 -31
- data/spec/unit/helpers/collection_spec.rb +0 -68
- data/spec/unit/helpers/output_safety_helper_spec.rb +0 -79
- data/spec/unit/helpers/scope_chain_spec.rb +0 -35
- data/spec/unit/helpers/settings_spec.rb +0 -30
- data/spec/unit/i18n_spec.rb +0 -29
- data/spec/unit/localizers/resource_localizer_spec.rb +0 -36
- data/spec/unit/menu_collection_spec.rb +0 -62
- data/spec/unit/menu_item_spec.rb +0 -141
- data/spec/unit/menu_spec.rb +0 -71
- data/spec/unit/namespace/authorization_spec.rb +0 -27
- data/spec/unit/namespace/register_page_spec.rb +0 -99
- data/spec/unit/namespace/register_resource_spec.rb +0 -162
- data/spec/unit/namespace_spec.rb +0 -124
- data/spec/unit/order_clause_spec.rb +0 -81
- data/spec/unit/page_controller_spec.rb +0 -5
- data/spec/unit/page_spec.rb +0 -128
- data/spec/unit/pretty_format_spec.rb +0 -82
- data/spec/unit/pundit_adapter_spec.rb +0 -98
- data/spec/unit/resource/action_items_spec.rb +0 -69
- data/spec/unit/resource/attributes_spec.rb +0 -49
- data/spec/unit/resource/includes_spec.rb +0 -21
- data/spec/unit/resource/menu_spec.rb +0 -18
- data/spec/unit/resource/naming_spec.rb +0 -122
- data/spec/unit/resource/ordering_spec.rb +0 -35
- data/spec/unit/resource/page_presenters_spec.rb +0 -44
- data/spec/unit/resource/pagination_spec.rb +0 -38
- data/spec/unit/resource/routes_spec.rb +0 -125
- data/spec/unit/resource/scopes_spec.rb +0 -50
- data/spec/unit/resource/sidebars_spec.rb +0 -43
- data/spec/unit/resource_collection_spec.rb +0 -175
- data/spec/unit/resource_controller/data_access_spec.rb +0 -234
- data/spec/unit/resource_controller/decorators_spec.rb +0 -94
- data/spec/unit/resource_controller/sidebars_spec.rb +0 -37
- data/spec/unit/resource_controller_spec.rb +0 -273
- data/spec/unit/resource_registration_spec.rb +0 -61
- data/spec/unit/resource_spec.rb +0 -320
- data/spec/unit/routing_spec.rb +0 -211
- data/spec/unit/scope_spec.rb +0 -209
- data/spec/unit/settings_spec.rb +0 -117
- data/spec/unit/view_factory_spec.rb +0 -19
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +0 -253
- data/spec/unit/view_helpers/display_helper_spec.rb +0 -203
- data/spec/unit/view_helpers/download_format_links_helper_spec.rb +0 -39
- data/spec/unit/view_helpers/fields_for_spec.rb +0 -50
- data/spec/unit/view_helpers/flash_helper_spec.rb +0 -24
- data/spec/unit/view_helpers/form_helper_spec.rb +0 -42
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -138
- data/spec/unit/views/components/attributes_table_spec.rb +0 -271
- data/spec/unit/views/components/batch_action_selector_spec.rb +0 -43
- data/spec/unit/views/components/blank_slate_spec.rb +0 -27
- data/spec/unit/views/components/columns_spec.rb +0 -187
- data/spec/unit/views/components/index_list_spec.rb +0 -49
- data/spec/unit/views/components/index_table_for_spec.rb +0 -127
- data/spec/unit/views/components/paginated_collection_spec.rb +0 -249
- data/spec/unit/views/components/panel_spec.rb +0 -58
- data/spec/unit/views/components/sidebar_section_spec.rb +0 -68
- data/spec/unit/views/components/site_title_spec.rb +0 -76
- data/spec/unit/views/components/status_tag_spec.rb +0 -265
- data/spec/unit/views/components/table_for_spec.rb +0 -436
- data/spec/unit/views/components/tabs_spec.rb +0 -67
- data/spec/unit/views/components/unsupported_browser_spec.rb +0 -41
- data/spec/unit/views/index_as_blog_spec.rb +0 -76
- data/spec/unit/views/pages/form_spec.rb +0 -54
- data/spec/unit/views/pages/index_spec.rb +0 -60
- data/spec/unit/views/pages/layout_spec.rb +0 -59
- data/spec/unit/views/pages/show_spec.rb +0 -32
- data/spec/unit/views/tabbed_navigation_spec.rb +0 -158
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
18
|
+
StringSymbolOrProcSetting.new(active_admin_config.scope_to_method).value(self)
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
# Overriding from InheritedResources::BaseHelpers
|
data/lib/active_admin/router.rb
CHANGED
|
@@ -1,108 +1,113 @@
|
|
|
1
1
|
module ActiveAdmin
|
|
2
|
+
# @private
|
|
2
3
|
class Router
|
|
3
|
-
|
|
4
|
-
|
|
4
|
+
attr_reader :namespaces, :router
|
|
5
|
+
|
|
6
|
+
def initialize(router:, namespaces:)
|
|
7
|
+
@router, @namespaces = router, namespaces
|
|
5
8
|
end
|
|
6
9
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
|
|
67
|
-
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
data/lib/active_admin/scope.rb
CHANGED
|
@@ -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
|
data/lib/active_admin/version.rb
CHANGED
|
@@ -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
|