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,70 @@
|
|
|
1
|
+
require 'devise'
|
|
2
|
+
|
|
3
|
+
module ActiveAdmin
|
|
4
|
+
module Devise
|
|
5
|
+
|
|
6
|
+
def self.config
|
|
7
|
+
config = {
|
|
8
|
+
:path => ActiveAdmin.application.default_namespace,
|
|
9
|
+
:controllers => ActiveAdmin::Devise.controllers,
|
|
10
|
+
:path_names => { :sign_in => 'login', :sign_out => "logout" }
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
if ::Devise.respond_to?(:sign_out_via)
|
|
14
|
+
logout_methods = [::Devise.sign_out_via, ActiveAdmin.application.logout_link_method].flatten.uniq
|
|
15
|
+
config.merge!( :sign_out_via => logout_methods)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
config
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.controllers
|
|
22
|
+
{
|
|
23
|
+
:sessions => "active_admin/devise/sessions",
|
|
24
|
+
:passwords => "active_admin/devise/passwords",
|
|
25
|
+
:unlocks => "active_admin/devise/unlocks"
|
|
26
|
+
}
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
module Controller
|
|
30
|
+
extend ::ActiveSupport::Concern
|
|
31
|
+
included do
|
|
32
|
+
layout 'active_admin_logged_out'
|
|
33
|
+
helper ::ActiveAdmin::ViewHelpers
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Redirect to the default namespace on logout
|
|
37
|
+
def root_path
|
|
38
|
+
namespace = ActiveAdmin.application.default_namespace.presence
|
|
39
|
+
root_path_method = [namespace, :root_path].compact.join('_')
|
|
40
|
+
|
|
41
|
+
url_helpers = Rails.application.routes.url_helpers
|
|
42
|
+
|
|
43
|
+
path = if url_helpers.respond_to? root_path_method
|
|
44
|
+
url_helpers.send root_path_method
|
|
45
|
+
else
|
|
46
|
+
# Guess a root_path when url_helpers not helpful
|
|
47
|
+
"/#{namespace}"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# NOTE: `relative_url_root` is deprecated by rails.
|
|
51
|
+
# Remove prefix here if it is removed completely.
|
|
52
|
+
prefix = Rails.configuration.action_controller[:relative_url_root] || ''
|
|
53
|
+
prefix + path
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
class SessionsController < ::Devise::SessionsController
|
|
58
|
+
include ::ActiveAdmin::Devise::Controller
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
class PasswordsController < ::Devise::PasswordsController
|
|
62
|
+
include ::ActiveAdmin::Devise::Controller
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
class UnlocksController < ::Devise::UnlocksController
|
|
66
|
+
include ::ActiveAdmin::Devise::Controller
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
|
|
3
|
+
#
|
|
4
|
+
# The Active Admin DSL. This class is where all the registration blocks
|
|
5
|
+
# are instance eval'd. This is the central place for the API given to
|
|
6
|
+
# users of Active Admin
|
|
7
|
+
#
|
|
8
|
+
class DSL
|
|
9
|
+
|
|
10
|
+
def initialize(config)
|
|
11
|
+
@config = config
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Runs the registration block inside this object
|
|
15
|
+
def run_registration_block(&block)
|
|
16
|
+
instance_eval &block if block_given?
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# The instance of ActiveAdmin::Config that's being registered
|
|
20
|
+
# currently. You can use this within your registration blocks to
|
|
21
|
+
# modify options:
|
|
22
|
+
#
|
|
23
|
+
# eg:
|
|
24
|
+
#
|
|
25
|
+
# ActiveAdmin.register Post do
|
|
26
|
+
# config.sort_order = "id_desc"
|
|
27
|
+
# end
|
|
28
|
+
#
|
|
29
|
+
def config
|
|
30
|
+
@config
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Include a module with this resource. The modules's `included` method
|
|
34
|
+
# is called with the instance of the `ActiveAdmin::DSL` passed into it.
|
|
35
|
+
#
|
|
36
|
+
# eg:
|
|
37
|
+
#
|
|
38
|
+
# module HelpSidebar
|
|
39
|
+
#
|
|
40
|
+
# def self.included(dsl)
|
|
41
|
+
# dsl.sidebar "Help" do
|
|
42
|
+
# "Call us for Help"
|
|
43
|
+
# end
|
|
44
|
+
# end
|
|
45
|
+
#
|
|
46
|
+
# end
|
|
47
|
+
#
|
|
48
|
+
# ActiveAdmin.register Post do
|
|
49
|
+
# include HelpSidebar
|
|
50
|
+
# end
|
|
51
|
+
#
|
|
52
|
+
# @param [Module] mod A module to include
|
|
53
|
+
#
|
|
54
|
+
# @returns [Nil]
|
|
55
|
+
def include(mod)
|
|
56
|
+
mod.included(self)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Returns the controller for this resource. If you pass a
|
|
60
|
+
# block, it will be eval'd in the controller
|
|
61
|
+
#
|
|
62
|
+
# Example:
|
|
63
|
+
#
|
|
64
|
+
# ActiveAdmin.register Post do
|
|
65
|
+
#
|
|
66
|
+
# controller do
|
|
67
|
+
# def some_method_on_controller
|
|
68
|
+
# # Method gets added to Admin::PostsController
|
|
69
|
+
# end
|
|
70
|
+
# end
|
|
71
|
+
#
|
|
72
|
+
# end
|
|
73
|
+
#
|
|
74
|
+
def controller(&block)
|
|
75
|
+
@config.controller.class_eval(&block) if block_given?
|
|
76
|
+
@config.controller
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Add a new action item to the resource
|
|
80
|
+
#
|
|
81
|
+
# @param [Hash] options valid keys include:
|
|
82
|
+
# :only: A single or array of controller actions to display
|
|
83
|
+
# this action item on.
|
|
84
|
+
# :except: A single or array of controller actions not to
|
|
85
|
+
# display this action item on.
|
|
86
|
+
def action_item(options = {}, &block)
|
|
87
|
+
config.add_action_item(options, &block)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Add a new batch action item to the resource
|
|
91
|
+
# Provide a symbol/string to register the action, options, & block to execute on request
|
|
92
|
+
#
|
|
93
|
+
# To unregister an existing action, just provide the symbol & pass false as the second param
|
|
94
|
+
#
|
|
95
|
+
# @param [Symbol or String] title
|
|
96
|
+
# @param [Hash] options valid keys include:
|
|
97
|
+
# => :if is a proc that will be called to determine if the BatchAction should be displayed
|
|
98
|
+
# => :sort_order is used to sort the batch actions ascending
|
|
99
|
+
# => :confirm is a string which the user will have to accept in order to process the action
|
|
100
|
+
#
|
|
101
|
+
def batch_action(title, options = {}, &block)
|
|
102
|
+
# Create symbol & title information
|
|
103
|
+
if title.is_a? String
|
|
104
|
+
sym = title.titleize.gsub(' ', '').underscore.to_sym
|
|
105
|
+
else
|
|
106
|
+
sym = title
|
|
107
|
+
title = sym.to_s.titleize
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Either add/remove the batch action
|
|
111
|
+
unless options == false
|
|
112
|
+
config.add_batch_action( sym, title, options, &block )
|
|
113
|
+
else
|
|
114
|
+
config.remove_batch_action sym
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# Set the options that are available for the item that will be placed in the global
|
|
119
|
+
# navigation of the menu.
|
|
120
|
+
def menu(options = {})
|
|
121
|
+
config.menu_item_options = options
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# Set the name of the navigation menu to display. This is mainly used in conjuction with the
|
|
125
|
+
# `#belongs_to` functionality.
|
|
126
|
+
#
|
|
127
|
+
# @param [Symbol] menu_name The name of the menu to display as the global navigation
|
|
128
|
+
# when viewing this resource. Defaults to a menu named `:default`.
|
|
129
|
+
#
|
|
130
|
+
# Pass a block returning the name of a menu you want rendered for the request, being
|
|
131
|
+
# executed in the context of the controller
|
|
132
|
+
#
|
|
133
|
+
def navigation_menu(menu_name=nil, &block)
|
|
134
|
+
config.navigation_menu_name = menu_name || block
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# Rewrite breadcrumb links.
|
|
138
|
+
# Block will be executed inside controller.
|
|
139
|
+
# Block must return an array if you want to rewrite breadcrumb links.
|
|
140
|
+
#
|
|
141
|
+
# Example:
|
|
142
|
+
# ActiveAdmin.register Post do
|
|
143
|
+
#
|
|
144
|
+
# breadcrumb do
|
|
145
|
+
# [
|
|
146
|
+
# link_to('my piece', '/my/link/to/piece')
|
|
147
|
+
# ]
|
|
148
|
+
# end
|
|
149
|
+
# end
|
|
150
|
+
#
|
|
151
|
+
def breadcrumb(&block)
|
|
152
|
+
config.breadcrumb = block
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def sidebar(name, options = {}, &block)
|
|
156
|
+
config.sidebar_sections << ActiveAdmin::SidebarSection.new(name, options, &block)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def decorate_with(decorator_class)
|
|
160
|
+
# Force storage as a string. This will help us with reloading issues.
|
|
161
|
+
# Assuming decorator_class.to_s will return the name of the class allows
|
|
162
|
+
# us to handle a string or a class.
|
|
163
|
+
config.decorator_class_name = "::#{ decorator_class }"
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
|
|
3
|
+
class EventDispatcher
|
|
4
|
+
def initialize
|
|
5
|
+
@events = {}
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def clear_all_subscribers!
|
|
9
|
+
@events = {}
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def subscribe(*event_names, &block)
|
|
13
|
+
event_names.each do |event|
|
|
14
|
+
@events[event] ||= []
|
|
15
|
+
@events[event] << block
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def subscribers(event)
|
|
20
|
+
@events[event] || []
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def dispatch(event, *args)
|
|
24
|
+
subscribers(event).each do |subscriber|
|
|
25
|
+
subscriber.call(*args)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# ActiveAdmin::Event is set to a dispatcher
|
|
31
|
+
Event = EventDispatcher.new
|
|
32
|
+
|
|
33
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Filters
|
|
3
|
+
module DSL
|
|
4
|
+
|
|
5
|
+
# For docs, please see ActiveAdmin::Filters::ResourceExtension#add_filter
|
|
6
|
+
def filter(attribute, options = {})
|
|
7
|
+
config.add_filter(attribute, options)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# For docs, please see ActiveAdmin::Filters::ResourceExtension#remove_filter
|
|
11
|
+
def remove_filter(attribute)
|
|
12
|
+
config.remove_filter(attribute)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# For docs, please see ActiveAdmin::Filters::ResourceExtension#preserve_default_filters!
|
|
16
|
+
def preserve_default_filters!
|
|
17
|
+
config.preserve_default_filters!
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Filters
|
|
3
|
+
|
|
4
|
+
# This form builder defines methods to build filter forms such
|
|
5
|
+
# as the one found in the sidebar of the index page of a standard resource.
|
|
6
|
+
class FormBuilder < ::ActiveAdmin::FormBuilder
|
|
7
|
+
include ::ActiveAdmin::Filters::FormtasticAddons
|
|
8
|
+
|
|
9
|
+
def initialize(*args)
|
|
10
|
+
@use_form_buffer = true # force ActiveAdmin::FormBuilder to use the form buffer
|
|
11
|
+
super
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def filter(method, options = {})
|
|
15
|
+
if method.present? && options[:as] ||= default_input_type(method)
|
|
16
|
+
input(method, options)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
protected
|
|
21
|
+
|
|
22
|
+
# Returns the default filter type for a given attribute. If you want
|
|
23
|
+
# to use a custom search method, you have to specify the type yourself.
|
|
24
|
+
def default_input_type(method, options = {})
|
|
25
|
+
if method =~ /_(contains|starts_with|ends_with)\z/
|
|
26
|
+
:string
|
|
27
|
+
elsif reflection_for(method) || polymorphic_foreign_type?(method)
|
|
28
|
+
:select
|
|
29
|
+
elsif column = column_for(method)
|
|
30
|
+
case column.type
|
|
31
|
+
when :date, :datetime
|
|
32
|
+
:date_range
|
|
33
|
+
when :string, :text
|
|
34
|
+
:string
|
|
35
|
+
when :integer, :float, :decimal
|
|
36
|
+
:numeric
|
|
37
|
+
when :boolean
|
|
38
|
+
:boolean
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def custom_input_class_name(as)
|
|
44
|
+
"Filter#{as.to_s.camelize}Input"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def active_admin_input_class_name(as)
|
|
48
|
+
"ActiveAdmin::Inputs::Filter#{as.to_s.camelize}Input"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
# This module is included into the view
|
|
55
|
+
module ViewHelper
|
|
56
|
+
|
|
57
|
+
# Helper method to render a filter form
|
|
58
|
+
def active_admin_filters_form_for(search, filters, options = {})
|
|
59
|
+
defaults = { :builder => ActiveAdmin::Filters::FormBuilder,
|
|
60
|
+
:url => collection_path,
|
|
61
|
+
:html => {:class => 'filter_form'} }
|
|
62
|
+
required = { :html => {:method => :get},
|
|
63
|
+
:as => :q }
|
|
64
|
+
options = defaults.deep_merge(options).deep_merge(required)
|
|
65
|
+
|
|
66
|
+
form_for search, options do |f|
|
|
67
|
+
filters.each do |attribute, opts|
|
|
68
|
+
should = opts.delete(:if) || proc{ true }
|
|
69
|
+
shouldnt = opts.delete(:unless) || proc{ false }
|
|
70
|
+
|
|
71
|
+
if call_method_or_proc_on(self, should) && !call_method_or_proc_on(self, shouldnt)
|
|
72
|
+
f.filter attribute, opts
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
buttons = content_tag :div, :class => "buttons" do
|
|
77
|
+
f.submit(I18n.t('active_admin.filters.buttons.filter')) +
|
|
78
|
+
link_to(I18n.t('active_admin.filters.buttons.clear'), '#', :class => 'clear_filters_btn') +
|
|
79
|
+
hidden_field_tags_for(params, :except => [:q, :page])
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
f.form_buffers.last + buttons
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Filters
|
|
3
|
+
module FormtasticAddons
|
|
4
|
+
|
|
5
|
+
#
|
|
6
|
+
# The below are Formtastic method overrides that jump inside of the Ransack
|
|
7
|
+
# search object to get at the object being searched upon.
|
|
8
|
+
#
|
|
9
|
+
|
|
10
|
+
def humanized_method_name
|
|
11
|
+
if klass.respond_to?(:human_attribute_name)
|
|
12
|
+
klass.human_attribute_name(method)
|
|
13
|
+
else
|
|
14
|
+
method.to_s.send(builder.label_str_method)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def reflection_for(method)
|
|
19
|
+
klass.reflect_on_association(method) if klass.respond_to? :reflect_on_association
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def column_for(method)
|
|
23
|
+
klass.columns_hash[method.to_s] if klass.respond_to? :columns_hash
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def column
|
|
27
|
+
column_for method
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
#
|
|
31
|
+
# The below are custom methods that Formtastic does not provide.
|
|
32
|
+
#
|
|
33
|
+
|
|
34
|
+
# The resource class, unwrapped from Ransack
|
|
35
|
+
def klass
|
|
36
|
+
@object.object.klass
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def polymorphic_foreign_type?(method)
|
|
40
|
+
klass.reflections.values.select{ |r| r.macro == :belongs_to && r.options[:polymorphic] }
|
|
41
|
+
.map(&:foreign_type).include? method.to_s
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def searchable_through_association?(method = method)
|
|
45
|
+
ref = reflection_for(method)
|
|
46
|
+
ref.options[:through] && ref.through_reflection.klass.ransackable_attributes.include?(ref.foreign_key) if ref
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
#
|
|
50
|
+
# These help figure out whether the given method will be recognized by Ransack.
|
|
51
|
+
#
|
|
52
|
+
|
|
53
|
+
def seems_searchable?
|
|
54
|
+
has_predicate? || ransacker?
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# If the given method has a predicate (like _eq or _lteq), it's pretty
|
|
58
|
+
# likely we're dealing with a valid search method.
|
|
59
|
+
def has_predicate?
|
|
60
|
+
!!Ransack::Predicate.detect_and_strip_from_string!(method.to_s)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Ransack lets you define custom search methods, so we need to check for them.
|
|
64
|
+
def ransacker?
|
|
65
|
+
klass._ransackers.key? method.to_s
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Filters
|
|
3
|
+
|
|
4
|
+
class Disabled < RuntimeError
|
|
5
|
+
def initialize
|
|
6
|
+
super "Can't remove a filter when filters are disabled. Enable filters with 'config.filters = true'"
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
module ResourceExtension
|
|
11
|
+
|
|
12
|
+
def initialize(*)
|
|
13
|
+
super
|
|
14
|
+
add_filters_sidebar_section
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Returns the filters for this resource. If filters are not enabled,
|
|
18
|
+
# it will always return an empty array.
|
|
19
|
+
#
|
|
20
|
+
# @return [Array] Filters that apply for this resource
|
|
21
|
+
def filters
|
|
22
|
+
return [] unless filters_enabled?
|
|
23
|
+
filter_lookup
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Setter to enable / disable filters on this resource.
|
|
27
|
+
#
|
|
28
|
+
# Set to `nil` to inherit the setting from the namespace
|
|
29
|
+
def filters=(bool)
|
|
30
|
+
@filters_enabled = bool
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# @return [Boolean] If filters are enabled for this resource
|
|
34
|
+
def filters_enabled?
|
|
35
|
+
@filters_enabled.nil? ? namespace.filters : @filters_enabled
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def preserve_default_filters!
|
|
39
|
+
@preserve_default_filters = true
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def preserve_default_filters?
|
|
43
|
+
@preserve_default_filters == true
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Remove a filter for this resource. If filters are not enabled, this method
|
|
47
|
+
# will raise a RuntimeError
|
|
48
|
+
#
|
|
49
|
+
# @param [Symbol] attribute The attribute to not filter on
|
|
50
|
+
def remove_filter(attribute)
|
|
51
|
+
raise Disabled unless filters_enabled?
|
|
52
|
+
|
|
53
|
+
(@filters_to_remove ||= []) << attribute.to_sym
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Add a filter for this resource. If filters are not enabled, this method
|
|
57
|
+
# will raise a RuntimeError
|
|
58
|
+
#
|
|
59
|
+
# @param [Symbol] attribute The attribute to filter on
|
|
60
|
+
# @param [Hash] options The set of options that are passed through to
|
|
61
|
+
# ransack for the field definition.
|
|
62
|
+
def add_filter(attribute, options = {})
|
|
63
|
+
raise Disabled unless filters_enabled?
|
|
64
|
+
|
|
65
|
+
(@filters ||= {})[attribute.to_sym] = options
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Reset the filters to use defaults
|
|
69
|
+
def reset_filters!
|
|
70
|
+
@filters = nil
|
|
71
|
+
@filters_to_remove = nil
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
private
|
|
75
|
+
|
|
76
|
+
# Collapses the waveform, if you will, of which filters should be displayed.
|
|
77
|
+
# Removes filters and adds in default filters as desired.
|
|
78
|
+
def filter_lookup
|
|
79
|
+
filters = @filters.try(:deep_dup) || {}
|
|
80
|
+
|
|
81
|
+
if filters.empty? || preserve_default_filters?
|
|
82
|
+
default_filters.each do |f|
|
|
83
|
+
filters[f] ||= {}
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
if @filters_to_remove
|
|
88
|
+
@filters_to_remove.each &filters.method(:delete)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
filters
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# @return [Array] The array of default filters for this resource
|
|
95
|
+
def default_filters
|
|
96
|
+
default_association_filters + default_content_filters
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Returns a default set of filters for the associations
|
|
100
|
+
def default_association_filters
|
|
101
|
+
if resource_class.respond_to?(:reflect_on_all_associations)
|
|
102
|
+
poly, not_poly = resource_class.reflect_on_all_associations.partition{ |r| r.macro == :belongs_to && r.options[:polymorphic] }
|
|
103
|
+
|
|
104
|
+
# remove associations nested more than twice
|
|
105
|
+
not_poly.reject!{ |r| r.chain.length > 2 }
|
|
106
|
+
|
|
107
|
+
filters = poly.map(&:foreign_type) + not_poly.map(&:name)
|
|
108
|
+
filters.map &:to_sym
|
|
109
|
+
else
|
|
110
|
+
[]
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# Returns a default set of filters for the content columns
|
|
115
|
+
def default_content_filters
|
|
116
|
+
if resource_class.respond_to? :content_columns
|
|
117
|
+
resource_class.content_columns.map{ |c| c.name.to_sym }
|
|
118
|
+
else
|
|
119
|
+
[]
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def add_filters_sidebar_section
|
|
124
|
+
self.sidebar_sections << filters_sidebar_section
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def filters_sidebar_section
|
|
128
|
+
ActiveAdmin::SidebarSection.new :filters, only: :index, if: ->{ active_admin_config.filters.any? } do
|
|
129
|
+
active_admin_filters_form_for assigns[:search], active_admin_config.filters
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
end
|
|
136
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
require 'active_admin/filters/dsl'
|
|
2
|
+
require 'active_admin/filters/resource_extension'
|
|
3
|
+
require 'active_admin/filters/formtastic_addons'
|
|
4
|
+
require 'active_admin/filters/forms'
|
|
5
|
+
|
|
6
|
+
# Add our Extensions
|
|
7
|
+
ActiveAdmin::ResourceDSL.send :include, ActiveAdmin::Filters::DSL
|
|
8
|
+
ActiveAdmin::Resource.send :include, ActiveAdmin::Filters::ResourceExtension
|
|
9
|
+
ActiveAdmin::ViewHelpers.send :include, ActiveAdmin::Filters::ViewHelper
|