activeadmin 1.3.0 → 2.0.0.rc1
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 +4 -4
- data/CHANGELOG.md +307 -123
- data/CODE_OF_CONDUCT.md +64 -12
- data/CONTRIBUTING.md +90 -46
- data/README.md +66 -19
- 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 +55 -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/_forms.scss +3 -15
- 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/_tabs.scss +1 -1
- data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
- 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/layouts/active_admin_logged_out.html.erb +2 -2
- data/config/locales/bg.yml +0 -1
- data/config/locales/de.yml +10 -0
- data/config/locales/en.yml +19 -1
- data/config/locales/es.yml +20 -1
- data/config/locales/fi.yml +1 -1
- data/config/locales/he.yml +0 -1
- data/config/locales/hu.yml +4 -0
- data/config/locales/it.yml +4 -0
- data/config/locales/lt.yml +2 -2
- data/config/locales/nb.yml +15 -5
- data/config/locales/nl.yml +11 -0
- data/config/locales/pl.yml +71 -3
- data/config/locales/ru.yml +2 -0
- data/config/locales/tr.yml +9 -0
- data/config/locales/uk.yml +2 -0
- data/config/locales/zh-CN.yml +33 -5
- data/docs/.gitignore +1 -0
- data/docs/0-installation.md +2 -2
- data/docs/1-general-configuration.md +16 -1
- data/docs/10-custom-pages.md +14 -0
- data/docs/12-arbre-components.md +28 -1
- data/docs/13-authorization-adapter.md +40 -21
- data/docs/2-resource-customization.md +8 -3
- 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 +5 -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 -0
- data/docs/Gemfile.lock +249 -0
- data/docs/_config.yml +1 -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 +2 -2
- data/docs/stylesheets/main.css +26 -2
- data/lib/active_admin/abstract_view_factory.rb +13 -51
- data/lib/active_admin/application.rb +49 -155
- 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 +3 -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 +4 -4
- data/lib/active_admin/callbacks.rb +1 -1
- data/lib/active_admin/csv_builder.rb +1 -1
- data/lib/active_admin/dependency.rb +1 -69
- 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 +1 -1
- data/lib/active_admin/filters/active_filter.rb +4 -2
- data/lib/active_admin/filters/active_sidebar.rb +5 -1
- 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 +4 -4
- data/lib/active_admin/form_builder.rb +97 -62
- data/lib/active_admin/generators/boilerplate.rb +1 -1
- 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/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 +110 -0
- 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 +10 -5
- data/lib/active_admin/orm/active_record/comments.rb +15 -4
- data/lib/active_admin/page_dsl.rb +1 -1
- data/lib/active_admin/pundit_adapter.rb +13 -4
- data/lib/active_admin/resource/action_items.rb +7 -2
- data/lib/active_admin/resource/attributes.rb +7 -4
- data/lib/active_admin/resource/menu.rb +3 -3
- data/lib/active_admin/resource/naming.rb +3 -3
- data/lib/active_admin/resource/routes.rb +9 -4
- data/lib/active_admin/resource/scopes.rb +3 -3
- data/lib/active_admin/resource/sidebars.rb +1 -1
- data/lib/active_admin/resource.rb +2 -2
- 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/decorators.rb +3 -3
- 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_dsl.rb +5 -3
- data/lib/active_admin/router.rb +89 -84
- data/lib/active_admin/scope.rb +9 -5
- data/lib/active_admin/settings_node.rb +19 -0
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_helpers/display_helper.rb +10 -2
- 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 +1 -1
- 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/sidebar_section.rb +0 -3
- data/lib/active_admin/views/components/site_title.rb +5 -6
- data/lib/active_admin/views/components/status_tag.rb +1 -18
- data/lib/active_admin/views/components/table_for.rb +3 -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 +11 -10
- data/lib/active_admin/views/pages/base.rb +30 -53
- 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 +6 -2
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +20 -1
- 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 +1 -1
- 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 +120 -523
- 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/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 -250
- 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 -136
- 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 -47
- 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/gemfiles/rails_52.gemfile +0 -11
- data/lib/active_admin/event.rb +0 -24
- data/lib/active_admin/helpers/output_safety_helper.rb +0 -35
- data/lib/active_admin/helpers/settings.rb +0 -114
- data/lib/bug_report_templates/active_admin_master.rb +0 -112
- 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 -153
- 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 -24
- data/spec/unit/abstract_view_factory_spec.rb +0 -78
- data/spec/unit/action_builder_spec.rb +0 -158
- 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 -313
- 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 -189
- data/spec/unit/filters/active_spec.rb +0 -24
- data/spec/unit/filters/filter_form_builder_spec.rb +0 -524
- 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/output_safety_helper_spec.rb +0 -79
- 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 -234
- 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 -253
- data/spec/unit/view_helpers/display_helper_spec.rb +0 -203
- 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
@@ -1,32 +0,0 @@
|
|
1
|
-
Then /^I should see a comment by "([^"]*)"$/ do |name|
|
2
|
-
step %{I should see "#{name}" within ".active_admin_comment_author"}
|
3
|
-
end
|
4
|
-
|
5
|
-
When /^I add a comment "([^"]*)"$/ do |comment|
|
6
|
-
step %{I fill in "active_admin_comment_body" with "#{comment}"}
|
7
|
-
step %{I press "Add Comment"}
|
8
|
-
end
|
9
|
-
|
10
|
-
Given /^a tag with the name "([^"]*)" exists$/ do |tag_name|
|
11
|
-
Tag.create(name: tag_name)
|
12
|
-
end
|
13
|
-
|
14
|
-
Given /^(a|\d+) comments added by admin with an email "([^"]+)"?$/ do |number, email|
|
15
|
-
number = number == 'a' ? 1 : number.to_i
|
16
|
-
admin_user = ensure_user_created(email)
|
17
|
-
|
18
|
-
comment_text = 'Comment %i'
|
19
|
-
|
20
|
-
number.times do |i|
|
21
|
-
ActiveAdmin::Comment.create!(namespace: 'admin',
|
22
|
-
body: comment_text % i,
|
23
|
-
resource_type: Post.to_s,
|
24
|
-
resource_id: Post.first.id,
|
25
|
-
author_type: admin_user.class.to_s,
|
26
|
-
author_id: admin_user.id)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
Then /^I should see (\d+) comments?$/ do |number|
|
31
|
-
expect(page).to have_selector('div.active_admin_comment', count: number.to_i)
|
32
|
-
end
|
@@ -1,100 +0,0 @@
|
|
1
|
-
module ActiveAdminReloading
|
2
|
-
def load_aa_config(config_content)
|
3
|
-
ActiveSupport::Notifications.publish ActiveAdmin::Application::BeforeLoadEvent, ActiveAdmin.application
|
4
|
-
eval(config_content)
|
5
|
-
ActiveSupport::Notifications.publish ActiveAdmin::Application::AfterLoadEvent, ActiveAdmin.application
|
6
|
-
Rails.application.reload_routes!
|
7
|
-
ActiveAdmin.application.namespaces.each &:reset_menu!
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
module ActiveAdminContentsRollback
|
12
|
-
def files
|
13
|
-
@files ||= {}
|
14
|
-
end
|
15
|
-
|
16
|
-
# Records the contents of a file the first time we are
|
17
|
-
# about to change it
|
18
|
-
def record(filename)
|
19
|
-
contents = File.read(filename) rescue nil
|
20
|
-
files[filename] = contents unless files.has_key? filename
|
21
|
-
end
|
22
|
-
|
23
|
-
# Rolls the recorded files back to their original states
|
24
|
-
def rollback!
|
25
|
-
files.each{ |file, contents| rollback_file(file, contents) }
|
26
|
-
@files = {}
|
27
|
-
end
|
28
|
-
|
29
|
-
# If the file originally had content, override the stuff on disk.
|
30
|
-
# Else, remove the file and its parent folder structure until Rails.root OR other files exist.
|
31
|
-
def rollback_file(file, contents)
|
32
|
-
if contents.present?
|
33
|
-
File.open(file, 'w') { |f| f << contents }
|
34
|
-
else
|
35
|
-
File.delete(file)
|
36
|
-
begin
|
37
|
-
dir = File.dirname(file)
|
38
|
-
until dir == Rails.root
|
39
|
-
Dir.rmdir(dir) # delete current folder
|
40
|
-
dir = dir.split('/')[0..-2].join('/') # select parent folder
|
41
|
-
end
|
42
|
-
rescue Errno::ENOTEMPTY # Directory not empty
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
World(ActiveAdminReloading)
|
49
|
-
World(ActiveAdminContentsRollback)
|
50
|
-
|
51
|
-
After do
|
52
|
-
rollback!
|
53
|
-
end
|
54
|
-
|
55
|
-
Given /^a(?:n? (index|show))? configuration of:$/ do |action, config_content|
|
56
|
-
load_aa_config(config_content)
|
57
|
-
|
58
|
-
case action
|
59
|
-
when 'index'
|
60
|
-
step 'I am logged in'
|
61
|
-
case resource = config_content.match(/ActiveAdmin\.register (\w+)/)[1]
|
62
|
-
when 'Post'
|
63
|
-
step 'I am on the index page for posts'
|
64
|
-
when 'Category'
|
65
|
-
step 'I am on the index page for categories'
|
66
|
-
else
|
67
|
-
raise "#{resource} is not supported"
|
68
|
-
end
|
69
|
-
when 'show'
|
70
|
-
case resource = config_content.match(/ActiveAdmin\.register (\w+)/)[1]
|
71
|
-
when 'Post'
|
72
|
-
step 'I am logged in'
|
73
|
-
step 'I am on the index page for posts'
|
74
|
-
step 'I follow "View"'
|
75
|
-
when 'Tag'
|
76
|
-
step 'I am logged in'
|
77
|
-
Tag.create!
|
78
|
-
visit admin_tag_path Tag.last
|
79
|
-
else
|
80
|
-
raise "#{resource} is not supported"
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
Given /^"([^"]*)" contains:$/ do |filename, contents|
|
86
|
-
path = Rails.root + filename
|
87
|
-
FileUtils.mkdir_p File.dirname path
|
88
|
-
record path
|
89
|
-
|
90
|
-
File.open(path, 'w+'){ |f| f << contents }
|
91
|
-
end
|
92
|
-
|
93
|
-
Given /^I add "([^"]*)" to the "([^"]*)" model$/ do |code, model_name|
|
94
|
-
path = File.join Rails.root, "app", "models", "#{model_name}.rb"
|
95
|
-
record path
|
96
|
-
|
97
|
-
str = File.read(path).gsub /^(class .+)$/, "\\1\n #{code}\n"
|
98
|
-
File.open(path, 'w+') { |f| f << str }
|
99
|
-
ActiveSupport::Dependencies.clear
|
100
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
Then /^I should see the default welcome message$/ do
|
2
|
-
step %{I should see "Welcome to Active Admin" within "#dashboard_default_message"}
|
3
|
-
end
|
4
|
-
|
5
|
-
Then /^I should not see the default welcome message$/ do
|
6
|
-
step %{I should not see "Welcome to Active Admin"}
|
7
|
-
end
|
8
|
-
|
9
|
-
Then /^I should see a dashboard widget "([^"]*)"$/ do |name|
|
10
|
-
expect(page).to have_css '.dashboard .panel h3', text: name
|
11
|
-
end
|
12
|
-
|
13
|
-
Then /^I should not see a dashboard widget "([^"]*)"$/ do |name|
|
14
|
-
expect(page).to_not have_css '.dashboard .panel h3', text: name
|
15
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
def create_user(name, type = 'User')
|
2
|
-
first_name, last_name = name.split(' ')
|
3
|
-
user = type.camelize.constantize.where(first_name: first_name, last_name: last_name).first_or_create(username: name.tr(' ', '').underscore)
|
4
|
-
end
|
5
|
-
|
6
|
-
Given /^(a|\d+)( published)?( unstarred|starred)? posts?(?: with the title "([^"]*)")?(?: and body "([^"]*)")?(?: written by "([^"]*)")?(?: in category "([^"]*)")? exists?$/ do |count, published, starred, title, body, user, category_name|
|
7
|
-
count = count == 'a' ? 1 : count.to_i
|
8
|
-
published = Time.now if published
|
9
|
-
starred = starred == " starred" if starred
|
10
|
-
author = create_user(user) if user
|
11
|
-
category = Category.where(name: category_name).first_or_create if category_name
|
12
|
-
title ||= "Hello World %i"
|
13
|
-
count.times do |i|
|
14
|
-
Post.create! title: title % i, body: body, author: author, published_date: published, custom_category_id: category.try(:id), starred: starred
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
Given /^a category named "([^"]*)" exists$/ do |name|
|
19
|
-
Category.create! name: name
|
20
|
-
end
|
21
|
-
|
22
|
-
Given /^a (user|publisher) named "([^"]*)" exists$/ do |type, name|
|
23
|
-
create_user name, type
|
24
|
-
end
|
25
|
-
|
26
|
-
Given /^a store named "([^"]*)" exists$/ do |name|
|
27
|
-
Store.create! name: name
|
28
|
-
end
|
29
|
-
|
30
|
-
Given /^I create a new post with the title "([^"]*)"$/ do |title|
|
31
|
-
first(:link, 'Posts').click
|
32
|
-
click_link "New Post"
|
33
|
-
fill_in 'post_title', with: title
|
34
|
-
click_button "Create Post"
|
35
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
Then /^I should see a select filter for "([^"]*)"$/ do |label|
|
2
|
-
expect(page).to have_css '.filter_select label', text: label
|
3
|
-
end
|
4
|
-
|
5
|
-
Then /^I should see a string filter for "([^"]*)"$/ do |label|
|
6
|
-
expect(page).to have_css '.filter_string label', text: label
|
7
|
-
end
|
8
|
-
|
9
|
-
Then /^I should see a date range filter for "([^"]*)"$/ do |label|
|
10
|
-
expect(page).to have_css '.filter_date_range label', text: label
|
11
|
-
end
|
12
|
-
|
13
|
-
Then /^I should see the following filters:$/ do |table|
|
14
|
-
table.rows_hash.each do |label, type|
|
15
|
-
step %{I should see a #{type} filter for "#{label}"}
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
Given(/^I add parameter "([^"]*)" with value "([^"]*)" to the URL$/) do |key, value|
|
20
|
-
url = page.current_url
|
21
|
-
separator = url.include?('?') ? '&' : '?'
|
22
|
-
visit url + separator + key.to_s + '=' + value.to_s
|
23
|
-
end
|
24
|
-
|
25
|
-
Then(/^I should( not)? have parameter "([^"]*)" with value "([^"]*)"$/) do |negative, key, value|
|
26
|
-
query = URI(page.current_url).query
|
27
|
-
if query.nil?
|
28
|
-
expect(negative).to eq true
|
29
|
-
else
|
30
|
-
params = Rack::Utils.parse_query query
|
31
|
-
expect(params[key]).to_not eq value if negative
|
32
|
-
expect(params[key]).to eq value unless negative
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
Then /^I should see current filter "([^"]*)" equal to "([^"]*)" with label "([^"]*)"$/ do |name, value, label|
|
37
|
-
expect(page).to have_css "li.current_filter_#{name} span", text: label
|
38
|
-
expect(page).to have_css "li.current_filter_#{name} b", text: value
|
39
|
-
end
|
40
|
-
|
41
|
-
Then /^I should see current filter "([^"]*)" equal to "([^"]*)"$/ do |name, value|
|
42
|
-
expect(page).to have_css "li.current_filter_#{name} b", text: value
|
43
|
-
end
|
44
|
-
|
45
|
-
Then /^I should see link "([^"]*)" in current filters/ do |label|
|
46
|
-
expect(page).to have_css "li.current_filter b a", text: label
|
47
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
Then /^I should see a flash with "([^"]*)"$/ do |text|
|
2
|
-
expect(page).to have_content text
|
3
|
-
end
|
4
|
-
|
5
|
-
Then /^I should see a successful create flash$/ do
|
6
|
-
expect(page).to have_css 'div.flash_notice', text: /was successfully created/
|
7
|
-
end
|
8
|
-
|
9
|
-
Then /^I should not see a successful create flash$/ do
|
10
|
-
expect(page).to_not have_css 'div.flash_notice', text: /was successfully created/
|
11
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
Then /^I should see the default footer$/ do
|
2
|
-
expect(page).to have_css '#footer', text: "Powered by Active Admin #{ActiveAdmin::VERSION}"
|
3
|
-
end
|
4
|
-
|
5
|
-
Then /^I should see the footer "([^"]*)"$/ do |footer|
|
6
|
-
expect(page).to have_css '#footer', text: footer
|
7
|
-
end
|
8
|
-
|
9
|
-
Then /^I should not see the footer "([^"]*)"$/ do |footer|
|
10
|
-
expect(page).to_not have_css '#footer', text: footer
|
11
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
require 'csv'
|
2
|
-
|
3
|
-
Then "I should see nicely formatted datetimes" do
|
4
|
-
expect(page.body).to match /\w+ \d{1,2}, \d{4} \d{2}:\d{2}/
|
5
|
-
end
|
6
|
-
|
7
|
-
Then /^I should( not)? see a link to download "([^"]*)"$/ do |negate, format|
|
8
|
-
method = negate ? :to_not : :to
|
9
|
-
expect(page).send method, have_css("#index_footer a", text: format)
|
10
|
-
end
|
11
|
-
|
12
|
-
# Check first rows of the displayed CSV.
|
13
|
-
Then /^I should download a CSV file with "([^"]*)" separator for "([^"]*)" containing:$/ do |sep, resource_name, table|
|
14
|
-
body = page.driver.response.body
|
15
|
-
content_type_header, content_disposition_header = %w[Content-Type Content-Disposition].map do |header_name|
|
16
|
-
page.response_headers[header_name]
|
17
|
-
end
|
18
|
-
expect(content_type_header).to eq 'text/csv; charset=utf-8'
|
19
|
-
expect(content_disposition_header).to match /\Aattachment; filename=".+?\.csv"\z/
|
20
|
-
|
21
|
-
begin
|
22
|
-
csv = CSV.parse(body, col_sep: sep)
|
23
|
-
table.raw.each_with_index do |expected_row, row_index|
|
24
|
-
expected_row.each_with_index do |expected_cell, col_index|
|
25
|
-
cell = csv.try(:[], row_index).try(:[], col_index)
|
26
|
-
if expected_cell.blank?
|
27
|
-
expect(cell).to eq nil
|
28
|
-
else
|
29
|
-
expect(cell || '').to match /#{expected_cell}/
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
rescue
|
34
|
-
puts "Expecting:"
|
35
|
-
p table.raw
|
36
|
-
puts "to match:"
|
37
|
-
p csv
|
38
|
-
raise $!
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
Then /^I should download a CSV file for "([^"]*)" containing:$/ do |resource_name, table|
|
43
|
-
step %{I should download a CSV file with "," separator for "#{resource_name}" containing:}, table
|
44
|
-
end
|
45
|
-
|
46
|
-
Then /^the CSV file should contain "([^"]*)" in quotes$/ do |text|
|
47
|
-
expect(page.driver.response.body).to match /"#{text}"/
|
48
|
-
end
|
49
|
-
|
50
|
-
Then /^the encoding of the CSV file should be "([^"]*)"$/ do |text|
|
51
|
-
expect(page.driver.response.body.encoding).to be Encoding.find(Encoding.aliases[text] || text)
|
52
|
-
end
|
53
|
-
|
54
|
-
Then /^access denied$/ do
|
55
|
-
expect(page).to have_content(I18n.t("active_admin.access_denied.message"))
|
56
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
Given /^String "([^"]*)" corresponds to "([^"]*)"$/ do |translation, key|
|
2
|
-
*seq, last_key = key.split('.')
|
3
|
-
result = seq.reverse.inject({last_key.to_sym => translation}) do |temp_result, nested_key|
|
4
|
-
{nested_key.to_sym => temp_result}
|
5
|
-
end
|
6
|
-
I18n.backend.store_translations :en, active_admin: result
|
7
|
-
end
|
8
|
-
|
9
|
-
When /^I set my locale to "([^"]*)"$/ do |lang|
|
10
|
-
I18n.locale = lang
|
11
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
Then /^I should( not)? see the scope "([^"]*)"( selected)?$/ do |negate, name, selected|
|
2
|
-
should = "I should#{' not' if negate}"
|
3
|
-
scope = ".scopes#{' .selected' if selected}"
|
4
|
-
step %{#{should} see "#{name}" within "#{scope}"}
|
5
|
-
end
|
6
|
-
|
7
|
-
Then /^I should see the scope "([^"]*)" not selected$/ do |name|
|
8
|
-
step %{I should see the scope "#{name}"}
|
9
|
-
expect(page).to_not have_css '.scopes .selected', text: name
|
10
|
-
end
|
11
|
-
|
12
|
-
Then /^I should see the scope "([^"]*)" with the count (\d+)$/ do |name, count|
|
13
|
-
name = name.tr(' ', '').underscore.downcase
|
14
|
-
step %{I should see "#{count}" within ".scopes .#{name} .count"}
|
15
|
-
end
|
16
|
-
|
17
|
-
Then /^I should see the scope with label "([^"]*)"$/ do |label|
|
18
|
-
expect(page).to have_link(label)
|
19
|
-
end
|
20
|
-
|
21
|
-
Then /^I should see the current scope with label "([^"]*)"$/ do |label|
|
22
|
-
expect(page).to have_css '.current_scope_name', text: label
|
23
|
-
end
|
24
|
-
|
25
|
-
Then /^I should see the scope "([^"]*)" with no count$/ do |name|
|
26
|
-
name = name.tr(" ", "").underscore.downcase
|
27
|
-
expect(page).to have_css ".scopes .#{name}"
|
28
|
-
expect(page).to_not have_css ".scopes .#{name} .count"
|
29
|
-
end
|
@@ -1,7 +0,0 @@
|
|
1
|
-
Then /^I should see an action item button "([^"]*)"$/ do |content|
|
2
|
-
expect(page).to have_css '.action_items a', text: content
|
3
|
-
end
|
4
|
-
|
5
|
-
Then /^I should not see an action item button "([^"]*)"$/ do |content|
|
6
|
-
expect(page).to_not have_css '.action_items', text: content
|
7
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
Then /^I should see a menu item for "([^"]*)"$/ do |name|
|
2
|
-
expect(page).to have_css '#tabs > li > a', text: name
|
3
|
-
end
|
4
|
-
|
5
|
-
Then /^I should not see a menu item for "([^"]*)"$/ do |name|
|
6
|
-
expect(page).to_not have_css '#tabs > li > a', text: name
|
7
|
-
end
|
8
|
-
|
9
|
-
Then /^I should see a nested menu item for "([^"]*)"$/ do |name|
|
10
|
-
expect(page).to have_css '#tabs > li > ul > li > a', text: name
|
11
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
Then /^I should not see pagination$/ do
|
2
|
-
expect(page).to_not have_css '.pagination'
|
3
|
-
end
|
4
|
-
|
5
|
-
Then /^I should see pagination with (\d+) pages$/ do |count|
|
6
|
-
expect(page).to have_css '.pagination span.page', count: count
|
7
|
-
end
|
8
|
-
|
9
|
-
Then /^I should see the pagination "Next" link/ do
|
10
|
-
expect(page).to have_css "a", text: "Next"
|
11
|
-
end
|
12
|
-
|
13
|
-
Then /^I should not see the pagination "Next" link/ do
|
14
|
-
expect(page).to_not have_css "a", text: "Next"
|
15
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
Then /^I should see a sidebar titled "([^"]*)"$/ do |title|
|
2
|
-
expect(page).to have_css '.sidebar_section h3', text: title
|
3
|
-
end
|
4
|
-
|
5
|
-
Then /^I should not see a sidebar titled "([^"]*)"$/ do |title|
|
6
|
-
expect(page).not_to have_css '.sidebar_section h3', text: title
|
7
|
-
end
|
8
|
-
|
9
|
-
Then(/^I should see a sidebar titled "(.*?)" above sidebar titled "(.*?)"$/) do |top_title, bottom_title|
|
10
|
-
expect(page).to have_css %Q(.sidebar_section:contains('#{top_title}') + .sidebar_section:contains('#{bottom_title}'))
|
11
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
Then /^I should see the site title "([^"]*)"$/ do |title|
|
2
|
-
expect(page).to have_css 'h1#site_title', text: title
|
3
|
-
end
|
4
|
-
|
5
|
-
Then /^I should not see the site title "([^"]*)"$/ do |title|
|
6
|
-
expect(page).to_not have_css 'h1#site_title', text: title
|
7
|
-
end
|
8
|
-
|
9
|
-
Then /^I should see the site title image "([^"]*)"$/ do |image|
|
10
|
-
img = page.find('h1#site_title img')
|
11
|
-
expect(img[:src]).to eq(image)
|
12
|
-
end
|
13
|
-
|
14
|
-
Then /^I should see the site title image linked to "([^"]*)"$/ do |url|
|
15
|
-
link = page.find('h1#site_title a')
|
16
|
-
expect(link[:href]).to eq(url)
|
17
|
-
end
|
@@ -1,8 +0,0 @@
|
|
1
|
-
Then /^the "([^"]*)" tab should be selected$/ do |name|
|
2
|
-
step %{I should see "#{name}" within "ul#tabs li.current"}
|
3
|
-
end
|
4
|
-
|
5
|
-
Then(/^I should see two tabs "(.*?)" and "(.*?)"$/) do |tab_1, tab_2|
|
6
|
-
expect(page).to have_link(tab_1)
|
7
|
-
expect(page).to have_link(tab_2)
|
8
|
-
end
|
@@ -1,116 +0,0 @@
|
|
1
|
-
Then /^I should see (\d+) ([\w]*) in the table$/ do |count, resource_type|
|
2
|
-
expect(page).to \
|
3
|
-
have_css("table.index_table tr > td:first-child", count: count.to_i)
|
4
|
-
end
|
5
|
-
|
6
|
-
# TODO: simplify this, if possible?
|
7
|
-
class HtmlTableToTextHelper
|
8
|
-
def initialize(html, table_css_selector = "table")
|
9
|
-
@html = html
|
10
|
-
@selector = table_css_selector
|
11
|
-
end
|
12
|
-
|
13
|
-
def to_array
|
14
|
-
rows = Nokogiri::HTML(@html).css("#{@selector} tr")
|
15
|
-
rows.map do |row|
|
16
|
-
row.css('th, td').map do |td|
|
17
|
-
cell_to_string(td)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def cell_to_string(td)
|
25
|
-
str = ""
|
26
|
-
input = td.css('input').last
|
27
|
-
|
28
|
-
if input
|
29
|
-
str << input_to_string(input)
|
30
|
-
end
|
31
|
-
|
32
|
-
str << td.content.strip.gsub("\n", ' ')
|
33
|
-
end
|
34
|
-
|
35
|
-
def input_to_string(input)
|
36
|
-
case input.attribute("type").value
|
37
|
-
when "checkbox"
|
38
|
-
if input.attribute("disabled")
|
39
|
-
"_"
|
40
|
-
else
|
41
|
-
if input.attribute("checked")
|
42
|
-
"[X]"
|
43
|
-
else
|
44
|
-
"[ ]"
|
45
|
-
end
|
46
|
-
end
|
47
|
-
when "text"
|
48
|
-
if input.attribute("value").present?
|
49
|
-
"[#{input.attribute("value")}]"
|
50
|
-
else
|
51
|
-
"[ ]"
|
52
|
-
end
|
53
|
-
when "submit"
|
54
|
-
input.attribute("value")
|
55
|
-
else
|
56
|
-
raise "I don't know what to do with #{input}"
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
module TableMatchHelper
|
62
|
-
# @param table [Array[Array]]
|
63
|
-
# @param expected_table [Array[Array[String]]]
|
64
|
-
# The expected_table values are String. They are converted to
|
65
|
-
# Regexp when they start and end with a '/'
|
66
|
-
# Example:
|
67
|
-
#
|
68
|
-
# assert_table_match(
|
69
|
-
# [["Name", "Date"], ["Philippe", "Feb 08"]],
|
70
|
-
# [["Name", "Date"], ["Philippe", "/\w{3} \d{2}/"]]
|
71
|
-
# )
|
72
|
-
def assert_tables_match(table, expected_table)
|
73
|
-
expected_table.each_index do |row_index|
|
74
|
-
expected_table[row_index].each_index do |column_index|
|
75
|
-
expected_cell = expected_table[row_index][column_index]
|
76
|
-
cell = table.try(:[], row_index).try(:[], column_index)
|
77
|
-
begin
|
78
|
-
assert_cells_match(cell, expected_cell)
|
79
|
-
rescue
|
80
|
-
puts "Cell at line #{row_index} and column #{column_index}: #{cell.inspect} does not match #{expected_cell.inspect}"
|
81
|
-
puts "Expecting:"
|
82
|
-
table.each { |row| puts row.inspect }
|
83
|
-
puts "to match:"
|
84
|
-
expected_table.each { |row| puts row.inspect }
|
85
|
-
raise $!
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
def assert_cells_match(cell, expected_cell)
|
92
|
-
if expected_cell =~ /^\/.*\/$/
|
93
|
-
expect(cell).to match /#{expected_cell[1..-2]}/
|
94
|
-
else
|
95
|
-
expect((cell || "").strip).to eq expected_cell
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
World(TableMatchHelper)
|
101
|
-
|
102
|
-
# Usage:
|
103
|
-
#
|
104
|
-
# I should see the "invoices" table:
|
105
|
-
# | Invoice # | Date | Total Amount |
|
106
|
-
# | /\d+/ | 27/01/12 | $30.00 |
|
107
|
-
# | /\d+/ | 12/02/12 | $25.00 |
|
108
|
-
#
|
109
|
-
Then /^I should see the "([^"]*)" table:$/ do |table_id, expected_table|
|
110
|
-
expect(page).to have_css "table##{table_id}"
|
111
|
-
|
112
|
-
assert_tables_match(
|
113
|
-
HtmlTableToTextHelper.new(page.body, "table##{table_id}").to_array,
|
114
|
-
expected_table.raw
|
115
|
-
)
|
116
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
def ensure_user_created(email)
|
2
|
-
user = AdminUser.where(email: email).first_or_create(password: 'password', password_confirmation: 'password')
|
3
|
-
|
4
|
-
unless user.persisted?
|
5
|
-
raise "Could not create user #{email}: #{user.errors.full_messages}"
|
6
|
-
end
|
7
|
-
user
|
8
|
-
end
|
9
|
-
|
10
|
-
Given /^(?:I am logged|log) out$/ do
|
11
|
-
click_link 'Logout' if page.all(:css, "a", text: 'Logout').any?
|
12
|
-
end
|
13
|
-
|
14
|
-
Given /^I am logged in$/ do
|
15
|
-
step 'log out'
|
16
|
-
login_as ensure_user_created 'admin@example.com'
|
17
|
-
end
|
18
|
-
|
19
|
-
# only for @requires-reloading scenario
|
20
|
-
Given /^I am logged in with capybara$/ do
|
21
|
-
ensure_user_created 'admin@example.com'
|
22
|
-
step 'log out'
|
23
|
-
|
24
|
-
visit new_admin_user_session_path
|
25
|
-
fill_in 'Email', with: 'admin@example.com'
|
26
|
-
fill_in 'Password', with: 'password'
|
27
|
-
click_button 'Login'
|
28
|
-
end
|
29
|
-
|
30
|
-
Given /^an admin user "([^"]*)" exists$/ do |email|
|
31
|
-
ensure_user_created(email)
|
32
|
-
end
|
33
|
-
|
34
|
-
Given /^"([^"]*)" requests a password reset with token "([^"]*)"( but it expires)?$/ do |email, token, expired|
|
35
|
-
visit new_admin_user_password_path
|
36
|
-
fill_in 'Email', with: email
|
37
|
-
allow(Devise).to receive(:friendly_token).and_return(token)
|
38
|
-
click_button "Reset My Password"
|
39
|
-
|
40
|
-
AdminUser.where(email: email).first.update_attribute :reset_password_sent_at, 1.month.ago if expired
|
41
|
-
end
|
42
|
-
|
43
|
-
Given /^override locale "([^"]*)" with "([^"]*)"$/ do |path, value|
|
44
|
-
keys_value = path.split('.') + [value]
|
45
|
-
locale_hash = keys_value.reverse.inject{|a, n| {n=>a}}
|
46
|
-
I18n.available_locales
|
47
|
-
I18n.backend.store_translations(I18n.locale, locale_hash)
|
48
|
-
end
|
49
|
-
|
50
|
-
When /^I fill in the password field with "([^"]*)"$/ do |password|
|
51
|
-
fill_in 'admin_user_password', with: password
|
52
|
-
end
|