activeadmin 1.0.0.pre4 → 2.4.0
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 +5 -5
- data/CHANGELOG.md +529 -52
- data/CODE_OF_CONDUCT.md +64 -12
- data/CONTRIBUTING.md +129 -58
- data/README.md +80 -79
- 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 +59 -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/_base.scss +2 -2
- data/app/assets/stylesheets/active_admin/_forms.scss +19 -26
- data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +0 -5
- data/app/assets/stylesheets/active_admin/components/_pagination.scss +11 -0
- data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -4
- data/app/assets/stylesheets/active_admin/components/_tables.scss +4 -1
- data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
- data/app/assets/stylesheets/active_admin/mixins/_all.scss +0 -2
- data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
- data/app/assets/stylesheets/active_admin/print.scss +2 -3
- 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 +3 -4
- data/app/views/active_admin/devise/sessions/new.html.erb +2 -2
- data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
- data/app/views/active_admin/devise/shared/_links.erb +12 -6
- data/app/views/active_admin/devise/unlocks/new.html.erb +2 -2
- data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_gap.html.erb +8 -0
- data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_page.html.erb +12 -0
- data/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
- data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
- data/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
- data/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
- data/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
- data/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
- data/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
- data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +2 -2
- data/config/locales/ar.yml +4 -5
- data/config/locales/bg.yml +1 -3
- data/config/locales/bs.yml +1 -2
- data/config/locales/ca.yml +2 -4
- data/config/locales/cs.yml +1 -2
- data/config/locales/da.yml +45 -14
- data/config/locales/de-CH.yml +2 -3
- data/config/locales/de.yml +30 -3
- data/config/locales/el.yml +3 -4
- data/config/locales/en-CA.yml +139 -0
- data/config/locales/en-GB.yml +44 -3
- data/config/locales/en.yml +31 -5
- data/config/locales/eo.yml +145 -0
- data/config/locales/es-MX.yml +5 -3
- data/config/locales/es.yml +32 -6
- data/config/locales/fa.yml +1 -2
- data/config/locales/fi.yml +2 -3
- data/config/locales/fr.yml +27 -5
- data/config/locales/he.yml +53 -7
- data/config/locales/hr.yml +1 -2
- data/config/locales/hu.yml +5 -2
- data/config/locales/id.yml +2 -3
- data/config/locales/it.yml +15 -7
- data/config/locales/ja.yml +8 -3
- data/config/locales/ko.yml +1 -2
- data/config/locales/lt.yml +27 -6
- data/config/locales/lv.yml +1 -2
- data/config/locales/mk.yml +134 -0
- data/config/locales/nb.yml +16 -7
- data/config/locales/nl.yml +13 -3
- data/config/locales/pl.yml +75 -5
- data/config/locales/pt-BR.yml +10 -3
- data/config/locales/pt-PT.yml +1 -2
- data/config/locales/ro.yml +1 -2
- data/config/locales/ru.yml +5 -3
- data/config/locales/sk.yml +168 -0
- data/config/locales/sv-SE.yml +4 -3
- data/config/locales/tr.yml +10 -2
- data/config/locales/uk.yml +4 -3
- data/config/locales/vi.yml +48 -8
- data/config/locales/zh-CN.yml +38 -7
- data/config/locales/zh-TW.yml +2 -3
- data/docs/.gitignore +1 -0
- data/docs/0-installation.md +19 -13
- data/docs/1-general-configuration.md +37 -4
- data/docs/10-custom-pages.md +47 -3
- data/docs/11-decorators.md +4 -0
- data/docs/12-arbre-components.md +73 -9
- data/docs/13-authorization-adapter.md +72 -35
- data/docs/14-gotchas.md +57 -19
- data/docs/2-resource-customization.md +64 -20
- data/docs/3-index-pages/custom-index.md +5 -1
- data/docs/3-index-pages/index-as-block.md +3 -5
- data/docs/3-index-pages/index-as-blog.md +4 -6
- data/docs/3-index-pages/index-as-grid.md +3 -5
- data/docs/3-index-pages/index-as-table.md +33 -12
- data/docs/3-index-pages.md +65 -9
- data/docs/4-csv-format.md +16 -0
- data/docs/5-forms.md +78 -17
- data/docs/6-show-pages.md +5 -29
- data/docs/7-sidebars.md +5 -1
- data/docs/8-custom-actions.md +18 -1
- data/docs/9-batch-actions.md +8 -4
- data/docs/CNAME +1 -0
- data/docs/Gemfile +3 -0
- data/docs/Gemfile.lock +248 -0
- data/docs/_config.yml +4 -0
- data/docs/_includes/footer.html +8 -0
- data/docs/_includes/google-analytics.html +16 -0
- data/docs/_includes/head.html +7 -0
- data/docs/_includes/toc.html +98 -0
- data/docs/_includes/top-menu.html +17 -0
- data/docs/_layouts/default.html +21 -0
- data/docs/documentation.md +60 -0
- data/docs/images/activeadmin.png +0 -0
- data/docs/images/code-header.png +0 -0
- data/docs/images/divider.png +0 -0
- data/docs/images/features.png +0 -0
- data/docs/images/tidelift.svg +14 -0
- data/docs/index.html +226 -0
- data/docs/stylesheets/main.css +1205 -0
- data/lib/active_admin/abstract_view_factory.rb +13 -51
- data/lib/active_admin/application.rb +50 -140
- data/lib/active_admin/application_settings.rb +42 -0
- data/lib/active_admin/authorization_adapter.rb +0 -3
- data/lib/active_admin/base_controller/authorization.rb +4 -7
- data/lib/active_admin/base_controller/menu.rb +10 -14
- data/lib/active_admin/base_controller.rb +8 -14
- data/lib/active_admin/batch_actions/controller.rb +3 -3
- data/lib/active_admin/batch_actions/resource_extension.rb +9 -13
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +1 -1
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +1 -1
- data/lib/active_admin/batch_actions/views/selection_cells.rb +6 -5
- data/lib/active_admin/callbacks.rb +1 -1
- data/lib/active_admin/controller_action.rb +2 -1
- data/lib/active_admin/csv_builder.rb +15 -12
- data/lib/active_admin/dependency.rb +8 -76
- data/lib/active_admin/deprecation.rb +0 -25
- data/lib/active_admin/devise.rb +3 -3
- data/lib/active_admin/dsl.rb +3 -16
- 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 +5 -3
- data/lib/active_admin/filters/active.rb +13 -14
- data/lib/active_admin/filters/active_filter.rb +124 -0
- data/lib/active_admin/filters/active_sidebar.rb +54 -0
- data/lib/active_admin/filters/forms.rb +6 -4
- data/lib/active_admin/filters/formtastic_addons.rb +2 -2
- data/lib/active_admin/filters/resource_extension.rb +28 -43
- data/lib/active_admin/filters.rb +2 -0
- data/lib/active_admin/form_builder.rb +100 -59
- data/lib/active_admin/generators/boilerplate.rb +12 -4
- data/lib/active_admin/helpers/collection.rb +2 -0
- data/lib/active_admin/helpers/scope_chain.rb +1 -0
- data/lib/active_admin/inputs/datepicker_input.rb +12 -5
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +2 -2
- data/lib/active_admin/inputs/filters/date_range_input.rb +21 -8
- data/lib/active_admin/inputs/filters/select_input.rb +6 -3
- data/lib/active_admin/inputs/filters/text_input.rb +25 -0
- data/lib/active_admin/inputs.rb +1 -0
- data/lib/active_admin/localizers/resource_localizer.rb +35 -0
- data/lib/active_admin/localizers.rb +11 -0
- data/lib/active_admin/menu.rb +6 -12
- data/lib/active_admin/menu_collection.rb +0 -2
- data/lib/active_admin/menu_item.rb +4 -32
- data/lib/active_admin/namespace.rb +36 -17
- data/lib/active_admin/namespace_settings.rb +123 -0
- data/lib/active_admin/order_clause.rb +30 -8
- data/lib/active_admin/orm/active_record/comments/comment.rb +3 -17
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +19 -7
- data/lib/active_admin/orm/active_record/comments.rb +17 -11
- data/lib/active_admin/page.rb +23 -4
- data/lib/active_admin/page_controller.rb +2 -6
- data/lib/active_admin/page_dsl.rb +5 -1
- data/lib/active_admin/page_presenter.rb +2 -1
- data/lib/active_admin/pundit_adapter.rb +18 -5
- data/lib/active_admin/resource/action_items.rb +17 -5
- data/lib/active_admin/resource/attributes.rb +47 -0
- data/lib/active_admin/resource/belongs_to.rb +10 -1
- data/lib/active_admin/resource/menu.rb +7 -4
- data/lib/active_admin/resource/model.rb +15 -0
- data/lib/active_admin/resource/naming.rb +3 -3
- data/lib/active_admin/resource/ordering.rb +11 -0
- data/lib/active_admin/resource/page_presenters.rb +1 -1
- data/lib/active_admin/resource/routes.rb +52 -20
- data/lib/active_admin/resource/scopes.rb +5 -3
- data/lib/active_admin/resource/sidebars.rb +1 -1
- data/lib/active_admin/resource.rb +59 -7
- 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/data_access.rb +32 -27
- data/lib/active_admin/resource_controller/decorators.rb +5 -5
- data/lib/active_admin/resource_controller/polymorphic_routes.rb +36 -0
- 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_controller.rb +15 -0
- data/lib/active_admin/resource_dsl.rb +58 -24
- data/lib/active_admin/router.rb +90 -82
- data/lib/active_admin/scope.rb +20 -12
- data/lib/active_admin/settings_node.rb +19 -0
- data/lib/active_admin/sidebar_section.rb +3 -1
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -2
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +2 -2
- data/lib/active_admin/view_helpers/display_helper.rb +28 -16
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +13 -0
- data/lib/active_admin/view_helpers/fields_for.rb +1 -2
- data/lib/active_admin/view_helpers/form_helper.rb +2 -2
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +8 -1
- data/lib/active_admin/view_helpers/scope_name_helper.rb +16 -0
- data/lib/active_admin/view_helpers.rb +2 -1
- data/lib/active_admin/views/action_items.rb +1 -1
- data/lib/active_admin/views/components/active_admin_form.rb +43 -11
- data/lib/active_admin/views/components/attributes_table.rb +4 -4
- data/lib/active_admin/views/components/columns.rb +3 -3
- data/lib/active_admin/views/components/dropdown_menu.rb +4 -4
- data/lib/active_admin/views/components/index_list.rb +4 -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 +7 -11
- data/lib/active_admin/views/components/scopes.rb +14 -8
- 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/status_tag.rb +11 -16
- data/lib/active_admin/views/components/table_for.rb +7 -16
- data/lib/active_admin/views/components/tabs.rb +15 -3
- data/lib/active_admin/views/footer.rb +14 -4
- data/lib/active_admin/views/header.rb +3 -16
- data/lib/active_admin/views/index_as_blog.rb +2 -3
- data/lib/active_admin/views/index_as_grid.rb +25 -25
- data/lib/active_admin/views/index_as_table.rb +39 -13
- data/lib/active_admin/views/pages/base.rb +36 -57
- data/lib/active_admin/views/pages/form.rb +2 -3
- data/lib/active_admin/views/pages/layout.rb +1 -1
- data/lib/active_admin/views/pages/show.rb +8 -2
- data/lib/active_admin/views/tabbed_navigation.rb +4 -59
- data/lib/active_admin/views/title_bar.rb +4 -4
- data/lib/active_admin/views.rb +1 -1
- data/lib/active_admin.rb +11 -7
- 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/devise/devise_generator.rb +8 -5
- data/lib/generators/active_admin/install/install_generator.rb +7 -3
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +60 -4
- data/lib/generators/active_admin/install/templates/{admin_user.rb.erb → admin_users.rb.erb} +1 -3
- data/lib/generators/active_admin/install/templates/dashboard.rb +2 -3
- data/lib/generators/active_admin/install/templates/migrations/{create_active_admin_comments.rb → create_active_admin_comments.rb.erb} +2 -5
- data/lib/generators/active_admin/page/page_generator.rb +1 -1
- data/lib/generators/active_admin/resource/resource_generator.rb +2 -2
- data/lib/generators/active_admin/resource/templates/admin.rb.erb +46 -0
- data/lib/ransack_ext.rb +5 -5
- data/vendor/assets/javascripts/jquery-ui/data.js +41 -0
- data/vendor/assets/javascripts/jquery-ui/disable-selection.js +48 -0
- data/vendor/assets/javascripts/jquery-ui/escape-selector.js +23 -0
- data/vendor/assets/javascripts/jquery-ui/focusable.js +86 -0
- 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/ie.js +17 -0
- data/vendor/assets/javascripts/jquery-ui/keycode.js +47 -0
- data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
- data/vendor/assets/javascripts/jquery-ui/plugin.js +46 -0
- data/vendor/assets/javascripts/jquery-ui/position.js +500 -0
- data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +42 -0
- data/vendor/assets/javascripts/jquery-ui/safe-blur.js +23 -0
- data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +47 -0
- data/vendor/assets/javascripts/jquery-ui/tabbable.js +38 -0
- data/vendor/assets/javascripts/jquery-ui/unique-id.js +51 -0
- data/vendor/assets/javascripts/jquery-ui/version.js +17 -0
- data/vendor/assets/javascripts/jquery-ui/widget.js +735 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/button.js +391 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +291 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +300 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +2123 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +954 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +1259 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +230 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +1207 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +1561 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +931 -0
- data/vendor/assets/stylesheets/active_admin/_normalize.scss +447 -0
- metadata +190 -539
- data/.gitignore +0 -49
- data/.hound.yml +0 -14
- data/.travis.yml +0 -46
- data/.yardopts +0 -8
- data/Gemfile +0 -75
- data/Guardfile +0 -8
- data/Rakefile +0 -33
- data/activeadmin.gemspec +0 -31
- data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
- data/app/assets/javascripts/active_admin/base.js.coffee +0 -9
- 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 -7
- data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -10
- data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -15
- data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -3
- data/app/assets/javascripts/active_admin/jquery_ui.js.erb +0 -11
- data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -39
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -36
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -101
- 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 -31
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -24
- data/app/assets/stylesheets/active_admin/mixins/_reset.scss +0 -165
- 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 -66
- data/features/breadcrumb.feature +0 -75
- data/features/comments/commenting.feature +0 -171
- data/features/comments/viewing_index.feature +0 -19
- data/features/dashboard.feature +0 -16
- data/features/decorators.feature +0 -43
- data/features/development_reloading.feature +0 -30
- data/features/edit_page.feature +0 -117
- data/features/favicon.feature +0 -20
- data/features/first_boot.feature +0 -16
- data/features/global_navigation.feature +0 -29
- data/features/i18n.feature +0 -43
- data/features/index/batch_actions.feature +0 -196
- data/features/index/filters.feature +0 -161
- data/features/index/format_as_csv.feature +0 -203
- data/features/index/formats.feature +0 -66
- 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 -251
- data/features/index/page_title.feature +0 -42
- data/features/index/pagination.feature +0 -63
- data/features/index/switch_index_view.feature +0 -73
- data/features/menu.feature +0 -53
- data/features/meta_tags.feature +0 -21
- data/features/new_page.feature +0 -109
- data/features/registering_assets.feature +0 -34
- data/features/registering_pages.feature +0 -148
- data/features/registering_resources.feature +0 -33
- data/features/renamed_resource.feature +0 -32
- data/features/root_to.feature +0 -17
- data/features/show/columns.feature +0 -40
- data/features/show/default_content.feature +0 -44
- data/features/show/page_title.feature +0 -59
- data/features/show/tabs.feature +0 -27
- data/features/sidebar_sections.feature +0 -210
- data/features/site_title.feature +0 -47
- data/features/specifying_actions.feature +0 -93
- data/features/step_definitions/action_item_steps.rb +0 -7
- data/features/step_definitions/action_link_steps.rb +0 -20
- 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/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 -12
- 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 -39
- data/features/step_definitions/flash_steps.rb +0 -11
- data/features/step_definitions/format_steps.rb +0 -52
- data/features/step_definitions/i18n_steps.rb +0 -3
- data/features/step_definitions/index_scope_steps.rb +0 -21
- 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 -13
- data/features/step_definitions/site_title_steps.rb +0 -17
- data/features/step_definitions/symbol_leak_steps.rb +0 -3
- data/features/step_definitions/tab_steps.rb +0 -8
- data/features/step_definitions/table_steps.rb +0 -120
- data/features/step_definitions/user_steps.rb +0 -45
- data/features/step_definitions/web_steps.rb +0 -85
- data/features/sti_resource.feature +0 -65
- data/features/strong_parameters.feature +0 -73
- data/features/support/env.rb +0 -162
- data/features/support/paths.rb +0 -71
- data/features/support/selectors.rb +0 -45
- data/features/symbol_leak.feature +0 -35
- data/features/users/logging_in.feature +0 -34
- data/features/users/logging_out.feature +0 -13
- data/features/users/resetting_password.feature +0 -34
- data/lib/active_admin/event.rb +0 -24
- data/lib/active_admin/filters/humanized.rb +0 -68
- data/lib/active_admin/helpers/settings.rb +0 -115
- data/lib/active_admin/reloader.rb +0 -25
- data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
- data/lib/generators/active_admin/resource/templates/admin.rb +0 -45
- data/script/local +0 -53
- data/script/travis_cache +0 -107
- data/script/use_rails +0 -53
- 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_config.rb +0 -23
- data/spec/javascripts/support/jasmine_runner.rb +0 -32
- data/spec/rails_helper.rb +0 -169
- data/spec/requests/default_namespace_spec.rb +0 -61
- data/spec/requests/javascript_spec.rb +0 -22
- data/spec/requests/memory_spec.rb +0 -21
- data/spec/requests/stylesheets_spec.rb +0 -18
- data/spec/spec_helper.rb +0 -17
- data/spec/support/active_admin_request_helpers.rb +0 -27
- data/spec/support/deferred_garbage_collection.rb +0 -19
- data/spec/support/detect_rails_version.rb +0 -34
- data/spec/support/jslint.yml +0 -80
- data/spec/support/rails_template.rb +0 -158
- data/spec/support/rails_template_with_data.rb +0 -55
- data/spec/support/templates/admin/stores.rb +0 -9
- data/spec/support/templates/en.yml +0 -8
- 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 -45
- 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 -11
- data/spec/unit/abstract_view_factory_spec.rb +0 -79
- data/spec/unit/action_builder_spec.rb +0 -134
- data/spec/unit/active_admin_spec.rb +0 -11
- data/spec/unit/application_spec.rb +0 -165
- data/spec/unit/asset_registration_spec.rb +0 -52
- data/spec/unit/authorization/authorization_adapter_spec.rb +0 -61
- data/spec/unit/authorization/controller_authorization_spec.rb +0 -39
- data/spec/unit/authorization/index_overriding_spec.rb +0 -23
- data/spec/unit/auto_link_spec.rb +0 -69
- data/spec/unit/batch_actions/resource_spec.rb +0 -97
- data/spec/unit/batch_actions/settings_spec.rb +0 -61
- data/spec/unit/belongs_to_spec.rb +0 -65
- data/spec/unit/cancan_adapter_spec.rb +0 -43
- data/spec/unit/comments_spec.rb +0 -188
- 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 -303
- data/spec/unit/dependency_spec.rb +0 -135
- data/spec/unit/devise_spec.rb +0 -96
- data/spec/unit/dsl_spec.rb +0 -122
- data/spec/unit/filters/filter_form_builder_spec.rb +0 -434
- data/spec/unit/filters/humanized_spec.rb +0 -56
- data/spec/unit/filters/resource_spec.rb +0 -128
- data/spec/unit/form_builder_spec.rb +0 -815
- data/spec/unit/generators/install_spec.rb +0 -24
- data/spec/unit/helpers/collection_spec.rb +0 -65
- data/spec/unit/helpers/scope_chain_spec.rb +0 -36
- data/spec/unit/helpers/settings_spec.rb +0 -30
- data/spec/unit/i18n_spec.rb +0 -12
- data/spec/unit/menu_collection_spec.rb +0 -62
- data/spec/unit/menu_item_spec.rb +0 -143
- 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 -73
- data/spec/unit/namespace/register_resource_spec.rb +0 -160
- data/spec/unit/namespace_spec.rb +0 -103
- 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 -78
- data/spec/unit/pretty_format_spec.rb +0 -77
- data/spec/unit/pundit_adapter_spec.rb +0 -98
- data/spec/unit/resource/action_items_spec.rb +0 -65
- 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/page_presenters_spec.rb +0 -44
- data/spec/unit/resource/pagination_spec.rb +0 -38
- data/spec/unit/resource/routes_spec.rb +0 -77
- 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 -140
- data/spec/unit/resource_controller/decorators_spec.rb +0 -94
- data/spec/unit/resource_controller/sidebars_spec.rb +0 -38
- data/spec/unit/resource_controller_spec.rb +0 -269
- data/spec/unit/resource_registration_spec.rb +0 -56
- data/spec/unit/resource_spec.rb +0 -331
- data/spec/unit/routing_spec.rb +0 -185
- data/spec/unit/scope_spec.rb +0 -185
- data/spec/unit/settings_spec.rb +0 -118
- data/spec/unit/view_factory_spec.rb +0 -19
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +0 -217
- data/spec/unit/view_helpers/display_helper_spec.rb +0 -165
- 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 -25
- data/spec/unit/view_helpers/form_helper_spec.rb +0 -43
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -139
- data/spec/unit/views/components/attributes_table_spec.rb +0 -272
- 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 -189
- data/spec/unit/views/components/index_list_spec.rb +0 -35
- 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 -78
- data/spec/unit/views/components/status_tag_spec.rb +0 -249
- data/spec/unit/views/components/table_for_spec.rb +0 -434
- data/spec/unit/views/components/tabs_spec.rb +0 -39
- 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 -51
- 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 -33
- data/spec/unit/views/tabbed_navigation_spec.rb +0 -158
- data/tasks/docs.rake +0 -37
- data/tasks/parallel_tests.rake +0 -66
- data/tasks/test.rake +0 -91
- data/tasks/yard.rake +0 -9
@@ -4,6 +4,7 @@ require 'pundit'
|
|
4
4
|
|
5
5
|
# Add a setting to the application to configure the pundit default policy
|
6
6
|
ActiveAdmin::Application.inheritable_setting :pundit_default_policy, nil
|
7
|
+
ActiveAdmin::Application.inheritable_setting :pundit_policy_namespace, nil
|
7
8
|
|
8
9
|
module ActiveAdmin
|
9
10
|
|
@@ -19,7 +20,7 @@ module ActiveAdmin
|
|
19
20
|
def scope_collection(collection, action = Auth::READ)
|
20
21
|
# scoping is appliable only to read/index action
|
21
22
|
# which means there is no way how to scope other actions
|
22
|
-
Pundit.policy_scope!(user, collection)
|
23
|
+
Pundit.policy_scope!(user, namespace(collection))
|
23
24
|
rescue Pundit::NotDefinedError => e
|
24
25
|
if default_policy_class && default_policy_class.const_defined?(:Scope)
|
25
26
|
default_policy_class::Scope.new(user, collection).resolve
|
@@ -30,9 +31,9 @@ module ActiveAdmin
|
|
30
31
|
|
31
32
|
def retrieve_policy(subject)
|
32
33
|
case subject
|
33
|
-
when nil then Pundit.policy!(user, resource)
|
34
|
-
when Class then Pundit.policy!(user, subject.new)
|
35
|
-
else Pundit.policy!(user, subject)
|
34
|
+
when nil then Pundit.policy!(user, namespace(resource))
|
35
|
+
when Class then Pundit.policy!(user, namespace(subject.new))
|
36
|
+
else Pundit.policy!(user, namespace(subject))
|
36
37
|
end
|
37
38
|
rescue Pundit::NotDefinedError => e
|
38
39
|
if default_policy_class
|
@@ -43,7 +44,7 @@ module ActiveAdmin
|
|
43
44
|
end
|
44
45
|
|
45
46
|
def format_action(action, subject)
|
46
|
-
# https://github.com/
|
47
|
+
# https://github.com/varvet/pundit/blob/master/lib/generators/pundit/install/templates/application_policy.rb
|
47
48
|
case action
|
48
49
|
when Auth::CREATE then :create?
|
49
50
|
when Auth::UPDATE then :update?
|
@@ -55,6 +56,14 @@ module ActiveAdmin
|
|
55
56
|
|
56
57
|
private
|
57
58
|
|
59
|
+
def namespace(object)
|
60
|
+
if default_policy_namespace && !object.class.to_s.include?(default_policy_namespace.to_s.camelize)
|
61
|
+
[default_policy_namespace.to_sym, object]
|
62
|
+
else
|
63
|
+
object
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
58
67
|
def default_policy_class
|
59
68
|
ActiveAdmin.application.pundit_default_policy && ActiveAdmin.application.pundit_default_policy.constantize
|
60
69
|
end
|
@@ -63,6 +72,10 @@ module ActiveAdmin
|
|
63
72
|
default_policy_class.new(user, subject)
|
64
73
|
end
|
65
74
|
|
75
|
+
def default_policy_namespace
|
76
|
+
ActiveAdmin.application.pundit_policy_namespace
|
77
|
+
end
|
78
|
+
|
66
79
|
end
|
67
80
|
|
68
81
|
end
|
@@ -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
|
@@ -64,7 +65,8 @@ module ActiveAdmin
|
|
64
65
|
def add_default_new_action_item
|
65
66
|
add_action_item :new, only: :index do
|
66
67
|
if controller.action_methods.include?('new') && authorized?(ActiveAdmin::Auth::CREATE, active_admin_config.resource_class)
|
67
|
-
|
68
|
+
localizer = ActiveAdmin::Localizers.resource(active_admin_config)
|
69
|
+
link_to localizer.t(:new_model), new_resource_path
|
68
70
|
end
|
69
71
|
end
|
70
72
|
end
|
@@ -73,7 +75,8 @@ module ActiveAdmin
|
|
73
75
|
def add_default_edit_action_item
|
74
76
|
add_action_item :edit, only: :show do
|
75
77
|
if controller.action_methods.include?('edit') && authorized?(ActiveAdmin::Auth::UPDATE, resource)
|
76
|
-
|
78
|
+
localizer = ActiveAdmin::Localizers.resource(active_admin_config)
|
79
|
+
link_to localizer.t(:edit_model), edit_resource_path(resource)
|
77
80
|
end
|
78
81
|
end
|
79
82
|
end
|
@@ -82,8 +85,9 @@ module ActiveAdmin
|
|
82
85
|
def add_default_show_action_item
|
83
86
|
add_action_item :destroy, only: :show do
|
84
87
|
if controller.action_methods.include?('destroy') && authorized?(ActiveAdmin::Auth::DESTROY, resource)
|
85
|
-
|
86
|
-
|
88
|
+
localizer = ActiveAdmin::Localizers.resource(active_admin_config)
|
89
|
+
link_to localizer.t(:delete_model), resource_path(resource), method: :delete,
|
90
|
+
data: { confirm: localizer.t(:delete_confirmation) }
|
87
91
|
end
|
88
92
|
end
|
89
93
|
end
|
@@ -103,6 +107,14 @@ module ActiveAdmin
|
|
103
107
|
@block = block
|
104
108
|
normalize_display_options!
|
105
109
|
end
|
110
|
+
|
111
|
+
def html_class
|
112
|
+
"action_item #{@options[:class]}".rstrip
|
113
|
+
end
|
114
|
+
|
115
|
+
def priority
|
116
|
+
@options[:priority] || 10
|
117
|
+
end
|
106
118
|
end
|
107
119
|
|
108
120
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module ActiveAdmin
|
2
|
+
|
3
|
+
class Resource
|
4
|
+
module Attributes
|
5
|
+
|
6
|
+
def default_attributes
|
7
|
+
resource_class.columns.each_with_object({}) do |c, attrs|
|
8
|
+
unless reject_col?(c)
|
9
|
+
name = c.name.to_sym
|
10
|
+
attrs[name] = (method_for_column(name) || name)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def method_for_column(c)
|
16
|
+
resource_class.respond_to?(:reflect_on_all_associations) && foreign_methods.has_key?(c) && foreign_methods[c].name.to_sym
|
17
|
+
end
|
18
|
+
|
19
|
+
def foreign_methods
|
20
|
+
@foreign_methods ||= resource_class.reflect_on_all_associations.
|
21
|
+
select { |r| r.macro == :belongs_to }.
|
22
|
+
reject { |r| r.chain.length > 2 && !r.options[:polymorphic] }.
|
23
|
+
index_by { |r| r.foreign_key.to_sym }
|
24
|
+
end
|
25
|
+
|
26
|
+
def reject_col?(c)
|
27
|
+
primary_col?(c) || sti_col?(c) || counter_cache_col?(c) || filtered_col?(c)
|
28
|
+
end
|
29
|
+
|
30
|
+
def primary_col?(c)
|
31
|
+
c.name == resource_class.primary_key
|
32
|
+
end
|
33
|
+
|
34
|
+
def sti_col?(c)
|
35
|
+
c.name == resource_class.inheritance_column
|
36
|
+
end
|
37
|
+
|
38
|
+
def counter_cache_col?(c)
|
39
|
+
c.name.end_with?('_count')
|
40
|
+
end
|
41
|
+
|
42
|
+
def filtered_col?(c)
|
43
|
+
ActiveAdmin.application.filter_attributes.include?(c.name.to_sym)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -14,8 +14,13 @@ module ActiveAdmin
|
|
14
14
|
# The resource which initiated this relationship
|
15
15
|
attr_reader :owner
|
16
16
|
|
17
|
+
# The name of the relation
|
18
|
+
attr_reader :target_name
|
19
|
+
|
17
20
|
def initialize(owner, target_name, options = {})
|
18
|
-
@owner
|
21
|
+
@owner = owner
|
22
|
+
@target_name = target_name
|
23
|
+
@options = options
|
19
24
|
end
|
20
25
|
|
21
26
|
# Returns the target resource class or raises an exception if it doesn't exist
|
@@ -39,6 +44,10 @@ module ActiveAdmin
|
|
39
44
|
def required?
|
40
45
|
!optional?
|
41
46
|
end
|
47
|
+
|
48
|
+
def to_param
|
49
|
+
:"#{@target_name}_id"
|
50
|
+
end
|
42
51
|
end
|
43
52
|
end
|
44
53
|
end
|
@@ -10,6 +10,7 @@ module ActiveAdmin
|
|
10
10
|
@include_in_menu = false
|
11
11
|
@menu_item_options = {}
|
12
12
|
else
|
13
|
+
@include_in_menu = true
|
13
14
|
@navigation_menu_name = options[:menu_name]
|
14
15
|
@menu_item_options = default_menu_options.merge options
|
15
16
|
end
|
@@ -25,13 +26,15 @@ module ActiveAdmin
|
|
25
26
|
resource = self
|
26
27
|
{
|
27
28
|
id: resource_name.plural,
|
28
|
-
label: proc{ resource.plural_resource_label },
|
29
|
-
url: proc{ resource.route_collection_path(params) },
|
30
|
-
if: proc{ authorized?(Auth::READ, menu_resource_class) }
|
29
|
+
label: proc { resource.plural_resource_label },
|
30
|
+
url: proc { resource.route_collection_path(params, url_options) },
|
31
|
+
if: proc { authorized?(Auth::READ, menu_resource_class) }
|
31
32
|
}
|
32
33
|
end
|
33
34
|
|
34
|
-
|
35
|
+
def navigation_menu_name=(menu_name)
|
36
|
+
self.menu_item_options = { menu_name: menu_name }
|
37
|
+
end
|
35
38
|
|
36
39
|
def navigation_menu_name
|
37
40
|
case @navigation_menu_name ||= DEFAULT_MENU
|
@@ -22,8 +22,8 @@ module ActiveAdmin
|
|
22
22
|
|
23
23
|
# Returns the plural version of this resource such as "Bank Accounts"
|
24
24
|
def plural_resource_label(options = {})
|
25
|
-
defaults = {count: Helpers::I18n::PLURAL_MANY_COUNT,
|
26
|
-
default: resource_label.pluralize.titleize}
|
25
|
+
defaults = { count: Helpers::I18n::PLURAL_MANY_COUNT,
|
26
|
+
default: resource_label.pluralize.titleize }
|
27
27
|
resource_name.translate defaults.merge options
|
28
28
|
end
|
29
29
|
|
@@ -46,7 +46,7 @@ module ActiveAdmin
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def translate(options = {})
|
49
|
-
I18n.t i18n_key, {scope: [:activerecord, :models]}.merge(options)
|
49
|
+
I18n.t i18n_key, { scope: [:activerecord, :models] }.merge(options)
|
50
50
|
end
|
51
51
|
|
52
52
|
def route_key
|
@@ -33,7 +33,7 @@ module ActiveAdmin
|
|
33
33
|
# @param [Symbol, String] action The action to get the config for
|
34
34
|
# @param [String] type The string specified in the presenters index_name method
|
35
35
|
# @return [PagePresenter, nil]
|
36
|
-
def get_page_presenter(action, type=nil)
|
36
|
+
def get_page_presenter(action, type = nil)
|
37
37
|
|
38
38
|
if action.to_s == "index" && type && page_presenters[:index].kind_of?(Hash)
|
39
39
|
page_presenters[:index][type.to_sym]
|
@@ -4,24 +4,36 @@ module ActiveAdmin
|
|
4
4
|
# @param params [Hash] of params: { study_id: 3 }
|
5
5
|
# @return [String] the path to this resource collection page
|
6
6
|
# @example "/admin/posts"
|
7
|
-
def route_collection_path(params = {})
|
8
|
-
|
7
|
+
def route_collection_path(params = {}, additional_params = {})
|
8
|
+
route_builder.collection_path(params, additional_params)
|
9
|
+
end
|
10
|
+
|
11
|
+
def route_batch_action_path(params = {}, additional_params = {})
|
12
|
+
route_builder.batch_action_path(params, additional_params)
|
9
13
|
end
|
10
14
|
|
11
15
|
# @param resource [ActiveRecord::Base] the instance we want the path of
|
12
16
|
# @return [String] the path to this resource collection page
|
13
17
|
# @example "/admin/posts/1"
|
14
|
-
def route_instance_path(resource)
|
15
|
-
|
18
|
+
def route_instance_path(resource, additional_params = {})
|
19
|
+
route_builder.instance_path(resource, additional_params)
|
16
20
|
end
|
17
21
|
|
18
|
-
def route_edit_instance_path(resource)
|
19
|
-
|
22
|
+
def route_edit_instance_path(resource, additional_params = {})
|
23
|
+
route_builder.member_action_path(:edit, resource, additional_params)
|
24
|
+
end
|
25
|
+
|
26
|
+
def route_member_action_path(action, resource, additional_params = {})
|
27
|
+
route_builder.member_action_path(action, resource, additional_params)
|
20
28
|
end
|
21
29
|
|
22
30
|
# Returns the routes prefix for this config
|
23
31
|
def route_prefix
|
24
|
-
namespace.
|
32
|
+
namespace.route_prefix
|
33
|
+
end
|
34
|
+
|
35
|
+
def route_builder
|
36
|
+
@route_builder ||= RouteBuilder.new(self)
|
25
37
|
end
|
26
38
|
|
27
39
|
def route_uncountable?
|
@@ -37,32 +49,45 @@ module ActiveAdmin
|
|
37
49
|
@resource = resource
|
38
50
|
end
|
39
51
|
|
40
|
-
def collection_path(params)
|
52
|
+
def collection_path(params, additional_params = {})
|
53
|
+
route_name = route_name(
|
54
|
+
resource.resources_configuration[:self][:route_collection_name],
|
55
|
+
suffix: (resource.route_uncountable? ? "index_path" : "path")
|
56
|
+
)
|
57
|
+
|
58
|
+
routes.public_send route_name, *route_collection_params(params), additional_params
|
59
|
+
end
|
60
|
+
|
61
|
+
def batch_action_path(params, additional_params = {})
|
41
62
|
route_name = route_name(
|
42
63
|
resource.resources_configuration[:self][:route_collection_name],
|
64
|
+
action: :batch_action,
|
43
65
|
suffix: (resource.route_uncountable? ? "index_path" : "path")
|
44
66
|
)
|
45
67
|
|
46
|
-
|
68
|
+
query = params.slice(:q, :scope)
|
69
|
+
query = query.permit!.to_h
|
70
|
+
routes.public_send route_name, *route_collection_params(params), additional_params.merge(query)
|
47
71
|
end
|
48
72
|
|
49
73
|
# @return [String] the path to this resource collection page
|
50
74
|
# @param instance [ActiveRecord::Base] the instance we want the path of
|
51
75
|
# @example "/admin/posts/1"
|
52
|
-
def instance_path(instance)
|
76
|
+
def instance_path(instance, additional_params = {})
|
53
77
|
route_name = route_name(resource.resources_configuration[:self][:route_instance_name])
|
54
78
|
|
55
|
-
routes.public_send route_name, *route_instance_params(instance)
|
79
|
+
routes.public_send route_name, *route_instance_params(instance), additional_params
|
56
80
|
end
|
57
81
|
|
58
|
-
# @return [String] the path to the
|
82
|
+
# @return [String] the path to the member action of this resource
|
83
|
+
# @param action [Symbol]
|
59
84
|
# @param instance [ActiveRecord::Base] the instance we want the path of
|
60
85
|
# @example "/admin/posts/1/edit"
|
61
|
-
def
|
86
|
+
def member_action_path(action, instance, additional_params = {})
|
62
87
|
path = resource.resources_configuration[:self][:route_instance_name]
|
63
|
-
route_name = route_name(path, action:
|
88
|
+
route_name = route_name(path, action: action)
|
64
89
|
|
65
|
-
routes.public_send route_name, *route_instance_params(instance)
|
90
|
+
routes.public_send route_name, *route_instance_params(instance), additional_params
|
66
91
|
end
|
67
92
|
|
68
93
|
private
|
@@ -73,7 +98,7 @@ module ActiveAdmin
|
|
73
98
|
suffix = options[:suffix] || "path"
|
74
99
|
route = []
|
75
100
|
|
76
|
-
route << options[:action] # "edit" or "new"
|
101
|
+
route << options[:action] # "batch_action", "edit" or "new"
|
77
102
|
route << resource.route_prefix # "admin"
|
78
103
|
route << belongs_to_name if nested? # "category"
|
79
104
|
route << resource_path_name # "posts" or "post"
|
@@ -82,11 +107,10 @@ module ActiveAdmin
|
|
82
107
|
route.compact.join('_').to_sym # :admin_category_posts_path
|
83
108
|
end
|
84
109
|
|
85
|
-
|
86
110
|
# @return params to pass to instance path
|
87
111
|
def route_instance_params(instance)
|
88
112
|
if nested?
|
89
|
-
[instance.public_send(
|
113
|
+
[instance.public_send(belongs_to_target_name).to_param, instance.to_param]
|
90
114
|
else
|
91
115
|
instance.to_param
|
92
116
|
end
|
@@ -99,11 +123,19 @@ module ActiveAdmin
|
|
99
123
|
end
|
100
124
|
|
101
125
|
def nested?
|
102
|
-
resource.belongs_to? &&
|
126
|
+
resource.belongs_to? && belongs_to_config.required?
|
127
|
+
end
|
128
|
+
|
129
|
+
def belongs_to_target_name
|
130
|
+
belongs_to_config.target_name
|
103
131
|
end
|
104
132
|
|
105
133
|
def belongs_to_name
|
106
|
-
|
134
|
+
belongs_to_config.target.resource_name.singular
|
135
|
+
end
|
136
|
+
|
137
|
+
def belongs_to_config
|
138
|
+
resource.belongs_to_config
|
107
139
|
end
|
108
140
|
|
109
141
|
def routes
|
@@ -10,7 +10,7 @@ module ActiveAdmin
|
|
10
10
|
# Returns a scope for this object by its identifier
|
11
11
|
def get_scope_by_id(id)
|
12
12
|
id = id.to_s
|
13
|
-
scopes.find{|s| s.id == id }
|
13
|
+
scopes.find { |s| s.id == id }
|
14
14
|
end
|
15
15
|
|
16
16
|
def default_scope(context = nil)
|
@@ -27,14 +27,16 @@ module ActiveAdmin
|
|
27
27
|
# If you want to internationalize the scope name, you can add
|
28
28
|
# to your i18n files a key like "active_admin.scopes.scope_method".
|
29
29
|
def scope(*args, &block)
|
30
|
-
|
30
|
+
default_options = { show_count: namespace.scopes_show_count }
|
31
|
+
options = default_options.merge(args.extract_options!)
|
31
32
|
title = args[0] rescue nil
|
32
33
|
method = args[1] rescue nil
|
33
34
|
|
35
|
+
options[:localizer] ||= ActiveAdmin::Localizers.resource(self)
|
34
36
|
scope = ActiveAdmin::Scope.new(title, method, options, &block)
|
35
37
|
|
36
38
|
# Finds and replaces a scope by the same name if it already exists
|
37
|
-
existing_scope_index = scopes.index{|existing_scope| existing_scope.id == scope.id }
|
39
|
+
existing_scope_index = scopes.index { |existing_scope| existing_scope.id == scope.id }
|
38
40
|
if existing_scope_index
|
39
41
|
scopes.delete_at(existing_scope_index)
|
40
42
|
scopes.insert(existing_scope_index, scope)
|
@@ -14,7 +14,7 @@ module ActiveAdmin
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def sidebar_sections_for(action, render_context = nil)
|
17
|
-
sidebar_sections.select{|section| section.display_on?(action, render_context) }
|
17
|
+
sidebar_sections.select { |section| section.display_on?(action, render_context) }
|
18
18
|
.sort_by(&:priority)
|
19
19
|
end
|
20
20
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'active_admin/resource/action_items'
|
2
|
+
require 'active_admin/resource/attributes'
|
2
3
|
require 'active_admin/resource/controllers'
|
3
4
|
require 'active_admin/resource/menu'
|
4
5
|
require 'active_admin/resource/page_presenters'
|
@@ -10,6 +11,8 @@ require 'active_admin/resource/includes'
|
|
10
11
|
require 'active_admin/resource/scope_to'
|
11
12
|
require 'active_admin/resource/sidebars'
|
12
13
|
require 'active_admin/resource/belongs_to'
|
14
|
+
require 'active_admin/resource/ordering'
|
15
|
+
require 'active_admin/resource/model'
|
13
16
|
|
14
17
|
module ActiveAdmin
|
15
18
|
|
@@ -50,6 +53,12 @@ module ActiveAdmin
|
|
50
53
|
# Set breadcrumb builder
|
51
54
|
attr_writer :breadcrumb
|
52
55
|
|
56
|
+
#Set order clause
|
57
|
+
attr_writer :order_clause
|
58
|
+
# Display create another checkbox on a new page
|
59
|
+
# @return [Boolean]
|
60
|
+
attr_writer :create_another
|
61
|
+
|
53
62
|
# Store a reference to the DSL so that we can dereference it during garbage collection.
|
54
63
|
attr_accessor :dsl
|
55
64
|
|
@@ -63,7 +72,8 @@ module ActiveAdmin
|
|
63
72
|
@resource_class_name = "::#{resource_class.name}"
|
64
73
|
@options = options
|
65
74
|
@sort_order = options[:sort_order]
|
66
|
-
@member_actions
|
75
|
+
@member_actions = []
|
76
|
+
@collection_actions = []
|
67
77
|
end
|
68
78
|
end
|
69
79
|
|
@@ -82,6 +92,8 @@ module ActiveAdmin
|
|
82
92
|
include ScopeTo
|
83
93
|
include Sidebars
|
84
94
|
include Routes
|
95
|
+
include Ordering
|
96
|
+
include Attributes
|
85
97
|
|
86
98
|
# The class this resource wraps. If you register the Post model, Resource#resource_class
|
87
99
|
# will point to the Post class
|
@@ -93,6 +105,10 @@ module ActiveAdmin
|
|
93
105
|
ActiveSupport::Dependencies.constantize(decorator_class_name) if decorator_class_name
|
94
106
|
end
|
95
107
|
|
108
|
+
def resource_name_extension
|
109
|
+
@resource_name_extension ||= define_resource_name_extension(self)
|
110
|
+
end
|
111
|
+
|
96
112
|
def resource_table_name
|
97
113
|
resource_class.quoted_table_name
|
98
114
|
end
|
@@ -121,7 +137,8 @@ module ActiveAdmin
|
|
121
137
|
|
122
138
|
def belongs_to(target, options = {})
|
123
139
|
@belongs_to = Resource::BelongsTo.new(self, target, options)
|
124
|
-
self.
|
140
|
+
self.menu_item_options = false if @belongs_to.required?
|
141
|
+
options[:class_name] ||= @belongs_to.resource.resource_class_name if @belongs_to.resource
|
125
142
|
controller.send :belongs_to, target, options.dup
|
126
143
|
end
|
127
144
|
|
@@ -129,6 +146,12 @@ module ActiveAdmin
|
|
129
146
|
@belongs_to
|
130
147
|
end
|
131
148
|
|
149
|
+
def belongs_to_param
|
150
|
+
if belongs_to? && belongs_to_config.required?
|
151
|
+
belongs_to_config.to_param
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
132
155
|
# Do we belong to another resource?
|
133
156
|
def belongs_to?
|
134
157
|
!!belongs_to_config
|
@@ -143,9 +166,33 @@ module ActiveAdmin
|
|
143
166
|
instance_variable_defined?(:@breadcrumb) ? @breadcrumb : namespace.breadcrumb
|
144
167
|
end
|
145
168
|
|
169
|
+
def order_clause
|
170
|
+
@order_clause || namespace.order_clause
|
171
|
+
end
|
172
|
+
|
173
|
+
def create_another
|
174
|
+
instance_variable_defined?(:@create_another) ? @create_another : namespace.create_another
|
175
|
+
end
|
176
|
+
|
146
177
|
def find_resource(id)
|
147
178
|
resource = resource_class.public_send *method_for_find(id)
|
148
|
-
decorator_class ? decorator_class.new(resource) : resource
|
179
|
+
(decorator_class && resource) ? decorator_class.new(resource) : resource
|
180
|
+
end
|
181
|
+
|
182
|
+
def resource_columns
|
183
|
+
resource_attributes.values
|
184
|
+
end
|
185
|
+
|
186
|
+
def resource_attributes
|
187
|
+
@resource_attributes ||= default_attributes
|
188
|
+
end
|
189
|
+
|
190
|
+
def association_columns
|
191
|
+
@association_columns ||= resource_attributes.select { |key, value| key != value }.values
|
192
|
+
end
|
193
|
+
|
194
|
+
def content_columns
|
195
|
+
@content_columns ||= resource_attributes.select { |key, value| key == value }.values
|
149
196
|
end
|
150
197
|
|
151
198
|
private
|
@@ -153,16 +200,21 @@ module ActiveAdmin
|
|
153
200
|
def method_for_find(id)
|
154
201
|
if finder = resources_configuration[:self][:finder]
|
155
202
|
[finder, id]
|
156
|
-
elsif Rails::VERSION::MAJOR >= 4
|
157
|
-
[:find_by, { resource_class.primary_key => id }]
|
158
203
|
else
|
159
|
-
[:
|
204
|
+
[:find_by, { resource_class.primary_key => id }]
|
160
205
|
end
|
161
206
|
end
|
162
207
|
|
163
208
|
def default_csv_builder
|
164
|
-
@default_csv_builder ||= CSVBuilder.default_for_resource(
|
209
|
+
@default_csv_builder ||= CSVBuilder.default_for_resource(self)
|
165
210
|
end
|
166
211
|
|
212
|
+
def define_resource_name_extension(resource)
|
213
|
+
Module.new do
|
214
|
+
define_method :model_name do
|
215
|
+
resource.resource_name
|
216
|
+
end
|
217
|
+
end
|
218
|
+
end
|
167
219
|
end # class Resource
|
168
220
|
end # module ActiveAdmin
|
@@ -38,12 +38,12 @@ module ActiveAdmin
|
|
38
38
|
r.resource_class.to_s == obj.to_s
|
39
39
|
end ||
|
40
40
|
if obj.respond_to? :base_class
|
41
|
-
resources.detect{ |r| r.resource_class.to_s == obj.base_class.to_s }
|
41
|
+
resources.detect { |r| r.resource_class.to_s == obj.base_class.to_s }
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
45
|
def resources
|
46
|
-
select{ |r| r.class <= Resource } # can otherwise be a Page
|
46
|
+
select { |r| r.class <= Resource } # can otherwise be a Page
|
47
47
|
end
|
48
48
|
|
49
49
|
def raise_if_mismatched!(existing, given)
|
@@ -7,12 +7,22 @@ module ActiveAdmin
|
|
7
7
|
module ClassMethods
|
8
8
|
|
9
9
|
def clear_member_actions!
|
10
|
+
remove_action_methods(:member)
|
10
11
|
active_admin_config.clear_member_actions!
|
11
12
|
end
|
12
13
|
|
13
14
|
def clear_collection_actions!
|
15
|
+
remove_action_methods(:collection)
|
14
16
|
active_admin_config.clear_collection_actions!
|
15
17
|
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def remove_action_methods(actions_type)
|
22
|
+
active_admin_config.public_send("#{actions_type}_actions").each do |action|
|
23
|
+
remove_method action.name
|
24
|
+
end
|
25
|
+
end
|
16
26
|
end
|
17
27
|
|
18
28
|
end
|