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,514 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ActiveAdmin::FormBuilder do
|
|
4
|
+
|
|
5
|
+
# Setup an ActionView::Base object which can be used for
|
|
6
|
+
# generating the form for.
|
|
7
|
+
let(:helpers) do
|
|
8
|
+
view = action_view
|
|
9
|
+
def view.posts_path
|
|
10
|
+
"/posts"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def view.protect_against_forgery?
|
|
14
|
+
false
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def view.url_for(*args)
|
|
18
|
+
if args.first == {:action => "index"}
|
|
19
|
+
posts_path
|
|
20
|
+
else
|
|
21
|
+
super
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def view.a_helper_method
|
|
26
|
+
"A Helper Method"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
view
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def build_form(options = {}, form_object = Post.new, &block)
|
|
33
|
+
options = {:url => helpers.posts_path}.merge(options)
|
|
34
|
+
|
|
35
|
+
render_arbre_component({:form_object => form_object, :form_options => options, :form_block => block}, helpers)do
|
|
36
|
+
text_node active_admin_form_for(assigns[:form_object], assigns[:form_options], &assigns[:form_block])
|
|
37
|
+
end.to_s
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
context "in general with actions" do
|
|
41
|
+
let :body do
|
|
42
|
+
build_form do |f|
|
|
43
|
+
f.inputs do
|
|
44
|
+
f.input :title
|
|
45
|
+
f.input :body
|
|
46
|
+
end
|
|
47
|
+
f.actions do
|
|
48
|
+
f.action :submit, :label => "Submit Me"
|
|
49
|
+
f.action :submit, :label => "Another Button"
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "should generate a text input" do
|
|
55
|
+
body.should have_tag("input", :attributes => { :type => "text",
|
|
56
|
+
:name => "post[title]" })
|
|
57
|
+
end
|
|
58
|
+
it "should generate a textarea" do
|
|
59
|
+
body.should have_tag("textarea", :attributes => { :name => "post[body]" })
|
|
60
|
+
end
|
|
61
|
+
it "should only generate the form once" do
|
|
62
|
+
body.scan(/Title/).size.should == 1
|
|
63
|
+
end
|
|
64
|
+
it "should generate actions" do
|
|
65
|
+
body.should have_tag("input", :attributes => { :type => "submit",
|
|
66
|
+
:value => "Submit Me" })
|
|
67
|
+
body.should have_tag("input", :attributes => { :type => "submit",
|
|
68
|
+
:value => "Another Button" })
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
context "when polymorphic relationship" do
|
|
73
|
+
it "should raise error" do
|
|
74
|
+
expect {
|
|
75
|
+
comment = ActiveAdmin::Comment.new
|
|
76
|
+
build_form({:url => "admins/comments"}, comment) do |f|
|
|
77
|
+
f.inputs :resource
|
|
78
|
+
end
|
|
79
|
+
}.to raise_error(Formtastic::PolymorphicInputWithoutCollectionError)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
describe "passing in options with actions" do
|
|
84
|
+
let :body do
|
|
85
|
+
build_form :html => { :multipart => true } do |f|
|
|
86
|
+
f.inputs :title
|
|
87
|
+
f.actions
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
it "should pass the options on to the form" do
|
|
91
|
+
body.should have_tag("form", :attributes => { :enctype => "multipart/form-data" })
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
describe "passing in options with actions" do
|
|
96
|
+
let :body do
|
|
97
|
+
build_form :html => { :multipart => true } do |f|
|
|
98
|
+
f.inputs :title
|
|
99
|
+
f.actions
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
it "should pass the options on to the form" do
|
|
103
|
+
body.should have_tag("form", :attributes => { :enctype => "multipart/form-data" })
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
context "with actions" do
|
|
109
|
+
it "should generate the form once" do
|
|
110
|
+
body = build_form do |f|
|
|
111
|
+
f.inputs do
|
|
112
|
+
f.input :title
|
|
113
|
+
end
|
|
114
|
+
f.actions
|
|
115
|
+
end
|
|
116
|
+
body.scan(/id="post_title"/).size.should == 1
|
|
117
|
+
end
|
|
118
|
+
it "should generate one button and a cancel link" do
|
|
119
|
+
body = build_form do |f|
|
|
120
|
+
f.actions
|
|
121
|
+
end
|
|
122
|
+
body.scan(/type="submit"/).size.should == 1
|
|
123
|
+
body.scan(/class="cancel"/).size.should == 1
|
|
124
|
+
end
|
|
125
|
+
it "should generate multiple actions" do
|
|
126
|
+
body = build_form do |f|
|
|
127
|
+
f.actions do
|
|
128
|
+
f.action :submit, :label => "Create & Continue"
|
|
129
|
+
f.action :submit, :label => "Create & Edit"
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
body.scan(/type="submit"/).size.should == 2
|
|
133
|
+
body.scan(/class="cancel"/).size.should == 0
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
context "with actions" do
|
|
139
|
+
it "should generate the form once" do
|
|
140
|
+
body = build_form do |f|
|
|
141
|
+
f.inputs do
|
|
142
|
+
f.input :title
|
|
143
|
+
end
|
|
144
|
+
f.actions
|
|
145
|
+
end
|
|
146
|
+
body.scan(/id="post_title"/).size.should == 1
|
|
147
|
+
end
|
|
148
|
+
it "should generate one button and a cancel link" do
|
|
149
|
+
body = build_form do |f|
|
|
150
|
+
f.actions
|
|
151
|
+
end
|
|
152
|
+
body.scan(/type="submit"/).size.should == 1
|
|
153
|
+
body.scan(/class="cancel"/).size.should == 1
|
|
154
|
+
end
|
|
155
|
+
it "should generate multiple actions" do
|
|
156
|
+
body = build_form do |f|
|
|
157
|
+
f.actions do
|
|
158
|
+
f.action :submit, :label => "Create & Continue"
|
|
159
|
+
f.action :submit, :label => "Create & Edit"
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
body.scan(/type="submit"/).size.should == 2
|
|
163
|
+
body.scan(/class="cancel"/).size.should == 0
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
context "without passing a block to inputs" do
|
|
168
|
+
let :body do
|
|
169
|
+
build_form do |f|
|
|
170
|
+
f.inputs :title, :body
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
it "should have a title input" do
|
|
174
|
+
body.should have_tag("input", :attributes => { :type => "text",
|
|
175
|
+
:name => "post[title]" })
|
|
176
|
+
end
|
|
177
|
+
it "should have a body textarea" do
|
|
178
|
+
body.should have_tag("textarea", :attributes => { :name => "post[body]" })
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
context "with semantic fields for" do
|
|
183
|
+
let :body do
|
|
184
|
+
build_form do |f|
|
|
185
|
+
f.inputs do
|
|
186
|
+
f.input :title
|
|
187
|
+
f.input :body
|
|
188
|
+
end
|
|
189
|
+
f.instance_eval do
|
|
190
|
+
@object.author = User.new
|
|
191
|
+
end
|
|
192
|
+
f.semantic_fields_for :author do |author|
|
|
193
|
+
author.inputs :first_name, :last_name
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
it "should generate a nested text input once" do
|
|
198
|
+
body.scan("post_author_attributes_first_name_input").size.should == 1
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
context "with collection inputs" do
|
|
203
|
+
before do
|
|
204
|
+
User.create :first_name => "John", :last_name => "Doe"
|
|
205
|
+
User.create :first_name => "Jane", :last_name => "Doe"
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
describe "as select" do
|
|
209
|
+
let :body do
|
|
210
|
+
build_form do |f|
|
|
211
|
+
f.input :author
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
it "should create 2 options" do
|
|
215
|
+
body.scan(/<option/).size.should == 3
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
describe "as radio buttons" do
|
|
220
|
+
let :body do
|
|
221
|
+
build_form do |f|
|
|
222
|
+
f.input :author, :as => :radio
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
it "should create 2 radio buttons" do
|
|
226
|
+
body.scan(/type="radio"/).size.should == 2
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
context "with inputs 'for'" do
|
|
233
|
+
let :body do
|
|
234
|
+
build_form do |f|
|
|
235
|
+
f.inputs do
|
|
236
|
+
f.input :title
|
|
237
|
+
f.input :body
|
|
238
|
+
end
|
|
239
|
+
f.instance_eval do
|
|
240
|
+
@object.author = User.new
|
|
241
|
+
end
|
|
242
|
+
f.inputs :name => 'Author', :for => :author do |author|
|
|
243
|
+
author.inputs :first_name, :last_name
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
it "should generate a nested text input once" do
|
|
248
|
+
body.scan("post_author_attributes_first_name_input").size.should == 1
|
|
249
|
+
end
|
|
250
|
+
it "should add an author first name field" do
|
|
251
|
+
body.should have_tag("input", :attributes => { :name => "post[author_attributes][first_name]"})
|
|
252
|
+
end
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
context "with wrapper html" do
|
|
256
|
+
it "should set a class" do
|
|
257
|
+
body = build_form do |f|
|
|
258
|
+
f.input :title, :wrapper_html => { :class => "important" }
|
|
259
|
+
end
|
|
260
|
+
body.should have_tag("li", :attributes => {:class => "important string input optional stringish"})
|
|
261
|
+
end
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
context "with has many inputs" do
|
|
265
|
+
describe "with simple block" do
|
|
266
|
+
let :body do
|
|
267
|
+
build_form({:url => '/categories'}, Category.new) do |f|
|
|
268
|
+
f.object.posts.build
|
|
269
|
+
f.has_many :posts do |p|
|
|
270
|
+
p.input :title
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
it "should translate the association name in header" do
|
|
276
|
+
begin
|
|
277
|
+
I18n.backend.store_translations(:en, :activerecord => { :models => { :post => { :one => "Blog Post", :other => "Blog Posts" } } })
|
|
278
|
+
body.should have_tag('h3', 'Blog Posts')
|
|
279
|
+
ensure
|
|
280
|
+
I18n.backend.reload!
|
|
281
|
+
end
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
it "should use model name when there is no translation for given model in header" do
|
|
285
|
+
body.should have_tag('h3', 'Post')
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
it "should translate the association name in has many new button" do
|
|
289
|
+
begin
|
|
290
|
+
I18n.backend.store_translations(:en, :activerecord => { :models => { :post => { :one => "Blog Post", :other => "Blog Posts" } } })
|
|
291
|
+
body.should have_tag('a', 'Add New Blog Post')
|
|
292
|
+
ensure
|
|
293
|
+
I18n.backend.reload!
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
it "should translate the attribute name" do
|
|
298
|
+
begin
|
|
299
|
+
I18n.backend.store_translations :en, :activerecord => { :attributes => { :post => { :title => 'A very nice title' } } }
|
|
300
|
+
body.should have_tag 'label', 'A very nice title'
|
|
301
|
+
ensure
|
|
302
|
+
I18n.backend.reload!
|
|
303
|
+
end
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
it "should use model name when there is no translation for given model in has many new button" do
|
|
307
|
+
body.should have_tag('a', 'Add New Post')
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
it "should render the nested form" do
|
|
311
|
+
body.should have_tag("input", :attributes => {:name => "category[posts_attributes][0][title]"})
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
it "should add a link to remove new nested records" do
|
|
315
|
+
Capybara.string(body).should have_css '.has_many > fieldset > ol > li > a', href: '#',
|
|
316
|
+
content: 'Remove', class: 'button has_many_remove', data: {placeholder: 'NEW_POST_RECORD'}
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
it "should add a link to add new nested records" do
|
|
320
|
+
Capybara.string(body).should have_css(".has_many > fieldset > ol > li > a", :class => "button", :href => "#", :content => "Add New Post")
|
|
321
|
+
end
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
describe "with complex block" do
|
|
325
|
+
let :body do
|
|
326
|
+
build_form({:url => '/categories'}, Category.new) do |f|
|
|
327
|
+
f.object.posts.build
|
|
328
|
+
f.has_many :posts do |p,i|
|
|
329
|
+
p.input :title, :label => "Title #{i}"
|
|
330
|
+
end
|
|
331
|
+
end
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
it "should accept a block with a second argument" do
|
|
335
|
+
body.should have_tag("label", "Title 1")
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
it "should add a custom header" do
|
|
339
|
+
body.should have_tag('h3', 'Post')
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
describe "without heading and new record link" do
|
|
345
|
+
let :body do
|
|
346
|
+
build_form({:url => '/categories'}, Category.new) do |f|
|
|
347
|
+
f.object.posts.build
|
|
348
|
+
f.has_many :posts, :heading => false, :new_record => false do |p|
|
|
349
|
+
p.input :title
|
|
350
|
+
end
|
|
351
|
+
end
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
it "should not add a header" do
|
|
355
|
+
body.should_not have_tag('h3', 'Post')
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
it "should not add link to new nested records" do
|
|
359
|
+
body.should_not have_tag('a', 'Add New Post')
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
describe "with custom heading" do
|
|
365
|
+
let :body do
|
|
366
|
+
build_form({:url => '/categories'}, Category.new) do |f|
|
|
367
|
+
f.object.posts.build
|
|
368
|
+
f.has_many :posts, :heading => "Test heading" do |p|
|
|
369
|
+
p.input :title
|
|
370
|
+
end
|
|
371
|
+
end
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
it "should add a custom header" do
|
|
375
|
+
body.should have_tag('h3', 'Test heading')
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
describe "with custom new record link" do
|
|
381
|
+
let :body do
|
|
382
|
+
build_form({:url => '/categories'}, Category.new) do |f|
|
|
383
|
+
f.object.posts.build
|
|
384
|
+
f.has_many :posts, :new_record => 'My Custom New Post' do |p|
|
|
385
|
+
p.input :title
|
|
386
|
+
end
|
|
387
|
+
end
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
it "should add a custom new record link" do
|
|
391
|
+
body.should have_tag('a', 'My Custom New Post')
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
end
|
|
395
|
+
|
|
396
|
+
describe "with allow destroy" do
|
|
397
|
+
context "with an existing post" do
|
|
398
|
+
let :body do
|
|
399
|
+
build_form({:url => '/categories'}, Category.new) do |f|
|
|
400
|
+
f.object.posts.build.stub(:new_record? => false)
|
|
401
|
+
f.has_many :posts, :allow_destroy => true do |p|
|
|
402
|
+
p.input :title
|
|
403
|
+
end
|
|
404
|
+
end
|
|
405
|
+
end
|
|
406
|
+
|
|
407
|
+
it "should include a boolean field for _destroy" do
|
|
408
|
+
body.should have_tag("input", :attributes => {:name => "category[posts_attributes][0][_destroy]"})
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
it "should have a check box with 'Remove' as its label" do
|
|
412
|
+
body.should have_tag("label", :attributes => {:for => "category_posts_attributes_0__destroy"}, :content => "Delete")
|
|
413
|
+
end
|
|
414
|
+
|
|
415
|
+
it "should wrap the destroy field in an li with class 'has_many_delete'" do
|
|
416
|
+
Capybara.string(body).should have_css(".has_many > fieldset > ol > li.has_many_delete > input")
|
|
417
|
+
end
|
|
418
|
+
end
|
|
419
|
+
|
|
420
|
+
context "with a new post" do
|
|
421
|
+
let :body do
|
|
422
|
+
build_form({:url => '/categories'}, Category.new) do |f|
|
|
423
|
+
f.object.posts.build
|
|
424
|
+
f.has_many :posts, :allow_destroy => true do |p|
|
|
425
|
+
p.input :title
|
|
426
|
+
end
|
|
427
|
+
end
|
|
428
|
+
end
|
|
429
|
+
|
|
430
|
+
it "should not have a boolean field for _destroy" do
|
|
431
|
+
body.should_not have_tag("input", :attributes => {:name => "category[posts_attributes][0][_destroy]"})
|
|
432
|
+
end
|
|
433
|
+
|
|
434
|
+
it "should not have a check box with 'Remove' as its label" do
|
|
435
|
+
body.should_not have_tag("label", :attributes => {:for => "category_posts_attributes_0__destroy"}, :content => "Remove")
|
|
436
|
+
end
|
|
437
|
+
end
|
|
438
|
+
end
|
|
439
|
+
|
|
440
|
+
pending "should render the block if it returns nil" do
|
|
441
|
+
body = build_form({:url => '/categories'}, Category.new) do |f|
|
|
442
|
+
f.object.posts.build
|
|
443
|
+
f.has_many :posts do |p|
|
|
444
|
+
p.input :title
|
|
445
|
+
nil
|
|
446
|
+
end
|
|
447
|
+
end
|
|
448
|
+
|
|
449
|
+
body.should have_tag("input", :attributes => {:name => "category[posts_attributes][0][title]"})
|
|
450
|
+
end
|
|
451
|
+
end
|
|
452
|
+
|
|
453
|
+
{ # Testing that the same input can be used multiple times
|
|
454
|
+
"f.input :title, :as => :string" => /id="post_title"/,
|
|
455
|
+
"f.input :title, :as => :text" => /id="post_title"/,
|
|
456
|
+
"f.input :created_at, :as => :time_select" => /id="post_created_at_2i"/,
|
|
457
|
+
"f.input :created_at, :as => :datetime_select" => /id="post_created_at_2i"/,
|
|
458
|
+
"f.input :created_at, :as => :date_select" => /id="post_created_at_2i"/,
|
|
459
|
+
# Testing that return values don't screw up the form
|
|
460
|
+
"f.input :title; nil" => /id="post_title"/,
|
|
461
|
+
"f.input :title; []" => /id="post_title"/,
|
|
462
|
+
"[:title].each{ |r| f.input r }" => /id="post_title"/,
|
|
463
|
+
"[:title].map { |r| f.input r }" => /id="post_title"/,
|
|
464
|
+
}.each do |source, regex|
|
|
465
|
+
it "should properly buffer `#{source}`" do
|
|
466
|
+
body = build_form do |f|
|
|
467
|
+
f.inputs do
|
|
468
|
+
eval source
|
|
469
|
+
eval source
|
|
470
|
+
end
|
|
471
|
+
end
|
|
472
|
+
body.scan(regex).size.should == 2
|
|
473
|
+
end
|
|
474
|
+
end
|
|
475
|
+
|
|
476
|
+
describe "datepicker input" do
|
|
477
|
+
context 'with default options' do
|
|
478
|
+
let :body do
|
|
479
|
+
build_form do |f|
|
|
480
|
+
f.inputs do
|
|
481
|
+
f.input :created_at, :as => :datepicker
|
|
482
|
+
end
|
|
483
|
+
end
|
|
484
|
+
end
|
|
485
|
+
it "should generate a text input with the class of datepicker" do
|
|
486
|
+
body.should have_tag("input", :attributes => { :type => "text",
|
|
487
|
+
:class => "datepicker",
|
|
488
|
+
:name => "post[created_at]" })
|
|
489
|
+
end
|
|
490
|
+
end
|
|
491
|
+
|
|
492
|
+
context 'with date range options' do
|
|
493
|
+
let :body do
|
|
494
|
+
build_form do |f|
|
|
495
|
+
f.inputs do
|
|
496
|
+
f.input :created_at, :as => :datepicker,
|
|
497
|
+
:datepicker_options => {
|
|
498
|
+
:min_date => Date.new(2013, 10, 18),
|
|
499
|
+
:max_date => "2013-12-31" }
|
|
500
|
+
end
|
|
501
|
+
end
|
|
502
|
+
it 'should generate a datepicker text input with data min and max dates' do
|
|
503
|
+
body.should have_tag("input", :attributes => { :type => "text",
|
|
504
|
+
:class => "datepicker",
|
|
505
|
+
:name => "post[created_at]",
|
|
506
|
+
:data => { :datepicker_options => {
|
|
507
|
+
:minDate => "2013-10-18",
|
|
508
|
+
:maxDate => "2013-12-31" }.to_json }})
|
|
509
|
+
end
|
|
510
|
+
end
|
|
511
|
+
end
|
|
512
|
+
end
|
|
513
|
+
|
|
514
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "AA installation" do
|
|
4
|
+
context "should create" do
|
|
5
|
+
|
|
6
|
+
it "active_admin.css.scss" do
|
|
7
|
+
File.exists?(Rails.root + "app/assets/stylesheets/active_admin.css.scss").should be_true
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "active_admin.js.coffee" do
|
|
11
|
+
File.exists?(Rails.root + "app/assets/javascripts/active_admin.js.coffee").should be_true
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "the dashboard" do
|
|
15
|
+
File.exists?(Rails.root + "app/admin/dashboard.rb").should be_true
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "the initializer" do
|
|
19
|
+
File.exists?(Rails.root + "config/initializers/active_admin.rb").should be_true
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ActiveAdmin::Helpers::Collection do
|
|
4
|
+
|
|
5
|
+
include ActiveAdmin::Helpers::Collection
|
|
6
|
+
|
|
7
|
+
before(:all) do
|
|
8
|
+
Post.delete_all
|
|
9
|
+
Post.create!(:title => "A post")
|
|
10
|
+
Post.create!(:title => "A post")
|
|
11
|
+
Post.create!(:title => "An other post")
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
after(:all) do
|
|
15
|
+
Post.delete_all
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe "#collection_size" do
|
|
19
|
+
it "should return the collection size for an ActiveRecord class" do
|
|
20
|
+
collection_size(Post).should == 3
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should return the collection size for an ActiveRecord::Relation" do
|
|
24
|
+
collection_size(Post.where(:title => "A post")).should == 2
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should return the collection size for a collection with group by" do
|
|
28
|
+
collection_size(Post.group(:title)).should == 2
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should return the collection size for a collection with group by, select and custom order" do
|
|
32
|
+
collection_size(Post.select("title, count(*) as nb_posts").group(:title).order("nb_posts")).should == 2
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "should take the defined collection by default" do
|
|
36
|
+
def collection; Post; end
|
|
37
|
+
|
|
38
|
+
collection_size.should == 3
|
|
39
|
+
|
|
40
|
+
def collection; Post.where(:title => "An other post"); end
|
|
41
|
+
|
|
42
|
+
collection_size.should == 1
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
describe "#collection_is_empty?" do
|
|
47
|
+
it "should return true when the collection is empty" do
|
|
48
|
+
collection_is_empty?(Post.where(:title => "Non existing post")).should be_true
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should return false when the collection is not empty" do
|
|
52
|
+
collection_is_empty?(Post.where(:title => "A post")).should be_false
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it "should take the defined collection by default" do
|
|
56
|
+
def collection; Post; end
|
|
57
|
+
|
|
58
|
+
collection_is_empty?.should be_false
|
|
59
|
+
|
|
60
|
+
def collection; Post.where(:title => "Non existing post"); end
|
|
61
|
+
|
|
62
|
+
collection_is_empty?.should be_true
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ActiveAdmin::ScopeChain do
|
|
4
|
+
|
|
5
|
+
include ActiveAdmin::ScopeChain
|
|
6
|
+
|
|
7
|
+
describe "#scope_chain" do
|
|
8
|
+
let(:relation) { double }
|
|
9
|
+
|
|
10
|
+
context "when Scope has a scope method" do
|
|
11
|
+
let(:scope) { ActiveAdmin::Scope.new :published }
|
|
12
|
+
|
|
13
|
+
it "should call the method on the relation and return it" do
|
|
14
|
+
relation.should_receive(:published).and_return(:scoped_relation)
|
|
15
|
+
scope_chain(scope, relation).should == :scoped_relation
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
context "when Scope has the scope method method ':all'" do
|
|
20
|
+
let(:scope) { ActiveAdmin::Scope.new :all }
|
|
21
|
+
|
|
22
|
+
it "should return the relation" do
|
|
23
|
+
scope_chain(scope, relation).should == relation
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
context "when Scope has a name and a scope block" do
|
|
28
|
+
let(:scope) { ActiveAdmin::Scope.new("My Scope"){|s| :scoped_relation } }
|
|
29
|
+
|
|
30
|
+
it "should instance_exec the block and return it" do
|
|
31
|
+
scope_chain(scope, relation).should == :scoped_relation
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'active_admin/helpers/settings'
|
|
3
|
+
|
|
4
|
+
describe ActiveAdmin::Settings do
|
|
5
|
+
|
|
6
|
+
# A Class with settings module included
|
|
7
|
+
let(:klass) do
|
|
8
|
+
Class.new do
|
|
9
|
+
include ActiveAdmin::Settings
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should add a new setting with a default" do
|
|
14
|
+
klass.setting :my_setting, "Hello World"
|
|
15
|
+
klass.default_settings[:my_setting].should == "Hello World"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should initialize the defaults" do
|
|
19
|
+
klass.setting :my_setting, "Hello World"
|
|
20
|
+
klass.new.my_setting.should == "Hello World"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should support settings of nil" do
|
|
24
|
+
klass.setting :my_setting, :some_val
|
|
25
|
+
inst = klass.new
|
|
26
|
+
inst.my_setting = nil
|
|
27
|
+
inst.my_setting.should == nil
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|