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,230 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ActiveAdmin::Views::AttributesTable do
|
|
4
|
+
|
|
5
|
+
describe "creating with the dsl" do
|
|
6
|
+
let(:helpers) { action_view }
|
|
7
|
+
|
|
8
|
+
let(:post) do
|
|
9
|
+
post = Post.new :title => "Hello World", :body => nil
|
|
10
|
+
post.stub(:id){ 1 }
|
|
11
|
+
post.stub(:new_record?){ false }
|
|
12
|
+
post
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
let(:assigns){ { :post => post } }
|
|
16
|
+
|
|
17
|
+
# Loop through a few different ways to make the same table
|
|
18
|
+
# and ensure that they produce the same results
|
|
19
|
+
{
|
|
20
|
+
"when attributes are passed in to the builder methods" => proc {
|
|
21
|
+
render_arbre_component(assigns) {
|
|
22
|
+
attributes_table_for post, :id, :title, :body
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"when attributes are built using the block" => proc {
|
|
26
|
+
render_arbre_component(assigns) {
|
|
27
|
+
attributes_table_for post do
|
|
28
|
+
rows :id, :title, :body
|
|
29
|
+
end
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"when each attribute is passed in by itself" => proc {
|
|
33
|
+
render_arbre_component(assigns) {
|
|
34
|
+
attributes_table_for post do
|
|
35
|
+
row :id
|
|
36
|
+
row :title
|
|
37
|
+
row :body
|
|
38
|
+
end
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"when you create each row with a custom block" => proc {
|
|
42
|
+
render_arbre_component(assigns) {
|
|
43
|
+
attributes_table_for post do
|
|
44
|
+
row("Id") { post.id }
|
|
45
|
+
row("Title"){ post.title }
|
|
46
|
+
row("Body") { post.body }
|
|
47
|
+
end
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"when you create each row with a custom block that returns nil" => proc {
|
|
51
|
+
render_arbre_component(assigns) {
|
|
52
|
+
attributes_table_for post do
|
|
53
|
+
row("Id") { text_node post.id; nil }
|
|
54
|
+
row("Title"){ text_node post.title; nil }
|
|
55
|
+
row("Body") { text_node post.body; nil }
|
|
56
|
+
end
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
}.each do |context_title, table_decleration|
|
|
60
|
+
context context_title do
|
|
61
|
+
let(:table) { instance_eval &table_decleration }
|
|
62
|
+
|
|
63
|
+
it "should render a div wrapper with the class '.attributes_table'" do
|
|
64
|
+
table.tag_name.should == 'div'
|
|
65
|
+
table.attr(:class).should include('attributes_table')
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "should add id and type class" do
|
|
69
|
+
table.class_names.should include("post")
|
|
70
|
+
table.id.should == "attributes_table_post_1"
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "should render 3 rows" do
|
|
74
|
+
table.find_by_tag("tr").size.should == 3
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
describe "rendering the rows" do
|
|
78
|
+
[
|
|
79
|
+
["Id" , "1"],
|
|
80
|
+
["Title" , "Hello World"],
|
|
81
|
+
["Body" , "<span class=\"empty\">Empty</span>"]
|
|
82
|
+
].each_with_index do |set, i|
|
|
83
|
+
describe "for #{set[0]}" do
|
|
84
|
+
let(:title){ set[0] }
|
|
85
|
+
let(:content){ set[1] }
|
|
86
|
+
let(:current_row){ table.find_by_tag("tr")[i] }
|
|
87
|
+
|
|
88
|
+
it "should have the title '#{set[0]}'" do
|
|
89
|
+
current_row.find_by_tag("th").first.content.should == title
|
|
90
|
+
end
|
|
91
|
+
it "should have the content '#{set[1]}'" do
|
|
92
|
+
current_row.find_by_tag("td").first.content.chomp.strip.should == content
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end # describe rendering rows
|
|
97
|
+
|
|
98
|
+
end
|
|
99
|
+
end # describe dsl styles
|
|
100
|
+
|
|
101
|
+
it "should add a class for each row based on the col name" do
|
|
102
|
+
table = render_arbre_component(assigns) {
|
|
103
|
+
attributes_table_for(post) do
|
|
104
|
+
row :title
|
|
105
|
+
row :created_at
|
|
106
|
+
end
|
|
107
|
+
}
|
|
108
|
+
table.find_by_tag("tr").first.to_s.
|
|
109
|
+
split("\n").first.lstrip.
|
|
110
|
+
should == '<tr class="row row-title">'
|
|
111
|
+
|
|
112
|
+
table.find_by_tag("tr").last.to_s.
|
|
113
|
+
split("\n").first.lstrip.
|
|
114
|
+
should == '<tr class="row row-created_at">'
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
it "should allow html options for the row itself" do
|
|
118
|
+
table = render_arbre_component(assigns) {
|
|
119
|
+
attributes_table_for(post) do
|
|
120
|
+
row("Wee", :class => "custom_row", :style => "custom_style") { }
|
|
121
|
+
end
|
|
122
|
+
}
|
|
123
|
+
table.find_by_tag("tr").first.to_s.
|
|
124
|
+
split("\n").first.lstrip.
|
|
125
|
+
should == '<tr class="row custom_row" style="custom_style">'
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
it "should allow html content inside the attributes table" do
|
|
129
|
+
table = render_arbre_component(assigns) {
|
|
130
|
+
attributes_table_for(post) do
|
|
131
|
+
row("ID"){ span(post.id, :class => 'id') }
|
|
132
|
+
end
|
|
133
|
+
}
|
|
134
|
+
table.find_by_tag("td").first.content.chomp.strip.should == "<span class=\"id\">1</span>"
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
it "should check if an association exists when an attribute has id in it" do
|
|
138
|
+
post.author = User.new :username => 'john_doe', :first_name => 'John', :last_name => 'Doe'
|
|
139
|
+
table = render_arbre_component(assigns) {
|
|
140
|
+
attributes_table_for post, :author_id
|
|
141
|
+
}
|
|
142
|
+
table.find_by_tag('td').first.content.should == 'John Doe'
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
context "with a collection" do
|
|
146
|
+
let(:posts) do
|
|
147
|
+
[Post.new(:title => "Hello World", :id => 1), Post.new(:title => "Multi Column", :id => 2)].each_with_index do |post, index|
|
|
148
|
+
post.stub(:id => index + 1, :new_record? => false)
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
let(:assigns) { { :posts => posts } }
|
|
153
|
+
|
|
154
|
+
let(:table) do
|
|
155
|
+
render_arbre_component(assigns) do
|
|
156
|
+
attributes_table_for posts, :id, :title
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
it "does not set id on the table" do
|
|
161
|
+
table.attr(:id).should be_nil
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
context "colgroup" do
|
|
165
|
+
let(:cols) { table.find_by_tag "col" }
|
|
166
|
+
|
|
167
|
+
it "contains a col for each record (plus headers)" do
|
|
168
|
+
cols.size.should == (2 + 1)
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
it "assigns an id to each col" do
|
|
172
|
+
cols[1..-1].each_with_index do |col, index|
|
|
173
|
+
col.id.should == "attributes_table_post_#{index + 1}"
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
it "assigns a class to each col" do
|
|
178
|
+
cols[1..-1].each_with_index do |col, index|
|
|
179
|
+
col.class_names.should include("post")
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
it "assigns alternation classes to each col" do
|
|
184
|
+
cols[1..-1].each_with_index do |col, index|
|
|
185
|
+
col.class_names.should include(["even", "odd"][index % 2])
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
context "when rendering the rows" do
|
|
191
|
+
it "should contain 3 columns" do
|
|
192
|
+
table.find_by_tag("tr").first.children.size.should == 3
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
[
|
|
196
|
+
["Id" , "1", "2"],
|
|
197
|
+
["Title", "Hello World", "Multi Column"],
|
|
198
|
+
].each_with_index do |set, i|
|
|
199
|
+
describe "for #{set[0]}" do
|
|
200
|
+
let(:title){ set[0] }
|
|
201
|
+
let(:content){ set[1] }
|
|
202
|
+
let(:current_row){ table.find_by_tag("tr")[i] }
|
|
203
|
+
|
|
204
|
+
it "should have the title '#{set[0]}'" do
|
|
205
|
+
current_row.find_by_tag("th").first.content.should == title
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
context "with defined attribute name translation" do
|
|
209
|
+
it "should have the translated attribute name in the title" do
|
|
210
|
+
begin
|
|
211
|
+
I18n.backend.store_translations(:en, :activerecord => { :attributes => { :post => { :title => 'Translated Title', :id => 'Translated Id' } } })
|
|
212
|
+
current_row.find_by_tag("th").first.content.should == "Translated #{title}"
|
|
213
|
+
ensure
|
|
214
|
+
I18n.backend.reload!
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
set[1..-1].each_with_index do |content, index|
|
|
220
|
+
it "column #{index} should have the content '#{content}'" do
|
|
221
|
+
current_row.find_by_tag("td")[index].content.chomp.strip.should == content
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
end # describe rendering rows
|
|
227
|
+
end # with a collection
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'active_admin/batch_actions/views/batch_action_popover'
|
|
3
|
+
|
|
4
|
+
describe ActiveAdmin::BatchActions::BatchActionPopover do
|
|
5
|
+
|
|
6
|
+
let(:the_popover) do
|
|
7
|
+
render_arbre_component do
|
|
8
|
+
batch_action_popover do
|
|
9
|
+
action ActiveAdmin::BatchAction.new( :action_1, "Action 1" )
|
|
10
|
+
action ActiveAdmin::BatchAction.new( :action_2, "Action 2" )
|
|
11
|
+
action ActiveAdmin::BatchAction.new( :action_3, "Action 3" )
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should have an id" do
|
|
17
|
+
the_popover.id.should == "batch_actions_popover"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe "the action list" do
|
|
21
|
+
subject do
|
|
22
|
+
the_popover.find_by_class("popover_contents").first
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
its(:tag_name) { should eql("ul") }
|
|
26
|
+
|
|
27
|
+
its(:content){ should include("class=\"batch_action\" data-action=\"action_1\"") }
|
|
28
|
+
its(:content){ should include("class=\"batch_action\" data-action=\"action_2\"") }
|
|
29
|
+
its(:content){ should include("class=\"batch_action\" data-action=\"action_3\"") }
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ActiveAdmin::Views::BlankSlate do
|
|
4
|
+
|
|
5
|
+
describe "#blank_slate" do
|
|
6
|
+
subject do
|
|
7
|
+
render_arbre_component do
|
|
8
|
+
blank_slate("There are no Posts yet. <a href=\"/posts/new\">Create one</a></span>")
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
its(:tag_name) { should eql 'div' }
|
|
13
|
+
its(:class_list) { should include('blank_slate_container') }
|
|
14
|
+
|
|
15
|
+
its(:content) { should include '<span class="blank_slate">There are no Posts yet. <a href="/posts/new">Create one</a></span>' }
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ActiveAdmin::Views::Columns do
|
|
4
|
+
|
|
5
|
+
describe "Rendering one column" do
|
|
6
|
+
let(:cols) do
|
|
7
|
+
render_arbre_component do
|
|
8
|
+
columns do
|
|
9
|
+
column { span "Hello World" }
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should have the class .columns" do
|
|
15
|
+
cols.class_list.should include("columns")
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should have one column" do
|
|
19
|
+
cols.children.size.should == 1
|
|
20
|
+
cols.children.first.class_list.should include("column")
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should have one column with the width 100.0%" do
|
|
24
|
+
cols.children.first.attr(:style).should include("width: 100.0%")
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe "Rendering two columns" do
|
|
29
|
+
let(:cols) do
|
|
30
|
+
render_arbre_component do
|
|
31
|
+
columns do
|
|
32
|
+
column { span "Hello World" }
|
|
33
|
+
column { span "Hello World" }
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should have two columns" do
|
|
39
|
+
cols.children.size.should == 2
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "should have a first column with width 49% and margin 2%" do
|
|
43
|
+
cols.children.first.attr(:style).should == "width: 49.0%; margin-right: 2%;"
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "should have a second column with width 49% and no right margin" do
|
|
47
|
+
cols.children.last.attr(:style).should == "width: 49.0%;"
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
describe "Rendering four columns" do
|
|
52
|
+
let(:cols) do
|
|
53
|
+
render_arbre_component do
|
|
54
|
+
columns do
|
|
55
|
+
column { span "Hello World" }
|
|
56
|
+
column { span "Hello World" }
|
|
57
|
+
column { span "Hello World" }
|
|
58
|
+
column { span "Hello World" }
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it "should have four columns" do
|
|
64
|
+
cols.children.size.should == 4
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
(0..2).to_a.each do |index|
|
|
69
|
+
it "should have column #{index + 1} with width 49% and margin 2%" do
|
|
70
|
+
cols.children[index].attr(:style).should == "width: 23.5%; margin-right: 2%;"
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it "should have column 4 with width 49% and no margin" do
|
|
75
|
+
cols.children[3].attr(:style).should == "width: 23.5%;"
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
describe "Column Spans" do
|
|
81
|
+
let(:cols) do
|
|
82
|
+
render_arbre_component do
|
|
83
|
+
columns do
|
|
84
|
+
column(:span => 2){ "Hello World" }
|
|
85
|
+
column(){ "Hello World" }
|
|
86
|
+
column(){ "Hello World" }
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it "should set the span when declared" do
|
|
92
|
+
cols.children.first.attr(:style).should == "width: 49.0%; margin-right: 2%;"
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it "should default to 1 if not passed in" do
|
|
96
|
+
cols.children.last.attr(:style).should == "width: 23.5%;"
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
describe "Column max width" do
|
|
101
|
+
|
|
102
|
+
let(:cols) do
|
|
103
|
+
render_arbre_component do
|
|
104
|
+
columns do
|
|
105
|
+
column(:max_width => "100px"){ "Hello World" }
|
|
106
|
+
column(){ "Hello World" }
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it "should set the max with if passed in" do
|
|
112
|
+
cols.children.first.attr(:style).should == "width: 49.0%; max-width: 100px; margin-right: 2%;"
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
it "should omit the value if not presetn" do
|
|
116
|
+
cols.children.last.attr(:style).should == "width: 49.0%;"
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
describe "Column min width" do
|
|
122
|
+
|
|
123
|
+
let(:cols) do
|
|
124
|
+
render_arbre_component do
|
|
125
|
+
columns do
|
|
126
|
+
column(:min_width => "100px"){ "Hello World" }
|
|
127
|
+
column(){ "Hello World" }
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
it "should set the min with if passed in" do
|
|
133
|
+
cols.children.first.attr(:style).should == "width: 49.0%; min-width: 100px; margin-right: 2%;"
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
it "should omit the value if not presetn" do
|
|
137
|
+
cols.children.last.attr(:style).should == "width: 49.0%;"
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ActiveAdmin::Views::IndexList do
|
|
4
|
+
|
|
5
|
+
describe "#index_list_renderer" do
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
let(:index_classes) { [ActiveAdmin::Views::IndexAsTable, ActiveAdmin::Views::IndexAsBlock] }
|
|
9
|
+
|
|
10
|
+
let(:helpers) do
|
|
11
|
+
helpers = mock_action_view
|
|
12
|
+
helpers.stub url_for: "/"
|
|
13
|
+
helpers.stub(:params).and_return as: "table"
|
|
14
|
+
helpers
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
subject do
|
|
18
|
+
render_arbre_component({:index_classes => index_classes}, helpers) do
|
|
19
|
+
index_list_renderer(index_classes)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
its(:tag_name) { should == 'ul' }
|
|
24
|
+
|
|
25
|
+
it "should contain the names of available indexes in links" do
|
|
26
|
+
a_tags = subject.find_by_tag("a")
|
|
27
|
+
a_tags.size.should == 2
|
|
28
|
+
a_tags.first.to_s.should include("Table")
|
|
29
|
+
a_tags.last.to_s.should include("List")
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ActiveAdmin::Views::PaginatedCollection do
|
|
4
|
+
describe "creating with the dsl" do
|
|
5
|
+
|
|
6
|
+
before :all do
|
|
7
|
+
load_defaults!
|
|
8
|
+
reload_routes!
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
let(:view) do
|
|
12
|
+
view = mock_action_view
|
|
13
|
+
view.request.stub(:query_parameters).and_return page: '1'
|
|
14
|
+
view.request.stub(:path_parameters).and_return controller: 'admin/posts', action: 'index'
|
|
15
|
+
view
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Helper to render paginated collections within an arbre context
|
|
19
|
+
def paginated_collection(*args)
|
|
20
|
+
render_arbre_component({:paginated_collection_args => args}, view) do
|
|
21
|
+
paginated_collection(*paginated_collection_args)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
let(:collection) do
|
|
26
|
+
posts = [Post.new(:title => "First Post"), Post.new(:title => "Second Post"), Post.new(:title => "Third Post")]
|
|
27
|
+
Kaminari.paginate_array(posts).page(1).per(5)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
before do
|
|
31
|
+
collection.stub(:reorder) { collection }
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
context "when specifying collection" do
|
|
35
|
+
let(:pagination) do
|
|
36
|
+
paginated_collection(collection)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "should set :collection as the passed in collection" do
|
|
40
|
+
pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>all 3</b> posts"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "should raise error if collection has no pagination scope" do
|
|
44
|
+
expect {
|
|
45
|
+
paginated_collection([Post.new, Post.new])
|
|
46
|
+
}.to raise_error(StandardError, "Collection is not a paginated scope. Set collection.page(params[:page]).per(10) before calling :paginated_collection.")
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
context "when specifying :param_name option" do
|
|
51
|
+
let(:collection) do
|
|
52
|
+
posts = 10.times.map{ Post.new }
|
|
53
|
+
Kaminari.paginate_array(posts).page(1).per(5)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
let(:pagination) { paginated_collection(collection, :param_name => :post_page) }
|
|
57
|
+
|
|
58
|
+
it "should customize the page number parameter in pagination links" do
|
|
59
|
+
pagination.children.last.content.should match(/\/admin\/posts\?post_page=2/)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
context "when specifying :download_links => false option" do
|
|
64
|
+
let(:collection) do
|
|
65
|
+
posts = 10.times.map{ Post.new }
|
|
66
|
+
Kaminari.paginate_array(posts).page(1).per(5)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
let(:pagination) { paginated_collection(collection, :download_links => false) }
|
|
70
|
+
|
|
71
|
+
it "should not render download links" do
|
|
72
|
+
pagination.find_by_tag('div').last.content.should_not match(/Download:/)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
context "when specifying :entry_name option with a single item" do
|
|
77
|
+
let(:collection) do
|
|
78
|
+
posts = [Post.new]
|
|
79
|
+
Kaminari.paginate_array(posts).page(1).per(5)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
let(:pagination) { paginated_collection(collection, :entry_name => "message") }
|
|
83
|
+
|
|
84
|
+
it "should use :entry_name as the collection name" do
|
|
85
|
+
pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>1</b> message"
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
context "when specifying :entry_name option with multiple items" do
|
|
90
|
+
let(:pagination) { paginated_collection(collection, :entry_name => "message") }
|
|
91
|
+
|
|
92
|
+
it "should use :entry_name as the collection name" do
|
|
93
|
+
pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>all 3</b> messages"
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
context "when specifying :entry_name and :entries_name option with a single item" do
|
|
98
|
+
let(:collection) do
|
|
99
|
+
posts = [Post.new]
|
|
100
|
+
Kaminari.paginate_array(posts).page(1).per(5)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
let(:pagination) { paginated_collection(collection, :entry_name => "singular", :entries_name => "plural") }
|
|
104
|
+
|
|
105
|
+
it "should use :entry_name as the collection name" do
|
|
106
|
+
pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>1</b> singular"
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
context "when specifying :entry_name and :entries_name option with a multiple items" do
|
|
111
|
+
let(:pagination) { paginated_collection(collection, :entry_name => "singular", :entries_name => "plural") }
|
|
112
|
+
|
|
113
|
+
it "should use :entries_name as the collection name" do
|
|
114
|
+
pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>all 3</b> plural"
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
context "when omitting :entry_name with a single item" do
|
|
119
|
+
let(:collection) do
|
|
120
|
+
posts = [Post.new]
|
|
121
|
+
Kaminari.paginate_array(posts).page(1).per(5)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
let(:pagination) { paginated_collection(collection) }
|
|
125
|
+
|
|
126
|
+
it "should use 'post' as the collection name when there is no I18n translation" do
|
|
127
|
+
pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>1</b> post"
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
it "should use 'Singular' as the collection name when there is an I18n translation" do
|
|
131
|
+
I18n.stub(:translate) { "Singular" }
|
|
132
|
+
pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>1</b> Singular"
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
context "when omitting :entry_name with multiple items" do
|
|
137
|
+
let(:pagination) { paginated_collection(collection) }
|
|
138
|
+
|
|
139
|
+
it "should use 'posts' as the collection name when there is no I18n translation" do
|
|
140
|
+
pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>all 3</b> posts"
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
it "should use 'Plural' as the collection name when there is an I18n translation" do
|
|
144
|
+
I18n.stub(:translate) { "Plural" }
|
|
145
|
+
pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>all 3</b> Plural"
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
context "when specifying an empty collection" do
|
|
150
|
+
let(:collection) do
|
|
151
|
+
posts = []
|
|
152
|
+
Kaminari.paginate_array(posts).page(1).per(5)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
let(:pagination) { paginated_collection(collection) }
|
|
156
|
+
|
|
157
|
+
it "should display 'No entries found'" do
|
|
158
|
+
pagination.find_by_class('pagination_information').first.content.should == "No entries found"
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
context "when collection comes from find with GROUP BY" do
|
|
163
|
+
let(:collection) do
|
|
164
|
+
%w{Foo Foo Bar}.each {|title| Post.create(:title => title) }
|
|
165
|
+
Post.select(:title).group(:title).page(1).per(5)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
let(:pagination) { paginated_collection(collection) }
|
|
169
|
+
|
|
170
|
+
it "should display proper message (including number and not hash)" do
|
|
171
|
+
pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>all 2</b> posts"
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
context "when collection with many pages comes from find with GROUP BY" do
|
|
176
|
+
let(:collection) do
|
|
177
|
+
%w{Foo Foo Bar Baz}.each {|title| Post.create(:title => title) }
|
|
178
|
+
Post.select(:title).group(:title).page(1).per(2)
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
let(:pagination) { paginated_collection(collection) }
|
|
182
|
+
|
|
183
|
+
it "should display proper message (including number and not hash)" do
|
|
184
|
+
pagination.find_by_class('pagination_information').first.content.
|
|
185
|
+
gsub(' ',' ').should == "Displaying posts <b>1 - 2</b> of <b>3</b> in total"
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
context "when viewing the last page of a collection that has multiple pages" do
|
|
190
|
+
let(:collection) do
|
|
191
|
+
Kaminari.paginate_array([Post.new] * 81).page(3).per(30)
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
let(:pagination) { paginated_collection(collection) }
|
|
195
|
+
|
|
196
|
+
it "should show the proper item counts" do
|
|
197
|
+
pagination.find_by_class('pagination_information').first.content.
|
|
198
|
+
gsub(' ',' ').should == "Displaying posts <b>61 - 81</b> of <b>81</b> in total"
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
context "with :pagination_total" do
|
|
203
|
+
let(:collection) do
|
|
204
|
+
Kaminari.paginate_array([Post.new] * 256).page(1).per(30)
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
describe "set to false" do
|
|
208
|
+
let(:pagination) { paginated_collection(collection, pagination_total: false) }
|
|
209
|
+
|
|
210
|
+
it "should not show the total item counts" do
|
|
211
|
+
info = pagination.find_by_class('pagination_information').first.content.gsub(' ',' ')
|
|
212
|
+
info.should eq "Displaying posts <b>1 - 30</b>"
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
describe "set to true" do
|
|
217
|
+
let(:pagination) { paginated_collection(collection, pagination_total: true) }
|
|
218
|
+
|
|
219
|
+
it "should show the total item counts" do
|
|
220
|
+
info = pagination.find_by_class('pagination_information').first.content.gsub(' ',' ')
|
|
221
|
+
info.should eq "Displaying posts <b>1 - 30</b> of <b>256</b> in total"
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
end
|
|
227
|
+
end
|