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,423 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
class Post
|
|
4
|
+
ransacker :custom_searcher do
|
|
5
|
+
# nothing to see here
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe ActiveAdmin::Filters::ViewHelper do
|
|
10
|
+
|
|
11
|
+
# Setup an ActionView::Base object which can be used for
|
|
12
|
+
# generating the form for.
|
|
13
|
+
let(:helpers) do
|
|
14
|
+
view = action_view
|
|
15
|
+
def view.collection_path
|
|
16
|
+
"/posts"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def view.protect_against_forgery?
|
|
20
|
+
false
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def view.a_helper_method
|
|
24
|
+
"A Helper Method"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
view
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def render_filter(search, filters)
|
|
31
|
+
render_arbre_component({filter_args: [search, filters]}, helpers) do
|
|
32
|
+
text_node active_admin_filters_form_for *assigns[:filter_args]
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def filter(name, options = {})
|
|
37
|
+
render_filter scope, name => options
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
let(:scope) { Post.search }
|
|
41
|
+
|
|
42
|
+
describe "the form in general" do
|
|
43
|
+
let(:body) { filter :title }
|
|
44
|
+
|
|
45
|
+
it "should generate a form which submits via get" do
|
|
46
|
+
body.should have_tag("form", :attributes => { :method => 'get', :class => 'filter_form' })
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "should generate a filter button" do
|
|
50
|
+
body.should have_tag("input", :attributes => { :type => "submit",
|
|
51
|
+
:value => "Filter" })
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "should only generate the form once" do
|
|
55
|
+
body.to_s.scan(/q\[title_contains\]/).size.should == 1
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "should generate a clear filters link" do
|
|
59
|
+
body.should have_tag("a", "Clear Filters", :attributes => { :class => "clear_filters_btn" })
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
describe "string attribute" do
|
|
64
|
+
let(:body) { filter :title }
|
|
65
|
+
|
|
66
|
+
it "should generate a select option for starts with" do
|
|
67
|
+
body.should have_tag("option", "Starts with", :attributes => { :value => 'title_starts_with' })
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "should generate a select option for ends with" do
|
|
71
|
+
body.should have_tag("option", "Ends with", :attributes => { :value => 'title_ends_with' })
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it "should generate a select option for contains" do
|
|
75
|
+
body.should have_tag("option", "Contains", :attributes => { :value => 'title_contains' })
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it "should generate a text field for input" do
|
|
79
|
+
body.should have_tag("input", :attributes => { :name => 'q[title_contains]' })
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it "should have a proper label" do
|
|
83
|
+
body.should have_tag('label', 'Title')
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "should translate the label for text field" do
|
|
87
|
+
begin
|
|
88
|
+
I18n.backend.store_translations(:en, :activerecord => { :attributes => { :post => { :title => "Name" } } })
|
|
89
|
+
body.should have_tag('label', 'Name')
|
|
90
|
+
ensure
|
|
91
|
+
I18n.backend.reload!
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it "should select the option which is currently being filtered"
|
|
96
|
+
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
describe "string attribute with sub filters" do
|
|
100
|
+
let(:body) { filter :title_contains }
|
|
101
|
+
|
|
102
|
+
it "should generate a search field for a string attribute with query contains" do
|
|
103
|
+
body.should have_tag("input", :attributes => { :name => "q[title_contains]"})
|
|
104
|
+
body.should have_tag('label', 'Title contains')
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "should NOT generate a select option for contains" do
|
|
108
|
+
body.should_not have_tag("option", "Contains", :attributes => { :value => 'title_contains' })
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
context "using starts_with and as" do
|
|
112
|
+
let(:body) { filter :title_starts_with }
|
|
113
|
+
|
|
114
|
+
it "should generate a search field for a string attribute with query starts_with" do
|
|
115
|
+
body.should have_tag("input", :attributes => { :name => "q[title_starts_with]" })
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
context "using ends_with and as" do
|
|
120
|
+
let(:body) { filter :title_ends_with }
|
|
121
|
+
|
|
122
|
+
it "should generate a search field for a string attribute with query ends_with" do
|
|
123
|
+
body.should have_tag("input", :attributes => { :name => "q[title_ends_with]" })
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
context "using contains and NO AS defined" do
|
|
128
|
+
let(:body) { filter :title_contains }
|
|
129
|
+
|
|
130
|
+
it "should generate a search field for a string attribute with query contains" do
|
|
131
|
+
body.should have_tag("input", :attributes => { :name => "q[title_contains]" })
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
describe "text attribute" do
|
|
137
|
+
let(:body) { filter :body }
|
|
138
|
+
|
|
139
|
+
it "should generate a search field for a text attribute" do
|
|
140
|
+
body.should have_tag("input", :attributes => { :name => "q[body_contains]"})
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
it "should have a proper label" do
|
|
144
|
+
body.should have_tag('label', 'Body')
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
describe "string attribute, as a select" do
|
|
149
|
+
let(:body) { filter :title, as: :select }
|
|
150
|
+
let(:builder) { ActiveAdmin::Inputs::FilterSelectInput }
|
|
151
|
+
|
|
152
|
+
context "when loading collection from DB" do
|
|
153
|
+
it "should use pluck for efficiency" do
|
|
154
|
+
builder.any_instance.should_receive(:pluck_column) { [] }
|
|
155
|
+
body
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
it "should remove original ordering to prevent PostgreSQL error" do
|
|
159
|
+
scope.object.klass.should_receive(:reorder).with('title asc') {
|
|
160
|
+
m = double uniq: double(pluck: ['A Title'])
|
|
161
|
+
m.uniq.should_receive(:pluck).with :title
|
|
162
|
+
m
|
|
163
|
+
}
|
|
164
|
+
body
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
describe "datetime attribute" do
|
|
170
|
+
let(:body) { filter :created_at }
|
|
171
|
+
|
|
172
|
+
it "should generate a date greater than" do
|
|
173
|
+
body.should have_tag("input", :attributes => { :name => "q[created_at_gteq]", :class => "datepicker"})
|
|
174
|
+
end
|
|
175
|
+
it "should generate a seperator" do
|
|
176
|
+
body.should have_tag("span", :attributes => { :class => "seperator"})
|
|
177
|
+
end
|
|
178
|
+
it "should generate a date less than" do
|
|
179
|
+
body.should have_tag("input", :attributes => { :name => "q[created_at_lteq]", :class => "datepicker"})
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
describe "integer attribute" do
|
|
184
|
+
let(:body) { filter :id }
|
|
185
|
+
|
|
186
|
+
it "should generate a select option for equal to" do
|
|
187
|
+
body.should have_tag("option", "Equals", :attributes => { :value => 'id_equals' })
|
|
188
|
+
end
|
|
189
|
+
it "should generate a select option for greater than" do
|
|
190
|
+
body.should have_tag("option", "Greater than")
|
|
191
|
+
end
|
|
192
|
+
it "should generate a select option for less than" do
|
|
193
|
+
body.should have_tag("option", "Less than")
|
|
194
|
+
end
|
|
195
|
+
it "should generate a text field for input" do
|
|
196
|
+
body.should have_tag("input", :attributes => { :name => 'q[id_equals]' })
|
|
197
|
+
end
|
|
198
|
+
it "should select the option which is currently being filtered"
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
describe "boolean attribute" do
|
|
202
|
+
context "boolean datatypes" do
|
|
203
|
+
let(:body) { filter :starred }
|
|
204
|
+
|
|
205
|
+
it "should create a check box for equals to" do
|
|
206
|
+
body.should have_tag("input", :attributes => {
|
|
207
|
+
:name => "q[starred_eq]",
|
|
208
|
+
:type => "checkbox" })
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
it "should translate the label for boolean field" do
|
|
212
|
+
begin
|
|
213
|
+
I18n.backend.store_translations(:en, :activerecord => { :attributes => { :post => { :starred => "Faved" } } })
|
|
214
|
+
body.should have_tag('label', 'Faved')
|
|
215
|
+
ensure
|
|
216
|
+
I18n.backend.reload!
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
context "non-boolean data types" do
|
|
222
|
+
let(:body) { filter :title_present, :as => :boolean }
|
|
223
|
+
|
|
224
|
+
it "should create a check box for equals to" do
|
|
225
|
+
body.should have_tag("input", :attributes => {
|
|
226
|
+
:name => "q[title_present]",
|
|
227
|
+
:type => "checkbox" })
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
describe "belongs_to" do
|
|
233
|
+
before do
|
|
234
|
+
@john = User.create :first_name => "John", :last_name => "Doe", :username => "john_doe"
|
|
235
|
+
@jane = User.create :first_name => "Jane", :last_name => "Doe", :username => "jane_doe"
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
context "when given as the _id attribute name" do
|
|
239
|
+
let(:body) { filter :author_id }
|
|
240
|
+
|
|
241
|
+
it "should generate a numeric filter" do
|
|
242
|
+
body.should have_tag 'label', 'Author' # really this should be Author ID :/
|
|
243
|
+
body.should have_tag 'option', :attributes => { :value => 'author_id_less_than' }
|
|
244
|
+
body.should have_tag 'input', :attributes => { :id => 'q_author_id', :name => 'q[author_id_equals]'}
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
context "when given as the name of the relationship" do
|
|
249
|
+
let(:body) { filter :author }
|
|
250
|
+
|
|
251
|
+
it "should generate a select" do
|
|
252
|
+
body.should have_tag "select", :attributes => { :name => "q[author_id_eq]" }
|
|
253
|
+
end
|
|
254
|
+
it "should set the default text to 'Any'" do
|
|
255
|
+
body.should have_tag "option", "Any", :attributes => { :value => "" }
|
|
256
|
+
end
|
|
257
|
+
it "should create an option for each related object" do
|
|
258
|
+
body.should have_tag "option", "John Doe", :attributes => { :value => @john.id }
|
|
259
|
+
body.should have_tag "option", "Jane Doe", :attributes => { :value => @jane.id }
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
context "with a proc" do
|
|
263
|
+
let :body do
|
|
264
|
+
filter :title, :as => :select, :collection => proc{ ['Title One', 'Title Two'] }
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
it "should use call the proc as the collection" do
|
|
268
|
+
body.should have_tag("option", "Title One")
|
|
269
|
+
body.should have_tag("option", "Title Two")
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
it "should render the collection in the context of the view" do
|
|
273
|
+
body = filter(:title, :as => :select, :collection => proc{[a_helper_method]})
|
|
274
|
+
body.should have_tag("option", "A Helper Method")
|
|
275
|
+
end
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
context "as check boxes" do
|
|
280
|
+
let(:body) { filter :author, :as => :check_boxes }
|
|
281
|
+
|
|
282
|
+
it "should create a check box for each related object" do
|
|
283
|
+
body.should have_tag("input", :attributes => {
|
|
284
|
+
:name => "q[author_id_in][]",
|
|
285
|
+
:type => "checkbox",
|
|
286
|
+
:value => @john.id })
|
|
287
|
+
body.should have_tag("input", :attributes => {
|
|
288
|
+
:name => "q[author_id_in][]",
|
|
289
|
+
:type => "checkbox",
|
|
290
|
+
:value => @jane.id })
|
|
291
|
+
end
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
context "when polymorphic relationship" do
|
|
295
|
+
let(:scope) { ActiveAdmin::Comment.search }
|
|
296
|
+
it "should raise an error if a collection isn't provided" do
|
|
297
|
+
expect { filter :resource }.to raise_error \
|
|
298
|
+
Formtastic::PolymorphicInputWithoutCollectionError
|
|
299
|
+
end
|
|
300
|
+
end
|
|
301
|
+
end # belongs to
|
|
302
|
+
|
|
303
|
+
describe "has_and_belongs_to_many" do
|
|
304
|
+
pending "add HABTM models so this can be tested"
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
describe "has_many :through" do
|
|
308
|
+
# Setup an ActionView::Base object which can be used for
|
|
309
|
+
# generating the form for.
|
|
310
|
+
let(:helpers) do
|
|
311
|
+
view = action_view
|
|
312
|
+
def view.collection_path
|
|
313
|
+
"/categories"
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
def view.protect_against_forgery?
|
|
317
|
+
false
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
def view.a_helper_method
|
|
321
|
+
"A Helper Method"
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
view
|
|
325
|
+
end
|
|
326
|
+
let(:scope) { Category.search }
|
|
327
|
+
|
|
328
|
+
let!(:john) { User.create :first_name => "John", :last_name => "Doe", :username => "john_doe" }
|
|
329
|
+
let!(:jane) { User.create :first_name => "Jane", :last_name => "Doe", :username => "jane_doe" }
|
|
330
|
+
|
|
331
|
+
context "when given as the name of the relationship" do
|
|
332
|
+
let(:body) { filter :authors }
|
|
333
|
+
|
|
334
|
+
it "should generate a select" do
|
|
335
|
+
body.should have_tag 'select', :attributes => { :name => "q[posts_author_id_eq]" }
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
it "should set the default text to 'Any'" do
|
|
339
|
+
body.should have_tag "option", "Any", :attributes => { :value => "" }
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
it "should create an option for each related object" do
|
|
343
|
+
body.should have_tag "option", "John Doe", :attributes => { :value => john.id }
|
|
344
|
+
body.should have_tag "option", "Jane Doe", :attributes => { :value => jane.id }
|
|
345
|
+
end
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
context "as check boxes" do
|
|
349
|
+
let(:body) { filter :authors, :as => :check_boxes }
|
|
350
|
+
|
|
351
|
+
it "should create a check box for each related object" do
|
|
352
|
+
body.should have_tag("input", :attributes => {
|
|
353
|
+
:name => "q[posts_author_id_in][]",
|
|
354
|
+
:type => "checkbox",
|
|
355
|
+
:value => john.id })
|
|
356
|
+
body.should have_tag("input", :attributes => {
|
|
357
|
+
:name => "q[posts_author_id_in][]",
|
|
358
|
+
:type => "checkbox",
|
|
359
|
+
:value => jane.id })
|
|
360
|
+
end
|
|
361
|
+
end
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
describe "conditional display" do
|
|
365
|
+
context "with :if block" do
|
|
366
|
+
it "should be displayed if true" do
|
|
367
|
+
body = filter :body, if: proc{true}
|
|
368
|
+
body.should have_tag "input", attributes: {name: "q[body_contains]"}
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
it "should NOT be displayed if false" do
|
|
372
|
+
body = filter :author, if: proc{false}
|
|
373
|
+
body.should_not have_tag "input", attributes: {name: "q[author_id_eq]"}
|
|
374
|
+
end
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
context "with :unless block" do
|
|
378
|
+
it "should be displayed if false" do
|
|
379
|
+
body = filter :created_at, unless: proc{false}
|
|
380
|
+
body.should have_tag "input", attributes: {name: "q[created_at_gteq]"}
|
|
381
|
+
end
|
|
382
|
+
|
|
383
|
+
it "should NOT be displayed if true" do
|
|
384
|
+
body = filter :updated_at, unless: proc{true}
|
|
385
|
+
body.should_not have_tag "input", attributes: {name: "q[updated_at_gteq]"}
|
|
386
|
+
end
|
|
387
|
+
end
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
describe "custom search methods" do
|
|
391
|
+
|
|
392
|
+
it "should work as select" do
|
|
393
|
+
body = filter :custom_searcher, as: :select, collection: ['foo']
|
|
394
|
+
body.should have_tag "select", attributes: { name: "q[custom_searcher]" }
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
it "should work as string" do
|
|
398
|
+
body = filter :custom_searcher, as: :string
|
|
399
|
+
body.should have_tag "input", attributes: { name: "q[custom_searcher]" }
|
|
400
|
+
end
|
|
401
|
+
end
|
|
402
|
+
|
|
403
|
+
describe "blank option" do
|
|
404
|
+
context "for a select filter" do
|
|
405
|
+
it "should be there by default" do
|
|
406
|
+
filter(:author).should have_tag "option", "Any"
|
|
407
|
+
end
|
|
408
|
+
it "should be able to be disabled" do
|
|
409
|
+
filter(:author, include_blank: false).should_not have_tag "option", "Any"
|
|
410
|
+
end
|
|
411
|
+
end
|
|
412
|
+
|
|
413
|
+
context "for a multi-select filter" do
|
|
414
|
+
it "should not be there by default" do
|
|
415
|
+
filter(:author, multiple: true).should_not have_tag "option", "Any"
|
|
416
|
+
end
|
|
417
|
+
it "should be able to be enabled" do
|
|
418
|
+
filter(:author, multiple: true, include_blank: true).should have_tag "option", "Any"
|
|
419
|
+
end
|
|
420
|
+
end
|
|
421
|
+
end
|
|
422
|
+
|
|
423
|
+
end
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ActiveAdmin::Filters::ResourceExtension do
|
|
4
|
+
|
|
5
|
+
let(:resource) do
|
|
6
|
+
namespace = ActiveAdmin::Namespace.new(ActiveAdmin::Application.new, :admin)
|
|
7
|
+
namespace.register(Post)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "should return the defaults if no filters are set" do
|
|
11
|
+
resource.filters.keys.sort.should == [
|
|
12
|
+
:author, :body, :category, :created_at, :published_at, :starred, :title, :updated_at
|
|
13
|
+
]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should not have defaults when filters are disabled on the resource" do
|
|
17
|
+
resource.filters = false
|
|
18
|
+
resource.filters.should be_empty
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should not have defaults when the filters are disabled on the namespace" do
|
|
22
|
+
resource.namespace.filters = false
|
|
23
|
+
resource.filters.should be_empty
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should not have defaults when the filters are disabled on the application" do
|
|
27
|
+
resource.namespace.application.filters = false
|
|
28
|
+
resource.filters.should be_empty
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe "removing a filter" do
|
|
32
|
+
it "should work" do
|
|
33
|
+
resource.filters.keys.should include :author
|
|
34
|
+
resource.remove_filter :author
|
|
35
|
+
resource.filters.keys.should_not include :author
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should work as a string" do
|
|
39
|
+
resource.filters.keys.should include :author
|
|
40
|
+
resource.remove_filter 'author'
|
|
41
|
+
resource.filters.keys.should_not include :author
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "should be lazy" do
|
|
45
|
+
resource.should_not_receive :default_filters # this hits the DB
|
|
46
|
+
resource.remove_filter :author
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "should not prevent the default filters from being added" do
|
|
50
|
+
resource.remove_filter :author
|
|
51
|
+
resource.filters.should_not be_empty
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "should raise an exception when filters are disabled" do
|
|
55
|
+
resource.filters = false
|
|
56
|
+
expect{ resource.remove_filter :author }.to raise_error ActiveAdmin::Filters::Disabled
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe "adding a filter" do
|
|
61
|
+
it "should work" do
|
|
62
|
+
resource.add_filter :title
|
|
63
|
+
resource.filters.should eq title: {}
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "should work as a string" do
|
|
67
|
+
resource.add_filter 'title'
|
|
68
|
+
resource.filters.should eq title: {}
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "should work with specified options" do
|
|
72
|
+
resource.add_filter :title, as: :string
|
|
73
|
+
resource.filters.should eq title: {as: :string}
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "should override an existing filter" do
|
|
77
|
+
resource.add_filter :title, one: :two
|
|
78
|
+
resource.add_filter :title, three: :four
|
|
79
|
+
|
|
80
|
+
resource.filters.should eq title: {three: :four}
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it "should keep specified options" do
|
|
84
|
+
resource.add_filter :title, one: :two
|
|
85
|
+
|
|
86
|
+
resource.filters.each do |attribute, opts|
|
|
87
|
+
opts.delete(:one)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
resource.filters.should eq title: {one: :two}
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "should preserve default filters" do
|
|
94
|
+
resource.preserve_default_filters!
|
|
95
|
+
resource.add_filter :count, as: :string
|
|
96
|
+
|
|
97
|
+
resource.filters.keys.sort.should == [
|
|
98
|
+
:author, :body, :category, :count, :created_at, :published_at, :starred, :title, :updated_at
|
|
99
|
+
]
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "should raise an exception when filters are disabled" do
|
|
103
|
+
resource.filters = false
|
|
104
|
+
expect{ resource.add_filter :title }.to raise_error ActiveAdmin::Filters::Disabled
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it "should reset filters" do
|
|
109
|
+
resource.add_filter :title
|
|
110
|
+
resource.filters.size.should == 1
|
|
111
|
+
resource.reset_filters!
|
|
112
|
+
resource.filters.size.should > 1
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
it "should add a sidebar section for the filters" do
|
|
116
|
+
resource.sidebar_sections.first.name.should == :filters
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
end
|