activeadmin 0.6.6 → 1.0.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activeadmin might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.gitignore +11 -8
- data/.hound.yml +11 -0
- data/.travis.yml +36 -10
- data/.yardopts +2 -1
- data/CHANGELOG.md +118 -67
- data/CONTRIBUTING.md +96 -73
- data/Gemfile +35 -35
- data/Guardfile +1 -0
- data/LICENSE +1 -1
- data/README.md +98 -0
- data/Rakefile +12 -4
- data/activeadmin.gemspec +21 -24
- data/app/assets/javascripts/active_admin/application.js.coffee +32 -0
- data/app/assets/javascripts/active_admin/base.js.coffee +14 -0
- data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
- data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
- data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +39 -0
- data/app/assets/javascripts/active_admin/{components/jquery.aa.checkbox-toggler.js.coffee → lib/checkbox-toggler.js.coffee} +3 -4
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +101 -0
- data/app/assets/javascripts/active_admin/lib/flash.js.coffee +19 -0
- data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +79 -0
- data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +37 -0
- data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +27 -0
- data/app/assets/javascripts/active_admin/lib/popover.js.coffee +68 -0
- data/app/assets/javascripts/active_admin/{components/jquery.aa.table-checkbox-toggler.js.coffee → lib/table-checkbox-toggler.js.coffee} +2 -3
- data/app/assets/stylesheets/active_admin/{_base.css.scss → _base.scss} +3 -0
- data/app/assets/stylesheets/active_admin/{_forms.css.scss → _forms.scss} +61 -17
- data/app/assets/stylesheets/active_admin/{_header.css.scss → _header.scss} +9 -5
- data/app/assets/stylesheets/active_admin/{_mixins.css.scss → _mixins.scss} +0 -0
- data/app/assets/stylesheets/active_admin/{_typography.css.scss → _typography.scss} +0 -0
- data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +11 -0
- data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +0 -1
- data/app/assets/stylesheets/active_admin/components/_buttons.scss +1 -1
- data/app/assets/stylesheets/active_admin/components/{_comments.css.scss → _comments.scss} +0 -0
- data/app/assets/stylesheets/active_admin/components/{_date_picker.css.scss → _date_picker.scss} +40 -14
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +5 -4
- data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
- data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
- data/app/assets/stylesheets/active_admin/components/_pagination.scss +10 -0
- data/app/assets/stylesheets/active_admin/components/{_popovers.css.scss → _popovers.scss} +2 -3
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +4 -0
- data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
- data/app/assets/stylesheets/active_admin/components/{_tables.css.scss → _tables.scss} +4 -2
- data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
- data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
- data/app/assets/stylesheets/active_admin/mixins/{_all.css.scss → _all.scss} +0 -0
- data/app/assets/stylesheets/active_admin/mixins/{_buttons.css.scss → _buttons.scss} +0 -1
- data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
- data/app/assets/stylesheets/active_admin/mixins/{_icons.css.scss → _icons.scss} +1 -2
- data/app/assets/stylesheets/active_admin/mixins/{_reset.css.scss → _reset.scss} +0 -0
- data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
- data/app/assets/stylesheets/active_admin/mixins/{_sections.css.scss → _sections.scss} +8 -2
- data/app/assets/stylesheets/active_admin/mixins/{_shadows.css.scss → _shadows.scss} +0 -7
- data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +0 -9
- data/app/assets/stylesheets/active_admin/mixins/{_variables.css.scss → _variables.scss} +10 -8
- data/app/assets/stylesheets/active_admin/{print.css.scss → print.scss} +4 -0
- data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +5 -2
- data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +11 -9
- data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
- data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
- data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +1 -1
- data/app/views/active_admin/devise/passwords/edit.html.erb +9 -10
- data/app/views/active_admin/devise/passwords/new.html.erb +5 -4
- data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
- data/app/views/active_admin/devise/sessions/new.html.erb +9 -7
- data/app/views/active_admin/devise/shared/_links.erb +1 -1
- data/app/views/active_admin/devise/unlocks/new.html.erb +5 -4
- data/app/views/layouts/active_admin_logged_out.html.erb +3 -5
- data/config/locales/ar.yml +120 -0
- data/config/locales/bg.yml +26 -6
- data/config/locales/bs.yml +122 -0
- data/config/locales/ca.yml +10 -1
- data/config/locales/cs.yml +7 -2
- data/config/locales/da.yml +7 -3
- data/config/locales/de-CH.yml +14 -31
- data/config/locales/de.yml +33 -33
- data/config/locales/el.yml +28 -2
- data/config/locales/en-GB.yml +12 -4
- data/config/locales/en.yml +29 -3
- data/config/locales/{es_MX.yml → es-MX.yml} +9 -24
- data/config/locales/es.yml +32 -25
- data/config/locales/fa.yml +120 -0
- data/config/locales/fi.yml +113 -0
- data/config/locales/fr.yml +21 -11
- data/config/locales/he.yml +7 -3
- data/config/locales/hr.yml +42 -11
- data/config/locales/hu.yml +10 -3
- data/config/locales/it.yml +31 -3
- data/config/locales/ja.yml +8 -3
- data/config/locales/ko.yml +7 -1
- data/config/locales/lt.yml +42 -11
- data/config/locales/lv.yml +7 -3
- data/config/locales/{no-NB.yml → nb.yml} +46 -15
- data/config/locales/nl.yml +36 -5
- data/config/locales/pl.yml +13 -8
- data/config/locales/pt-BR.yml +37 -5
- data/config/locales/pt-PT.yml +8 -4
- data/config/locales/ro.yml +7 -3
- data/config/locales/ru.yml +26 -5
- data/config/locales/sv-SE.yml +9 -5
- data/config/locales/tr.yml +10 -3
- data/config/locales/uk.yml +36 -12
- data/config/locales/vi.yml +7 -3
- data/config/locales/zh-CN.yml +26 -10
- data/config/locales/zh-TW.yml +19 -13
- data/docs/0-installation.md +65 -29
- data/docs/1-general-configuration.md +92 -81
- data/docs/10-custom-pages.md +68 -68
- data/docs/11-decorators.md +48 -59
- data/docs/12-arbre-components.md +80 -74
- data/docs/13-authorization-adapter.md +128 -107
- data/docs/14-gotchas.md +92 -0
- data/docs/2-resource-customization.md +293 -178
- data/docs/3-index-pages.md +160 -86
- data/docs/3-index-pages/custom-index.md +31 -0
- data/docs/3-index-pages/index-as-block.md +14 -9
- data/docs/3-index-pages/index-as-blog.md +41 -31
- data/docs/3-index-pages/index-as-grid.md +16 -8
- data/docs/3-index-pages/index-as-table.md +129 -52
- data/docs/4-csv-format.md +31 -24
- data/docs/5-forms.md +133 -56
- data/docs/6-show-pages.md +89 -27
- data/docs/7-sidebars.md +48 -27
- data/docs/8-custom-actions.md +98 -77
- data/docs/9-batch-actions.md +210 -146
- data/docs/README.md +24 -0
- data/features/action_item.feature +3 -3
- data/features/authorization_pundit.feature +37 -0
- data/features/breadcrumb.feature +48 -0
- data/features/comments/commenting.feature +56 -13
- data/features/development_reloading.feature +17 -30
- data/features/edit_page.feature +12 -1
- data/features/favicon.feature +3 -3
- data/features/i18n.feature +5 -4
- data/features/index/batch_actions.feature +41 -0
- data/features/index/filters.feature +67 -0
- data/features/index/format_as_csv.feature +90 -4
- data/features/index/formats.feature +27 -0
- data/features/index/index_as_blog.feature +4 -4
- data/features/index/index_as_table.feature +102 -6
- data/features/index/index_blank_slate.feature +22 -0
- data/features/index/index_scope_to.feature +16 -16
- data/features/index/page_title.feature +11 -0
- data/features/index/pagination.feature +1 -1
- data/features/index/switch_index_view.feature +14 -14
- data/features/new_page.feature +13 -2
- data/features/registering_pages.feature +1 -1
- data/features/renamed_resource.feature +32 -0
- data/features/show/page_title.feature +11 -0
- data/features/show/tabs.feature +27 -0
- data/features/sidebar_sections.feature +12 -0
- data/features/site_title.feature +2 -2
- data/features/specifying_actions.feature +3 -3
- data/features/step_definitions/action_item_steps.rb +2 -2
- data/features/step_definitions/action_link_steps.rb +14 -1
- data/features/step_definitions/additional_web_steps.rb +19 -20
- data/features/step_definitions/asset_steps.rb +3 -3
- data/features/step_definitions/attribute_steps.rb +8 -3
- data/features/step_definitions/batch_action_steps.rb +26 -9
- data/features/step_definitions/blog_steps.rb +3 -0
- data/features/step_definitions/breadcrumb_steps.rb +1 -1
- data/features/step_definitions/comment_steps.rb +1 -1
- data/features/step_definitions/configuration_steps.rb +9 -2
- data/features/step_definitions/dashboard_steps.rb +2 -2
- data/features/step_definitions/factory_steps.rb +9 -8
- data/features/step_definitions/filter_steps.rb +25 -3
- data/features/step_definitions/flash_steps.rb +3 -3
- data/features/step_definitions/format_steps.rb +18 -18
- data/features/step_definitions/index_scope_steps.rb +5 -5
- data/features/step_definitions/layout_steps.rb +1 -1
- data/features/step_definitions/member_link_steps.rb +2 -2
- data/features/step_definitions/menu_steps.rb +3 -3
- data/features/step_definitions/pagination_steps.rb +2 -3
- data/features/step_definitions/sidebar_steps.rb +8 -3
- data/features/step_definitions/site_title_steps.rb +6 -4
- data/features/step_definitions/symbol_leak_steps.rb +3 -0
- data/features/step_definitions/tab_steps.rb +5 -0
- data/features/step_definitions/table_steps.rb +4 -4
- data/features/step_definitions/user_steps.rb +10 -7
- data/features/step_definitions/web_steps.rb +14 -11
- data/features/sti_resource.feature +6 -2
- data/features/strong_parameters.feature +73 -0
- data/features/support/env.rb +34 -9
- data/features/support/paths.rb +14 -6
- data/features/support/selectors.rb +1 -1
- data/features/symbol_leak.feature +35 -0
- data/features/users/resetting_password.feature +5 -6
- data/lib/active_admin.rb +26 -25
- data/lib/active_admin/abstract_view_factory.rb +7 -17
- data/lib/active_admin/application.rb +72 -59
- data/lib/active_admin/asset_registration.rb +2 -2
- data/lib/active_admin/authorization_adapter.rb +2 -2
- data/lib/active_admin/base_controller.rb +2 -3
- data/lib/active_admin/base_controller/authorization.rb +13 -31
- data/lib/active_admin/batch_actions.rb +1 -1
- data/lib/active_admin/batch_actions/controller.rb +24 -8
- data/lib/active_admin/batch_actions/resource_extension.rb +47 -18
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +7 -4
- data/lib/active_admin/batch_actions/views/batch_action_popover.rb +3 -3
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +8 -17
- data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -4
- data/lib/active_admin/callbacks.rb +25 -24
- data/lib/active_admin/cancan_adapter.rb +7 -11
- data/lib/active_admin/csv_builder.rb +92 -15
- data/lib/active_admin/dependency.rb +93 -0
- data/lib/active_admin/deprecation.rb +6 -7
- data/lib/active_admin/devise.rb +28 -18
- data/lib/active_admin/dsl.rb +18 -11
- data/lib/active_admin/engine.rb +10 -8
- data/lib/active_admin/error.rb +62 -0
- data/lib/active_admin/filters/dsl.rb +2 -2
- data/lib/active_admin/filters/forms.rb +17 -27
- data/lib/active_admin/filters/formtastic_addons.rb +49 -15
- data/lib/active_admin/filters/resource_extension.rb +43 -34
- data/lib/active_admin/form_builder.rb +93 -154
- data/lib/active_admin/helpers/collection.rb +7 -13
- data/lib/active_admin/helpers/i18n.rb +7 -0
- data/lib/active_admin/helpers/optional_display.rb +5 -5
- data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
- data/lib/active_admin/helpers/scope_chain.rb +1 -1
- data/lib/active_admin/helpers/settings.rb +16 -9
- data/lib/active_admin/iconic.rb +17 -15
- data/lib/active_admin/iconic/icons.rb +136 -136
- data/lib/active_admin/inputs.rb +11 -7
- data/lib/active_admin/inputs/datepicker_input.rb +12 -3
- data/lib/active_admin/inputs/filters/base.rb +42 -0
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
- data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
- data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
- data/lib/active_admin/inputs/filters/date_range_input.rb +36 -0
- data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
- data/lib/active_admin/inputs/filters/select_input.rb +54 -0
- data/lib/active_admin/inputs/filters/string_input.rb +26 -0
- data/lib/active_admin/menu.rb +6 -4
- data/lib/active_admin/menu_collection.rb +1 -4
- data/lib/active_admin/namespace.rb +55 -29
- data/lib/active_admin/order_clause.rb +26 -0
- data/lib/active_admin/orm/active_record.rb +5 -0
- data/lib/active_admin/orm/active_record/comments.rb +81 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +45 -0
- data/lib/active_admin/{comments → orm/active_record/comments}/namespace_helper.rb +2 -2
- data/lib/active_admin/{comments → orm/active_record/comments}/resource_helper.rb +1 -1
- data/lib/active_admin/{comments → orm/active_record/comments}/show_page_helper.rb +0 -0
- data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
- data/lib/active_admin/{comments → orm/active_record/comments}/views/active_admin_comments.rb +16 -14
- data/lib/active_admin/orm/mongoid.rb +1 -0
- data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
- data/lib/active_admin/page.rb +7 -3
- data/lib/active_admin/page_dsl.rb +1 -1
- data/lib/active_admin/page_presenter.rb +2 -2
- data/lib/active_admin/pundit_adapter.rb +68 -0
- data/lib/active_admin/resource.rb +16 -17
- data/lib/active_admin/resource/action_items.rb +23 -18
- data/lib/active_admin/resource/belongs_to.rb +7 -3
- data/lib/active_admin/resource/controllers.rb +1 -0
- data/lib/active_admin/resource/includes.rb +12 -0
- data/lib/active_admin/resource/menu.rb +5 -5
- data/lib/active_admin/resource/naming.rb +27 -43
- data/lib/active_admin/resource/page_presenters.rb +1 -1
- data/lib/active_admin/resource/routes.rb +27 -11
- data/lib/active_admin/resource/scope_to.rb +7 -7
- data/lib/active_admin/resource/sidebars.rb +1 -0
- data/lib/active_admin/resource_controller.rb +6 -7
- data/lib/active_admin/resource_controller/data_access.rb +101 -93
- data/lib/active_admin/resource_controller/decorators.rb +91 -9
- data/lib/active_admin/resource_controller/streaming.rb +37 -0
- data/lib/active_admin/resource_dsl.rb +53 -10
- data/lib/active_admin/router.rb +7 -7
- data/lib/active_admin/scope.rb +6 -6
- data/lib/active_admin/sidebar_section.rb +10 -2
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_factory.rb +17 -17
- data/lib/active_admin/view_helpers.rb +0 -1
- data/lib/active_admin/view_helpers/auto_link_helper.rb +23 -12
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +4 -3
- data/lib/active_admin/view_helpers/display_helper.rb +30 -15
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +21 -25
- data/lib/active_admin/view_helpers/fields_for.rb +4 -4
- data/lib/active_admin/view_helpers/flash_helper.rb +4 -3
- data/lib/active_admin/view_helpers/form_helper.rb +5 -9
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +6 -6
- data/lib/active_admin/views/action_items.rb +2 -2
- data/lib/active_admin/views/components/action_list_popover.rb +1 -1
- data/lib/active_admin/views/components/active_admin_form.rb +123 -0
- data/lib/active_admin/views/components/attributes_table.rb +63 -21
- data/lib/active_admin/views/components/blank_slate.rb +1 -1
- data/lib/active_admin/views/components/columns.rb +13 -7
- data/lib/active_admin/views/components/dropdown_menu.rb +6 -6
- data/lib/active_admin/views/components/index_list.rb +7 -7
- data/lib/active_admin/views/components/paginated_collection.rb +38 -20
- data/lib/active_admin/views/components/panel.rb +8 -2
- data/lib/active_admin/views/components/popover.rb +1 -1
- data/lib/active_admin/views/components/scopes.rb +5 -4
- data/lib/active_admin/views/components/sidebar_section.rb +3 -2
- data/lib/active_admin/views/components/site_title.rb +2 -2
- data/lib/active_admin/views/components/status_tag.rb +34 -11
- data/lib/active_admin/views/components/table_for.rb +90 -45
- data/lib/active_admin/views/components/tabs.rb +28 -0
- data/lib/active_admin/views/components/unsupported_browser.rb +11 -0
- data/lib/active_admin/views/footer.rb +3 -3
- data/lib/active_admin/views/header.rb +3 -3
- data/lib/active_admin/views/index_as_block.rb +10 -10
- data/lib/active_admin/views/index_as_blog.rb +45 -39
- data/lib/active_admin/views/index_as_grid.rb +14 -10
- data/lib/active_admin/views/index_as_table.rb +242 -129
- data/lib/active_admin/views/pages/base.rb +22 -18
- data/lib/active_admin/views/pages/form.rb +21 -11
- data/lib/active_admin/views/pages/index.rb +40 -35
- data/lib/active_admin/views/pages/layout.rb +1 -1
- data/lib/active_admin/views/pages/show.rb +4 -4
- data/lib/active_admin/views/tabbed_navigation.rb +7 -3
- data/lib/active_admin/views/title_bar.rb +10 -8
- data/lib/generators/active_admin/assets/assets_generator.rb +3 -28
- data/lib/generators/active_admin/assets/templates/{3.1/active_admin.css.scss → active_admin.css.scss} +0 -0
- data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +24 -26
- data/lib/generators/active_admin/install/install_generator.rb +8 -9
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +28 -26
- data/lib/generators/active_admin/install/templates/admin_user.rb.erb +12 -2
- data/lib/generators/active_admin/install/templates/dashboard.rb +4 -4
- data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +3 -3
- data/lib/generators/active_admin/page/USAGE +8 -0
- data/lib/generators/active_admin/page/page_generator.rb +12 -0
- data/lib/generators/active_admin/page/templates/page.rb +5 -0
- data/lib/generators/active_admin/resource/resource_generator.rb +3 -5
- data/lib/generators/active_admin/resource/templates/admin.rb +15 -0
- data/lib/ransack_ext.rb +12 -0
- data/script/local +2 -2
- data/script/travis_cache +107 -0
- data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +25 -0
- data/spec/javascripts/fixtures/flashes.html +2 -0
- data/spec/rails_helper.rb +154 -0
- data/spec/{integration → requests}/default_namespace_spec.rb +6 -6
- data/spec/{integration → requests}/javascript_spec.rb +5 -5
- data/spec/requests/memory_spec.rb +23 -0
- data/spec/requests/stylesheets_spec.rb +18 -0
- data/spec/spec_helper.rb +12 -173
- data/spec/support/detect_rails_version.rb +9 -17
- data/spec/support/rails_template.rb +64 -35
- data/spec/support/rails_template_with_data.rb +14 -14
- data/spec/support/templates/admin/stores.rb +5 -1
- data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
- data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
- data/spec/support/templates/policies/admin_user_policy.rb +11 -0
- data/spec/support/templates/policies/application_policy.rb +45 -0
- data/spec/support/templates/policies/category_policy.rb +7 -0
- data/spec/support/templates/policies/post_policy.rb +15 -0
- data/spec/support/templates/policies/store_policy.rb +11 -0
- data/spec/support/templates/policies/user_policy.rb +11 -0
- data/spec/support/templates/post_decorator.rb +4 -46
- data/spec/unit/abstract_view_factory_spec.rb +16 -16
- data/spec/unit/action_builder_spec.rb +24 -18
- data/spec/unit/active_admin_spec.rb +2 -2
- data/spec/unit/application_spec.rb +33 -34
- data/spec/unit/asset_registration_spec.rb +25 -29
- data/spec/unit/authorization/authorization_adapter_spec.rb +10 -10
- data/spec/unit/authorization/controller_authorization_spec.rb +11 -11
- data/spec/unit/authorization/index_overriding_spec.rb +22 -0
- data/spec/unit/auto_link_spec.rb +43 -13
- data/spec/unit/batch_actions/resource_spec.rb +15 -14
- data/spec/unit/batch_actions/settings_spec.rb +18 -18
- data/spec/unit/belongs_to_spec.rb +28 -19
- data/spec/unit/cancan_adapter_spec.rb +8 -8
- data/spec/unit/comments_spec.rb +99 -39
- data/spec/unit/component_spec.rb +3 -3
- data/spec/unit/config_shared_examples.rb +10 -10
- data/spec/unit/controller_filters_spec.rb +23 -16
- data/spec/unit/csv_builder_spec.rb +165 -24
- data/spec/unit/dependency_spec.rb +135 -0
- data/spec/unit/devise_spec.rb +17 -37
- data/spec/unit/dsl_spec.rb +70 -9
- data/spec/unit/event_spec.rb +11 -11
- data/spec/unit/filters/filter_form_builder_spec.rb +207 -148
- data/spec/unit/filters/resource_spec.rb +60 -26
- data/spec/unit/form_builder_spec.rb +419 -145
- data/spec/unit/generators/install_spec.rb +23 -0
- data/spec/unit/helpers/collection_spec.rb +18 -18
- data/spec/unit/helpers/scope_chain_spec.rb +6 -6
- data/spec/unit/helpers/settings_spec.rb +4 -4
- data/spec/unit/i18n_spec.rb +12 -0
- data/spec/unit/menu_collection_spec.rb +14 -14
- data/spec/unit/menu_item_spec.rb +42 -42
- data/spec/unit/menu_spec.rb +20 -20
- data/spec/unit/namespace/authorization_spec.rb +8 -8
- data/spec/unit/namespace/register_page_spec.rb +11 -11
- data/spec/unit/namespace/register_resource_spec.rb +28 -30
- data/spec/unit/namespace_spec.rb +20 -20
- data/spec/unit/order_clause_spec.rb +81 -0
- data/spec/unit/page_controller_spec.rb +1 -1
- data/spec/unit/page_spec.rb +18 -12
- data/spec/unit/pretty_format_spec.rb +42 -14
- data/spec/unit/pundit_adapter_spec.rb +98 -0
- data/spec/unit/resource/action_items_spec.rb +15 -12
- data/spec/unit/resource/includes_spec.rb +21 -0
- data/spec/unit/resource/menu_spec.rb +1 -1
- data/spec/unit/resource/naming_spec.rb +35 -21
- data/spec/unit/resource/page_presenters_spec.rb +8 -8
- data/spec/unit/resource/pagination_spec.rb +6 -6
- data/spec/unit/resource/routes_spec.rb +10 -10
- data/spec/unit/resource/scopes_spec.rb +14 -7
- data/spec/unit/resource/sidebars_spec.rb +6 -6
- data/spec/unit/resource_collection_spec.rb +31 -38
- data/spec/unit/resource_controller/data_access_spec.rb +96 -30
- data/spec/unit/resource_controller/decorators_spec.rb +83 -0
- data/spec/unit/resource_controller/sidebars_spec.rb +7 -8
- data/spec/unit/resource_controller_spec.rb +73 -70
- data/spec/unit/resource_registration_spec.rb +12 -12
- data/spec/unit/resource_spec.rb +77 -42
- data/spec/unit/routing_spec.rb +39 -31
- data/spec/unit/scope_spec.rb +112 -30
- data/spec/unit/settings_spec.rb +51 -21
- data/spec/unit/view_factory_spec.rb +2 -3
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +71 -60
- data/spec/unit/view_helpers/display_name_spec.rb +49 -21
- data/spec/unit/view_helpers/download_format_links_helper_spec.rb +5 -5
- data/spec/unit/view_helpers/fields_for_spec.rb +18 -18
- data/spec/unit/view_helpers/flash_helper_spec.rb +25 -0
- data/spec/unit/view_helpers/form_helper_spec.rb +10 -23
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +64 -22
- data/spec/unit/views/components/action_list_popover_spec.rb +16 -6
- data/spec/unit/views/components/attributes_table_spec.rb +171 -30
- data/spec/unit/views/components/batch_action_popover_spec.rb +20 -6
- data/spec/unit/views/components/blank_slate_spec.rb +14 -4
- data/spec/unit/views/components/columns_spec.rb +52 -22
- data/spec/unit/views/components/index_list_spec.rb +11 -8
- data/spec/unit/views/components/index_table_for_spec.rb +46 -0
- data/spec/unit/views/components/paginated_collection_spec.rb +79 -90
- data/spec/unit/views/components/panel_spec.rb +32 -21
- data/spec/unit/views/components/popover_spec.rb +7 -7
- data/spec/unit/views/components/sidebar_section_spec.rb +18 -8
- data/spec/unit/views/components/site_title_spec.rb +26 -26
- data/spec/unit/views/components/status_tag_spec.rb +178 -38
- data/spec/unit/views/components/table_for_spec.rb +237 -35
- data/spec/unit/views/components/tabs_spec.rb +39 -0
- data/spec/unit/views/components/unsupported_browser_spec.rb +47 -0
- data/spec/unit/views/pages/form_spec.rb +17 -10
- data/spec/unit/views/pages/index_spec.rb +60 -0
- data/spec/unit/views/pages/layout_spec.rb +17 -21
- data/spec/unit/views/pages/show_spec.rb +18 -6
- data/spec/unit/views/tabbed_navigation_spec.rb +61 -52
- data/tasks/docs.rake +9 -11
- data/tasks/parallel_tests.rake +8 -2
- data/tasks/test.rake +13 -9
- data/tasks/yard.rake +7 -4
- metadata +219 -163
- data/.document +0 -5
- data/README.rdoc +0 -88
- data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
- data/app/assets/images/active_admin/index_list_icons/block_icon.svg +0 -10
- data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +0 -4
- data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +0 -13
- data/app/assets/images/active_admin/index_list_icons/table_icon.svg +0 -3
- data/app/assets/images/active_admin/loading.gif +0 -0
- data/app/assets/javascripts/active_admin/application.js +0 -3
- data/app/assets/javascripts/active_admin/base.js +0 -5
- data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +0 -105
- data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +0 -97
- data/app/assets/javascripts/active_admin/lib/namespace.js.coffee +0 -4
- data/app/assets/javascripts/active_admin/pages/application.js.coffee +0 -21
- data/app/assets/javascripts/active_admin/pages/batch_actions.js.coffee +0 -26
- data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +0 -11
- data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +0 -41
- data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +0 -95
- data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +0 -38
- data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +0 -43
- data/app/views/active_admin/dashboard/index.html.arb +0 -1
- data/app/views/active_admin/resource/index.csv.erb +0 -23
- data/docs/3-index-pages/create-an-index.md +0 -29
- data/lib/active_admin/comments.rb +0 -83
- data/lib/active_admin/comments/comment.rb +0 -42
- data/lib/active_admin/comments/views.rb +0 -2
- data/lib/active_admin/dependency_checker.rb +0 -46
- data/lib/active_admin/inputs/filter_base.rb +0 -33
- data/lib/active_admin/inputs/filter_base/search_method_select.rb +0 -73
- data/lib/active_admin/inputs/filter_boolean_input.rb +0 -36
- data/lib/active_admin/inputs/filter_check_boxes_input.rb +0 -40
- data/lib/active_admin/inputs/filter_date_range_input.rb +0 -34
- data/lib/active_admin/inputs/filter_numeric_input.rb +0 -10
- data/lib/active_admin/inputs/filter_select_input.rb +0 -49
- data/lib/active_admin/inputs/filter_string_input.rb +0 -24
- data/lib/active_admin/reloader.rb +0 -130
- data/lib/active_admin/resource_controller/actions.rb +0 -81
- data/lib/active_admin/sass/active_admin.scss +0 -3
- data/lib/active_admin/sass/css_loader.rb +0 -16
- data/lib/active_admin/sass/helpers.rb +0 -45
- data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +0 -7
- data/lib/active_admin/views/dashboard_section_renderer.rb +0 -19
- data/lib/active_admin/views/pages/dashboard.rb +0 -62
- data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +0 -1
- data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +0 -1
- data/lib/meta_search_ext.rb +0 -10
- data/spec/integration/memory_spec.rb +0 -29
- data/spec/integration/stylesheets_spec.rb +0 -41
- data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +0 -60
- data/spec/javascripts/compiled/jquery.aa.popover-spec.js +0 -106
- data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +0 -37
- data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +0 -108
- data/spec/javascripts/helpers/vendor/jasmine-jquery.js +0 -288
- data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +0 -2915
- data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +0 -34
- data/spec/javascripts/support/jquery.min.js +0 -4
- data/spec/spec_helper_without_rails.rb +0 -11
- data/spec/unit/generators/install_rails_3_1_spec.rb +0 -16
- data/spec/unit/rails_spec.rb +0 -43
- data/spec/unit/reloader_spec.rb +0 -124
- data/spec/unit/sass/helpers_spec.rb +0 -47
- data/tasks/js.rake +0 -32
data/docs/14-gotchas.md
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
#Gotchas
|
2
|
+
|
3
|
+
## Session Commits & Asset Pipeline
|
4
|
+
|
5
|
+
When configuring the asset pipeline ensure that the asset prefix
|
6
|
+
(`config.assets.prefix`) is not the same as the namespace of ActiveAdmin
|
7
|
+
(default namespace is `/admin`). If they are the same Sprockets will prevent the
|
8
|
+
session from being committed. Flash messages won't work and you will be unable to
|
9
|
+
use the session for storing anything.
|
10
|
+
|
11
|
+
For more information see the following post:
|
12
|
+
[http://www.intridea.com/blog/2013/3/20/rails-assets-prefix-may-disable-your-session](http://www.intridea.com/blog/2013/3/20/rails-assets-prefix-may-disable-your-session)
|
13
|
+
|
14
|
+
## Helpers
|
15
|
+
|
16
|
+
There are two knowing gotchas with helpers. This hopefully will help you to
|
17
|
+
find a solution.
|
18
|
+
|
19
|
+
### Helpers are not reloading in development
|
20
|
+
|
21
|
+
This is a known and still open [issue](https://github.com/activeadmin/activeadmin/issues/697)
|
22
|
+
the only way is to restart your server each time you change a helper.
|
23
|
+
|
24
|
+
### Helper maybe not included by default
|
25
|
+
|
26
|
+
If you use `config.action_controller.include_all_helpers = false` in your application config,
|
27
|
+
you need to include it by hand.
|
28
|
+
|
29
|
+
#### Solutions
|
30
|
+
|
31
|
+
##### First use a monkey patch
|
32
|
+
|
33
|
+
This works for all ActiveAdmin resources at once.
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
# config/initializers/active_admin_helpers.rb
|
37
|
+
ActiveAdmin::BaseController.class_eval do
|
38
|
+
helper ApplicationHelper
|
39
|
+
end
|
40
|
+
```
|
41
|
+
|
42
|
+
##### Second use the `controller` method
|
43
|
+
|
44
|
+
This works only for one resource at a time.
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
ActiveAdmin.register User do
|
48
|
+
controller do
|
49
|
+
helper UserHelper
|
50
|
+
end
|
51
|
+
end
|
52
|
+
```
|
53
|
+
|
54
|
+
## CSS
|
55
|
+
|
56
|
+
In order to avoid the override of your application style with the Active Admin one, you can do one of this things:
|
57
|
+
* You can properly move the generated file `active_admin.css.scss` from `app/assets/stylesheets` to `vendor/assets/stylesheets`.
|
58
|
+
* You can remove all `require_tree` comands from your root level css files, where the `active_admin.css.scss` is in the tree.
|
59
|
+
|
60
|
+
## Conflicts
|
61
|
+
|
62
|
+
### With gems that provides a `search` class method on a model
|
63
|
+
|
64
|
+
If a gem defines a `search` class method on a model, this can result in conflicts
|
65
|
+
with the same method provided by `ransack` (a dependency of ActiveAdmin).
|
66
|
+
|
67
|
+
Each of this conflicts need to solved is a different way. Some solutions are
|
68
|
+
listed below.
|
69
|
+
|
70
|
+
#### `tire`, `retire` and `elasticsearch-rails`
|
71
|
+
|
72
|
+
This conflict can be solved, by using explicitly the `search` method of `tire`,
|
73
|
+
`retire` or `elasticsearch-rails`:
|
74
|
+
|
75
|
+
##### For `tire` and `retire`
|
76
|
+
|
77
|
+
```ruby
|
78
|
+
YourModel.tire.search
|
79
|
+
```
|
80
|
+
|
81
|
+
##### For `elasticsearch-rails`
|
82
|
+
|
83
|
+
```ruby
|
84
|
+
YourModel.__elasticsearch__.search
|
85
|
+
```
|
86
|
+
|
87
|
+
### Sunspot Solr
|
88
|
+
|
89
|
+
```ruby
|
90
|
+
YourModel.solr_search
|
91
|
+
```
|
92
|
+
|
@@ -1,147 +1,258 @@
|
|
1
|
-
#
|
1
|
+
# Working with Resources
|
2
|
+
|
3
|
+
Every Active Admin resource corresponds to a Rails model. So before creating a
|
4
|
+
resource you must first create a Rails model for it.
|
5
|
+
|
6
|
+
## Create a Resource
|
7
|
+
|
8
|
+
The basic command for creating a resource is `rails g active_admin:resource Post`.
|
9
|
+
The generator will produce an empty `app/admin/post.rb` file like so:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
ActiveAdmin.register Post do
|
13
|
+
# everything happens here :D
|
14
|
+
end
|
15
|
+
```
|
16
|
+
|
17
|
+
## Setting up Strong Parameters
|
18
|
+
|
19
|
+
Rails 4 replaces `attr_accessible` with [Strong Parameters](https://github.com/rails/strong_parameters),
|
20
|
+
which moves attribute whitelisting from the model to the controller.
|
21
|
+
|
22
|
+
Use the `permit_params` method to define which attributes may be changed:
|
23
|
+
|
24
|
+
```ruby
|
25
|
+
ActiveAdmin.register Post do
|
26
|
+
permit_params :title, :content, :publisher_id
|
27
|
+
end
|
28
|
+
```
|
29
|
+
|
30
|
+
Any form field that sends multiple values (such as a HABTM association, or an array attribute)
|
31
|
+
needs to pass an empty array to `permit_params`:
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
ActiveAdmin.register Post do
|
35
|
+
permit_params :title, :content, :publisher_id, roles: []
|
36
|
+
end
|
37
|
+
```
|
38
|
+
|
39
|
+
Nested associations in the same form also require an array, but it
|
40
|
+
needs to be filled with any attributes used.
|
41
|
+
|
42
|
+
```ruby
|
43
|
+
ActiveAdmin.register Post do
|
44
|
+
permit_params :title, :content, :publisher_id,
|
45
|
+
tags_attributes: [:id, :name, :description, :_destroy]
|
46
|
+
end
|
47
|
+
|
48
|
+
# Note that `accepts_nested_attributes_for` is still required:
|
49
|
+
class Post < ActiveRecord::Base
|
50
|
+
accepts_nested_attributes_for :tags, allow_destroy: true
|
51
|
+
end
|
52
|
+
```
|
53
|
+
|
54
|
+
If you want to dynamically choose which attributes can be set, pass a block:
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
ActiveAdmin.register Post do
|
58
|
+
permit_params do
|
59
|
+
params = [:title, :content, :publisher_id]
|
60
|
+
params.push :author_id if current_user.admin?
|
61
|
+
params
|
62
|
+
end
|
63
|
+
end
|
64
|
+
```
|
65
|
+
|
66
|
+
The `permit_params` call creates a method called `permitted_params`. You should use this method when overriding `create` or `update` actions:
|
67
|
+
|
68
|
+
```ruby
|
69
|
+
ActiveAdmin.register Post do
|
70
|
+
controller do
|
71
|
+
def create
|
72
|
+
# Good
|
73
|
+
@post = Post.new(permitted_params[:post])
|
74
|
+
# Bad
|
75
|
+
@post = Post.new(params[:post])
|
76
|
+
|
77
|
+
if @post.save
|
78
|
+
# ...
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
```
|
84
|
+
|
85
|
+
## Disabling Actions on a Resource
|
86
|
+
|
87
|
+
All CRUD actions are enabled by default. These can be disabled for a given resource:
|
88
|
+
|
89
|
+
```ruby
|
90
|
+
ActiveAdmin.register Post do
|
91
|
+
actions :all, except: [:update, :destroy]
|
92
|
+
end
|
93
|
+
```
|
2
94
|
|
3
95
|
## Rename the Resource
|
4
96
|
|
5
97
|
By default, any references to the resource (menu, routes, buttons, etc) in the
|
6
98
|
interface will use the name of the class. You can rename the resource by using
|
7
|
-
the
|
99
|
+
the `:as` option.
|
8
100
|
|
9
|
-
|
101
|
+
```ruby
|
102
|
+
ActiveAdmin.register Post, as: "Article"
|
103
|
+
```
|
10
104
|
|
11
|
-
The resource will then be available
|
105
|
+
The resource will then be available at `/admin/articles`.
|
12
106
|
|
13
107
|
## Customize the Namespace
|
14
108
|
|
15
|
-
|
16
|
-
|
17
|
-
You can register resources in different namespaces:
|
18
|
-
|
19
|
-
# Available at /today/posts
|
20
|
-
ActiveAdmin.register Post, :namespace => "today"
|
109
|
+
We use the `admin` namespace by default, but you can use anything:
|
21
110
|
|
22
|
-
|
23
|
-
|
111
|
+
```ruby
|
112
|
+
# Available at /today/posts
|
113
|
+
ActiveAdmin.register Post, namespace: :today
|
24
114
|
|
115
|
+
# Available at /posts
|
116
|
+
ActiveAdmin.register Post, namespace: false
|
117
|
+
```
|
25
118
|
|
26
119
|
## Customize the Menu
|
27
120
|
|
28
121
|
The resource will be displayed in the global navigation by default. To disable
|
29
|
-
the resource from being displayed in the global navigation
|
30
|
-
`menu` method:
|
122
|
+
the resource from being displayed in the global navigation:
|
31
123
|
|
32
|
-
|
33
|
-
|
34
|
-
|
124
|
+
```ruby
|
125
|
+
ActiveAdmin.register Post do
|
126
|
+
menu false
|
127
|
+
end
|
128
|
+
```
|
35
129
|
|
36
130
|
The menu method accepts a hash with the following options:
|
37
131
|
|
38
132
|
* `:label` - The string or proc label to display in the menu. If it's a proc, it
|
39
133
|
will be called each time the menu is rendered.
|
40
|
-
* `:parent` - The string label of the parent
|
134
|
+
* `:parent` - The string id (or label) of the parent used for this menu
|
41
135
|
* `:if` - A block or a symbol of a method to call to decide if the menu item
|
42
136
|
should be displayed
|
43
|
-
* `:priority` - The integer value of the priority
|
137
|
+
* `:priority` - The integer value of the priority, which defaults to `10`
|
44
138
|
|
45
139
|
### Labels
|
46
140
|
|
47
141
|
To change the name of the label in the menu:
|
48
142
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
143
|
+
```ruby
|
144
|
+
ActiveAdmin.register Post do
|
145
|
+
menu label: "My Posts"
|
146
|
+
end
|
147
|
+
```
|
54
148
|
|
55
|
-
If you
|
56
|
-
instead of a string. The proc will be called each time the menu is rendered.
|
149
|
+
If you want something more dynamic, pass a proc instead:
|
57
150
|
|
58
|
-
|
59
|
-
|
60
|
-
|
151
|
+
```ruby
|
152
|
+
ActiveAdmin.register Post do
|
153
|
+
menu label: proc{ I18n.t "mypost" }
|
154
|
+
end
|
155
|
+
```
|
61
156
|
|
62
157
|
### Menu Priority
|
63
158
|
|
64
|
-
|
65
|
-
|
159
|
+
Menu items are sorted first by their numeric priority, then alphabetically. Since
|
160
|
+
every menu by default has a priority of `10`, the menu is normally alphabetical.
|
66
161
|
|
67
|
-
|
68
|
-
to edit the location of the menu item.
|
162
|
+
You can easily customize this:
|
69
163
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
164
|
+
```ruby
|
165
|
+
ActiveAdmin.register Post do
|
166
|
+
menu priority: 1 # so it's on the very left
|
167
|
+
end
|
168
|
+
```
|
75
169
|
|
76
170
|
### Conditionally Showing / Hiding Menu Items
|
77
171
|
|
78
172
|
Menu items can be shown or hidden at runtime using the `:if` option.
|
173
|
+
```ruby
|
174
|
+
ActiveAdmin.register Post do
|
175
|
+
menu if: proc{ current_user.can_edit_posts? }
|
176
|
+
end
|
177
|
+
```
|
79
178
|
|
80
|
-
|
81
|
-
menu :if => proc{ current_admin_user.can_edit_posts? }
|
82
|
-
end
|
83
|
-
|
84
|
-
The `proc` will be called in the context of the view, so you have access to all
|
179
|
+
The proc will be called in the context of the view, so you have access to all
|
85
180
|
your helpers and current user session information.
|
86
181
|
|
87
182
|
### Drop Down Menus
|
88
183
|
|
89
|
-
In many cases, a single level navigation will not be enough
|
90
|
-
|
91
|
-
your resources and creating drop down menus to access them.
|
92
|
-
|
93
|
-
To add the menu as a child of another menu:
|
184
|
+
In many cases, a single level navigation will not be enough to manage a large
|
185
|
+
application. In that case, you can group your menu items under a parent menu item.
|
94
186
|
|
95
|
-
|
96
|
-
|
97
|
-
|
187
|
+
```ruby
|
188
|
+
ActiveAdmin.register Post do
|
189
|
+
menu parent: "Blog"
|
190
|
+
end
|
191
|
+
```
|
98
192
|
|
99
|
-
Note
|
100
|
-
|
193
|
+
Note that the "Blog" parent menu item doesn't even have to exist yet; it can be
|
194
|
+
dynamically generated for you.
|
101
195
|
|
102
196
|
### Customizing Parent Menu Items
|
103
197
|
|
104
|
-
All of the options given to a standard menu item are also available to
|
105
|
-
parent menu items.
|
106
|
-
initializer.
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
198
|
+
All of the options given to a standard menu item are also available to
|
199
|
+
parent menu items. In the case of complex parent menu items, you should
|
200
|
+
configure them in the Active Admin initializer.
|
201
|
+
|
202
|
+
```ruby
|
203
|
+
# config/initializers/active_admin.rb
|
204
|
+
config.namespace :admin do |admin|
|
205
|
+
admin.build_menu do |menu|
|
206
|
+
menu.add label: 'Blog', priority: 0
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
# app/admin/post.rb
|
211
|
+
ActiveAdmin.register Post do
|
212
|
+
menu parent: 'Blog'
|
213
|
+
end
|
214
|
+
```
|
215
|
+
|
216
|
+
### Dynamic Parent Menu Items
|
217
|
+
|
218
|
+
While the above works fine, what if you want a parent menu item with a dynamic
|
219
|
+
name? Well, you have to refer to it by its `:id`.
|
220
|
+
|
221
|
+
```ruby
|
222
|
+
# config/initializers/active_admin.rb
|
223
|
+
config.namespace :admin do |admin|
|
224
|
+
admin.build_menu do |menu|
|
225
|
+
menu.add id: 'blog', label: proc{"Something dynamic"}, priority: 0
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
# app/admin/post.rb
|
230
|
+
ActiveAdmin.register Post do
|
231
|
+
menu parent: 'blog'
|
232
|
+
end
|
233
|
+
```
|
122
234
|
|
123
235
|
### Adding Custom Menu Items
|
124
236
|
|
125
237
|
Sometimes it's not enough to just customize the menu label. In this case, you
|
126
238
|
can customize the menu for the namespace within the Active Admin initializer.
|
127
239
|
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
240
|
+
```ruby
|
241
|
+
# config/initializers/active_admin.rb
|
242
|
+
config.namespace :admin do |admin|
|
243
|
+
admin.build_menu do |menu|
|
244
|
+
menu.add label: "The Application", url: "/", priority: 0
|
245
|
+
|
246
|
+
menu.add label: "Sites" do |sites|
|
247
|
+
sites.add label: "Google", url: "http://google.com", html_options: { target: :blank }
|
248
|
+
sites.add label: "Facebook", url: "http://facebook.com"
|
249
|
+
sites.add label: "Github", url: "http://github.com"
|
141
250
|
end
|
251
|
+
end
|
252
|
+
end
|
253
|
+
```
|
142
254
|
|
143
|
-
This
|
144
|
-
of the resources are added to it.
|
255
|
+
This will be registered on application start before your resources are loaded.
|
145
256
|
|
146
257
|
## Scoping the queries
|
147
258
|
|
@@ -149,77 +260,68 @@ If your administrators have different access levels, you may sometimes want to
|
|
149
260
|
scope what they have access to. Assuming your User model has the proper
|
150
261
|
has_many relationships, you can simply scope the listings and finders like so:
|
151
262
|
|
152
|
-
|
153
|
-
|
263
|
+
```ruby
|
264
|
+
ActiveAdmin.register Post do
|
265
|
+
scope_to :current_user # limits the accessible posts to `current_user.posts`
|
154
266
|
|
155
|
-
|
156
|
-
|
157
|
-
end
|
267
|
+
# Or if the association doesn't have the default name:
|
268
|
+
scope_to :current_user, association_method: :blog_posts
|
158
269
|
|
159
|
-
|
270
|
+
# Finally, you can pass a block to be called:
|
271
|
+
scope_to do
|
272
|
+
User.most_popular_posts
|
273
|
+
end
|
274
|
+
end
|
275
|
+
```
|
160
276
|
|
161
|
-
|
277
|
+
You can also conditionally apply the scope:
|
162
278
|
|
163
|
-
|
164
|
-
|
165
|
-
|
279
|
+
```ruby
|
280
|
+
ActiveAdmin.register Post do
|
281
|
+
scope_to :current_user, if: proc{ current_user.limited_access? }
|
282
|
+
scope_to :current_user, unless: proc{ current_user.admin? }
|
283
|
+
end
|
284
|
+
```
|
166
285
|
|
167
|
-
|
168
|
-
scope_to :current_user, :unless => proc{ current_admin_user.admin? }
|
286
|
+
## Eager loading
|
169
287
|
|
170
|
-
|
171
|
-
scope_to :if => proc{ admin_user_signed_in? } do
|
172
|
-
User.most_popular
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
|
-
If you want to do something fancier, for example override a default scope, you can
|
177
|
-
also use :association_method parameter with a normal method on your User model.
|
178
|
-
The only requirement is that your method returns an instance of ActiveRecord::Relation.
|
288
|
+
A common way to increase page performance is to elimate N+1 queries by eager loading associations:
|
179
289
|
|
180
|
-
|
181
|
-
|
182
|
-
|
290
|
+
```ruby
|
291
|
+
ActiveAdmin.register Post do
|
292
|
+
includes :author, :categories
|
293
|
+
end
|
294
|
+
```
|
183
295
|
|
184
|
-
|
185
|
-
def managed_ads
|
186
|
-
# Overrides Ad's default_scope
|
187
|
-
Ad.unscoped
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
ActiveAdmin.register Ad do
|
192
|
-
scope_to :current_user, :association_method => :managed_ads
|
193
|
-
end
|
296
|
+
## Customizing resource retrieval
|
194
297
|
|
195
|
-
|
196
|
-
override the `scoped_collection` method on the controller:
|
298
|
+
If you need to customize the collection properties, you can overwrite the `scoped_collection` method.
|
197
299
|
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
end
|
300
|
+
```ruby
|
301
|
+
ActiveAdmin.register Post do
|
302
|
+
controller do
|
303
|
+
def scoped_collection
|
304
|
+
end_of_association_chain.where(visibility: true)
|
204
305
|
end
|
205
|
-
|
206
|
-
|
306
|
+
end
|
307
|
+
end
|
308
|
+
```
|
207
309
|
|
208
310
|
If you need to completely replace the record retrieving code (e.g., you have a custom
|
209
311
|
`to_param` implementation in your models), override the `resource` method on the controller:
|
210
312
|
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
end
|
313
|
+
```ruby
|
314
|
+
ActiveAdmin.register Post do
|
315
|
+
controller do
|
316
|
+
def find_resource
|
317
|
+
Post.where(id: params[:id]).first!
|
217
318
|
end
|
319
|
+
end
|
320
|
+
end
|
321
|
+
```
|
218
322
|
|
219
|
-
|
220
|
-
so you can use all
|
221
|
-
[customization features in Inherited Resource](https://github.com/josevalim/inherited_resources#overwriting-defaults).
|
222
|
-
|
323
|
+
Our controllers are built on [Inherited Resources](https://github.com/josevalim/inherited_resources),
|
324
|
+
so you can use [all of its features](https://github.com/josevalim/inherited_resources#overwriting-defaults).
|
223
325
|
|
224
326
|
## Belongs To
|
225
327
|
|
@@ -227,66 +329,79 @@ It's common to want to scope a series of resources to a relationship. For
|
|
227
329
|
example a Project may have many Milestones and Tickets. To nest the resource
|
228
330
|
within another, you can use the `belongs_to` method:
|
229
331
|
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
332
|
+
```ruby
|
333
|
+
ActiveAdmin.register Project
|
334
|
+
ActiveAdmin.register Ticket do
|
335
|
+
belongs_to :project
|
336
|
+
end
|
337
|
+
```
|
236
338
|
|
237
339
|
Projects will be available as usual and tickets will be availble by visiting
|
238
|
-
|
340
|
+
`/admin/projects/1/tickets` assuming that a Project with the id of 1 exists.
|
239
341
|
Active Admin does not add "Tickets" to the global navigation because the routes
|
240
342
|
can only be generated when there is a project id.
|
241
343
|
|
242
344
|
To create links to the resource, you can add them to a sidebar (one of the many
|
243
345
|
possibilities for how you may with to handle your user interface):
|
244
346
|
|
245
|
-
|
246
|
-
|
247
|
-
sidebar "Project Details", only: [:show, :edit] do
|
248
|
-
ul do
|
249
|
-
li link_to("Tickets", admin_project_tickets_path(project))
|
250
|
-
li link_to("Milestones", admin_project_milestones_path(project))
|
251
|
-
end
|
252
|
-
end
|
347
|
+
```ruby
|
348
|
+
ActiveAdmin.register Project do
|
253
349
|
|
350
|
+
sidebar "Project Details", only: [:show, :edit] do
|
351
|
+
ul do
|
352
|
+
li link_to "Tickets", admin_project_tickets_path(project)
|
353
|
+
li link_to "Milestones", admin_project_milestones_path(project)
|
254
354
|
end
|
355
|
+
end
|
356
|
+
end
|
255
357
|
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
ActiveAdmin.register Milestone do
|
261
|
-
belongs_to :project
|
262
|
-
end
|
358
|
+
ActiveAdmin.register Ticket do
|
359
|
+
belongs_to :project
|
360
|
+
end
|
263
361
|
|
362
|
+
ActiveAdmin.register Milestone do
|
363
|
+
belongs_to :project
|
364
|
+
end
|
365
|
+
```
|
264
366
|
|
265
367
|
In some cases (like Projects), there are many sub resources and you would
|
266
368
|
actually like the global navigation to switch when the user navigates "into" a
|
267
369
|
project. To accomplish this, Active Admin stores the `belongs_to` resources in a
|
268
370
|
seperate menu which you can use if you so wish. To use:
|
269
371
|
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
372
|
+
```ruby
|
373
|
+
ActiveAdmin.register Ticket do
|
374
|
+
belongs_to :project
|
375
|
+
navigation_menu :project
|
376
|
+
end
|
274
377
|
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
378
|
+
ActiveAdmin.register Milestone do
|
379
|
+
belongs_to :project
|
380
|
+
navigation_menu :project
|
381
|
+
end
|
382
|
+
```
|
279
383
|
|
280
384
|
Now, when you navigate to the tickets section, the global navigation will
|
281
385
|
only display "Tickets" and "Milestones". When you navigate back to a
|
282
386
|
non-belongs_to resource, it will switch back to the default menu.
|
283
387
|
|
284
388
|
You can also defer the menu lookup until runtime so that you can dynamically show
|
285
|
-
different menus, say perhaps on user permissions
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
389
|
+
different menus, say perhaps based on user permissions. For example:
|
390
|
+
|
391
|
+
```ruby
|
392
|
+
ActiveAdmin.register Ticket do
|
393
|
+
belongs_to :project
|
394
|
+
navigation_menu do
|
395
|
+
authorized?(:manage, SomeResource) ? :project : :restricted_menu
|
396
|
+
end
|
397
|
+
end
|
398
|
+
```
|
399
|
+
|
400
|
+
If you still want your `belongs_to` resources to be available in the default menu
|
401
|
+
and through non-nested routes, you can use the `:optional` option. For example:
|
402
|
+
|
403
|
+
```ruby
|
404
|
+
ActiveAdmin.register Ticket do
|
405
|
+
belongs_to :project, optional: true
|
406
|
+
end
|
407
|
+
```
|