activeadmin-orac 1.0.0.pre4
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 +15 -0
- data/.gitignore +49 -0
- data/.hound.yml +14 -0
- data/.travis.yml +40 -0
- data/.yardopts +8 -0
- data/CHANGELOG.md +120 -0
- data/CODE_OF_CONDUCT.md +22 -0
- data/CONTRIBUTING.md +144 -0
- data/Gemfile +78 -0
- data/Guardfile +8 -0
- data/LICENSE +20 -0
- data/README.md +102 -0
- data/Rakefile +33 -0
- data/activeadmin.gemspec +31 -0
- data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +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/base.js.coffee +9 -0
- data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
- data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
- data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +7 -0
- data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +10 -0
- data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +22 -0
- data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +3 -0
- data/app/assets/javascripts/active_admin/jquery_ui.js.erb +11 -0
- data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +39 -0
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +44 -0
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +101 -0
- data/app/assets/javascripts/active_admin/lib/flash.js.coffee +19 -0
- data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +79 -0
- data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +45 -0
- data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +42 -0
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +24 -0
- data/app/assets/stylesheets/active_admin/_base.scss +41 -0
- data/app/assets/stylesheets/active_admin/_forms.scss +333 -0
- data/app/assets/stylesheets/active_admin/_header.scss +156 -0
- data/app/assets/stylesheets/active_admin/_mixins.scss +1 -0
- data/app/assets/stylesheets/active_admin/_typography.scss +100 -0
- data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +11 -0
- data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +30 -0
- data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
- data/app/assets/stylesheets/active_admin/components/_buttons.scss +6 -0
- data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
- data/app/assets/stylesheets/active_admin/components/_comments.scss +41 -0
- data/app/assets/stylesheets/active_admin/components/_date_picker.scss +149 -0
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +152 -0
- data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -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/_modal_dialog.scss +34 -0
- data/app/assets/stylesheets/active_admin/components/_pagination.scss +44 -0
- data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
- data/app/assets/stylesheets/active_admin/components/_scopes.scss +10 -0
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +16 -0
- data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
- data/app/assets/stylesheets/active_admin/components/_tables.scss +110 -0
- data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
- data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
- data/app/assets/stylesheets/active_admin/mixins/_all.scss +10 -0
- data/app/assets/stylesheets/active_admin/mixins/_buttons.scss +65 -0
- data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
- data/app/assets/stylesheets/active_admin/mixins/_reset.scss +165 -0
- data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
- data/app/assets/stylesheets/active_admin/mixins/_sections.scss +41 -0
- data/app/assets/stylesheets/active_admin/mixins/_shadows.scss +15 -0
- data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
- data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +17 -0
- data/app/assets/stylesheets/active_admin/mixins/_variables.scss +34 -0
- data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
- data/app/assets/stylesheets/active_admin/print.scss +288 -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 +41 -0
- data/app/views/active_admin/devise/confirmations/new.html.erb +15 -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 +18 -0
- data/app/views/active_admin/devise/passwords/new.html.erb +15 -0
- data/app/views/active_admin/devise/registrations/new.html.erb +22 -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 +15 -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.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 +39 -0
- data/config/locales/ar.yml +136 -0
- data/config/locales/bg.yml +121 -0
- data/config/locales/bs.yml +122 -0
- data/config/locales/ca.yml +107 -0
- data/config/locales/cs.yml +110 -0
- data/config/locales/da.yml +106 -0
- data/config/locales/de-CH.yml +102 -0
- data/config/locales/de.yml +135 -0
- data/config/locales/el.yml +127 -0
- data/config/locales/en-GB.yml +98 -0
- data/config/locales/en.yml +136 -0
- data/config/locales/es-MX.yml +94 -0
- data/config/locales/es.yml +136 -0
- data/config/locales/fa.yml +120 -0
- data/config/locales/fi.yml +113 -0
- data/config/locales/fr.yml +119 -0
- data/config/locales/he.yml +95 -0
- data/config/locales/hr.yml +124 -0
- data/config/locales/hu.yml +99 -0
- data/config/locales/id.yml +136 -0
- data/config/locales/it.yml +136 -0
- data/config/locales/ja.yml +136 -0
- data/config/locales/ko.yml +121 -0
- data/config/locales/lt.yml +121 -0
- data/config/locales/lv.yml +93 -0
- data/config/locales/nb.yml +121 -0
- data/config/locales/nl.yml +134 -0
- data/config/locales/pl.yml +98 -0
- data/config/locales/pt-BR.yml +136 -0
- data/config/locales/pt-PT.yml +93 -0
- data/config/locales/ro.yml +97 -0
- data/config/locales/ru.yml +140 -0
- data/config/locales/sv-SE.yml +134 -0
- data/config/locales/tr.yml +136 -0
- data/config/locales/uk.yml +137 -0
- data/config/locales/vi.yml +94 -0
- data/config/locales/zh-CN.yml +112 -0
- data/config/locales/zh-TW.yml +136 -0
- data/cucumber.yml +3 -0
- data/docs/0-installation.md +112 -0
- data/docs/1-general-configuration.md +171 -0
- data/docs/10-custom-pages.md +106 -0
- data/docs/11-decorators.md +55 -0
- data/docs/12-arbre-components.md +150 -0
- data/docs/13-authorization-adapter.md +248 -0
- data/docs/14-gotchas.md +116 -0
- data/docs/2-resource-customization.md +422 -0
- data/docs/3-index-pages.md +272 -0
- data/docs/3-index-pages/custom-index.md +31 -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 +213 -0
- data/docs/4-csv-format.md +58 -0
- data/docs/5-forms.md +172 -0
- data/docs/6-show-pages.md +105 -0
- data/docs/7-sidebars.md +71 -0
- data/docs/8-custom-actions.md +160 -0
- data/docs/9-batch-actions.md +233 -0
- data/docs/README.md +24 -0
- data/features/action_item.feature +73 -0
- data/features/authorization.feature +64 -0
- data/features/authorization_cancan.feature +52 -0
- data/features/authorization_pundit.feature +37 -0
- data/features/belongs_to.feature +66 -0
- data/features/breadcrumb.feature +75 -0
- data/features/comments/commenting.feature +171 -0
- data/features/comments/viewing_index.feature +19 -0
- data/features/dashboard.feature +16 -0
- data/features/decorators.feature +43 -0
- data/features/development_reloading.feature +30 -0
- data/features/edit_page.feature +117 -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 +43 -0
- data/features/index/batch_actions.feature +196 -0
- data/features/index/filters.feature +161 -0
- data/features/index/format_as_csv.feature +203 -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 +291 -0
- data/features/index/index_blank_slate.feature +83 -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 +42 -0
- data/features/index/pagination.feature +63 -0
- data/features/index/switch_index_view.feature +73 -0
- data/features/menu.feature +53 -0
- data/features/meta_tags.feature +21 -0
- data/features/new_page.feature +109 -0
- data/features/registering_assets.feature +34 -0
- data/features/registering_pages.feature +148 -0
- data/features/registering_resources.feature +33 -0
- data/features/renamed_resource.feature +32 -0
- data/features/root_to.feature +17 -0
- data/features/show/columns.feature +40 -0
- data/features/show/default_content.feature +44 -0
- data/features/show/page_title.feature +59 -0
- data/features/show/tabs.feature +27 -0
- data/features/sidebar_sections.feature +210 -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 +20 -0
- data/features/step_definitions/additional_web_steps.rb +81 -0
- data/features/step_definitions/asset_steps.rb +15 -0
- data/features/step_definitions/attribute_steps.rb +18 -0
- data/features/step_definitions/batch_action_steps.rb +81 -0
- data/features/step_definitions/blog_steps.rb +3 -0
- data/features/step_definitions/breadcrumb_steps.rb +3 -0
- data/features/step_definitions/column_steps.rb +8 -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 +35 -0
- data/features/step_definitions/filter_steps.rb +39 -0
- data/features/step_definitions/flash_steps.rb +11 -0
- data/features/step_definitions/format_steps.rb +52 -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/meta_tag_steps.rb +3 -0
- data/features/step_definitions/pagination_steps.rb +15 -0
- data/features/step_definitions/sidebar_steps.rb +13 -0
- data/features/step_definitions/site_title_steps.rb +17 -0
- data/features/step_definitions/symbol_leak_steps.rb +3 -0
- data/features/step_definitions/tab_steps.rb +8 -0
- data/features/step_definitions/table_steps.rb +116 -0
- data/features/step_definitions/user_steps.rb +52 -0
- data/features/step_definitions/web_steps.rb +85 -0
- data/features/sti_resource.feature +65 -0
- data/features/strong_parameters.feature +73 -0
- data/features/support/env.rb +162 -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 +36 -0
- data/features/users/logging_out.feature +13 -0
- data/features/users/resetting_password.feature +34 -0
- data/lib/active_admin.rb +130 -0
- data/lib/active_admin/abstract_view_factory.rb +85 -0
- data/lib/active_admin/application.rb +324 -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 +87 -0
- data/lib/active_admin/base_controller/authorization.rb +130 -0
- data/lib/active_admin/base_controller/menu.rb +38 -0
- data/lib/active_admin/batch_actions.rb +16 -0
- data/lib/active_admin/batch_actions/controller.rb +40 -0
- data/lib/active_admin/batch_actions/resource_extension.rb +159 -0
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +38 -0
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +58 -0
- data/lib/active_admin/batch_actions/views/selection_cells.rb +37 -0
- data/lib/active_admin/callbacks.rb +88 -0
- data/lib/active_admin/cancan_adapter.rb +36 -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 +129 -0
- data/lib/active_admin/dependency.rb +168 -0
- data/lib/active_admin/deprecation.rb +35 -0
- data/lib/active_admin/devise.rb +80 -0
- data/lib/active_admin/dsl.rb +173 -0
- data/lib/active_admin/engine.rb +16 -0
- data/lib/active_admin/error.rb +62 -0
- data/lib/active_admin/event.rb +24 -0
- data/lib/active_admin/filters.rb +9 -0
- data/lib/active_admin/filters/active.rb +30 -0
- data/lib/active_admin/filters/dsl.rb +21 -0
- data/lib/active_admin/filters/forms.rb +83 -0
- data/lib/active_admin/filters/formtastic_addons.rb +79 -0
- data/lib/active_admin/filters/humanized.rb +68 -0
- data/lib/active_admin/filters/resource_extension.rb +194 -0
- data/lib/active_admin/form_builder.rb +145 -0
- data/lib/active_admin/generators/boilerplate.rb +45 -0
- data/lib/active_admin/helpers/collection.rb +17 -0
- data/lib/active_admin/helpers/i18n.rb +7 -0
- data/lib/active_admin/helpers/optional_display.rb +38 -0
- data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
- data/lib/active_admin/helpers/scope_chain.rb +23 -0
- data/lib/active_admin/helpers/settings.rb +115 -0
- data/lib/active_admin/inputs.rb +20 -0
- data/lib/active_admin/inputs/datepicker_input.rb +20 -0
- data/lib/active_admin/inputs/filters/base.rb +44 -0
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
- data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
- data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
- data/lib/active_admin/inputs/filters/date_picker_input.rb +13 -0
- data/lib/active_admin/inputs/filters/date_range_input.rb +36 -0
- data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
- data/lib/active_admin/inputs/filters/select_input.rb +55 -0
- data/lib/active_admin/inputs/filters/string_input.rb +26 -0
- data/lib/active_admin/menu.rb +108 -0
- data/lib/active_admin/menu_collection.rb +93 -0
- data/lib/active_admin/menu_item.rb +97 -0
- data/lib/active_admin/namespace.rb +247 -0
- data/lib/active_admin/order_clause.rb +26 -0
- data/lib/active_admin/orm/active_record.rb +5 -0
- data/lib/active_admin/orm/active_record/comments.rb +95 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +45 -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.rb +2 -0
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +88 -0
- data/lib/active_admin/orm/mongoid.rb +1 -0
- data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
- data/lib/active_admin/page.rb +92 -0
- data/lib/active_admin/page_controller.rb +33 -0
- data/lib/active_admin/page_dsl.rb +28 -0
- data/lib/active_admin/page_presenter.rb +32 -0
- data/lib/active_admin/pundit_adapter.rb +68 -0
- data/lib/active_admin/reloader.rb +25 -0
- data/lib/active_admin/resource.rb +168 -0
- data/lib/active_admin/resource/action_items.rb +108 -0
- data/lib/active_admin/resource/belongs_to.rb +44 -0
- data/lib/active_admin/resource/controllers.rb +19 -0
- data/lib/active_admin/resource/includes.rb +12 -0
- data/lib/active_admin/resource/menu.rb +64 -0
- data/lib/active_admin/resource/naming.rb +62 -0
- data/lib/active_admin/resource/page_presenters.rb +82 -0
- data/lib/active_admin/resource/pagination.rb +23 -0
- data/lib/active_admin/resource/routes.rb +115 -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 +28 -0
- data/lib/active_admin/resource_collection.rb +72 -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/data_access.rb +317 -0
- data/lib/active_admin/resource_controller/decorators.rb +102 -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/streaming.rb +43 -0
- data/lib/active_admin/resource_dsl.rb +190 -0
- data/lib/active_admin/router.rb +106 -0
- data/lib/active_admin/scope.rb +56 -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.rb +19 -0
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +45 -0
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +33 -0
- data/lib/active_admin/view_helpers/display_helper.rb +97 -0
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +46 -0
- data/lib/active_admin/view_helpers/fields_for.rb +51 -0
- data/lib/active_admin/view_helpers/flash_helper.rb +14 -0
- data/lib/active_admin/view_helpers/form_helper.rb +20 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +97 -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/active_admin_form.rb +124 -0
- data/lib/active_admin/views/components/attributes_table.rb +94 -0
- data/lib/active_admin/views/components/blank_slate.rb +17 -0
- data/lib/active_admin/views/components/columns.rb +161 -0
- data/lib/active_admin/views/components/dropdown_menu.rb +71 -0
- data/lib/active_admin/views/components/index_list.rb +68 -0
- data/lib/active_admin/views/components/paginated_collection.rb +163 -0
- data/lib/active_admin/views/components/panel.rb +38 -0
- data/lib/active_admin/views/components/scopes.rb +66 -0
- data/lib/active_admin/views/components/sidebar_section.rb +34 -0
- data/lib/active_admin/views/components/site_title.rb +55 -0
- data/lib/active_admin/views/components/status_tag.rb +80 -0
- data/lib/active_admin/views/components/table_for.rb +218 -0
- data/lib/active_admin/views/components/tabs.rb +28 -0
- data/lib/active_admin/views/components/unsupported_browser.rb +11 -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 +373 -0
- data/lib/active_admin/views/pages/base.rb +147 -0
- data/lib/active_admin/views/pages/form.rb +65 -0
- data/lib/active_admin/views/pages/index.rb +163 -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 +66 -0
- data/lib/active_admin/views/title_bar.rb +55 -0
- data/lib/activeadmin.rb +1 -0
- data/lib/generators/active_admin/assets/assets_generator.rb +14 -0
- data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
- data/lib/generators/active_admin/assets/templates/active_admin.scss +17 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +65 -0
- data/lib/generators/active_admin/install/install_generator.rb +45 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +272 -0
- data/lib/generators/active_admin/install/templates/admin_user.rb.erb +30 -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/page/USAGE +8 -0
- data/lib/generators/active_admin/page/page_generator.rb +12 -0
- data/lib/generators/active_admin/page/templates/page.rb +5 -0
- data/lib/generators/active_admin/resource/resource_generator.rb +20 -0
- data/lib/generators/active_admin/resource/templates/admin.rb +45 -0
- data/lib/ransack_ext.rb +20 -0
- data/script/local +53 -0
- data/script/travis_cache +107 -0
- data/script/use_rails +53 -0
- data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
- data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +25 -0
- data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
- data/spec/javascripts/fixtures/checkboxes.html +9 -0
- data/spec/javascripts/fixtures/flashes.html +2 -0
- data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
- data/spec/javascripts/helpers/SpecHelper.js +3 -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/rails_helper.rb +161 -0
- data/spec/requests/default_namespace_spec.rb +61 -0
- data/spec/requests/javascript_spec.rb +22 -0
- data/spec/requests/memory_spec.rb +21 -0
- data/spec/requests/stylesheets_spec.rb +18 -0
- data/spec/spec_helper.rb +17 -0
- data/spec/support/active_admin_request_helpers.rb +27 -0
- data/spec/support/deferred_garbage_collection.rb +19 -0
- data/spec/support/detect_rails_version.rb +34 -0
- data/spec/support/jslint.yml +80 -0
- data/spec/support/rails_template.rb +162 -0
- data/spec/support/rails_template_with_data.rb +74 -0
- data/spec/support/templates/admin/stores.rb +9 -0
- data/spec/support/templates/en.yml +8 -0
- data/spec/support/templates/manifest.js +3 -0
- data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
- data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
- data/spec/support/templates/policies/admin_user_policy.rb +11 -0
- data/spec/support/templates/policies/application_policy.rb +45 -0
- data/spec/support/templates/policies/category_policy.rb +7 -0
- data/spec/support/templates/policies/post_policy.rb +15 -0
- data/spec/support/templates/policies/store_policy.rb +11 -0
- data/spec/support/templates/policies/user_policy.rb +11 -0
- data/spec/support/templates/post_decorator.rb +11 -0
- data/spec/unit/abstract_view_factory_spec.rb +79 -0
- data/spec/unit/action_builder_spec.rb +134 -0
- data/spec/unit/active_admin_spec.rb +11 -0
- data/spec/unit/application_spec.rb +165 -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/authorization/index_overriding_spec.rb +23 -0
- data/spec/unit/auto_link_spec.rb +69 -0
- data/spec/unit/batch_actions/resource_spec.rb +97 -0
- data/spec/unit/batch_actions/settings_spec.rb +61 -0
- data/spec/unit/belongs_to_spec.rb +65 -0
- data/spec/unit/cancan_adapter_spec.rb +43 -0
- data/spec/unit/comments_spec.rb +188 -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 +41 -0
- data/spec/unit/csv_builder_spec.rb +303 -0
- data/spec/unit/dependency_spec.rb +135 -0
- data/spec/unit/devise_spec.rb +96 -0
- data/spec/unit/dsl_spec.rb +122 -0
- data/spec/unit/filters/filter_form_builder_spec.rb +434 -0
- data/spec/unit/filters/humanized_spec.rb +64 -0
- data/spec/unit/filters/resource_spec.rb +128 -0
- data/spec/unit/form_builder_spec.rb +932 -0
- data/spec/unit/generators/install_spec.rb +24 -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/i18n_spec.rb +12 -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 +73 -0
- data/spec/unit/namespace/register_resource_spec.rb +160 -0
- data/spec/unit/namespace_spec.rb +103 -0
- data/spec/unit/order_clause_spec.rb +81 -0
- data/spec/unit/page_controller_spec.rb +5 -0
- data/spec/unit/page_spec.rb +78 -0
- data/spec/unit/pretty_format_spec.rb +77 -0
- data/spec/unit/pundit_adapter_spec.rb +98 -0
- data/spec/unit/resource/action_items_spec.rb +65 -0
- data/spec/unit/resource/includes_spec.rb +21 -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 +77 -0
- data/spec/unit/resource/scopes_spec.rb +50 -0
- data/spec/unit/resource/sidebars_spec.rb +43 -0
- data/spec/unit/resource_collection_spec.rb +175 -0
- data/spec/unit/resource_controller/data_access_spec.rb +140 -0
- data/spec/unit/resource_controller/decorators_spec.rb +94 -0
- data/spec/unit/resource_controller/sidebars_spec.rb +38 -0
- data/spec/unit/resource_controller_spec.rb +269 -0
- data/spec/unit/resource_registration_spec.rb +56 -0
- data/spec/unit/resource_spec.rb +337 -0
- data/spec/unit/routing_spec.rb +185 -0
- data/spec/unit/scope_spec.rb +185 -0
- data/spec/unit/settings_spec.rb +118 -0
- data/spec/unit/view_factory_spec.rb +19 -0
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +217 -0
- data/spec/unit/view_helpers/display_helper_spec.rb +165 -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/flash_helper_spec.rb +25 -0
- data/spec/unit/view_helpers/form_helper_spec.rb +43 -0
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +139 -0
- data/spec/unit/views/components/attributes_table_spec.rb +272 -0
- data/spec/unit/views/components/batch_action_selector_spec.rb +43 -0
- data/spec/unit/views/components/blank_slate_spec.rb +27 -0
- data/spec/unit/views/components/columns_spec.rb +189 -0
- data/spec/unit/views/components/index_list_spec.rb +35 -0
- data/spec/unit/views/components/index_table_for_spec.rb +127 -0
- data/spec/unit/views/components/paginated_collection_spec.rb +249 -0
- data/spec/unit/views/components/panel_spec.rb +58 -0
- data/spec/unit/views/components/sidebar_section_spec.rb +68 -0
- data/spec/unit/views/components/site_title_spec.rb +78 -0
- data/spec/unit/views/components/status_tag_spec.rb +249 -0
- data/spec/unit/views/components/table_for_spec.rb +434 -0
- data/spec/unit/views/components/tabs_spec.rb +39 -0
- data/spec/unit/views/components/unsupported_browser_spec.rb +41 -0
- data/spec/unit/views/index_as_blog_spec.rb +76 -0
- data/spec/unit/views/pages/form_spec.rb +51 -0
- data/spec/unit/views/pages/index_spec.rb +60 -0
- data/spec/unit/views/pages/layout_spec.rb +59 -0
- data/spec/unit/views/pages/show_spec.rb +33 -0
- data/spec/unit/views/tabbed_navigation_spec.rb +158 -0
- data/tasks/docs.rake +37 -0
- data/tasks/parallel_tests.rake +66 -0
- data/tasks/test.rake +91 -0
- data/tasks/yard.rake +9 -0
- metadata +974 -0
|
@@ -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.tr(" ", '').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,35 @@
|
|
|
1
|
+
Feature: User input shouldn't be symbolized
|
|
2
|
+
|
|
3
|
+
Background:
|
|
4
|
+
Given a configuration of:
|
|
5
|
+
"""
|
|
6
|
+
ActiveAdmin.register Post
|
|
7
|
+
"""
|
|
8
|
+
Given I am logged in
|
|
9
|
+
And 1 post exists
|
|
10
|
+
|
|
11
|
+
Scenario: The dashboard doesn't leak
|
|
12
|
+
Given I am on the dashboard with params "?really_long_malicious_key0"
|
|
13
|
+
Then "really_long_malicious_key0" shouldn't be a symbol
|
|
14
|
+
|
|
15
|
+
Scenario: The index page doesn't leak
|
|
16
|
+
Given I am on the index page for posts with params "?really_long_malicious_key1"
|
|
17
|
+
Then "really_long_malicious_key1" shouldn't be a symbol
|
|
18
|
+
|
|
19
|
+
@allow-rescue
|
|
20
|
+
Scenario: The filter query hash doesn't leak
|
|
21
|
+
Given I am on the index page for posts with params "?q[really_long_malicious_key2]"
|
|
22
|
+
Then "really_long_malicious_key2" shouldn't be a symbol
|
|
23
|
+
|
|
24
|
+
Scenario: The show page doesn't leak
|
|
25
|
+
Given I go to the first post show page with params "?really_long_malicious_key3"
|
|
26
|
+
Then "really_long_malicious_key3" shouldn't be a symbol
|
|
27
|
+
|
|
28
|
+
Scenario: The edit page doesn't leak
|
|
29
|
+
Given I go to the first post edit page with params "?really_long_malicious_key4"
|
|
30
|
+
Then "really_long_malicious_key4" shouldn't be a symbol
|
|
31
|
+
|
|
32
|
+
@allow-rescue
|
|
33
|
+
Scenario: Batch Actions don't leak
|
|
34
|
+
Given I POST to "admin/posts/batch_action" with params "?batch_action=really_long_malicious_key5"
|
|
35
|
+
Then "really_long_malicious_key5" shouldn't be a symbol
|
|
@@ -0,0 +1,36 @@
|
|
|
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
|
+
Given override locale "devise.failure.not_found_in_database" with "Invalid email or password."
|
|
24
|
+
When I fill in "Email" with "not-an-admin@example.com"
|
|
25
|
+
And I fill in "Password" with "not-my-password"
|
|
26
|
+
And I press "Login"
|
|
27
|
+
Then I should see "Login"
|
|
28
|
+
And I should see "Invalid email or password."
|
|
29
|
+
|
|
30
|
+
Scenario: Attempting to log in with an incorrect password
|
|
31
|
+
Given override locale "devise.failure.invalid" with "Invalid email or password."
|
|
32
|
+
When I fill in "Email" with "admin@example.com"
|
|
33
|
+
And I fill in "Password" with "not-my-password"
|
|
34
|
+
And I press "Login"
|
|
35
|
+
Then I should see "Login"
|
|
36
|
+
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 on how to reset your password in a few minutes."
|
|
19
|
+
|
|
20
|
+
Scenario: Changing password after resetting
|
|
21
|
+
When "admin@example.com" requests a password reset with token "foobarbaz"
|
|
22
|
+
When I go to the admin password reset form with token "foobarbaz"
|
|
23
|
+
And I fill in the password field 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
|
+
When "admin@example.com" requests a password reset with token "foobarbaz" but it expires
|
|
30
|
+
When I go to the admin password reset form with token "foobarbaz"
|
|
31
|
+
And I fill in the password field 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,130 @@
|
|
|
1
|
+
require 'active_support/core_ext'
|
|
2
|
+
require 'set'
|
|
3
|
+
|
|
4
|
+
require 'ransack'
|
|
5
|
+
require 'ransack_ext'
|
|
6
|
+
require 'bourbon'
|
|
7
|
+
require 'kaminari'
|
|
8
|
+
require 'formtastic'
|
|
9
|
+
require 'formtastic_i18n'
|
|
10
|
+
require 'sass-rails'
|
|
11
|
+
require 'inherited_resources'
|
|
12
|
+
require 'jquery-rails'
|
|
13
|
+
require 'jquery-ui-rails'
|
|
14
|
+
require 'coffee-rails'
|
|
15
|
+
require 'arbre'
|
|
16
|
+
|
|
17
|
+
require 'active_admin/helpers/i18n'
|
|
18
|
+
|
|
19
|
+
module ActiveAdmin
|
|
20
|
+
|
|
21
|
+
autoload :VERSION, 'active_admin/version'
|
|
22
|
+
autoload :Application, 'active_admin/application'
|
|
23
|
+
autoload :AssetRegistration, 'active_admin/asset_registration'
|
|
24
|
+
autoload :Authorization, 'active_admin/authorization_adapter'
|
|
25
|
+
autoload :AuthorizationAdapter, 'active_admin/authorization_adapter'
|
|
26
|
+
autoload :Callbacks, 'active_admin/callbacks'
|
|
27
|
+
autoload :Component, 'active_admin/component'
|
|
28
|
+
autoload :BaseController, 'active_admin/base_controller'
|
|
29
|
+
autoload :CanCanAdapter, 'active_admin/cancan_adapter'
|
|
30
|
+
autoload :ControllerAction, 'active_admin/controller_action'
|
|
31
|
+
autoload :CSVBuilder, 'active_admin/csv_builder'
|
|
32
|
+
autoload :Dependency, 'active_admin/dependency'
|
|
33
|
+
autoload :Deprecation, 'active_admin/deprecation'
|
|
34
|
+
autoload :Devise, 'active_admin/devise'
|
|
35
|
+
autoload :DSL, 'active_admin/dsl'
|
|
36
|
+
autoload :Event, 'active_admin/event'
|
|
37
|
+
autoload :FormBuilder, 'active_admin/form_builder'
|
|
38
|
+
autoload :Inputs, 'active_admin/inputs'
|
|
39
|
+
autoload :Menu, 'active_admin/menu'
|
|
40
|
+
autoload :MenuCollection, 'active_admin/menu_collection'
|
|
41
|
+
autoload :MenuItem, 'active_admin/menu_item'
|
|
42
|
+
autoload :Namespace, 'active_admin/namespace'
|
|
43
|
+
autoload :OrderClause, 'active_admin/order_clause'
|
|
44
|
+
autoload :Page, 'active_admin/page'
|
|
45
|
+
autoload :PagePresenter, 'active_admin/page_presenter'
|
|
46
|
+
autoload :PageController, 'active_admin/page_controller'
|
|
47
|
+
autoload :PageDSL, 'active_admin/page_dsl'
|
|
48
|
+
autoload :PunditAdapter, 'active_admin/pundit_adapter'
|
|
49
|
+
autoload :Resource, 'active_admin/resource'
|
|
50
|
+
autoload :ResourceController, 'active_admin/resource_controller'
|
|
51
|
+
autoload :ResourceDSL, 'active_admin/resource_dsl'
|
|
52
|
+
autoload :Scope, 'active_admin/scope'
|
|
53
|
+
autoload :ScopeChain, 'active_admin/helpers/scope_chain'
|
|
54
|
+
autoload :SidebarSection, 'active_admin/sidebar_section'
|
|
55
|
+
autoload :TableBuilder, 'active_admin/table_builder'
|
|
56
|
+
autoload :ViewFactory, 'active_admin/view_factory'
|
|
57
|
+
autoload :ViewHelpers, 'active_admin/view_helpers'
|
|
58
|
+
autoload :Views, 'active_admin/views'
|
|
59
|
+
|
|
60
|
+
class << self
|
|
61
|
+
|
|
62
|
+
attr_accessor :application
|
|
63
|
+
|
|
64
|
+
def application
|
|
65
|
+
@application ||= ::ActiveAdmin::Application.new
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Gets called within the initializer
|
|
69
|
+
def setup
|
|
70
|
+
application.setup!
|
|
71
|
+
yield(application)
|
|
72
|
+
application.prepare!
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
delegate :register, to: :application
|
|
76
|
+
delegate :register_page, to: :application
|
|
77
|
+
delegate :unload!, to: :application
|
|
78
|
+
delegate :load!, to: :application
|
|
79
|
+
delegate :routes, to: :application
|
|
80
|
+
|
|
81
|
+
# A callback is triggered each time (before) Active Admin loads the configuration files.
|
|
82
|
+
# In development mode, this will happen whenever the user changes files. In production
|
|
83
|
+
# it only happens on boot.
|
|
84
|
+
#
|
|
85
|
+
# The block takes the current instance of [ActiveAdmin::Application]
|
|
86
|
+
#
|
|
87
|
+
# Example:
|
|
88
|
+
#
|
|
89
|
+
# ActiveAdmin.before_load do |app|
|
|
90
|
+
# # Do some stuff before AA loads
|
|
91
|
+
# end
|
|
92
|
+
#
|
|
93
|
+
# @param [Block] block A block to call each time (before) AA loads resources
|
|
94
|
+
def before_load(&block)
|
|
95
|
+
ActiveSupport::Notifications.subscribe ActiveAdmin::Application::BeforeLoadEvent, &ActiveAdmin::Event.wrap_block_for_active_support_notifications(block)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# A callback is triggered each time (after) Active Admin loads the configuration files. This
|
|
99
|
+
# is an opportunity to hook into Resources after they've been loaded.
|
|
100
|
+
#
|
|
101
|
+
# The block takes the current instance of [ActiveAdmin::Application]
|
|
102
|
+
#
|
|
103
|
+
# Example:
|
|
104
|
+
#
|
|
105
|
+
# ActiveAdmin.after_load do |app|
|
|
106
|
+
# app.namespaces.each do |name, namespace|
|
|
107
|
+
# puts "Namespace: #{name} loaded!"
|
|
108
|
+
# end
|
|
109
|
+
# end
|
|
110
|
+
#
|
|
111
|
+
# @param [Block] block A block to call each time (after) AA loads resources
|
|
112
|
+
def after_load(&block)
|
|
113
|
+
ActiveSupport::Notifications.subscribe ActiveAdmin::Application::AfterLoadEvent, &ActiveAdmin::Event.wrap_block_for_active_support_notifications(block)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Require things that don't support autoload
|
|
121
|
+
require 'active_admin/engine'
|
|
122
|
+
require 'active_admin/error'
|
|
123
|
+
|
|
124
|
+
# Require internal plugins
|
|
125
|
+
require 'active_admin/batch_actions'
|
|
126
|
+
require 'active_admin/filters'
|
|
127
|
+
|
|
128
|
+
# Require ORM-specific plugins
|
|
129
|
+
require 'active_admin/orm/active_record' if defined? ActiveRecord
|
|
130
|
+
require 'active_admin/orm/mongoid' if defined? Mongoid
|
|
@@ -0,0 +1,85 @@
|
|
|
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
|
+
def respond_to_missing?(method, include_private)
|
|
50
|
+
key = key_from_method_name(method)
|
|
51
|
+
if has_key?(key)
|
|
52
|
+
true
|
|
53
|
+
else
|
|
54
|
+
super
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
private
|
|
59
|
+
|
|
60
|
+
def method_missing(method, *args)
|
|
61
|
+
key = key_from_method_name(method)
|
|
62
|
+
if has_key?(key)
|
|
63
|
+
if method.to_s.include?('=')
|
|
64
|
+
set_view_for_key key, args.first
|
|
65
|
+
else
|
|
66
|
+
get_view_for_key key
|
|
67
|
+
end
|
|
68
|
+
else
|
|
69
|
+
super
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def key_from_method_name(method)
|
|
74
|
+
method.to_s.tr('=', '').to_sym
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def get_view_for_key(key)
|
|
78
|
+
@views[key.to_sym] || @@default_views[key.to_sym]
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def set_view_for_key(key, view)
|
|
82
|
+
@views[key.to_sym] = view
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
require 'active_admin/router'
|
|
2
|
+
require 'active_admin/reloader'
|
|
3
|
+
require 'active_admin/helpers/settings'
|
|
4
|
+
|
|
5
|
+
module ActiveAdmin
|
|
6
|
+
class Application
|
|
7
|
+
include Settings
|
|
8
|
+
include Settings::Inheritance
|
|
9
|
+
|
|
10
|
+
settings_inherited_by Namespace
|
|
11
|
+
|
|
12
|
+
# The default namespace to put controllers and routes inside. Set this
|
|
13
|
+
# in config/initializers/active_admin.rb using:
|
|
14
|
+
#
|
|
15
|
+
# config.default_namespace = :super_admin
|
|
16
|
+
#
|
|
17
|
+
setting :default_namespace, :admin
|
|
18
|
+
|
|
19
|
+
attr_reader :namespaces
|
|
20
|
+
def initialize
|
|
21
|
+
@namespaces = Namespace::Store.new
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Load paths for admin configurations. Add folders to this load path
|
|
25
|
+
# to load up other resources for administration. External gems can
|
|
26
|
+
# include their paths in this load path to provide active_admin UIs
|
|
27
|
+
setting :load_paths, [File.expand_path('app/admin', Rails.root)]
|
|
28
|
+
|
|
29
|
+
# The default number of resources to display on index pages
|
|
30
|
+
inheritable_setting :default_per_page, 30
|
|
31
|
+
|
|
32
|
+
# The max number of resources to display on index pages and batch exports
|
|
33
|
+
inheritable_setting :max_per_page, 10_000
|
|
34
|
+
|
|
35
|
+
# The title which gets displayed in the main layout
|
|
36
|
+
inheritable_setting :site_title, ""
|
|
37
|
+
|
|
38
|
+
# Set the site title link href (defaults to AA dashboard)
|
|
39
|
+
inheritable_setting :site_title_link, ""
|
|
40
|
+
|
|
41
|
+
# Set the site title image displayed in the main layout (has precendence over :site_title)
|
|
42
|
+
inheritable_setting :site_title_image, ""
|
|
43
|
+
|
|
44
|
+
# Set a favicon
|
|
45
|
+
inheritable_setting :favicon, false
|
|
46
|
+
|
|
47
|
+
# Additional meta tags to place in head of logged in pages.
|
|
48
|
+
inheritable_setting :meta_tags, {}
|
|
49
|
+
|
|
50
|
+
# Additional meta tags to place in head of logged out pages.
|
|
51
|
+
inheritable_setting :meta_tags_for_logged_out_pages, { robots: "noindex, nofollow" }
|
|
52
|
+
|
|
53
|
+
# The view factory to use to generate all the view classes. Take
|
|
54
|
+
# a look at ActiveAdmin::ViewFactory
|
|
55
|
+
inheritable_setting :view_factory, ActiveAdmin::ViewFactory.new
|
|
56
|
+
|
|
57
|
+
# The method to call in controllers to get the current user
|
|
58
|
+
inheritable_setting :current_user_method, false
|
|
59
|
+
|
|
60
|
+
# The method to call in the controllers to ensure that there
|
|
61
|
+
# is a currently authenticated admin user
|
|
62
|
+
inheritable_setting :authentication_method, false
|
|
63
|
+
|
|
64
|
+
# The path to log user's out with. If set to a symbol, we assume
|
|
65
|
+
# that it's a method to call which returns the path
|
|
66
|
+
inheritable_setting :logout_link_path, :destroy_admin_user_session_path
|
|
67
|
+
|
|
68
|
+
# The method to use when generating the link for user logout
|
|
69
|
+
inheritable_setting :logout_link_method, :get
|
|
70
|
+
|
|
71
|
+
# Whether the batch actions are enabled or not
|
|
72
|
+
inheritable_setting :batch_actions, false
|
|
73
|
+
|
|
74
|
+
# Whether filters are enabled
|
|
75
|
+
inheritable_setting :filters, true
|
|
76
|
+
|
|
77
|
+
# The namespace root.
|
|
78
|
+
inheritable_setting :root_to, 'dashboard#index'
|
|
79
|
+
|
|
80
|
+
# Options that a passed to root_to.
|
|
81
|
+
inheritable_setting :root_to_options, {}
|
|
82
|
+
|
|
83
|
+
# Display breadcrumbs
|
|
84
|
+
inheritable_setting :breadcrumb, true
|
|
85
|
+
|
|
86
|
+
# Default CSV options
|
|
87
|
+
inheritable_setting :csv_options, { col_sep: ',', byte_order_mark: "\xEF\xBB\xBF" }
|
|
88
|
+
|
|
89
|
+
# Default Download Links options
|
|
90
|
+
inheritable_setting :download_links, true
|
|
91
|
+
|
|
92
|
+
# The authorization adapter to use
|
|
93
|
+
inheritable_setting :authorization_adapter, ActiveAdmin::AuthorizationAdapter
|
|
94
|
+
|
|
95
|
+
# A proc to be used when a user is not authorized to view the current resource
|
|
96
|
+
inheritable_setting :on_unauthorized_access, :rescue_active_admin_access_denied
|
|
97
|
+
|
|
98
|
+
# A regex to detect unsupported browser, set to false to disable
|
|
99
|
+
inheritable_setting :unsupported_browser_matcher, /MSIE [1-8]\.0/
|
|
100
|
+
|
|
101
|
+
# Whether to display 'Current Filters' on search screen
|
|
102
|
+
inheritable_setting :current_filters, true
|
|
103
|
+
|
|
104
|
+
# Request parameters that are permitted by default
|
|
105
|
+
inheritable_setting :permitted_params, [
|
|
106
|
+
:utf8, :_method, :authenticity_token, :commit, :id
|
|
107
|
+
]
|
|
108
|
+
|
|
109
|
+
# Set flash message keys that shouldn't show in ActiveAdmin
|
|
110
|
+
inheritable_setting :flash_keys_to_except, ['timedout']
|
|
111
|
+
|
|
112
|
+
# Set default localize format for Date/Time values
|
|
113
|
+
setting :localize_format, :long
|
|
114
|
+
|
|
115
|
+
# Include association filters by default
|
|
116
|
+
inheritable_setting :include_default_association_filters, true
|
|
117
|
+
|
|
118
|
+
# Active Admin makes educated guesses when displaying objects, this is
|
|
119
|
+
# the list of methods it tries calling in order
|
|
120
|
+
setting :display_name_methods, [ :display_name,
|
|
121
|
+
:full_name,
|
|
122
|
+
:name,
|
|
123
|
+
:username,
|
|
124
|
+
:login,
|
|
125
|
+
:title,
|
|
126
|
+
:email,
|
|
127
|
+
:to_s ]
|
|
128
|
+
|
|
129
|
+
# To make debugging easier, by default don't stream in development
|
|
130
|
+
setting :disable_streaming_in, ['development']
|
|
131
|
+
|
|
132
|
+
# == Deprecated Settings
|
|
133
|
+
|
|
134
|
+
def allow_comments=(*)
|
|
135
|
+
raise "`config.allow_comments` is no longer provided in ActiveAdmin 1.x. Use `config.comments` instead."
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
include AssetRegistration
|
|
139
|
+
|
|
140
|
+
# Event that gets triggered on load of Active Admin
|
|
141
|
+
BeforeLoadEvent = 'active_admin.application.before_load'.freeze
|
|
142
|
+
AfterLoadEvent = 'active_admin.application.after_load'.freeze
|
|
143
|
+
|
|
144
|
+
# Runs before the app's AA initializer
|
|
145
|
+
def setup!
|
|
146
|
+
register_default_assets
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# Runs after the app's AA initializer
|
|
150
|
+
def prepare!
|
|
151
|
+
remove_active_admin_load_paths_from_rails_autoload_and_eager_load
|
|
152
|
+
attach_reloader
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# Registers a brand new configuration for the given resource.
|
|
156
|
+
def register(resource, options = {}, &block)
|
|
157
|
+
ns = options.fetch(:namespace){ default_namespace }
|
|
158
|
+
namespace(ns).register resource, options, &block
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
# Creates a namespace for the given name
|
|
162
|
+
#
|
|
163
|
+
# Yields the namespace if a block is given
|
|
164
|
+
#
|
|
165
|
+
# @return [Namespace] the new or existing namespace
|
|
166
|
+
def namespace(name)
|
|
167
|
+
name ||= :root
|
|
168
|
+
|
|
169
|
+
namespace = namespaces[name] ||= begin
|
|
170
|
+
namespace = Namespace.new(self, name)
|
|
171
|
+
ActiveSupport::Notifications.publish ActiveAdmin::Namespace::RegisterEvent, namespace
|
|
172
|
+
namespace
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
yield(namespace) if block_given?
|
|
176
|
+
|
|
177
|
+
namespace
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
# Register a page
|
|
181
|
+
#
|
|
182
|
+
# @param name [String] The page name
|
|
183
|
+
# @option [Hash] Accepts option :namespace.
|
|
184
|
+
# @&block The registration block.
|
|
185
|
+
#
|
|
186
|
+
def register_page(name, options = {}, &block)
|
|
187
|
+
ns = options.fetch(:namespace){ default_namespace }
|
|
188
|
+
namespace(ns).register_page name, options, &block
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
# Whether all configuration files have been loaded
|
|
192
|
+
def loaded?
|
|
193
|
+
@@loaded ||= false
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
# Removes all defined controllers from memory. Useful in
|
|
197
|
+
# development, where they are reloaded on each request.
|
|
198
|
+
def unload!
|
|
199
|
+
namespaces.each &:unload!
|
|
200
|
+
@@loaded = false
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
# Loads all ruby files that are within the load_paths setting.
|
|
204
|
+
# To reload everything simply call `ActiveAdmin.unload!`
|
|
205
|
+
def load!
|
|
206
|
+
unless loaded?
|
|
207
|
+
ActiveSupport::Notifications.publish BeforeLoadEvent, self # before_load hook
|
|
208
|
+
files.each{ |file| load file } # load files
|
|
209
|
+
namespace(default_namespace) # init AA resources
|
|
210
|
+
ActiveSupport::Notifications.publish AfterLoadEvent, self # after_load hook
|
|
211
|
+
@@loaded = true
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def load(file)
|
|
216
|
+
DatabaseHitDuringLoad.capture{ super }
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
# Returns ALL the files to be loaded
|
|
220
|
+
def files
|
|
221
|
+
load_paths.flatten.compact.uniq.flat_map{ |path| Dir["#{path}/**/*.rb"] }
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
def router
|
|
225
|
+
@router ||= Router.new(self)
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
# One-liner called by user's config/routes.rb file
|
|
229
|
+
def routes(rails_router)
|
|
230
|
+
load!
|
|
231
|
+
router.apply(rails_router)
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
# Adds before, around and after filters to all controllers.
|
|
235
|
+
# Example usage:
|
|
236
|
+
# ActiveAdmin.before_filter :authenticate_admin!
|
|
237
|
+
#
|
|
238
|
+
AbstractController::Callbacks::ClassMethods.public_instance_methods.
|
|
239
|
+
select { |m| m.match(/(filter|action)/) }.each do |name|
|
|
240
|
+
define_method name do |*args, &block|
|
|
241
|
+
controllers_for_filters.each do |controller|
|
|
242
|
+
controller.public_send name, *args, &block
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
def controllers_for_filters
|
|
248
|
+
controllers = [BaseController]
|
|
249
|
+
controllers.push *Devise.controllers_for_filters if Dependency.devise?
|
|
250
|
+
controllers
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
private
|
|
254
|
+
|
|
255
|
+
def register_default_assets
|
|
256
|
+
register_stylesheet 'active_admin.css', media: 'screen'
|
|
257
|
+
register_stylesheet 'active_admin/print.css', media: 'print'
|
|
258
|
+
|
|
259
|
+
register_javascript 'active_admin.js'
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
# Since app/admin is alphabetically before app/models, we have to remove it
|
|
263
|
+
# from the host app's +autoload_paths+ to prevent missing constant errors.
|
|
264
|
+
#
|
|
265
|
+
# As well, we have to remove it from +eager_load_paths+ to prevent the
|
|
266
|
+
# files from being loaded twice in production.
|
|
267
|
+
def remove_active_admin_load_paths_from_rails_autoload_and_eager_load
|
|
268
|
+
ActiveSupport::Dependencies.autoload_paths -= load_paths
|
|
269
|
+
Rails.application.config.eager_load_paths -= load_paths
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
# Hook into the Rails code reloading mechanism so that things are reloaded
|
|
273
|
+
# properly in development mode.
|
|
274
|
+
#
|
|
275
|
+
# If any of the app files (e.g. models) has changed, we need to reload all
|
|
276
|
+
# the admin files. If the admin files themselves has changed, we need to
|
|
277
|
+
# regenerate the routes as well.
|
|
278
|
+
def attach_reloader
|
|
279
|
+
Rails.application.config.after_initialize do |app|
|
|
280
|
+
unload_active_admin = -> { ActiveAdmin.application.unload! }
|
|
281
|
+
|
|
282
|
+
if app.config.reload_classes_only_on_change
|
|
283
|
+
# Rails is about to unload all the app files (e.g. models), so we
|
|
284
|
+
# should first unload the classes generated by Active Admin, otherwise
|
|
285
|
+
# they will contain references to the stale (unloaded) classes.
|
|
286
|
+
Reloader.to_prepare(prepend: true, &unload_active_admin)
|
|
287
|
+
else
|
|
288
|
+
# If the user has configured the app to always reload app files after
|
|
289
|
+
# each request, so we should unload the generated classes too.
|
|
290
|
+
Reloader.to_complete(&unload_active_admin)
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
admin_dirs = {}
|
|
294
|
+
|
|
295
|
+
load_paths.each do |path|
|
|
296
|
+
admin_dirs[path] = [:rb]
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
routes_reloader = app.config.file_watcher.new([], admin_dirs) do
|
|
300
|
+
app.reload_routes!
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
app.reloaders << routes_reloader
|
|
304
|
+
|
|
305
|
+
Reloader.to_prepare do
|
|
306
|
+
# Rails might have reloaded the routes for other reasons (e.g.
|
|
307
|
+
# routes.rb has changed), in which case Active Admin would have been
|
|
308
|
+
# loaded via the `ActiveAdmin.routes` call in `routes.rb`.
|
|
309
|
+
#
|
|
310
|
+
# Otherwise, we should check if any of the admin files are changed
|
|
311
|
+
# and force the routes to reload if necessary. This would again causes
|
|
312
|
+
# Active Admin to load via `ActiveAdmin.routes`.
|
|
313
|
+
#
|
|
314
|
+
# Finally, if Active Admin is still not loaded at this point, then we
|
|
315
|
+
# would need to load it manually.
|
|
316
|
+
unless ActiveAdmin.application.loaded?
|
|
317
|
+
routes_reloader.execute_if_updated
|
|
318
|
+
ActiveAdmin.application.load!
|
|
319
|
+
end
|
|
320
|
+
end
|
|
321
|
+
end
|
|
322
|
+
end
|
|
323
|
+
end
|
|
324
|
+
end
|