yousty-activeadmin 1.0.0.pre
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +43 -0
- data/.travis.yml +8 -0
- data/.yardopts +9 -0
- data/CHANGELOG.md +1056 -0
- data/CONTRIBUTING.md +110 -0
- data/Gemfile +41 -0
- data/Guardfile +7 -0
- data/LICENSE +25 -0
- data/README.md +67 -0
- data/Rakefile +25 -0
- data/activeadmin.gemspec +33 -0
- 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-input-icon.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 +10 -0
- data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +4 -0
- data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +13 -0
- data/app/assets/images/active_admin/index_list_icons/table_icon.svg +3 -0
- data/app/assets/images/active_admin/loading.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
- data/app/assets/images/active_admin/orderable.png +0 -0
- data/app/assets/javascripts/active_admin/application.js.coffee +6 -0
- data/app/assets/javascripts/active_admin/base.js.coffee +5 -0
- data/app/assets/javascripts/active_admin/components/application.js.coffee +23 -0
- data/app/assets/javascripts/active_admin/components/batch_actions.js.coffee +26 -0
- data/app/assets/javascripts/active_admin/components/has_many.js.coffee +41 -0
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +37 -0
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +105 -0
- data/app/assets/javascripts/active_admin/lib/popover.js.coffee +97 -0
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +25 -0
- data/app/assets/stylesheets/active_admin/_base.css.scss +41 -0
- data/app/assets/stylesheets/active_admin/_forms.css.scss +293 -0
- data/app/assets/stylesheets/active_admin/_header.css.scss +152 -0
- data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
- data/app/assets/stylesheets/active_admin/_typography.css.scss +100 -0
- data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +11 -0
- data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +31 -0
- data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
- data/app/assets/stylesheets/active_admin/components/_buttons.scss +11 -0
- data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
- data/app/assets/stylesheets/active_admin/components/_comments.css.scss +41 -0
- data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +123 -0
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +151 -0
- data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +39 -0
- data/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
- data/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
- data/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
- data/app/assets/stylesheets/active_admin/components/_pagination.scss +34 -0
- data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
- data/app/assets/stylesheets/active_admin/components/_popovers.css.scss +123 -0
- data/app/assets/stylesheets/active_admin/components/_scopes.scss +10 -0
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +12 -0
- data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +95 -0
- data/app/assets/stylesheets/active_admin/components/_tables.css.scss +110 -0
- data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +11 -0
- data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +66 -0
- data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +38 -0
- data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +21 -0
- data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
- data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
- data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +36 -0
- data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +22 -0
- data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
- data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +26 -0
- data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +32 -0
- data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
- data/app/assets/stylesheets/active_admin/print.css.scss +284 -0
- data/app/assets/stylesheets/active_admin/structure/_footer.scss +14 -0
- data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +29 -0
- data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +43 -0
- data/app/views/active_admin/dashboard/index.html.arb +1 -0
- data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/active_admin/devise/passwords/edit.html.erb +19 -0
- data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
- data/app/views/active_admin/devise/sessions/new.html.erb +20 -0
- data/app/views/active_admin/devise/shared/_links.erb +27 -0
- data/app/views/active_admin/devise/unlocks/new.html.erb +14 -0
- data/app/views/active_admin/page/index.html.arb +1 -0
- data/app/views/active_admin/resource/edit.html.arb +1 -0
- data/app/views/active_admin/resource/index.csv.erb +17 -0
- data/app/views/active_admin/resource/index.html.arb +1 -0
- data/app/views/active_admin/resource/new.html.arb +1 -0
- data/app/views/active_admin/resource/show.html.arb +1 -0
- data/app/views/layouts/active_admin.html.arb +1 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +37 -0
- data/config/locales/bg.yml +101 -0
- data/config/locales/ca.yml +98 -0
- data/config/locales/cs.yml +105 -0
- data/config/locales/da.yml +102 -0
- data/config/locales/de-CH.yml +117 -0
- data/config/locales/de.yml +119 -0
- data/config/locales/en-GB.yml +91 -0
- data/config/locales/en.yml +110 -0
- data/config/locales/es.yml +106 -0
- data/config/locales/es_MX.yml +104 -0
- data/config/locales/fi.yml +109 -0
- data/config/locales/fr.yml +97 -0
- data/config/locales/he.yml +91 -0
- data/config/locales/hr.yml +93 -0
- data/config/locales/hu.yml +92 -0
- data/config/locales/it.yml +89 -0
- data/config/locales/ja.yml +104 -0
- data/config/locales/ko.yml +84 -0
- data/config/locales/lt.yml +90 -0
- data/config/locales/lv.yml +89 -0
- data/config/locales/nl.yml +90 -0
- data/config/locales/no-NB.yml +85 -0
- data/config/locales/pl.yml +93 -0
- data/config/locales/pt-BR.yml +90 -0
- data/config/locales/pt-PT.yml +89 -0
- data/config/locales/ro.yml +93 -0
- data/config/locales/ru.yml +103 -0
- data/config/locales/sv-SE.yml +89 -0
- data/config/locales/tr.yml +90 -0
- data/config/locales/uk.yml +100 -0
- data/config/locales/vi.yml +90 -0
- data/config/locales/zh-CN.yml +90 -0
- data/config/locales/zh-TW.yml +90 -0
- data/cucumber.yml +3 -0
- data/docs/0-installation.md +84 -0
- data/docs/1-general-configuration.md +137 -0
- data/docs/10-custom-pages.md +98 -0
- data/docs/11-decorators.md +66 -0
- data/docs/12-arbre-components.md +144 -0
- data/docs/13-authorization-adapter.md +227 -0
- data/docs/2-resource-customization.md +340 -0
- data/docs/3-index-pages/create-an-index.md +29 -0
- data/docs/3-index-pages/index-as-block.md +21 -0
- data/docs/3-index-pages/index-as-blog.md +71 -0
- data/docs/3-index-pages/index-as-grid.md +29 -0
- data/docs/3-index-pages/index-as-table.md +154 -0
- data/docs/3-index-pages.md +206 -0
- data/docs/4-csv-format.md +39 -0
- data/docs/5-forms.md +110 -0
- data/docs/6-show-pages.md +77 -0
- data/docs/7-sidebars.md +42 -0
- data/docs/8-custom-actions.md +139 -0
- data/docs/9-batch-actions.md +155 -0
- data/features/action_item.feature +73 -0
- data/features/authorization.feature +64 -0
- data/features/authorization_cancan.feature +52 -0
- data/features/belongs_to.feature +63 -0
- data/features/breadcrumb.feature +27 -0
- data/features/comments/commenting.feature +140 -0
- data/features/comments/viewing_index.feature +19 -0
- data/features/dashboard.feature +16 -0
- data/features/decorators.feature +41 -0
- data/features/development_reloading.feature +31 -0
- data/features/edit_page.feature +127 -0
- data/features/favicon.feature +20 -0
- data/features/first_boot.feature +16 -0
- data/features/global_navigation.feature +29 -0
- data/features/i18n.feature +38 -0
- data/features/index/batch_actions.feature +123 -0
- data/features/index/filters.feature +138 -0
- data/features/index/format_as_csv.feature +117 -0
- data/features/index/formats.feature +66 -0
- data/features/index/index_as_block.feature +15 -0
- data/features/index/index_as_blog.feature +69 -0
- data/features/index/index_as_grid.feature +45 -0
- data/features/index/index_as_table.feature +195 -0
- data/features/index/index_blank_slate.feature +61 -0
- data/features/index/index_parameters.feature +75 -0
- data/features/index/index_scope_to.feature +56 -0
- data/features/index/index_scopes.feature +251 -0
- data/features/index/page_title.feature +30 -0
- data/features/index/pagination.feature +59 -0
- data/features/index/switch_index_view.feature +73 -0
- data/features/menu.feature +53 -0
- data/features/new_page.feature +119 -0
- data/features/registering_assets.feature +35 -0
- data/features/registering_pages.feature +148 -0
- data/features/registering_resources.feature +33 -0
- data/features/root_to.feature +17 -0
- data/features/show/default_content.feature +43 -0
- data/features/show/page_title.feature +47 -0
- data/features/sidebar_sections.feature +198 -0
- data/features/site_title.feature +47 -0
- data/features/specifying_actions.feature +93 -0
- data/features/step_definitions/action_item_steps.rb +7 -0
- data/features/step_definitions/action_link_steps.rb +7 -0
- data/features/step_definitions/additional_web_steps.rb +82 -0
- data/features/step_definitions/asset_steps.rb +15 -0
- data/features/step_definitions/attribute_steps.rb +13 -0
- data/features/step_definitions/batch_action_steps.rb +55 -0
- data/features/step_definitions/breadcrumb_steps.rb +3 -0
- data/features/step_definitions/comment_steps.rb +12 -0
- data/features/step_definitions/configuration_steps.rb +100 -0
- data/features/step_definitions/dashboard_steps.rb +15 -0
- data/features/step_definitions/factory_steps.rb +34 -0
- data/features/step_definitions/filter_steps.rb +17 -0
- data/features/step_definitions/flash_steps.rb +11 -0
- data/features/step_definitions/format_steps.rb +45 -0
- data/features/step_definitions/i18n_steps.rb +3 -0
- data/features/step_definitions/index_scope_steps.rb +21 -0
- data/features/step_definitions/index_views_steps.rb +3 -0
- data/features/step_definitions/layout_steps.rb +3 -0
- data/features/step_definitions/member_link_steps.rb +7 -0
- data/features/step_definitions/menu_steps.rb +11 -0
- data/features/step_definitions/pagination_steps.rb +8 -0
- data/features/step_definitions/sidebar_steps.rb +8 -0
- data/features/step_definitions/site_title_steps.rb +15 -0
- data/features/step_definitions/symbol_leak_steps.rb +3 -0
- data/features/step_definitions/tab_steps.rb +3 -0
- data/features/step_definitions/table_steps.rb +119 -0
- data/features/step_definitions/user_steps.rb +39 -0
- data/features/step_definitions/web_steps.rb +86 -0
- data/features/sti_resource.feature +73 -0
- data/features/support/env.rb +112 -0
- data/features/support/paths.rb +71 -0
- data/features/support/selectors.rb +45 -0
- data/features/symbol_leak.feature +35 -0
- data/features/users/logging_in.feature +34 -0
- data/features/users/logging_out.feature +13 -0
- data/features/users/resetting_password.feature +34 -0
- data/lib/active_admin/abstract_view_factory.rb +95 -0
- data/lib/active_admin/application.rb +242 -0
- data/lib/active_admin/asset_registration.rb +29 -0
- data/lib/active_admin/authorization_adapter.rb +132 -0
- data/lib/active_admin/base_controller/authorization.rb +151 -0
- data/lib/active_admin/base_controller/menu.rb +34 -0
- data/lib/active_admin/base_controller.rb +78 -0
- data/lib/active_admin/batch_actions/controller.rb +24 -0
- data/lib/active_admin/batch_actions/resource_extension.rb +127 -0
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +35 -0
- data/lib/active_admin/batch_actions/views/batch_action_popover.rb +28 -0
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +66 -0
- data/lib/active_admin/batch_actions/views/selection_cells.rb +37 -0
- data/lib/active_admin/batch_actions.rb +17 -0
- data/lib/active_admin/callbacks.rb +87 -0
- data/lib/active_admin/cancan_adapter.rb +40 -0
- data/lib/active_admin/component.rb +5 -0
- data/lib/active_admin/controller_action.rb +12 -0
- data/lib/active_admin/csv_builder.rb +49 -0
- data/lib/active_admin/deprecation.rb +36 -0
- data/lib/active_admin/devise.rb +70 -0
- data/lib/active_admin/dsl.rb +166 -0
- data/lib/active_admin/engine.rb +7 -0
- data/lib/active_admin/event.rb +33 -0
- data/lib/active_admin/filters/dsl.rb +21 -0
- data/lib/active_admin/filters/forms.rb +89 -0
- data/lib/active_admin/filters/formtastic_addons.rb +70 -0
- data/lib/active_admin/filters/resource_extension.rb +136 -0
- data/lib/active_admin/filters.rb +9 -0
- data/lib/active_admin/form_builder.rb +152 -0
- data/lib/active_admin/helpers/collection.rb +23 -0
- data/lib/active_admin/helpers/optional_display.rb +38 -0
- data/lib/active_admin/helpers/scope_chain.rb +23 -0
- data/lib/active_admin/helpers/settings.rb +108 -0
- data/lib/active_admin/iconic/icons.rb +142 -0
- data/lib/active_admin/iconic.rb +51 -0
- data/lib/active_admin/inputs/datepicker_input.rb +20 -0
- data/lib/active_admin/inputs/filter_base/search_method_select.rb +73 -0
- data/lib/active_admin/inputs/filter_base.rb +33 -0
- data/lib/active_admin/inputs/filter_boolean_input.rb +32 -0
- data/lib/active_admin/inputs/filter_check_boxes_input.rb +51 -0
- data/lib/active_admin/inputs/filter_date_range_input.rb +34 -0
- data/lib/active_admin/inputs/filter_numeric_input.rb +10 -0
- data/lib/active_admin/inputs/filter_select_input.rb +61 -0
- data/lib/active_admin/inputs/filter_string_input.rb +24 -0
- data/lib/active_admin/inputs.rb +15 -0
- data/lib/active_admin/menu.rb +107 -0
- data/lib/active_admin/menu_collection.rb +96 -0
- data/lib/active_admin/menu_item.rb +97 -0
- data/lib/active_admin/namespace.rb +224 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +39 -0
- data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +14 -0
- data/lib/active_admin/orm/active_record/comments/resource_helper.rb +17 -0
- data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +23 -0
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +75 -0
- data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
- data/lib/active_admin/orm/active_record/comments.rb +84 -0
- data/lib/active_admin/orm/active_record.rb +3 -0
- data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
- data/lib/active_admin/orm/mongoid.rb +1 -0
- data/lib/active_admin/page.rb +88 -0
- data/lib/active_admin/page_controller.rb +29 -0
- data/lib/active_admin/page_dsl.rb +28 -0
- data/lib/active_admin/page_presenter.rb +32 -0
- data/lib/active_admin/resource/action_items.rb +91 -0
- data/lib/active_admin/resource/belongs_to.rb +36 -0
- data/lib/active_admin/resource/controllers.rb +18 -0
- data/lib/active_admin/resource/menu.rb +64 -0
- data/lib/active_admin/resource/naming.rb +84 -0
- data/lib/active_admin/resource/page_presenters.rb +82 -0
- data/lib/active_admin/resource/pagination.rb +19 -0
- data/lib/active_admin/resource/routes.rb +99 -0
- data/lib/active_admin/resource/scope_to.rb +74 -0
- data/lib/active_admin/resource/scopes.rb +50 -0
- data/lib/active_admin/resource/sidebars.rb +27 -0
- data/lib/active_admin/resource.rb +153 -0
- data/lib/active_admin/resource_collection.rb +42 -0
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/data_access.rb +298 -0
- data/lib/active_admin/resource_controller/decorators.rb +20 -0
- data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
- data/lib/active_admin/resource_controller/scoping.rb +31 -0
- data/lib/active_admin/resource_controller/sidebars.rb +18 -0
- data/lib/active_admin/resource_controller.rb +50 -0
- data/lib/active_admin/resource_dsl.rb +134 -0
- data/lib/active_admin/router.rb +106 -0
- data/lib/active_admin/scope.rb +57 -0
- data/lib/active_admin/sidebar_section.rb +37 -0
- data/lib/active_admin/version.rb +3 -0
- data/lib/active_admin/view_factory.rb +27 -0
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
- data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +34 -0
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +26 -0
- data/lib/active_admin/view_helpers/display_helper.rb +49 -0
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +49 -0
- data/lib/active_admin/view_helpers/fields_for.rb +50 -0
- data/lib/active_admin/view_helpers/flash_helper.rb +13 -0
- data/lib/active_admin/view_helpers/form_helper.rb +24 -0
- data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +93 -0
- data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
- data/lib/active_admin/view_helpers/title_helper.rb +11 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
- data/lib/active_admin/view_helpers.rb +21 -0
- data/lib/active_admin/views/action_items.rb +17 -0
- data/lib/active_admin/views/components/action_list_popover.rb +29 -0
- data/lib/active_admin/views/components/attributes_table.rb +103 -0
- data/lib/active_admin/views/components/blank_slate.rb +17 -0
- data/lib/active_admin/views/components/columns.rb +150 -0
- data/lib/active_admin/views/components/dropdown_menu.rb +73 -0
- data/lib/active_admin/views/components/index_list.rb +68 -0
- data/lib/active_admin/views/components/paginated_collection.rb +125 -0
- data/lib/active_admin/views/components/panel.rb +34 -0
- data/lib/active_admin/views/components/popover.rb +27 -0
- data/lib/active_admin/views/components/scopes.rb +66 -0
- data/lib/active_admin/views/components/sidebar_section.rb +28 -0
- data/lib/active_admin/views/components/site_title.rb +55 -0
- data/lib/active_admin/views/components/status_tag.rb +56 -0
- data/lib/active_admin/views/components/table_for.rb +191 -0
- data/lib/active_admin/views/footer.rb +20 -0
- data/lib/active_admin/views/header.rb +32 -0
- data/lib/active_admin/views/index_as_block.rb +36 -0
- data/lib/active_admin/views/index_as_blog.rb +156 -0
- data/lib/active_admin/views/index_as_grid.rb +80 -0
- data/lib/active_admin/views/index_as_table.rb +264 -0
- data/lib/active_admin/views/pages/base.rb +139 -0
- data/lib/active_admin/views/pages/form.rb +51 -0
- data/lib/active_admin/views/pages/index.rb +147 -0
- data/lib/active_admin/views/pages/layout.rb +26 -0
- data/lib/active_admin/views/pages/page.rb +30 -0
- data/lib/active_admin/views/pages/show.rb +59 -0
- data/lib/active_admin/views/tabbed_navigation.rb +62 -0
- data/lib/active_admin/views/title_bar.rb +53 -0
- data/lib/active_admin/views.rb +8 -0
- data/lib/active_admin.rb +125 -0
- data/lib/activeadmin.rb +1 -0
- data/lib/generators/active_admin/assets/assets_generator.rb +16 -0
- data/lib/generators/active_admin/assets/templates/active_admin.css.scss +17 -0
- data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +86 -0
- data/lib/generators/active_admin/install/install_generator.rb +46 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +235 -0
- data/lib/generators/active_admin/install/templates/admin_user.rb.erb +27 -0
- data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
- data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +19 -0
- data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
- data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
- data/lib/ransack_ext.rb +12 -0
- data/script/local +44 -0
- data/script/use_rails +53 -0
- data/spec/integration/default_namespace_spec.rb +61 -0
- data/spec/integration/javascript_spec.rb +20 -0
- data/spec/integration/memory_spec.rb +29 -0
- data/spec/integration/stylesheets_spec.rb +41 -0
- data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
- data/spec/javascripts/coffeescripts/jquery.aa.popover-spec.js.coffee +82 -0
- data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
- data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +60 -0
- data/spec/javascripts/compiled/jquery.aa.popover-spec.js +106 -0
- data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +37 -0
- data/spec/javascripts/fixtures/checkboxes.html +9 -0
- data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
- data/spec/javascripts/helpers/SpecHelper.js +3 -0
- data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +108 -0
- data/spec/javascripts/helpers/vendor/jasmine-jquery.js +288 -0
- data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +2915 -0
- data/spec/javascripts/support/jasmine.yml +74 -0
- data/spec/javascripts/support/jasmine_config.rb +23 -0
- data/spec/javascripts/support/jasmine_runner.rb +32 -0
- data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +34 -0
- data/spec/javascripts/support/jquery.min.js +4 -0
- data/spec/spec_helper.rb +175 -0
- data/spec/spec_helper_without_rails.rb +16 -0
- data/spec/support/deferred_garbage_collection.rb +19 -0
- data/spec/support/detect_rails_version.rb +42 -0
- data/spec/support/integration_example_group.rb +31 -0
- data/spec/support/jslint.yml +80 -0
- data/spec/support/rails_template.rb +111 -0
- data/spec/support/rails_template_with_data.rb +59 -0
- data/spec/support/templates/admin/stores.rb +11 -0
- data/spec/support/templates/cucumber.rb +24 -0
- data/spec/support/templates/cucumber_with_reloading.rb +5 -0
- data/spec/support/templates/en.yml +8 -0
- data/spec/support/templates/post_decorator.rb +53 -0
- data/spec/unit/abstract_view_factory_spec.rb +79 -0
- data/spec/unit/action_builder_spec.rb +126 -0
- data/spec/unit/active_admin_spec.rb +11 -0
- data/spec/unit/application_spec.rb +141 -0
- data/spec/unit/asset_registration_spec.rb +52 -0
- data/spec/unit/authorization/authorization_adapter_spec.rb +61 -0
- data/spec/unit/authorization/controller_authorization_spec.rb +39 -0
- data/spec/unit/auto_link_spec.rb +32 -0
- data/spec/unit/batch_actions/resource_spec.rb +91 -0
- data/spec/unit/batch_actions/settings_spec.rb +61 -0
- data/spec/unit/belongs_to_spec.rb +42 -0
- data/spec/unit/cancan_adapter_spec.rb +43 -0
- data/spec/unit/comments_spec.rb +106 -0
- data/spec/unit/component_spec.rb +18 -0
- data/spec/unit/config_shared_examples.rb +59 -0
- data/spec/unit/controller_filters_spec.rb +32 -0
- data/spec/unit/csv_builder_spec.rb +103 -0
- data/spec/unit/devise_spec.rb +116 -0
- data/spec/unit/dsl_spec.rb +61 -0
- data/spec/unit/event_spec.rb +47 -0
- data/spec/unit/filters/filter_form_builder_spec.rb +423 -0
- data/spec/unit/filters/resource_spec.rb +119 -0
- data/spec/unit/form_builder_spec.rb +514 -0
- data/spec/unit/generators/install_spec.rb +23 -0
- data/spec/unit/helpers/collection_spec.rb +65 -0
- data/spec/unit/helpers/scope_chain_spec.rb +36 -0
- data/spec/unit/helpers/settings_spec.rb +30 -0
- data/spec/unit/menu_collection_spec.rb +62 -0
- data/spec/unit/menu_item_spec.rb +143 -0
- data/spec/unit/menu_spec.rb +71 -0
- data/spec/unit/namespace/authorization_spec.rb +27 -0
- data/spec/unit/namespace/register_page_spec.rb +74 -0
- data/spec/unit/namespace/register_resource_spec.rb +163 -0
- data/spec/unit/namespace_spec.rb +103 -0
- data/spec/unit/page_controller_spec.rb +5 -0
- data/spec/unit/page_spec.rb +72 -0
- data/spec/unit/pretty_format_spec.rb +35 -0
- data/spec/unit/resource/action_items_spec.rb +62 -0
- data/spec/unit/resource/menu_spec.rb +18 -0
- data/spec/unit/resource/naming_spec.rb +122 -0
- data/spec/unit/resource/page_presenters_spec.rb +44 -0
- data/spec/unit/resource/pagination_spec.rb +38 -0
- data/spec/unit/resource/routes_spec.rb +73 -0
- data/spec/unit/resource/scopes_spec.rb +43 -0
- data/spec/unit/resource/sidebars_spec.rb +43 -0
- data/spec/unit/resource_collection_spec.rb +160 -0
- data/spec/unit/resource_controller/data_access_spec.rb +73 -0
- data/spec/unit/resource_controller/sidebars_spec.rb +46 -0
- data/spec/unit/resource_controller_spec.rb +265 -0
- data/spec/unit/resource_registration_spec.rb +56 -0
- data/spec/unit/resource_spec.rb +243 -0
- data/spec/unit/routing_spec.rb +172 -0
- data/spec/unit/scope_spec.rb +108 -0
- data/spec/unit/settings_spec.rb +88 -0
- data/spec/unit/view_factory_spec.rb +21 -0
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +149 -0
- data/spec/unit/view_helpers/display_name_spec.rb +41 -0
- data/spec/unit/view_helpers/download_format_links_helper_spec.rb +39 -0
- data/spec/unit/view_helpers/fields_for_spec.rb +50 -0
- data/spec/unit/view_helpers/form_helper_spec.rb +56 -0
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +101 -0
- data/spec/unit/views/components/action_list_popover_spec.rb +30 -0
- data/spec/unit/views/components/attributes_table_spec.rb +230 -0
- data/spec/unit/views/components/batch_action_popover_spec.rb +33 -0
- data/spec/unit/views/components/blank_slate_spec.rb +17 -0
- data/spec/unit/views/components/columns_spec.rb +142 -0
- data/spec/unit/views/components/index_list_spec.rb +32 -0
- data/spec/unit/views/components/paginated_collection_spec.rb +227 -0
- data/spec/unit/views/components/panel_spec.rb +51 -0
- data/spec/unit/views/components/popover_spec.rb +33 -0
- data/spec/unit/views/components/sidebar_section_spec.rb +37 -0
- data/spec/unit/views/components/site_title_spec.rb +78 -0
- data/spec/unit/views/components/status_tag_spec.rb +95 -0
- data/spec/unit/views/components/table_for_spec.rb +201 -0
- data/spec/unit/views/pages/form_spec.rb +35 -0
- data/spec/unit/views/pages/layout_spec.rb +63 -0
- data/spec/unit/views/pages/show_spec.rb +20 -0
- data/spec/unit/views/tabbed_navigation_spec.rb +149 -0
- data/tasks/docs.rake +37 -0
- data/tasks/js.rake +32 -0
- data/tasks/parallel_tests.rake +60 -0
- data/tasks/test.rake +79 -0
- data/tasks/yard.rake +7 -0
- metadata +896 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
require 'active_admin/resource/action_items'
|
|
2
|
+
require 'active_admin/resource/controllers'
|
|
3
|
+
require 'active_admin/resource/menu'
|
|
4
|
+
require 'active_admin/resource/page_presenters'
|
|
5
|
+
require 'active_admin/resource/pagination'
|
|
6
|
+
require 'active_admin/resource/routes'
|
|
7
|
+
require 'active_admin/resource/naming'
|
|
8
|
+
require 'active_admin/resource/scopes'
|
|
9
|
+
require 'active_admin/resource/scope_to'
|
|
10
|
+
require 'active_admin/resource/sidebars'
|
|
11
|
+
require 'active_admin/resource/belongs_to'
|
|
12
|
+
|
|
13
|
+
module ActiveAdmin
|
|
14
|
+
|
|
15
|
+
# Resource is the primary data storage for resource configuration in Active Admin
|
|
16
|
+
#
|
|
17
|
+
# When you register a resource (ActiveAdmin.register Post) you are actually creating
|
|
18
|
+
# a new Resource instance within the given Namespace.
|
|
19
|
+
#
|
|
20
|
+
# The instance of the current resource is available in ResourceController and views
|
|
21
|
+
# by calling the #active_admin_config method.
|
|
22
|
+
#
|
|
23
|
+
class Resource
|
|
24
|
+
|
|
25
|
+
# Event dispatched when a new resource is registered
|
|
26
|
+
RegisterEvent = 'active_admin.resource.register'.freeze
|
|
27
|
+
|
|
28
|
+
# The namespace this config belongs to
|
|
29
|
+
attr_reader :namespace
|
|
30
|
+
|
|
31
|
+
# The name of the resource class
|
|
32
|
+
attr_reader :resource_class_name
|
|
33
|
+
|
|
34
|
+
# An array of member actions defined for this resource
|
|
35
|
+
attr_reader :member_actions
|
|
36
|
+
|
|
37
|
+
# An array of collection actions defined for this resource
|
|
38
|
+
attr_reader :collection_actions
|
|
39
|
+
|
|
40
|
+
# The default sort order to use in the controller
|
|
41
|
+
attr_writer :sort_order
|
|
42
|
+
def sort_order
|
|
43
|
+
@sort_order ||= (resource_class.respond_to?(:primary_key) ? resource_class.primary_key.to_s : 'id') + '_desc'
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Set the configuration for the CSV
|
|
47
|
+
attr_writer :csv_builder
|
|
48
|
+
|
|
49
|
+
# Set breadcrumb builder
|
|
50
|
+
attr_accessor :breadcrumb
|
|
51
|
+
|
|
52
|
+
# Store a reference to the DSL so that we can dereference it during garbage collection.
|
|
53
|
+
attr_accessor :dsl
|
|
54
|
+
|
|
55
|
+
# The string identifying a class to decorate our resource with for the view.
|
|
56
|
+
# nil to not decorate.
|
|
57
|
+
attr_accessor :decorator_class_name
|
|
58
|
+
|
|
59
|
+
module Base
|
|
60
|
+
def initialize(namespace, resource_class, options = {})
|
|
61
|
+
@namespace = namespace
|
|
62
|
+
@resource_class_name = "::#{resource_class.name}"
|
|
63
|
+
@options = options
|
|
64
|
+
@sort_order = options[:sort_order]
|
|
65
|
+
@member_actions, @collection_actions = [], []
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
include MethodOrProcHelper
|
|
70
|
+
|
|
71
|
+
include Base
|
|
72
|
+
include ActionItems
|
|
73
|
+
include Authorization
|
|
74
|
+
include Controllers
|
|
75
|
+
include Menu
|
|
76
|
+
include Naming
|
|
77
|
+
include PagePresenters
|
|
78
|
+
include Pagination
|
|
79
|
+
include Scopes
|
|
80
|
+
include ScopeTo
|
|
81
|
+
include Sidebars
|
|
82
|
+
include Menu
|
|
83
|
+
include Routes
|
|
84
|
+
|
|
85
|
+
# The class this resource wraps. If you register the Post model, Resource#resource_class
|
|
86
|
+
# will point to the Post class
|
|
87
|
+
def resource_class
|
|
88
|
+
ActiveSupport::Dependencies.constantize(resource_class_name)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def decorator_class
|
|
92
|
+
ActiveSupport::Dependencies.constantize(decorator_class_name) if decorator_class_name
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def resource_table_name
|
|
96
|
+
resource_class.quoted_table_name
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def resource_column_names
|
|
100
|
+
resource_class.column_names
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def resource_quoted_column_name(column)
|
|
104
|
+
resource_class.connection.quote_column_name(column)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# Clears all the member actions this resource knows about
|
|
108
|
+
def clear_member_actions!
|
|
109
|
+
@member_actions = []
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def clear_collection_actions!
|
|
113
|
+
@collection_actions = []
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# Return only defined resource actions
|
|
117
|
+
def defined_actions
|
|
118
|
+
controller.instance_methods.map(&:to_sym) & ResourceController::ACTIVE_ADMIN_ACTIONS
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def belongs_to(target, options = {})
|
|
122
|
+
@belongs_to = Resource::BelongsTo.new(self, target, options)
|
|
123
|
+
self.navigation_menu_name = target unless @belongs_to.optional?
|
|
124
|
+
controller.send :belongs_to, target, options.dup
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def belongs_to_config
|
|
128
|
+
@belongs_to
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# Do we belong to another resource?
|
|
132
|
+
def belongs_to?
|
|
133
|
+
!!belongs_to_config
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# The csv builder for this resource
|
|
137
|
+
def csv_builder
|
|
138
|
+
@csv_builder || default_csv_builder
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def find_resource(id)
|
|
142
|
+
resource = resource_class.where(resource_class.primary_key => id).first
|
|
143
|
+
decorator_class ? decorator_class.new(resource) : resource
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
private
|
|
147
|
+
|
|
148
|
+
def default_csv_builder
|
|
149
|
+
@default_csv_builder ||= CSVBuilder.default_for_resource(resource_class)
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
end # class Resource
|
|
153
|
+
end # module ActiveAdmin
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
# This is a container for resources, which acts much like a Hash.
|
|
3
|
+
# It's assumed that an added resource responds to `resource_name`.
|
|
4
|
+
class ResourceCollection
|
|
5
|
+
include Enumerable
|
|
6
|
+
extend Forwardable
|
|
7
|
+
def_delegators :@resources, :empty?, :has_key?, :keys, :values, :[]=
|
|
8
|
+
|
|
9
|
+
def initialize
|
|
10
|
+
@resources = {}
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def add(resource)
|
|
14
|
+
@resources[resource.resource_name] ||= resource
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Changes `each` to pass in the value, instead of both the key and value.
|
|
18
|
+
def each(&block)
|
|
19
|
+
values.each &block
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Finds a resource based on the resource name, the resource class, or the base class.
|
|
23
|
+
def [](klass)
|
|
24
|
+
if match = @resources[klass]
|
|
25
|
+
match
|
|
26
|
+
elsif match = real_resources.detect{ |r| [r.resource_name.to_s, r.resource_class.to_s].include? klass.to_s }
|
|
27
|
+
match
|
|
28
|
+
elsif klass.respond_to? :base_class
|
|
29
|
+
real_resources.detect{ |r| r.resource_class.to_s == klass.base_class.to_s }
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
# REFACTOR: ResourceCollection currently stores Resource and Page objects. That doesn't
|
|
36
|
+
# make sense, because by definition a ResourceCollection is a collection of resources.
|
|
37
|
+
def real_resources
|
|
38
|
+
select{ |r| r.respond_to? :resource_class }
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
class ResourceController < BaseController
|
|
3
|
+
|
|
4
|
+
module ActionBuilder
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
module ClassMethods
|
|
8
|
+
|
|
9
|
+
def clear_member_actions!
|
|
10
|
+
active_admin_config.clear_member_actions!
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def clear_collection_actions!
|
|
14
|
+
active_admin_config.clear_collection_actions!
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
class ResourceController < BaseController
|
|
3
|
+
|
|
4
|
+
# This module overrides most of the data access methods in Inherited
|
|
5
|
+
# Resources to provide Active Admin with it's data.
|
|
6
|
+
#
|
|
7
|
+
# The module also deals with authorization and resource callbacks.
|
|
8
|
+
#
|
|
9
|
+
module DataAccess
|
|
10
|
+
extend ActiveSupport::Concern
|
|
11
|
+
|
|
12
|
+
include ActiveAdmin::Callbacks
|
|
13
|
+
include ActiveAdmin::ScopeChain
|
|
14
|
+
|
|
15
|
+
included do
|
|
16
|
+
define_active_admin_callbacks :build, :create, :update, :save, :destroy
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
protected
|
|
20
|
+
|
|
21
|
+
# Retrieve, memoize and authorize the current collection from the db. This
|
|
22
|
+
# method delegates the finding of the collection to #find_collection.
|
|
23
|
+
#
|
|
24
|
+
# Once #collection has been called, the collection is available using
|
|
25
|
+
# either the @collection instance variable or an instance variable named
|
|
26
|
+
# after the resource that the collection is for. eg: Post => @post.
|
|
27
|
+
#
|
|
28
|
+
# @returns [ActiveRecord::Relation] The collection for the index
|
|
29
|
+
def collection
|
|
30
|
+
_collection = get_collection_ivar
|
|
31
|
+
|
|
32
|
+
return _collection if _collection
|
|
33
|
+
|
|
34
|
+
_collection = find_collection
|
|
35
|
+
authorize! ActiveAdmin::Authorization::READ, active_admin_config.resource_class
|
|
36
|
+
|
|
37
|
+
set_collection_ivar _collection
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
# Does the actual work of retrieving the current collection from the db.
|
|
42
|
+
# This is a great method to override if you would like to perform
|
|
43
|
+
# some additional db # work before your controller returns and
|
|
44
|
+
# authorizes the collection.
|
|
45
|
+
#
|
|
46
|
+
# @returns [ActiveRecord::Relation] The collectin for the index
|
|
47
|
+
def find_collection
|
|
48
|
+
collection = scoped_collection
|
|
49
|
+
|
|
50
|
+
collection = apply_authorization_scope(collection)
|
|
51
|
+
collection = apply_sorting(collection)
|
|
52
|
+
collection = apply_filtering(collection)
|
|
53
|
+
collection = apply_scoping(collection)
|
|
54
|
+
collection = apply_pagination(collection)
|
|
55
|
+
collection = apply_decorator(collection)
|
|
56
|
+
|
|
57
|
+
collection
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
# Override this method in your controllers to modify the start point
|
|
62
|
+
# of our searches and index.
|
|
63
|
+
#
|
|
64
|
+
# This method should return an ActiveRecord::Relation object so that
|
|
65
|
+
# the searching and filtering can be applied on top
|
|
66
|
+
#
|
|
67
|
+
# Note, unless you are doing something special, you should use the
|
|
68
|
+
# scope_to method from the Scoping module instead of overriding this
|
|
69
|
+
# method.
|
|
70
|
+
def scoped_collection
|
|
71
|
+
end_of_association_chain
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Retrieve, memoize and authorize a resource based on params[:id]. The
|
|
75
|
+
# actual work of finding the resource is done in #find_resource.
|
|
76
|
+
#
|
|
77
|
+
# This method is used on all the member actions:
|
|
78
|
+
#
|
|
79
|
+
# * show
|
|
80
|
+
# * edit
|
|
81
|
+
# * update
|
|
82
|
+
# * destroy
|
|
83
|
+
#
|
|
84
|
+
# @returns [ActiveRecord::Base] An active record object
|
|
85
|
+
def resource
|
|
86
|
+
_resource = get_resource_ivar
|
|
87
|
+
|
|
88
|
+
return _resource if _resource
|
|
89
|
+
|
|
90
|
+
_resource = find_resource
|
|
91
|
+
authorize_resource! _resource
|
|
92
|
+
|
|
93
|
+
if decorator?
|
|
94
|
+
_resource = decorator_class.new(_resource)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
set_resource_ivar(_resource)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def decorator?
|
|
101
|
+
!!active_admin_config.decorator_class
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def decorator_class
|
|
105
|
+
active_admin_config.decorator_class
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
# Does the actual work of finding a resource in the database. This
|
|
110
|
+
# method uses the finder method as defined in InheritedResources.
|
|
111
|
+
#
|
|
112
|
+
# @returns [ActiveRecord::Base] An active record object.
|
|
113
|
+
def find_resource
|
|
114
|
+
scoped_collection.send(method_for_find, params[:id])
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
# Builds, memoize and authorize a new instance of the resource. The
|
|
119
|
+
# actual work of building the new instance is delegated to the
|
|
120
|
+
# #build_new_resource method.
|
|
121
|
+
#
|
|
122
|
+
# This method is used to instantiate and authorize new resources in the
|
|
123
|
+
# new and create controller actions.
|
|
124
|
+
#
|
|
125
|
+
# @returns [ActiveRecord::Base] An un-saved active record base object
|
|
126
|
+
def build_resource
|
|
127
|
+
return resource if resource = get_resource_ivar
|
|
128
|
+
|
|
129
|
+
resource = build_new_resource
|
|
130
|
+
|
|
131
|
+
run_build_callbacks resource
|
|
132
|
+
authorize_resource! resource
|
|
133
|
+
|
|
134
|
+
set_resource_ivar(resource)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# Builds a new resource. This method uses the method_for_build provided
|
|
138
|
+
# by Inherited Resources.
|
|
139
|
+
#
|
|
140
|
+
# @returns [ActiveRecord::Base] An un-saved active record base object
|
|
141
|
+
def build_new_resource
|
|
142
|
+
scoped_collection.send(method_for_build, *resource_params)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# Calls all the appropriate callbacks and then creates the new resource.
|
|
146
|
+
#
|
|
147
|
+
# @param [ActiveRecord::Base] object The new resource to create
|
|
148
|
+
#
|
|
149
|
+
# @returns [void]
|
|
150
|
+
def create_resource(object)
|
|
151
|
+
run_create_callbacks object do
|
|
152
|
+
save_resource(object)
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# Calls all the appropriate callbacks and then saves the new resource.
|
|
157
|
+
#
|
|
158
|
+
# @param [ActiveRecord::Base] object The new resource to save
|
|
159
|
+
#
|
|
160
|
+
# @returns [void]
|
|
161
|
+
def save_resource(object)
|
|
162
|
+
run_save_callbacks object do
|
|
163
|
+
object.save
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
# Update an object with the given attributes. Also calls the appropriate
|
|
168
|
+
# callbacks for update action.
|
|
169
|
+
#
|
|
170
|
+
# @param [ActiveRecord::Base] object The instance to update
|
|
171
|
+
#
|
|
172
|
+
# @param [Array] attributes An array with the attributes in the first position
|
|
173
|
+
# and the Active Record "role" in the second. The role
|
|
174
|
+
# may be set to nil.
|
|
175
|
+
#
|
|
176
|
+
# @returns [void]
|
|
177
|
+
def update_resource(object, attributes)
|
|
178
|
+
if object.respond_to?(:assign_attributes)
|
|
179
|
+
object.assign_attributes(*attributes)
|
|
180
|
+
else
|
|
181
|
+
object.attributes = attributes[0]
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
run_update_callbacks object do
|
|
185
|
+
save_resource(object)
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
# Destroys an object from the database and calls appropriate callbacks.
|
|
190
|
+
#
|
|
191
|
+
# @returns [void]
|
|
192
|
+
def destroy_resource(object)
|
|
193
|
+
run_destroy_callbacks object do
|
|
194
|
+
object.destroy
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
#
|
|
200
|
+
# Collection Helper Methods
|
|
201
|
+
#
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
# Gives the authorization library a change to pre-scope the collection.
|
|
205
|
+
#
|
|
206
|
+
# In the case of the CanCan adapter, it calls `#accessible_by` on
|
|
207
|
+
# the collection.
|
|
208
|
+
#
|
|
209
|
+
# @param [ActiveRecord::Relation] collection The collection to scope
|
|
210
|
+
#
|
|
211
|
+
# @retruns [ActiveRecord::Relation] a scoped collection of query
|
|
212
|
+
def apply_authorization_scope(collection)
|
|
213
|
+
action_name = action_to_permission(params[:action])
|
|
214
|
+
active_admin_authorization.scope_collection(collection, action_name)
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
def apply_sorting(chain)
|
|
219
|
+
params[:order] ||= active_admin_config.sort_order
|
|
220
|
+
if params[:order] && params[:order] =~ /^([\w\_\.]+)_(desc|asc)$/
|
|
221
|
+
column = $1
|
|
222
|
+
order = $2
|
|
223
|
+
table = active_admin_config.resource_column_names.include?(column) ? active_admin_config.resource_table_name : nil
|
|
224
|
+
table_column = (column =~ /\./) ? column :
|
|
225
|
+
[table, active_admin_config.resource_quoted_column_name(column)].compact.join(".")
|
|
226
|
+
|
|
227
|
+
chain.reorder("#{table_column} #{order}")
|
|
228
|
+
else
|
|
229
|
+
chain # just return the chain
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
# Applies any Ransack search methods to the currently scoped collection.
|
|
234
|
+
# Both `search` and `ransack` are provided, but we use `ransack` to prevent conflicts.
|
|
235
|
+
def apply_filtering(chain)
|
|
236
|
+
@search = chain.ransack clean_search_params params[:q]
|
|
237
|
+
@search.result
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
def clean_search_params(search_params)
|
|
241
|
+
return {} unless search_params.is_a?(Hash)
|
|
242
|
+
search_params = search_params.dup
|
|
243
|
+
search_params.delete_if do |key, value|
|
|
244
|
+
value == ""
|
|
245
|
+
end
|
|
246
|
+
search_params
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
def apply_scoping(chain)
|
|
250
|
+
@collection_before_scope = chain
|
|
251
|
+
|
|
252
|
+
if current_scope
|
|
253
|
+
scope_chain(current_scope, chain)
|
|
254
|
+
else
|
|
255
|
+
chain
|
|
256
|
+
end
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
def collection_before_scope
|
|
260
|
+
@collection_before_scope
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
def current_scope
|
|
264
|
+
@current_scope ||= if params[:scope]
|
|
265
|
+
active_admin_config.get_scope_by_id(params[:scope]) if params[:scope]
|
|
266
|
+
else
|
|
267
|
+
active_admin_config.default_scope(self)
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
def apply_pagination(chain)
|
|
272
|
+
page_method = Kaminari.config.page_method_name
|
|
273
|
+
page_param = params[Kaminari.config.param_name]
|
|
274
|
+
|
|
275
|
+
chain.send(page_method, page_param).per(per_page)
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
def per_page
|
|
279
|
+
return max_per_page if active_admin_config.paginate == false
|
|
280
|
+
|
|
281
|
+
@per_page || active_admin_config.per_page
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
def max_per_page
|
|
285
|
+
10_000
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
def apply_decorator(chain)
|
|
289
|
+
if decorator?
|
|
290
|
+
decorator_class.decorate_collection(chain)
|
|
291
|
+
else
|
|
292
|
+
chain
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
end
|
|
297
|
+
end
|
|
298
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
class ResourceController < BaseController
|
|
3
|
+
module Decorators
|
|
4
|
+
protected
|
|
5
|
+
|
|
6
|
+
def resource
|
|
7
|
+
decorator = active_admin_config.decorator_class
|
|
8
|
+
resource = super
|
|
9
|
+
decorator ? decorator.new(resource) : resource
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def active_admin_collection
|
|
13
|
+
decorator = active_admin_config.decorator_class
|
|
14
|
+
collection = super
|
|
15
|
+
decorator ? decorator.decorate_collection(collection) : collection
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
class ResourceController < BaseController
|
|
3
|
+
module ResourceClassMethods
|
|
4
|
+
|
|
5
|
+
# Override the default `resource_class` class and instance
|
|
6
|
+
# methods to only return the class defined in the instance
|
|
7
|
+
# of ActiveAdmin::Resource
|
|
8
|
+
def override_resource_class_methods!
|
|
9
|
+
class_exec do
|
|
10
|
+
def self.resource_class=(klass); end
|
|
11
|
+
|
|
12
|
+
def self.resource_class
|
|
13
|
+
@active_admin_config ? @active_admin_config.resource_class : nil
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def resource_class
|
|
17
|
+
self.class.resource_class
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
class ResourceController < BaseController
|
|
3
|
+
|
|
4
|
+
# This module deals with scoping entire controllers to a relation
|
|
5
|
+
module Scoping
|
|
6
|
+
extend ActiveSupport::Concern
|
|
7
|
+
|
|
8
|
+
protected
|
|
9
|
+
|
|
10
|
+
# Override the default InheritedResource #begin_of_association_chain to allow
|
|
11
|
+
# the scope to be defined in the active admin configuration.
|
|
12
|
+
#
|
|
13
|
+
# If scope_to is a proc, we eval it, otherwise we call the method on the controller.
|
|
14
|
+
#
|
|
15
|
+
# Collection can be scoped conditionally with an :if or :unless proc.
|
|
16
|
+
def begin_of_association_chain
|
|
17
|
+
return nil unless active_admin_config.scope_to?(self)
|
|
18
|
+
render_in_context(self, active_admin_config.scope_to_method)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Overriding from InheritedResources::BaseHelpers
|
|
22
|
+
#
|
|
23
|
+
# Returns the method for the association chain when using
|
|
24
|
+
# the scope_to option
|
|
25
|
+
def method_for_association_chain
|
|
26
|
+
active_admin_config.scope_to_association_method || super
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require 'inherited_resources'
|
|
2
|
+
require 'active_admin/resource_controller/action_builder'
|
|
3
|
+
require 'active_admin/resource_controller/data_access'
|
|
4
|
+
require 'active_admin/resource_controller/decorators'
|
|
5
|
+
require 'active_admin/resource_controller/scoping'
|
|
6
|
+
require 'active_admin/resource_controller/sidebars'
|
|
7
|
+
require 'active_admin/resource_controller/resource_class_methods'
|
|
8
|
+
|
|
9
|
+
module ActiveAdmin
|
|
10
|
+
# All Resources Controller inherits from this controller.
|
|
11
|
+
# It implements actions and helpers for resources.
|
|
12
|
+
class ResourceController < BaseController
|
|
13
|
+
layout :determine_active_admin_layout
|
|
14
|
+
|
|
15
|
+
respond_to :html, :xml, :json
|
|
16
|
+
respond_to :csv, :only => :index
|
|
17
|
+
|
|
18
|
+
include ActionBuilder
|
|
19
|
+
include Decorators
|
|
20
|
+
include DataAccess
|
|
21
|
+
include Scoping
|
|
22
|
+
include Sidebars
|
|
23
|
+
extend ResourceClassMethods
|
|
24
|
+
|
|
25
|
+
def self.active_admin_config=(config)
|
|
26
|
+
if @active_admin_config = config
|
|
27
|
+
defaults :resource_class => config.resource_class,
|
|
28
|
+
:route_prefix => config.route_prefix,
|
|
29
|
+
:instance_name => config.resource_name.singular
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Inherited Resources uses the `self.inherited(base)` hook to add
|
|
34
|
+
# in `self.resource_class`. To override it, we need to install
|
|
35
|
+
# our resource_class method each time we're inherited from.
|
|
36
|
+
def self.inherited(base)
|
|
37
|
+
super(base)
|
|
38
|
+
base.override_resource_class_methods!
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
|
|
43
|
+
# Returns the renderer class to use for the given action.
|
|
44
|
+
def renderer_for(action)
|
|
45
|
+
active_admin_namespace.view_factory["#{action}_page"]
|
|
46
|
+
end
|
|
47
|
+
helper_method :renderer_for
|
|
48
|
+
|
|
49
|
+
end
|
|
50
|
+
end
|