aa-rails4 0.6.0
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/.document +5 -0
- data/.gitignore +43 -0
- data/.travis.yml +8 -0
- data/.yardopts +7 -0
- data/CHANGELOG.md +894 -0
- data/CONTRIBUTING.md +121 -0
- data/Gemfile +40 -0
- data/Guardfile +7 -0
- data/LICENSE +25 -0
- data/README.rdoc +118 -0
- data/Rakefile +26 -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 +3 -0
- data/app/assets/javascripts/active_admin/base.js +5 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.checkbox-toggler.js.coffee +37 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +105 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +97 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.table-checkbox-toggler.js.coffee +25 -0
- data/app/assets/javascripts/active_admin/lib/namespace.js.coffee +3 -0
- data/app/assets/javascripts/active_admin/pages/application.js.coffee +21 -0
- data/app/assets/javascripts/active_admin/pages/batch_actions.js.coffee +26 -0
- data/app/assets/stylesheets/active_admin/_base.css.scss +41 -0
- data/app/assets/stylesheets/active_admin/_forms.css.scss +281 -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 +108 -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 +24 -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 +26 -0
- data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +44 -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 +18 -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 +92 -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 +90 -0
- data/config/locales/en.yml +101 -0
- data/config/locales/es.yml +106 -0
- data/config/locales/es_MX.yml +104 -0
- data/config/locales/fr.yml +89 -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 +87 -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 +89 -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 +56 -0
- data/docs/1-general-configuration.md +129 -0
- data/docs/10-custom-pages.md +96 -0
- data/docs/11-decorators.md +66 -0
- data/docs/12-arbre-components.md +144 -0
- data/docs/13-authorization-adapter.md +206 -0
- data/docs/2-resource-customization.md +292 -0
- data/docs/3-index-pages.md +191 -0
- data/docs/3-index-pages/create-an-index.md +29 -0
- data/docs/3-index-pages/index-as-block.md +16 -0
- data/docs/3-index-pages/index-as-blog.md +61 -0
- data/docs/3-index-pages/index-as-grid.md +21 -0
- data/docs/3-index-pages/index-as-table.md +120 -0
- data/docs/4-csv-format.md +32 -0
- data/docs/5-forms.md +72 -0
- data/docs/6-show-pages.md +43 -0
- data/docs/7-sidebars.md +42 -0
- data/docs/8-custom-actions.md +139 -0
- data/docs/9-batch-actions.md +161 -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 +128 -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 +94 -0
- data/features/index/format_as_csv.feature +117 -0
- data/features/index/formats.feature +39 -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 +93 -0
- data/features/step_definitions/dashboard_steps.rb +15 -0
- data/features/step_definitions/factory_steps.rb +33 -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 +46 -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/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 +82 -0
- data/features/sti_resource.feature +73 -0
- data/features/support/env.rb +118 -0
- data/features/support/paths.rb +63 -0
- data/features/support/selectors.rb +45 -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.rb +120 -0
- data/lib/active_admin/abstract_view_factory.rb +95 -0
- data/lib/active_admin/application.rb +245 -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.rb +78 -0
- data/lib/active_admin/base_controller/authorization.rb +153 -0
- data/lib/active_admin/base_controller/menu.rb +34 -0
- data/lib/active_admin/batch_actions.rb +17 -0
- data/lib/active_admin/batch_actions/controller.rb +25 -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/callbacks.rb +87 -0
- data/lib/active_admin/cancan_adapter.rb +40 -0
- data/lib/active_admin/comments.rb +83 -0
- data/lib/active_admin/comments/comment.rb +49 -0
- data/lib/active_admin/comments/namespace_helper.rb +14 -0
- data/lib/active_admin/comments/resource_helper.rb +17 -0
- data/lib/active_admin/comments/show_page_helper.rb +23 -0
- data/lib/active_admin/comments/views.rb +2 -0
- data/lib/active_admin/comments/views/active_admin_comments.rb +75 -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.rb +9 -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 +50 -0
- data/lib/active_admin/filters/resource_extension.rb +129 -0
- data/lib/active_admin/form_builder.rb +189 -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.rb +51 -0
- data/lib/active_admin/iconic/icons.rb +142 -0
- data/lib/active_admin/inputs.rb +15 -0
- data/lib/active_admin/inputs/datepicker_input.rb +11 -0
- data/lib/active_admin/inputs/filter_base.rb +33 -0
- data/lib/active_admin/inputs/filter_base/search_method_select.rb +73 -0
- data/lib/active_admin/inputs/filter_boolean_input.rb +32 -0
- data/lib/active_admin/inputs/filter_check_boxes_input.rb +40 -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 +45 -0
- data/lib/active_admin/inputs/filter_string_input.rb +24 -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 +221 -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.rb +160 -0
- data/lib/active_admin/resource/action_items.rb +93 -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 +78 -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_collection.rb +42 -0
- data/lib/active_admin/resource_controller.rb +51 -0
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/actions.rb +81 -0
- data/lib/active_admin/resource_controller/data_access.rb +303 -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_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 +28 -0
- data/lib/active_admin/view_helpers.rb +21 -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 +47 -0
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +50 -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/views.rb +8 -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 +70 -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 +123 -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 +65 -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/dashboard_section_renderer.rb +19 -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 +150 -0
- data/lib/active_admin/views/index_as_grid.rb +76 -0
- data/lib/active_admin/views/index_as_table.rb +238 -0
- data/lib/active_admin/views/pages/base.rb +139 -0
- data/lib/active_admin/views/pages/dashboard.rb +62 -0
- data/lib/active_admin/views/pages/form.rb +51 -0
- data/lib/active_admin/views/pages/index.rb +158 -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/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 +78 -0
- data/lib/generators/active_admin/install/install_generator.rb +46 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +214 -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 +11 -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 +104 -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 +56 -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 +39 -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 +27 -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 +338 -0
- data/spec/unit/filters/resource_spec.rb +87 -0
- data/spec/unit/form_builder_spec.rb +478 -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 +108 -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 +79 -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 +22 -0
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +152 -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 +97 -0
- data/spec/unit/views/components/action_list_popover_spec.rb +30 -0
- data/spec/unit/views/components/attributes_table_spec.rb +131 -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 +247 -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 +182 -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 +39 -0
- data/tasks/js.rake +32 -0
- data/tasks/parallel_tests.rake +60 -0
- data/tasks/test.rake +79 -0
- data/tasks/yard.rake +6 -0
- metadata +883 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
module MockModuleToInclude
|
|
5
|
+
def self.included(dsl)
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe ActiveAdmin::DSL do
|
|
10
|
+
|
|
11
|
+
let(:config){ mock }
|
|
12
|
+
let(:application) { ActiveAdmin::Application.new }
|
|
13
|
+
let(:namespace) { ActiveAdmin::Namespace.new application, :admin }
|
|
14
|
+
let(:resource_config) { ActiveAdmin::Resource.new namespace, Post }
|
|
15
|
+
let(:dsl){ ActiveAdmin::DSL.new(config) }
|
|
16
|
+
|
|
17
|
+
describe "#include" do
|
|
18
|
+
|
|
19
|
+
it "should call the included class method on the module that is included" do
|
|
20
|
+
MockModuleToInclude.should_receive(:included).with(dsl)
|
|
21
|
+
dsl.run_registration_block do
|
|
22
|
+
include MockModuleToInclude
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe "#menu" do
|
|
29
|
+
|
|
30
|
+
it "should set the menu_item_options on the configuration" do
|
|
31
|
+
config.should_receive(:menu_item_options=).with({:parent => "Admin"})
|
|
32
|
+
dsl.run_registration_block do
|
|
33
|
+
menu :parent => "Admin"
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe "#navigation_menu" do
|
|
40
|
+
|
|
41
|
+
it "should set the navigation_menu_name on the configuration" do
|
|
42
|
+
config.should_receive(:navigation_menu_name=).with(:admin)
|
|
43
|
+
dsl.run_registration_block do
|
|
44
|
+
navigation_menu :admin
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "should accept a block" do
|
|
49
|
+
|
|
50
|
+
dsl = ActiveAdmin::DSL.new(resource_config)
|
|
51
|
+
dsl.run_registration_block do
|
|
52
|
+
navigation_menu { :dynamic_menu }
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
resource_config.navigation_menu_name.should == :dynamic_menu
|
|
56
|
+
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'active_admin/event'
|
|
3
|
+
|
|
4
|
+
describe ActiveAdmin::EventDispatcher do
|
|
5
|
+
|
|
6
|
+
let(:test_event){ 'active_admin.test_event' }
|
|
7
|
+
let(:dispatcher){ ActiveAdmin::EventDispatcher.new }
|
|
8
|
+
|
|
9
|
+
it "should add a subscriber for an event" do
|
|
10
|
+
dispatcher.subscribers(test_event).size.should == 0
|
|
11
|
+
dispatcher.subscribe(test_event){ true }
|
|
12
|
+
dispatcher.subscribers(test_event).size.should == 1
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should add a subscriber for multiple events" do
|
|
16
|
+
dispatcher.subscribe(test_event, test_event + "1"){ true }
|
|
17
|
+
dispatcher.subscribers(test_event).size.should == 1
|
|
18
|
+
dispatcher.subscribers(test_event + "1").size.should == 1
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should call the dispatch block with no arguments" do
|
|
22
|
+
dispatcher.subscribe(test_event){ raise StandardError, "From Event Handler" }
|
|
23
|
+
expect {
|
|
24
|
+
dispatcher.dispatch(test_event)
|
|
25
|
+
}.to raise_error(StandardError, "From Event Handler")
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should call the dispatch block with one argument" do
|
|
29
|
+
arg = nil
|
|
30
|
+
dispatcher.subscribe(test_event){|passed_in| arg = passed_in }
|
|
31
|
+
dispatcher.dispatch(test_event, "My Arg")
|
|
32
|
+
arg.should == "My Arg"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "should clear all subscribers" do
|
|
36
|
+
dispatcher.subscribe(test_event){ false }
|
|
37
|
+
dispatcher.subscribe(test_event + "_2"){ false }
|
|
38
|
+
dispatcher.clear_all_subscribers!
|
|
39
|
+
dispatcher.subscribers(test_event).size.should == 0
|
|
40
|
+
dispatcher.subscribers(test_event + "_2").size.should == 0
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "should have a dispatcher available from ActiveAdmin::Event" do
|
|
44
|
+
ActiveAdmin::Event.should be_an_instance_of(ActiveAdmin::EventDispatcher)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ActiveAdmin::Filters::ViewHelper do
|
|
4
|
+
|
|
5
|
+
# Setup an ActionView::Base object which can be used for
|
|
6
|
+
# generating the form for.
|
|
7
|
+
let(:helpers) do
|
|
8
|
+
view = action_view
|
|
9
|
+
def view.collection_path
|
|
10
|
+
"/posts"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def view.protect_against_forgery?
|
|
14
|
+
false
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def view.a_helper_method
|
|
18
|
+
"A Helper Method"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
view
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def render_filter(search, filters)
|
|
25
|
+
render_arbre_component({:filter_args => [search, filters]}, helpers) do
|
|
26
|
+
text_node active_admin_filters_form_for(*assigns[:filter_args])
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def filter(name, options = {})
|
|
31
|
+
render_filter scope, @filters.push(options.merge(:attribute => name))
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
let(:scope) { Post.search }
|
|
35
|
+
|
|
36
|
+
before(:each) { @filters = [] }
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
describe "the form in general" do
|
|
40
|
+
let(:body) { filter :title }
|
|
41
|
+
|
|
42
|
+
it "should generate a form which submits via get" do
|
|
43
|
+
body.should have_tag("form", :attributes => { :method => 'get', :class => 'filter_form' })
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "should generate a filter button" do
|
|
47
|
+
body.should have_tag("input", :attributes => { :type => "submit",
|
|
48
|
+
:value => "Filter" })
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should only generate the form once" do
|
|
52
|
+
body.to_s.scan(/q\[title_contains\]/).size.should == 1
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it "should generate a clear filters link" do
|
|
56
|
+
body.should have_tag("a", "Clear Filters", :attributes => { :class => "clear_filters_btn" })
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe "string attribute" do
|
|
61
|
+
let(:body) { filter :title }
|
|
62
|
+
|
|
63
|
+
it "should generate a select option for starts with" do
|
|
64
|
+
body.should have_tag("option", "Starts with", :attributes => { :value => 'title_starts_with' })
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "should generate a select option for ends with" do
|
|
68
|
+
body.should have_tag("option", "Ends with", :attributes => { :value => 'title_ends_with' })
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "should generate a select option for contains" do
|
|
72
|
+
body.should have_tag("option", "Contains", :attributes => { :value => 'title_contains' })
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it "should generate a text field for input" do
|
|
76
|
+
body.should have_tag("input", :attributes => { :name => 'q[title_contains]' })
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "should have a proper label" do
|
|
80
|
+
body.should have_tag('label', 'Title')
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it "should translate the label for text field" do
|
|
84
|
+
begin
|
|
85
|
+
I18n.backend.store_translations(:en, :activerecord => { :attributes => { :post => { :title => "Name" } } })
|
|
86
|
+
body.should have_tag('label', 'Name')
|
|
87
|
+
ensure
|
|
88
|
+
I18n.backend.reload!
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "should select the option which is currently being filtered"
|
|
93
|
+
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
describe "string attribute with sub filters" do
|
|
97
|
+
let(:body) { filter :title_contains }
|
|
98
|
+
|
|
99
|
+
it "should generate a search field for a string attribute with query contains" do
|
|
100
|
+
body.should have_tag("input", :attributes => { :name => "q[title_contains]"})
|
|
101
|
+
body.should have_tag('label', 'Title contains')
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
it "should NOT generate a select option for contains" do
|
|
105
|
+
body.should_not have_tag("option", "Contains", :attributes => { :value => 'title_contains' })
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
context "using starts_with and as" do
|
|
109
|
+
let(:body) { filter :title_starts_with }
|
|
110
|
+
|
|
111
|
+
it "should generate a search field for a string attribute with query starts_with" do
|
|
112
|
+
body.should have_tag("input", :attributes => { :name => "q[title_starts_with]" })
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
context "using ends_with and as" do
|
|
117
|
+
let(:body) { filter :title_ends_with }
|
|
118
|
+
|
|
119
|
+
it "should generate a search field for a string attribute with query ends_with" do
|
|
120
|
+
body.should have_tag("input", :attributes => { :name => "q[title_ends_with]" })
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
context "using contains and NO AS defined" do
|
|
125
|
+
let(:body) { filter :title_contains }
|
|
126
|
+
|
|
127
|
+
it "should generate a search field for a string attribute with query contains" do
|
|
128
|
+
body.should have_tag("input", :attributes => { :name => "q[title_contains]" })
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
describe "text attribute" do
|
|
134
|
+
let(:body) { filter :body }
|
|
135
|
+
|
|
136
|
+
it "should generate a search field for a text attribute" do
|
|
137
|
+
body.should have_tag("input", :attributes => { :name => "q[body_contains]"})
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
it "should have a proper label" do
|
|
141
|
+
body.should have_tag('label', 'Body')
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
describe "text attribute, as a select" do
|
|
146
|
+
let(:body) { filter :title, as: :select }
|
|
147
|
+
let(:builder) { ActiveAdmin::Inputs::FilterSelectInput }
|
|
148
|
+
|
|
149
|
+
context "when loading collection from DB" do
|
|
150
|
+
it "should use pluck for efficiency" do
|
|
151
|
+
builder.any_instance.should_receive(:pluck_column) { [] }
|
|
152
|
+
body
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
it "should remove original ordering to prevent PostgreSQL error" do
|
|
156
|
+
scope.object.klass.should_receive(:reorder).with('title asc') {
|
|
157
|
+
m = mock uniq: mock(pluck: ['A Title'])
|
|
158
|
+
m.uniq.should_receive(:pluck).with :title
|
|
159
|
+
m
|
|
160
|
+
}
|
|
161
|
+
body
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
end unless Rails::VERSION::MAJOR == 3 && Rails::VERSION::MINOR < 2
|
|
165
|
+
|
|
166
|
+
describe "datetime attribute" do
|
|
167
|
+
let(:body) { filter :created_at }
|
|
168
|
+
|
|
169
|
+
it "should generate a date greater than" do
|
|
170
|
+
body.should have_tag("input", :attributes => { :name => "q[created_at_gteq]", :class => "datepicker"})
|
|
171
|
+
end
|
|
172
|
+
it "should generate a seperator" do
|
|
173
|
+
body.should have_tag("span", :attributes => { :class => "seperator"})
|
|
174
|
+
end
|
|
175
|
+
it "should generate a date less than" do
|
|
176
|
+
body.should have_tag("input", :attributes => { :name => "q[created_at_lteq]", :class => "datepicker"})
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
describe "integer attribute" do
|
|
181
|
+
let(:body) { filter :id }
|
|
182
|
+
|
|
183
|
+
it "should generate a select option for equal to" do
|
|
184
|
+
body.should have_tag("option", "Equals", :attributes => { :value => 'id_equals' })
|
|
185
|
+
end
|
|
186
|
+
it "should generate a select option for greater than" do
|
|
187
|
+
body.should have_tag("option", "Greater than")
|
|
188
|
+
end
|
|
189
|
+
it "should generate a select option for less than" do
|
|
190
|
+
body.should have_tag("option", "Less than")
|
|
191
|
+
end
|
|
192
|
+
it "should generate a text field for input" do
|
|
193
|
+
body.should have_tag("input", :attributes => { :name => 'q[id_equals]' })
|
|
194
|
+
end
|
|
195
|
+
it "should select the option which is currently being filtered"
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
describe "boolean attribute" do
|
|
199
|
+
context "boolean datatypes" do
|
|
200
|
+
let(:body) { filter :starred }
|
|
201
|
+
|
|
202
|
+
it "should create a check box for equals to" do
|
|
203
|
+
body.should have_tag("input", :attributes => {
|
|
204
|
+
:name => "q[starred_eq]",
|
|
205
|
+
:type => "checkbox" })
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
it "should translate the label for boolean field" do
|
|
209
|
+
begin
|
|
210
|
+
I18n.backend.store_translations(:en, :activerecord => { :attributes => { :post => { :starred => "Faved" } } })
|
|
211
|
+
body.should have_tag('label', 'Faved')
|
|
212
|
+
ensure
|
|
213
|
+
I18n.backend.reload!
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
context "non-boolean data types" do
|
|
219
|
+
let(:body) { filter :title_present, :as => :boolean }
|
|
220
|
+
|
|
221
|
+
it "should create a check box for equals to" do
|
|
222
|
+
body.should have_tag("input", :attributes => {
|
|
223
|
+
:name => "q[title_present]",
|
|
224
|
+
:type => "checkbox" })
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
describe "belongs_to" do
|
|
230
|
+
before do
|
|
231
|
+
@john = User.create :first_name => "John", :last_name => "Doe", :username => "john_doe"
|
|
232
|
+
@jane = User.create :first_name => "Jane", :last_name => "Doe", :username => "jane_doe"
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
context "when given as the _id attribute name" do
|
|
236
|
+
let(:body) { filter :author_id }
|
|
237
|
+
|
|
238
|
+
it "should generate a numeric filter" do
|
|
239
|
+
body.should have_tag 'label', 'Author' # really this should be Author ID :/
|
|
240
|
+
body.should have_tag 'option', :attributes => { :value => 'author_id_less_than' }
|
|
241
|
+
body.should have_tag 'input', :attributes => { :id => 'q_author_id', :name => 'q[author_id_equals]'}
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
context "when given as the name of the relationship" do
|
|
246
|
+
let(:body) { filter :author }
|
|
247
|
+
|
|
248
|
+
it "should generate a select" do
|
|
249
|
+
body.should have_tag "select", :attributes => { :name => "q[author_id_eq]" }
|
|
250
|
+
end
|
|
251
|
+
it "should set the default text to 'Any'" do
|
|
252
|
+
body.should have_tag "option", "Any", :attributes => { :value => "" }
|
|
253
|
+
end
|
|
254
|
+
it "should create an option for each related object" do
|
|
255
|
+
body.should have_tag "option", "John Doe", :attributes => { :value => @john.id }
|
|
256
|
+
body.should have_tag "option", "Jane Doe", :attributes => { :value => @jane.id }
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
context "with a proc" do
|
|
260
|
+
let :body do
|
|
261
|
+
filter :title, :as => :select, :collection => proc{ ['Title One', 'Title Two'] }
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
it "should use call the proc as the collection" do
|
|
265
|
+
body.should have_tag("option", "Title One")
|
|
266
|
+
body.should have_tag("option", "Title Two")
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
it "should render the collection in the context of the view" do
|
|
270
|
+
body = filter(:title, :as => :select, :collection => proc{[a_helper_method]})
|
|
271
|
+
body.should have_tag("option", "A Helper Method")
|
|
272
|
+
end
|
|
273
|
+
end
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
context "as check boxes" do
|
|
277
|
+
let(:body) { filter :author, :as => :check_boxes }
|
|
278
|
+
|
|
279
|
+
it "should create a check box for each related object" do
|
|
280
|
+
body.should have_tag("input", :attributes => {
|
|
281
|
+
:name => "q[author_id_in][]",
|
|
282
|
+
:type => "checkbox",
|
|
283
|
+
:value => @john.id })
|
|
284
|
+
body.should have_tag("input", :attributes => {
|
|
285
|
+
:name => "q[author_id_in][]",
|
|
286
|
+
:type => "checkbox",
|
|
287
|
+
:value => @jane.id })
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
context "when polymorphic relationship" do
|
|
292
|
+
it "should raise an error if a collection isn't provided" do
|
|
293
|
+
expect {
|
|
294
|
+
search = ActiveAdmin::Comment.search
|
|
295
|
+
render_filter(search, [{:attribute => :resource}])
|
|
296
|
+
}.to raise_error Formtastic::PolymorphicInputWithoutCollectionError
|
|
297
|
+
end
|
|
298
|
+
end
|
|
299
|
+
end # belongs to
|
|
300
|
+
|
|
301
|
+
describe "has_and_belongs_to_many" do
|
|
302
|
+
pending "add HABTM models so this can be mocked out"
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
describe "conditional display" do
|
|
306
|
+
|
|
307
|
+
context "with :if block" do
|
|
308
|
+
let(:body) do
|
|
309
|
+
filter :body, :if => proc{true}
|
|
310
|
+
filter :author, :if => proc{false}
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
it "should be displayed if true" do
|
|
314
|
+
body.should have_tag("input", :attributes => { :name => "q[body_contains]"})
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
it "should NOT be displayed if false" do
|
|
318
|
+
body.should_not have_tag("input", :attributes => { :name => "q[author_id_eq]"})
|
|
319
|
+
end
|
|
320
|
+
end
|
|
321
|
+
|
|
322
|
+
context "with :unless block" do
|
|
323
|
+
let(:body) do
|
|
324
|
+
filter :created_at, :unless => proc{false}
|
|
325
|
+
filter :updated_at, :unless => proc{true}
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
it "should be displayed if false" do
|
|
329
|
+
body.should have_tag("input", :attributes => { :name => "q[created_at_gteq]"})
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
it "should NOT be displayed if true" do
|
|
333
|
+
body.should_not have_tag("input", :attributes => { :name => "q[updated_at_gteq]"})
|
|
334
|
+
end
|
|
335
|
+
end
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
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.map{|f| f[:attribute].to_s }.sort.should == %w{
|
|
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
|
+
context "filter removal" do
|
|
32
|
+
it "should work" do
|
|
33
|
+
resource.filters.should include :attribute => :author
|
|
34
|
+
resource.remove_filter :author
|
|
35
|
+
resource.filters.should_not include :attribute => :author
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should be lazy" do
|
|
39
|
+
resource.should_not_receive :default_filters # this hits the DB
|
|
40
|
+
resource.remove_filter :author
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "should not prevent the default filters from being added" do
|
|
44
|
+
resource.remove_filter :author
|
|
45
|
+
resource.filters.should_not be_empty
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
context "adding a filter" do
|
|
50
|
+
it "should work" do
|
|
51
|
+
resource.add_filter :title
|
|
52
|
+
resource.filters.should == [{:attribute => :title}]
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it "should work with specified options" do
|
|
56
|
+
resource.add_filter :title, :as => :string
|
|
57
|
+
resource.filters.should == [{:attribute => :title, :as => :string}]
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it "should preserve default filters" do
|
|
61
|
+
resource.preserve_default_filters!
|
|
62
|
+
resource.add_filter :count, :as => :string
|
|
63
|
+
resource.filters.map { |f| f[:attribute].to_s }.sort.should == %w{
|
|
64
|
+
author body category count created_at published_at starred title updated_at
|
|
65
|
+
}
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "should raise an exception when filters are disabled" do
|
|
69
|
+
resource.filters = false
|
|
70
|
+
expect {
|
|
71
|
+
resource.add_filter :title
|
|
72
|
+
}.to raise_error(RuntimeError)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "should reset filters" do
|
|
77
|
+
resource.add_filter :title
|
|
78
|
+
resource.filters.size.should == 1
|
|
79
|
+
resource.reset_filters!
|
|
80
|
+
resource.filters.size.should > 1
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it "should add a sidebar section for the filters" do
|
|
84
|
+
resource.sidebar_sections.first.name.should == :filters
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
end
|