activeadmin 1.0.0.pre4 → 2.4.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 +529 -52
- data/CODE_OF_CONDUCT.md +64 -12
- data/CONTRIBUTING.md +129 -58
- data/README.md +80 -79
- data/app/assets/javascripts/active_admin/base.es6 +23 -0
- data/app/assets/javascripts/active_admin/ext/jquery-ui.es6 +7 -0
- data/app/assets/javascripts/active_admin/ext/jquery.es6 +9 -0
- data/app/assets/javascripts/active_admin/initializers/datepicker.es6 +16 -0
- data/app/assets/javascripts/active_admin/initializers/filters.es6 +45 -0
- data/app/assets/javascripts/active_admin/initializers/tabs.es6 +6 -0
- data/app/assets/javascripts/active_admin/lib/active_admin.es6 +41 -0
- data/app/assets/javascripts/active_admin/lib/batch_actions.es6 +59 -0
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.es6 +49 -0
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.es6 +123 -0
- data/app/assets/javascripts/active_admin/lib/has_many.es6 +95 -0
- data/app/assets/javascripts/active_admin/lib/modal_dialog.es6 +61 -0
- data/app/assets/javascripts/active_admin/lib/per_page.es6 +47 -0
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 +36 -0
- data/app/assets/stylesheets/active_admin/_base.scss +2 -2
- data/app/assets/stylesheets/active_admin/_forms.scss +19 -26
- data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +0 -5
- data/app/assets/stylesheets/active_admin/components/_pagination.scss +11 -0
- data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -4
- data/app/assets/stylesheets/active_admin/components/_tables.scss +4 -1
- data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
- data/app/assets/stylesheets/active_admin/mixins/_all.scss +0 -2
- data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
- data/app/assets/stylesheets/active_admin/print.scss +2 -3
- 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 +3 -4
- data/app/views/active_admin/devise/sessions/new.html.erb +2 -2
- data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
- data/app/views/active_admin/devise/shared/_links.erb +12 -6
- data/app/views/active_admin/devise/unlocks/new.html.erb +2 -2
- data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_gap.html.erb +8 -0
- data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_page.html.erb +12 -0
- data/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
- data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
- 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 +4 -5
- data/config/locales/bg.yml +1 -3
- data/config/locales/bs.yml +1 -2
- data/config/locales/ca.yml +2 -4
- data/config/locales/cs.yml +1 -2
- data/config/locales/da.yml +45 -14
- data/config/locales/de-CH.yml +2 -3
- data/config/locales/de.yml +30 -3
- data/config/locales/el.yml +3 -4
- data/config/locales/en-CA.yml +139 -0
- data/config/locales/en-GB.yml +44 -3
- data/config/locales/en.yml +31 -5
- data/config/locales/eo.yml +145 -0
- data/config/locales/es-MX.yml +5 -3
- data/config/locales/es.yml +32 -6
- data/config/locales/fa.yml +1 -2
- data/config/locales/fi.yml +2 -3
- data/config/locales/fr.yml +27 -5
- data/config/locales/he.yml +53 -7
- data/config/locales/hr.yml +1 -2
- data/config/locales/hu.yml +5 -2
- data/config/locales/id.yml +2 -3
- data/config/locales/it.yml +15 -7
- data/config/locales/ja.yml +8 -3
- data/config/locales/ko.yml +1 -2
- data/config/locales/lt.yml +27 -6
- data/config/locales/lv.yml +1 -2
- data/config/locales/mk.yml +134 -0
- data/config/locales/nb.yml +16 -7
- data/config/locales/nl.yml +13 -3
- data/config/locales/pl.yml +75 -5
- data/config/locales/pt-BR.yml +10 -3
- data/config/locales/pt-PT.yml +1 -2
- data/config/locales/ro.yml +1 -2
- data/config/locales/ru.yml +5 -3
- data/config/locales/sk.yml +168 -0
- data/config/locales/sv-SE.yml +4 -3
- data/config/locales/tr.yml +10 -2
- data/config/locales/uk.yml +4 -3
- data/config/locales/vi.yml +48 -8
- data/config/locales/zh-CN.yml +38 -7
- data/config/locales/zh-TW.yml +2 -3
- data/docs/.gitignore +1 -0
- data/docs/0-installation.md +19 -13
- data/docs/1-general-configuration.md +37 -4
- data/docs/10-custom-pages.md +47 -3
- data/docs/11-decorators.md +4 -0
- data/docs/12-arbre-components.md +73 -9
- data/docs/13-authorization-adapter.md +72 -35
- data/docs/14-gotchas.md +57 -19
- data/docs/2-resource-customization.md +64 -20
- data/docs/3-index-pages/custom-index.md +5 -1
- data/docs/3-index-pages/index-as-block.md +3 -5
- data/docs/3-index-pages/index-as-blog.md +4 -6
- data/docs/3-index-pages/index-as-grid.md +3 -5
- data/docs/3-index-pages/index-as-table.md +33 -12
- data/docs/3-index-pages.md +65 -9
- data/docs/4-csv-format.md +16 -0
- data/docs/5-forms.md +78 -17
- data/docs/6-show-pages.md +5 -29
- data/docs/7-sidebars.md +5 -1
- data/docs/8-custom-actions.md +18 -1
- data/docs/9-batch-actions.md +8 -4
- data/docs/CNAME +1 -0
- data/docs/Gemfile +3 -0
- data/docs/Gemfile.lock +248 -0
- data/docs/_config.yml +4 -0
- data/docs/_includes/footer.html +8 -0
- data/docs/_includes/google-analytics.html +16 -0
- data/docs/_includes/head.html +7 -0
- data/docs/_includes/toc.html +98 -0
- data/docs/_includes/top-menu.html +17 -0
- data/docs/_layouts/default.html +21 -0
- data/docs/documentation.md +60 -0
- data/docs/images/activeadmin.png +0 -0
- data/docs/images/code-header.png +0 -0
- data/docs/images/divider.png +0 -0
- data/docs/images/features.png +0 -0
- data/docs/images/tidelift.svg +14 -0
- data/docs/index.html +226 -0
- data/docs/stylesheets/main.css +1205 -0
- data/lib/active_admin/abstract_view_factory.rb +13 -51
- data/lib/active_admin/application.rb +50 -140
- data/lib/active_admin/application_settings.rb +42 -0
- data/lib/active_admin/authorization_adapter.rb +0 -3
- data/lib/active_admin/base_controller/authorization.rb +4 -7
- data/lib/active_admin/base_controller/menu.rb +10 -14
- data/lib/active_admin/base_controller.rb +8 -14
- data/lib/active_admin/batch_actions/controller.rb +3 -3
- data/lib/active_admin/batch_actions/resource_extension.rb +9 -13
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +1 -1
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +1 -1
- data/lib/active_admin/batch_actions/views/selection_cells.rb +6 -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 +15 -12
- data/lib/active_admin/dependency.rb +8 -76
- data/lib/active_admin/deprecation.rb +0 -25
- data/lib/active_admin/devise.rb +3 -3
- data/lib/active_admin/dsl.rb +3 -16
- 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 +5 -3
- data/lib/active_admin/filters/active.rb +13 -14
- data/lib/active_admin/filters/active_filter.rb +124 -0
- data/lib/active_admin/filters/active_sidebar.rb +54 -0
- data/lib/active_admin/filters/forms.rb +6 -4
- data/lib/active_admin/filters/formtastic_addons.rb +2 -2
- data/lib/active_admin/filters/resource_extension.rb +28 -43
- data/lib/active_admin/filters.rb +2 -0
- data/lib/active_admin/form_builder.rb +100 -59
- data/lib/active_admin/generators/boilerplate.rb +12 -4
- data/lib/active_admin/helpers/collection.rb +2 -0
- data/lib/active_admin/helpers/scope_chain.rb +1 -0
- data/lib/active_admin/inputs/datepicker_input.rb +12 -5
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +2 -2
- data/lib/active_admin/inputs/filters/date_range_input.rb +21 -8
- data/lib/active_admin/inputs/filters/select_input.rb +6 -3
- data/lib/active_admin/inputs/filters/text_input.rb +25 -0
- data/lib/active_admin/inputs.rb +1 -0
- data/lib/active_admin/localizers/resource_localizer.rb +35 -0
- data/lib/active_admin/localizers.rb +11 -0
- data/lib/active_admin/menu.rb +6 -12
- data/lib/active_admin/menu_collection.rb +0 -2
- data/lib/active_admin/menu_item.rb +4 -32
- data/lib/active_admin/namespace.rb +36 -17
- data/lib/active_admin/namespace_settings.rb +123 -0
- data/lib/active_admin/order_clause.rb +30 -8
- data/lib/active_admin/orm/active_record/comments/comment.rb +3 -17
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +19 -7
- data/lib/active_admin/orm/active_record/comments.rb +17 -11
- data/lib/active_admin/page.rb +23 -4
- data/lib/active_admin/page_controller.rb +2 -6
- data/lib/active_admin/page_dsl.rb +5 -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 +17 -5
- data/lib/active_admin/resource/attributes.rb +47 -0
- data/lib/active_admin/resource/belongs_to.rb +10 -1
- data/lib/active_admin/resource/menu.rb +7 -4
- data/lib/active_admin/resource/model.rb +15 -0
- data/lib/active_admin/resource/naming.rb +3 -3
- data/lib/active_admin/resource/ordering.rb +11 -0
- data/lib/active_admin/resource/page_presenters.rb +1 -1
- data/lib/active_admin/resource/routes.rb +52 -20
- data/lib/active_admin/resource/scopes.rb +5 -3
- data/lib/active_admin/resource/sidebars.rb +1 -1
- data/lib/active_admin/resource.rb +59 -7
- 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 +32 -27
- data/lib/active_admin/resource_controller/decorators.rb +5 -5
- data/lib/active_admin/resource_controller/polymorphic_routes.rb +36 -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 +15 -0
- data/lib/active_admin/resource_dsl.rb +58 -24
- data/lib/active_admin/router.rb +90 -82
- data/lib/active_admin/scope.rb +20 -12
- 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/auto_link_helper.rb +2 -2
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +2 -2
- data/lib/active_admin/view_helpers/display_helper.rb +28 -16
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +13 -0
- data/lib/active_admin/view_helpers/fields_for.rb +1 -2
- data/lib/active_admin/view_helpers/form_helper.rb +2 -2
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +8 -1
- data/lib/active_admin/view_helpers/scope_name_helper.rb +16 -0
- data/lib/active_admin/view_helpers.rb +2 -1
- data/lib/active_admin/views/action_items.rb +1 -1
- data/lib/active_admin/views/components/active_admin_form.rb +43 -11
- data/lib/active_admin/views/components/attributes_table.rb +4 -4
- data/lib/active_admin/views/components/columns.rb +3 -3
- data/lib/active_admin/views/components/dropdown_menu.rb +4 -4
- data/lib/active_admin/views/components/index_list.rb +4 -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 +7 -11
- data/lib/active_admin/views/components/scopes.rb +14 -8
- 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 +11 -16
- data/lib/active_admin/views/components/table_for.rb +7 -16
- data/lib/active_admin/views/components/tabs.rb +15 -3
- data/lib/active_admin/views/footer.rb +14 -4
- data/lib/active_admin/views/header.rb +3 -16
- data/lib/active_admin/views/index_as_blog.rb +2 -3
- data/lib/active_admin/views/index_as_grid.rb +25 -25
- data/lib/active_admin/views/index_as_table.rb +39 -13
- data/lib/active_admin/views/pages/base.rb +36 -57
- data/lib/active_admin/views/pages/form.rb +2 -3
- data/lib/active_admin/views/pages/layout.rb +1 -1
- data/lib/active_admin/views/pages/show.rb +8 -2
- data/lib/active_admin/views/tabbed_navigation.rb +4 -59
- data/lib/active_admin/views/title_bar.rb +4 -4
- data/lib/active_admin/views.rb +1 -1
- data/lib/active_admin.rb +11 -7
- 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/devise/devise_generator.rb +8 -5
- data/lib/generators/active_admin/install/install_generator.rb +7 -3
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +60 -4
- data/lib/generators/active_admin/install/templates/{admin_user.rb.erb → admin_users.rb.erb} +1 -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 → create_active_admin_comments.rb.erb} +2 -5
- 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 +46 -0
- data/lib/ransack_ext.rb +5 -5
- data/vendor/assets/javascripts/jquery-ui/data.js +41 -0
- data/vendor/assets/javascripts/jquery-ui/disable-selection.js +48 -0
- data/vendor/assets/javascripts/jquery-ui/escape-selector.js +23 -0
- data/vendor/assets/javascripts/jquery-ui/focusable.js +86 -0
- 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/ie.js +17 -0
- data/vendor/assets/javascripts/jquery-ui/keycode.js +47 -0
- data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
- data/vendor/assets/javascripts/jquery-ui/plugin.js +46 -0
- data/vendor/assets/javascripts/jquery-ui/position.js +500 -0
- data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +42 -0
- data/vendor/assets/javascripts/jquery-ui/safe-blur.js +23 -0
- data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +47 -0
- data/vendor/assets/javascripts/jquery-ui/tabbable.js +38 -0
- data/vendor/assets/javascripts/jquery-ui/unique-id.js +51 -0
- data/vendor/assets/javascripts/jquery-ui/version.js +17 -0
- data/vendor/assets/javascripts/jquery-ui/widget.js +735 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/button.js +391 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +291 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +300 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +2123 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +954 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +1259 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +230 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +1207 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +1561 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +931 -0
- data/vendor/assets/stylesheets/active_admin/_normalize.scss +447 -0
- metadata +190 -539
- data/.gitignore +0 -49
- data/.hound.yml +0 -14
- data/.travis.yml +0 -46
- data/.yardopts +0 -8
- data/Gemfile +0 -75
- data/Guardfile +0 -8
- data/Rakefile +0 -33
- data/activeadmin.gemspec +0 -31
- data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
- data/app/assets/javascripts/active_admin/base.js.coffee +0 -9
- 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 -7
- data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -10
- data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -15
- data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -3
- data/app/assets/javascripts/active_admin/jquery_ui.js.erb +0 -11
- data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -39
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -36
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -101
- 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 -31
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -24
- data/app/assets/stylesheets/active_admin/mixins/_reset.scss +0 -165
- 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 -66
- data/features/breadcrumb.feature +0 -75
- data/features/comments/commenting.feature +0 -171
- data/features/comments/viewing_index.feature +0 -19
- data/features/dashboard.feature +0 -16
- data/features/decorators.feature +0 -43
- data/features/development_reloading.feature +0 -30
- data/features/edit_page.feature +0 -117
- data/features/favicon.feature +0 -20
- data/features/first_boot.feature +0 -16
- data/features/global_navigation.feature +0 -29
- data/features/i18n.feature +0 -43
- data/features/index/batch_actions.feature +0 -196
- data/features/index/filters.feature +0 -161
- data/features/index/format_as_csv.feature +0 -203
- data/features/index/formats.feature +0 -66
- 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 -251
- data/features/index/page_title.feature +0 -42
- data/features/index/pagination.feature +0 -63
- data/features/index/switch_index_view.feature +0 -73
- data/features/menu.feature +0 -53
- data/features/meta_tags.feature +0 -21
- data/features/new_page.feature +0 -109
- data/features/registering_assets.feature +0 -34
- data/features/registering_pages.feature +0 -148
- data/features/registering_resources.feature +0 -33
- data/features/renamed_resource.feature +0 -32
- data/features/root_to.feature +0 -17
- data/features/show/columns.feature +0 -40
- data/features/show/default_content.feature +0 -44
- data/features/show/page_title.feature +0 -59
- data/features/show/tabs.feature +0 -27
- data/features/sidebar_sections.feature +0 -210
- data/features/site_title.feature +0 -47
- data/features/specifying_actions.feature +0 -93
- data/features/step_definitions/action_item_steps.rb +0 -7
- data/features/step_definitions/action_link_steps.rb +0 -20
- 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/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 -12
- 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 -39
- data/features/step_definitions/flash_steps.rb +0 -11
- data/features/step_definitions/format_steps.rb +0 -52
- data/features/step_definitions/i18n_steps.rb +0 -3
- data/features/step_definitions/index_scope_steps.rb +0 -21
- 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 -13
- data/features/step_definitions/site_title_steps.rb +0 -17
- data/features/step_definitions/symbol_leak_steps.rb +0 -3
- data/features/step_definitions/tab_steps.rb +0 -8
- data/features/step_definitions/table_steps.rb +0 -120
- data/features/step_definitions/user_steps.rb +0 -45
- data/features/step_definitions/web_steps.rb +0 -85
- data/features/sti_resource.feature +0 -65
- data/features/strong_parameters.feature +0 -73
- data/features/support/env.rb +0 -162
- data/features/support/paths.rb +0 -71
- data/features/support/selectors.rb +0 -45
- data/features/symbol_leak.feature +0 -35
- data/features/users/logging_in.feature +0 -34
- data/features/users/logging_out.feature +0 -13
- data/features/users/resetting_password.feature +0 -34
- data/lib/active_admin/event.rb +0 -24
- data/lib/active_admin/filters/humanized.rb +0 -68
- data/lib/active_admin/helpers/settings.rb +0 -115
- data/lib/active_admin/reloader.rb +0 -25
- data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
- data/lib/generators/active_admin/resource/templates/admin.rb +0 -45
- data/script/local +0 -53
- data/script/travis_cache +0 -107
- data/script/use_rails +0 -53
- 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_config.rb +0 -23
- data/spec/javascripts/support/jasmine_runner.rb +0 -32
- data/spec/rails_helper.rb +0 -169
- data/spec/requests/default_namespace_spec.rb +0 -61
- data/spec/requests/javascript_spec.rb +0 -22
- data/spec/requests/memory_spec.rb +0 -21
- data/spec/requests/stylesheets_spec.rb +0 -18
- data/spec/spec_helper.rb +0 -17
- data/spec/support/active_admin_request_helpers.rb +0 -27
- data/spec/support/deferred_garbage_collection.rb +0 -19
- data/spec/support/detect_rails_version.rb +0 -34
- data/spec/support/jslint.yml +0 -80
- data/spec/support/rails_template.rb +0 -158
- data/spec/support/rails_template_with_data.rb +0 -55
- data/spec/support/templates/admin/stores.rb +0 -9
- data/spec/support/templates/en.yml +0 -8
- 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 -45
- 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 -11
- data/spec/unit/abstract_view_factory_spec.rb +0 -79
- data/spec/unit/action_builder_spec.rb +0 -134
- data/spec/unit/active_admin_spec.rb +0 -11
- data/spec/unit/application_spec.rb +0 -165
- data/spec/unit/asset_registration_spec.rb +0 -52
- data/spec/unit/authorization/authorization_adapter_spec.rb +0 -61
- data/spec/unit/authorization/controller_authorization_spec.rb +0 -39
- data/spec/unit/authorization/index_overriding_spec.rb +0 -23
- data/spec/unit/auto_link_spec.rb +0 -69
- data/spec/unit/batch_actions/resource_spec.rb +0 -97
- data/spec/unit/batch_actions/settings_spec.rb +0 -61
- data/spec/unit/belongs_to_spec.rb +0 -65
- data/spec/unit/cancan_adapter_spec.rb +0 -43
- data/spec/unit/comments_spec.rb +0 -188
- 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 -303
- data/spec/unit/dependency_spec.rb +0 -135
- data/spec/unit/devise_spec.rb +0 -96
- data/spec/unit/dsl_spec.rb +0 -122
- data/spec/unit/filters/filter_form_builder_spec.rb +0 -434
- data/spec/unit/filters/humanized_spec.rb +0 -56
- data/spec/unit/filters/resource_spec.rb +0 -128
- data/spec/unit/form_builder_spec.rb +0 -815
- data/spec/unit/generators/install_spec.rb +0 -24
- data/spec/unit/helpers/collection_spec.rb +0 -65
- data/spec/unit/helpers/scope_chain_spec.rb +0 -36
- data/spec/unit/helpers/settings_spec.rb +0 -30
- data/spec/unit/i18n_spec.rb +0 -12
- data/spec/unit/menu_collection_spec.rb +0 -62
- data/spec/unit/menu_item_spec.rb +0 -143
- 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 -73
- data/spec/unit/namespace/register_resource_spec.rb +0 -160
- data/spec/unit/namespace_spec.rb +0 -103
- 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 -78
- data/spec/unit/pretty_format_spec.rb +0 -77
- data/spec/unit/pundit_adapter_spec.rb +0 -98
- data/spec/unit/resource/action_items_spec.rb +0 -65
- 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/page_presenters_spec.rb +0 -44
- data/spec/unit/resource/pagination_spec.rb +0 -38
- data/spec/unit/resource/routes_spec.rb +0 -77
- 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 -140
- data/spec/unit/resource_controller/decorators_spec.rb +0 -94
- data/spec/unit/resource_controller/sidebars_spec.rb +0 -38
- data/spec/unit/resource_controller_spec.rb +0 -269
- data/spec/unit/resource_registration_spec.rb +0 -56
- data/spec/unit/resource_spec.rb +0 -331
- data/spec/unit/routing_spec.rb +0 -185
- data/spec/unit/scope_spec.rb +0 -185
- data/spec/unit/settings_spec.rb +0 -118
- data/spec/unit/view_factory_spec.rb +0 -19
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +0 -217
- data/spec/unit/view_helpers/display_helper_spec.rb +0 -165
- 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 -25
- data/spec/unit/view_helpers/form_helper_spec.rb +0 -43
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -139
- data/spec/unit/views/components/attributes_table_spec.rb +0 -272
- 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 -189
- data/spec/unit/views/components/index_list_spec.rb +0 -35
- 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 -78
- data/spec/unit/views/components/status_tag_spec.rb +0 -249
- data/spec/unit/views/components/table_for_spec.rb +0 -434
- data/spec/unit/views/components/tabs_spec.rb +0 -39
- 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 -51
- 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 -33
- data/spec/unit/views/tabbed_navigation_spec.rb +0 -158
- data/tasks/docs.rake +0 -37
- data/tasks/parallel_tests.rake +0 -66
- data/tasks/test.rake +0 -91
- data/tasks/yard.rake +0 -9
@@ -1,434 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
|
3
|
-
class Post
|
4
|
-
ransacker :custom_searcher do
|
5
|
-
# nothing to see here
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
describe ActiveAdmin::Filters::ViewHelper do
|
10
|
-
|
11
|
-
# Setup an ActionView::Base object which can be used for
|
12
|
-
# generating the form for.
|
13
|
-
let(:helpers) do
|
14
|
-
view = action_view
|
15
|
-
def view.collection_path
|
16
|
-
"/posts"
|
17
|
-
end
|
18
|
-
|
19
|
-
def view.protect_against_forgery?
|
20
|
-
false
|
21
|
-
end
|
22
|
-
|
23
|
-
def view.a_helper_method
|
24
|
-
"A Helper Method"
|
25
|
-
end
|
26
|
-
|
27
|
-
view
|
28
|
-
end
|
29
|
-
|
30
|
-
def render_filter(search, filters)
|
31
|
-
render_arbre_component({filter_args: [search, filters]}, helpers) do
|
32
|
-
text_node active_admin_filters_form_for *assigns[:filter_args]
|
33
|
-
end.to_s
|
34
|
-
end
|
35
|
-
|
36
|
-
def filter(name, options = {})
|
37
|
-
render_filter scope, name => options
|
38
|
-
end
|
39
|
-
|
40
|
-
let(:scope) { Post.search }
|
41
|
-
|
42
|
-
describe "the form in general" do
|
43
|
-
let(:body) { Capybara.string(filter :title) }
|
44
|
-
|
45
|
-
it "should generate a form which submits via get" do
|
46
|
-
expect(body).to have_selector("form.filter_form[method=get]")
|
47
|
-
end
|
48
|
-
|
49
|
-
it "should generate a filter button" do
|
50
|
-
expect(body).to have_selector("input[type=submit][value=Filter]")
|
51
|
-
end
|
52
|
-
|
53
|
-
it "should only generate the form once" do
|
54
|
-
expect(body).to have_selector("form", count: 1)
|
55
|
-
end
|
56
|
-
|
57
|
-
it "should generate a clear filters link" do
|
58
|
-
expect(body).to have_selector("a.clear_filters_btn", text: "Clear Filters")
|
59
|
-
end
|
60
|
-
|
61
|
-
describe "label as proc" do
|
62
|
-
let(:body) { Capybara.string(filter :title, label: proc { 'Title from proc' }) }
|
63
|
-
|
64
|
-
it "should render proper label" do
|
65
|
-
expect(body).to have_selector("label", text: "Title from proc")
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
describe "string attribute" do
|
71
|
-
let(:body) { Capybara.string(filter :title) }
|
72
|
-
|
73
|
-
it "should generate a select option for starts with" do
|
74
|
-
expect(body).to have_selector("option[value=title_starts_with]", text: "Starts with")
|
75
|
-
end
|
76
|
-
|
77
|
-
it "should generate a select option for ends with" do
|
78
|
-
expect(body).to have_selector("option[value=title_ends_with]", text: "Ends with")
|
79
|
-
end
|
80
|
-
|
81
|
-
it "should generate a select option for contains" do
|
82
|
-
expect(body).to have_selector("option[value=title_contains]", text: "Contains")
|
83
|
-
end
|
84
|
-
|
85
|
-
it "should generate a text field for input" do
|
86
|
-
expect(body).to have_selector("input[name='q[title_contains]']")
|
87
|
-
end
|
88
|
-
|
89
|
-
it "should have a proper label" do
|
90
|
-
expect(body).to have_selector("label", text: "Title")
|
91
|
-
end
|
92
|
-
|
93
|
-
it "should translate the label for text field" do
|
94
|
-
with_translation activerecord: {attributes: {post: {title: 'Name'}}} do
|
95
|
-
expect(body).to have_selector("label", text: "Name")
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
it "should select the option which is currently being filtered" do
|
100
|
-
scope = Post.search title_starts_with: "foo"
|
101
|
-
body = Capybara.string(render_filter scope, title: {})
|
102
|
-
expect(body).to have_selector("option[value=title_starts_with][selected=selected]", text: "Starts with")
|
103
|
-
end
|
104
|
-
|
105
|
-
context "with predicate" do
|
106
|
-
%w[eq equals cont contains start starts_with end ends_with].each do |predicate|
|
107
|
-
describe "'#{predicate}'" do
|
108
|
-
let(:body) { Capybara.string(filter :"title_#{predicate}") }
|
109
|
-
|
110
|
-
it "shouldn't include a select field" do
|
111
|
-
expect(body).not_to have_selector("select")
|
112
|
-
end
|
113
|
-
|
114
|
-
it "should build correctly" do
|
115
|
-
expect(body).to have_selector("input[name='q[title_#{predicate}]']")
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
describe "text attribute" do
|
123
|
-
let(:body) { Capybara.string(filter :body) }
|
124
|
-
|
125
|
-
it "should generate a search field for a text attribute" do
|
126
|
-
expect(body).to have_selector("input[name='q[body_contains]']")
|
127
|
-
end
|
128
|
-
|
129
|
-
it "should have a proper label" do
|
130
|
-
expect(body).to have_selector("label", text: "Body")
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
describe "string attribute, as a select" do
|
135
|
-
let(:body) { filter :title, as: :select }
|
136
|
-
let(:builder) { ActiveAdmin::Inputs::Filters::SelectInput }
|
137
|
-
|
138
|
-
context "when loading collection from DB" do
|
139
|
-
it "should use pluck for efficiency" do
|
140
|
-
expect_any_instance_of(builder).to receive(:pluck_column) { [] }
|
141
|
-
body
|
142
|
-
end
|
143
|
-
|
144
|
-
it "should remove original ordering to prevent PostgreSQL error" do
|
145
|
-
expect(scope.object.klass).to receive(:reorder).with('title asc') {
|
146
|
-
distinct = ActiveAdmin::Dependency.rails >= 4 ? :distinct : :uniq
|
147
|
-
m = double distinct => double(pluck: ['A Title'])
|
148
|
-
expect(m.send(distinct)).to receive(:pluck).with :title
|
149
|
-
m
|
150
|
-
}
|
151
|
-
body
|
152
|
-
end
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
describe "datetime attribute" do
|
157
|
-
let(:body) { Capybara.string(filter :created_at) }
|
158
|
-
|
159
|
-
it "should generate a date greater than" do
|
160
|
-
expect(body).to have_selector("input.datepicker[name='q[created_at_gteq_date]']")
|
161
|
-
end
|
162
|
-
it "should generate a seperator" do
|
163
|
-
expect(body).to have_selector("span.seperator")
|
164
|
-
end
|
165
|
-
it "should generate a date less than" do
|
166
|
-
expect(body).to have_selector("input.datepicker[name='q[created_at_lteq_date]']")
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
describe "integer attribute" do
|
171
|
-
let(:body) { Capybara.string(filter :id) }
|
172
|
-
|
173
|
-
it "should generate a select option for equal to" do
|
174
|
-
expect(body).to have_selector("option[value=id_equals]", text: "Equals")
|
175
|
-
end
|
176
|
-
it "should generate a select option for greater than" do
|
177
|
-
expect(body).to have_selector("option", text: "Greater than")
|
178
|
-
end
|
179
|
-
it "should generate a select option for less than" do
|
180
|
-
expect(body).to have_selector("option", text: "Less than")
|
181
|
-
end
|
182
|
-
it "should generate a text field for input" do
|
183
|
-
expect(body).to have_selector("input[name='q[id_equals]']")
|
184
|
-
end
|
185
|
-
it "should select the option which is currently being filtered" do
|
186
|
-
scope = Post.search id_greater_than: 1
|
187
|
-
body = Capybara.string(render_filter scope, id: {})
|
188
|
-
expect(body).to have_selector("option[value=id_greater_than][selected=selected]", text: "Greater than")
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
describe "boolean attribute" do
|
193
|
-
context "boolean datatypes" do
|
194
|
-
let(:body) { Capybara.string(filter :starred) }
|
195
|
-
|
196
|
-
it "should generate a select" do
|
197
|
-
expect(body).to have_selector("select[name='q[starred_eq]']")
|
198
|
-
end
|
199
|
-
it "should set the default text to 'Any'" do
|
200
|
-
expect(body).to have_selector("option[value='']", text: "Any")
|
201
|
-
end
|
202
|
-
it "should create an option for true and false" do
|
203
|
-
expect(body).to have_selector("option[value=true]", text: "Yes")
|
204
|
-
expect(body).to have_selector("option[value=false]", text: "No")
|
205
|
-
end
|
206
|
-
|
207
|
-
it "should translate the label for boolean field" do
|
208
|
-
with_translation activerecord: {attributes: {post: {starred: 'Faved'}}} do
|
209
|
-
expect(body).to have_selector("label", text: "Faved")
|
210
|
-
end
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
|
-
context "non-boolean data types" do
|
215
|
-
let(:body) { Capybara.string(filter :title_present, as: :boolean) }
|
216
|
-
|
217
|
-
it "should generate a select" do
|
218
|
-
expect(body).to have_selector("select[name='q[title_present]']")
|
219
|
-
end
|
220
|
-
it "should set the default text to 'Any'" do
|
221
|
-
expect(body).to have_selector("option[value='']", text: "Any")
|
222
|
-
end
|
223
|
-
it "should create an option for true and false" do
|
224
|
-
expect(body).to have_selector("option[value=true]", text: "Yes")
|
225
|
-
expect(body).to have_selector("option[value=false]", text: "No")
|
226
|
-
end
|
227
|
-
end
|
228
|
-
end
|
229
|
-
|
230
|
-
describe "belongs_to" do
|
231
|
-
before do
|
232
|
-
@john = User.create first_name: "John", last_name: "Doe", username: "john_doe"
|
233
|
-
@jane = User.create first_name: "Jane", last_name: "Doe", username: "jane_doe"
|
234
|
-
end
|
235
|
-
|
236
|
-
context "when given as the _id attribute name" do
|
237
|
-
let(:body) { Capybara.string(filter :author_id) }
|
238
|
-
|
239
|
-
it "should generate a numeric filter" do
|
240
|
-
expect(body).to have_selector("label", text: "Author") # really this should be Author ID :/)
|
241
|
-
expect(body).to have_selector("option[value=author_id_less_than]")
|
242
|
-
expect(body).to have_selector("input#q_author_id[name='q[author_id_equals]']")
|
243
|
-
end
|
244
|
-
end
|
245
|
-
|
246
|
-
context "when given as the name of the relationship" do
|
247
|
-
let(:body) { Capybara.string(filter :author) }
|
248
|
-
|
249
|
-
it "should generate a select" do
|
250
|
-
expect(body).to have_selector("select[name='q[author_id_eq]']")
|
251
|
-
end
|
252
|
-
it "should set the default text to 'Any'" do
|
253
|
-
expect(body).to have_selector("option[value='']", text: "Any")
|
254
|
-
end
|
255
|
-
it "should create an option for each related object" do
|
256
|
-
expect(body).to have_selector("option[value='#{@john.id}']", text: "John Doe")
|
257
|
-
expect(body).to have_selector("option[value='#{@jane.id}']", text: "Jane Doe")
|
258
|
-
end
|
259
|
-
|
260
|
-
context "with a proc" do
|
261
|
-
let :body do
|
262
|
-
Capybara.string(filter :title, as: :select, collection: proc{ ['Title One', 'Title Two'] })
|
263
|
-
end
|
264
|
-
|
265
|
-
it "should use call the proc as the collection" do
|
266
|
-
expect(body).to have_selector("option", text: "Title One")
|
267
|
-
expect(body).to have_selector("option", text: "Title Two")
|
268
|
-
end
|
269
|
-
|
270
|
-
it "should render the collection in the context of the view" do
|
271
|
-
body = Capybara.string(filter(:title, as: :select, collection: proc{[a_helper_method]}))
|
272
|
-
expect(body).to have_selector("option", text: "A Helper Method")
|
273
|
-
end
|
274
|
-
end
|
275
|
-
end
|
276
|
-
|
277
|
-
context "as check boxes" do
|
278
|
-
let(:body) { Capybara.string(filter :author, as: :check_boxes) }
|
279
|
-
|
280
|
-
it "should create a check box for each related object" do
|
281
|
-
expect(body).to have_selector("input[type=checkbox][name='q[author_id_in][]'][value='#{@jane.id}']")
|
282
|
-
expect(body).to have_selector("input[type=checkbox][name='q[author_id_in][]'][value='#{@jane.id}']")
|
283
|
-
end
|
284
|
-
end
|
285
|
-
|
286
|
-
context "when polymorphic relationship" do
|
287
|
-
let(:scope) { ActiveAdmin::Comment.search }
|
288
|
-
it "should raise an error if a collection isn't provided" do
|
289
|
-
expect { filter :resource }.to raise_error \
|
290
|
-
Formtastic::PolymorphicInputWithoutCollectionError
|
291
|
-
end
|
292
|
-
end
|
293
|
-
|
294
|
-
context "when using a custom foreign key" do
|
295
|
-
let(:scope) { Post.search }
|
296
|
-
let(:body) { Capybara.string(filter :category) }
|
297
|
-
it "should ignore that foreign key and let Ransack handle it" do
|
298
|
-
expect(Post.reflect_on_association(:category).foreign_key).to eq :custom_category_id
|
299
|
-
expect(body).to have_selector("select[name='q[category_id_eq]']")
|
300
|
-
end
|
301
|
-
end
|
302
|
-
end # belongs to
|
303
|
-
|
304
|
-
describe "has_and_belongs_to_many" do
|
305
|
-
skip "add HABTM models so this can be tested"
|
306
|
-
end
|
307
|
-
|
308
|
-
describe "has_many :through" do
|
309
|
-
# Setup an ActionView::Base object which can be used for
|
310
|
-
# generating the form for.
|
311
|
-
let(:helpers) do
|
312
|
-
view = action_view
|
313
|
-
def view.collection_path
|
314
|
-
"/categories"
|
315
|
-
end
|
316
|
-
|
317
|
-
def view.protect_against_forgery?
|
318
|
-
false
|
319
|
-
end
|
320
|
-
|
321
|
-
def view.a_helper_method
|
322
|
-
"A Helper Method"
|
323
|
-
end
|
324
|
-
|
325
|
-
view
|
326
|
-
end
|
327
|
-
let(:scope) { Category.search }
|
328
|
-
|
329
|
-
let!(:john) { User.create first_name: "John", last_name: "Doe", username: "john_doe" }
|
330
|
-
let!(:jane) { User.create first_name: "Jane", last_name: "Doe", username: "jane_doe" }
|
331
|
-
|
332
|
-
context "when given as the name of the relationship" do
|
333
|
-
let(:body) { Capybara.string(filter :authors) }
|
334
|
-
|
335
|
-
it "should generate a select" do
|
336
|
-
expect(body).to have_selector("select[name='q[posts_author_id_eq]']")
|
337
|
-
end
|
338
|
-
|
339
|
-
it "should set the default text to 'Any'" do
|
340
|
-
expect(body).to have_selector("option[value='']", text: "Any")
|
341
|
-
end
|
342
|
-
|
343
|
-
it "should create an option for each related object" do
|
344
|
-
expect(body).to have_selector("option[value='#{john.id}']", text: "John Doe")
|
345
|
-
expect(body).to have_selector("option[value='#{jane.id}']", text: "Jane Doe")
|
346
|
-
end
|
347
|
-
end
|
348
|
-
|
349
|
-
context "as check boxes" do
|
350
|
-
let(:body) { Capybara.string(filter :authors, as: :check_boxes) }
|
351
|
-
|
352
|
-
it "should create a check box for each related object" do
|
353
|
-
expect(body).to have_selector("input[name='q[posts_author_id_in][]'][type=checkbox][value='#{john.id}']")
|
354
|
-
expect(body).to have_selector("input[name='q[posts_author_id_in][]'][type=checkbox][value='#{jane.id}']")
|
355
|
-
end
|
356
|
-
end
|
357
|
-
end
|
358
|
-
|
359
|
-
describe "conditional display" do
|
360
|
-
[:if, :unless].each do |verb|
|
361
|
-
should = verb == :if ? "should" : "shouldn't"
|
362
|
-
if_true = verb == :if ? :to : :to_not
|
363
|
-
if_false = verb == :if ? :to_not : :to
|
364
|
-
context "with #{verb.inspect} proc" do
|
365
|
-
it "#{should} be displayed if true" do
|
366
|
-
body = Capybara.string(filter :body, verb => proc{ true })
|
367
|
-
expect(body).send if_true, have_selector("input[name='q[body_contains]']")
|
368
|
-
end
|
369
|
-
it "#{should} be displayed if false" do
|
370
|
-
body = Capybara.string(filter :body, verb => proc{ false })
|
371
|
-
expect(body).send if_false, have_selector("input[name='q[body_contains]']")
|
372
|
-
end
|
373
|
-
it "should still be hidden on the second render" do
|
374
|
-
filters = {body: { verb => proc{ verb == :unless }}}
|
375
|
-
2.times do
|
376
|
-
body = Capybara.string(render_filter scope, filters)
|
377
|
-
expect(body).not_to have_selector("input[name='q[body_contains]']")
|
378
|
-
end
|
379
|
-
end
|
380
|
-
it "should successfully keep rendering other filters after one is hidden" do
|
381
|
-
filters = {body: { verb => proc{ verb == :unless }}, author: {}}
|
382
|
-
body = Capybara.string(render_filter scope, filters)
|
383
|
-
expect(body).not_to have_selector("input[name='q[body_contains]']")
|
384
|
-
expect(body).to have_selector("select[name='q[author_id_eq]']")
|
385
|
-
end
|
386
|
-
end
|
387
|
-
end
|
388
|
-
end
|
389
|
-
|
390
|
-
describe "custom search methods" do
|
391
|
-
|
392
|
-
it "should work as select" do
|
393
|
-
body = Capybara.string(filter :custom_searcher, as: :select, collection: ['foo'])
|
394
|
-
expect(body).to have_selector("select[name='q[custom_searcher]']")
|
395
|
-
end
|
396
|
-
|
397
|
-
it "should work as string" do
|
398
|
-
body = Capybara.string(filter :custom_searcher, as: :string)
|
399
|
-
expect(body).to have_selector("input[name='q[custom_searcher]']")
|
400
|
-
end
|
401
|
-
end
|
402
|
-
|
403
|
-
describe "does not support some filter inputs" do
|
404
|
-
it "should fallback to use formtastic inputs" do
|
405
|
-
body = Capybara.string(filter :custom_searcher, as: :text)
|
406
|
-
expect(body).to have_selector("textarea[name='q[custom_searcher]']")
|
407
|
-
end
|
408
|
-
end
|
409
|
-
|
410
|
-
describe "blank option" do
|
411
|
-
context "for a select filter" do
|
412
|
-
it "should be there by default" do
|
413
|
-
body = Capybara.string(filter(:author))
|
414
|
-
expect(body).to have_selector("option", text: "Any")
|
415
|
-
end
|
416
|
-
it "should be able to be disabled" do
|
417
|
-
body = Capybara.string(filter(:author, include_blank: false))
|
418
|
-
expect(body).to_not have_selector("option", text: "Any")
|
419
|
-
end
|
420
|
-
end
|
421
|
-
|
422
|
-
context "for a multi-select filter" do
|
423
|
-
it "should not be there by default" do
|
424
|
-
body = Capybara.string(filter(:author, multiple: true))
|
425
|
-
expect(body).to_not have_selector("option", text: "Any")
|
426
|
-
end
|
427
|
-
it "should be able to be enabled" do
|
428
|
-
body = Capybara.string(filter(:author, multiple: true, include_blank: true))
|
429
|
-
expect(body).to have_selector("option", text: "Any")
|
430
|
-
end
|
431
|
-
end
|
432
|
-
end
|
433
|
-
|
434
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
|
3
|
-
describe ActiveAdmin::Filters::Humanized do
|
4
|
-
describe '#value' do
|
5
|
-
it 'should equal query string parameter if not an Array' do
|
6
|
-
param = ['category_id_eq', '1']
|
7
|
-
subject = ActiveAdmin::Filters::Humanized.new(param)
|
8
|
-
expect(subject.value).to eq('1')
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'should equal query string parameters separated by commas if an Array' do
|
12
|
-
param = ['category_id_eq', ['1', '2']]
|
13
|
-
subject = ActiveAdmin::Filters::Humanized.new(param)
|
14
|
-
expect(subject.value).to eq("1, 2")
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'should remove nil values before joining equal query string parameters separated by commas if an Array' do
|
18
|
-
param = ['category_id_eq', ['1', nil, '2']]
|
19
|
-
subject = ActiveAdmin::Filters::Humanized.new(param)
|
20
|
-
expect(subject.value).to eq("1, 2")
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe '#body' do
|
25
|
-
context 'when Ransack predicate' do
|
26
|
-
it 'parses language from Ransack' do
|
27
|
-
param = ['category_id_eq', '1']
|
28
|
-
subject = ActiveAdmin::Filters::Humanized.new(param)
|
29
|
-
expect(subject.body).to eq('Category ID equals')
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'handles strings with embedded predicates' do
|
33
|
-
param = ['requires_approval_eq', '1']
|
34
|
-
humanizer = ActiveAdmin::Filters::Humanized.new(param)
|
35
|
-
expect(humanizer.value).to eq('1')
|
36
|
-
expect(humanizer.body).to eq('Requires Approval equals')
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
context 'when ActiveAdmin predicate' do
|
41
|
-
it 'parses language from ActiveAdmin' do
|
42
|
-
param = ['name_starts_with', 'test']
|
43
|
-
humanizer = ActiveAdmin::Filters::Humanized.new(param)
|
44
|
-
expect(humanizer.body).to eq('Name starts with')
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context 'when unknown predicate' do
|
49
|
-
it 'uses raw predicate string' do
|
50
|
-
param = ['name_predicate_does_not_exist', 'test']
|
51
|
-
humanizer = ActiveAdmin::Filters::Humanized.new(param)
|
52
|
-
expect(humanizer.body).to eq("Name Predicate Does Not Exist")
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
@@ -1,128 +0,0 @@
|
|
1
|
-
require 'rails_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 a Hash" do
|
11
|
-
expect(resource.filters).to be_a Hash
|
12
|
-
end
|
13
|
-
|
14
|
-
it "should return the defaults if no filters are set" do
|
15
|
-
expect(resource.filters.keys).to match_array([
|
16
|
-
:author, :body, :category, :created_at, :custom_searcher, :position, :published_at, :starred, :taggings, :title, :updated_at
|
17
|
-
])
|
18
|
-
end
|
19
|
-
|
20
|
-
it "should not have defaults when filters are disabled on the resource" do
|
21
|
-
resource.filters = false
|
22
|
-
expect(resource.filters).to be_empty
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should not have defaults when the filters are disabled on the namespace" do
|
26
|
-
resource.namespace.filters = false
|
27
|
-
expect(resource.filters).to be_empty
|
28
|
-
end
|
29
|
-
|
30
|
-
it "should not have defaults when the filters are disabled on the application" do
|
31
|
-
resource.namespace.application.filters = false
|
32
|
-
expect(resource.filters).to be_empty
|
33
|
-
end
|
34
|
-
|
35
|
-
it "should return the defaults without associations if default association filters are disabled on the namespace" do
|
36
|
-
resource.namespace.include_default_association_filters = false
|
37
|
-
expect(resource.filters.keys).to match_array([
|
38
|
-
:body, :created_at, :custom_searcher, :position, :published_at, :starred, :title, :updated_at
|
39
|
-
])
|
40
|
-
end
|
41
|
-
|
42
|
-
describe "removing a filter" do
|
43
|
-
it "should work" do
|
44
|
-
expect(resource.filters.keys).to include :author
|
45
|
-
resource.remove_filter :author
|
46
|
-
expect(resource.filters.keys).to_not include :author
|
47
|
-
end
|
48
|
-
|
49
|
-
it "should work as a string" do
|
50
|
-
expect(resource.filters.keys).to include :author
|
51
|
-
resource.remove_filter 'author'
|
52
|
-
expect(resource.filters.keys).to_not include :author
|
53
|
-
end
|
54
|
-
|
55
|
-
it "should be lazy" do
|
56
|
-
expect(resource).to_not receive :default_filters # this hits the DB
|
57
|
-
resource.remove_filter :author
|
58
|
-
end
|
59
|
-
|
60
|
-
it "should not prevent the default filters from being added" do
|
61
|
-
resource.remove_filter :author
|
62
|
-
expect(resource.filters).to_not be_empty
|
63
|
-
end
|
64
|
-
|
65
|
-
it "should raise an exception when filters are disabled" do
|
66
|
-
resource.filters = false
|
67
|
-
expect{ resource.remove_filter :author }.to raise_error ActiveAdmin::Filters::Disabled
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
describe "removing a multiple filters inline" do
|
72
|
-
it "should work" do
|
73
|
-
expect(resource.filters.keys).to include :author, :body
|
74
|
-
resource.remove_filter :author, :body
|
75
|
-
expect(resource.filters.keys).to_not include :author, :body
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
describe "adding a filter" do
|
80
|
-
it "should work" do
|
81
|
-
resource.add_filter :title
|
82
|
-
expect(resource.filters).to eq title: {}
|
83
|
-
end
|
84
|
-
|
85
|
-
it "should work as a string" do
|
86
|
-
resource.add_filter 'title'
|
87
|
-
expect(resource.filters).to eq title: {}
|
88
|
-
end
|
89
|
-
|
90
|
-
it "should work with specified options" do
|
91
|
-
resource.add_filter :title, as: :string
|
92
|
-
expect(resource.filters).to eq title: {as: :string}
|
93
|
-
end
|
94
|
-
|
95
|
-
it "should override an existing filter" do
|
96
|
-
resource.add_filter :title, one: :two
|
97
|
-
resource.add_filter :title, three: :four
|
98
|
-
|
99
|
-
expect(resource.filters).to eq title: {three: :four}
|
100
|
-
end
|
101
|
-
|
102
|
-
it "should preserve default filters" do
|
103
|
-
resource.preserve_default_filters!
|
104
|
-
resource.add_filter :count, as: :string
|
105
|
-
|
106
|
-
expect(resource.filters.keys).to match_array([
|
107
|
-
:author, :body, :category, :count, :created_at, :custom_searcher, :position, :published_at, :starred, :taggings, :title, :updated_at
|
108
|
-
])
|
109
|
-
end
|
110
|
-
|
111
|
-
it "should raise an exception when filters are disabled" do
|
112
|
-
resource.filters = false
|
113
|
-
expect{ resource.add_filter :title }.to raise_error ActiveAdmin::Filters::Disabled
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
it "should reset filters" do
|
118
|
-
resource.add_filter :title
|
119
|
-
expect(resource.filters.size).to eq 1
|
120
|
-
resource.reset_filters!
|
121
|
-
expect(resource.filters.size).to be > 1
|
122
|
-
end
|
123
|
-
|
124
|
-
it "should add a sidebar section for the filters" do
|
125
|
-
expect(resource.sidebar_sections.first.name).to eq "filters"
|
126
|
-
end
|
127
|
-
|
128
|
-
end
|