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,19 @@
|
|
|
1
|
+
class DeferredGarbageCollection
|
|
2
|
+
|
|
3
|
+
DEFERRED_GC_THRESHOLD = (ENV['DEFER_GC'] || 15.0).to_f
|
|
4
|
+
|
|
5
|
+
@@last_gc_run = Time.now
|
|
6
|
+
|
|
7
|
+
def self.start
|
|
8
|
+
GC.disable
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.reconsider
|
|
12
|
+
if Time.now - @@last_gc_run >= DEFERRED_GC_THRESHOLD
|
|
13
|
+
GC.enable
|
|
14
|
+
GC.start
|
|
15
|
+
GC.disable
|
|
16
|
+
@@last_gc_run = Time.now
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Detects the current version of Rails that is being used
|
|
2
|
+
#
|
|
3
|
+
#
|
|
4
|
+
unless defined? RAILS_VERSION_FILE
|
|
5
|
+
RAILS_VERSION_FILE = File.expand_path("../../../.rails-version", __FILE__)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
unless defined? TRAVIS_CONFIG
|
|
9
|
+
require 'yaml'
|
|
10
|
+
filename = File.expand_path("../../../.travis.yml", __FILE__)
|
|
11
|
+
TRAVIS_CONFIG = YAML.load_file filename
|
|
12
|
+
TRAVIS_RAILS_VERSIONS = TRAVIS_CONFIG['env'].grep(/RAILS=(.*)/){ $1 }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
unless defined? DEFAULT_RAILS_VERSION
|
|
16
|
+
DEFAULT_RAILS_VERSION = TRAVIS_RAILS_VERSIONS.first
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def detect_rails_version
|
|
20
|
+
version = version_from_file || version_from_env || DEFAULT_RAILS_VERSION
|
|
21
|
+
|
|
22
|
+
puts "Detected Rails: #{version}" if ENV['DEBUG']
|
|
23
|
+
|
|
24
|
+
version
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def version_from_file
|
|
28
|
+
if File.exists?(RAILS_VERSION_FILE)
|
|
29
|
+
version = File.read(RAILS_VERSION_FILE).chomp.strip
|
|
30
|
+
version = nil if version == ""
|
|
31
|
+
|
|
32
|
+
version
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def version_from_env
|
|
37
|
+
ENV['RAILS']
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def write_rails_version(version)
|
|
41
|
+
File.open(RAILS_VERSION_FILE, "w+"){|f| f << version }
|
|
42
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'action_dispatch'
|
|
2
|
+
require 'capybara/rails'
|
|
3
|
+
require 'capybara/dsl'
|
|
4
|
+
|
|
5
|
+
module RSpec
|
|
6
|
+
module Rails
|
|
7
|
+
module IntegrationExampleGroup
|
|
8
|
+
extend ActiveSupport::Concern
|
|
9
|
+
|
|
10
|
+
include ActionDispatch::Integration::Runner
|
|
11
|
+
include RSpec::Rails::TestUnitAssertionAdapter
|
|
12
|
+
include ActionDispatch::Assertions
|
|
13
|
+
include Capybara::DSL
|
|
14
|
+
include RSpec::Matchers
|
|
15
|
+
|
|
16
|
+
def app
|
|
17
|
+
::Rails.application
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def last_response
|
|
21
|
+
page
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
included do
|
|
25
|
+
before do
|
|
26
|
+
@router = ::Rails.application.routes
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# ------------ rake task options ------------
|
|
2
|
+
|
|
3
|
+
# JS files to check by default, if no parameters are passed to rake jslint
|
|
4
|
+
# (you may want to limit this only to your own scripts and exclude any external scripts and frameworks)
|
|
5
|
+
|
|
6
|
+
# this can be overridden by adding 'paths' and 'exclude_paths' parameter to rake command:
|
|
7
|
+
# rake jslint paths=path1,path2,... exclude_paths=library1,library2,...
|
|
8
|
+
|
|
9
|
+
paths:
|
|
10
|
+
- app/assets/javascripts/active_admin/**/*.js
|
|
11
|
+
|
|
12
|
+
exclude_paths:
|
|
13
|
+
- app/assets/javascripts/active_admin/vendor.js
|
|
14
|
+
|
|
15
|
+
# ------------ jslint options ------------
|
|
16
|
+
# see http://www.jslint.com/lint.html#options for more detailed explanations
|
|
17
|
+
|
|
18
|
+
# "enforce" type options (true means potentially more warnings)
|
|
19
|
+
|
|
20
|
+
adsafe: false # true if ADsafe rules should be enforced. See http://www.ADsafe.org/
|
|
21
|
+
bitwise: true # true if bitwise operators should not be allowed
|
|
22
|
+
newcap: true # true if Initial Caps must be used with constructor functions
|
|
23
|
+
eqeqeq: false # true if === should be required (for ALL equality comparisons)
|
|
24
|
+
immed: false # true if immediate function invocations must be wrapped in parens
|
|
25
|
+
nomen: false # true if initial or trailing underscore in identifiers should be forbidden
|
|
26
|
+
onevar: false # true if only one var statement per function should be allowed
|
|
27
|
+
plusplus: false # true if ++ and -- should not be allowed
|
|
28
|
+
regexp: false # true if . and [^...] should not be allowed in RegExp literals
|
|
29
|
+
safe: false # true if the safe subset rules are enforced (used by ADsafe)
|
|
30
|
+
strict: false # true if the ES5 "use strict"; pragma is required
|
|
31
|
+
undef: false # true if variables must be declared before used
|
|
32
|
+
white: false # true if strict whitespace rules apply (see also 'indent' option)
|
|
33
|
+
|
|
34
|
+
# "allow" type options (false means potentially more warnings)
|
|
35
|
+
|
|
36
|
+
cap: false # true if upper case HTML should be allowed
|
|
37
|
+
css: true # true if CSS workarounds should be tolerated
|
|
38
|
+
debug: false # true if debugger statements should be allowed (set to false before going into production)
|
|
39
|
+
es5: false # true if ECMAScript 5 syntax should be allowed
|
|
40
|
+
evil: false # true if eval should be allowed
|
|
41
|
+
forin: true # true if unfiltered 'for in' statements should be allowed
|
|
42
|
+
fragment: true # true if HTML fragments should be allowed
|
|
43
|
+
laxbreak: false # true if statement breaks should not be checked
|
|
44
|
+
on: false # true if HTML event handlers (e.g. onclick="...") should be allowed
|
|
45
|
+
sub: false # true if subscript notation may be used for expressions better expressed in dot notation
|
|
46
|
+
|
|
47
|
+
# other options
|
|
48
|
+
|
|
49
|
+
maxlen: 300 # Maximum line length
|
|
50
|
+
indent: 2 # Number of spaces that should be used for indentation - used only if 'white' option is set
|
|
51
|
+
maxerr: 50 # The maximum number of warnings reported (per file)
|
|
52
|
+
passfail: false # true if the scan should stop on first error (per file)
|
|
53
|
+
# following are relevant only if undef = true
|
|
54
|
+
predef: '' # Names of predefined global variables - comma-separated string or a YAML array
|
|
55
|
+
browser: true # true if the standard browser globals should be predefined
|
|
56
|
+
rhino: false # true if the Rhino environment globals should be predefined
|
|
57
|
+
windows: false # true if Windows-specific globals should be predefined
|
|
58
|
+
widget: false # true if the Yahoo Widgets globals should be predefined
|
|
59
|
+
devel: true # true if functions like alert, confirm, console, prompt etc. are predefined
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
# ------------ jslint_on_rails custom lint options (switch to true to disable some annoying warnings) ------------
|
|
63
|
+
|
|
64
|
+
# ignores "missing semicolon" warning at the end of a function; this lets you write one-liners
|
|
65
|
+
# like: x.map(function(i) { return i + 1 }); without having to put a second semicolon inside the function
|
|
66
|
+
lastsemic: false
|
|
67
|
+
|
|
68
|
+
# allows you to use the 'new' expression as a statement (without assignment)
|
|
69
|
+
# so you can call e.g. new Ajax.Request(...), new Effect.Highlight(...) without assigning to a dummy variable
|
|
70
|
+
newstat: false
|
|
71
|
+
|
|
72
|
+
# ignores the "Expected an assignment or function call and instead saw an expression" warning,
|
|
73
|
+
# if the expression contains a proper statement and makes sense; this lets you write things like:
|
|
74
|
+
# element && element.show();
|
|
75
|
+
# valid || other || lastChance || alert('OMG!');
|
|
76
|
+
# selected ? show() : hide();
|
|
77
|
+
# although these will still cause a warning:
|
|
78
|
+
# element && link;
|
|
79
|
+
# selected ? 5 : 10;
|
|
80
|
+
statinexp: false
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Rails template to build the sample app for specs
|
|
2
|
+
|
|
3
|
+
run "rm Gemfile"
|
|
4
|
+
run "rm -r test"
|
|
5
|
+
run "rm -r spec"
|
|
6
|
+
|
|
7
|
+
# Create a cucumber database and environment
|
|
8
|
+
copy_file File.expand_path('../templates/cucumber.rb', __FILE__), "config/environments/cucumber.rb"
|
|
9
|
+
copy_file File.expand_path('../templates/cucumber_with_reloading.rb', __FILE__), "config/environments/cucumber_with_reloading.rb"
|
|
10
|
+
|
|
11
|
+
gsub_file 'config/database.yml', /^test:.*\n/, "test: &test\n"
|
|
12
|
+
gsub_file 'config/database.yml', /\z/, "\ncucumber:\n <<: *test\n database: db/cucumber.sqlite3"
|
|
13
|
+
gsub_file 'config/database.yml', /\z/, "\ncucumber_with_reloading:\n <<: *test\n database: db/cucumber.sqlite3"
|
|
14
|
+
|
|
15
|
+
generate :model, "post title:string body:text published_at:datetime author_id:integer category_id:integer starred:boolean"
|
|
16
|
+
inject_into_file 'app/models/post.rb', %q{
|
|
17
|
+
belongs_to :category
|
|
18
|
+
belongs_to :author, :class_name => 'User'
|
|
19
|
+
accepts_nested_attributes_for :author
|
|
20
|
+
attr_accessible :author unless Rails::VERSION::MAJOR > 3 && !defined? ProtectedAttributes
|
|
21
|
+
}, :after => 'class Post < ActiveRecord::Base'
|
|
22
|
+
copy_file File.expand_path('../templates/post_decorator.rb', __FILE__), "app/models/post_decorator.rb"
|
|
23
|
+
|
|
24
|
+
generate :model, "user type:string first_name:string last_name:string username:string age:integer"
|
|
25
|
+
inject_into_file 'app/models/user.rb', %q{
|
|
26
|
+
has_many :posts, :foreign_key => 'author_id'
|
|
27
|
+
def display_name
|
|
28
|
+
"#{first_name} #{last_name}"
|
|
29
|
+
end
|
|
30
|
+
}, :after => 'class User < ActiveRecord::Base'
|
|
31
|
+
|
|
32
|
+
generate :model, 'publisher --migration=false --parent=User'
|
|
33
|
+
generate :model, 'category name:string description:text'
|
|
34
|
+
inject_into_file 'app/models/category.rb', %q{
|
|
35
|
+
has_many :posts
|
|
36
|
+
has_many :authors, through: :posts
|
|
37
|
+
accepts_nested_attributes_for :posts
|
|
38
|
+
}, :after => 'class Category < ActiveRecord::Base'
|
|
39
|
+
generate :model, 'store name:string'
|
|
40
|
+
|
|
41
|
+
# Generate a model with string ids
|
|
42
|
+
generate :model, "tag name:string"
|
|
43
|
+
gsub_file(Dir['db/migrate/*_create_tags.rb'][0], /\:tags\sdo\s.*/, ":tags, :id => false, :primary_key => :id do |t|\n\t\t\tt.string :id\n")
|
|
44
|
+
inject_into_file 'app/models/tag.rb', %q{
|
|
45
|
+
self.primary_key = :id
|
|
46
|
+
before_create :set_id
|
|
47
|
+
|
|
48
|
+
private
|
|
49
|
+
def set_id
|
|
50
|
+
self.id = 8.times.inject("") { |s,e| s << (i = Kernel.rand(62); i += ((i < 10) ? 48 : ((i < 36) ? 55 : 61 ))).chr }
|
|
51
|
+
end
|
|
52
|
+
}, :after => 'class Tag < ActiveRecord::Base'
|
|
53
|
+
|
|
54
|
+
# Configure default_url_options in test environment
|
|
55
|
+
inject_into_file "config/environments/test.rb", " config.action_mailer.default_url_options = { :host => 'example.com' }\n", :after => "config.cache_classes = true\n"
|
|
56
|
+
|
|
57
|
+
# Add our local Active Admin to the load path
|
|
58
|
+
inject_into_file "config/environment.rb", "\n$LOAD_PATH.unshift('#{File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'lib'))}')\nrequire \"active_admin\"\n", :after => "require File.expand_path('../application', __FILE__)"
|
|
59
|
+
|
|
60
|
+
# Add some translations
|
|
61
|
+
append_file "config/locales/en.yml", File.read(File.expand_path('../templates/en.yml', __FILE__))
|
|
62
|
+
|
|
63
|
+
# Add predefined admin resources
|
|
64
|
+
directory File.expand_path('../templates/admin', __FILE__), "app/admin"
|
|
65
|
+
|
|
66
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
67
|
+
|
|
68
|
+
generate :'active_admin:install'
|
|
69
|
+
|
|
70
|
+
rake "db:migrate"
|
|
71
|
+
rake "db:test:prepare"
|
|
72
|
+
run "/usr/bin/env RAILS_ENV=cucumber rake db:migrate"
|
|
73
|
+
|
|
74
|
+
# Setup parallel_tests
|
|
75
|
+
def setup_parallel_tests_database(after, force_insert_same_content = false)
|
|
76
|
+
inject_into_file 'config/database.yml', "<%= ENV['TEST_ENV_NUMBER'] %>", :after => after, :force => force_insert_same_content
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
setup_parallel_tests_database "test.sqlite3"
|
|
80
|
+
setup_parallel_tests_database "cucumber.sqlite3", true
|
|
81
|
+
|
|
82
|
+
# Note: this is hack!
|
|
83
|
+
# Somehow, calling parallel_tests tasks from Rails generator using Thor does not work ...
|
|
84
|
+
# RAILS_ENV variable never makes it to parallel_tests tasks.
|
|
85
|
+
# We need to call these tasks in the after set up hook in order to creates cucumber DBs + run migrations on test & cucumber DBs
|
|
86
|
+
create_file 'lib/tasks/parallel.rake', %q{
|
|
87
|
+
namespace :parallel do
|
|
88
|
+
def run_in_parallel(cmd, options)
|
|
89
|
+
count = "-n #{options[:count]}" if options[:count]
|
|
90
|
+
executable = 'parallel_test'
|
|
91
|
+
command = "#{executable} --exec '#{cmd}' #{count} #{'--non-parallel' if options[:non_parallel]}"
|
|
92
|
+
abort unless system(command)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
desc "create cucumber databases via db:create --> parallel:create_cucumber_db[num_cpus]"
|
|
96
|
+
task :create_cucumber_db, :count do |t, args|
|
|
97
|
+
run_in_parallel("rake db:create RAILS_ENV=cucumber", args)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
desc "load dumped schema for cucumber databases"
|
|
101
|
+
task :load_schema_cucumber_db, :count do |t,args|
|
|
102
|
+
run_in_parallel("rake db:schema:load RAILS_ENV=cucumber", args)
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
# If using Devise after 3.1, this is required for the tests to pass:
|
|
108
|
+
require 'devise/version'
|
|
109
|
+
if Devise::VERSION.to_f >= 3.1
|
|
110
|
+
inject_into_file 'config/initializers/devise.rb', "\n config.allow_insecure_token_lookup = true", after: 'Devise.setup do |config|'
|
|
111
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Use the default
|
|
2
|
+
apply File.expand_path("../rails_template.rb", __FILE__)
|
|
3
|
+
|
|
4
|
+
# Register Active Admin controllers
|
|
5
|
+
%w{ Post User Category }.each do |type|
|
|
6
|
+
generate :'active_admin:resource', type
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
scopes = <<-EOF
|
|
10
|
+
scope :all, :default => true
|
|
11
|
+
|
|
12
|
+
scope :drafts do |posts|
|
|
13
|
+
posts.where(["published_at IS NULL"])
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
scope :scheduled do |posts|
|
|
17
|
+
posts.where(["posts.published_at IS NOT NULL AND posts.published_at > ?", Time.now.utc])
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
scope :published do |posts|
|
|
21
|
+
posts.where(["posts.published_at IS NOT NULL AND posts.published_at < ?", Time.now.utc])
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
scope :my_posts do |posts|
|
|
25
|
+
posts.where(:author_id => current_admin_user.id)
|
|
26
|
+
end
|
|
27
|
+
EOF
|
|
28
|
+
inject_into_file 'app/admin/posts.rb', scopes , :after => "ActiveAdmin.register Post do\n"
|
|
29
|
+
|
|
30
|
+
# Setup some default data
|
|
31
|
+
append_file "db/seeds.rb", <<-EOF
|
|
32
|
+
users = ["Jimi Hendrix", "Jimmy Page", "Yngwie Malmsteen", "Eric Clapton", "Kirk Hammett"].collect do |name|
|
|
33
|
+
first, last = name.split(" ")
|
|
34
|
+
User.create! :first_name => first,
|
|
35
|
+
:last_name => last,
|
|
36
|
+
:username => [first,last].join('-').downcase,
|
|
37
|
+
:age => rand(80)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
categories = ["Rock", "Pop Rock", "Alt-Country", "Blues", "Dub-Step"].collect do |name|
|
|
41
|
+
Category.create! :name => name
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
published_at_values = [Time.now.utc - 5.days, Time.now.utc - 1.day, nil, Time.now.utc + 3.days]
|
|
45
|
+
|
|
46
|
+
1_000.times do |i|
|
|
47
|
+
user = users[i % users.size]
|
|
48
|
+
cat = categories[i % categories.size]
|
|
49
|
+
published_at = published_at_values[i % published_at_values.size]
|
|
50
|
+
Post.create :title => "Blog Post \#{i}",
|
|
51
|
+
:body => "Blog post \#{i} is written by \#{user.username} about \#{cat.name}",
|
|
52
|
+
:category => cat,
|
|
53
|
+
:published_at => published_at,
|
|
54
|
+
:author => user,
|
|
55
|
+
:starred => true
|
|
56
|
+
end
|
|
57
|
+
EOF
|
|
58
|
+
|
|
59
|
+
rake 'db:seed'
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require File.expand_path('config/environments/test', Rails.root)
|
|
2
|
+
|
|
3
|
+
# rails/railties/lib/rails/test_help.rb aborts if the environment is not 'test'. (Rails 3.0.0.beta3)
|
|
4
|
+
# We can't run Cucumber/RSpec/Test_Unit tests in different environments then.
|
|
5
|
+
#
|
|
6
|
+
# For now, I patch StringInquirer so that Rails.env.test? returns true when Rails.env is 'test' or 'cucumber'
|
|
7
|
+
#
|
|
8
|
+
# https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/4458-rails-should-allow-test-to-run-in-cucumber-environment
|
|
9
|
+
module ActiveSupport
|
|
10
|
+
class StringInquirer < String
|
|
11
|
+
def method_missing(method_name, *arguments)
|
|
12
|
+
if method_name.to_s[-1,1] == "?"
|
|
13
|
+
test_string = method_name.to_s[0..-2]
|
|
14
|
+
if test_string == 'test'
|
|
15
|
+
self == 'test' or self == 'cucumber'
|
|
16
|
+
else
|
|
17
|
+
self == test_string
|
|
18
|
+
end
|
|
19
|
+
else
|
|
20
|
+
super
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Minimal example of a decorator
|
|
2
|
+
require_dependency 'post'
|
|
3
|
+
|
|
4
|
+
# DelegateClass(Post) does not delegate attribute methods
|
|
5
|
+
# in some environments:
|
|
6
|
+
# http://travis-ci.org/#!/gregbell/active_admin/jobs/2021466
|
|
7
|
+
#
|
|
8
|
+
class PostDecorator < SimpleDelegator
|
|
9
|
+
delegate :id, :to => :__getobj__
|
|
10
|
+
|
|
11
|
+
def self.decorate(object)
|
|
12
|
+
new(object)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.decorate_collection(collection)
|
|
16
|
+
DecoratedEnumerableProxy.new(collection)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.model_name
|
|
20
|
+
ActiveModel::Name.new Post
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def decorator_method
|
|
24
|
+
'A method only available on the decorator'
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Minimal example of decorating a collection.
|
|
28
|
+
# A full example can be found in the draper project:
|
|
29
|
+
# https://github.com/jcasimir/draper/blob/master/lib/draper/decorated_enumerable_proxy.rb
|
|
30
|
+
class DecoratedEnumerableProxy < DelegateClass(ActiveRecord::Relation)
|
|
31
|
+
include Enumerable
|
|
32
|
+
|
|
33
|
+
delegate :as_json, :collect, :map, :each, :[], :all?, :include?, :first, :last, :shift, :to => :decorated_collection
|
|
34
|
+
|
|
35
|
+
def klass
|
|
36
|
+
PostDecorator
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def wrapped_collection
|
|
40
|
+
__getobj__
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def decorated_collection
|
|
44
|
+
@decorated_collection ||= wrapped_collection.collect { |member| klass.decorate(member) }
|
|
45
|
+
end
|
|
46
|
+
alias_method :to_ary, :decorated_collection
|
|
47
|
+
|
|
48
|
+
def each(&blk)
|
|
49
|
+
to_ary.each(&blk)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
require 'active_admin/abstract_view_factory'
|
|
4
|
+
|
|
5
|
+
describe ActiveAdmin::AbstractViewFactory do
|
|
6
|
+
|
|
7
|
+
let(:view_factory){ ActiveAdmin::AbstractViewFactory.new }
|
|
8
|
+
let(:view){ Class.new }
|
|
9
|
+
|
|
10
|
+
describe "registering a new view key" do
|
|
11
|
+
before do
|
|
12
|
+
view_factory.register my_new_view_class: view
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should respond to :my_new_view_class" do
|
|
16
|
+
view_factory.respond_to? :my_new_view_class
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should respond to :my_new_view_class=" do
|
|
20
|
+
view_factory.respond_to? :my_new_view_class=
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should generate a getter method" do
|
|
24
|
+
view_factory.my_new_view_class.should == view
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should be settable view a setter method" do
|
|
28
|
+
view_factory.my_new_view_class = "Some Obj"
|
|
29
|
+
view_factory.my_new_view_class.should == "Some Obj"
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe "array syntax access" do
|
|
34
|
+
before do
|
|
35
|
+
view_factory.register my_new_view_class: view
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should be available through array syntax" do
|
|
39
|
+
view_factory[:my_new_view_class].should == view
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "should be settable through array syntax" do
|
|
43
|
+
view_factory[:my_new_view_class] = "My New View Class"
|
|
44
|
+
view_factory[:my_new_view_class].should == "My New View Class"
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
describe "registering default views" do
|
|
49
|
+
before do
|
|
50
|
+
ActiveAdmin::AbstractViewFactory.register my_default_view_class: view
|
|
51
|
+
end
|
|
52
|
+
it "should generate a getter method" do
|
|
53
|
+
view_factory.my_default_view_class.should == view
|
|
54
|
+
end
|
|
55
|
+
it "should be settable view a setter method and not change default" do
|
|
56
|
+
view_factory.my_default_view_class = "Some Obj"
|
|
57
|
+
view_factory.my_default_view_class.should == "Some Obj"
|
|
58
|
+
view_factory.default_for(:my_default_view_class).should == view
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
describe "subclassing the ViewFactory" do
|
|
63
|
+
let(:subclass) do
|
|
64
|
+
ActiveAdmin::AbstractViewFactory.register my_subclassed_view: "From Parent"
|
|
65
|
+
Class.new(ActiveAdmin::AbstractViewFactory) do
|
|
66
|
+
def my_subclassed_view
|
|
67
|
+
"From Subclass"
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it "should use the subclass implementation" do
|
|
73
|
+
factory = subclass.new
|
|
74
|
+
factory.my_subclassed_view.should == "From Subclass"
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
end
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe 'defining new actions from registration blocks' do
|
|
4
|
+
|
|
5
|
+
let(:controller){ Admin::PostsController }
|
|
6
|
+
|
|
7
|
+
describe "generating a new member action" do
|
|
8
|
+
before do
|
|
9
|
+
action!
|
|
10
|
+
reload_routes!
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
after(:each) do
|
|
14
|
+
controller.clear_member_actions!
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
context "with a block" do
|
|
18
|
+
let(:action!) do
|
|
19
|
+
ActiveAdmin.register Post do
|
|
20
|
+
member_action :comment do
|
|
21
|
+
# Do nothing
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should create a new public instance method" do
|
|
27
|
+
controller.public_instance_methods.collect(&:to_s).should include("comment")
|
|
28
|
+
end
|
|
29
|
+
it "should add itself to the member actions config" do
|
|
30
|
+
controller.active_admin_config.member_actions.size.should == 1
|
|
31
|
+
end
|
|
32
|
+
it "should create a new named route" do
|
|
33
|
+
Rails.application.routes.url_helpers.methods.collect(&:to_s).should include("comment_admin_post_path")
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
context "without a block" do
|
|
38
|
+
let(:action!) do
|
|
39
|
+
ActiveAdmin.register Post do
|
|
40
|
+
member_action :comment
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
it "should still generate a new empty action" do
|
|
44
|
+
controller.public_instance_methods.collect(&:to_s).should include("comment")
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
context "with :title" do
|
|
49
|
+
let(:action!) do
|
|
50
|
+
ActiveAdmin.register Post do
|
|
51
|
+
member_action :comment, :title => "My Awesome Comment"
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
subject { find_before_filter controller, :comment }
|
|
56
|
+
|
|
57
|
+
it { should set_page_title_to "My Awesome Comment" }
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
describe "generate a new collection action" do
|
|
62
|
+
before do
|
|
63
|
+
action!
|
|
64
|
+
reload_routes!
|
|
65
|
+
end
|
|
66
|
+
after(:each) do
|
|
67
|
+
controller.clear_collection_actions!
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
context "with a block" do
|
|
71
|
+
let(:action!) do
|
|
72
|
+
ActiveAdmin.register Post do
|
|
73
|
+
collection_action :comments do
|
|
74
|
+
# Do nothing
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
it "should create a new public instance method" do
|
|
79
|
+
controller.public_instance_methods.collect(&:to_s).should include("comments")
|
|
80
|
+
end
|
|
81
|
+
it "should add itself to the member actions config" do
|
|
82
|
+
controller.active_admin_config.collection_actions.size.should == 1
|
|
83
|
+
end
|
|
84
|
+
it "should create a new named route" do
|
|
85
|
+
Rails.application.routes.url_helpers.methods.collect(&:to_s).should include("comments_admin_posts_path")
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
context "without a block" do
|
|
89
|
+
let(:action!) do
|
|
90
|
+
ActiveAdmin.register Post do
|
|
91
|
+
collection_action :comments
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
it "should still generate a new empty action" do
|
|
95
|
+
controller.public_instance_methods.collect(&:to_s).should include("comments")
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
context "with :title" do
|
|
99
|
+
let(:action!) do
|
|
100
|
+
ActiveAdmin.register Post do
|
|
101
|
+
collection_action :comments, :title => "My Awesome Comments"
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
subject { find_before_filter controller, :comments }
|
|
106
|
+
|
|
107
|
+
it { should set_page_title_to "My Awesome Comments" }
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def find_before_filter(controller, action)
|
|
112
|
+
controller._process_action_callbacks.detect { |f| f.kind == :before && f.options[:only] == [action] }
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
RSpec::Matchers.define :set_page_title_to do |expected|
|
|
116
|
+
match do |filter|
|
|
117
|
+
filter.raw_filter.call
|
|
118
|
+
@actual = filter.klass.instance_variable_get(:@page_title)
|
|
119
|
+
@actual == expected
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
failure_message_for_should do |filter|
|
|
123
|
+
message = "expected before_filter to set the @page_title to '#{expected}', but was '#{@actual}'"
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ActiveAdmin do
|
|
4
|
+
%w(register register_page unload! load! routes).each do |method|
|
|
5
|
+
it "delegates ##{method} to application" do
|
|
6
|
+
ActiveAdmin.application.should_receive(method)
|
|
7
|
+
|
|
8
|
+
ActiveAdmin.send(method)
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|