aa-rails4 0.6.0
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/.document +5 -0
- data/.gitignore +43 -0
- data/.travis.yml +8 -0
- data/.yardopts +7 -0
- data/CHANGELOG.md +894 -0
- data/CONTRIBUTING.md +121 -0
- data/Gemfile +40 -0
- data/Guardfile +7 -0
- data/LICENSE +25 -0
- data/README.rdoc +118 -0
- data/Rakefile +26 -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 +3 -0
- data/app/assets/javascripts/active_admin/base.js +5 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.checkbox-toggler.js.coffee +37 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +105 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +97 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.table-checkbox-toggler.js.coffee +25 -0
- data/app/assets/javascripts/active_admin/lib/namespace.js.coffee +3 -0
- data/app/assets/javascripts/active_admin/pages/application.js.coffee +21 -0
- data/app/assets/javascripts/active_admin/pages/batch_actions.js.coffee +26 -0
- data/app/assets/stylesheets/active_admin/_base.css.scss +41 -0
- data/app/assets/stylesheets/active_admin/_forms.css.scss +281 -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 +108 -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 +24 -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 +26 -0
- data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +44 -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 +18 -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 +92 -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 +90 -0
- data/config/locales/en.yml +101 -0
- data/config/locales/es.yml +106 -0
- data/config/locales/es_MX.yml +104 -0
- data/config/locales/fr.yml +89 -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 +87 -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 +89 -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 +56 -0
- data/docs/1-general-configuration.md +129 -0
- data/docs/10-custom-pages.md +96 -0
- data/docs/11-decorators.md +66 -0
- data/docs/12-arbre-components.md +144 -0
- data/docs/13-authorization-adapter.md +206 -0
- data/docs/2-resource-customization.md +292 -0
- data/docs/3-index-pages.md +191 -0
- data/docs/3-index-pages/create-an-index.md +29 -0
- data/docs/3-index-pages/index-as-block.md +16 -0
- data/docs/3-index-pages/index-as-blog.md +61 -0
- data/docs/3-index-pages/index-as-grid.md +21 -0
- data/docs/3-index-pages/index-as-table.md +120 -0
- data/docs/4-csv-format.md +32 -0
- data/docs/5-forms.md +72 -0
- data/docs/6-show-pages.md +43 -0
- data/docs/7-sidebars.md +42 -0
- data/docs/8-custom-actions.md +139 -0
- data/docs/9-batch-actions.md +161 -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 +128 -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 +94 -0
- data/features/index/format_as_csv.feature +117 -0
- data/features/index/formats.feature +39 -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 +93 -0
- data/features/step_definitions/dashboard_steps.rb +15 -0
- data/features/step_definitions/factory_steps.rb +33 -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 +46 -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/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 +82 -0
- data/features/sti_resource.feature +73 -0
- data/features/support/env.rb +118 -0
- data/features/support/paths.rb +63 -0
- data/features/support/selectors.rb +45 -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.rb +120 -0
- data/lib/active_admin/abstract_view_factory.rb +95 -0
- data/lib/active_admin/application.rb +245 -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.rb +78 -0
- data/lib/active_admin/base_controller/authorization.rb +153 -0
- data/lib/active_admin/base_controller/menu.rb +34 -0
- data/lib/active_admin/batch_actions.rb +17 -0
- data/lib/active_admin/batch_actions/controller.rb +25 -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/callbacks.rb +87 -0
- data/lib/active_admin/cancan_adapter.rb +40 -0
- data/lib/active_admin/comments.rb +83 -0
- data/lib/active_admin/comments/comment.rb +49 -0
- data/lib/active_admin/comments/namespace_helper.rb +14 -0
- data/lib/active_admin/comments/resource_helper.rb +17 -0
- data/lib/active_admin/comments/show_page_helper.rb +23 -0
- data/lib/active_admin/comments/views.rb +2 -0
- data/lib/active_admin/comments/views/active_admin_comments.rb +75 -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.rb +9 -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 +50 -0
- data/lib/active_admin/filters/resource_extension.rb +129 -0
- data/lib/active_admin/form_builder.rb +189 -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.rb +51 -0
- data/lib/active_admin/iconic/icons.rb +142 -0
- data/lib/active_admin/inputs.rb +15 -0
- data/lib/active_admin/inputs/datepicker_input.rb +11 -0
- data/lib/active_admin/inputs/filter_base.rb +33 -0
- data/lib/active_admin/inputs/filter_base/search_method_select.rb +73 -0
- data/lib/active_admin/inputs/filter_boolean_input.rb +32 -0
- data/lib/active_admin/inputs/filter_check_boxes_input.rb +40 -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 +45 -0
- data/lib/active_admin/inputs/filter_string_input.rb +24 -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 +221 -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.rb +160 -0
- data/lib/active_admin/resource/action_items.rb +93 -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 +78 -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_collection.rb +42 -0
- data/lib/active_admin/resource_controller.rb +51 -0
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/actions.rb +81 -0
- data/lib/active_admin/resource_controller/data_access.rb +303 -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_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 +28 -0
- data/lib/active_admin/view_helpers.rb +21 -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 +47 -0
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +50 -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/views.rb +8 -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 +70 -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 +123 -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 +65 -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/dashboard_section_renderer.rb +19 -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 +150 -0
- data/lib/active_admin/views/index_as_grid.rb +76 -0
- data/lib/active_admin/views/index_as_table.rb +238 -0
- data/lib/active_admin/views/pages/base.rb +139 -0
- data/lib/active_admin/views/pages/dashboard.rb +62 -0
- data/lib/active_admin/views/pages/form.rb +51 -0
- data/lib/active_admin/views/pages/index.rb +158 -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/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 +78 -0
- data/lib/generators/active_admin/install/install_generator.rb +46 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +214 -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 +11 -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 +104 -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 +56 -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 +39 -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 +27 -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 +338 -0
- data/spec/unit/filters/resource_spec.rb +87 -0
- data/spec/unit/form_builder_spec.rb +478 -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 +108 -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 +79 -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 +22 -0
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +152 -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 +97 -0
- data/spec/unit/views/components/action_list_popover_spec.rb +30 -0
- data/spec/unit/views/components/attributes_table_spec.rb +131 -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 +247 -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 +182 -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 +39 -0
- data/tasks/js.rake +32 -0
- data/tasks/parallel_tests.rake +60 -0
- data/tasks/test.rake +79 -0
- data/tasks/yard.rake +6 -0
- metadata +883 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
module NavigationHelpers
|
|
2
|
+
# Maps a name to a path. Used by the
|
|
3
|
+
#
|
|
4
|
+
# When /^I go to (.+)$/ do |page_name|
|
|
5
|
+
#
|
|
6
|
+
# step definition in web_steps.rb
|
|
7
|
+
#
|
|
8
|
+
def path_to(page_name)
|
|
9
|
+
case page_name
|
|
10
|
+
|
|
11
|
+
when /the home\s?page/
|
|
12
|
+
'/'
|
|
13
|
+
when /the dashboard/
|
|
14
|
+
"/admin"
|
|
15
|
+
when /the new post page/
|
|
16
|
+
"/admin/posts/new"
|
|
17
|
+
when /the login page/
|
|
18
|
+
"/admin/login"
|
|
19
|
+
when /the admin password reset form with reset password token "([^"]*)"/
|
|
20
|
+
"/admin/password/edit?reset_password_token=#{$1}"
|
|
21
|
+
|
|
22
|
+
# the index page for posts in the root namespace
|
|
23
|
+
# the index page for posts in the user_admin namespace
|
|
24
|
+
when /^the index page for (.*) in the (.*) namespace$/
|
|
25
|
+
if $2 != 'root'
|
|
26
|
+
send(:"#{$2}_#{$1}_path")
|
|
27
|
+
else
|
|
28
|
+
send(:"#{$1}_path")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# same as above, except defaults to admin namespace
|
|
32
|
+
when /^the index page for (.*)$/
|
|
33
|
+
send(:"admin_#{$1}_path")
|
|
34
|
+
|
|
35
|
+
when /^the last author's posts$/
|
|
36
|
+
admin_user_posts_path(User.last)
|
|
37
|
+
|
|
38
|
+
when /^the last author's last post page$/
|
|
39
|
+
admin_user_post_path(User.last, Post.where(:author_id => User.last.id).last)
|
|
40
|
+
|
|
41
|
+
when /^the last post's edit page$/
|
|
42
|
+
edit_admin_post_path(Post.last)
|
|
43
|
+
|
|
44
|
+
# Add more mappings here.
|
|
45
|
+
# Here is an example that pulls values out of the Regexp:
|
|
46
|
+
#
|
|
47
|
+
# when /^(.*)'s profile page$/i
|
|
48
|
+
# user_profile_path(User.find_by_login($1))
|
|
49
|
+
|
|
50
|
+
else
|
|
51
|
+
begin
|
|
52
|
+
page_name =~ /the (.*) page/
|
|
53
|
+
path_components = $1.split(/\s+/)
|
|
54
|
+
self.send(path_components.push('path').join('_').to_sym)
|
|
55
|
+
rescue Object => e
|
|
56
|
+
raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
|
|
57
|
+
"Now, go and add a mapping in #{__FILE__}"
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
World(NavigationHelpers)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module HtmlSelectorsHelpers
|
|
2
|
+
# Maps a name to a selector. Used primarily by the
|
|
3
|
+
#
|
|
4
|
+
# When /^(.+) within (.+)$/ do |step, scope|
|
|
5
|
+
#
|
|
6
|
+
# step definitions in web_steps.rb
|
|
7
|
+
#
|
|
8
|
+
def selector_for(locator)
|
|
9
|
+
case locator
|
|
10
|
+
|
|
11
|
+
when "the page"
|
|
12
|
+
"html > body"
|
|
13
|
+
|
|
14
|
+
# Add more mappings here.
|
|
15
|
+
# Here is an example that pulls values out of the Regexp:
|
|
16
|
+
#
|
|
17
|
+
# when /^the (notice|error|info) flash$/
|
|
18
|
+
# ".flash.#{$1}"
|
|
19
|
+
|
|
20
|
+
# You can also return an array to use a different selector
|
|
21
|
+
# type, like:
|
|
22
|
+
#
|
|
23
|
+
# when /the header/
|
|
24
|
+
# [:xpath, "//header"]
|
|
25
|
+
|
|
26
|
+
when "index grid"
|
|
27
|
+
[:css, "table.index_grid"]
|
|
28
|
+
|
|
29
|
+
when /^the "([^"]*)" sidebar$/
|
|
30
|
+
[:css, "##{$1.gsub(" ", '').underscore}_sidebar_section"]
|
|
31
|
+
|
|
32
|
+
# This allows you to provide a quoted selector as the scope
|
|
33
|
+
# for "within" steps as was previously the default for the
|
|
34
|
+
# web steps:
|
|
35
|
+
when /^"(.+)"$/
|
|
36
|
+
$1
|
|
37
|
+
|
|
38
|
+
else
|
|
39
|
+
raise "Can't find mapping from \"#{locator}\" to a selector.\n" +
|
|
40
|
+
"Now, go and add a mapping in #{__FILE__}"
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
World(HtmlSelectorsHelpers)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
Feature: User Logging In
|
|
2
|
+
|
|
3
|
+
Logging in to the system as an admin user
|
|
4
|
+
|
|
5
|
+
Background:
|
|
6
|
+
Given a configuration of:
|
|
7
|
+
"""
|
|
8
|
+
ActiveAdmin.register Post
|
|
9
|
+
"""
|
|
10
|
+
And I am logged out
|
|
11
|
+
And an admin user "admin@example.com" exists
|
|
12
|
+
When I go to the dashboard
|
|
13
|
+
|
|
14
|
+
Scenario: Logging in Successfully
|
|
15
|
+
When I fill in "Email" with "admin@example.com"
|
|
16
|
+
And I fill in "Password" with "password"
|
|
17
|
+
And I press "Login"
|
|
18
|
+
Then I should be on the the dashboard
|
|
19
|
+
And I should see the element "a[href='/admin/logout' ]:contains('Logout')"
|
|
20
|
+
And I should see the element "a[href='/admin/admin_users/1']:contains('admin@example.com')"
|
|
21
|
+
|
|
22
|
+
Scenario: Attempting to log in with an incorrect email address
|
|
23
|
+
When I fill in "Email" with "not-an-admin@example.com"
|
|
24
|
+
And I fill in "Password" with "not-my-password"
|
|
25
|
+
And I press "Login"
|
|
26
|
+
Then I should see "Login"
|
|
27
|
+
And I should see "Invalid email or password."
|
|
28
|
+
|
|
29
|
+
Scenario: Attempting to log in with an incorrect password
|
|
30
|
+
When I fill in "Email" with "admin@example.com"
|
|
31
|
+
And I fill in "Password" with "not-my-password"
|
|
32
|
+
And I press "Login"
|
|
33
|
+
Then I should see "Login"
|
|
34
|
+
And I should see "Invalid email or password."
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
Feature: User Logging out
|
|
2
|
+
|
|
3
|
+
Logging out of the system as an admin user
|
|
4
|
+
|
|
5
|
+
Scenario: Logging out successfully
|
|
6
|
+
Given a configuration of:
|
|
7
|
+
"""
|
|
8
|
+
ActiveAdmin.register Post
|
|
9
|
+
"""
|
|
10
|
+
And I am logged in
|
|
11
|
+
When I go to the dashboard
|
|
12
|
+
And I follow "Logout"
|
|
13
|
+
Then I should see "Login"
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
Feature: User Resetting Password
|
|
2
|
+
|
|
3
|
+
Resetting my password as an admin user
|
|
4
|
+
|
|
5
|
+
Background:
|
|
6
|
+
Given a configuration of:
|
|
7
|
+
"""
|
|
8
|
+
ActiveAdmin.register Post
|
|
9
|
+
"""
|
|
10
|
+
And I am logged out
|
|
11
|
+
And an admin user "admin@example.com" exists
|
|
12
|
+
|
|
13
|
+
Scenario: Resetting password successfully
|
|
14
|
+
When I go to the dashboard
|
|
15
|
+
And I follow "Forgot your password?"
|
|
16
|
+
When I fill in "Email" with "admin@example.com"
|
|
17
|
+
And I press "Reset My Password"
|
|
18
|
+
Then I should see "You will receive an email with instructions about how to reset your password in a few minutes."
|
|
19
|
+
|
|
20
|
+
Scenario: Changing password after resetting
|
|
21
|
+
Given an admin user "admin@example.com" exists with reset password token "123reset"
|
|
22
|
+
When I go to the admin password reset form with reset password token "123reset"
|
|
23
|
+
And I fill in "Password" with "password"
|
|
24
|
+
And I fill in "Password confirmation" with "password"
|
|
25
|
+
And I press "Change my password"
|
|
26
|
+
Then I should see "success"
|
|
27
|
+
|
|
28
|
+
Scenario: Changing password after resetting with errors
|
|
29
|
+
Given an admin user "admin@example.com" exists with expired reset password token "123reset"
|
|
30
|
+
When I go to the admin password reset form with reset password token "123reset"
|
|
31
|
+
And I fill in "Password" with "password"
|
|
32
|
+
And I fill in "Password confirmation" with "wrong"
|
|
33
|
+
And I press "Change my password"
|
|
34
|
+
Then I should see "expired"
|
data/lib/active_admin.rb
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
require 'active_support/core_ext/class/attribute' # needed for Ransack
|
|
2
|
+
require 'ransack'
|
|
3
|
+
require 'ransack_ext'
|
|
4
|
+
require 'bourbon'
|
|
5
|
+
require 'devise'
|
|
6
|
+
require 'kaminari'
|
|
7
|
+
require 'formtastic'
|
|
8
|
+
require 'sass-rails'
|
|
9
|
+
require 'inherited_resources'
|
|
10
|
+
require 'jquery-rails'
|
|
11
|
+
require 'jquery-ui-rails'
|
|
12
|
+
require 'coffee-rails'
|
|
13
|
+
require 'arbre'
|
|
14
|
+
require 'active_admin/engine'
|
|
15
|
+
|
|
16
|
+
module ActiveAdmin
|
|
17
|
+
|
|
18
|
+
autoload :VERSION, 'active_admin/version'
|
|
19
|
+
autoload :Application, 'active_admin/application'
|
|
20
|
+
autoload :AssetRegistration, 'active_admin/asset_registration'
|
|
21
|
+
autoload :Authorization, 'active_admin/authorization_adapter'
|
|
22
|
+
autoload :AuthorizationAdapter, 'active_admin/authorization_adapter'
|
|
23
|
+
autoload :Breadcrumbs, 'active_admin/breadcrumbs'
|
|
24
|
+
autoload :CanCanAdapter, 'active_admin/cancan_adapter'
|
|
25
|
+
autoload :Callbacks, 'active_admin/callbacks'
|
|
26
|
+
autoload :Component, 'active_admin/component'
|
|
27
|
+
autoload :BaseController, 'active_admin/base_controller'
|
|
28
|
+
autoload :ControllerAction, 'active_admin/controller_action'
|
|
29
|
+
autoload :CSVBuilder, 'active_admin/csv_builder'
|
|
30
|
+
autoload :Deprecation, 'active_admin/deprecation'
|
|
31
|
+
autoload :Devise, 'active_admin/devise'
|
|
32
|
+
autoload :DSL, 'active_admin/dsl'
|
|
33
|
+
autoload :Event, 'active_admin/event'
|
|
34
|
+
autoload :FormBuilder, 'active_admin/form_builder'
|
|
35
|
+
autoload :Inputs, 'active_admin/inputs'
|
|
36
|
+
autoload :Iconic, 'active_admin/iconic'
|
|
37
|
+
autoload :Menu, 'active_admin/menu'
|
|
38
|
+
autoload :MenuCollection, 'active_admin/menu_collection'
|
|
39
|
+
autoload :MenuItem, 'active_admin/menu_item'
|
|
40
|
+
autoload :Namespace, 'active_admin/namespace'
|
|
41
|
+
autoload :Page, 'active_admin/page'
|
|
42
|
+
autoload :PagePresenter, 'active_admin/page_presenter'
|
|
43
|
+
autoload :PageController, 'active_admin/page_controller'
|
|
44
|
+
autoload :PageDSL, 'active_admin/page_dsl'
|
|
45
|
+
autoload :Reloader, 'active_admin/reloader'
|
|
46
|
+
autoload :Resource, 'active_admin/resource'
|
|
47
|
+
autoload :ResourceController, 'active_admin/resource_controller'
|
|
48
|
+
autoload :ResourceDSL, 'active_admin/resource_dsl'
|
|
49
|
+
autoload :Scope, 'active_admin/scope'
|
|
50
|
+
autoload :ScopeChain, 'active_admin/helpers/scope_chain'
|
|
51
|
+
autoload :SidebarSection, 'active_admin/sidebar_section'
|
|
52
|
+
autoload :TableBuilder, 'active_admin/table_builder'
|
|
53
|
+
autoload :ViewFactory, 'active_admin/view_factory'
|
|
54
|
+
autoload :ViewHelpers, 'active_admin/view_helpers'
|
|
55
|
+
autoload :Views, 'active_admin/views'
|
|
56
|
+
|
|
57
|
+
class << self
|
|
58
|
+
|
|
59
|
+
attr_accessor :application
|
|
60
|
+
|
|
61
|
+
def application
|
|
62
|
+
@application ||= ::ActiveAdmin::Application.new
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Gets called within the initializer
|
|
66
|
+
def setup
|
|
67
|
+
application.setup!
|
|
68
|
+
yield(application)
|
|
69
|
+
application.prepare!
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
delegate :register, :to => :application
|
|
73
|
+
delegate :register_page, :to => :application
|
|
74
|
+
delegate :unload!, :to => :application
|
|
75
|
+
delegate :load!, :to => :application
|
|
76
|
+
delegate :routes, :to => :application
|
|
77
|
+
|
|
78
|
+
# A callback is triggered each time (before) Active Admin loads the configuration files.
|
|
79
|
+
# In development mode, this will happen whenever the user changes files. In production
|
|
80
|
+
# it only happens on boot.
|
|
81
|
+
#
|
|
82
|
+
# The block takes the current instance of [ActiveAdmin::Application]
|
|
83
|
+
#
|
|
84
|
+
# Example:
|
|
85
|
+
#
|
|
86
|
+
# ActiveAdmin.before_load do |app|
|
|
87
|
+
# # Do some stuff before AA loads
|
|
88
|
+
# end
|
|
89
|
+
#
|
|
90
|
+
# @param [Block] block A block to call each time (before) AA loads resources
|
|
91
|
+
def before_load(&block)
|
|
92
|
+
ActiveAdmin::Event.subscribe ActiveAdmin::Application::BeforeLoadEvent, &block
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# A callback is triggered each time (after) Active Admin loads the configuration files. This
|
|
96
|
+
# is an opportunity to hook into Resources after they've been loaded.
|
|
97
|
+
#
|
|
98
|
+
# The block takes the current instance of [ActiveAdmin::Application]
|
|
99
|
+
#
|
|
100
|
+
# Example:
|
|
101
|
+
#
|
|
102
|
+
# ActiveAdmin.after_load do |app|
|
|
103
|
+
# app.namespaces.each do |name, namespace|
|
|
104
|
+
# puts "Namespace: #{name} loaded!"
|
|
105
|
+
# end
|
|
106
|
+
# end
|
|
107
|
+
#
|
|
108
|
+
# @param [Block] block A block to call each time (after) AA loads resources
|
|
109
|
+
def after_load(&block)
|
|
110
|
+
ActiveAdmin::Event.subscribe ActiveAdmin::Application::AfterLoadEvent, &block
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# Require internal Plugins
|
|
118
|
+
require 'active_admin/comments'
|
|
119
|
+
require 'active_admin/batch_actions'
|
|
120
|
+
require 'active_admin/filters'
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
class AbstractViewFactory
|
|
3
|
+
@@default_views = {}
|
|
4
|
+
|
|
5
|
+
def self.register(view_hash)
|
|
6
|
+
view_hash.each do |view_key, view_class|
|
|
7
|
+
@@default_views[view_key] = view_class
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def initialize
|
|
12
|
+
@views = {}
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Register a new view key with the view factory
|
|
16
|
+
#
|
|
17
|
+
# eg:
|
|
18
|
+
#
|
|
19
|
+
# factory = AbstractViewFactory.new
|
|
20
|
+
# factory.register :my_view => SomeViewClass
|
|
21
|
+
#
|
|
22
|
+
# You can setup many at the same time:
|
|
23
|
+
#
|
|
24
|
+
# factory.register :my_view => SomeClass,
|
|
25
|
+
# :another_view => OtherViewClass
|
|
26
|
+
#
|
|
27
|
+
def register(view_hash)
|
|
28
|
+
view_hash.each do |view_key, view_class|
|
|
29
|
+
@views[view_key] = view_class
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def default_for(key)
|
|
34
|
+
@@default_views[key.to_sym]
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def has_key?(key)
|
|
38
|
+
@views.has_key?(key.to_sym) || @@default_views.has_key?(key.to_sym)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def [](key)
|
|
42
|
+
get_view_for_key(key)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def []=(key, value)
|
|
46
|
+
set_view_for_key(key, value)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Override respond to to include keys
|
|
50
|
+
def respond_to?(method)
|
|
51
|
+
key = key_from_method_name(method)
|
|
52
|
+
if has_key?(key)
|
|
53
|
+
true
|
|
54
|
+
else
|
|
55
|
+
super
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
private
|
|
60
|
+
|
|
61
|
+
def method_missing(method, *args)
|
|
62
|
+
key = key_from_method_name(method)
|
|
63
|
+
if has_key?(key)
|
|
64
|
+
if method.to_s.include?('=')
|
|
65
|
+
self.class_eval <<-EOS
|
|
66
|
+
def #{key}=(value)
|
|
67
|
+
set_view_for_key(:#{key}, value)
|
|
68
|
+
end
|
|
69
|
+
EOS
|
|
70
|
+
else
|
|
71
|
+
self.class_eval <<-EOS
|
|
72
|
+
def #{key}
|
|
73
|
+
get_view_for_key(:#{key})
|
|
74
|
+
end
|
|
75
|
+
EOS
|
|
76
|
+
end
|
|
77
|
+
self.send(method, *args)
|
|
78
|
+
else
|
|
79
|
+
super
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def key_from_method_name(method)
|
|
84
|
+
method.to_s.gsub('=', '').to_sym
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def get_view_for_key(key)
|
|
88
|
+
@views[key.to_sym] || @@default_views[key.to_sym]
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def set_view_for_key(key, view)
|
|
92
|
+
@views[key.to_sym] = view
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
require 'active_admin/router'
|
|
2
|
+
require 'active_admin/helpers/settings'
|
|
3
|
+
|
|
4
|
+
module ActiveAdmin
|
|
5
|
+
class Application
|
|
6
|
+
include Settings
|
|
7
|
+
include Settings::Inheritance
|
|
8
|
+
|
|
9
|
+
settings_inherited_by Namespace
|
|
10
|
+
|
|
11
|
+
# The default namespace to put controllers and routes inside. Set this
|
|
12
|
+
# in config/initializers/active_admin.rb using:
|
|
13
|
+
#
|
|
14
|
+
# config.default_namespace = :super_admin
|
|
15
|
+
#
|
|
16
|
+
setting :default_namespace, :admin
|
|
17
|
+
|
|
18
|
+
attr_reader :namespaces
|
|
19
|
+
def initialize
|
|
20
|
+
@namespaces = {}
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Load paths for admin configurations. Add folders to this load path
|
|
24
|
+
# to load up other resources for administration. External gems can
|
|
25
|
+
# include their paths in this load path to provide active_admin UIs
|
|
26
|
+
setting :load_paths, [File.expand_path('app/admin', Rails.root)]
|
|
27
|
+
|
|
28
|
+
# The default number of resources to display on index pages
|
|
29
|
+
inheritable_setting :default_per_page, 30
|
|
30
|
+
|
|
31
|
+
# The title which gets displayed in the main layout
|
|
32
|
+
inheritable_setting :site_title, ""
|
|
33
|
+
|
|
34
|
+
# Set the site title link href (defaults to AA dashboard)
|
|
35
|
+
inheritable_setting :site_title_link, ""
|
|
36
|
+
|
|
37
|
+
# Set the site title image displayed in the main layout (has precendence over :site_title)
|
|
38
|
+
inheritable_setting :site_title_image, ""
|
|
39
|
+
|
|
40
|
+
# Set a favicon
|
|
41
|
+
inheritable_setting :favicon, false
|
|
42
|
+
|
|
43
|
+
# The view factory to use to generate all the view classes. Take
|
|
44
|
+
# a look at ActiveAdmin::ViewFactory
|
|
45
|
+
inheritable_setting :view_factory, ActiveAdmin::ViewFactory.new
|
|
46
|
+
|
|
47
|
+
# The method to call in controllers to get the current user
|
|
48
|
+
inheritable_setting :current_user_method, false
|
|
49
|
+
|
|
50
|
+
# The method to call in the controllers to ensure that there
|
|
51
|
+
# is a currently authenticated admin user
|
|
52
|
+
inheritable_setting :authentication_method, false
|
|
53
|
+
|
|
54
|
+
# The path to log user's out with. If set to a symbol, we assume
|
|
55
|
+
# that it's a method to call which returns the path
|
|
56
|
+
inheritable_setting :logout_link_path, :destroy_admin_user_session_path
|
|
57
|
+
|
|
58
|
+
# The method to use when generating the link for user logout
|
|
59
|
+
inheritable_setting :logout_link_method, :get
|
|
60
|
+
|
|
61
|
+
# Whether the batch actions are enabled or not
|
|
62
|
+
inheritable_setting :batch_actions, false
|
|
63
|
+
|
|
64
|
+
# Whether filters are enabled
|
|
65
|
+
inheritable_setting :filters, true
|
|
66
|
+
|
|
67
|
+
# The namespace root.
|
|
68
|
+
inheritable_setting :root_to, 'dashboard#index'
|
|
69
|
+
|
|
70
|
+
# Default CSV options
|
|
71
|
+
inheritable_setting :csv_options, {:col_sep => ','}
|
|
72
|
+
|
|
73
|
+
# Default Download Links options
|
|
74
|
+
inheritable_setting :download_links, true
|
|
75
|
+
|
|
76
|
+
# The authorization adapter to use
|
|
77
|
+
inheritable_setting :authorization_adapter, ActiveAdmin::AuthorizationAdapter
|
|
78
|
+
|
|
79
|
+
# A proc to be used when a user is not authorized to view the current resource
|
|
80
|
+
inheritable_setting :on_unauthorized_access, :rescue_active_admin_access_denied
|
|
81
|
+
|
|
82
|
+
# Active Admin makes educated guesses when displaying objects, this is
|
|
83
|
+
# the list of methods it tries calling in order
|
|
84
|
+
setting :display_name_methods, [ :display_name,
|
|
85
|
+
:full_name,
|
|
86
|
+
:name,
|
|
87
|
+
:username,
|
|
88
|
+
:login,
|
|
89
|
+
:title,
|
|
90
|
+
:email,
|
|
91
|
+
:to_s ]
|
|
92
|
+
|
|
93
|
+
# == Deprecated Settings
|
|
94
|
+
|
|
95
|
+
# (none currently)
|
|
96
|
+
|
|
97
|
+
include AssetRegistration
|
|
98
|
+
|
|
99
|
+
# Event that gets triggered on load of Active Admin
|
|
100
|
+
BeforeLoadEvent = 'active_admin.application.before_load'.freeze
|
|
101
|
+
AfterLoadEvent = 'active_admin.application.after_load'.freeze
|
|
102
|
+
|
|
103
|
+
# Runs before the app's AA initializer
|
|
104
|
+
def setup!
|
|
105
|
+
register_default_assets
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# Runs after the app's AA initializer
|
|
109
|
+
def prepare!
|
|
110
|
+
remove_active_admin_load_paths_from_rails_autoload
|
|
111
|
+
attach_reloader
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# Registers a brand new configuration for the given resource.
|
|
115
|
+
def register(resource, options = {}, &block)
|
|
116
|
+
ns_name = namespace_name(options)
|
|
117
|
+
namespace(ns_name).register resource, options, &block
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Creates a namespace for the given name
|
|
121
|
+
#
|
|
122
|
+
# Yields the namespace if a block is given
|
|
123
|
+
#
|
|
124
|
+
# @returns [Namespace] the new or existing namespace
|
|
125
|
+
def namespace(name)
|
|
126
|
+
name ||= :root
|
|
127
|
+
|
|
128
|
+
if namespaces[name]
|
|
129
|
+
namespace = namespaces[name]
|
|
130
|
+
else
|
|
131
|
+
namespace = namespaces[name] = Namespace.new(self, name)
|
|
132
|
+
ActiveAdmin::Event.dispatch ActiveAdmin::Namespace::RegisterEvent, namespace
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
yield(namespace) if block_given?
|
|
136
|
+
|
|
137
|
+
namespace
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
# Register a page
|
|
141
|
+
#
|
|
142
|
+
# @param name [String] The page name
|
|
143
|
+
# @options [Hash] Accepts option :namespace.
|
|
144
|
+
# @&block The registration block.
|
|
145
|
+
#
|
|
146
|
+
def register_page(name, options = {}, &block)
|
|
147
|
+
ns_name = namespace_name(options)
|
|
148
|
+
namespace(ns_name).register_page name, options, &block
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# Whether all configuration files have been loaded
|
|
152
|
+
def loaded?
|
|
153
|
+
@@loaded ||= false
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# Removes all defined controllers from memory. Useful in
|
|
157
|
+
# development, where they are reloaded on each request.
|
|
158
|
+
def unload!
|
|
159
|
+
namespaces.values.each{ |namespace| namespace.unload! }
|
|
160
|
+
@@loaded = false
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
# Loads all ruby files that are within the load_paths setting.
|
|
164
|
+
# To reload everything simply call `ActiveAdmin.unload!`
|
|
165
|
+
def load!
|
|
166
|
+
unless loaded?
|
|
167
|
+
ActiveAdmin::Event.dispatch BeforeLoadEvent, self # before_load hook
|
|
168
|
+
files.each{ |file| load file } # load files
|
|
169
|
+
namespace(default_namespace) # init AA resources
|
|
170
|
+
ActiveAdmin::Event.dispatch AfterLoadEvent, self # after_load hook
|
|
171
|
+
@@loaded = true
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# Returns ALL the files to be loaded
|
|
176
|
+
def files
|
|
177
|
+
load_paths.flatten.compact.uniq.map{ |path| Dir["#{path}/**/*.rb"] }.flatten
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def router
|
|
181
|
+
@router ||= Router.new(self)
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
# One-liner called by user's config/routes.rb file
|
|
185
|
+
def routes(rails_router)
|
|
186
|
+
load!
|
|
187
|
+
router.apply(rails_router)
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
# Adds before, around and after filters to all controllers.
|
|
191
|
+
# Example usage:
|
|
192
|
+
# ActiveAdmin.before_filter :authenticate_admin!
|
|
193
|
+
#
|
|
194
|
+
%w(before_filter skip_before_filter after_filter around_filter).each do |name|
|
|
195
|
+
define_method name do |*args, &block|
|
|
196
|
+
ActiveAdmin::BaseController.send name, *args, &block
|
|
197
|
+
ActiveAdmin::Devise::PasswordsController.send name, *args, &block
|
|
198
|
+
ActiveAdmin::Devise::SessionsController.send name, *args, &block
|
|
199
|
+
ActiveAdmin::Devise::UnlocksController.send name, *args, &block
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
# Helper method to add a dashboard section
|
|
204
|
+
def dashboard_section(name, options = {}, &block)
|
|
205
|
+
ActiveAdmin::Dashboards.add_section(name, options, &block)
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
private
|
|
209
|
+
|
|
210
|
+
# Return either the passed in namespace or the default
|
|
211
|
+
def namespace_name(options)
|
|
212
|
+
options.fetch(:namespace){ default_namespace }
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def register_default_assets
|
|
216
|
+
register_stylesheet 'active_admin.css', media: 'screen'
|
|
217
|
+
register_stylesheet 'active_admin/print.css', media: 'print'
|
|
218
|
+
|
|
219
|
+
register_javascript 'active_admin.js'
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
# Since the default load path, app/admin, is alphabetically before app/models, we have
|
|
223
|
+
# to remove it from the host app's +autoload_paths+ to prevent missing constant errors.
|
|
224
|
+
def remove_active_admin_load_paths_from_rails_autoload
|
|
225
|
+
ActiveSupport::Dependencies.autoload_paths.reject!{ |path| load_paths.include? path }
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
# Hooks the app/admin directory into our Rails Engine's +watchable_dirs+, so the
|
|
229
|
+
# files are automatically reloaded in your development environment.
|
|
230
|
+
#
|
|
231
|
+
# If files have changed on disk, we forcibly unload all AA configurations, and
|
|
232
|
+
# tell the host application to redraw routes (triggering AA itself to reload).
|
|
233
|
+
def attach_reloader
|
|
234
|
+
load_paths.each do |path|
|
|
235
|
+
ActiveAdmin::Engine.config.watchable_dirs[path] = [:rb]
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
app = self
|
|
239
|
+
ActionDispatch::Reloader.to_prepare do
|
|
240
|
+
app.unload!
|
|
241
|
+
Rails.application.reload_routes!
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
end
|