activeadmin 0.6.6 → 1.0.0.pre1
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 +4 -4
- data/.gitignore +11 -8
- data/.hound.yml +11 -0
- data/.travis.yml +36 -10
- data/.yardopts +2 -1
- data/CHANGELOG.md +118 -67
- data/CONTRIBUTING.md +96 -73
- data/Gemfile +35 -35
- data/Guardfile +1 -0
- data/LICENSE +1 -1
- data/README.md +98 -0
- data/Rakefile +12 -4
- data/activeadmin.gemspec +21 -24
- data/app/assets/javascripts/active_admin/application.js.coffee +32 -0
- data/app/assets/javascripts/active_admin/base.js.coffee +14 -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/lib/batch_actions.js.coffee +39 -0
- data/app/assets/javascripts/active_admin/{components/jquery.aa.checkbox-toggler.js.coffee → lib/checkbox-toggler.js.coffee} +3 -4
- 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 +37 -0
- data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +27 -0
- data/app/assets/javascripts/active_admin/lib/popover.js.coffee +68 -0
- data/app/assets/javascripts/active_admin/{components/jquery.aa.table-checkbox-toggler.js.coffee → lib/table-checkbox-toggler.js.coffee} +2 -3
- data/app/assets/stylesheets/active_admin/{_base.css.scss → _base.scss} +3 -0
- data/app/assets/stylesheets/active_admin/{_forms.css.scss → _forms.scss} +61 -17
- data/app/assets/stylesheets/active_admin/{_header.css.scss → _header.scss} +9 -5
- data/app/assets/stylesheets/active_admin/{_mixins.css.scss → _mixins.scss} +0 -0
- data/app/assets/stylesheets/active_admin/{_typography.css.scss → _typography.scss} +0 -0
- data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +11 -0
- data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +0 -1
- data/app/assets/stylesheets/active_admin/components/_buttons.scss +1 -1
- data/app/assets/stylesheets/active_admin/components/{_comments.css.scss → _comments.scss} +0 -0
- data/app/assets/stylesheets/active_admin/components/{_date_picker.css.scss → _date_picker.scss} +40 -14
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +5 -4
- data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
- data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
- data/app/assets/stylesheets/active_admin/components/_pagination.scss +10 -0
- data/app/assets/stylesheets/active_admin/components/{_popovers.css.scss → _popovers.scss} +2 -3
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +4 -0
- data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
- data/app/assets/stylesheets/active_admin/components/{_tables.css.scss → _tables.scss} +4 -2
- 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.css.scss → _all.scss} +0 -0
- data/app/assets/stylesheets/active_admin/mixins/{_buttons.css.scss → _buttons.scss} +0 -1
- data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
- data/app/assets/stylesheets/active_admin/mixins/{_icons.css.scss → _icons.scss} +1 -2
- data/app/assets/stylesheets/active_admin/mixins/{_reset.css.scss → _reset.scss} +0 -0
- data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
- data/app/assets/stylesheets/active_admin/mixins/{_sections.css.scss → _sections.scss} +8 -2
- data/app/assets/stylesheets/active_admin/mixins/{_shadows.css.scss → _shadows.scss} +0 -7
- data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +0 -9
- data/app/assets/stylesheets/active_admin/mixins/{_variables.css.scss → _variables.scss} +10 -8
- data/app/assets/stylesheets/active_admin/{print.css.scss → print.scss} +4 -0
- data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +5 -2
- data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +11 -9
- data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
- data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
- data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +1 -1
- data/app/views/active_admin/devise/passwords/edit.html.erb +9 -10
- data/app/views/active_admin/devise/passwords/new.html.erb +5 -4
- data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
- data/app/views/active_admin/devise/sessions/new.html.erb +9 -7
- data/app/views/active_admin/devise/shared/_links.erb +1 -1
- data/app/views/active_admin/devise/unlocks/new.html.erb +5 -4
- data/app/views/layouts/active_admin_logged_out.html.erb +3 -5
- data/config/locales/ar.yml +120 -0
- data/config/locales/bg.yml +26 -6
- data/config/locales/bs.yml +122 -0
- data/config/locales/ca.yml +10 -1
- data/config/locales/cs.yml +7 -2
- data/config/locales/da.yml +7 -3
- data/config/locales/de-CH.yml +14 -31
- data/config/locales/de.yml +33 -33
- data/config/locales/el.yml +28 -2
- data/config/locales/en-GB.yml +12 -4
- data/config/locales/en.yml +29 -3
- data/config/locales/{es_MX.yml → es-MX.yml} +9 -24
- data/config/locales/es.yml +32 -25
- data/config/locales/fa.yml +120 -0
- data/config/locales/fi.yml +113 -0
- data/config/locales/fr.yml +21 -11
- data/config/locales/he.yml +7 -3
- data/config/locales/hr.yml +42 -11
- data/config/locales/hu.yml +10 -3
- data/config/locales/it.yml +31 -3
- data/config/locales/ja.yml +8 -3
- data/config/locales/ko.yml +7 -1
- data/config/locales/lt.yml +42 -11
- data/config/locales/lv.yml +7 -3
- data/config/locales/{no-NB.yml → nb.yml} +46 -15
- data/config/locales/nl.yml +36 -5
- data/config/locales/pl.yml +13 -8
- data/config/locales/pt-BR.yml +37 -5
- data/config/locales/pt-PT.yml +8 -4
- data/config/locales/ro.yml +7 -3
- data/config/locales/ru.yml +26 -5
- data/config/locales/sv-SE.yml +9 -5
- data/config/locales/tr.yml +10 -3
- data/config/locales/uk.yml +36 -12
- data/config/locales/vi.yml +7 -3
- data/config/locales/zh-CN.yml +26 -10
- data/config/locales/zh-TW.yml +19 -13
- data/docs/0-installation.md +65 -29
- data/docs/1-general-configuration.md +92 -81
- data/docs/10-custom-pages.md +68 -68
- data/docs/11-decorators.md +48 -59
- data/docs/12-arbre-components.md +80 -74
- data/docs/13-authorization-adapter.md +128 -107
- data/docs/14-gotchas.md +92 -0
- data/docs/2-resource-customization.md +293 -178
- data/docs/3-index-pages.md +160 -86
- data/docs/3-index-pages/custom-index.md +31 -0
- data/docs/3-index-pages/index-as-block.md +14 -9
- data/docs/3-index-pages/index-as-blog.md +41 -31
- data/docs/3-index-pages/index-as-grid.md +16 -8
- data/docs/3-index-pages/index-as-table.md +129 -52
- data/docs/4-csv-format.md +31 -24
- data/docs/5-forms.md +133 -56
- data/docs/6-show-pages.md +89 -27
- data/docs/7-sidebars.md +48 -27
- data/docs/8-custom-actions.md +98 -77
- data/docs/9-batch-actions.md +210 -146
- data/docs/README.md +24 -0
- data/features/action_item.feature +3 -3
- data/features/authorization_pundit.feature +37 -0
- data/features/breadcrumb.feature +48 -0
- data/features/comments/commenting.feature +56 -13
- data/features/development_reloading.feature +17 -30
- data/features/edit_page.feature +12 -1
- data/features/favicon.feature +3 -3
- data/features/i18n.feature +5 -4
- data/features/index/batch_actions.feature +41 -0
- data/features/index/filters.feature +67 -0
- data/features/index/format_as_csv.feature +90 -4
- data/features/index/formats.feature +27 -0
- data/features/index/index_as_blog.feature +4 -4
- data/features/index/index_as_table.feature +102 -6
- data/features/index/index_blank_slate.feature +22 -0
- data/features/index/index_scope_to.feature +16 -16
- data/features/index/page_title.feature +11 -0
- data/features/index/pagination.feature +1 -1
- data/features/index/switch_index_view.feature +14 -14
- data/features/new_page.feature +13 -2
- data/features/registering_pages.feature +1 -1
- data/features/renamed_resource.feature +32 -0
- data/features/show/page_title.feature +11 -0
- data/features/show/tabs.feature +27 -0
- data/features/sidebar_sections.feature +12 -0
- data/features/site_title.feature +2 -2
- data/features/specifying_actions.feature +3 -3
- data/features/step_definitions/action_item_steps.rb +2 -2
- data/features/step_definitions/action_link_steps.rb +14 -1
- data/features/step_definitions/additional_web_steps.rb +19 -20
- data/features/step_definitions/asset_steps.rb +3 -3
- data/features/step_definitions/attribute_steps.rb +8 -3
- data/features/step_definitions/batch_action_steps.rb +26 -9
- data/features/step_definitions/blog_steps.rb +3 -0
- data/features/step_definitions/breadcrumb_steps.rb +1 -1
- data/features/step_definitions/comment_steps.rb +1 -1
- data/features/step_definitions/configuration_steps.rb +9 -2
- data/features/step_definitions/dashboard_steps.rb +2 -2
- data/features/step_definitions/factory_steps.rb +9 -8
- data/features/step_definitions/filter_steps.rb +25 -3
- data/features/step_definitions/flash_steps.rb +3 -3
- data/features/step_definitions/format_steps.rb +18 -18
- data/features/step_definitions/index_scope_steps.rb +5 -5
- data/features/step_definitions/layout_steps.rb +1 -1
- data/features/step_definitions/member_link_steps.rb +2 -2
- data/features/step_definitions/menu_steps.rb +3 -3
- data/features/step_definitions/pagination_steps.rb +2 -3
- data/features/step_definitions/sidebar_steps.rb +8 -3
- data/features/step_definitions/site_title_steps.rb +6 -4
- data/features/step_definitions/symbol_leak_steps.rb +3 -0
- data/features/step_definitions/tab_steps.rb +5 -0
- data/features/step_definitions/table_steps.rb +4 -4
- data/features/step_definitions/user_steps.rb +10 -7
- data/features/step_definitions/web_steps.rb +14 -11
- data/features/sti_resource.feature +6 -2
- data/features/strong_parameters.feature +73 -0
- data/features/support/env.rb +34 -9
- data/features/support/paths.rb +14 -6
- data/features/support/selectors.rb +1 -1
- data/features/symbol_leak.feature +35 -0
- data/features/users/resetting_password.feature +5 -6
- data/lib/active_admin.rb +26 -25
- data/lib/active_admin/abstract_view_factory.rb +7 -17
- data/lib/active_admin/application.rb +72 -59
- data/lib/active_admin/asset_registration.rb +2 -2
- data/lib/active_admin/authorization_adapter.rb +2 -2
- data/lib/active_admin/base_controller.rb +2 -3
- data/lib/active_admin/base_controller/authorization.rb +13 -31
- data/lib/active_admin/batch_actions.rb +1 -1
- data/lib/active_admin/batch_actions/controller.rb +24 -8
- data/lib/active_admin/batch_actions/resource_extension.rb +47 -18
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +7 -4
- data/lib/active_admin/batch_actions/views/batch_action_popover.rb +3 -3
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +8 -17
- data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -4
- data/lib/active_admin/callbacks.rb +25 -24
- data/lib/active_admin/cancan_adapter.rb +7 -11
- data/lib/active_admin/csv_builder.rb +92 -15
- data/lib/active_admin/dependency.rb +93 -0
- data/lib/active_admin/deprecation.rb +6 -7
- data/lib/active_admin/devise.rb +28 -18
- data/lib/active_admin/dsl.rb +18 -11
- data/lib/active_admin/engine.rb +10 -8
- data/lib/active_admin/error.rb +62 -0
- data/lib/active_admin/filters/dsl.rb +2 -2
- data/lib/active_admin/filters/forms.rb +17 -27
- data/lib/active_admin/filters/formtastic_addons.rb +49 -15
- data/lib/active_admin/filters/resource_extension.rb +43 -34
- data/lib/active_admin/form_builder.rb +93 -154
- data/lib/active_admin/helpers/collection.rb +7 -13
- data/lib/active_admin/helpers/i18n.rb +7 -0
- data/lib/active_admin/helpers/optional_display.rb +5 -5
- data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
- data/lib/active_admin/helpers/scope_chain.rb +1 -1
- data/lib/active_admin/helpers/settings.rb +16 -9
- data/lib/active_admin/iconic.rb +17 -15
- data/lib/active_admin/iconic/icons.rb +136 -136
- data/lib/active_admin/inputs.rb +11 -7
- data/lib/active_admin/inputs/datepicker_input.rb +12 -3
- data/lib/active_admin/inputs/filters/base.rb +42 -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_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 +54 -0
- data/lib/active_admin/inputs/filters/string_input.rb +26 -0
- data/lib/active_admin/menu.rb +6 -4
- data/lib/active_admin/menu_collection.rb +1 -4
- data/lib/active_admin/namespace.rb +55 -29
- 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 +81 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +45 -0
- data/lib/active_admin/{comments → orm/active_record/comments}/namespace_helper.rb +2 -2
- data/lib/active_admin/{comments → orm/active_record/comments}/resource_helper.rb +1 -1
- data/lib/active_admin/{comments → orm/active_record/comments}/show_page_helper.rb +0 -0
- data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
- data/lib/active_admin/{comments → orm/active_record/comments}/views/active_admin_comments.rb +16 -14
- data/lib/active_admin/orm/mongoid.rb +1 -0
- data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
- data/lib/active_admin/page.rb +7 -3
- data/lib/active_admin/page_dsl.rb +1 -1
- data/lib/active_admin/page_presenter.rb +2 -2
- data/lib/active_admin/pundit_adapter.rb +68 -0
- data/lib/active_admin/resource.rb +16 -17
- data/lib/active_admin/resource/action_items.rb +23 -18
- data/lib/active_admin/resource/belongs_to.rb +7 -3
- data/lib/active_admin/resource/controllers.rb +1 -0
- data/lib/active_admin/resource/includes.rb +12 -0
- data/lib/active_admin/resource/menu.rb +5 -5
- data/lib/active_admin/resource/naming.rb +27 -43
- data/lib/active_admin/resource/page_presenters.rb +1 -1
- data/lib/active_admin/resource/routes.rb +27 -11
- data/lib/active_admin/resource/scope_to.rb +7 -7
- data/lib/active_admin/resource/sidebars.rb +1 -0
- data/lib/active_admin/resource_controller.rb +6 -7
- data/lib/active_admin/resource_controller/data_access.rb +101 -93
- data/lib/active_admin/resource_controller/decorators.rb +91 -9
- data/lib/active_admin/resource_controller/streaming.rb +37 -0
- data/lib/active_admin/resource_dsl.rb +53 -10
- data/lib/active_admin/router.rb +7 -7
- data/lib/active_admin/scope.rb +6 -6
- data/lib/active_admin/sidebar_section.rb +10 -2
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_factory.rb +17 -17
- data/lib/active_admin/view_helpers.rb +0 -1
- data/lib/active_admin/view_helpers/auto_link_helper.rb +23 -12
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +4 -3
- data/lib/active_admin/view_helpers/display_helper.rb +30 -15
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +21 -25
- data/lib/active_admin/view_helpers/fields_for.rb +4 -4
- data/lib/active_admin/view_helpers/flash_helper.rb +4 -3
- data/lib/active_admin/view_helpers/form_helper.rb +5 -9
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +6 -6
- data/lib/active_admin/views/action_items.rb +2 -2
- data/lib/active_admin/views/components/action_list_popover.rb +1 -1
- data/lib/active_admin/views/components/active_admin_form.rb +123 -0
- data/lib/active_admin/views/components/attributes_table.rb +63 -21
- data/lib/active_admin/views/components/blank_slate.rb +1 -1
- data/lib/active_admin/views/components/columns.rb +13 -7
- data/lib/active_admin/views/components/dropdown_menu.rb +6 -6
- data/lib/active_admin/views/components/index_list.rb +7 -7
- data/lib/active_admin/views/components/paginated_collection.rb +38 -20
- data/lib/active_admin/views/components/panel.rb +8 -2
- data/lib/active_admin/views/components/popover.rb +1 -1
- data/lib/active_admin/views/components/scopes.rb +5 -4
- data/lib/active_admin/views/components/sidebar_section.rb +3 -2
- data/lib/active_admin/views/components/site_title.rb +2 -2
- data/lib/active_admin/views/components/status_tag.rb +34 -11
- data/lib/active_admin/views/components/table_for.rb +90 -45
- 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 +3 -3
- data/lib/active_admin/views/header.rb +3 -3
- data/lib/active_admin/views/index_as_block.rb +10 -10
- data/lib/active_admin/views/index_as_blog.rb +45 -39
- data/lib/active_admin/views/index_as_grid.rb +14 -10
- data/lib/active_admin/views/index_as_table.rb +242 -129
- data/lib/active_admin/views/pages/base.rb +22 -18
- data/lib/active_admin/views/pages/form.rb +21 -11
- data/lib/active_admin/views/pages/index.rb +40 -35
- data/lib/active_admin/views/pages/layout.rb +1 -1
- data/lib/active_admin/views/pages/show.rb +4 -4
- data/lib/active_admin/views/tabbed_navigation.rb +7 -3
- data/lib/active_admin/views/title_bar.rb +10 -8
- data/lib/generators/active_admin/assets/assets_generator.rb +3 -28
- data/lib/generators/active_admin/assets/templates/{3.1/active_admin.css.scss → active_admin.css.scss} +0 -0
- data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +24 -26
- data/lib/generators/active_admin/install/install_generator.rb +8 -9
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +28 -26
- data/lib/generators/active_admin/install/templates/admin_user.rb.erb +12 -2
- data/lib/generators/active_admin/install/templates/dashboard.rb +4 -4
- data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +3 -3
- 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 +3 -5
- data/lib/generators/active_admin/resource/templates/admin.rb +15 -0
- data/lib/ransack_ext.rb +12 -0
- data/script/local +2 -2
- data/script/travis_cache +107 -0
- data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +25 -0
- data/spec/javascripts/fixtures/flashes.html +2 -0
- data/spec/rails_helper.rb +154 -0
- data/spec/{integration → requests}/default_namespace_spec.rb +6 -6
- data/spec/{integration → requests}/javascript_spec.rb +5 -5
- data/spec/requests/memory_spec.rb +23 -0
- data/spec/requests/stylesheets_spec.rb +18 -0
- data/spec/spec_helper.rb +12 -173
- data/spec/support/detect_rails_version.rb +9 -17
- data/spec/support/rails_template.rb +64 -35
- data/spec/support/rails_template_with_data.rb +14 -14
- data/spec/support/templates/admin/stores.rb +5 -1
- 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 +4 -46
- data/spec/unit/abstract_view_factory_spec.rb +16 -16
- data/spec/unit/action_builder_spec.rb +24 -18
- data/spec/unit/active_admin_spec.rb +2 -2
- data/spec/unit/application_spec.rb +33 -34
- data/spec/unit/asset_registration_spec.rb +25 -29
- data/spec/unit/authorization/authorization_adapter_spec.rb +10 -10
- data/spec/unit/authorization/controller_authorization_spec.rb +11 -11
- data/spec/unit/authorization/index_overriding_spec.rb +22 -0
- data/spec/unit/auto_link_spec.rb +43 -13
- data/spec/unit/batch_actions/resource_spec.rb +15 -14
- data/spec/unit/batch_actions/settings_spec.rb +18 -18
- data/spec/unit/belongs_to_spec.rb +28 -19
- data/spec/unit/cancan_adapter_spec.rb +8 -8
- data/spec/unit/comments_spec.rb +99 -39
- data/spec/unit/component_spec.rb +3 -3
- data/spec/unit/config_shared_examples.rb +10 -10
- data/spec/unit/controller_filters_spec.rb +23 -16
- data/spec/unit/csv_builder_spec.rb +165 -24
- data/spec/unit/dependency_spec.rb +135 -0
- data/spec/unit/devise_spec.rb +17 -37
- data/spec/unit/dsl_spec.rb +70 -9
- data/spec/unit/event_spec.rb +11 -11
- data/spec/unit/filters/filter_form_builder_spec.rb +207 -148
- data/spec/unit/filters/resource_spec.rb +60 -26
- data/spec/unit/form_builder_spec.rb +419 -145
- data/spec/unit/generators/install_spec.rb +23 -0
- data/spec/unit/helpers/collection_spec.rb +18 -18
- data/spec/unit/helpers/scope_chain_spec.rb +6 -6
- data/spec/unit/helpers/settings_spec.rb +4 -4
- data/spec/unit/i18n_spec.rb +12 -0
- data/spec/unit/menu_collection_spec.rb +14 -14
- data/spec/unit/menu_item_spec.rb +42 -42
- data/spec/unit/menu_spec.rb +20 -20
- data/spec/unit/namespace/authorization_spec.rb +8 -8
- data/spec/unit/namespace/register_page_spec.rb +11 -11
- data/spec/unit/namespace/register_resource_spec.rb +28 -30
- data/spec/unit/namespace_spec.rb +20 -20
- data/spec/unit/order_clause_spec.rb +81 -0
- data/spec/unit/page_controller_spec.rb +1 -1
- data/spec/unit/page_spec.rb +18 -12
- data/spec/unit/pretty_format_spec.rb +42 -14
- data/spec/unit/pundit_adapter_spec.rb +98 -0
- data/spec/unit/resource/action_items_spec.rb +15 -12
- data/spec/unit/resource/includes_spec.rb +21 -0
- data/spec/unit/resource/menu_spec.rb +1 -1
- data/spec/unit/resource/naming_spec.rb +35 -21
- data/spec/unit/resource/page_presenters_spec.rb +8 -8
- data/spec/unit/resource/pagination_spec.rb +6 -6
- data/spec/unit/resource/routes_spec.rb +10 -10
- data/spec/unit/resource/scopes_spec.rb +14 -7
- data/spec/unit/resource/sidebars_spec.rb +6 -6
- data/spec/unit/resource_collection_spec.rb +31 -38
- data/spec/unit/resource_controller/data_access_spec.rb +96 -30
- data/spec/unit/resource_controller/decorators_spec.rb +83 -0
- data/spec/unit/resource_controller/sidebars_spec.rb +7 -8
- data/spec/unit/resource_controller_spec.rb +73 -70
- data/spec/unit/resource_registration_spec.rb +12 -12
- data/spec/unit/resource_spec.rb +77 -42
- data/spec/unit/routing_spec.rb +39 -31
- data/spec/unit/scope_spec.rb +112 -30
- data/spec/unit/settings_spec.rb +51 -21
- data/spec/unit/view_factory_spec.rb +2 -3
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +71 -60
- data/spec/unit/view_helpers/display_name_spec.rb +49 -21
- data/spec/unit/view_helpers/download_format_links_helper_spec.rb +5 -5
- data/spec/unit/view_helpers/fields_for_spec.rb +18 -18
- data/spec/unit/view_helpers/flash_helper_spec.rb +25 -0
- data/spec/unit/view_helpers/form_helper_spec.rb +10 -23
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +64 -22
- data/spec/unit/views/components/action_list_popover_spec.rb +16 -6
- data/spec/unit/views/components/attributes_table_spec.rb +171 -30
- data/spec/unit/views/components/batch_action_popover_spec.rb +20 -6
- data/spec/unit/views/components/blank_slate_spec.rb +14 -4
- data/spec/unit/views/components/columns_spec.rb +52 -22
- data/spec/unit/views/components/index_list_spec.rb +11 -8
- data/spec/unit/views/components/index_table_for_spec.rb +46 -0
- data/spec/unit/views/components/paginated_collection_spec.rb +79 -90
- data/spec/unit/views/components/panel_spec.rb +32 -21
- data/spec/unit/views/components/popover_spec.rb +7 -7
- data/spec/unit/views/components/sidebar_section_spec.rb +18 -8
- data/spec/unit/views/components/site_title_spec.rb +26 -26
- data/spec/unit/views/components/status_tag_spec.rb +178 -38
- data/spec/unit/views/components/table_for_spec.rb +237 -35
- data/spec/unit/views/components/tabs_spec.rb +39 -0
- data/spec/unit/views/components/unsupported_browser_spec.rb +47 -0
- data/spec/unit/views/pages/form_spec.rb +17 -10
- data/spec/unit/views/pages/index_spec.rb +60 -0
- data/spec/unit/views/pages/layout_spec.rb +17 -21
- data/spec/unit/views/pages/show_spec.rb +18 -6
- data/spec/unit/views/tabbed_navigation_spec.rb +61 -52
- data/tasks/docs.rake +9 -11
- data/tasks/parallel_tests.rake +8 -2
- data/tasks/test.rake +13 -9
- data/tasks/yard.rake +7 -4
- metadata +219 -163
- data/.document +0 -5
- data/README.rdoc +0 -88
- data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
- data/app/assets/images/active_admin/index_list_icons/block_icon.svg +0 -10
- data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +0 -4
- data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +0 -13
- data/app/assets/images/active_admin/index_list_icons/table_icon.svg +0 -3
- data/app/assets/images/active_admin/loading.gif +0 -0
- data/app/assets/javascripts/active_admin/application.js +0 -3
- data/app/assets/javascripts/active_admin/base.js +0 -5
- data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +0 -105
- data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +0 -97
- data/app/assets/javascripts/active_admin/lib/namespace.js.coffee +0 -4
- data/app/assets/javascripts/active_admin/pages/application.js.coffee +0 -21
- data/app/assets/javascripts/active_admin/pages/batch_actions.js.coffee +0 -26
- data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +0 -11
- data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +0 -41
- data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +0 -95
- data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +0 -38
- data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +0 -43
- data/app/views/active_admin/dashboard/index.html.arb +0 -1
- data/app/views/active_admin/resource/index.csv.erb +0 -23
- data/docs/3-index-pages/create-an-index.md +0 -29
- data/lib/active_admin/comments.rb +0 -83
- data/lib/active_admin/comments/comment.rb +0 -42
- data/lib/active_admin/comments/views.rb +0 -2
- data/lib/active_admin/dependency_checker.rb +0 -46
- data/lib/active_admin/inputs/filter_base.rb +0 -33
- data/lib/active_admin/inputs/filter_base/search_method_select.rb +0 -73
- data/lib/active_admin/inputs/filter_boolean_input.rb +0 -36
- data/lib/active_admin/inputs/filter_check_boxes_input.rb +0 -40
- data/lib/active_admin/inputs/filter_date_range_input.rb +0 -34
- data/lib/active_admin/inputs/filter_numeric_input.rb +0 -10
- data/lib/active_admin/inputs/filter_select_input.rb +0 -49
- data/lib/active_admin/inputs/filter_string_input.rb +0 -24
- data/lib/active_admin/reloader.rb +0 -130
- data/lib/active_admin/resource_controller/actions.rb +0 -81
- data/lib/active_admin/sass/active_admin.scss +0 -3
- data/lib/active_admin/sass/css_loader.rb +0 -16
- data/lib/active_admin/sass/helpers.rb +0 -45
- data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +0 -7
- data/lib/active_admin/views/dashboard_section_renderer.rb +0 -19
- data/lib/active_admin/views/pages/dashboard.rb +0 -62
- data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +0 -1
- data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +0 -1
- data/lib/meta_search_ext.rb +0 -10
- data/spec/integration/memory_spec.rb +0 -29
- data/spec/integration/stylesheets_spec.rb +0 -41
- data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +0 -60
- data/spec/javascripts/compiled/jquery.aa.popover-spec.js +0 -106
- data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +0 -37
- data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +0 -108
- data/spec/javascripts/helpers/vendor/jasmine-jquery.js +0 -288
- data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +0 -2915
- data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +0 -34
- data/spec/javascripts/support/jquery.min.js +0 -4
- data/spec/spec_helper_without_rails.rb +0 -11
- data/spec/unit/generators/install_rails_3_1_spec.rb +0 -16
- data/spec/unit/rails_spec.rb +0 -43
- data/spec/unit/reloader_spec.rb +0 -124
- data/spec/unit/sass/helpers_spec.rb +0 -47
- data/tasks/js.rake +0 -32
|
@@ -7,17 +7,28 @@ module ActiveAdmin
|
|
|
7
7
|
# The module also deals with authorization and resource callbacks.
|
|
8
8
|
#
|
|
9
9
|
module DataAccess
|
|
10
|
-
extend ActiveSupport::Concern
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
def self.included(base)
|
|
12
|
+
base.class_exec do
|
|
13
|
+
include Callbacks
|
|
14
|
+
include ScopeChain
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
define_active_admin_callbacks :build, :create, :update, :save, :destroy
|
|
17
|
+
end
|
|
17
18
|
end
|
|
18
19
|
|
|
19
20
|
protected
|
|
20
21
|
|
|
22
|
+
COLLECTION_APPLIES = [
|
|
23
|
+
:authorization_scope,
|
|
24
|
+
:sorting,
|
|
25
|
+
:filtering,
|
|
26
|
+
:scoping,
|
|
27
|
+
:includes,
|
|
28
|
+
:pagination,
|
|
29
|
+
:collection_decorator
|
|
30
|
+
].freeze
|
|
31
|
+
|
|
21
32
|
# Retrieve, memoize and authorize the current collection from the db. This
|
|
22
33
|
# method delegates the finding of the collection to #find_collection.
|
|
23
34
|
#
|
|
@@ -25,16 +36,13 @@ module ActiveAdmin
|
|
|
25
36
|
# either the @collection instance variable or an instance variable named
|
|
26
37
|
# after the resource that the collection is for. eg: Post => @post.
|
|
27
38
|
#
|
|
28
|
-
# @
|
|
39
|
+
# @return [ActiveRecord::Relation] The collection for the index
|
|
29
40
|
def collection
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
authorize! ActiveAdmin::Authorization::READ, active_admin_config.resource_class
|
|
36
|
-
|
|
37
|
-
set_collection_ivar _collection
|
|
41
|
+
get_collection_ivar || begin
|
|
42
|
+
collection = find_collection
|
|
43
|
+
authorize! Authorization::READ, active_admin_config.resource_class
|
|
44
|
+
set_collection_ivar collection
|
|
45
|
+
end
|
|
38
46
|
end
|
|
39
47
|
|
|
40
48
|
|
|
@@ -43,17 +51,12 @@ module ActiveAdmin
|
|
|
43
51
|
# some additional db # work before your controller returns and
|
|
44
52
|
# authorizes the collection.
|
|
45
53
|
#
|
|
46
|
-
# @
|
|
47
|
-
def find_collection
|
|
54
|
+
# @return [ActiveRecord::Relation] The collection for the index
|
|
55
|
+
def find_collection(options = {})
|
|
48
56
|
collection = scoped_collection
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
collection = apply_filtering(collection)
|
|
53
|
-
collection = apply_scoping(collection)
|
|
54
|
-
collection = apply_pagination(collection)
|
|
55
|
-
collection = apply_decorator(collection)
|
|
56
|
-
|
|
57
|
+
collection_applies(options).each do |applyer|
|
|
58
|
+
collection = send("apply_#{applyer}", collection)
|
|
59
|
+
end
|
|
57
60
|
collection
|
|
58
61
|
end
|
|
59
62
|
|
|
@@ -81,37 +84,27 @@ module ActiveAdmin
|
|
|
81
84
|
# * update
|
|
82
85
|
# * destroy
|
|
83
86
|
#
|
|
84
|
-
# @
|
|
87
|
+
# @return [ActiveRecord::Base] An active record object
|
|
85
88
|
def resource
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
_resource = find_resource
|
|
91
|
-
authorize_resource! _resource
|
|
89
|
+
get_resource_ivar || begin
|
|
90
|
+
resource = find_resource
|
|
91
|
+
authorize_resource! resource
|
|
92
92
|
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
resource = apply_decorator resource
|
|
94
|
+
set_resource_ivar resource
|
|
95
95
|
end
|
|
96
|
-
|
|
97
|
-
set_resource_ivar(_resource)
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
def decorator?
|
|
101
|
-
!!active_admin_config.decorator_class
|
|
102
96
|
end
|
|
103
97
|
|
|
104
|
-
def decorator_class
|
|
105
|
-
active_admin_config.decorator_class
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
|
|
109
98
|
# Does the actual work of finding a resource in the database. This
|
|
110
99
|
# method uses the finder method as defined in InheritedResources.
|
|
111
100
|
#
|
|
112
|
-
#
|
|
101
|
+
# Note that public_send can't be used here because Rails 3.2's
|
|
102
|
+
# ActiveRecord::Associations::CollectionProxy (belongs_to associations)
|
|
103
|
+
# mysteriously returns an Enumerator object.
|
|
104
|
+
#
|
|
105
|
+
# @return [ActiveRecord::Base] An active record object.
|
|
113
106
|
def find_resource
|
|
114
|
-
scoped_collection.send
|
|
107
|
+
scoped_collection.send method_for_find, params[:id]
|
|
115
108
|
end
|
|
116
109
|
|
|
117
110
|
|
|
@@ -122,31 +115,34 @@ module ActiveAdmin
|
|
|
122
115
|
# This method is used to instantiate and authorize new resources in the
|
|
123
116
|
# new and create controller actions.
|
|
124
117
|
#
|
|
125
|
-
# @
|
|
118
|
+
# @return [ActiveRecord::Base] An un-saved active record base object
|
|
126
119
|
def build_resource
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
run_build_callbacks resource
|
|
132
|
-
authorize_resource! resource
|
|
120
|
+
get_resource_ivar || begin
|
|
121
|
+
resource = build_new_resource
|
|
122
|
+
run_build_callbacks resource
|
|
123
|
+
authorize_resource! resource
|
|
133
124
|
|
|
134
|
-
|
|
125
|
+
resource = apply_decorator resource
|
|
126
|
+
set_resource_ivar resource
|
|
127
|
+
end
|
|
135
128
|
end
|
|
136
129
|
|
|
137
130
|
# Builds a new resource. This method uses the method_for_build provided
|
|
138
131
|
# by Inherited Resources.
|
|
139
132
|
#
|
|
140
|
-
#
|
|
133
|
+
# Note that public_send can't be used here w/ Rails 3.2 & a belongs_to
|
|
134
|
+
# config, or you'll get undefined method `build' for []:Array.
|
|
135
|
+
#
|
|
136
|
+
# @return [ActiveRecord::Base] An un-saved active record base object
|
|
141
137
|
def build_new_resource
|
|
142
|
-
scoped_collection.send
|
|
138
|
+
scoped_collection.send method_for_build, *resource_params
|
|
143
139
|
end
|
|
144
140
|
|
|
145
141
|
# Calls all the appropriate callbacks and then creates the new resource.
|
|
146
142
|
#
|
|
147
143
|
# @param [ActiveRecord::Base] object The new resource to create
|
|
148
144
|
#
|
|
149
|
-
# @
|
|
145
|
+
# @return [void]
|
|
150
146
|
def create_resource(object)
|
|
151
147
|
run_create_callbacks object do
|
|
152
148
|
save_resource(object)
|
|
@@ -157,7 +153,7 @@ module ActiveAdmin
|
|
|
157
153
|
#
|
|
158
154
|
# @param [ActiveRecord::Base] object The new resource to save
|
|
159
155
|
#
|
|
160
|
-
# @
|
|
156
|
+
# @return [void]
|
|
161
157
|
def save_resource(object)
|
|
162
158
|
run_save_callbacks object do
|
|
163
159
|
object.save
|
|
@@ -173,7 +169,7 @@ module ActiveAdmin
|
|
|
173
169
|
# and the Active Record "role" in the second. The role
|
|
174
170
|
# may be set to nil.
|
|
175
171
|
#
|
|
176
|
-
# @
|
|
172
|
+
# @return [void]
|
|
177
173
|
def update_resource(object, attributes)
|
|
178
174
|
if object.respond_to?(:assign_attributes)
|
|
179
175
|
object.assign_attributes(*attributes)
|
|
@@ -188,7 +184,7 @@ module ActiveAdmin
|
|
|
188
184
|
|
|
189
185
|
# Destroys an object from the database and calls appropriate callbacks.
|
|
190
186
|
#
|
|
191
|
-
# @
|
|
187
|
+
# @return [void]
|
|
192
188
|
def destroy_resource(object)
|
|
193
189
|
run_destroy_callbacks object do
|
|
194
190
|
object.destroy
|
|
@@ -208,40 +204,37 @@ module ActiveAdmin
|
|
|
208
204
|
#
|
|
209
205
|
# @param [ActiveRecord::Relation] collection The collection to scope
|
|
210
206
|
#
|
|
211
|
-
# @
|
|
207
|
+
# @return [ActiveRecord::Relation] a scoped collection of query
|
|
212
208
|
def apply_authorization_scope(collection)
|
|
213
209
|
action_name = action_to_permission(params[:action])
|
|
214
210
|
active_admin_authorization.scope_collection(collection, action_name)
|
|
215
211
|
end
|
|
216
212
|
|
|
217
|
-
|
|
218
213
|
def apply_sorting(chain)
|
|
219
214
|
params[:order] ||= active_admin_config.sort_order
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
[table, active_admin_config.resource_quoted_column_name(column)].compact.join(".")
|
|
226
|
-
|
|
227
|
-
chain.reorder("#{table_column} #{order}")
|
|
215
|
+
|
|
216
|
+
order_clause = OrderClause.new params[:order]
|
|
217
|
+
|
|
218
|
+
if order_clause.valid?
|
|
219
|
+
chain.reorder(order_clause.to_sql(active_admin_config))
|
|
228
220
|
else
|
|
229
221
|
chain # just return the chain
|
|
230
222
|
end
|
|
231
223
|
end
|
|
232
224
|
|
|
225
|
+
# Applies any Ransack search methods to the currently scoped collection.
|
|
226
|
+
# Both `search` and `ransack` are provided, but we use `ransack` to prevent conflicts.
|
|
233
227
|
def apply_filtering(chain)
|
|
234
|
-
@search = chain.
|
|
235
|
-
@search.
|
|
228
|
+
@search = chain.ransack clean_search_params params[:q]
|
|
229
|
+
@search.result
|
|
236
230
|
end
|
|
237
231
|
|
|
238
|
-
def clean_search_params(
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
232
|
+
def clean_search_params(params)
|
|
233
|
+
if params.is_a? Hash
|
|
234
|
+
params.dup.delete_if{ |key, value| value.blank? }
|
|
235
|
+
else
|
|
236
|
+
{}
|
|
243
237
|
end
|
|
244
|
-
search_params
|
|
245
238
|
end
|
|
246
239
|
|
|
247
240
|
def apply_scoping(chain)
|
|
@@ -254,13 +247,21 @@ module ActiveAdmin
|
|
|
254
247
|
end
|
|
255
248
|
end
|
|
256
249
|
|
|
250
|
+
def apply_includes(chain)
|
|
251
|
+
if active_admin_config.includes.any?
|
|
252
|
+
chain.includes *active_admin_config.includes
|
|
253
|
+
else
|
|
254
|
+
chain
|
|
255
|
+
end
|
|
256
|
+
end
|
|
257
|
+
|
|
257
258
|
def collection_before_scope
|
|
258
259
|
@collection_before_scope
|
|
259
260
|
end
|
|
260
261
|
|
|
261
262
|
def current_scope
|
|
262
263
|
@current_scope ||= if params[:scope]
|
|
263
|
-
active_admin_config.get_scope_by_id(params[:scope])
|
|
264
|
+
active_admin_config.get_scope_by_id(params[:scope])
|
|
264
265
|
else
|
|
265
266
|
active_admin_config.default_scope(self)
|
|
266
267
|
end
|
|
@@ -270,32 +271,39 @@ module ActiveAdmin
|
|
|
270
271
|
page_method_name = Kaminari.config.page_method_name
|
|
271
272
|
page = params[Kaminari.config.param_name]
|
|
272
273
|
|
|
273
|
-
chain.
|
|
274
|
+
chain.public_send(page_method_name, page).per(per_page)
|
|
274
275
|
end
|
|
275
276
|
|
|
276
|
-
def
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
@per_page || active_admin_config.per_page
|
|
277
|
+
def collection_applies(options = {})
|
|
278
|
+
only = Array(options.fetch(:only, COLLECTION_APPLIES))
|
|
279
|
+
except = Array(options.fetch(:except, []))
|
|
280
|
+
COLLECTION_APPLIES && only - except
|
|
281
281
|
end
|
|
282
282
|
|
|
283
|
-
def
|
|
284
|
-
|
|
283
|
+
def per_page
|
|
284
|
+
if active_admin_config.paginate
|
|
285
|
+
dynamic_per_page || configured_per_page
|
|
286
|
+
else
|
|
287
|
+
max_per_page
|
|
288
|
+
end
|
|
285
289
|
end
|
|
286
290
|
|
|
287
|
-
def
|
|
288
|
-
|
|
291
|
+
def dynamic_per_page
|
|
292
|
+
params[:per_page] || @per_page
|
|
289
293
|
end
|
|
290
294
|
|
|
291
|
-
def
|
|
292
|
-
if
|
|
293
|
-
|
|
295
|
+
def configured_per_page
|
|
296
|
+
if active_admin_config.per_page.is_a?(Array)
|
|
297
|
+
active_admin_config.per_page[0]
|
|
294
298
|
else
|
|
295
|
-
|
|
299
|
+
active_admin_config.per_page
|
|
296
300
|
end
|
|
297
301
|
end
|
|
298
302
|
|
|
303
|
+
def max_per_page
|
|
304
|
+
10_000
|
|
305
|
+
end
|
|
306
|
+
|
|
299
307
|
end
|
|
300
308
|
end
|
|
301
309
|
end
|
|
@@ -1,20 +1,102 @@
|
|
|
1
1
|
module ActiveAdmin
|
|
2
2
|
class ResourceController < BaseController
|
|
3
3
|
module Decorators
|
|
4
|
-
protected
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
protected
|
|
6
|
+
|
|
7
|
+
def apply_decorator(resource)
|
|
8
|
+
decorate? ? decorator_class.new(resource) : resource
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def apply_collection_decorator(collection)
|
|
12
|
+
if decorate?
|
|
13
|
+
collection_decorator.decorate collection, with: decorator_class
|
|
14
|
+
else
|
|
15
|
+
collection
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.undecorate(resource)
|
|
20
|
+
if resource.respond_to?(:decorated?) && resource.decorated?
|
|
21
|
+
resource.model
|
|
22
|
+
else
|
|
23
|
+
resource
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
def decorate?
|
|
30
|
+
case action_name
|
|
31
|
+
when 'new', 'edit'
|
|
32
|
+
form = active_admin_config.get_page_presenter :form
|
|
33
|
+
form && form.options[:decorate] && decorator_class.present?
|
|
34
|
+
else
|
|
35
|
+
decorator_class.present?
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def decorator_class
|
|
40
|
+
active_admin_config.decorator_class
|
|
10
41
|
end
|
|
11
42
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
43
|
+
# When using Draper, we wrap the collection draper in a new class that
|
|
44
|
+
# correctly delegates methods that Active Admin depends on.
|
|
45
|
+
def collection_decorator
|
|
46
|
+
if decorator_class
|
|
47
|
+
Wrapper.wrap decorator_class
|
|
48
|
+
end
|
|
16
49
|
end
|
|
17
50
|
|
|
51
|
+
class Wrapper
|
|
52
|
+
@cache = {}
|
|
53
|
+
|
|
54
|
+
def self.wrap(decorator)
|
|
55
|
+
collection_decorator = find_collection_decorator(decorator)
|
|
56
|
+
|
|
57
|
+
if draper_collection_decorator? collection_decorator
|
|
58
|
+
name = "#{collection_decorator.name} of #{decorator} + ActiveAdmin"
|
|
59
|
+
@cache[name] ||= wrap! collection_decorator, name
|
|
60
|
+
else
|
|
61
|
+
collection_decorator
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
private
|
|
66
|
+
|
|
67
|
+
def self.wrap!(parent, name)
|
|
68
|
+
::Class.new parent do
|
|
69
|
+
delegate :reorder, :page, :current_page, :total_pages, :limit_value,
|
|
70
|
+
:total_count, :num_pages, :to_key, :group_values, :except,
|
|
71
|
+
:find_each
|
|
72
|
+
|
|
73
|
+
define_singleton_method(:name) { name }
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Draper::CollectionDecorator was introduced in 1.0.0
|
|
78
|
+
# Draper::Decorator#collection_decorator_class was introduced in 1.3.0
|
|
79
|
+
def self.find_collection_decorator(decorator)
|
|
80
|
+
if Dependency.draper? '>= 1.3.0'
|
|
81
|
+
decorator.collection_decorator_class
|
|
82
|
+
elsif Dependency.draper? '>= 1.0.0'
|
|
83
|
+
draper_collection_decorator
|
|
84
|
+
else
|
|
85
|
+
decorator
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def self.draper_collection_decorator?(decorator)
|
|
90
|
+
decorator && decorator <= draper_collection_decorator
|
|
91
|
+
rescue NameError
|
|
92
|
+
false
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def self.draper_collection_decorator
|
|
96
|
+
::Draper::CollectionDecorator
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
end
|
|
18
100
|
end
|
|
19
101
|
end
|
|
20
102
|
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'csv'
|
|
2
|
+
|
|
3
|
+
module ActiveAdmin
|
|
4
|
+
class ResourceController < BaseController
|
|
5
|
+
|
|
6
|
+
# This module overrides CSV responses to allow large data downloads.
|
|
7
|
+
# Could be expanded to JSON and XML in the future.
|
|
8
|
+
#
|
|
9
|
+
module Streaming
|
|
10
|
+
|
|
11
|
+
def index
|
|
12
|
+
super do |format|
|
|
13
|
+
format.csv { stream_csv }
|
|
14
|
+
yield(format) if block_given?
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
protected
|
|
19
|
+
|
|
20
|
+
def stream_resource(&block)
|
|
21
|
+
headers['X-Accel-Buffering'] = 'no'
|
|
22
|
+
headers['Cache-Control'] = 'no-cache'
|
|
23
|
+
self.response_body = Enumerator.new &block
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def csv_filename
|
|
27
|
+
"#{resource_collection_name.to_s.gsub('_', '-')}-#{Time.zone.now.to_date.to_s(:default)}.csv"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def stream_csv
|
|
31
|
+
headers['Content-Disposition'] = %{attachment; filename="#{csv_filename}"}
|
|
32
|
+
stream_resource &active_admin_config.csv_builder.method(:build).to_proc.curry[self]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|