activeadmin 1.3.0 → 2.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activeadmin might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +307 -123
- data/CODE_OF_CONDUCT.md +64 -12
- data/CONTRIBUTING.md +90 -46
- data/README.md +66 -19
- data/app/assets/javascripts/active_admin/base.es6 +23 -0
- data/app/assets/javascripts/active_admin/ext/jquery-ui.es6 +7 -0
- data/app/assets/javascripts/active_admin/ext/jquery.es6 +9 -0
- data/app/assets/javascripts/active_admin/initializers/datepicker.es6 +16 -0
- data/app/assets/javascripts/active_admin/initializers/filters.es6 +45 -0
- data/app/assets/javascripts/active_admin/initializers/tabs.es6 +6 -0
- data/app/assets/javascripts/active_admin/lib/active_admin.es6 +41 -0
- data/app/assets/javascripts/active_admin/lib/batch_actions.es6 +55 -0
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.es6 +49 -0
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.es6 +123 -0
- data/app/assets/javascripts/active_admin/lib/has_many.es6 +95 -0
- data/app/assets/javascripts/active_admin/lib/modal_dialog.es6 +61 -0
- data/app/assets/javascripts/active_admin/lib/per_page.es6 +47 -0
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 +36 -0
- data/app/assets/stylesheets/active_admin/_forms.scss +3 -15
- data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -5
- data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
- data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
- data/app/views/active_admin/devise/confirmations/new.html.erb +2 -2
- data/app/views/active_admin/devise/passwords/edit.html.erb +2 -2
- data/app/views/active_admin/devise/passwords/new.html.erb +2 -2
- data/app/views/active_admin/devise/registrations/new.html.erb +2 -3
- data/app/views/active_admin/devise/sessions/new.html.erb +1 -1
- data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
- data/app/views/active_admin/devise/unlocks/new.html.erb +2 -2
- data/app/views/layouts/active_admin_logged_out.html.erb +2 -2
- data/config/locales/bg.yml +0 -1
- 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/he.yml +0 -1
- data/config/locales/hu.yml +4 -0
- data/config/locales/it.yml +4 -0
- data/config/locales/lt.yml +2 -2
- 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/uk.yml +2 -0
- data/config/locales/zh-CN.yml +33 -5
- data/docs/.gitignore +1 -0
- data/docs/0-installation.md +2 -2
- 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 +40 -21
- data/docs/2-resource-customization.md +8 -3
- 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/3-index-pages.md +17 -0
- data/docs/5-forms.md +16 -2
- data/docs/8-custom-actions.md +11 -0
- data/docs/CNAME +1 -1
- 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/index.html +2 -2
- data/docs/stylesheets/main.css +26 -2
- data/lib/active_admin/abstract_view_factory.rb +13 -51
- data/lib/active_admin/application.rb +49 -155
- data/lib/active_admin/application_settings.rb +42 -0
- data/lib/active_admin/asset_registration.rb +0 -8
- data/lib/active_admin/base_controller/authorization.rb +3 -6
- data/lib/active_admin/base_controller.rb +6 -6
- data/lib/active_admin/batch_actions/controller.rb +2 -2
- data/lib/active_admin/batch_actions/resource_extension.rb +4 -4
- data/lib/active_admin/callbacks.rb +1 -1
- data/lib/active_admin/csv_builder.rb +1 -1
- data/lib/active_admin/dependency.rb +1 -69
- data/lib/active_admin/deprecation.rb +0 -25
- data/lib/active_admin/dsl.rb +1 -8
- 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/error.rb +1 -1
- data/lib/active_admin/filters/active_filter.rb +4 -2
- data/lib/active_admin/filters/active_sidebar.rb +5 -1
- data/lib/active_admin/filters/forms.rb +7 -4
- data/lib/active_admin/filters/formtastic_addons.rb +1 -1
- data/lib/active_admin/filters/resource_extension.rb +4 -4
- data/lib/active_admin/form_builder.rb +97 -62
- data/lib/active_admin/generators/boilerplate.rb +1 -1
- data/lib/active_admin/helpers/scope_chain.rb +1 -0
- data/lib/active_admin/inputs/datepicker_input.rb +8 -1
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +2 -2
- data/lib/active_admin/menu.rb +2 -8
- data/lib/active_admin/menu_item.rb +4 -32
- data/lib/active_admin/namespace.rb +20 -8
- data/lib/active_admin/namespace_settings.rb +110 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +2 -2
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +10 -5
- data/lib/active_admin/orm/active_record/comments.rb +15 -4
- data/lib/active_admin/page_dsl.rb +1 -1
- data/lib/active_admin/pundit_adapter.rb +13 -4
- data/lib/active_admin/resource/action_items.rb +7 -2
- data/lib/active_admin/resource/attributes.rb +7 -4
- data/lib/active_admin/resource/menu.rb +3 -3
- data/lib/active_admin/resource/naming.rb +3 -3
- data/lib/active_admin/resource/routes.rb +9 -4
- data/lib/active_admin/resource/scopes.rb +3 -3
- data/lib/active_admin/resource/sidebars.rb +1 -1
- data/lib/active_admin/resource.rb +2 -2
- data/lib/active_admin/resource_collection.rb +2 -2
- data/lib/active_admin/resource_controller/action_builder.rb +10 -0
- data/lib/active_admin/resource_controller/decorators.rb +3 -3
- data/lib/active_admin/resource_controller/resource_class_methods.rb +2 -0
- data/lib/active_admin/resource_controller/scoping.rb +1 -1
- data/lib/active_admin/resource_dsl.rb +5 -3
- data/lib/active_admin/router.rb +89 -84
- data/lib/active_admin/scope.rb +9 -5
- data/lib/active_admin/settings_node.rb +19 -0
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_helpers/display_helper.rb +10 -2
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +1 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +3 -0
- data/lib/active_admin/view_helpers.rb +1 -1
- data/lib/active_admin/views/components/active_admin_form.rb +9 -4
- data/lib/active_admin/views/components/attributes_table.rb +3 -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/paginated_collection.rb +1 -1
- 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/sidebar_section.rb +0 -3
- data/lib/active_admin/views/components/site_title.rb +5 -6
- data/lib/active_admin/views/components/status_tag.rb +1 -18
- data/lib/active_admin/views/components/table_for.rb +3 -12
- data/lib/active_admin/views/components/tabs.rb +15 -3
- data/lib/active_admin/views/footer.rb +3 -7
- 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 +11 -10
- data/lib/active_admin/views/pages/base.rb +30 -53
- data/lib/active_admin/views/tabbed_navigation.rb +4 -59
- data/lib/active_admin/views.rb +1 -1
- data/lib/active_admin.rb +9 -4
- data/lib/generators/active_admin/assets/assets_generator.rb +2 -2
- data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
- data/lib/generators/active_admin/install/install_generator.rb +6 -2
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +20 -1
- data/lib/generators/active_admin/install/templates/dashboard.rb +2 -3
- data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +1 -15
- data/lib/generators/active_admin/page/page_generator.rb +1 -1
- data/lib/generators/active_admin/resource/resource_generator.rb +1 -1
- data/lib/ransack_ext.rb +3 -3
- data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
- data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
- data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +274 -283
- metadata +120 -523
- data/.github/ISSUE_TEMPLATE.md +0 -20
- data/.gitignore +0 -49
- data/.mdlrc +0 -1
- data/.rubocop.yml +0 -76
- data/.simplecov +0 -13
- data/.travis.yml +0 -51
- data/.yardopts +0 -7
- data/Gemfile +0 -58
- data/Rakefile +0 -54
- data/activeadmin.gemspec +0 -32
- data/app/assets/javascripts/active_admin/base.js.coffee +0 -13
- data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
- data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
- data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +0 -11
- data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -14
- data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -26
- data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -7
- data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -42
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -46
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -104
- data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
- data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
- data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -45
- data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -46
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -22
- data/codecov.yml +0 -25
- data/config/i18n-tasks.yml +0 -26
- data/config/mdl_style.rb +0 -9
- data/cucumber.yml +0 -3
- 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_42.gemfile +0 -10
- data/gemfiles/rails_50.gemfile +0 -10
- data/gemfiles/rails_51.gemfile +0 -10
- data/gemfiles/rails_52.gemfile +0 -11
- data/lib/active_admin/event.rb +0 -24
- data/lib/active_admin/helpers/output_safety_helper.rb +0 -35
- data/lib/active_admin/helpers/settings.rb +0 -114
- data/lib/bug_report_templates/active_admin_master.rb +0 -112
- data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
- 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/docs.rake +0 -64
- data/tasks/lint.rake +0 -21
- data/tasks/local.rake +0 -25
- data/tasks/parallel_tests.rake +0 -66
- data/tasks/test.rake +0 -29
@@ -1,7 +1,7 @@
|
|
1
1
|
module ActiveAdmin
|
2
2
|
module Dependency
|
3
3
|
module Requirements
|
4
|
-
DEVISE = '>=
|
4
|
+
DEVISE = '>= 4.0', '< 5'
|
5
5
|
end
|
6
6
|
|
7
7
|
# Provides a clean interface to check for gem dependencies at runtime.
|
@@ -55,10 +55,6 @@ module ActiveAdmin
|
|
55
55
|
Matcher.new name.to_s
|
56
56
|
end
|
57
57
|
|
58
|
-
def self.rails5?
|
59
|
-
rails >= '5.x'
|
60
|
-
end
|
61
|
-
|
62
58
|
class Matcher
|
63
59
|
attr_reader :name
|
64
60
|
|
@@ -94,70 +90,6 @@ module ActiveAdmin
|
|
94
90
|
info = spec ? "#{spec.name} #{spec.version}" : '(missing)'
|
95
91
|
"<ActiveAdmin::Dependency::Matcher for #{info}>"
|
96
92
|
end
|
97
|
-
|
98
|
-
def adapter
|
99
|
-
@adapter ||= Adapter.const_get(@name.camelize).new self
|
100
|
-
end
|
101
|
-
|
102
|
-
def method_missing(method, *args, &block)
|
103
|
-
if respond_to_missing?(method)
|
104
|
-
adapter.send method, *args, &block
|
105
|
-
else
|
106
|
-
super
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
def respond_to_missing?(method, include_private = false)
|
111
|
-
adapter.respond_to?(method) || super
|
112
|
-
rescue NameError
|
113
|
-
# 🐾
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
# Dependency adapters provide an easy way to wrap the conditional logic
|
118
|
-
# necessary to support multiple versions of a gem.
|
119
|
-
#
|
120
|
-
# ActiveAdmin::Dependency.rails.adapter.parameterize 'a b'
|
121
|
-
# => 'a_b'
|
122
|
-
#
|
123
|
-
# ActiveAdmin::Dependency.rails.parameterize 'a b'
|
124
|
-
# => 'a_b'
|
125
|
-
#
|
126
|
-
# ActiveAdmin::Dependency.devise.adapter
|
127
|
-
# -> NameError: uninitialized constant ActiveAdmin::Dependency::Adapter::Devise
|
128
|
-
#
|
129
|
-
module Adapter
|
130
|
-
class Base
|
131
|
-
def initialize(version)
|
132
|
-
@version = version
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
class Rails < Base
|
137
|
-
def parameterize(string)
|
138
|
-
if Dependency.rails5?
|
139
|
-
string.parameterize separator: '_'
|
140
|
-
else
|
141
|
-
string.parameterize '_'
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
def redirect_back(controller, fallback_location)
|
146
|
-
controller.instance_exec do
|
147
|
-
if Dependency.rails5?
|
148
|
-
redirect_back fallback_location: fallback_location
|
149
|
-
elsif controller.request.headers.key? 'HTTP_REFERER'
|
150
|
-
redirect_to :back
|
151
|
-
else
|
152
|
-
redirect_to fallback_location
|
153
|
-
end
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
def render_key
|
158
|
-
Dependency.rails5? ? :body : :text
|
159
|
-
end
|
160
|
-
end
|
161
93
|
end
|
162
94
|
|
163
95
|
end
|
@@ -6,30 +6,5 @@ module ActiveAdmin
|
|
6
6
|
ActiveSupport::Deprecation.warn "Active Admin: #{message}", callstack
|
7
7
|
end
|
8
8
|
|
9
|
-
# Deprecate a method.
|
10
|
-
#
|
11
|
-
# @param [Module] klass the Class or Module to deprecate the method on
|
12
|
-
# @param [Symbol] method the method to deprecate
|
13
|
-
# @param [String] message the message to display to the end user
|
14
|
-
#
|
15
|
-
# Example:
|
16
|
-
#
|
17
|
-
# class MyClass
|
18
|
-
# def my_method
|
19
|
-
# # ...
|
20
|
-
# end
|
21
|
-
# ActiveAdmin::Deprecation.deprecate self, :my_method,
|
22
|
-
# "MyClass#my_method is being removed in the next release"
|
23
|
-
# end
|
24
|
-
#
|
25
|
-
def deprecate(klass, method, message)
|
26
|
-
klass.send :define_method, "deprecated_#{method}", klass.instance_method(method)
|
27
|
-
|
28
|
-
klass.send :define_method, method do |*args|
|
29
|
-
ActiveAdmin::Deprecation.warn "#{message}", caller
|
30
|
-
send "deprecated_#{method}", *args
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
9
|
end
|
35
10
|
end
|
data/lib/active_admin/dsl.rb
CHANGED
@@ -83,14 +83,7 @@ module ActiveAdmin
|
|
83
83
|
# this action item on.
|
84
84
|
# :except: A single or array of controller actions not to
|
85
85
|
# display this action item on.
|
86
|
-
def action_item(name
|
87
|
-
if name.is_a?(Hash)
|
88
|
-
options = name
|
89
|
-
name = nil
|
90
|
-
end
|
91
|
-
|
92
|
-
Deprecation.warn "using `action_item` without a name is deprecated! Use `action_item(:edit)`." unless name
|
93
|
-
|
86
|
+
def action_item(name, options = {}, &block)
|
94
87
|
config.add_action_item(name, options, &block)
|
95
88
|
end
|
96
89
|
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module ActiveAdmin
|
2
|
+
|
3
|
+
class DynamicSetting
|
4
|
+
def self.build(setting, type)
|
5
|
+
(type ? klass(type) : self).new(setting)
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.klass(type)
|
9
|
+
klass = "#{type.to_s.camelcase}Setting"
|
10
|
+
raise ArgumentError, "Unknown type: #{type}" unless ActiveAdmin.const_defined?(klass)
|
11
|
+
ActiveAdmin.const_get(klass)
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(setting)
|
15
|
+
@setting = setting
|
16
|
+
end
|
17
|
+
|
18
|
+
def value(*_args)
|
19
|
+
@setting
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Many configuration options (Ex: site_title, title_image) could either be
|
24
|
+
# static (String), methods (Symbol) or procs (Proc). This wrapper takes care of
|
25
|
+
# returning the content when String or using instance_eval when Symbol or Proc.
|
26
|
+
#
|
27
|
+
class StringSymbolOrProcSetting < DynamicSetting
|
28
|
+
def value(context = self)
|
29
|
+
case @setting
|
30
|
+
when Symbol, Proc
|
31
|
+
context.instance_eval(&@setting)
|
32
|
+
else
|
33
|
+
@setting
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'active_admin/dynamic_setting'
|
2
|
+
require 'active_admin/settings_node'
|
3
|
+
|
4
|
+
module ActiveAdmin
|
5
|
+
|
6
|
+
class DynamicSettingsNode < SettingsNode
|
7
|
+
class << self
|
8
|
+
def register(name, value, type = nil)
|
9
|
+
class_attribute "#{name}_setting"
|
10
|
+
add_reader(name)
|
11
|
+
add_writer(name, type)
|
12
|
+
send "#{name}=", value
|
13
|
+
end
|
14
|
+
|
15
|
+
def add_reader(name)
|
16
|
+
define_singleton_method(name) do |*args|
|
17
|
+
send("#{name}_setting").value(*args)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def add_writer(name, type)
|
22
|
+
define_singleton_method("#{name}=") do |value|
|
23
|
+
send("#{name}_setting=", DynamicSetting.build(value, type))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/active_admin/engine.rb
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
module ActiveAdmin
|
2
2
|
class Engine < ::Rails::Engine
|
3
|
+
initializer "active_admin.load_app_path" do |app|
|
4
|
+
ActiveAdmin::Application.setting :app_path, app.root
|
5
|
+
ActiveAdmin::Application.setting :load_paths, [File.expand_path('app/admin', app.root)]
|
6
|
+
end
|
7
|
+
|
3
8
|
initializer "active_admin.precompile", group: :all do |app|
|
4
9
|
ActiveAdmin.application.stylesheets.each do |path, _|
|
5
10
|
app.config.assets.precompile << path
|
data/lib/active_admin/error.rb
CHANGED
@@ -22,7 +22,7 @@ module ActiveAdmin
|
|
22
22
|
class ErrorLoading < Error
|
23
23
|
# Locates the most recent file and line from the caught exception's backtrace.
|
24
24
|
def find_cause(folder, backtrace)
|
25
|
-
backtrace.grep(/\/(#{folder}\/.*\.rb):(\d+)/){ [$1, $2] }.first
|
25
|
+
backtrace.grep(/\/(#{folder}\/.*\.rb):(\d+)/) { [$1, $2] }.first
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
@@ -28,7 +28,9 @@ module ActiveAdmin
|
|
28
28
|
def label
|
29
29
|
# TODO: to remind us to go back to the simpler str.downcase once we support ruby >= 2.4 only.
|
30
30
|
translated_predicate = predicate_name.mb_chars.downcase.to_s
|
31
|
-
if filter_label
|
31
|
+
if filter_label && filter_label.is_a?(Proc)
|
32
|
+
"#{filter_label.call} #{translated_predicate}"
|
33
|
+
elsif filter_label
|
32
34
|
"#{filter_label} #{translated_predicate}"
|
33
35
|
elsif related_class
|
34
36
|
"#{related_class_name} #{translated_predicate}"
|
@@ -100,7 +102,7 @@ module ActiveAdmin
|
|
100
102
|
|
101
103
|
def related_primary_key
|
102
104
|
if predicate_association
|
103
|
-
predicate_association.
|
105
|
+
predicate_association.association_primary_key
|
104
106
|
elsif related_class
|
105
107
|
related_class.primary_key
|
106
108
|
end
|
@@ -5,7 +5,7 @@ module ActiveAdmin
|
|
5
5
|
class ActiveSidebar < ActiveAdmin::SidebarSection
|
6
6
|
|
7
7
|
def initialize
|
8
|
-
super
|
8
|
+
super 'search_status', sidebar_options
|
9
9
|
end
|
10
10
|
|
11
11
|
def block
|
@@ -39,6 +39,10 @@ module ActiveAdmin
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
+
def title
|
43
|
+
I18n.t("active_admin.search_status.headline")
|
44
|
+
end
|
45
|
+
|
42
46
|
protected
|
43
47
|
|
44
48
|
def sidebar_options
|
@@ -48,8 +48,8 @@ module ActiveAdmin
|
|
48
48
|
def active_admin_filters_form_for(search, filters, options = {})
|
49
49
|
defaults = { builder: ActiveAdmin::Filters::FormBuilder,
|
50
50
|
url: collection_path,
|
51
|
-
html: {class: 'filter_form'} }
|
52
|
-
required = { html: {method: :get},
|
51
|
+
html: { class: 'filter_form' } }
|
52
|
+
required = { html: { method: :get },
|
53
53
|
as: :q }
|
54
54
|
options = defaults.deep_merge(options).deep_merge(required)
|
55
55
|
|
@@ -57,8 +57,11 @@ module ActiveAdmin
|
|
57
57
|
filters.each do |attribute, opts|
|
58
58
|
next if opts.key?(:if) && !call_method_or_proc_on(self, opts[:if])
|
59
59
|
next if opts.key?(:unless) && call_method_or_proc_on(self, opts[:unless])
|
60
|
-
|
61
|
-
|
60
|
+
|
61
|
+
filter_opts = opts.except(:if, :unless)
|
62
|
+
filter_opts[:input_html] = instance_exec(&filter_opts[:input_html]) if filter_opts[:input_html].is_a?(Proc)
|
63
|
+
|
64
|
+
f.filter attribute, filter_opts
|
62
65
|
end
|
63
66
|
|
64
67
|
buttons = content_tag :div, class: "buttons" do
|
@@ -37,7 +37,7 @@ module ActiveAdmin
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def polymorphic_foreign_type?(method)
|
40
|
-
klass.reflect_on_all_associations.select{ |r| r.macro == :belongs_to && r.options[:polymorphic] }
|
40
|
+
klass.reflect_on_all_associations.select { |r| r.macro == :belongs_to && r.options[:polymorphic] }
|
41
41
|
.map(&:foreign_type).include? method.to_s
|
42
42
|
end
|
43
43
|
|
@@ -83,7 +83,7 @@ module ActiveAdmin
|
|
83
83
|
@filters_to_remove = nil
|
84
84
|
end
|
85
85
|
|
86
|
-
|
86
|
+
private
|
87
87
|
|
88
88
|
# Collapses the waveform, if you will, of which filters should be displayed.
|
89
89
|
# Removes filters and adds in default filters as desired.
|
@@ -123,10 +123,10 @@ module ActiveAdmin
|
|
123
123
|
# Returns a default set of filters for the associations
|
124
124
|
def default_association_filters
|
125
125
|
if resource_class.respond_to?(:reflect_on_all_associations)
|
126
|
-
poly, not_poly = resource_class.reflect_on_all_associations.partition{ |r| r.macro == :belongs_to && r.options[:polymorphic] }
|
126
|
+
poly, not_poly = resource_class.reflect_on_all_associations.partition { |r| r.macro == :belongs_to && r.options[:polymorphic] }
|
127
127
|
|
128
128
|
# remove deeply nested associations
|
129
|
-
not_poly.reject!{ |r| r.chain.length > 2 }
|
129
|
+
not_poly.reject! { |r| r.chain.length > 2 }
|
130
130
|
|
131
131
|
filters = poly.map(&:foreign_type) + not_poly.map(&:name)
|
132
132
|
filters.map &:to_sym
|
@@ -140,7 +140,7 @@ module ActiveAdmin
|
|
140
140
|
end
|
141
141
|
|
142
142
|
def filters_sidebar_section
|
143
|
-
ActiveAdmin::SidebarSection.new :filters, only: :index, if: ->{ active_admin_config.filters.any? } do
|
143
|
+
ActiveAdmin::SidebarSection.new :filters, only: :index, if: -> { active_admin_config.filters.any? } do
|
144
144
|
active_admin_filters_form_for assigns[:search], active_admin_config.filters
|
145
145
|
end
|
146
146
|
end
|
@@ -13,7 +13,6 @@ end
|
|
13
13
|
|
14
14
|
module ActiveAdmin
|
15
15
|
class FormBuilder < ::Formtastic::FormBuilder
|
16
|
-
include MethodOrProcHelper
|
17
16
|
|
18
17
|
self.input_namespaces = [::Object, ::ActiveAdmin::Inputs, ::Formtastic::Inputs]
|
19
18
|
|
@@ -21,7 +20,7 @@ module ActiveAdmin
|
|
21
20
|
self.input_class_finder = ::Formtastic::InputClassFinder
|
22
21
|
self.action_class_finder = ::Formtastic::ActionClassFinder
|
23
22
|
|
24
|
-
def cancel_link(url = {action: "index"}, html_options = {}, li_attrs = {})
|
23
|
+
def cancel_link(url = { action: "index" }, html_options = {}, li_attrs = {})
|
25
24
|
li_attrs[:class] ||= "cancel"
|
26
25
|
li_content = template.link_to I18n.t('active_admin.cancel'), url, html_options
|
27
26
|
template.content_tag(:li, li_content, li_attrs)
|
@@ -29,75 +28,95 @@ module ActiveAdmin
|
|
29
28
|
|
30
29
|
attr_accessor :already_in_an_inputs_block
|
31
30
|
|
32
|
-
def
|
33
|
-
|
34
|
-
human(count: ::ActiveAdmin::Helpers::I18n::PLURAL_MANY_COUNT)
|
31
|
+
def has_many(assoc, options = {}, &block)
|
32
|
+
HasManyBuilder.new(self, assoc, options).render(&block)
|
35
33
|
end
|
34
|
+
end
|
36
35
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
36
|
+
# Decorates a FormBuilder with the additional attributes and methods
|
37
|
+
# to build a has_many block. Nested has_many blocks are handled by
|
38
|
+
# nested decorators.
|
39
|
+
class HasManyBuilder < SimpleDelegator
|
40
|
+
attr_reader :assoc
|
41
|
+
attr_reader :options
|
42
|
+
attr_reader :heading, :sortable_column, :sortable_start
|
43
|
+
attr_reader :new_record, :destroy_option
|
44
|
+
|
45
|
+
def initialize(has_many_form, assoc, options)
|
46
|
+
super has_many_form
|
47
|
+
@assoc = assoc
|
48
|
+
@options = extract_custom_settings!(options.dup)
|
49
|
+
@options.reverse_merge!(for: assoc)
|
50
|
+
@options[:class] = [options[:class], "inputs has_many_fields"].compact.join(' ')
|
45
51
|
|
46
52
|
if sortable_column
|
47
|
-
options[:for] = [assoc, sorted_children(
|
53
|
+
@options[:for] = [assoc, sorted_children(sortable_column)]
|
48
54
|
end
|
55
|
+
end
|
49
56
|
|
57
|
+
def render(&block)
|
50
58
|
html = "".html_safe
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
59
|
+
html << template.content_tag(:h3) { heading } if heading.present?
|
60
|
+
html << template.capture { content_has_many(&block) }
|
61
|
+
html = wrap_div_or_li(html)
|
62
|
+
template.concat(html) if template.output_buffer
|
63
|
+
html
|
64
|
+
end
|
56
65
|
|
57
|
-
|
58
|
-
form_block = proc do |has_many_form|
|
59
|
-
index = parent_child_index options[:parent] if options[:parent]
|
60
|
-
block_contents = template.capture do
|
61
|
-
block.call(has_many_form, index)
|
62
|
-
end
|
63
|
-
template.concat(block_contents)
|
64
|
-
template.concat has_many_actions(has_many_form, builder_options, "".html_safe)
|
65
|
-
end
|
66
|
+
protected
|
66
67
|
|
67
|
-
|
68
|
-
|
68
|
+
# remove options that should not render as attributes
|
69
|
+
def extract_custom_settings!(options)
|
70
|
+
@heading = options.key?(:heading) ? options.delete(:heading) : default_heading
|
71
|
+
@sortable_column = options.delete(:sortable)
|
72
|
+
@sortable_start = options.delete(:sortable_start) || 0
|
73
|
+
@new_record = options.key?(:new_record) ? options.delete(:new_record) : true
|
74
|
+
@destroy_option = options.delete(:allow_destroy)
|
75
|
+
options
|
76
|
+
end
|
69
77
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
78
|
+
def default_heading
|
79
|
+
assoc_klass.model_name.
|
80
|
+
human(count: ::ActiveAdmin::Helpers::I18n::PLURAL_MANY_COUNT)
|
81
|
+
end
|
82
|
+
|
83
|
+
def assoc_klass
|
84
|
+
@assoc_klass ||= __getobj__.object.class.reflect_on_association(assoc).klass
|
85
|
+
end
|
86
|
+
|
87
|
+
def content_has_many(&block)
|
88
|
+
form_block = proc do |form_builder|
|
89
|
+
render_has_many_form(form_builder, options[:parent], &block)
|
75
90
|
end
|
76
91
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
92
|
+
template.assigns[:has_many_block] = true
|
93
|
+
contents = without_wrapper { inputs(options, &form_block) }
|
94
|
+
contents ||= "".html_safe
|
95
|
+
|
96
|
+
js = new_record ? js_for_has_many(options[:class], &form_block) : ''
|
97
|
+
contents << js
|
81
98
|
end
|
82
99
|
|
83
|
-
|
100
|
+
# Renders the Formtastic inputs then appends ActiveAdmin delete and sort actions.
|
101
|
+
def render_has_many_form(form_builder, parent, &block)
|
102
|
+
index = parent && form_builder.send(:parent_child_index, parent)
|
103
|
+
template.concat template.capture { yield(form_builder, index) }
|
104
|
+
template.concat has_many_actions(form_builder, "".html_safe)
|
105
|
+
end
|
84
106
|
|
85
|
-
def has_many_actions(
|
86
|
-
if
|
107
|
+
def has_many_actions(form_builder, contents)
|
108
|
+
if form_builder.object.new_record?
|
87
109
|
contents << template.content_tag(:li) do
|
88
110
|
template.link_to I18n.t('active_admin.has_many_remove'), "#", class: 'button has_many_remove'
|
89
111
|
end
|
90
|
-
elsif
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
has_many_form.input(:_destroy, as: :boolean,
|
95
|
-
wrapper_html: {class: 'has_many_delete'},
|
112
|
+
elsif allow_destroy?(form_builder.object)
|
113
|
+
form_builder.input(:_destroy, as: :boolean,
|
114
|
+
wrapper_html: { class: 'has_many_delete' },
|
96
115
|
label: I18n.t('active_admin.has_many_delete'))
|
97
116
|
end
|
98
117
|
|
99
|
-
if
|
100
|
-
|
118
|
+
if sortable_column
|
119
|
+
form_builder.input sortable_column, as: :hidden
|
101
120
|
|
102
121
|
contents << template.content_tag(:li, class: 'handle') do
|
103
122
|
I18n.t('active_admin.move')
|
@@ -107,41 +126,57 @@ module ActiveAdmin
|
|
107
126
|
contents
|
108
127
|
end
|
109
128
|
|
110
|
-
def
|
111
|
-
|
129
|
+
def allow_destroy?(form_object)
|
130
|
+
!! case destroy_option
|
131
|
+
when Symbol, String
|
132
|
+
form_object.public_send destroy_option
|
133
|
+
when Proc
|
134
|
+
destroy_option.call form_object
|
135
|
+
else
|
136
|
+
destroy_option
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def sorted_children(column)
|
141
|
+
__getobj__.object.public_send(assoc).sort_by do |o|
|
112
142
|
attribute = o.public_send column
|
113
143
|
[attribute.nil? ? Float::INFINITY : attribute, o.id || Float::INFINITY]
|
114
144
|
end
|
115
145
|
end
|
116
146
|
|
117
|
-
private
|
118
|
-
|
119
147
|
def without_wrapper
|
120
|
-
is_being_wrapped =
|
121
|
-
|
148
|
+
is_being_wrapped = already_in_an_inputs_block
|
149
|
+
self.already_in_an_inputs_block = false
|
122
150
|
|
123
151
|
html = yield
|
124
152
|
|
125
|
-
|
153
|
+
self.already_in_an_inputs_block = is_being_wrapped
|
126
154
|
html
|
127
155
|
end
|
128
156
|
|
129
157
|
# Capture the ADD JS
|
130
|
-
def js_for_has_many(
|
131
|
-
|
132
|
-
assoc_name = assoc_reflection.klass.model_name
|
158
|
+
def js_for_has_many(class_string, &form_block)
|
159
|
+
assoc_name = assoc_klass.model_name
|
133
160
|
placeholder = "NEW_#{assoc_name.to_s.underscore.upcase.gsub(/\//, '_')}_RECORD"
|
134
161
|
opts = {
|
135
|
-
for: [assoc,
|
162
|
+
for: [assoc, assoc_klass.new],
|
136
163
|
class: class_string,
|
137
164
|
for_options: { child_index: placeholder }
|
138
165
|
}
|
139
|
-
html = template.capture{ inputs_for_nested_attributes opts, &form_block }
|
166
|
+
html = template.capture { __getobj__.send(:inputs_for_nested_attributes, opts, &form_block) }
|
140
167
|
text = new_record.is_a?(String) ? new_record : I18n.t('active_admin.has_many_new', model: assoc_name.human)
|
141
168
|
|
142
169
|
template.link_to text, '#', class: "button has_many_add", data: {
|
143
170
|
html: CGI.escapeHTML(html).html_safe, placeholder: placeholder
|
144
171
|
}
|
145
172
|
end
|
173
|
+
|
174
|
+
def wrap_div_or_li(html)
|
175
|
+
template.content_tag(already_in_an_inputs_block ? :li : :div,
|
176
|
+
html,
|
177
|
+
class: "has_many_container #{assoc}",
|
178
|
+
'data-sortable' => sortable_column,
|
179
|
+
'data-sortable-start' => sortable_start)
|
180
|
+
end
|
146
181
|
end
|
147
182
|
end
|
@@ -34,7 +34,7 @@ module ActiveAdmin
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def form_inputs
|
37
|
-
attributes.reject{|a| %w(id created_at updated_at).include? a}.map{ |a| form_input(a) }.join("\n")
|
37
|
+
attributes.reject { |a| %w(id created_at updated_at).include? a }.map { |a| form_input(a) }.join("\n")
|
38
38
|
end
|
39
39
|
|
40
40
|
def form_input(name)
|
@@ -9,10 +9,17 @@ module ActiveAdmin
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
+
# Can pass proc to filter label option
|
13
|
+
def label_from_options
|
14
|
+
res = super
|
15
|
+
res = res.call if res.is_a? Proc
|
16
|
+
res
|
17
|
+
end
|
18
|
+
|
12
19
|
private
|
13
20
|
def datepicker_options
|
14
21
|
options = self.options.fetch(:datepicker_options, {})
|
15
|
-
options = Hash[options.map{ |k, v| [k.to_s.camelcase(:lower), v] }]
|
22
|
+
options = Hash[options.map { |k, v| [k.to_s.camelcase(:lower), v] }]
|
16
23
|
{ datepicker_options: options }
|
17
24
|
end
|
18
25
|
end
|
@@ -57,8 +57,8 @@ module ActiveAdmin
|
|
57
57
|
|
58
58
|
def current_filter
|
59
59
|
@current_filter ||= begin
|
60
|
-
methods = filters.map{ |f| "#{method}_#{f}" }
|
61
|
-
methods.detect{ |m| @object.public_send m } || methods.first
|
60
|
+
methods = filters.map { |f| "#{method}_#{f}" }
|
61
|
+
methods.detect { |m| @object.public_send m } || methods.first
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
data/lib/active_admin/menu.rb
CHANGED
@@ -68,14 +68,8 @@ module ActiveAdmin
|
|
68
68
|
self == item || include?(item)
|
69
69
|
end
|
70
70
|
|
71
|
-
|
72
|
-
|
73
|
-
def items(context = nil)
|
74
|
-
@children.values.select{ |i| i.display?(context) }.sort do |a, b|
|
75
|
-
result = a.priority <=> b.priority
|
76
|
-
result = a.label(context) <=> b.label(context) if result == 0
|
77
|
-
result
|
78
|
-
end
|
71
|
+
def items
|
72
|
+
@children.values
|
79
73
|
end
|
80
74
|
|
81
75
|
attr_reader :children
|