yousty-activeadmin 1.0.0.pre
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +43 -0
- data/.travis.yml +8 -0
- data/.yardopts +9 -0
- data/CHANGELOG.md +1056 -0
- data/CONTRIBUTING.md +110 -0
- data/Gemfile +41 -0
- data/Guardfile +7 -0
- data/LICENSE +25 -0
- data/README.md +67 -0
- data/Rakefile +25 -0
- data/activeadmin.gemspec +33 -0
- data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
- data/app/assets/images/active_admin/index_list_icons/block_icon.svg +10 -0
- data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +4 -0
- data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +13 -0
- data/app/assets/images/active_admin/index_list_icons/table_icon.svg +3 -0
- data/app/assets/images/active_admin/loading.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
- data/app/assets/images/active_admin/orderable.png +0 -0
- data/app/assets/javascripts/active_admin/application.js.coffee +6 -0
- data/app/assets/javascripts/active_admin/base.js.coffee +5 -0
- data/app/assets/javascripts/active_admin/components/application.js.coffee +23 -0
- data/app/assets/javascripts/active_admin/components/batch_actions.js.coffee +26 -0
- data/app/assets/javascripts/active_admin/components/has_many.js.coffee +41 -0
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +37 -0
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +105 -0
- data/app/assets/javascripts/active_admin/lib/popover.js.coffee +97 -0
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +25 -0
- data/app/assets/stylesheets/active_admin/_base.css.scss +41 -0
- data/app/assets/stylesheets/active_admin/_forms.css.scss +293 -0
- data/app/assets/stylesheets/active_admin/_header.css.scss +152 -0
- data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
- data/app/assets/stylesheets/active_admin/_typography.css.scss +100 -0
- data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +11 -0
- data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +31 -0
- data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
- data/app/assets/stylesheets/active_admin/components/_buttons.scss +11 -0
- data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
- data/app/assets/stylesheets/active_admin/components/_comments.css.scss +41 -0
- data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +123 -0
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +151 -0
- data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +39 -0
- data/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
- data/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
- data/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
- data/app/assets/stylesheets/active_admin/components/_pagination.scss +34 -0
- data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
- data/app/assets/stylesheets/active_admin/components/_popovers.css.scss +123 -0
- data/app/assets/stylesheets/active_admin/components/_scopes.scss +10 -0
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +12 -0
- data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +95 -0
- data/app/assets/stylesheets/active_admin/components/_tables.css.scss +110 -0
- data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +11 -0
- data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +66 -0
- data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +38 -0
- data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +21 -0
- data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
- data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
- data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +36 -0
- data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +22 -0
- data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
- data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +26 -0
- data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +32 -0
- data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
- data/app/assets/stylesheets/active_admin/print.css.scss +284 -0
- data/app/assets/stylesheets/active_admin/structure/_footer.scss +14 -0
- data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +29 -0
- data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +43 -0
- data/app/views/active_admin/dashboard/index.html.arb +1 -0
- data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/active_admin/devise/passwords/edit.html.erb +19 -0
- data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
- data/app/views/active_admin/devise/sessions/new.html.erb +20 -0
- data/app/views/active_admin/devise/shared/_links.erb +27 -0
- data/app/views/active_admin/devise/unlocks/new.html.erb +14 -0
- data/app/views/active_admin/page/index.html.arb +1 -0
- data/app/views/active_admin/resource/edit.html.arb +1 -0
- data/app/views/active_admin/resource/index.csv.erb +17 -0
- data/app/views/active_admin/resource/index.html.arb +1 -0
- data/app/views/active_admin/resource/new.html.arb +1 -0
- data/app/views/active_admin/resource/show.html.arb +1 -0
- data/app/views/layouts/active_admin.html.arb +1 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +37 -0
- data/config/locales/bg.yml +101 -0
- data/config/locales/ca.yml +98 -0
- data/config/locales/cs.yml +105 -0
- data/config/locales/da.yml +102 -0
- data/config/locales/de-CH.yml +117 -0
- data/config/locales/de.yml +119 -0
- data/config/locales/en-GB.yml +91 -0
- data/config/locales/en.yml +110 -0
- data/config/locales/es.yml +106 -0
- data/config/locales/es_MX.yml +104 -0
- data/config/locales/fi.yml +109 -0
- data/config/locales/fr.yml +97 -0
- data/config/locales/he.yml +91 -0
- data/config/locales/hr.yml +93 -0
- data/config/locales/hu.yml +92 -0
- data/config/locales/it.yml +89 -0
- data/config/locales/ja.yml +104 -0
- data/config/locales/ko.yml +84 -0
- data/config/locales/lt.yml +90 -0
- data/config/locales/lv.yml +89 -0
- data/config/locales/nl.yml +90 -0
- data/config/locales/no-NB.yml +85 -0
- data/config/locales/pl.yml +93 -0
- data/config/locales/pt-BR.yml +90 -0
- data/config/locales/pt-PT.yml +89 -0
- data/config/locales/ro.yml +93 -0
- data/config/locales/ru.yml +103 -0
- data/config/locales/sv-SE.yml +89 -0
- data/config/locales/tr.yml +90 -0
- data/config/locales/uk.yml +100 -0
- data/config/locales/vi.yml +90 -0
- data/config/locales/zh-CN.yml +90 -0
- data/config/locales/zh-TW.yml +90 -0
- data/cucumber.yml +3 -0
- data/docs/0-installation.md +84 -0
- data/docs/1-general-configuration.md +137 -0
- data/docs/10-custom-pages.md +98 -0
- data/docs/11-decorators.md +66 -0
- data/docs/12-arbre-components.md +144 -0
- data/docs/13-authorization-adapter.md +227 -0
- data/docs/2-resource-customization.md +340 -0
- data/docs/3-index-pages/create-an-index.md +29 -0
- data/docs/3-index-pages/index-as-block.md +21 -0
- data/docs/3-index-pages/index-as-blog.md +71 -0
- data/docs/3-index-pages/index-as-grid.md +29 -0
- data/docs/3-index-pages/index-as-table.md +154 -0
- data/docs/3-index-pages.md +206 -0
- data/docs/4-csv-format.md +39 -0
- data/docs/5-forms.md +110 -0
- data/docs/6-show-pages.md +77 -0
- data/docs/7-sidebars.md +42 -0
- data/docs/8-custom-actions.md +139 -0
- data/docs/9-batch-actions.md +155 -0
- data/features/action_item.feature +73 -0
- data/features/authorization.feature +64 -0
- data/features/authorization_cancan.feature +52 -0
- data/features/belongs_to.feature +63 -0
- data/features/breadcrumb.feature +27 -0
- data/features/comments/commenting.feature +140 -0
- data/features/comments/viewing_index.feature +19 -0
- data/features/dashboard.feature +16 -0
- data/features/decorators.feature +41 -0
- data/features/development_reloading.feature +31 -0
- data/features/edit_page.feature +127 -0
- data/features/favicon.feature +20 -0
- data/features/first_boot.feature +16 -0
- data/features/global_navigation.feature +29 -0
- data/features/i18n.feature +38 -0
- data/features/index/batch_actions.feature +123 -0
- data/features/index/filters.feature +138 -0
- data/features/index/format_as_csv.feature +117 -0
- data/features/index/formats.feature +66 -0
- data/features/index/index_as_block.feature +15 -0
- data/features/index/index_as_blog.feature +69 -0
- data/features/index/index_as_grid.feature +45 -0
- data/features/index/index_as_table.feature +195 -0
- data/features/index/index_blank_slate.feature +61 -0
- data/features/index/index_parameters.feature +75 -0
- data/features/index/index_scope_to.feature +56 -0
- data/features/index/index_scopes.feature +251 -0
- data/features/index/page_title.feature +30 -0
- data/features/index/pagination.feature +59 -0
- data/features/index/switch_index_view.feature +73 -0
- data/features/menu.feature +53 -0
- data/features/new_page.feature +119 -0
- data/features/registering_assets.feature +35 -0
- data/features/registering_pages.feature +148 -0
- data/features/registering_resources.feature +33 -0
- data/features/root_to.feature +17 -0
- data/features/show/default_content.feature +43 -0
- data/features/show/page_title.feature +47 -0
- data/features/sidebar_sections.feature +198 -0
- data/features/site_title.feature +47 -0
- data/features/specifying_actions.feature +93 -0
- data/features/step_definitions/action_item_steps.rb +7 -0
- data/features/step_definitions/action_link_steps.rb +7 -0
- data/features/step_definitions/additional_web_steps.rb +82 -0
- data/features/step_definitions/asset_steps.rb +15 -0
- data/features/step_definitions/attribute_steps.rb +13 -0
- data/features/step_definitions/batch_action_steps.rb +55 -0
- data/features/step_definitions/breadcrumb_steps.rb +3 -0
- data/features/step_definitions/comment_steps.rb +12 -0
- data/features/step_definitions/configuration_steps.rb +100 -0
- data/features/step_definitions/dashboard_steps.rb +15 -0
- data/features/step_definitions/factory_steps.rb +34 -0
- data/features/step_definitions/filter_steps.rb +17 -0
- data/features/step_definitions/flash_steps.rb +11 -0
- data/features/step_definitions/format_steps.rb +45 -0
- data/features/step_definitions/i18n_steps.rb +3 -0
- data/features/step_definitions/index_scope_steps.rb +21 -0
- data/features/step_definitions/index_views_steps.rb +3 -0
- data/features/step_definitions/layout_steps.rb +3 -0
- data/features/step_definitions/member_link_steps.rb +7 -0
- data/features/step_definitions/menu_steps.rb +11 -0
- data/features/step_definitions/pagination_steps.rb +8 -0
- data/features/step_definitions/sidebar_steps.rb +8 -0
- data/features/step_definitions/site_title_steps.rb +15 -0
- data/features/step_definitions/symbol_leak_steps.rb +3 -0
- data/features/step_definitions/tab_steps.rb +3 -0
- data/features/step_definitions/table_steps.rb +119 -0
- data/features/step_definitions/user_steps.rb +39 -0
- data/features/step_definitions/web_steps.rb +86 -0
- data/features/sti_resource.feature +73 -0
- data/features/support/env.rb +112 -0
- data/features/support/paths.rb +71 -0
- data/features/support/selectors.rb +45 -0
- data/features/symbol_leak.feature +35 -0
- data/features/users/logging_in.feature +34 -0
- data/features/users/logging_out.feature +13 -0
- data/features/users/resetting_password.feature +34 -0
- data/lib/active_admin/abstract_view_factory.rb +95 -0
- data/lib/active_admin/application.rb +242 -0
- data/lib/active_admin/asset_registration.rb +29 -0
- data/lib/active_admin/authorization_adapter.rb +132 -0
- data/lib/active_admin/base_controller/authorization.rb +151 -0
- data/lib/active_admin/base_controller/menu.rb +34 -0
- data/lib/active_admin/base_controller.rb +78 -0
- data/lib/active_admin/batch_actions/controller.rb +24 -0
- data/lib/active_admin/batch_actions/resource_extension.rb +127 -0
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +35 -0
- data/lib/active_admin/batch_actions/views/batch_action_popover.rb +28 -0
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +66 -0
- data/lib/active_admin/batch_actions/views/selection_cells.rb +37 -0
- data/lib/active_admin/batch_actions.rb +17 -0
- data/lib/active_admin/callbacks.rb +87 -0
- data/lib/active_admin/cancan_adapter.rb +40 -0
- data/lib/active_admin/component.rb +5 -0
- data/lib/active_admin/controller_action.rb +12 -0
- data/lib/active_admin/csv_builder.rb +49 -0
- data/lib/active_admin/deprecation.rb +36 -0
- data/lib/active_admin/devise.rb +70 -0
- data/lib/active_admin/dsl.rb +166 -0
- data/lib/active_admin/engine.rb +7 -0
- data/lib/active_admin/event.rb +33 -0
- data/lib/active_admin/filters/dsl.rb +21 -0
- data/lib/active_admin/filters/forms.rb +89 -0
- data/lib/active_admin/filters/formtastic_addons.rb +70 -0
- data/lib/active_admin/filters/resource_extension.rb +136 -0
- data/lib/active_admin/filters.rb +9 -0
- data/lib/active_admin/form_builder.rb +152 -0
- data/lib/active_admin/helpers/collection.rb +23 -0
- data/lib/active_admin/helpers/optional_display.rb +38 -0
- data/lib/active_admin/helpers/scope_chain.rb +23 -0
- data/lib/active_admin/helpers/settings.rb +108 -0
- data/lib/active_admin/iconic/icons.rb +142 -0
- data/lib/active_admin/iconic.rb +51 -0
- data/lib/active_admin/inputs/datepicker_input.rb +20 -0
- data/lib/active_admin/inputs/filter_base/search_method_select.rb +73 -0
- data/lib/active_admin/inputs/filter_base.rb +33 -0
- data/lib/active_admin/inputs/filter_boolean_input.rb +32 -0
- data/lib/active_admin/inputs/filter_check_boxes_input.rb +51 -0
- data/lib/active_admin/inputs/filter_date_range_input.rb +34 -0
- data/lib/active_admin/inputs/filter_numeric_input.rb +10 -0
- data/lib/active_admin/inputs/filter_select_input.rb +61 -0
- data/lib/active_admin/inputs/filter_string_input.rb +24 -0
- data/lib/active_admin/inputs.rb +15 -0
- data/lib/active_admin/menu.rb +107 -0
- data/lib/active_admin/menu_collection.rb +96 -0
- data/lib/active_admin/menu_item.rb +97 -0
- data/lib/active_admin/namespace.rb +224 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +39 -0
- data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +14 -0
- data/lib/active_admin/orm/active_record/comments/resource_helper.rb +17 -0
- data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +23 -0
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +75 -0
- data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
- data/lib/active_admin/orm/active_record/comments.rb +84 -0
- data/lib/active_admin/orm/active_record.rb +3 -0
- data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
- data/lib/active_admin/orm/mongoid.rb +1 -0
- data/lib/active_admin/page.rb +88 -0
- data/lib/active_admin/page_controller.rb +29 -0
- data/lib/active_admin/page_dsl.rb +28 -0
- data/lib/active_admin/page_presenter.rb +32 -0
- data/lib/active_admin/resource/action_items.rb +91 -0
- data/lib/active_admin/resource/belongs_to.rb +36 -0
- data/lib/active_admin/resource/controllers.rb +18 -0
- data/lib/active_admin/resource/menu.rb +64 -0
- data/lib/active_admin/resource/naming.rb +84 -0
- data/lib/active_admin/resource/page_presenters.rb +82 -0
- data/lib/active_admin/resource/pagination.rb +19 -0
- data/lib/active_admin/resource/routes.rb +99 -0
- data/lib/active_admin/resource/scope_to.rb +74 -0
- data/lib/active_admin/resource/scopes.rb +50 -0
- data/lib/active_admin/resource/sidebars.rb +27 -0
- data/lib/active_admin/resource.rb +153 -0
- data/lib/active_admin/resource_collection.rb +42 -0
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/data_access.rb +298 -0
- data/lib/active_admin/resource_controller/decorators.rb +20 -0
- data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
- data/lib/active_admin/resource_controller/scoping.rb +31 -0
- data/lib/active_admin/resource_controller/sidebars.rb +18 -0
- data/lib/active_admin/resource_controller.rb +50 -0
- data/lib/active_admin/resource_dsl.rb +134 -0
- data/lib/active_admin/router.rb +106 -0
- data/lib/active_admin/scope.rb +57 -0
- data/lib/active_admin/sidebar_section.rb +37 -0
- data/lib/active_admin/version.rb +3 -0
- data/lib/active_admin/view_factory.rb +27 -0
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
- data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +34 -0
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +26 -0
- data/lib/active_admin/view_helpers/display_helper.rb +49 -0
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +49 -0
- data/lib/active_admin/view_helpers/fields_for.rb +50 -0
- data/lib/active_admin/view_helpers/flash_helper.rb +13 -0
- data/lib/active_admin/view_helpers/form_helper.rb +24 -0
- data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +93 -0
- data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
- data/lib/active_admin/view_helpers/title_helper.rb +11 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
- data/lib/active_admin/view_helpers.rb +21 -0
- data/lib/active_admin/views/action_items.rb +17 -0
- data/lib/active_admin/views/components/action_list_popover.rb +29 -0
- data/lib/active_admin/views/components/attributes_table.rb +103 -0
- data/lib/active_admin/views/components/blank_slate.rb +17 -0
- data/lib/active_admin/views/components/columns.rb +150 -0
- data/lib/active_admin/views/components/dropdown_menu.rb +73 -0
- data/lib/active_admin/views/components/index_list.rb +68 -0
- data/lib/active_admin/views/components/paginated_collection.rb +125 -0
- data/lib/active_admin/views/components/panel.rb +34 -0
- data/lib/active_admin/views/components/popover.rb +27 -0
- data/lib/active_admin/views/components/scopes.rb +66 -0
- data/lib/active_admin/views/components/sidebar_section.rb +28 -0
- data/lib/active_admin/views/components/site_title.rb +55 -0
- data/lib/active_admin/views/components/status_tag.rb +56 -0
- data/lib/active_admin/views/components/table_for.rb +191 -0
- data/lib/active_admin/views/footer.rb +20 -0
- data/lib/active_admin/views/header.rb +32 -0
- data/lib/active_admin/views/index_as_block.rb +36 -0
- data/lib/active_admin/views/index_as_blog.rb +156 -0
- data/lib/active_admin/views/index_as_grid.rb +80 -0
- data/lib/active_admin/views/index_as_table.rb +264 -0
- data/lib/active_admin/views/pages/base.rb +139 -0
- data/lib/active_admin/views/pages/form.rb +51 -0
- data/lib/active_admin/views/pages/index.rb +147 -0
- data/lib/active_admin/views/pages/layout.rb +26 -0
- data/lib/active_admin/views/pages/page.rb +30 -0
- data/lib/active_admin/views/pages/show.rb +59 -0
- data/lib/active_admin/views/tabbed_navigation.rb +62 -0
- data/lib/active_admin/views/title_bar.rb +53 -0
- data/lib/active_admin/views.rb +8 -0
- data/lib/active_admin.rb +125 -0
- data/lib/activeadmin.rb +1 -0
- data/lib/generators/active_admin/assets/assets_generator.rb +16 -0
- data/lib/generators/active_admin/assets/templates/active_admin.css.scss +17 -0
- data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +86 -0
- data/lib/generators/active_admin/install/install_generator.rb +46 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +235 -0
- data/lib/generators/active_admin/install/templates/admin_user.rb.erb +27 -0
- data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
- data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +19 -0
- data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
- data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
- data/lib/ransack_ext.rb +12 -0
- data/script/local +44 -0
- data/script/use_rails +53 -0
- data/spec/integration/default_namespace_spec.rb +61 -0
- data/spec/integration/javascript_spec.rb +20 -0
- data/spec/integration/memory_spec.rb +29 -0
- data/spec/integration/stylesheets_spec.rb +41 -0
- data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
- data/spec/javascripts/coffeescripts/jquery.aa.popover-spec.js.coffee +82 -0
- data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
- data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +60 -0
- data/spec/javascripts/compiled/jquery.aa.popover-spec.js +106 -0
- data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +37 -0
- data/spec/javascripts/fixtures/checkboxes.html +9 -0
- data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
- data/spec/javascripts/helpers/SpecHelper.js +3 -0
- data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +108 -0
- data/spec/javascripts/helpers/vendor/jasmine-jquery.js +288 -0
- data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +2915 -0
- data/spec/javascripts/support/jasmine.yml +74 -0
- data/spec/javascripts/support/jasmine_config.rb +23 -0
- data/spec/javascripts/support/jasmine_runner.rb +32 -0
- data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +34 -0
- data/spec/javascripts/support/jquery.min.js +4 -0
- data/spec/spec_helper.rb +175 -0
- data/spec/spec_helper_without_rails.rb +16 -0
- data/spec/support/deferred_garbage_collection.rb +19 -0
- data/spec/support/detect_rails_version.rb +42 -0
- data/spec/support/integration_example_group.rb +31 -0
- data/spec/support/jslint.yml +80 -0
- data/spec/support/rails_template.rb +111 -0
- data/spec/support/rails_template_with_data.rb +59 -0
- data/spec/support/templates/admin/stores.rb +11 -0
- data/spec/support/templates/cucumber.rb +24 -0
- data/spec/support/templates/cucumber_with_reloading.rb +5 -0
- data/spec/support/templates/en.yml +8 -0
- data/spec/support/templates/post_decorator.rb +53 -0
- data/spec/unit/abstract_view_factory_spec.rb +79 -0
- data/spec/unit/action_builder_spec.rb +126 -0
- data/spec/unit/active_admin_spec.rb +11 -0
- data/spec/unit/application_spec.rb +141 -0
- data/spec/unit/asset_registration_spec.rb +52 -0
- data/spec/unit/authorization/authorization_adapter_spec.rb +61 -0
- data/spec/unit/authorization/controller_authorization_spec.rb +39 -0
- data/spec/unit/auto_link_spec.rb +32 -0
- data/spec/unit/batch_actions/resource_spec.rb +91 -0
- data/spec/unit/batch_actions/settings_spec.rb +61 -0
- data/spec/unit/belongs_to_spec.rb +42 -0
- data/spec/unit/cancan_adapter_spec.rb +43 -0
- data/spec/unit/comments_spec.rb +106 -0
- data/spec/unit/component_spec.rb +18 -0
- data/spec/unit/config_shared_examples.rb +59 -0
- data/spec/unit/controller_filters_spec.rb +32 -0
- data/spec/unit/csv_builder_spec.rb +103 -0
- data/spec/unit/devise_spec.rb +116 -0
- data/spec/unit/dsl_spec.rb +61 -0
- data/spec/unit/event_spec.rb +47 -0
- data/spec/unit/filters/filter_form_builder_spec.rb +423 -0
- data/spec/unit/filters/resource_spec.rb +119 -0
- data/spec/unit/form_builder_spec.rb +514 -0
- data/spec/unit/generators/install_spec.rb +23 -0
- data/spec/unit/helpers/collection_spec.rb +65 -0
- data/spec/unit/helpers/scope_chain_spec.rb +36 -0
- data/spec/unit/helpers/settings_spec.rb +30 -0
- data/spec/unit/menu_collection_spec.rb +62 -0
- data/spec/unit/menu_item_spec.rb +143 -0
- data/spec/unit/menu_spec.rb +71 -0
- data/spec/unit/namespace/authorization_spec.rb +27 -0
- data/spec/unit/namespace/register_page_spec.rb +74 -0
- data/spec/unit/namespace/register_resource_spec.rb +163 -0
- data/spec/unit/namespace_spec.rb +103 -0
- data/spec/unit/page_controller_spec.rb +5 -0
- data/spec/unit/page_spec.rb +72 -0
- data/spec/unit/pretty_format_spec.rb +35 -0
- data/spec/unit/resource/action_items_spec.rb +62 -0
- data/spec/unit/resource/menu_spec.rb +18 -0
- data/spec/unit/resource/naming_spec.rb +122 -0
- data/spec/unit/resource/page_presenters_spec.rb +44 -0
- data/spec/unit/resource/pagination_spec.rb +38 -0
- data/spec/unit/resource/routes_spec.rb +73 -0
- data/spec/unit/resource/scopes_spec.rb +43 -0
- data/spec/unit/resource/sidebars_spec.rb +43 -0
- data/spec/unit/resource_collection_spec.rb +160 -0
- data/spec/unit/resource_controller/data_access_spec.rb +73 -0
- data/spec/unit/resource_controller/sidebars_spec.rb +46 -0
- data/spec/unit/resource_controller_spec.rb +265 -0
- data/spec/unit/resource_registration_spec.rb +56 -0
- data/spec/unit/resource_spec.rb +243 -0
- data/spec/unit/routing_spec.rb +172 -0
- data/spec/unit/scope_spec.rb +108 -0
- data/spec/unit/settings_spec.rb +88 -0
- data/spec/unit/view_factory_spec.rb +21 -0
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +149 -0
- data/spec/unit/view_helpers/display_name_spec.rb +41 -0
- data/spec/unit/view_helpers/download_format_links_helper_spec.rb +39 -0
- data/spec/unit/view_helpers/fields_for_spec.rb +50 -0
- data/spec/unit/view_helpers/form_helper_spec.rb +56 -0
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +101 -0
- data/spec/unit/views/components/action_list_popover_spec.rb +30 -0
- data/spec/unit/views/components/attributes_table_spec.rb +230 -0
- data/spec/unit/views/components/batch_action_popover_spec.rb +33 -0
- data/spec/unit/views/components/blank_slate_spec.rb +17 -0
- data/spec/unit/views/components/columns_spec.rb +142 -0
- data/spec/unit/views/components/index_list_spec.rb +32 -0
- data/spec/unit/views/components/paginated_collection_spec.rb +227 -0
- data/spec/unit/views/components/panel_spec.rb +51 -0
- data/spec/unit/views/components/popover_spec.rb +33 -0
- data/spec/unit/views/components/sidebar_section_spec.rb +37 -0
- data/spec/unit/views/components/site_title_spec.rb +78 -0
- data/spec/unit/views/components/status_tag_spec.rb +95 -0
- data/spec/unit/views/components/table_for_spec.rb +201 -0
- data/spec/unit/views/pages/form_spec.rb +35 -0
- data/spec/unit/views/pages/layout_spec.rb +63 -0
- data/spec/unit/views/pages/show_spec.rb +20 -0
- data/spec/unit/views/tabbed_navigation_spec.rb +149 -0
- data/tasks/docs.rake +37 -0
- data/tasks/js.rake +32 -0
- data/tasks/parallel_tests.rake +60 -0
- data/tasks/test.rake +79 -0
- data/tasks/yard.rake +7 -0
- metadata +896 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
Feature: Specifying Actions
|
|
2
|
+
|
|
3
|
+
Specifying which actions to allow on my resource
|
|
4
|
+
|
|
5
|
+
Scenario: Only creating the index action
|
|
6
|
+
Given a configuration of:
|
|
7
|
+
"""
|
|
8
|
+
ActiveAdmin.register Post do
|
|
9
|
+
actions :index
|
|
10
|
+
index do
|
|
11
|
+
column do |post|
|
|
12
|
+
link_to "View", "/admin/posts/1"
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
"""
|
|
17
|
+
And I am logged in
|
|
18
|
+
And a post with the title "Hello World" exists
|
|
19
|
+
When I am on the index page for posts
|
|
20
|
+
Then an "ActionController::RoutingError" exception should be raised when I follow "View"
|
|
21
|
+
|
|
22
|
+
Scenario: Specify a custom collection action with template
|
|
23
|
+
Given a configuration of:
|
|
24
|
+
"""
|
|
25
|
+
ActiveAdmin.register Post do
|
|
26
|
+
action_item(:only => :index) do
|
|
27
|
+
link_to('Import Posts', import_admin_posts_path)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
collection_action :import
|
|
31
|
+
end
|
|
32
|
+
"""
|
|
33
|
+
Given "app/views/admin/posts/import.html.arb" contains:
|
|
34
|
+
"""
|
|
35
|
+
para "We are currently working on this feature..."
|
|
36
|
+
"""
|
|
37
|
+
And I am logged in
|
|
38
|
+
When I am on the index page for posts
|
|
39
|
+
And I follow "Import"
|
|
40
|
+
Then I should see "We are currently working on this feature"
|
|
41
|
+
|
|
42
|
+
Scenario: Specify a custom member action with template
|
|
43
|
+
Given a configuration of:
|
|
44
|
+
"""
|
|
45
|
+
ActiveAdmin.register Post do
|
|
46
|
+
action_item(:only => :show) do
|
|
47
|
+
link_to('Review', review_admin_post_path)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
member_action :review do
|
|
51
|
+
@post = Post.find(params[:id])
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
"""
|
|
55
|
+
Given "app/views/admin/posts/review.html.erb" contains:
|
|
56
|
+
"""
|
|
57
|
+
<h1>Review: <%= @post.title %></h1>
|
|
58
|
+
"""
|
|
59
|
+
And I am logged in
|
|
60
|
+
And a post with the title "Hello World" exists
|
|
61
|
+
When I am on the index page for posts
|
|
62
|
+
And I follow "View"
|
|
63
|
+
And I follow "Review"
|
|
64
|
+
Then I should see "Review: Hello World"
|
|
65
|
+
And I should see the page title "Review"
|
|
66
|
+
And I should see the Active Admin layout
|
|
67
|
+
|
|
68
|
+
Scenario: Specify a custom member action with template using arb
|
|
69
|
+
Given a configuration of:
|
|
70
|
+
"""
|
|
71
|
+
ActiveAdmin.register Post do
|
|
72
|
+
action_item(:only => :show) do
|
|
73
|
+
link_to('Review', review_admin_post_path)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
member_action :review do
|
|
77
|
+
@post = Post.find(params[:id])
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
"""
|
|
81
|
+
Given "app/views/admin/posts/review.html.arb" contains:
|
|
82
|
+
"""
|
|
83
|
+
h1 "Review: #{@post.title}"
|
|
84
|
+
"""
|
|
85
|
+
And I am logged in
|
|
86
|
+
And a post with the title "Hello World" exists
|
|
87
|
+
When I am on the index page for posts
|
|
88
|
+
And I follow "View"
|
|
89
|
+
And I follow "Review"
|
|
90
|
+
Then I should see "Review: Hello World"
|
|
91
|
+
And I should see the page title "Review"
|
|
92
|
+
And I should see the Active Admin layout
|
|
93
|
+
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
Then /^I should see a table header with "([^"]*)"$/ do |content|
|
|
2
|
+
page.should have_xpath('//th', :text => content)
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^I should not see a table header with "([^"]*)"$/ do |content|
|
|
6
|
+
page.should_not have_xpath('//th', :text => content)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
Then /^I should see a sortable table header with "([^"]*)"$/ do |content|
|
|
10
|
+
page.should have_css('th.sortable', :text => content)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
Then /^I should not see a sortable table header with "([^"]*)"$/ do |content|
|
|
14
|
+
page.should_not have_css('th.sortable', :text => content)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
Then /^I should not see a sortable table header$/ do
|
|
18
|
+
step %{I should not see "th.sortable"}
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
Then /^the table "([^"]*)" should have (\d+) rows/ do |selector, count|
|
|
22
|
+
table = page.find(selector)
|
|
23
|
+
table.all(:css, 'tr').size.should == count.to_i
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
Then /^the table "([^"]*)" should have (\d+) columns/ do |selector, count|
|
|
27
|
+
table = page.find(selector)
|
|
28
|
+
row = table.find('tr:first')
|
|
29
|
+
row.all(:css, "td").size.should == count.to_i
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
Then /^there should be (\d+) "([^"]*)" tags$/ do |count, tag|
|
|
33
|
+
page.all(:css, tag).size.should == count.to_i
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
Then /^I should see a link to "([^"]*)"$/ do |link|
|
|
37
|
+
page.should have_xpath('//a', :text => link)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
Then /^an "([^"]*)" exception should be raised when I follow "([^"]*)"$/ do |error, link|
|
|
41
|
+
expect {
|
|
42
|
+
step "I follow \"#{link}\""
|
|
43
|
+
}.to raise_error(error.constantize)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
Then /^I should be in the resource section for (.+)$/ do |resource_name|
|
|
47
|
+
current_url.should include resource_name.gsub(' ', '').underscore.pluralize
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
Then /^I should wait and see "([^"]*)"(?: within "([^"]*)")?$/ do |text, selector|
|
|
51
|
+
sleep 1
|
|
52
|
+
step 'show me the page'
|
|
53
|
+
selector ||= "*"
|
|
54
|
+
locate(:xpath, "//#{selector}[text()='#{text}']")
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
Then /^I should see the page title "([^"]*)"$/ do |title|
|
|
58
|
+
within('h2#page_title') do
|
|
59
|
+
page.should have_content(title)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
Then /^I should see a fieldset titled "([^"]*)"$/ do |title|
|
|
64
|
+
page.should have_css('fieldset legend', :text => title)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
Then /^the "([^"]*)" field should contain the option "([^"]*)"$/ do |field, option|
|
|
68
|
+
field = find_field(field)
|
|
69
|
+
field.should have_css("option", :text => option)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
Then /^I should see the content "([^"]*)"$/ do |content|
|
|
73
|
+
page.should have_css("#active_admin_content", :text => content)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
Then /^I should see a validation error "([^"]*)"$/ do |error_message|
|
|
77
|
+
page.should have_css(".inline-errors", :text => error_message)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
Then /^I should see a table with id "([^"]*)"$/ do |dom_id|
|
|
81
|
+
page.should have_css('table', :id => dom_id)
|
|
82
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
Then /^I should see the css file "([^"]*)"$/ do |path|
|
|
2
|
+
step %{I should see the css file "#{path}" of media "screen"}
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^I should see the css file "([^"]*)" of media "([^"]*)"$/ do |path, media|
|
|
6
|
+
page.should have_xpath("//link[contains(@href, /stylesheets/#{path}) and contains(@media, #{media})]")
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
Then /^I should see the js file "([^"]*)"$/ do |path|
|
|
10
|
+
page.should have_xpath("//script[contains(@src, /javascripts/#{path})]")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
Then /^I should see the favicon "([^"]*)"$/ do |path|
|
|
14
|
+
page.should have_xpath("//link[contains(@href, \"#{path}\")]")
|
|
15
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
Then /^I should see the attribute "([^"]*)" with "([^"]*)"$/ do |title, value|
|
|
2
|
+
elems = all ".attributes_table th:contains('#{title}') ~ td:contains('#{value}')"
|
|
3
|
+
elems.first.should_not be_nil, 'attribute missing'
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
Then /^I should see the attribute "([^"]*)" with a nicely formatted datetime$/ do |title|
|
|
7
|
+
text = all(".attributes_table th:contains('#{title}') ~ td").first.text
|
|
8
|
+
text.should match /\w+ \d{1,2}, \d{4} \d{2}:\d{2}/
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
Then /^I should not see the attribute "([^"]*)"$/ do |title|
|
|
12
|
+
page.should_not have_css('.attributes_table th', :text => title)
|
|
13
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
Then /^I (should|should not) be asked to confirm "([^"]*)" for "([^"]*)"$/ do |maybe, confirmation, title|
|
|
2
|
+
selector = "#batch_actions_popover a.batch_action:contains('#{title}')"
|
|
3
|
+
selector << "[data-confirm='#{confirmation}']" if maybe == 'should'
|
|
4
|
+
page.send maybe.sub(' ', '_'), have_css(selector)
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
Then /^I (should|should not) see the batch action :([^\s]*) "([^"]*)"$/ do |maybe, sym, title|
|
|
8
|
+
selector = "#batch_actions_selector a.batch_action:contains('#{title}')"
|
|
9
|
+
selector << "[href='#'][data-action='#{sym}']" if maybe == 'should'
|
|
10
|
+
page.send maybe.sub(' ', '_'), have_css(selector)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
Then /^the (\d+)(?:st|nd|rd|th) batch action should be "([^"]*)"$/ do |index, title|
|
|
14
|
+
page.all("#batch_actions_selector a.batch_action")[index.to_i - 1].text.should match title
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
When /^I check the (\d+)(?:st|nd|rd|th) record$/ do |index|
|
|
18
|
+
page.all("table.index_table input[type=checkbox]")[index.to_i].set true
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
When /^I toggle the collection selection$/ do
|
|
22
|
+
page.find("#collection_selection_toggle_all").click
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
Then /^I should see that the batch action button is disabled$/ do
|
|
26
|
+
page.should have_css "#batch_actions_selector .dropdown_menu_button.disabled"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
Then /^I (should|should not) see the batch action (button|selector)$/ do |maybe, type|
|
|
30
|
+
selector = "div.table_tools #batch_actions_selector"
|
|
31
|
+
selector << ' .dropdown_menu_button' if maybe == 'should' && type == 'button'
|
|
32
|
+
page.send maybe.sub(' ', '_'), have_css(selector)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
Then /^I should see the batch action popover exists$/ do
|
|
36
|
+
page.should have_css "#batch_actions_selector"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
Given /^I submit the batch action form with "([^"]*)"$/ do |action|
|
|
40
|
+
page.find("#batch_action").set action
|
|
41
|
+
form = page.find "#collection_selection"
|
|
42
|
+
params = page.all("#main_content input").each_with_object({}) do |input, obj|
|
|
43
|
+
key, value = input['name'], input['value']
|
|
44
|
+
if key == 'collection_selection[]'
|
|
45
|
+
(obj[key] ||= []).push value if input.checked?
|
|
46
|
+
else
|
|
47
|
+
obj[key] = value
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
page.driver.submit form['method'], form['action'], params
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
Then /^I should not see checkboxes in the table$/ do
|
|
54
|
+
page.should_not have_css ".paginated_collection table input[type=checkbox]"
|
|
55
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
module ActiveAdminReloading
|
|
2
|
+
def load_aa_config(config_content)
|
|
3
|
+
ActiveAdmin::Event.dispatch ActiveAdmin::Application::BeforeLoadEvent, ActiveAdmin.application
|
|
4
|
+
eval(config_content)
|
|
5
|
+
ActiveAdmin::Event.dispatch ActiveAdmin::Application::AfterLoadEvent, ActiveAdmin.application
|
|
6
|
+
Rails.application.reload_routes!
|
|
7
|
+
ActiveAdmin.application.namespaces.values.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
|
|
@@ -0,0 +1,15 @@
|
|
|
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
|
+
page.should have_css('.dashboard .panel h3', :text => name)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
Then /^I should not see a dashboard widget "([^"]*)"$/ do |name|
|
|
14
|
+
page.should_not have_css('.dashboard .panel h3', :text => name)
|
|
15
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
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.gsub(' ', '').underscore)
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
Given /^(a|\d+)( published)? posts?(?: with the title "([^"]*)")?(?: and body "([^"]*)")?(?: written by "([^"]*)")?(?: in category "([^"]*)")? exists?$/ do |count, published, title, body, user, category_name|
|
|
7
|
+
count = count == 'a' ? 1 : count.to_i
|
|
8
|
+
published = Time.now if published
|
|
9
|
+
author = create_user(user) if user
|
|
10
|
+
category = Category.where(name: category_name).first_or_create if category_name
|
|
11
|
+
title ||= "Hello World %i"
|
|
12
|
+
count.times do |i|
|
|
13
|
+
Post.create! :title => title % i, :body => body, :author => author, :published_at => published, category_id: category.try(:id)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
Given /^a category named "([^"]*)" exists$/ do |name|
|
|
18
|
+
Category.create! :name => name
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
Given /^a (user|publisher) named "([^"]*)" exists$/ do |type, name|
|
|
22
|
+
create_user name, type
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
Given /^a store named "([^"]*)" exists$/ do |name|
|
|
26
|
+
Store.create! :name => name
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
Given /^I create a new post with the title "([^"]*)"$/ do |title|
|
|
30
|
+
click_link "Posts"
|
|
31
|
+
click_link "New Post"
|
|
32
|
+
fill_in :title, :with => title
|
|
33
|
+
click_button "Create Post"
|
|
34
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Then /^I should see a select filter for "([^"]*)"$/ do |label|
|
|
2
|
+
page.should have_css(".filter_select label", :text => label)
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^I should see a string filter for "([^"]*)"$/ do |label|
|
|
6
|
+
page.should have_css(".filter_string label", :text => label)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
Then /^I should see a date range filter for "([^"]*)"$/ do |label|
|
|
10
|
+
page.should 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
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Then /^I should see a flash with "([^"]*)"$/ do |text|
|
|
2
|
+
page.should have_content(text)
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^I should see a successful create flash$/ do
|
|
6
|
+
page.should have_css('div.flash_notice', :text => /was successfully created/)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
Then /^I should not see a successful create flash$/ do
|
|
10
|
+
page.should_not have_css('div.flash_notice', :text => /was successfully created/)
|
|
11
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require 'csv'
|
|
2
|
+
|
|
3
|
+
Then "I should see nicely formatted datetimes" do
|
|
4
|
+
page.body.should =~ /\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 ? :should_not : :should
|
|
9
|
+
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
|
+
headers = page.response_headers
|
|
16
|
+
headers['Content-Type'].should eq 'text/csv; charset=utf-8'
|
|
17
|
+
|
|
18
|
+
begin
|
|
19
|
+
csv = CSV.parse(body, :col_sep => sep)
|
|
20
|
+
table.raw.each_with_index do |expected_row, row_index|
|
|
21
|
+
expected_row.each_with_index do |expected_cell, col_index|
|
|
22
|
+
cell = csv.try(:[], row_index).try(:[], col_index)
|
|
23
|
+
if expected_cell.blank?
|
|
24
|
+
cell.should be_nil
|
|
25
|
+
else
|
|
26
|
+
(cell || '').should match /#{expected_cell}/
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
rescue
|
|
31
|
+
puts "Expecting:"
|
|
32
|
+
p table.raw
|
|
33
|
+
puts "to match:"
|
|
34
|
+
p csv
|
|
35
|
+
raise $!
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
Then /^I should download a CSV file for "([^"]*)" containing:$/ do |resource_name, table|
|
|
40
|
+
step %{I should download a CSV file with "," separator for "#{resource_name}" containing:}, table
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
Then /^the CSV file should contain "([^"]*)" in quotes$/ do |text|
|
|
44
|
+
page.driver.response.body.should match /"#{text}"/
|
|
45
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
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
|
+
page.should_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.gsub(' ','').underscore.downcase
|
|
14
|
+
step %{I should see "#{count}" within ".scopes .#{name} .count"}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
Then /^I should see the scope "([^"]*)" with no count$/ do |name|
|
|
18
|
+
name = name.gsub(" ", "").underscore.downcase
|
|
19
|
+
page.should have_css(".scopes .#{name}")
|
|
20
|
+
page.should_not have_css(".scopes .#{name} .count")
|
|
21
|
+
end
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Then /^I should see an action item button "([^"]*)"$/ do |content|
|
|
2
|
+
page.should have_css(".action_items a", :text => content)
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^I should not see an action item button "([^"]*)"$/ do |content|
|
|
6
|
+
page.should_not have_css(".action_items", :text => content)
|
|
7
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Then /^I should see a menu item for "([^"]*)"$/ do |name|
|
|
2
|
+
page.should have_css('#tabs li a', :text => name)
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^I should not see a menu item for "([^"]*)"$/ do |name|
|
|
6
|
+
page.should_not have_css('#tabs li a', :text => name)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
Then /^I should see a nested menu item for "([^"]*)"$/ do |name|
|
|
10
|
+
page.should have_css('#tabs > li > ul > li > a', :text => name)
|
|
11
|
+
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
Then /^I should not see pagination$/ do
|
|
2
|
+
page.should_not have_css(".pagination")
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^I should see pagination with (\d+) pages$/ do |count|
|
|
6
|
+
step %{I should see "#{count}" within ".pagination a"}
|
|
7
|
+
step %{I should not see "#{count.to_i + 1}" within ".pagination a"}
|
|
8
|
+
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
Then /^I should see a sidebar titled "([^"]*)"$/ do |title|
|
|
2
|
+
page.should have_css(".sidebar_section h3", :text => title)
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^I should not see a sidebar titled "([^"]*)"$/ do |title|
|
|
6
|
+
title = title.gsub(' ', '').underscore
|
|
7
|
+
page.all(:css, "##{title}_sidebar_section").count.should == 0
|
|
8
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
Then /^I should see the site title "([^"]*)"$/ do |title|
|
|
2
|
+
page.should have_css('h1#site_title', :text => title)
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^I should not see the site title "([^"]*)"$/ do |title|
|
|
6
|
+
page.should_not have_css('h1#site_title', :text => title)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
Then /^I should see the site title image "([^"]*)"$/ do |image|
|
|
10
|
+
page.should have_css('h1#site_title img', :src => image)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
Then /^I should see the site title image linked to "([^"]*)"$/ do |url|
|
|
14
|
+
page.should have_css('h1#site_title a', :href => url)
|
|
15
|
+
end
|