activeadmin-rb 1.4.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/.codeclimate.yml +64 -0
- data/.github/ISSUE_TEMPLATE.md +20 -0
- data/.gitignore +21 -0
- data/.mdlrc +1 -0
- data/.rubocop.yml +84 -0
- data/.simplecov +13 -0
- data/.travis.yml +49 -0
- data/.yardopts +7 -0
- data/CHANGELOG.md +389 -0
- data/CODE_OF_CONDUCT.md +22 -0
- data/CONTRIBUTING.md +184 -0
- data/Gemfile +58 -0
- data/LICENSE +20 -0
- data/README.md +75 -0
- data/Rakefile +54 -0
- data/activeadmin-rb.gemspec +32 -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 +13 -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 +11 -0
- data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +14 -0
- data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +26 -0
- data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +7 -0
- data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +42 -0
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +46 -0
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +104 -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 +46 -0
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +22 -0
- data/app/assets/stylesheets/active_admin/_base.scss +41 -0
- data/app/assets/stylesheets/active_admin/_forms.scss +338 -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 +6 -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 +55 -0
- data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
- data/app/assets/stylesheets/active_admin/components/_scopes.scss +13 -0
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +17 -0
- data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
- data/app/assets/stylesheets/active_admin/components/_tables.scss +113 -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 +8 -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/_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 +287 -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 +33 -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/kaminari/active_admin/_first_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_gap.html.erb +8 -0
- data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_page.html.erb +12 -0
- data/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
- data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
- data/app/views/layouts/active_admin.html.arb +1 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +39 -0
- data/codecov.yml +25 -0
- data/config/i18n-tasks.yml +26 -0
- data/config/locales/ar.yml +134 -0
- data/config/locales/bg.yml +119 -0
- data/config/locales/bs.yml +120 -0
- data/config/locales/ca.yml +105 -0
- data/config/locales/cs.yml +108 -0
- data/config/locales/da.yml +136 -0
- data/config/locales/de-CH.yml +100 -0
- data/config/locales/de.yml +143 -0
- data/config/locales/el.yml +125 -0
- data/config/locales/en-CA.yml +138 -0
- data/config/locales/en-GB.yml +138 -0
- data/config/locales/en.yml +161 -0
- data/config/locales/eo.yml +144 -0
- data/config/locales/es-MX.yml +95 -0
- data/config/locales/es.yml +161 -0
- data/config/locales/fa.yml +118 -0
- data/config/locales/fi.yml +111 -0
- data/config/locales/fr.yml +140 -0
- data/config/locales/he.yml +141 -0
- data/config/locales/hr.yml +122 -0
- data/config/locales/hu.yml +97 -0
- data/config/locales/id.yml +134 -0
- data/config/locales/it.yml +143 -0
- data/config/locales/ja.yml +140 -0
- data/config/locales/ko.yml +119 -0
- data/config/locales/lt.yml +141 -0
- data/config/locales/lv.yml +91 -0
- data/config/locales/nb.yml +129 -0
- data/config/locales/nl.yml +143 -0
- data/config/locales/pl.yml +167 -0
- data/config/locales/pt-BR.yml +142 -0
- data/config/locales/pt-PT.yml +91 -0
- data/config/locales/ro.yml +95 -0
- data/config/locales/ru.yml +140 -0
- data/config/locales/sk.yml +108 -0
- data/config/locales/sv-SE.yml +134 -0
- data/config/locales/tr.yml +143 -0
- data/config/locales/uk.yml +135 -0
- data/config/locales/vi.yml +133 -0
- data/config/locales/zh-CN.yml +142 -0
- data/config/locales/zh-TW.yml +134 -0
- data/config/mdl_style.rb +9 -0
- data/cucumber.yml +6 -0
- data/docs/0-installation.md +118 -0
- data/docs/1-general-configuration.md +204 -0
- data/docs/10-custom-pages.md +150 -0
- data/docs/11-decorators.md +59 -0
- data/docs/12-arbre-components.md +203 -0
- data/docs/13-authorization-adapter.md +285 -0
- data/docs/14-gotchas.md +138 -0
- data/docs/2-resource-customization.md +466 -0
- data/docs/3-index-pages.md +328 -0
- data/docs/3-index-pages/custom-index.md +35 -0
- data/docs/3-index-pages/index-as-block.md +19 -0
- data/docs/3-index-pages/index-as-blog.md +69 -0
- data/docs/3-index-pages/index-as-grid.md +27 -0
- data/docs/3-index-pages/index-as-table.md +225 -0
- data/docs/4-csv-format.md +74 -0
- data/docs/5-forms.md +231 -0
- data/docs/6-show-pages.md +81 -0
- data/docs/7-sidebars.md +75 -0
- data/docs/8-custom-actions.md +177 -0
- data/docs/9-batch-actions.md +237 -0
- data/docs/CNAME +1 -0
- data/docs/Gemfile +2 -0
- data/docs/README.md +24 -0
- data/docs/_config.yml +2 -0
- data/docs/_includes/footer.html +8 -0
- data/docs/_includes/google-analytics.html +16 -0
- data/docs/_includes/head.html +7 -0
- data/docs/_includes/toc.html +98 -0
- data/docs/_includes/top-menu.html +9 -0
- data/docs/_layouts/default.html +21 -0
- data/docs/documentation.md +60 -0
- data/docs/images/activeadmin.png +0 -0
- data/docs/images/code-header.png +0 -0
- data/docs/images/divider.png +0 -0
- data/docs/images/features.png +0 -0
- data/docs/index.html +125 -0
- data/docs/stylesheets/main.css +1152 -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 +124 -0
- data/features/breadcrumb.feature +76 -0
- data/features/comments/commenting.feature +178 -0
- data/features/comments/viewing_index.feature +19 -0
- data/features/create_another.feature +55 -0
- data/features/dashboard.feature +16 -0
- data/features/decorators.feature +43 -0
- data/features/development_reloading.feature +28 -0
- data/features/edit_page.feature +116 -0
- data/features/favicon.feature +20 -0
- data/features/first_boot.feature +16 -0
- data/features/footer.feature +29 -0
- data/features/global_navigation.feature +29 -0
- data/features/i18n.feature +55 -0
- data/features/index/batch_actions.feature +218 -0
- data/features/index/filters.feature +251 -0
- data/features/index/format_as_csv.feature +227 -0
- data/features/index/formats.feature +88 -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 +325 -0
- data/features/index/page_title.feature +41 -0
- data/features/index/pagination.feature +63 -0
- data/features/index/switch_index_view.feature +73 -0
- data/features/menu.feature +85 -0
- data/features/meta_tags.feature +21 -0
- data/features/new_page.feature +136 -0
- data/features/registering_assets.feature +38 -0
- data/features/registering_pages.feature +237 -0
- data/features/registering_resources.feature +33 -0
- data/features/renamed_resource.feature +30 -0
- data/features/root_to.feature +18 -0
- data/features/show/attributes_table_title.feature +54 -0
- data/features/show/columns.feature +40 -0
- data/features/show/default_content.feature +44 -0
- data/features/show/page_title.feature +58 -0
- data/features/show/tabs.feature +33 -0
- data/features/sidebar_sections.feature +210 -0
- data/features/site_title.feature +47 -0
- data/features/specifying_actions.feature +118 -0
- data/features/step_definitions/action_item_steps.rb +7 -0
- data/features/step_definitions/action_link_steps.rb +19 -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/attributes_table_title_steps.rb +11 -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 +13 -0
- data/features/step_definitions/column_steps.rb +8 -0
- data/features/step_definitions/comment_steps.rb +32 -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 +57 -0
- data/features/step_definitions/flash_steps.rb +11 -0
- data/features/step_definitions/footer_steps.rb +21 -0
- data/features/step_definitions/format_steps.rb +58 -0
- data/features/step_definitions/i18n_steps.rb +11 -0
- data/features/step_definitions/index_scope_steps.rb +42 -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/root_steps.rb +9 -0
- data/features/step_definitions/sidebar_steps.rb +11 -0
- data/features/step_definitions/site_title_steps.rb +31 -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 +86 -0
- data/features/sti_resource.feature +65 -0
- data/features/strong_parameters.feature +69 -0
- data/features/support/env.rb +121 -0
- data/features/support/paths.rb +73 -0
- data/features/support/regular_env.rb +7 -0
- data/features/support/reload_env.rb +7 -0
- data/features/support/selectors.rb +45 -0
- data/features/users/logging_in.feature +32 -0
- data/features/users/logging_out.feature +29 -0
- data/features/users/resetting_password.feature +30 -0
- data/gemfiles/rails_42.gemfile +11 -0
- data/gemfiles/rails_50.gemfile +11 -0
- data/gemfiles/rails_51.gemfile +11 -0
- data/gemfiles/rails_52.gemfile +12 -0
- data/lib/active_admin.rb +128 -0
- data/lib/active_admin/abstract_view_factory.rb +47 -0
- data/lib/active_admin/application.rb +241 -0
- data/lib/active_admin/application_settings.rb +39 -0
- data/lib/active_admin/asset_registration.rb +37 -0
- data/lib/active_admin/authorization_adapter.rb +129 -0
- data/lib/active_admin/base_controller.rb +81 -0
- data/lib/active_admin/base_controller/authorization.rb +128 -0
- data/lib/active_admin/base_controller/menu.rb +34 -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 +151 -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 +38 -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 +131 -0
- data/lib/active_admin/dependency.rb +172 -0
- data/lib/active_admin/deprecation.rb +10 -0
- data/lib/active_admin/devise.rb +80 -0
- data/lib/active_admin/dsl.rb +167 -0
- data/lib/active_admin/dynamic_setting.rb +38 -0
- data/lib/active_admin/dynamic_settings_node.rb +28 -0
- data/lib/active_admin/engine.rb +21 -0
- data/lib/active_admin/error.rb +62 -0
- data/lib/active_admin/event.rb +24 -0
- data/lib/active_admin/filters.rb +11 -0
- data/lib/active_admin/filters/active.rb +29 -0
- data/lib/active_admin/filters/active_filter.rb +123 -0
- data/lib/active_admin/filters/active_sidebar.rb +50 -0
- data/lib/active_admin/filters/dsl.rb +21 -0
- data/lib/active_admin/filters/forms.rb +85 -0
- data/lib/active_admin/filters/formtastic_addons.rb +79 -0
- data/lib/active_admin/filters/resource_extension.rb +155 -0
- data/lib/active_admin/form_builder.rb +182 -0
- data/lib/active_admin/generators/boilerplate.rb +45 -0
- data/lib/active_admin/helpers/collection.rb +19 -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/output_safety_helper.rb +35 -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/inputs.rb +21 -0
- data/lib/active_admin/inputs/datepicker_input.rb +27 -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 +49 -0
- data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
- data/lib/active_admin/inputs/filters/select_input.rb +58 -0
- data/lib/active_admin/inputs/filters/string_input.rb +26 -0
- data/lib/active_admin/inputs/filters/text_input.rb +25 -0
- data/lib/active_admin/localizers.rb +11 -0
- data/lib/active_admin/localizers/resource_localizer.rb +35 -0
- data/lib/active_admin/menu.rb +102 -0
- data/lib/active_admin/menu_collection.rb +91 -0
- data/lib/active_admin/menu_item.rb +69 -0
- data/lib/active_admin/namespace.rb +266 -0
- data/lib/active_admin/namespace_settings.rb +107 -0
- data/lib/active_admin/order_clause.rb +48 -0
- data/lib/active_admin/orm/active_record.rb +5 -0
- data/lib/active_admin/orm/active_record/comments.rb +101 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +31 -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 +95 -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 +111 -0
- data/lib/active_admin/page_controller.rb +29 -0
- data/lib/active_admin/page_dsl.rb +32 -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 +206 -0
- data/lib/active_admin/resource/action_items.rb +120 -0
- data/lib/active_admin/resource/attributes.rb +44 -0
- data/lib/active_admin/resource/belongs_to.rb +48 -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 +67 -0
- data/lib/active_admin/resource/naming.rb +62 -0
- data/lib/active_admin/resource/ordering.rb +11 -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 +134 -0
- data/lib/active_admin/resource/scope_to.rb +74 -0
- data/lib/active_admin/resource/scopes.rb +52 -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 +64 -0
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/data_access.rb +322 -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 +222 -0
- data/lib/active_admin/router.rb +113 -0
- data/lib/active_admin/scope.rb +60 -0
- data/lib/active_admin/settings_node.rb +19 -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 +20 -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 +95 -0
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +58 -0
- data/lib/active_admin/view_helpers/fields_for.rb +50 -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/scope_name_helper.rb +16 -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 +149 -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 +69 -0
- data/lib/active_admin/views/components/menu.rb +32 -0
- data/lib/active_admin/views/components/menu_item.rb +58 -0
- data/lib/active_admin/views/components/paginated_collection.rb +159 -0
- data/lib/active_admin/views/components/panel.rb +38 -0
- data/lib/active_admin/views/components/scopes.rb +72 -0
- data/lib/active_admin/views/components/sidebar.rb +13 -0
- data/lib/active_admin/views/components/sidebar_section.rb +37 -0
- data/lib/active_admin/views/components/site_title.rb +54 -0
- data/lib/active_admin/views/components/status_tag.rb +88 -0
- data/lib/active_admin/views/components/table_for.rb +209 -0
- data/lib/active_admin/views/components/tabs.rb +31 -0
- data/lib/active_admin/views/components/unsupported_browser.rb +11 -0
- data/lib/active_admin/views/footer.rb +30 -0
- data/lib/active_admin/views/header.rb +19 -0
- data/lib/active_admin/views/index_as_block.rb +36 -0
- data/lib/active_admin/views/index_as_blog.rb +155 -0
- data/lib/active_admin/views/index_as_grid.rb +80 -0
- data/lib/active_admin/views/index_as_table.rb +389 -0
- data/lib/active_admin/views/pages/base.rb +123 -0
- data/lib/active_admin/views/pages/form.rb +64 -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 +65 -0
- data/lib/active_admin/views/tabbed_navigation.rb +11 -0
- data/lib/active_admin/views/title_bar.rb +55 -0
- data/lib/activeadmin-rb.rb +1 -0
- data/lib/bug_report_templates/active_admin_master.rb +112 -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 +68 -0
- data/lib/generators/active_admin/install/install_generator.rb +45 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +293 -0
- data/lib/generators/active_admin/install/templates/admin_users.rb.erb +28 -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.erb +30 -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.erb +43 -0
- data/lib/ransack_ext.rb +20 -0
- data/spec/bug_report_templates_spec.rb +26 -0
- data/spec/changelog_spec.rb +15 -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_runner.rb +19 -0
- data/spec/rails_helper.rb +60 -0
- data/spec/requests/default_namespace_spec.rb +81 -0
- data/spec/requests/memory_spec.rb +25 -0
- data/spec/requests/stylesheets_spec.rb +18 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/support/active_admin_integration_spec_helper.rb +73 -0
- data/spec/support/active_admin_request_helpers.rb +39 -0
- data/spec/support/rails_template.rb +156 -0
- data/spec/support/rails_template_with_data.rb +327 -0
- data/spec/support/templates/admin/stores.rb +7 -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 +44 -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 +24 -0
- data/spec/unit/abstract_view_factory_spec.rb +78 -0
- data/spec/unit/action_builder_spec.rb +158 -0
- data/spec/unit/active_admin_spec.rb +11 -0
- data/spec/unit/application_spec.rb +180 -0
- data/spec/unit/asset_registration_spec.rb +81 -0
- data/spec/unit/authorization/authorization_adapter_spec.rb +61 -0
- data/spec/unit/authorization/controller_authorization_spec.rb +43 -0
- data/spec/unit/authorization/index_overriding_spec.rb +23 -0
- data/spec/unit/auto_link_spec.rb +93 -0
- data/spec/unit/batch_actions/resource_spec.rb +84 -0
- data/spec/unit/batch_actions/settings_spec.rb +61 -0
- data/spec/unit/belongs_to_spec.rb +76 -0
- data/spec/unit/cancan_adapter_spec.rb +43 -0
- data/spec/unit/comments_spec.rb +189 -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 +313 -0
- data/spec/unit/dependency_spec.rb +135 -0
- data/spec/unit/devise_spec.rb +110 -0
- data/spec/unit/dsl_spec.rb +120 -0
- data/spec/unit/dynamic_settings_spec.rb +28 -0
- data/spec/unit/filters/active_filter_spec.rb +218 -0
- data/spec/unit/filters/active_spec.rb +24 -0
- data/spec/unit/filters/filter_form_builder_spec.rb +524 -0
- data/spec/unit/filters/resource_spec.rb +128 -0
- data/spec/unit/form_builder_spec.rb +1012 -0
- data/spec/unit/generators/install_spec.rb +31 -0
- data/spec/unit/helpers/collection_spec.rb +68 -0
- data/spec/unit/helpers/output_safety_helper_spec.rb +79 -0
- data/spec/unit/helpers/scope_chain_spec.rb +35 -0
- data/spec/unit/i18n_spec.rb +29 -0
- data/spec/unit/localizers/resource_localizer_spec.rb +36 -0
- data/spec/unit/menu_collection_spec.rb +62 -0
- data/spec/unit/menu_item_spec.rb +82 -0
- data/spec/unit/menu_spec.rb +60 -0
- data/spec/unit/namespace/authorization_spec.rb +27 -0
- data/spec/unit/namespace/register_page_spec.rb +99 -0
- data/spec/unit/namespace/register_resource_spec.rb +162 -0
- data/spec/unit/namespace_spec.rb +126 -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 +128 -0
- data/spec/unit/pretty_format_spec.rb +82 -0
- data/spec/unit/pundit_adapter_spec.rb +98 -0
- data/spec/unit/resource/action_items_spec.rb +83 -0
- data/spec/unit/resource/attributes_spec.rb +49 -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 +120 -0
- data/spec/unit/resource/ordering_spec.rb +35 -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 +125 -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 +234 -0
- data/spec/unit/resource_controller/decorators_spec.rb +94 -0
- data/spec/unit/resource_controller/sidebars_spec.rb +37 -0
- data/spec/unit/resource_controller_spec.rb +273 -0
- data/spec/unit/resource_registration_spec.rb +61 -0
- data/spec/unit/resource_spec.rb +320 -0
- data/spec/unit/routing_spec.rb +211 -0
- data/spec/unit/scope_spec.rb +225 -0
- data/spec/unit/settings_node_spec.rb +26 -0
- data/spec/unit/view_factory_spec.rb +19 -0
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +253 -0
- data/spec/unit/view_helpers/display_helper_spec.rb +203 -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 +24 -0
- data/spec/unit/view_helpers/form_helper_spec.rb +42 -0
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +138 -0
- data/spec/unit/views/components/attributes_table_spec.rb +271 -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 +187 -0
- data/spec/unit/views/components/index_list_spec.rb +49 -0
- data/spec/unit/views/components/index_table_for_spec.rb +127 -0
- data/spec/unit/views/components/menu_item_spec.rb +29 -0
- data/spec/unit/views/components/menu_spec.rb +168 -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/sidebar_spec.rb +24 -0
- data/spec/unit/views/components/site_title_spec.rb +82 -0
- data/spec/unit/views/components/status_tag_spec.rb +265 -0
- data/spec/unit/views/components/table_for_spec.rb +441 -0
- data/spec/unit/views/components/tabs_spec.rb +71 -0
- data/spec/unit/views/components/unsupported_browser_spec.rb +39 -0
- data/spec/unit/views/index_as_blog_spec.rb +76 -0
- data/spec/unit/views/pages/base_spec.rb +14 -0
- data/spec/unit/views/pages/form_spec.rb +54 -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 +32 -0
- data/tasks/docs.rake +64 -0
- data/tasks/lint.rake +21 -0
- data/tasks/local.rake +25 -0
- data/tasks/parallel_tests.rake +66 -0
- data/tasks/test.rake +24 -0
- data/vendor/assets/javascripts/jquery-ui/data.js +41 -0
- data/vendor/assets/javascripts/jquery-ui/disable-selection.js +48 -0
- data/vendor/assets/javascripts/jquery-ui/escape-selector.js +23 -0
- data/vendor/assets/javascripts/jquery-ui/focusable.js +86 -0
- data/vendor/assets/javascripts/jquery-ui/ie.js +17 -0
- data/vendor/assets/javascripts/jquery-ui/keycode.js +47 -0
- data/vendor/assets/javascripts/jquery-ui/plugin.js +46 -0
- data/vendor/assets/javascripts/jquery-ui/position.js +500 -0
- data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +42 -0
- data/vendor/assets/javascripts/jquery-ui/safe-blur.js +23 -0
- data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +47 -0
- data/vendor/assets/javascripts/jquery-ui/tabbable.js +38 -0
- data/vendor/assets/javascripts/jquery-ui/unique-id.js +51 -0
- data/vendor/assets/javascripts/jquery-ui/version.js +17 -0
- data/vendor/assets/javascripts/jquery-ui/widget.js +735 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/button.js +391 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +300 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +300 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +2123 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +954 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +1259 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +230 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +1207 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +1561 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +931 -0
- data/vendor/assets/stylesheets/active_admin/_normalize.scss +447 -0
- metadata +1037 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
Feature: User Logging In
|
|
2
|
+
|
|
3
|
+
Logging in to the system as an admin user
|
|
4
|
+
|
|
5
|
+
Background:
|
|
6
|
+
Given I am logged out
|
|
7
|
+
And an admin user "admin@example.com" exists
|
|
8
|
+
When I go to the dashboard
|
|
9
|
+
|
|
10
|
+
Scenario: Logging in Successfully
|
|
11
|
+
When I fill in "Email" with "admin@example.com"
|
|
12
|
+
And I fill in "Password" with "password"
|
|
13
|
+
And I press "Login"
|
|
14
|
+
Then I should be on the the dashboard
|
|
15
|
+
And I should see the element "a[href='/admin/logout' ]:contains('Logout')"
|
|
16
|
+
And I should see the element "a[href='/admin/admin_users/1']:contains('admin@example.com')"
|
|
17
|
+
|
|
18
|
+
Scenario: Attempting to log in with an incorrect email address
|
|
19
|
+
Given override locale "devise.failure.not_found_in_database" with "Invalid email or password."
|
|
20
|
+
When I fill in "Email" with "not-an-admin@example.com"
|
|
21
|
+
And I fill in "Password" with "not-my-password"
|
|
22
|
+
And I press "Login"
|
|
23
|
+
Then I should see "Login"
|
|
24
|
+
And I should see "Invalid email or password."
|
|
25
|
+
|
|
26
|
+
Scenario: Attempting to log in with an incorrect password
|
|
27
|
+
Given override locale "devise.failure.invalid" with "Invalid email or password."
|
|
28
|
+
When I fill in "Email" with "admin@example.com"
|
|
29
|
+
And I fill in "Password" with "not-my-password"
|
|
30
|
+
And I press "Login"
|
|
31
|
+
Then I should see "Login"
|
|
32
|
+
And I should see "Invalid email or password."
|
|
@@ -0,0 +1,29 @@
|
|
|
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.setup do |config|
|
|
9
|
+
config.logout_link_method = :get
|
|
10
|
+
end
|
|
11
|
+
"""
|
|
12
|
+
And I am logged in
|
|
13
|
+
When I go to the dashboard
|
|
14
|
+
Then I should see the element "a[data-method='get']:contains('Logout')"
|
|
15
|
+
And I follow "Logout"
|
|
16
|
+
Then I should see "Login"
|
|
17
|
+
|
|
18
|
+
Scenario: Logging out sucessfully with delete method
|
|
19
|
+
Given a configuration of:
|
|
20
|
+
"""
|
|
21
|
+
ActiveAdmin.setup do |config|
|
|
22
|
+
config.logout_link_method = :delete
|
|
23
|
+
end
|
|
24
|
+
"""
|
|
25
|
+
And I am logged in
|
|
26
|
+
When I am on the dashboard
|
|
27
|
+
Then I should see the element "a[data-method='delete']:contains('Logout')"
|
|
28
|
+
And I follow "Logout"
|
|
29
|
+
Then I should see "Login"
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
Feature: User Resetting Password
|
|
2
|
+
|
|
3
|
+
Resetting my password as an admin user
|
|
4
|
+
|
|
5
|
+
Background:
|
|
6
|
+
Given I am logged out
|
|
7
|
+
And an admin user "admin@example.com" exists
|
|
8
|
+
|
|
9
|
+
Scenario: Resetting password successfully
|
|
10
|
+
When I go to the dashboard
|
|
11
|
+
And I follow "Forgot your password?"
|
|
12
|
+
When I fill in "Email" with "admin@example.com"
|
|
13
|
+
And I press "Reset My Password"
|
|
14
|
+
Then I should see "You will receive an email with instructions on how to reset your password in a few minutes."
|
|
15
|
+
|
|
16
|
+
Scenario: Changing password after resetting
|
|
17
|
+
When "admin@example.com" requests a password reset with token "foobarbaz"
|
|
18
|
+
When I go to the admin password reset form with token "foobarbaz"
|
|
19
|
+
And I fill in the password field with "password"
|
|
20
|
+
And I fill in "Password confirmation" with "password"
|
|
21
|
+
And I press "Change my password"
|
|
22
|
+
Then I should see "success"
|
|
23
|
+
|
|
24
|
+
Scenario: Changing password after resetting with errors
|
|
25
|
+
When "admin@example.com" requests a password reset with token "foobarbaz" but it expires
|
|
26
|
+
When I go to the admin password reset form with token "foobarbaz"
|
|
27
|
+
And I fill in the password field with "password"
|
|
28
|
+
And I fill in "Password confirmation" with "wrong"
|
|
29
|
+
And I press "Change my password"
|
|
30
|
+
Then I should see "expired"
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
source "https://rubygems.org"
|
|
2
|
+
|
|
3
|
+
eval_gemfile(File.expand_path(File.join("..", "Gemfile"), __dir__))
|
|
4
|
+
|
|
5
|
+
gem "rails", "4.2.10"
|
|
6
|
+
gem "devise", "~> 4.4" # required for Ruby 2.5, see devise/issues/4736
|
|
7
|
+
gem "draper", "~> 2.1"
|
|
8
|
+
gem "ransack", "~> 1.8.7" # 2.x for Rails 5.2+ only.
|
|
9
|
+
gem "activerecord-jdbcsqlite3-adapter", platforms: :jruby
|
|
10
|
+
|
|
11
|
+
gemspec path: "../"
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
source "https://rubygems.org"
|
|
2
|
+
|
|
3
|
+
eval_gemfile(File.expand_path(File.join("..", "Gemfile"), __dir__))
|
|
4
|
+
|
|
5
|
+
gem "rails", "5.0.7"
|
|
6
|
+
gem "devise", "~> 4.0"
|
|
7
|
+
gem "draper", "~> 3.0"
|
|
8
|
+
gem "ransack", "~> 1.8.7" # 2.x for Rails 5.2+ only.
|
|
9
|
+
gem "activerecord-jdbcsqlite3-adapter", github: "jruby/activerecord-jdbc-adapter", platforms: :jruby
|
|
10
|
+
|
|
11
|
+
gemspec path: "../"
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
source "https://rubygems.org"
|
|
2
|
+
|
|
3
|
+
eval_gemfile(File.expand_path(File.join("..", "Gemfile"), __dir__))
|
|
4
|
+
|
|
5
|
+
gem "rails", "5.1.6"
|
|
6
|
+
gem "devise", "~> 4.3"
|
|
7
|
+
gem "draper", "~> 3.0"
|
|
8
|
+
gem "ransack", "~> 1.8.7" # 2.x for Rails 5.2+ only.
|
|
9
|
+
gem "activerecord-jdbcsqlite3-adapter", github: "jruby/activerecord-jdbc-adapter", platforms: :jruby
|
|
10
|
+
|
|
11
|
+
gemspec path: "../"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
source "https://rubygems.org"
|
|
2
|
+
|
|
3
|
+
eval_gemfile(File.expand_path(File.join("..", "Gemfile"), __dir__))
|
|
4
|
+
|
|
5
|
+
gem "rails", "5.2.1"
|
|
6
|
+
gem "bootsnap"
|
|
7
|
+
gem "devise", "~> 4.4"
|
|
8
|
+
gem "draper", "~> 3.0"
|
|
9
|
+
gem "ransack", "2.0" # 2.x for Rails 5.2+ only.
|
|
10
|
+
gem "activerecord-jdbcsqlite3-adapter", "~> 51.0", platforms: :jruby
|
|
11
|
+
|
|
12
|
+
gemspec path: "../"
|
data/lib/active_admin.rb
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
require 'active_support/core_ext'
|
|
2
|
+
require 'set'
|
|
3
|
+
|
|
4
|
+
require 'ransack'
|
|
5
|
+
require 'ransack_ext'
|
|
6
|
+
require 'kaminari'
|
|
7
|
+
require 'formtastic'
|
|
8
|
+
require 'formtastic_i18n'
|
|
9
|
+
require 'inherited_resources'
|
|
10
|
+
require 'jquery-rails'
|
|
11
|
+
require 'coffee-rails'
|
|
12
|
+
require 'arbre'
|
|
13
|
+
|
|
14
|
+
require 'active_admin/helpers/i18n'
|
|
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 :Callbacks, 'active_admin/callbacks'
|
|
24
|
+
autoload :Component, 'active_admin/component'
|
|
25
|
+
autoload :BaseController, 'active_admin/base_controller'
|
|
26
|
+
autoload :CanCanAdapter, 'active_admin/cancan_adapter'
|
|
27
|
+
autoload :ControllerAction, 'active_admin/controller_action'
|
|
28
|
+
autoload :CSVBuilder, 'active_admin/csv_builder'
|
|
29
|
+
autoload :Dependency, 'active_admin/dependency'
|
|
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 :Localizers, 'active_admin/localizers'
|
|
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 :OrderClause, 'active_admin/order_clause'
|
|
42
|
+
autoload :Page, 'active_admin/page'
|
|
43
|
+
autoload :PagePresenter, 'active_admin/page_presenter'
|
|
44
|
+
autoload :PageController, 'active_admin/page_controller'
|
|
45
|
+
autoload :PageDSL, 'active_admin/page_dsl'
|
|
46
|
+
autoload :PunditAdapter, 'active_admin/pundit_adapter'
|
|
47
|
+
autoload :Resource, 'active_admin/resource'
|
|
48
|
+
autoload :ResourceController, 'active_admin/resource_controller'
|
|
49
|
+
autoload :ResourceDSL, 'active_admin/resource_dsl'
|
|
50
|
+
autoload :Scope, 'active_admin/scope'
|
|
51
|
+
autoload :ScopeChain, 'active_admin/helpers/scope_chain'
|
|
52
|
+
autoload :SidebarSection, 'active_admin/sidebar_section'
|
|
53
|
+
autoload :TableBuilder, 'active_admin/table_builder'
|
|
54
|
+
autoload :ViewFactory, 'active_admin/view_factory'
|
|
55
|
+
autoload :ViewHelpers, 'active_admin/view_helpers'
|
|
56
|
+
autoload :Views, 'active_admin/views'
|
|
57
|
+
|
|
58
|
+
class << self
|
|
59
|
+
|
|
60
|
+
attr_accessor :application
|
|
61
|
+
|
|
62
|
+
def application
|
|
63
|
+
@application ||= ::ActiveAdmin::Application.new
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Gets called within the initializer
|
|
67
|
+
def setup
|
|
68
|
+
application.setup!
|
|
69
|
+
yield(application)
|
|
70
|
+
application.prepare!
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
delegate :register, to: :application
|
|
74
|
+
delegate :register_page, to: :application
|
|
75
|
+
delegate :unload!, to: :application
|
|
76
|
+
delegate :load!, to: :application
|
|
77
|
+
delegate :routes, to: :application
|
|
78
|
+
|
|
79
|
+
# A callback is triggered each time (before) Active Admin loads the configuration files.
|
|
80
|
+
# In development mode, this will happen whenever the user changes files. In production
|
|
81
|
+
# it only happens on boot.
|
|
82
|
+
#
|
|
83
|
+
# The block takes the current instance of [ActiveAdmin::Application]
|
|
84
|
+
#
|
|
85
|
+
# Example:
|
|
86
|
+
#
|
|
87
|
+
# ActiveAdmin.before_load do |app|
|
|
88
|
+
# # Do some stuff before AA loads
|
|
89
|
+
# end
|
|
90
|
+
#
|
|
91
|
+
# @param [Block] block A block to call each time (before) AA loads resources
|
|
92
|
+
def before_load(&block)
|
|
93
|
+
ActiveSupport::Notifications.subscribe ActiveAdmin::Application::BeforeLoadEvent, &ActiveAdmin::Event.wrap_block_for_active_support_notifications(block)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# A callback is triggered each time (after) Active Admin loads the configuration files. This
|
|
97
|
+
# is an opportunity to hook into Resources after they've been loaded.
|
|
98
|
+
#
|
|
99
|
+
# The block takes the current instance of [ActiveAdmin::Application]
|
|
100
|
+
#
|
|
101
|
+
# Example:
|
|
102
|
+
#
|
|
103
|
+
# ActiveAdmin.after_load do |app|
|
|
104
|
+
# app.namespaces.each do |name, namespace|
|
|
105
|
+
# puts "Namespace: #{name} loaded!"
|
|
106
|
+
# end
|
|
107
|
+
# end
|
|
108
|
+
#
|
|
109
|
+
# @param [Block] block A block to call each time (after) AA loads resources
|
|
110
|
+
def after_load(&block)
|
|
111
|
+
ActiveSupport::Notifications.subscribe ActiveAdmin::Application::AfterLoadEvent, &ActiveAdmin::Event.wrap_block_for_active_support_notifications(block)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# Require things that don't support autoload
|
|
119
|
+
require 'active_admin/engine'
|
|
120
|
+
require 'active_admin/error'
|
|
121
|
+
|
|
122
|
+
# Require internal plugins
|
|
123
|
+
require 'active_admin/batch_actions'
|
|
124
|
+
require 'active_admin/filters'
|
|
125
|
+
|
|
126
|
+
# Require ORM-specific plugins
|
|
127
|
+
require 'active_admin/orm/active_record' if defined? ActiveRecord
|
|
128
|
+
require 'active_admin/orm/mongoid' if defined? Mongoid
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
class AbstractViewFactory < SettingsNode
|
|
3
|
+
|
|
4
|
+
def self.register(view_hash)
|
|
5
|
+
view_hash.each do |view_key, view_class|
|
|
6
|
+
super view_key, view_class
|
|
7
|
+
add_writer(view_key)
|
|
8
|
+
send "#{view_key}=", view_class
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.add_writer(name)
|
|
13
|
+
define_singleton_method("#{name}=") do |value|
|
|
14
|
+
value.builder_method name
|
|
15
|
+
instance_variable_set :"@#{name}", value
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Register a new view key with the view factory
|
|
20
|
+
#
|
|
21
|
+
# eg:
|
|
22
|
+
#
|
|
23
|
+
# factory = AbstractViewFactory.new
|
|
24
|
+
# factory.register my_view: SomeViewClass
|
|
25
|
+
#
|
|
26
|
+
# You can setup many at the same time:
|
|
27
|
+
#
|
|
28
|
+
# factory.register my_view: SomeClass,
|
|
29
|
+
# another_view: OtherViewClass
|
|
30
|
+
#
|
|
31
|
+
def register(view_hash)
|
|
32
|
+
self.class.register view_hash
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def default_for(key)
|
|
36
|
+
self.class.send key
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def [](key)
|
|
40
|
+
send key
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def []=(key, value)
|
|
44
|
+
send "#{key}=", value
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
require 'active_admin/router'
|
|
2
|
+
require 'active_admin/reloader'
|
|
3
|
+
require 'active_admin/application_settings'
|
|
4
|
+
require 'active_admin/namespace_settings'
|
|
5
|
+
|
|
6
|
+
module ActiveAdmin
|
|
7
|
+
class Application
|
|
8
|
+
|
|
9
|
+
class << self
|
|
10
|
+
def setting(name, default)
|
|
11
|
+
ApplicationSettings.register name, default
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def inheritable_setting(name, default)
|
|
15
|
+
NamespaceSettings.register name, default
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def settings
|
|
20
|
+
@settings ||= SettingsNode.build(ApplicationSettings)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def namespace_settings
|
|
24
|
+
@namespace_settings ||= SettingsNode.build(NamespaceSettings)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def respond_to_missing?(method, include_private = false)
|
|
28
|
+
[settings, namespace_settings].any? { |sets| sets.respond_to?(method) } || super
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def method_missing(method, *args)
|
|
32
|
+
if settings.respond_to?(method)
|
|
33
|
+
settings.send(method, *args)
|
|
34
|
+
elsif namespace_settings.respond_to?(method)
|
|
35
|
+
namespace_settings.send(method, *args)
|
|
36
|
+
else
|
|
37
|
+
super
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
attr_reader :namespaces
|
|
42
|
+
def initialize
|
|
43
|
+
@namespaces = Namespace::Store.new
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# == Deprecated Settings
|
|
47
|
+
|
|
48
|
+
def allow_comments=(*)
|
|
49
|
+
raise "`config.allow_comments` is no longer provided in ActiveAdmin 1.x. Use `config.comments` instead."
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
include AssetRegistration
|
|
53
|
+
|
|
54
|
+
# Event that gets triggered on load of Active Admin
|
|
55
|
+
BeforeLoadEvent = 'active_admin.application.before_load'.freeze
|
|
56
|
+
AfterLoadEvent = 'active_admin.application.after_load'.freeze
|
|
57
|
+
|
|
58
|
+
# Runs before the app's AA initializer
|
|
59
|
+
def setup!
|
|
60
|
+
register_default_assets
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Runs after the app's AA initializer
|
|
64
|
+
def prepare!
|
|
65
|
+
remove_active_admin_load_paths_from_rails_autoload_and_eager_load
|
|
66
|
+
attach_reloader
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Registers a brand new configuration for the given resource.
|
|
70
|
+
def register(resource, options = {}, &block)
|
|
71
|
+
ns = options.fetch(:namespace){ default_namespace }
|
|
72
|
+
namespace(ns).register resource, options, &block
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Creates a namespace for the given name
|
|
76
|
+
#
|
|
77
|
+
# Yields the namespace if a block is given
|
|
78
|
+
#
|
|
79
|
+
# @return [Namespace] the new or existing namespace
|
|
80
|
+
def namespace(name)
|
|
81
|
+
name ||= :root
|
|
82
|
+
|
|
83
|
+
namespace = namespaces[name] ||= begin
|
|
84
|
+
namespace = Namespace.new(self, name)
|
|
85
|
+
ActiveSupport::Notifications.publish ActiveAdmin::Namespace::RegisterEvent, namespace
|
|
86
|
+
namespace
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
yield(namespace) if block_given?
|
|
90
|
+
|
|
91
|
+
namespace
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Register a page
|
|
95
|
+
#
|
|
96
|
+
# @param name [String] The page name
|
|
97
|
+
# @option [Hash] Accepts option :namespace.
|
|
98
|
+
# @&block The registration block.
|
|
99
|
+
#
|
|
100
|
+
def register_page(name, options = {}, &block)
|
|
101
|
+
ns = options.fetch(:namespace){ default_namespace }
|
|
102
|
+
namespace(ns).register_page name, options, &block
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Whether all configuration files have been loaded
|
|
106
|
+
def loaded?
|
|
107
|
+
@@loaded ||= false
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Removes all defined controllers from memory. Useful in
|
|
111
|
+
# development, where they are reloaded on each request.
|
|
112
|
+
def unload!
|
|
113
|
+
namespaces.each &:unload!
|
|
114
|
+
@@loaded = false
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# Loads all ruby files that are within the load_paths setting.
|
|
118
|
+
# To reload everything simply call `ActiveAdmin.unload!`
|
|
119
|
+
def load!
|
|
120
|
+
unless loaded?
|
|
121
|
+
ActiveSupport::Notifications.publish BeforeLoadEvent, self # before_load hook
|
|
122
|
+
files.each{ |file| load file } # load files
|
|
123
|
+
namespace(default_namespace) # init AA resources
|
|
124
|
+
ActiveSupport::Notifications.publish AfterLoadEvent, self # after_load hook
|
|
125
|
+
@@loaded = true
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def load(file)
|
|
130
|
+
DatabaseHitDuringLoad.capture{ super }
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Returns ALL the files to be loaded
|
|
134
|
+
def files
|
|
135
|
+
load_paths.flatten.compact.uniq.flat_map{ |path| Dir["#{path}/**/*.rb"] }
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Creates all the necessary routes for the ActiveAdmin configurations
|
|
139
|
+
#
|
|
140
|
+
# Use this within the routes.rb file:
|
|
141
|
+
#
|
|
142
|
+
# Application.routes.draw do |map|
|
|
143
|
+
# ActiveAdmin.routes(self)
|
|
144
|
+
# end
|
|
145
|
+
#
|
|
146
|
+
# @param rails_router [ActionDispatch::Routing::Mapper]
|
|
147
|
+
def routes(rails_router)
|
|
148
|
+
load!
|
|
149
|
+
Router.new(router: rails_router, namespaces: namespaces).apply
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
# Adds before, around and after filters to all controllers.
|
|
153
|
+
# Example usage:
|
|
154
|
+
# ActiveAdmin.before_filter :authenticate_admin!
|
|
155
|
+
#
|
|
156
|
+
AbstractController::Callbacks::ClassMethods.public_instance_methods.
|
|
157
|
+
select { |m| m.match(/(filter|action)/) }.each do |name|
|
|
158
|
+
define_method name do |*args, &block|
|
|
159
|
+
controllers_for_filters.each do |controller|
|
|
160
|
+
controller.public_send name, *args, &block
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def controllers_for_filters
|
|
166
|
+
controllers = [BaseController]
|
|
167
|
+
controllers.push *Devise.controllers_for_filters if Dependency.devise?
|
|
168
|
+
controllers
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
private
|
|
172
|
+
|
|
173
|
+
def register_default_assets
|
|
174
|
+
stylesheets['active_admin.css'] = { media: 'screen' }
|
|
175
|
+
stylesheets['active_admin/print.css'] = { media: 'print' }
|
|
176
|
+
javascripts.add 'active_admin.js'
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
# Since app/admin is alphabetically before app/models, we have to remove it
|
|
180
|
+
# from the host app's +autoload_paths+ to prevent missing constant errors.
|
|
181
|
+
#
|
|
182
|
+
# As well, we have to remove it from +eager_load_paths+ to prevent the
|
|
183
|
+
# files from being loaded twice in production.
|
|
184
|
+
def remove_active_admin_load_paths_from_rails_autoload_and_eager_load
|
|
185
|
+
ActiveSupport::Dependencies.autoload_paths -= load_paths
|
|
186
|
+
Rails.application.config.eager_load_paths -= load_paths
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
# Hook into the Rails code reloading mechanism so that things are reloaded
|
|
190
|
+
# properly in development mode.
|
|
191
|
+
#
|
|
192
|
+
# If any of the app files (e.g. models) has changed, we need to reload all
|
|
193
|
+
# the admin files. If the admin files themselves has changed, we need to
|
|
194
|
+
# regenerate the routes as well.
|
|
195
|
+
def attach_reloader
|
|
196
|
+
Rails.application.config.after_initialize do |app|
|
|
197
|
+
unload_active_admin = -> { ActiveAdmin.application.unload! }
|
|
198
|
+
|
|
199
|
+
if app.config.reload_classes_only_on_change
|
|
200
|
+
# Rails is about to unload all the app files (e.g. models), so we
|
|
201
|
+
# should first unload the classes generated by Active Admin, otherwise
|
|
202
|
+
# they will contain references to the stale (unloaded) classes.
|
|
203
|
+
Reloader.to_prepare(prepend: true, &unload_active_admin)
|
|
204
|
+
else
|
|
205
|
+
# If the user has configured the app to always reload app files after
|
|
206
|
+
# each request, so we should unload the generated classes too.
|
|
207
|
+
Reloader.to_complete(&unload_active_admin)
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
admin_dirs = {}
|
|
211
|
+
|
|
212
|
+
load_paths.each do |path|
|
|
213
|
+
admin_dirs[path] = [:rb]
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
routes_reloader = app.config.file_watcher.new([], admin_dirs) do
|
|
217
|
+
app.reload_routes!
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
app.reloaders << routes_reloader
|
|
221
|
+
|
|
222
|
+
Reloader.to_prepare do
|
|
223
|
+
# Rails might have reloaded the routes for other reasons (e.g.
|
|
224
|
+
# routes.rb has changed), in which case Active Admin would have been
|
|
225
|
+
# loaded via the `ActiveAdmin.routes` call in `routes.rb`.
|
|
226
|
+
#
|
|
227
|
+
# Otherwise, we should check if any of the admin files are changed
|
|
228
|
+
# and force the routes to reload if necessary. This would again causes
|
|
229
|
+
# Active Admin to load via `ActiveAdmin.routes`.
|
|
230
|
+
#
|
|
231
|
+
# Finally, if Active Admin is still not loaded at this point, then we
|
|
232
|
+
# would need to load it manually.
|
|
233
|
+
unless ActiveAdmin.application.loaded?
|
|
234
|
+
routes_reloader.execute_if_updated
|
|
235
|
+
ActiveAdmin.application.load!
|
|
236
|
+
end
|
|
237
|
+
end
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|