activeadmin 1.1.0 → 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activeadmin might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/CHANGELOG.md +492 -108
- data/CODE_OF_CONDUCT.md +64 -12
- data/CONTRIBUTING.md +117 -49
- data/README.md +73 -19
- data/app/assets/javascripts/active_admin/base.js +509 -0
- data/app/assets/stylesheets/active_admin/_base.scss +29 -29
- data/app/assets/stylesheets/active_admin/_forms.scss +3 -15
- data/app/assets/stylesheets/active_admin/_header.scss +3 -5
- data/app/assets/stylesheets/active_admin/_mixins.scss +1 -1
- data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -5
- data/app/assets/stylesheets/active_admin/components/_tables.scss +1 -2
- data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
- data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -8
- data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
- data/app/assets/stylesheets/active_admin/mixins/_variables.scss +5 -0
- data/app/assets/stylesheets/active_admin/print.scss +2 -2
- data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +1 -1
- data/app/javascript/active_admin/base.js +19 -0
- data/app/javascript/active_admin/ext/jquery-ui.js +7 -0
- data/app/javascript/active_admin/ext/jquery.js +9 -0
- data/app/javascript/active_admin/initializers/batch-actions.js +61 -0
- data/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
- data/app/javascript/active_admin/initializers/datepicker.js +16 -0
- data/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
- data/app/javascript/active_admin/initializers/filters.js +10 -0
- data/app/javascript/active_admin/initializers/has-many.js +95 -0
- data/app/javascript/active_admin/initializers/per-page.js +13 -0
- data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
- data/app/javascript/active_admin/initializers/tabs.js +6 -0
- data/app/javascript/active_admin/lib/checkbox-toggler.js +49 -0
- data/app/javascript/active_admin/lib/dropdown-menu.js +116 -0
- data/app/javascript/active_admin/lib/filters.js +39 -0
- data/app/javascript/active_admin/lib/modal-dialog.js +63 -0
- data/app/javascript/active_admin/lib/per-page.js +38 -0
- data/app/javascript/active_admin/lib/table-checkbox-toggler.js +38 -0
- data/app/javascript/active_admin/lib/utils.js +40 -0
- data/app/views/active_admin/devise/confirmations/new.html.erb +2 -2
- data/app/views/active_admin/devise/passwords/edit.html.erb +2 -2
- data/app/views/active_admin/devise/passwords/new.html.erb +2 -2
- data/app/views/active_admin/devise/registrations/new.html.erb +2 -3
- data/app/views/active_admin/devise/sessions/new.html.erb +1 -1
- data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
- data/app/views/active_admin/devise/unlocks/new.html.erb +2 -2
- data/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
- data/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
- data/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
- data/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
- data/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
- data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +2 -2
- data/config/locales/ar.yml +3 -2
- data/config/locales/az.yml +138 -0
- data/config/locales/bg.yml +1 -1
- data/config/locales/bs.yml +1 -0
- data/config/locales/ca.yml +1 -1
- data/config/locales/cs.yml +1 -0
- data/config/locales/da.yml +1 -0
- data/config/locales/de-CH.yml +1 -0
- data/config/locales/de.yml +29 -0
- data/config/locales/el.yml +1 -0
- data/config/locales/en-CA.yml +1 -0
- data/config/locales/en-GB.yml +1 -0
- data/config/locales/en.yml +21 -1
- data/config/locales/eo.yml +145 -0
- data/config/locales/es-MX.yml +1 -0
- data/config/locales/es.yml +21 -1
- data/config/locales/fa.yml +1 -0
- data/config/locales/fi.yml +2 -1
- data/config/locales/fr.yml +2 -1
- data/config/locales/he.yml +1 -1
- data/config/locales/hr.yml +1 -0
- data/config/locales/hu.yml +5 -0
- data/config/locales/id.yml +1 -0
- data/config/locales/it.yml +13 -3
- data/config/locales/ja.yml +6 -0
- data/config/locales/ko.yml +1 -0
- data/config/locales/lt.yml +3 -2
- data/config/locales/lv.yml +1 -0
- data/config/locales/mk.yml +134 -0
- data/config/locales/nb.yml +16 -5
- data/config/locales/nl.yml +12 -0
- data/config/locales/pl.yml +72 -3
- data/config/locales/pt-BR.yml +9 -0
- data/config/locales/pt-PT.yml +1 -0
- data/config/locales/ro.yml +1 -0
- data/config/locales/ru.yml +3 -0
- data/config/locales/sk.yml +60 -0
- data/config/locales/sv-SE.yml +3 -0
- data/config/locales/tr.yml +10 -0
- data/config/locales/uk.yml +3 -0
- data/config/locales/vi.yml +48 -6
- data/config/locales/zh-CN.yml +34 -5
- data/config/locales/zh-TW.yml +1 -0
- data/docs/.gitignore +1 -0
- data/docs/0-installation.md +2 -2
- data/docs/1-general-configuration.md +36 -1
- data/docs/10-custom-pages.md +14 -0
- data/docs/12-arbre-components.md +41 -1
- data/docs/13-authorization-adapter.md +41 -22
- data/docs/2-resource-customization.md +10 -5
- data/docs/3-index-pages/custom-index.md +1 -1
- data/docs/3-index-pages/index-as-blog.md +1 -1
- data/docs/3-index-pages/index-as-table.md +12 -5
- data/docs/3-index-pages.md +17 -0
- data/docs/5-forms.md +16 -2
- data/docs/8-custom-actions.md +11 -0
- data/docs/CNAME +1 -1
- data/docs/Gemfile +2 -1
- data/docs/Gemfile.lock +249 -0
- data/docs/_config.yml +3 -1
- data/docs/_includes/toc.html +1 -1
- data/docs/_includes/top-menu.html +9 -1
- data/docs/documentation.md +1 -1
- data/docs/images/tidelift.svg +14 -0
- data/docs/index.html +109 -8
- data/docs/stylesheets/main.css +55 -2
- data/lib/active_admin/abstract_view_factory.rb +13 -51
- data/lib/active_admin/application.rb +53 -160
- data/lib/active_admin/application_settings.rb +42 -0
- data/lib/active_admin/asset_registration.rb +0 -8
- data/lib/active_admin/base_controller/authorization.rb +4 -6
- data/lib/active_admin/base_controller.rb +6 -6
- data/lib/active_admin/batch_actions/controller.rb +2 -2
- data/lib/active_admin/batch_actions/resource_extension.rb +9 -5
- data/lib/active_admin/callbacks.rb +1 -1
- data/lib/active_admin/controller_action.rb +2 -1
- data/lib/active_admin/csv_builder.rb +10 -7
- data/lib/active_admin/dependency.rb +3 -67
- data/lib/active_admin/deprecation.rb +0 -25
- data/lib/active_admin/dsl.rb +1 -8
- data/lib/active_admin/dynamic_setting.rb +38 -0
- data/lib/active_admin/dynamic_settings_node.rb +28 -0
- data/lib/active_admin/engine.rb +5 -0
- data/lib/active_admin/error.rb +4 -2
- data/lib/active_admin/filters/active_filter.rb +49 -12
- data/lib/active_admin/filters/active_sidebar.rb +6 -2
- data/lib/active_admin/filters/forms.rb +7 -4
- data/lib/active_admin/filters/formtastic_addons.rb +1 -1
- data/lib/active_admin/filters/resource_extension.rb +28 -4
- data/lib/active_admin/form_builder.rb +98 -63
- data/lib/active_admin/generators/boilerplate.rb +12 -4
- data/lib/active_admin/helpers/scope_chain.rb +1 -0
- data/lib/active_admin/inputs/datepicker_input.rb +8 -1
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +2 -2
- data/lib/active_admin/inputs/filters/date_range_input.rb +4 -4
- data/lib/active_admin/inputs/filters/select_input.rb +5 -1
- data/lib/active_admin/menu.rb +2 -8
- data/lib/active_admin/menu_item.rb +4 -32
- data/lib/active_admin/namespace.rb +20 -8
- data/lib/active_admin/namespace_settings.rb +123 -0
- data/lib/active_admin/order_clause.rb +2 -2
- data/lib/active_admin/orm/active_record/comments/comment.rb +2 -2
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +17 -7
- data/lib/active_admin/orm/active_record/comments.rb +15 -4
- data/lib/active_admin/page_dsl.rb +1 -1
- data/lib/active_admin/page_presenter.rb +2 -1
- data/lib/active_admin/pundit_adapter.rb +18 -5
- data/lib/active_admin/resource/action_items.rb +7 -2
- data/lib/active_admin/resource/attributes.rb +7 -4
- data/lib/active_admin/resource/belongs_to.rb +6 -1
- data/lib/active_admin/resource/menu.rb +3 -3
- data/lib/active_admin/resource/model.rb +15 -0
- data/lib/active_admin/resource/naming.rb +3 -3
- data/lib/active_admin/resource/routes.rb +20 -7
- data/lib/active_admin/resource/scopes.rb +3 -3
- data/lib/active_admin/resource/sidebars.rb +1 -1
- data/lib/active_admin/resource.rb +18 -4
- data/lib/active_admin/resource_collection.rb +2 -2
- data/lib/active_admin/resource_controller/action_builder.rb +10 -0
- data/lib/active_admin/resource_controller/data_access.rb +5 -1
- data/lib/active_admin/resource_controller/decorators.rb +5 -5
- data/lib/active_admin/resource_controller/polymorphic_routes.rb +37 -0
- data/lib/active_admin/resource_controller/resource_class_methods.rb +2 -0
- data/lib/active_admin/resource_controller/scoping.rb +1 -1
- data/lib/active_admin/resource_controller.rb +2 -0
- data/lib/active_admin/resource_dsl.rb +7 -3
- data/lib/active_admin/router.rb +90 -84
- data/lib/active_admin/scope.rb +16 -8
- data/lib/active_admin/settings_node.rb +19 -0
- data/lib/active_admin/sidebar_section.rb +3 -1
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +2 -2
- data/lib/active_admin/view_helpers/display_helper.rb +13 -4
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +1 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +3 -0
- data/lib/active_admin/view_helpers.rb +1 -1
- data/lib/active_admin/views/components/active_admin_form.rb +9 -4
- data/lib/active_admin/views/components/attributes_table.rb +3 -3
- data/lib/active_admin/views/components/menu.rb +32 -0
- data/lib/active_admin/views/components/menu_item.rb +58 -0
- data/lib/active_admin/views/components/paginated_collection.rb +4 -3
- data/lib/active_admin/views/components/scopes.rb +11 -4
- data/lib/active_admin/views/components/sidebar.rb +13 -0
- data/lib/active_admin/views/components/site_title.rb +5 -6
- data/lib/active_admin/views/components/status_tag.rb +6 -19
- data/lib/active_admin/views/components/table_for.rb +4 -12
- data/lib/active_admin/views/components/tabs.rb +15 -3
- data/lib/active_admin/views/footer.rb +3 -7
- data/lib/active_admin/views/header.rb +3 -15
- data/lib/active_admin/views/index_as_blog.rb +1 -1
- data/lib/active_admin/views/index_as_grid.rb +25 -25
- data/lib/active_admin/views/index_as_table.rb +18 -10
- data/lib/active_admin/views/pages/base.rb +31 -54
- data/lib/active_admin/views/pages/index.rb +1 -0
- data/lib/active_admin/views/tabbed_navigation.rb +4 -59
- data/lib/active_admin/views.rb +1 -1
- data/lib/active_admin.rb +9 -4
- data/lib/generators/active_admin/assets/assets_generator.rb +2 -2
- data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
- data/lib/generators/active_admin/install/install_generator.rb +7 -3
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +38 -3
- data/lib/generators/active_admin/install/templates/dashboard.rb +2 -3
- data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +1 -15
- data/lib/generators/active_admin/page/page_generator.rb +1 -1
- data/lib/generators/active_admin/resource/resource_generator.rb +2 -2
- data/lib/generators/active_admin/resource/templates/admin.rb.erb +40 -37
- data/lib/ransack_ext.rb +3 -3
- data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
- data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
- data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +274 -283
- metadata +115 -527
- data/.github/ISSUE_TEMPLATE.md +0 -20
- data/.gitignore +0 -49
- data/.mdlrc +0 -1
- data/.rubocop.yml +0 -76
- data/.simplecov +0 -13
- data/.travis.yml +0 -51
- data/.yardopts +0 -7
- data/Gemfile +0 -58
- data/Rakefile +0 -54
- data/activeadmin.gemspec +0 -32
- 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/base.js.coffee +0 -13
- data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
- data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
- data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +0 -11
- data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -14
- data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -26
- data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -7
- data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -42
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -46
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -104
- data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
- data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
- data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -45
- data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -46
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -22
- data/codecov.yml +0 -25
- data/config/i18n-tasks.yml +0 -26
- data/config/mdl_style.rb +0 -9
- data/cucumber.yml +0 -3
- data/features/action_item.feature +0 -73
- data/features/authorization.feature +0 -64
- data/features/authorization_cancan.feature +0 -52
- data/features/authorization_pundit.feature +0 -37
- data/features/belongs_to.feature +0 -124
- data/features/breadcrumb.feature +0 -75
- data/features/comments/commenting.feature +0 -178
- data/features/comments/viewing_index.feature +0 -19
- data/features/create_another.feature +0 -55
- data/features/dashboard.feature +0 -16
- data/features/decorators.feature +0 -43
- data/features/development_reloading.feature +0 -28
- data/features/edit_page.feature +0 -116
- data/features/favicon.feature +0 -20
- data/features/first_boot.feature +0 -16
- data/features/footer.feature +0 -28
- data/features/global_navigation.feature +0 -29
- data/features/i18n.feature +0 -55
- data/features/index/batch_actions.feature +0 -218
- data/features/index/filters.feature +0 -239
- data/features/index/format_as_csv.feature +0 -220
- data/features/index/formats.feature +0 -88
- data/features/index/index_as_block.feature +0 -15
- data/features/index/index_as_blog.feature +0 -69
- data/features/index/index_as_grid.feature +0 -45
- data/features/index/index_as_table.feature +0 -291
- data/features/index/index_blank_slate.feature +0 -83
- data/features/index/index_parameters.feature +0 -75
- data/features/index/index_scope_to.feature +0 -56
- data/features/index/index_scopes.feature +0 -285
- data/features/index/page_title.feature +0 -41
- data/features/index/pagination.feature +0 -63
- data/features/index/switch_index_view.feature +0 -73
- data/features/menu.feature +0 -72
- data/features/meta_tags.feature +0 -21
- data/features/new_page.feature +0 -107
- data/features/registering_assets.feature +0 -38
- data/features/registering_pages.feature +0 -237
- data/features/registering_resources.feature +0 -33
- data/features/renamed_resource.feature +0 -30
- data/features/root_to.feature +0 -17
- data/features/show/attributes_table_title.feature +0 -54
- data/features/show/columns.feature +0 -40
- data/features/show/default_content.feature +0 -44
- data/features/show/page_title.feature +0 -58
- data/features/show/tabs.feature +0 -33
- data/features/sidebar_sections.feature +0 -210
- data/features/site_title.feature +0 -47
- data/features/specifying_actions.feature +0 -118
- data/features/step_definitions/action_item_steps.rb +0 -7
- data/features/step_definitions/action_link_steps.rb +0 -19
- data/features/step_definitions/additional_web_steps.rb +0 -81
- data/features/step_definitions/asset_steps.rb +0 -15
- data/features/step_definitions/attribute_steps.rb +0 -18
- data/features/step_definitions/attributes_table_title_steps.rb +0 -11
- data/features/step_definitions/batch_action_steps.rb +0 -81
- data/features/step_definitions/blog_steps.rb +0 -3
- data/features/step_definitions/breadcrumb_steps.rb +0 -3
- data/features/step_definitions/column_steps.rb +0 -8
- data/features/step_definitions/comment_steps.rb +0 -32
- data/features/step_definitions/configuration_steps.rb +0 -100
- data/features/step_definitions/dashboard_steps.rb +0 -15
- data/features/step_definitions/factory_steps.rb +0 -35
- data/features/step_definitions/filter_steps.rb +0 -48
- data/features/step_definitions/flash_steps.rb +0 -11
- data/features/step_definitions/footer_steps.rb +0 -11
- data/features/step_definitions/format_steps.rb +0 -56
- data/features/step_definitions/i18n_steps.rb +0 -11
- data/features/step_definitions/index_scope_steps.rb +0 -29
- data/features/step_definitions/index_views_steps.rb +0 -3
- data/features/step_definitions/layout_steps.rb +0 -3
- data/features/step_definitions/member_link_steps.rb +0 -7
- data/features/step_definitions/menu_steps.rb +0 -11
- data/features/step_definitions/meta_tag_steps.rb +0 -3
- data/features/step_definitions/pagination_steps.rb +0 -15
- data/features/step_definitions/sidebar_steps.rb +0 -11
- data/features/step_definitions/site_title_steps.rb +0 -17
- data/features/step_definitions/tab_steps.rb +0 -8
- data/features/step_definitions/table_steps.rb +0 -116
- data/features/step_definitions/user_steps.rb +0 -52
- data/features/step_definitions/web_steps.rb +0 -86
- data/features/sti_resource.feature +0 -65
- data/features/strong_parameters.feature +0 -69
- data/features/support/env.rb +0 -122
- data/features/support/paths.rb +0 -73
- data/features/support/regular_env.rb +0 -7
- data/features/support/reload_env.rb +0 -7
- data/features/support/selectors.rb +0 -45
- data/features/users/logging_in.feature +0 -36
- data/features/users/logging_out.feature +0 -13
- data/features/users/resetting_password.feature +0 -34
- data/gemfiles/rails_42.gemfile +0 -10
- data/gemfiles/rails_50.gemfile +0 -10
- data/gemfiles/rails_51.gemfile +0 -10
- data/lib/active_admin/event.rb +0 -24
- data/lib/active_admin/helpers/settings.rb +0 -114
- data/lib/active_admin/reloader.rb +0 -25
- data/lib/bug_report_templates/active_admin_master.rb +0 -113
- data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
- data/spec/bug_report_templates_spec.rb +0 -26
- data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +0 -50
- data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +0 -25
- data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +0 -34
- data/spec/javascripts/fixtures/checkboxes.html +0 -9
- data/spec/javascripts/fixtures/flashes.html +0 -2
- data/spec/javascripts/fixtures/table_checkboxes.html +0 -17
- data/spec/javascripts/helpers/SpecHelper.js +0 -3
- data/spec/javascripts/support/jasmine.yml +0 -74
- data/spec/javascripts/support/jasmine_runner.rb +0 -19
- data/spec/rails_helper.rb +0 -59
- data/spec/requests/default_namespace_spec.rb +0 -81
- data/spec/requests/memory_spec.rb +0 -25
- data/spec/requests/stylesheets_spec.rb +0 -18
- data/spec/spec_helper.rb +0 -1
- data/spec/support/active_admin_integration_spec_helper.rb +0 -73
- data/spec/support/active_admin_request_helpers.rb +0 -39
- data/spec/support/rails_template.rb +0 -150
- data/spec/support/rails_template_with_data.rb +0 -327
- data/spec/support/templates/admin/stores.rb +0 -7
- data/spec/support/templates/en.yml +0 -8
- data/spec/support/templates/manifest.js +0 -3
- data/spec/support/templates/policies/active_admin/comment_policy.rb +0 -9
- data/spec/support/templates/policies/active_admin/page_policy.rb +0 -18
- data/spec/support/templates/policies/admin_user_policy.rb +0 -11
- data/spec/support/templates/policies/application_policy.rb +0 -44
- data/spec/support/templates/policies/category_policy.rb +0 -7
- data/spec/support/templates/policies/post_policy.rb +0 -15
- data/spec/support/templates/policies/store_policy.rb +0 -11
- data/spec/support/templates/policies/user_policy.rb +0 -11
- data/spec/support/templates/post_decorator.rb +0 -10
- data/spec/unit/abstract_view_factory_spec.rb +0 -78
- data/spec/unit/action_builder_spec.rb +0 -125
- data/spec/unit/active_admin_spec.rb +0 -11
- data/spec/unit/application_spec.rb +0 -184
- data/spec/unit/asset_registration_spec.rb +0 -81
- data/spec/unit/authorization/authorization_adapter_spec.rb +0 -61
- data/spec/unit/authorization/controller_authorization_spec.rb +0 -43
- data/spec/unit/authorization/index_overriding_spec.rb +0 -23
- data/spec/unit/auto_link_spec.rb +0 -93
- data/spec/unit/batch_actions/resource_spec.rb +0 -84
- data/spec/unit/batch_actions/settings_spec.rb +0 -61
- data/spec/unit/belongs_to_spec.rb +0 -76
- data/spec/unit/cancan_adapter_spec.rb +0 -43
- data/spec/unit/comments_spec.rb +0 -176
- data/spec/unit/component_spec.rb +0 -18
- data/spec/unit/config_shared_examples.rb +0 -59
- data/spec/unit/controller_filters_spec.rb +0 -41
- data/spec/unit/csv_builder_spec.rb +0 -304
- data/spec/unit/dependency_spec.rb +0 -135
- data/spec/unit/devise_spec.rb +0 -110
- data/spec/unit/dsl_spec.rb +0 -120
- data/spec/unit/filters/active_filter_spec.rb +0 -135
- data/spec/unit/filters/active_spec.rb +0 -24
- data/spec/unit/filters/filter_form_builder_spec.rb +0 -502
- data/spec/unit/filters/resource_spec.rb +0 -128
- data/spec/unit/form_builder_spec.rb +0 -990
- data/spec/unit/generators/install_spec.rb +0 -31
- data/spec/unit/helpers/collection_spec.rb +0 -68
- data/spec/unit/helpers/scope_chain_spec.rb +0 -35
- data/spec/unit/helpers/settings_spec.rb +0 -30
- data/spec/unit/i18n_spec.rb +0 -29
- data/spec/unit/localizers/resource_localizer_spec.rb +0 -36
- data/spec/unit/menu_collection_spec.rb +0 -62
- data/spec/unit/menu_item_spec.rb +0 -141
- data/spec/unit/menu_spec.rb +0 -71
- data/spec/unit/namespace/authorization_spec.rb +0 -27
- data/spec/unit/namespace/register_page_spec.rb +0 -99
- data/spec/unit/namespace/register_resource_spec.rb +0 -162
- data/spec/unit/namespace_spec.rb +0 -124
- data/spec/unit/order_clause_spec.rb +0 -81
- data/spec/unit/page_controller_spec.rb +0 -5
- data/spec/unit/page_spec.rb +0 -128
- data/spec/unit/pretty_format_spec.rb +0 -82
- data/spec/unit/pundit_adapter_spec.rb +0 -98
- data/spec/unit/resource/action_items_spec.rb +0 -69
- data/spec/unit/resource/attributes_spec.rb +0 -49
- data/spec/unit/resource/includes_spec.rb +0 -21
- data/spec/unit/resource/menu_spec.rb +0 -18
- data/spec/unit/resource/naming_spec.rb +0 -122
- data/spec/unit/resource/ordering_spec.rb +0 -35
- data/spec/unit/resource/page_presenters_spec.rb +0 -44
- data/spec/unit/resource/pagination_spec.rb +0 -38
- data/spec/unit/resource/routes_spec.rb +0 -125
- data/spec/unit/resource/scopes_spec.rb +0 -50
- data/spec/unit/resource/sidebars_spec.rb +0 -43
- data/spec/unit/resource_collection_spec.rb +0 -175
- data/spec/unit/resource_controller/data_access_spec.rb +0 -230
- data/spec/unit/resource_controller/decorators_spec.rb +0 -94
- data/spec/unit/resource_controller/sidebars_spec.rb +0 -37
- data/spec/unit/resource_controller_spec.rb +0 -273
- data/spec/unit/resource_registration_spec.rb +0 -61
- data/spec/unit/resource_spec.rb +0 -320
- data/spec/unit/routing_spec.rb +0 -211
- data/spec/unit/scope_spec.rb +0 -209
- data/spec/unit/settings_spec.rb +0 -117
- data/spec/unit/view_factory_spec.rb +0 -19
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +0 -252
- data/spec/unit/view_helpers/display_helper_spec.rb +0 -195
- data/spec/unit/view_helpers/download_format_links_helper_spec.rb +0 -39
- data/spec/unit/view_helpers/fields_for_spec.rb +0 -50
- data/spec/unit/view_helpers/flash_helper_spec.rb +0 -24
- data/spec/unit/view_helpers/form_helper_spec.rb +0 -42
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -138
- data/spec/unit/views/components/attributes_table_spec.rb +0 -271
- data/spec/unit/views/components/batch_action_selector_spec.rb +0 -43
- data/spec/unit/views/components/blank_slate_spec.rb +0 -27
- data/spec/unit/views/components/columns_spec.rb +0 -187
- data/spec/unit/views/components/index_list_spec.rb +0 -49
- data/spec/unit/views/components/index_table_for_spec.rb +0 -127
- data/spec/unit/views/components/paginated_collection_spec.rb +0 -249
- data/spec/unit/views/components/panel_spec.rb +0 -58
- data/spec/unit/views/components/sidebar_section_spec.rb +0 -68
- data/spec/unit/views/components/site_title_spec.rb +0 -76
- data/spec/unit/views/components/status_tag_spec.rb +0 -265
- data/spec/unit/views/components/table_for_spec.rb +0 -436
- data/spec/unit/views/components/tabs_spec.rb +0 -67
- data/spec/unit/views/components/unsupported_browser_spec.rb +0 -41
- data/spec/unit/views/index_as_blog_spec.rb +0 -76
- data/spec/unit/views/pages/form_spec.rb +0 -54
- data/spec/unit/views/pages/index_spec.rb +0 -60
- data/spec/unit/views/pages/layout_spec.rb +0 -59
- data/spec/unit/views/pages/show_spec.rb +0 -32
- data/spec/unit/views/tabbed_navigation_spec.rb +0 -158
- data/tasks/docs.rake +0 -64
- data/tasks/lint.rake +0 -21
- data/tasks/local.rake +0 -25
- data/tasks/parallel_tests.rake +0 -66
- data/tasks/test.rake +0 -29
- /data/{vendor → app}/assets/stylesheets/active_admin/_normalize.scss +0 -0
- /data/lib/generators/active_admin/install/templates/{admin_user.rb.erb → admin_users.rb.erb} +0 -0
@@ -1,135 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
|
3
|
-
RSpec.describe ActiveAdmin::Filters::ActiveFilter do
|
4
|
-
|
5
|
-
let(:namespace) do
|
6
|
-
ActiveAdmin::Namespace.new(ActiveAdmin::Application.new, :admin)
|
7
|
-
end
|
8
|
-
|
9
|
-
let(:resource) do
|
10
|
-
namespace.register(Post)
|
11
|
-
end
|
12
|
-
|
13
|
-
let(:user){ User.create! first_name: "John", last_name: "Doe" }
|
14
|
-
let(:category){ Category.create! name: "Category" }
|
15
|
-
let(:post){ Post.create! title: "Hello World", category: category, author: user }
|
16
|
-
|
17
|
-
let(:search) do
|
18
|
-
Post.ransack(title_equals: post.title)
|
19
|
-
end
|
20
|
-
|
21
|
-
let(:condition) do
|
22
|
-
search.conditions[0]
|
23
|
-
end
|
24
|
-
|
25
|
-
subject do
|
26
|
-
ActiveAdmin::Filters::ActiveFilter.new(resource, condition)
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'should have valid values' do
|
30
|
-
expect(subject.values).to eq([post.title])
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'should have valid label' do
|
34
|
-
expect(subject.label).to eq("Title equals")
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'should pick predicate name translation' do
|
38
|
-
expect(subject.predicate_name).to eq(I18n.t("active_admin.filters.predicates.equals"))
|
39
|
-
end
|
40
|
-
|
41
|
-
context 'search by belongs_to association' do
|
42
|
-
let(:search) do
|
43
|
-
Post.ransack(custom_category_id_eq: category.id)
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'should have valid values' do
|
47
|
-
expect(subject.values[0]).to be_a(Category)
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'should have valid label' do
|
51
|
-
expect(subject.label).to eq("Category equals")
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'should pick predicate name translation' do
|
55
|
-
expect(subject.predicate_name).to eq(Ransack::Translate.predicate('eq'))
|
56
|
-
end
|
57
|
-
|
58
|
-
end
|
59
|
-
|
60
|
-
context 'search by polymorphic association' do
|
61
|
-
let(:resource) do
|
62
|
-
namespace.register(ActiveAdmin::Comment)
|
63
|
-
end
|
64
|
-
|
65
|
-
let(:search) do
|
66
|
-
ActiveAdmin::Comment.ransack(resource_id_eq: post.id, resource_type_eq: post.class.to_s)
|
67
|
-
end
|
68
|
-
|
69
|
-
context 'id filter' do
|
70
|
-
let(:condition) do
|
71
|
-
search.conditions[0]
|
72
|
-
end
|
73
|
-
it 'should have valid values' do
|
74
|
-
expect(subject.values[0]).to eq(post.id)
|
75
|
-
end
|
76
|
-
|
77
|
-
it 'should have valid label' do
|
78
|
-
expect(subject.label).to eq("Resource equals")
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
context 'type filter' do
|
83
|
-
let(:condition) do
|
84
|
-
search.conditions[1]
|
85
|
-
end
|
86
|
-
|
87
|
-
it 'should have valid values' do
|
88
|
-
expect(subject.values[0]).to eq(post.class.to_s)
|
89
|
-
end
|
90
|
-
|
91
|
-
it 'should have valid label' do
|
92
|
-
expect(subject.label).to eq("Resource type equals")
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
context 'search by has many association' do
|
98
|
-
let(:resource) do
|
99
|
-
namespace.register(Category)
|
100
|
-
end
|
101
|
-
|
102
|
-
let(:search) do
|
103
|
-
Category.ransack(posts_id_eq: post.id)
|
104
|
-
end
|
105
|
-
|
106
|
-
it 'should have valid values' do
|
107
|
-
expect(subject.values[0]).to be_a(Post)
|
108
|
-
end
|
109
|
-
|
110
|
-
it 'should have valid label' do
|
111
|
-
expect(subject.label).to eq("Post equals")
|
112
|
-
end
|
113
|
-
|
114
|
-
context 'search by has many through association' do
|
115
|
-
let(:resource) do
|
116
|
-
namespace.register(User)
|
117
|
-
end
|
118
|
-
|
119
|
-
let(:search) do
|
120
|
-
User.ransack(posts_category_id_eq: category.id)
|
121
|
-
end
|
122
|
-
|
123
|
-
it 'should have valid values' do
|
124
|
-
expect(subject.values[0]).to be_a(Category)
|
125
|
-
end
|
126
|
-
|
127
|
-
it 'should have valid label' do
|
128
|
-
expect(subject.label).to eq("Category equals")
|
129
|
-
end
|
130
|
-
|
131
|
-
end
|
132
|
-
|
133
|
-
end
|
134
|
-
|
135
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
|
3
|
-
RSpec.describe ActiveAdmin::Filters::Active do
|
4
|
-
|
5
|
-
let(:resource) do
|
6
|
-
namespace = ActiveAdmin::Namespace.new(ActiveAdmin::Application.new, :admin)
|
7
|
-
namespace.register(Post)
|
8
|
-
end
|
9
|
-
|
10
|
-
subject { described_class.new(resource, search) }
|
11
|
-
|
12
|
-
let(:params) do
|
13
|
-
::ActionController::Parameters.new(q: {author_id_eq: 1})
|
14
|
-
end
|
15
|
-
|
16
|
-
let(:search) do
|
17
|
-
Post.ransack(params[:q])
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'should have filters' do
|
21
|
-
expect(subject.filters.size).to eq(1)
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
@@ -1,502 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
|
3
|
-
RSpec.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.to_s
|
28
|
-
end
|
29
|
-
|
30
|
-
def filter(name, options = {})
|
31
|
-
render_filter scope, name => options
|
32
|
-
end
|
33
|
-
|
34
|
-
let(:scope) { Post.search }
|
35
|
-
|
36
|
-
describe "the form in general" do
|
37
|
-
let(:body) { Capybara.string(filter :title) }
|
38
|
-
|
39
|
-
it "should generate a form which submits via get" do
|
40
|
-
expect(body).to have_selector("form.filter_form[method=get]")
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should generate a filter button" do
|
44
|
-
expect(body).to have_selector("input[type=submit][value=Filter]")
|
45
|
-
end
|
46
|
-
|
47
|
-
it "should only generate the form once" do
|
48
|
-
expect(body).to have_selector("form", count: 1)
|
49
|
-
end
|
50
|
-
|
51
|
-
it "should generate a clear filters link" do
|
52
|
-
expect(body).to have_selector("a.clear_filters_btn", text: "Clear Filters")
|
53
|
-
end
|
54
|
-
|
55
|
-
describe "label as proc" do
|
56
|
-
let(:body) { Capybara.string(filter :title, label: proc { 'Title from proc' }) }
|
57
|
-
|
58
|
-
it "should render proper label" do
|
59
|
-
expect(body).to have_selector("label", text: "Title from proc")
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
describe "input html as proc" do
|
64
|
-
let(:body) { Capybara.string(filter :title, as: :select, input_html: proc{ {'data-ajax-url': '/'} }) }
|
65
|
-
|
66
|
-
it "should render proper label" do
|
67
|
-
expect(body).to have_selector('select[data-ajax-url="/"]')
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
describe "string attribute" do
|
73
|
-
let(:body) { Capybara.string(filter :title) }
|
74
|
-
|
75
|
-
it "should generate a select option for starts with" do
|
76
|
-
expect(body).to have_selector("option[value=title_starts_with]", text: "Starts with")
|
77
|
-
end
|
78
|
-
|
79
|
-
it "should generate a select option for ends with" do
|
80
|
-
expect(body).to have_selector("option[value=title_ends_with]", text: "Ends with")
|
81
|
-
end
|
82
|
-
|
83
|
-
it "should generate a select option for contains" do
|
84
|
-
expect(body).to have_selector("option[value=title_contains]", text: "Contains")
|
85
|
-
end
|
86
|
-
|
87
|
-
it "should generate a text field for input" do
|
88
|
-
expect(body).to have_selector("input[name='q[title_contains]']")
|
89
|
-
end
|
90
|
-
|
91
|
-
it "should have a proper label" do
|
92
|
-
expect(body).to have_selector("label", text: "Title")
|
93
|
-
end
|
94
|
-
|
95
|
-
it "should translate the label for text field" do
|
96
|
-
with_translation activerecord: {attributes: {post: {title: 'Name'}}} do
|
97
|
-
expect(body).to have_selector("label", text: "Name")
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
it "should select the option which is currently being filtered" do
|
102
|
-
scope = Post.search title_starts_with: "foo"
|
103
|
-
body = Capybara.string(render_filter scope, title: {})
|
104
|
-
expect(body).to have_selector("option[value=title_starts_with][selected=selected]", text: "Starts with")
|
105
|
-
end
|
106
|
-
|
107
|
-
context "with filters options" do
|
108
|
-
let(:body) { Capybara.string(filter :title, filters: [:contains, :starts_with]) }
|
109
|
-
|
110
|
-
it "should generate provided options for filter select" do
|
111
|
-
expect(body).to have_selector("option[value=title_contains]", text: "Contains")
|
112
|
-
expect(body).to have_selector("option[value=title_starts_with]", text: "Starts with")
|
113
|
-
end
|
114
|
-
|
115
|
-
it "should not generate a select option for ends with" do
|
116
|
-
expect(body).not_to have_selector("option[value=title_ends_with]")
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
context "with predicate" do
|
121
|
-
%w[eq equals cont contains start starts_with end ends_with].each do |predicate|
|
122
|
-
describe "'#{predicate}'" do
|
123
|
-
let(:body) { Capybara.string(filter :"title_#{predicate}") }
|
124
|
-
|
125
|
-
it "shouldn't include a select field" do
|
126
|
-
expect(body).not_to have_selector("select")
|
127
|
-
end
|
128
|
-
|
129
|
-
it "should build correctly" do
|
130
|
-
expect(body).to have_selector("input[name='q[title_#{predicate}]']")
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
describe "text attribute" do
|
138
|
-
let(:body) { Capybara.string(filter :body) }
|
139
|
-
|
140
|
-
it "should generate a search field for a text attribute" do
|
141
|
-
expect(body).to have_selector("input[name='q[body_contains]']")
|
142
|
-
end
|
143
|
-
|
144
|
-
it "should have a proper label" do
|
145
|
-
expect(body).to have_selector("label", text: "Body")
|
146
|
-
end
|
147
|
-
end
|
148
|
-
|
149
|
-
describe "string attribute, as a select" do
|
150
|
-
let(:body) { filter :title, as: :select }
|
151
|
-
let(:builder) { ActiveAdmin::Inputs::Filters::SelectInput }
|
152
|
-
|
153
|
-
context "when loading collection from DB" do
|
154
|
-
it "should use pluck for efficiency" do
|
155
|
-
expect_any_instance_of(builder).to receive(:pluck_column) { [] }
|
156
|
-
body
|
157
|
-
end
|
158
|
-
|
159
|
-
it "should remove original ordering to prevent PostgreSQL error" do
|
160
|
-
expect(scope.object.klass).to receive(:reorder).with('title asc') {
|
161
|
-
m = double distinct: double(pluck: ['A Title'])
|
162
|
-
expect(m.distinct).to receive(:pluck).with :title
|
163
|
-
m
|
164
|
-
}
|
165
|
-
body
|
166
|
-
end
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
describe "date attribute" do
|
171
|
-
let(:body) { Capybara.string(filter :published_date) }
|
172
|
-
|
173
|
-
it "should generate a date greater than" do
|
174
|
-
expect(body).to have_selector("input.datepicker[name='q[published_date_gteq]']")
|
175
|
-
end
|
176
|
-
it "should generate a date less than" do
|
177
|
-
expect(body).to have_selector("input.datepicker[name='q[published_date_lteq]']")
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
describe "datetime attribute" do
|
182
|
-
let(:body) { Capybara.string(filter :created_at) }
|
183
|
-
|
184
|
-
it "should generate a date greater than" do
|
185
|
-
expect(body).to have_selector("input.datepicker[name='q[created_at_gteq_datetime]']")
|
186
|
-
end
|
187
|
-
it "should generate a date less than" do
|
188
|
-
expect(body).to have_selector("input.datepicker[name='q[created_at_lteq_datetime]']")
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
describe "integer attribute" do
|
193
|
-
context "without options" do
|
194
|
-
let(:body) { Capybara.string(filter :id) }
|
195
|
-
|
196
|
-
it "should generate a select option for equal to" do
|
197
|
-
expect(body).to have_selector("option[value=id_equals]", text: "Equals")
|
198
|
-
end
|
199
|
-
it "should generate a select option for greater than" do
|
200
|
-
expect(body).to have_selector("option[value=id_greater_than]", text: "Greater than")
|
201
|
-
end
|
202
|
-
it "should generate a select option for less than" do
|
203
|
-
expect(body).to have_selector("option[value=id_less_than]", text: "Less than")
|
204
|
-
end
|
205
|
-
it "should generate a text field for input" do
|
206
|
-
expect(body).to have_selector("input[name='q[id_equals]']")
|
207
|
-
end
|
208
|
-
it "should select the option which is currently being filtered" do
|
209
|
-
scope = Post.search id_greater_than: 1
|
210
|
-
body = Capybara.string(render_filter scope, id: {})
|
211
|
-
expect(body).to have_selector("option[value=id_greater_than][selected=selected]", text: "Greater than")
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
|
-
context "with filters options" do
|
216
|
-
let(:body) { Capybara.string(filter :id, filters: [:equals, :greater_than]) }
|
217
|
-
|
218
|
-
it "should generate provided options for filter select" do
|
219
|
-
expect(body).to have_selector("option[value=id_equals]", text: "Equals")
|
220
|
-
expect(body).to have_selector("option[value=id_greater_than]", text: "Greater than")
|
221
|
-
end
|
222
|
-
|
223
|
-
it "should not generate a select option for less than" do
|
224
|
-
expect(body).not_to have_selector("option[value=id_less_than]")
|
225
|
-
end
|
226
|
-
end
|
227
|
-
end
|
228
|
-
|
229
|
-
describe "boolean attribute" do
|
230
|
-
context "boolean datatypes" do
|
231
|
-
let(:body) { Capybara.string(filter :starred) }
|
232
|
-
|
233
|
-
it "should generate a select" do
|
234
|
-
expect(body).to have_selector("select[name='q[starred_eq]']")
|
235
|
-
end
|
236
|
-
it "should set the default text to 'Any'" do
|
237
|
-
expect(body).to have_selector("option[value='']", text: "Any")
|
238
|
-
end
|
239
|
-
it "should create an option for true and false" do
|
240
|
-
expect(body).to have_selector("option[value=true]", text: "Yes")
|
241
|
-
expect(body).to have_selector("option[value=false]", text: "No")
|
242
|
-
end
|
243
|
-
|
244
|
-
it "should translate the label for boolean field" do
|
245
|
-
with_translation activerecord: {attributes: {post: {starred: 'Faved'}}} do
|
246
|
-
expect(body).to have_selector("label", text: "Faved")
|
247
|
-
end
|
248
|
-
end
|
249
|
-
end
|
250
|
-
|
251
|
-
context "non-boolean data types" do
|
252
|
-
let(:body) { Capybara.string(filter :title_present, as: :boolean) }
|
253
|
-
|
254
|
-
it "should generate a select" do
|
255
|
-
expect(body).to have_selector("select[name='q[title_present]']")
|
256
|
-
end
|
257
|
-
it "should set the default text to 'Any'" do
|
258
|
-
expect(body).to have_selector("option[value='']", text: "Any")
|
259
|
-
end
|
260
|
-
it "should create an option for true and false" do
|
261
|
-
expect(body).to have_selector("option[value=true]", text: "Yes")
|
262
|
-
expect(body).to have_selector("option[value=false]", text: "No")
|
263
|
-
end
|
264
|
-
end
|
265
|
-
end
|
266
|
-
|
267
|
-
describe "belongs_to" do
|
268
|
-
before do
|
269
|
-
@john = User.create first_name: "John", last_name: "Doe", username: "john_doe"
|
270
|
-
@jane = User.create first_name: "Jane", last_name: "Doe", username: "jane_doe"
|
271
|
-
end
|
272
|
-
|
273
|
-
context "when given as the _id attribute name" do
|
274
|
-
let(:body) { Capybara.string(filter :author_id) }
|
275
|
-
|
276
|
-
it "should generate a numeric filter" do
|
277
|
-
expect(body).to have_selector("label", text: "Author") # really this should be Author ID :/)
|
278
|
-
expect(body).to have_selector("option[value=author_id_less_than]")
|
279
|
-
expect(body).to have_selector("input#q_author_id[name='q[author_id_equals]']")
|
280
|
-
end
|
281
|
-
end
|
282
|
-
|
283
|
-
context "when given as the name of the relationship" do
|
284
|
-
let(:body) { Capybara.string(filter :author) }
|
285
|
-
|
286
|
-
it "should generate a select" do
|
287
|
-
expect(body).to have_selector("select[name='q[author_id_eq]']")
|
288
|
-
end
|
289
|
-
it "should set the default text to 'Any'" do
|
290
|
-
expect(body).to have_selector("option[value='']", text: "Any")
|
291
|
-
end
|
292
|
-
it "should create an option for each related object" do
|
293
|
-
expect(body).to have_selector("option[value='#{@john.id}']", text: "John Doe")
|
294
|
-
expect(body).to have_selector("option[value='#{@jane.id}']", text: "Jane Doe")
|
295
|
-
end
|
296
|
-
|
297
|
-
context "with a proc" do
|
298
|
-
let :body do
|
299
|
-
Capybara.string(filter :title, as: :select, collection: proc{ ['Title One', 'Title Two'] })
|
300
|
-
end
|
301
|
-
|
302
|
-
it "should use call the proc as the collection" do
|
303
|
-
expect(body).to have_selector("option", text: "Title One")
|
304
|
-
expect(body).to have_selector("option", text: "Title Two")
|
305
|
-
end
|
306
|
-
|
307
|
-
it "should render the collection in the context of the view" do
|
308
|
-
body = Capybara.string(filter(:title, as: :select, collection: proc{[a_helper_method]}))
|
309
|
-
expect(body).to have_selector("option", text: "A Helper Method")
|
310
|
-
end
|
311
|
-
end
|
312
|
-
end
|
313
|
-
|
314
|
-
context "as check boxes" do
|
315
|
-
let(:body) { Capybara.string(filter :author, as: :check_boxes) }
|
316
|
-
|
317
|
-
it "should create a check box for each related object" do
|
318
|
-
expect(body).to have_selector("input[type=checkbox][name='q[author_id_in][]'][value='#{@jane.id}']")
|
319
|
-
expect(body).to have_selector("input[type=checkbox][name='q[author_id_in][]'][value='#{@jane.id}']")
|
320
|
-
end
|
321
|
-
end
|
322
|
-
|
323
|
-
context "when polymorphic relationship" do
|
324
|
-
let(:scope) { ActiveAdmin::Comment.search }
|
325
|
-
it "should raise an error if a collection isn't provided" do
|
326
|
-
expect { filter :resource }.to raise_error \
|
327
|
-
Formtastic::PolymorphicInputWithoutCollectionError
|
328
|
-
end
|
329
|
-
end
|
330
|
-
|
331
|
-
context "when using a custom foreign key" do
|
332
|
-
let(:scope) { Post.search }
|
333
|
-
let(:body) { Capybara.string(filter :category) }
|
334
|
-
it "should ignore that foreign key and let Ransack handle it" do
|
335
|
-
expect(Post.reflect_on_association(:category).foreign_key).to eq :custom_category_id
|
336
|
-
expect(body).to have_selector("select[name='q[category_id_eq]']")
|
337
|
-
end
|
338
|
-
end
|
339
|
-
end # belongs to
|
340
|
-
|
341
|
-
describe "has_and_belongs_to_many" do
|
342
|
-
skip "add HABTM models so this can be tested"
|
343
|
-
end
|
344
|
-
|
345
|
-
describe "has_many :through" do
|
346
|
-
# Setup an ActionView::Base object which can be used for
|
347
|
-
# generating the form for.
|
348
|
-
let(:helpers) do
|
349
|
-
view = action_view
|
350
|
-
def view.collection_path
|
351
|
-
"/categories"
|
352
|
-
end
|
353
|
-
|
354
|
-
def view.protect_against_forgery?
|
355
|
-
false
|
356
|
-
end
|
357
|
-
|
358
|
-
def view.a_helper_method
|
359
|
-
"A Helper Method"
|
360
|
-
end
|
361
|
-
|
362
|
-
view
|
363
|
-
end
|
364
|
-
let(:scope) { Category.search }
|
365
|
-
|
366
|
-
let!(:john) { User.create first_name: "John", last_name: "Doe", username: "john_doe" }
|
367
|
-
let!(:jane) { User.create first_name: "Jane", last_name: "Doe", username: "jane_doe" }
|
368
|
-
|
369
|
-
context "when given as the name of the relationship" do
|
370
|
-
let(:body) { Capybara.string(filter :authors) }
|
371
|
-
|
372
|
-
it "should generate a select" do
|
373
|
-
expect(body).to have_selector("select[name='q[posts_author_id_eq]']")
|
374
|
-
end
|
375
|
-
|
376
|
-
it "should set the default text to 'Any'" do
|
377
|
-
expect(body).to have_selector("option[value='']", text: "Any")
|
378
|
-
end
|
379
|
-
|
380
|
-
it "should create an option for each related object" do
|
381
|
-
expect(body).to have_selector("option[value='#{john.id}']", text: "John Doe")
|
382
|
-
expect(body).to have_selector("option[value='#{jane.id}']", text: "Jane Doe")
|
383
|
-
end
|
384
|
-
end
|
385
|
-
|
386
|
-
context "as check boxes" do
|
387
|
-
let(:body) { Capybara.string(filter :authors, as: :check_boxes) }
|
388
|
-
|
389
|
-
it "should create a check box for each related object" do
|
390
|
-
expect(body).to have_selector("input[name='q[posts_author_id_in][]'][type=checkbox][value='#{john.id}']")
|
391
|
-
expect(body).to have_selector("input[name='q[posts_author_id_in][]'][type=checkbox][value='#{jane.id}']")
|
392
|
-
end
|
393
|
-
end
|
394
|
-
end
|
395
|
-
|
396
|
-
describe "conditional display" do
|
397
|
-
[:if, :unless].each do |verb|
|
398
|
-
should = verb == :if ? "should" : "shouldn't"
|
399
|
-
if_true = verb == :if ? :to : :to_not
|
400
|
-
if_false = verb == :if ? :to_not : :to
|
401
|
-
context "with #{verb.inspect} proc" do
|
402
|
-
it "#{should} be displayed if true" do
|
403
|
-
body = Capybara.string(filter :body, verb => proc{ true })
|
404
|
-
expect(body).send if_true, have_selector("input[name='q[body_contains]']")
|
405
|
-
end
|
406
|
-
it "#{should} be displayed if false" do
|
407
|
-
body = Capybara.string(filter :body, verb => proc{ false })
|
408
|
-
expect(body).send if_false, have_selector("input[name='q[body_contains]']")
|
409
|
-
end
|
410
|
-
it "should still be hidden on the second render" do
|
411
|
-
filters = {body: { verb => proc{ verb == :unless }}}
|
412
|
-
2.times do
|
413
|
-
body = Capybara.string(render_filter scope, filters)
|
414
|
-
expect(body).not_to have_selector("input[name='q[body_contains]']")
|
415
|
-
end
|
416
|
-
end
|
417
|
-
it "should successfully keep rendering other filters after one is hidden" do
|
418
|
-
filters = {body: { verb => proc{ verb == :unless }}, author: {}}
|
419
|
-
body = Capybara.string(render_filter scope, filters)
|
420
|
-
expect(body).not_to have_selector("input[name='q[body_contains]']")
|
421
|
-
expect(body).to have_selector("select[name='q[author_id_eq]']")
|
422
|
-
end
|
423
|
-
end
|
424
|
-
end
|
425
|
-
end
|
426
|
-
|
427
|
-
describe "custom search methods" do
|
428
|
-
|
429
|
-
it "should use the default type of the ransacker" do
|
430
|
-
body = Capybara.string(filter :custom_searcher_numeric)
|
431
|
-
expect(body).to have_selector("option[value=custom_searcher_numeric_equals]")
|
432
|
-
expect(body).to have_selector("option[value=custom_searcher_numeric_greater_than]")
|
433
|
-
expect(body).to have_selector("option[value=custom_searcher_numeric_less_than]")
|
434
|
-
end
|
435
|
-
|
436
|
-
it "should work as select" do
|
437
|
-
body = Capybara.string(filter :custom_title_searcher, as: :select, collection: ['foo'])
|
438
|
-
expect(body).to have_selector("select[name='q[custom_title_searcher_eq]']")
|
439
|
-
end
|
440
|
-
|
441
|
-
it "should work as string" do
|
442
|
-
body = Capybara.string(filter :custom_title_searcher, as: :string)
|
443
|
-
expect(body).to have_selector("option[value=custom_title_searcher_contains]")
|
444
|
-
expect(body).to have_selector("option[value=custom_title_searcher_starts_with]")
|
445
|
-
end
|
446
|
-
|
447
|
-
describe "custom date range search" do
|
448
|
-
let(:qteq) { "2010-10-01" }
|
449
|
-
let(:lteq) { "2010-10-02" }
|
450
|
-
let(:scope){ Post.search custom_created_at_searcher_gteq_datetime: qteq, custom_created_at_searcher_lteq_datetime: lteq }
|
451
|
-
let(:body) { Capybara.string(render_filter scope, custom_created_at_searcher: {as: :date_range}) }
|
452
|
-
|
453
|
-
it "should work as date_range" do
|
454
|
-
expect(body).to have_selector("input[name='q[custom_created_at_searcher_gteq_datetime]'][value='2010-10-01']")
|
455
|
-
expect(body).to have_selector("input[name='q[custom_created_at_searcher_lteq_datetime]'][value='2010-10-02']")
|
456
|
-
end
|
457
|
-
|
458
|
-
context "filter value can't be casted to date" do
|
459
|
-
let(:qteq) { "Ooops" }
|
460
|
-
let(:lteq) { "Ooops" }
|
461
|
-
|
462
|
-
it "should work display empty filter values" do
|
463
|
-
expect(body).to have_selector("input[name='q[custom_created_at_searcher_gteq_datetime]'][value='']")
|
464
|
-
expect(body).to have_selector("input[name='q[custom_created_at_searcher_lteq_datetime]'][value='']")
|
465
|
-
end
|
466
|
-
end
|
467
|
-
|
468
|
-
end
|
469
|
-
end
|
470
|
-
|
471
|
-
describe "does not support some filter inputs" do
|
472
|
-
it "should fallback to use formtastic inputs" do
|
473
|
-
body = Capybara.string(filter :custom_title_searcher, as: :text)
|
474
|
-
expect(body).to have_selector("textarea[name='q[custom_title_searcher]']")
|
475
|
-
end
|
476
|
-
end
|
477
|
-
|
478
|
-
describe "blank option" do
|
479
|
-
context "for a select filter" do
|
480
|
-
it "should be there by default" do
|
481
|
-
body = Capybara.string(filter(:author))
|
482
|
-
expect(body).to have_selector("option", text: "Any")
|
483
|
-
end
|
484
|
-
it "should be able to be disabled" do
|
485
|
-
body = Capybara.string(filter(:author, include_blank: false))
|
486
|
-
expect(body).to_not have_selector("option", text: "Any")
|
487
|
-
end
|
488
|
-
end
|
489
|
-
|
490
|
-
context "for a multi-select filter" do
|
491
|
-
it "should not be there by default" do
|
492
|
-
body = Capybara.string(filter(:author, multiple: true))
|
493
|
-
expect(body).to_not have_selector("option", text: "Any")
|
494
|
-
end
|
495
|
-
it "should be able to be enabled" do
|
496
|
-
body = Capybara.string(filter(:author, multiple: true, include_blank: true))
|
497
|
-
expect(body).to have_selector("option", text: "Any")
|
498
|
-
end
|
499
|
-
end
|
500
|
-
end
|
501
|
-
|
502
|
-
end
|