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
@@ -14,6 +14,8 @@ module ActiveAdmin
|
|
14
14
|
include ScopeChain
|
15
15
|
|
16
16
|
define_active_admin_callbacks :build, :create, :update, :save, :destroy
|
17
|
+
|
18
|
+
helper_method :current_scope
|
17
19
|
end
|
18
20
|
end
|
19
21
|
|
@@ -45,7 +47,6 @@ module ActiveAdmin
|
|
45
47
|
end
|
46
48
|
end
|
47
49
|
|
48
|
-
|
49
50
|
# Does the actual work of retrieving the current collection from the db.
|
50
51
|
# This is a great method to override if you would like to perform
|
51
52
|
# some additional db # work before your controller returns and
|
@@ -60,7 +61,6 @@ module ActiveAdmin
|
|
60
61
|
collection
|
61
62
|
end
|
62
63
|
|
63
|
-
|
64
64
|
# Override this method in your controllers to modify the start point
|
65
65
|
# of our searches and index.
|
66
66
|
#
|
@@ -98,16 +98,11 @@ module ActiveAdmin
|
|
98
98
|
# Does the actual work of finding a resource in the database. This
|
99
99
|
# method uses the finder method as defined in InheritedResources.
|
100
100
|
#
|
101
|
-
# Note that public_send can't be used here because Rails 3.2's
|
102
|
-
# ActiveRecord::Associations::CollectionProxy (belongs_to associations)
|
103
|
-
# mysteriously returns an Enumerator object.
|
104
|
-
#
|
105
101
|
# @return [ActiveRecord::Base] An active record object.
|
106
102
|
def find_resource
|
107
103
|
scoped_collection.send method_for_find, params[:id]
|
108
104
|
end
|
109
105
|
|
110
|
-
|
111
106
|
# Builds, memoize and authorize a new instance of the resource. The
|
112
107
|
# actual work of building the new instance is delegated to the
|
113
108
|
# #build_new_resource method.
|
@@ -131,12 +126,12 @@ module ActiveAdmin
|
|
131
126
|
# Builds a new resource. This method uses the method_for_build provided
|
132
127
|
# by Inherited Resources.
|
133
128
|
#
|
134
|
-
# Note that public_send can't be used here w/ Rails 3.2 & a belongs_to
|
135
|
-
# config, or you'll get undefined method `build' for []:Array.
|
136
|
-
#
|
137
129
|
# @return [ActiveRecord::Base] An un-saved active record base object
|
138
130
|
def build_new_resource
|
139
|
-
scoped_collection.send
|
131
|
+
scoped_collection.send(
|
132
|
+
method_for_build,
|
133
|
+
*resource_params.map { |params| params.slice(active_admin_config.resource_class.inheritance_column) }
|
134
|
+
)
|
140
135
|
end
|
141
136
|
|
142
137
|
# Calls all the appropriate callbacks and then creates the new resource.
|
@@ -188,12 +183,10 @@ module ActiveAdmin
|
|
188
183
|
end
|
189
184
|
end
|
190
185
|
|
191
|
-
|
192
186
|
#
|
193
187
|
# Collection Helper Methods
|
194
188
|
#
|
195
189
|
|
196
|
-
|
197
190
|
# Gives the authorization library a change to pre-scope the collection.
|
198
191
|
#
|
199
192
|
# In the case of the CanCan adapter, it calls `#accessible_by` on
|
@@ -209,11 +202,10 @@ module ActiveAdmin
|
|
209
202
|
|
210
203
|
def apply_sorting(chain)
|
211
204
|
params[:order] ||= active_admin_config.sort_order
|
212
|
-
|
213
|
-
order_clause = OrderClause.new params[:order]
|
205
|
+
order_clause = active_admin_config.order_clause.new(active_admin_config, params[:order])
|
214
206
|
|
215
207
|
if order_clause.valid?
|
216
|
-
|
208
|
+
order_clause.apply(chain)
|
217
209
|
else
|
218
210
|
chain # just return the chain
|
219
211
|
end
|
@@ -222,16 +214,10 @@ module ActiveAdmin
|
|
222
214
|
# Applies any Ransack search methods to the currently scoped collection.
|
223
215
|
# Both `search` and `ransack` are provided, but we use `ransack` to prevent conflicts.
|
224
216
|
def apply_filtering(chain)
|
225
|
-
@search = chain.ransack
|
217
|
+
@search = chain.ransack(params[:q] || {})
|
226
218
|
@search.result
|
227
219
|
end
|
228
220
|
|
229
|
-
def clean_search_params
|
230
|
-
q = params[:q] || {}
|
231
|
-
q = q.to_unsafe_h if q.respond_to? :to_unsafe_h
|
232
|
-
q.delete_if{ |key, value| value.blank? }
|
233
|
-
end
|
234
|
-
|
235
221
|
def apply_scoping(chain)
|
236
222
|
@collection_before_scope = chain
|
237
223
|
|
@@ -256,13 +242,15 @@ module ActiveAdmin
|
|
256
242
|
|
257
243
|
def current_scope
|
258
244
|
@current_scope ||= if params[:scope]
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
245
|
+
active_admin_config.get_scope_by_id(params[:scope])
|
246
|
+
else
|
247
|
+
active_admin_config.default_scope(self)
|
248
|
+
end
|
263
249
|
end
|
264
250
|
|
265
251
|
def apply_pagination(chain)
|
252
|
+
# skip pagination if already was paginated by scope
|
253
|
+
return chain if chain.respond_to?(:total_pages)
|
266
254
|
page_method_name = Kaminari.config.page_method_name
|
267
255
|
page = params[Kaminari.config.param_name]
|
268
256
|
|
@@ -312,6 +300,23 @@ module ActiveAdmin
|
|
312
300
|
def apply_decorations(resource)
|
313
301
|
apply_decorator(resource)
|
314
302
|
end
|
303
|
+
|
304
|
+
# @return [String]
|
305
|
+
def smart_resource_url
|
306
|
+
if create_another?
|
307
|
+
new_resource_url(create_another: params[:create_another])
|
308
|
+
else
|
309
|
+
super
|
310
|
+
end
|
311
|
+
end
|
312
|
+
|
313
|
+
private
|
314
|
+
|
315
|
+
# @return [Boolean] true if user requested to create one more
|
316
|
+
# resource after creating this one.
|
317
|
+
def create_another?
|
318
|
+
params[:create_another].present?
|
319
|
+
end
|
315
320
|
end
|
316
321
|
end
|
317
322
|
end
|
@@ -2,7 +2,7 @@ module ActiveAdmin
|
|
2
2
|
class ResourceController < BaseController
|
3
3
|
module Decorators
|
4
4
|
|
5
|
-
|
5
|
+
protected
|
6
6
|
|
7
7
|
def apply_decorator(resource)
|
8
8
|
decorate? ? decorator_class.new(resource) : resource
|
@@ -24,7 +24,7 @@ module ActiveAdmin
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
|
27
|
+
private
|
28
28
|
|
29
29
|
def decorate?
|
30
30
|
case action_name
|
@@ -62,13 +62,13 @@ module ActiveAdmin
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
-
|
65
|
+
private
|
66
66
|
|
67
67
|
def self.wrap!(parent, name)
|
68
68
|
::Class.new parent do
|
69
69
|
delegate :reorder, :page, :current_page, :total_pages, :limit_value,
|
70
|
-
:total_count, :total_pages, :
|
71
|
-
:find_each, :ransack
|
70
|
+
:total_count, :total_pages, :offset, :to_key, :group_values,
|
71
|
+
:except, :find_each, :ransack
|
72
72
|
|
73
73
|
define_singleton_method(:name) { name }
|
74
74
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require "active_admin/resource"
|
2
|
+
require "active_admin/resource/model"
|
3
|
+
|
4
|
+
module ActiveAdmin
|
5
|
+
class ResourceController < BaseController
|
6
|
+
module PolymorphicRoutes
|
7
|
+
def polymorphic_url(record_or_hash_or_array, options = {})
|
8
|
+
super(map_named_resources_for(record_or_hash_or_array), options)
|
9
|
+
end
|
10
|
+
|
11
|
+
def polymorphic_path(record_or_hash_or_array, options = {})
|
12
|
+
super(map_named_resources_for(record_or_hash_or_array), options)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def map_named_resources_for(record_or_hash_or_array)
|
18
|
+
return record_or_hash_or_array unless record_or_hash_or_array.is_a?(Array)
|
19
|
+
|
20
|
+
record_or_hash_or_array.map { |record| to_named_resource(record) }
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_named_resource(record)
|
24
|
+
if record.is_a?(resource_class)
|
25
|
+
return ActiveAdmin::Model.new(active_admin_config, record)
|
26
|
+
end
|
27
|
+
|
28
|
+
if record.is_a?(parent.class)
|
29
|
+
return ActiveAdmin::Model.new(active_admin_config.belongs_to_config.resource, record)
|
30
|
+
end
|
31
|
+
|
32
|
+
record
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -15,7 +15,7 @@ module ActiveAdmin
|
|
15
15
|
# Collection can be scoped conditionally with an :if or :unless proc.
|
16
16
|
def begin_of_association_chain
|
17
17
|
return nil unless active_admin_config.scope_to?(self)
|
18
|
-
render_in_context(self, active_admin_config.scope_to_method)
|
18
|
+
MethodOrProcHelper.render_in_context(self, active_admin_config.scope_to_method)
|
19
19
|
end
|
20
20
|
|
21
21
|
# Overriding from InheritedResources::BaseHelpers
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'active_admin/resource_controller/action_builder'
|
2
2
|
require 'active_admin/resource_controller/data_access'
|
3
3
|
require 'active_admin/resource_controller/decorators'
|
4
|
+
require 'active_admin/resource_controller/polymorphic_routes'
|
4
5
|
require 'active_admin/resource_controller/scoping'
|
5
6
|
require 'active_admin/resource_controller/streaming'
|
6
7
|
require 'active_admin/resource_controller/sidebars'
|
@@ -18,9 +19,11 @@ module ActiveAdmin
|
|
18
19
|
include ActionBuilder
|
19
20
|
include Decorators
|
20
21
|
include DataAccess
|
22
|
+
include PolymorphicRoutes
|
21
23
|
include Scoping
|
22
24
|
include Streaming
|
23
25
|
include Sidebars
|
26
|
+
include ViewHelpers::DownloadFormatLinksHelper
|
24
27
|
extend ResourceClassMethods
|
25
28
|
|
26
29
|
def self.active_admin_config=(config)
|
@@ -45,7 +48,19 @@ module ActiveAdmin
|
|
45
48
|
def renderer_for(action)
|
46
49
|
active_admin_namespace.view_factory["#{action}_page"]
|
47
50
|
end
|
51
|
+
|
48
52
|
helper_method :renderer_for
|
49
53
|
|
54
|
+
def restrict_format_access!
|
55
|
+
unless request.format.html?
|
56
|
+
presenter = active_admin_config.get_page_presenter(:index)
|
57
|
+
download_formats = (presenter || {}).fetch(:download_links, active_admin_config.namespace.download_links)
|
58
|
+
unless build_download_formats(download_formats).include?(request.format.symbol)
|
59
|
+
raise ActiveAdmin::AccessDenied.new(current_active_admin_user, :index)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
before_action :restrict_format_access!, only: [:index, :show]
|
50
65
|
end
|
51
66
|
end
|
@@ -1,13 +1,28 @@
|
|
1
1
|
module ActiveAdmin
|
2
2
|
# This is the class where all the register blocks are evaluated.
|
3
3
|
class ResourceDSL < DSL
|
4
|
-
def initialize(config, resource_class)
|
5
|
-
@resource = resource_class
|
6
|
-
super(config)
|
7
|
-
end
|
8
4
|
|
9
5
|
private
|
10
6
|
|
7
|
+
# Redefine sort behaviour for column
|
8
|
+
#
|
9
|
+
# For example:
|
10
|
+
#
|
11
|
+
# # nulls last
|
12
|
+
# order_by(:age) do |order_clause|
|
13
|
+
# [order_clause.to_sql, 'NULLS LAST'].join(' ') if order_clause.order == 'desc'
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# # by last_name but in the case that there is no last name, by first_name.
|
17
|
+
# order_by(:full_name) do |order_clause|
|
18
|
+
# ['COALESCE(NULLIF(last_name, ''), first_name), first_name', order_clause.order].join(' ')
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
#
|
22
|
+
def order_by(column, &block)
|
23
|
+
config.ordering[column] = block
|
24
|
+
end
|
25
|
+
|
11
26
|
def belongs_to(target, options = {})
|
12
27
|
config.belongs_to(target, options)
|
13
28
|
end
|
@@ -28,7 +43,7 @@ module ActiveAdmin
|
|
28
43
|
end
|
29
44
|
|
30
45
|
#
|
31
|
-
#
|
46
|
+
# Keys included in the `permitted_params` setting are automatically whitelisted.
|
32
47
|
#
|
33
48
|
# Either
|
34
49
|
#
|
@@ -45,16 +60,22 @@ module ActiveAdmin
|
|
45
60
|
# end
|
46
61
|
# end
|
47
62
|
#
|
48
|
-
# Keys included in the `permitted_params` setting are automatically whitelisted.
|
49
|
-
#
|
50
63
|
def permit_params(*args, &block)
|
51
64
|
param_key = config.param_key.to_sym
|
65
|
+
belongs_to_param = config.belongs_to_param
|
66
|
+
create_another_param = :create_another if config.create_another
|
52
67
|
|
53
68
|
controller do
|
54
69
|
define_method :permitted_params do
|
55
|
-
|
56
|
-
|
70
|
+
permitted_params =
|
71
|
+
active_admin_namespace.permitted_params +
|
72
|
+
Array.wrap(belongs_to_param) +
|
73
|
+
Array.wrap(create_another_param)
|
74
|
+
|
75
|
+
params.permit(*permitted_params, param_key => block ? instance_exec(&block) : args)
|
57
76
|
end
|
77
|
+
|
78
|
+
private :permitted_params
|
58
79
|
end
|
59
80
|
end
|
60
81
|
|
@@ -86,8 +107,8 @@ module ActiveAdmin
|
|
86
107
|
# column :name
|
87
108
|
# end
|
88
109
|
#
|
89
|
-
def csv(options={}, &block)
|
90
|
-
options[:resource] =
|
110
|
+
def csv(options = {}, &block)
|
111
|
+
options[:resource] = config
|
91
112
|
|
92
113
|
config.csv_builder = CSVBuilder.new(options, &block)
|
93
114
|
end
|
@@ -100,7 +121,7 @@ module ActiveAdmin
|
|
100
121
|
#
|
101
122
|
# ActiveAdmin.register Post do
|
102
123
|
# member_action :comments do
|
103
|
-
# @post = Post.find(params[:id]
|
124
|
+
# @post = Post.find(params[:id])
|
104
125
|
# @comments = @post.comments
|
105
126
|
# end
|
106
127
|
# end
|
@@ -112,13 +133,14 @@ module ActiveAdmin
|
|
112
133
|
# action.
|
113
134
|
#
|
114
135
|
def action(set, name, options = {}, &block)
|
136
|
+
warn "Warning: method `#{name}` already defined in #{controller.name}" if controller.method_defined?(name)
|
137
|
+
|
115
138
|
set << ControllerAction.new(name, options)
|
116
139
|
title = options.delete(:title)
|
117
140
|
|
118
141
|
controller do
|
119
|
-
|
120
|
-
|
121
|
-
define_method(name, &block || Proc.new{})
|
142
|
+
before_action(only: [name]) { @page_title = title } if title
|
143
|
+
define_method(name, &block || Proc.new {})
|
122
144
|
end
|
123
145
|
end
|
124
146
|
|
@@ -130,6 +152,13 @@ module ActiveAdmin
|
|
130
152
|
action config.collection_actions, name, options, &block
|
131
153
|
end
|
132
154
|
|
155
|
+
def decorate_with(decorator_class)
|
156
|
+
# Force storage as a string. This will help us with reloading issues.
|
157
|
+
# Assuming decorator_class.to_s will return the name of the class allows
|
158
|
+
# us to handle a string or a class.
|
159
|
+
config.decorator_class_name = "::#{ decorator_class }"
|
160
|
+
end
|
161
|
+
|
133
162
|
# Defined Callbacks
|
134
163
|
#
|
135
164
|
# == After Build
|
@@ -160,19 +189,24 @@ module ActiveAdmin
|
|
160
189
|
delegate :before_save, :after_save, to: :controller
|
161
190
|
delegate :before_destroy, :after_destroy, to: :controller
|
162
191
|
|
163
|
-
# This code defines both *_filter and *_action for Rails
|
164
|
-
|
192
|
+
# This code defines both *_filter and *_action for Rails 5.0 and *_action for Rails >= 5.1
|
193
|
+
phases = [
|
165
194
|
:before, :skip_before,
|
166
195
|
:after, :skip_after,
|
167
196
|
:around, :skip
|
168
197
|
]
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
198
|
+
keywords = if Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR >= 1
|
199
|
+
[:action]
|
200
|
+
else
|
201
|
+
[:action, :filter]
|
202
|
+
end
|
203
|
+
|
204
|
+
keywords.each do |name|
|
205
|
+
phases.each do |action|
|
206
|
+
define_method "#{action}_#{name}" do |*args, &block|
|
207
|
+
controller.public_send "#{action}_action", *args, &block
|
208
|
+
end
|
209
|
+
end
|
176
210
|
end
|
177
211
|
|
178
212
|
# Specify which actions to create in the controller
|
data/lib/active_admin/router.rb
CHANGED
@@ -1,106 +1,114 @@
|
|
1
1
|
module ActiveAdmin
|
2
|
+
# @private
|
2
3
|
class Router
|
3
|
-
|
4
|
-
|
4
|
+
attr_reader :namespaces, :router
|
5
|
+
|
6
|
+
def initialize(router:, namespaces:)
|
7
|
+
@router = router
|
8
|
+
@namespaces = namespaces
|
5
9
|
end
|
6
10
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
#
|
11
|
-
# Application.routes.draw do |map|
|
12
|
-
# ActiveAdmin.routes(self)
|
13
|
-
# end
|
14
|
-
#
|
15
|
-
def apply(router)
|
16
|
-
define_root_routes router
|
17
|
-
define_resource_routes router
|
11
|
+
def apply
|
12
|
+
define_root_routes
|
13
|
+
define_resources_routes
|
18
14
|
end
|
19
15
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
16
|
+
private
|
17
|
+
|
18
|
+
def define_root_routes
|
19
|
+
namespaces.each do |namespace|
|
20
|
+
if namespace.root?
|
21
|
+
router.root namespace.root_to_options.merge(to: namespace.root_to)
|
22
|
+
else
|
23
|
+
router.namespace namespace.name, namespace.route_options.dup do
|
24
|
+
router.root namespace.root_to_options.merge(to: namespace.root_to, as: :root)
|
29
25
|
end
|
30
26
|
end
|
31
27
|
end
|
32
28
|
end
|
33
29
|
|
34
30
|
# Defines the routes for each resource
|
35
|
-
def
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
# Add in the parent if it exists
|
42
|
-
if config.belongs_to?
|
43
|
-
belongs_to = routes
|
44
|
-
routes = Proc.new do
|
45
|
-
# If it's optional, make the normal resource routes
|
46
|
-
instance_exec &belongs_to if config.belongs_to_config.optional?
|
47
|
-
|
48
|
-
# Make the nested belongs_to routes
|
49
|
-
# :only is set to nothing so that we don't clobber any existing routes on the resource
|
50
|
-
resources config.belongs_to_config.target.resource_name.plural, only: [] do
|
51
|
-
instance_exec &belongs_to
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
31
|
+
def define_resources_routes
|
32
|
+
resources = namespaces.flat_map { |n| n.resources.values }
|
33
|
+
resources.each do |config|
|
34
|
+
define_resource_routes(config)
|
35
|
+
end
|
36
|
+
end
|
55
37
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
end
|
38
|
+
def define_resource_routes(config)
|
39
|
+
if config.namespace.root?
|
40
|
+
define_routes(config)
|
41
|
+
else
|
42
|
+
# Add on the namespace if required
|
43
|
+
define_namespace(config)
|
44
|
+
end
|
45
|
+
end
|
65
46
|
|
66
|
-
|
67
|
-
|
47
|
+
def define_routes(config)
|
48
|
+
if config.belongs_to?
|
49
|
+
define_belongs_to_routes(config)
|
50
|
+
else
|
51
|
+
page_or_resource_routes(config)
|
68
52
|
end
|
69
53
|
end
|
70
54
|
|
55
|
+
def page_or_resource_routes(config)
|
56
|
+
config.is_a?(Page) ? page_routes(config) : resource_routes(config)
|
57
|
+
end
|
58
|
+
|
71
59
|
def resource_routes(config)
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
resources config.resource_name.route_key, only: config.defined_actions do
|
84
|
-
member do
|
85
|
-
config.member_actions.each &build_action
|
86
|
-
end
|
87
|
-
|
88
|
-
collection do
|
89
|
-
config.collection_actions.each &build_action
|
90
|
-
post :batch_action if config.batch_actions_enabled?
|
91
|
-
end
|
92
|
-
end
|
93
|
-
when ::ActiveAdmin::Page
|
94
|
-
page = config.underscored_resource_name
|
95
|
-
get "/#{page}" => "#{page}#index"
|
96
|
-
config.page_actions.each do |action|
|
97
|
-
build_route.call action.http_verb, "/#{page}/#{action.name}" => "#{page}##{action.name}"
|
98
|
-
end
|
99
|
-
else
|
100
|
-
raise "Unsupported config class: #{config.class}"
|
60
|
+
router.resources config.resource_name.route_key, only: config.defined_actions do
|
61
|
+
define_actions(config)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def page_routes(config)
|
66
|
+
page = config.underscored_resource_name
|
67
|
+
router.get "/#{page}" => "#{page}#index"
|
68
|
+
config.page_actions.each do |action|
|
69
|
+
Array.wrap(action.http_verb).each do |verb|
|
70
|
+
build_route(verb, "/#{page}/#{action.name}" => "#{page}##{action.name}")
|
101
71
|
end
|
102
72
|
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# Defines member and collection actions
|
76
|
+
def define_actions(config)
|
77
|
+
router.member do
|
78
|
+
config.member_actions.each { |action| build_action(action) }
|
79
|
+
end
|
80
|
+
|
81
|
+
router.collection do
|
82
|
+
config.collection_actions.each { |action| build_action(action) }
|
83
|
+
router.post :batch_action if config.batch_actions_enabled?
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
# Deals with +ControllerAction+ instances
|
88
|
+
# Builds one route for each HTTP verb passed in
|
89
|
+
def build_action(action)
|
90
|
+
build_route(action.http_verb, action.name)
|
91
|
+
end
|
92
|
+
|
93
|
+
def build_route(verbs, *args)
|
94
|
+
Array.wrap(verbs).each { |verb| router.send(verb, *args) }
|
95
|
+
end
|
96
|
+
|
97
|
+
def define_belongs_to_routes(config)
|
98
|
+
# If it's optional, make the normal resource routes
|
99
|
+
page_or_resource_routes(config) if config.belongs_to_config.optional?
|
100
|
+
|
101
|
+
# Make the nested belongs_to routes
|
102
|
+
# :only is set to nothing so that we don't clobber any existing routes on the resource
|
103
|
+
router.resources config.belongs_to_config.target.resource_name.plural, only: [] do
|
104
|
+
page_or_resource_routes(config)
|
105
|
+
end
|
106
|
+
end
|
103
107
|
|
108
|
+
def define_namespace(config)
|
109
|
+
router.namespace config.namespace.name, config.namespace.route_options.dup do
|
110
|
+
define_routes(config)
|
111
|
+
end
|
104
112
|
end
|
105
113
|
end
|
106
114
|
end
|
data/lib/active_admin/scope.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module ActiveAdmin
|
2
2
|
class Scope
|
3
3
|
|
4
|
-
attr_reader :scope_method, :id, :scope_block, :display_if_block, :show_count, :default_block
|
4
|
+
attr_reader :scope_method, :id, :scope_block, :display_if_block, :show_count, :default_block, :group
|
5
5
|
|
6
6
|
# Create a Scope
|
7
7
|
#
|
@@ -24,31 +24,39 @@ module ActiveAdmin
|
|
24
24
|
# Scope.new ->{Date.today.strftime '%A'}, :published_today
|
25
25
|
# # => Scope with dynamic title using the :published_today scope method
|
26
26
|
#
|
27
|
+
# Scope.new :published, nil, group: :status
|
28
|
+
# # => Scope with the group :status
|
29
|
+
#
|
27
30
|
def initialize(name, method = nil, options = {}, &block)
|
28
|
-
@name
|
31
|
+
@name = name
|
32
|
+
@scope_method = method.try(:to_sym)
|
29
33
|
|
30
34
|
if name.is_a? Proc
|
31
35
|
raise "A string/symbol is required as the second argument if your label is a proc." unless method
|
32
|
-
@id =
|
36
|
+
@id = method.to_s.parameterize(separator: "_")
|
33
37
|
else
|
34
38
|
@scope_method ||= name.to_sym
|
35
|
-
@id =
|
39
|
+
@id = name.to_s.parameterize(separator: "_")
|
36
40
|
end
|
37
41
|
|
38
|
-
@scope_method
|
39
|
-
|
42
|
+
@scope_method = nil if @scope_method == :all
|
43
|
+
if block_given?
|
44
|
+
@scope_method = nil
|
45
|
+
@scope_block = block
|
46
|
+
end
|
40
47
|
|
48
|
+
@localizer = options[:localizer]
|
41
49
|
@show_count = options.fetch(:show_count, true)
|
42
|
-
@display_if_block = options[:if] || proc{ true }
|
43
|
-
@default_block = options[:default] || proc{ false }
|
50
|
+
@display_if_block = options[:if] || proc { true }
|
51
|
+
@default_block = options[:default] || proc { false }
|
52
|
+
@group = options[:group].try(:to_sym)
|
44
53
|
end
|
45
54
|
|
46
55
|
def name
|
47
56
|
case @name
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
else @name.to_s
|
57
|
+
when String then @name
|
58
|
+
when Symbol then @localizer ? @localizer.t(@name, scope: 'scopes') : @name.to_s.titleize
|
59
|
+
else @name
|
52
60
|
end
|
53
61
|
end
|
54
62
|
|