yousty-activeadmin 1.0.4.pre → 1.0.5.pre
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +261 -211
- data/CONTRIBUTING.md +73 -39
- data/Gemfile +38 -20
- data/Guardfile +1 -0
- data/LICENSE +1 -1
- data/README.md +48 -24
- data/Rakefile +12 -4
- data/activeadmin.gemspec +21 -26
- data/app/assets/javascripts/active_admin/application.js.coffee +34 -5
- data/app/assets/javascripts/active_admin/base.js.coffee +11 -2
- 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/lib/checkbox-toggler.js.coffee +3 -4
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +51 -55
- 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 +29 -58
- data/app/assets/javascripts/active_admin/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} +51 -15
- 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/_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 -12
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +3 -1
- 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} +0 -0
- 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} +1 -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.css.scss → _all.scss} +0 -0
- data/app/assets/stylesheets/active_admin/mixins/{_buttons.css.scss → _buttons.scss} +0 -0
- data/app/assets/stylesheets/active_admin/mixins/{_gradients.css.scss → _gradients.scss} +1 -1
- 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.css.scss → _rounded.scss} +0 -0
- data/app/assets/stylesheets/active_admin/mixins/{_sections.css.scss → _sections.scss} +7 -1
- data/app/assets/stylesheets/active_admin/mixins/{_shadows.css.scss → _shadows.scss} +0 -0
- 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/_title_bar.scss +10 -7
- 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 +8 -8
- 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 +127 -0
- data/config/locales/en-GB.yml +11 -4
- data/config/locales/en.yml +21 -4
- data/config/locales/{es_MX.yml → es-MX.yml} +14 -24
- data/config/locales/es.yml +32 -25
- data/config/locales/fa.yml +120 -0
- data/config/locales/fi.yml +9 -5
- data/config/locales/fr.yml +28 -12
- 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 +17 -4
- 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 +36 -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 +14 -6
- data/docs/1-general-configuration.md +8 -5
- data/docs/10-custom-pages.md +68 -70
- data/docs/11-decorators.md +48 -59
- data/docs/12-arbre-components.md +79 -73
- data/docs/13-authorization-adapter.md +128 -107
- data/docs/14-gotchas.md +90 -0
- data/docs/2-resource-customization.md +82 -15
- data/docs/3-index-pages.md +71 -12
- data/docs/3-index-pages/custom-index.md +31 -0
- data/docs/3-index-pages/index-as-table.md +45 -2
- data/docs/4-csv-format.md +1 -1
- data/docs/5-forms.md +78 -29
- data/docs/6-show-pages.md +31 -3
- data/docs/7-sidebars.md +46 -25
- data/docs/8-custom-actions.md +98 -77
- data/docs/9-batch-actions.md +211 -133
- data/docs/README.md +24 -0
- data/features/action_item.feature +3 -3
- data/features/authorization_pundit.feature +37 -0
- data/features/belongs_to.feature +3 -0
- data/features/breadcrumb.feature +48 -0
- data/features/comments/commenting.feature +44 -13
- data/features/development_reloading.feature +3 -4
- data/features/edit_page.feature +9 -19
- data/features/favicon.feature +3 -3
- data/features/i18n.feature +5 -0
- data/features/index/batch_actions.feature +41 -0
- data/features/index/filters.feature +23 -0
- data/features/index/format_as_csv.feature +90 -4
- 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 +10 -20
- 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/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 +17 -18
- 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 +1 -1
- data/features/step_definitions/dashboard_steps.rb +2 -2
- data/features/step_definitions/factory_steps.rb +6 -6
- 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 +17 -10
- 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 +1 -1
- 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 +15 -9
- data/features/step_definitions/web_steps.rb +10 -11
- data/features/sti_resource.feature +2 -10
- data/features/strong_parameters.feature +73 -0
- data/features/support/env.rb +35 -2
- data/features/support/paths.rb +2 -2
- data/features/support/selectors.rb +1 -1
- data/features/users/resetting_password.feature +7 -7
- data/lib/active_admin.rb +18 -13
- data/lib/active_admin/abstract_view_factory.rb +7 -17
- data/lib/active_admin/application.rb +50 -25
- 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 +13 -7
- data/lib/active_admin/batch_actions/resource_extension.rb +43 -17
- 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 +26 -14
- data/lib/active_admin/dsl.rb +18 -11
- data/lib/active_admin/engine.rb +7 -2
- data/lib/active_admin/error.rb +59 -0
- data/lib/active_admin/filters/dsl.rb +2 -2
- data/lib/active_admin/filters/forms.rb +19 -30
- data/lib/active_admin/filters/formtastic_addons.rb +20 -11
- data/lib/active_admin/filters/resource_extension.rb +16 -9
- data/lib/active_admin/form_builder.rb +94 -105
- 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/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 +1 -1
- 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 +3 -3
- data/lib/active_admin/menu_collection.rb +1 -4
- data/lib/active_admin/namespace.rb +52 -29
- data/lib/active_admin/order_clause.rb +26 -0
- data/lib/active_admin/orm/active_record.rb +2 -0
- data/lib/active_admin/orm/active_record/comments.rb +48 -51
- data/lib/active_admin/orm/active_record/comments/comment.rb +16 -10
- data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +1 -1
- data/lib/active_admin/orm/active_record/comments/resource_helper.rb +1 -1
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +15 -13
- data/lib/active_admin/page.rb +5 -1
- 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 +12 -3
- data/lib/active_admin/resource/action_items.rb +15 -8
- 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 +25 -47
- data/lib/active_admin/resource/page_presenters.rb +1 -1
- data/lib/active_admin/resource/routes.rb +26 -10
- data/lib/active_admin/resource/scope_to.rb +7 -7
- data/lib/active_admin/resource/sidebars.rb +1 -0
- data/lib/active_admin/resource_collection.rb +44 -16
- data/lib/active_admin/resource_controller.rb +6 -5
- data/lib/active_admin/resource_controller/data_access.rb +87 -82
- 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 +54 -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 -16
- 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 +13 -6
- data/lib/active_admin/view_helpers/display_helper.rb +30 -17
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +21 -24
- data/lib/active_admin/view_helpers/fields_for.rb +2 -2
- 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 +22 -13
- 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 +33 -17
- 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 +1 -1
- 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 +67 -22
- 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_blog.rb +6 -6
- data/lib/active_admin/views/index_as_grid.rb +2 -2
- data/lib/active_admin/views/index_as_table.rb +127 -40
- data/lib/active_admin/views/pages/base.rb +22 -18
- data/lib/active_admin/views/pages/form.rb +16 -6
- data/lib/active_admin/views/pages/index.rb +36 -20
- 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 +1 -3
- data/lib/generators/active_admin/devise/devise_generator.rb +20 -28
- data/lib/generators/active_admin/install/install_generator.rb +8 -9
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +20 -22
- data/lib/generators/active_admin/install/templates/admin_user.rb.erb +12 -9
- 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 +2 -4
- data/lib/generators/active_admin/resource/templates/admin.rb +15 -0
- data/lib/ransack_ext.rb +4 -4
- 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 -170
- data/spec/support/detect_rails_version.rb +31 -39
- data/spec/support/rails_template.rb +61 -34
- data/spec/support/rails_template_with_data.rb +14 -14
- data/spec/support/templates/admin/stores.rb +3 -5
- 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 +11 -11
- data/spec/unit/action_builder_spec.rb +24 -18
- data/spec/unit/active_admin_spec.rb +2 -2
- data/spec/unit/application_spec.rb +30 -31
- data/spec/unit/asset_registration_spec.rb +11 -11
- data/spec/unit/authorization/authorization_adapter_spec.rb +7 -7
- 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 +42 -5
- 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 +26 -17
- data/spec/unit/cancan_adapter_spec.rb +4 -4
- data/spec/unit/comments_spec.rb +99 -39
- data/spec/unit/component_spec.rb +3 -3
- data/spec/unit/config_shared_examples.rb +8 -8
- data/spec/unit/controller_filters_spec.rb +26 -14
- data/spec/unit/csv_builder_spec.rb +152 -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 +9 -9
- data/spec/unit/filters/filter_form_builder_spec.rb +167 -157
- data/spec/unit/filters/resource_spec.rb +35 -33
- data/spec/unit/form_builder_spec.rb +383 -145
- data/spec/unit/generators/install_spec.rb +5 -5
- data/spec/unit/helpers/collection_spec.rb +18 -18
- data/spec/unit/helpers/scope_chain_spec.rb +5 -5
- 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 +5 -5
- data/spec/unit/namespace/register_page_spec.rb +9 -9
- data/spec/unit/namespace/register_resource_spec.rb +26 -28
- 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 +13 -10
- 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 +23 -23
- 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 +66 -68
- data/spec/unit/resource_controller/data_access_spec.rb +39 -21
- 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 +66 -62
- data/spec/unit/resource_registration_spec.rb +12 -12
- data/spec/unit/resource_spec.rb +75 -40
- 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 -2
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +137 -69
- 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 +9 -22
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +59 -21
- data/spec/unit/views/components/action_list_popover_spec.rb +16 -6
- data/spec/unit/views/components/attributes_table_spec.rb +94 -52
- 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 +68 -59
- 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 +8 -8
- data/spec/unit/views/components/status_tag_spec.rb +178 -38
- data/spec/unit/views/components/table_for_spec.rb +227 -44
- 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 +16 -3
- data/spec/unit/views/tabbed_navigation_spec.rb +61 -52
- data/tasks/docs.rake +1 -1
- data/tasks/parallel_tests.rake +8 -2
- data/tasks/test.rake +8 -4
- data/tasks/yard.rake +7 -5
- metadata +180 -101
- 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/components/application.js.coffee +0 -23
- data/app/assets/javascripts/active_admin/components/batch_actions.js.coffee +0 -26
- data/app/assets/javascripts/active_admin/components/has_many.js.coffee +0 -41
- 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 -39
- data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +0 -95
- data/app/views/active_admin/dashboard/index.html.arb +0 -1
- data/app/views/active_admin/resource/index.csv.erb +0 -17
- data/docs/3-index-pages/create-an-index.md +0 -29
- 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 -32
- data/lib/active_admin/inputs/filter_check_boxes_input.rb +0 -51
- 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 -61
- data/lib/active_admin/inputs/filter_string_input.rb +0 -24
- data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +0 -7
- 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 -16
- data/tasks/js.rake +0 -32
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Dependency
|
|
3
|
+
DEVISE = '~> 3.2'
|
|
4
|
+
|
|
5
|
+
# Provides a clean interface to check for gem dependencies at runtime.
|
|
6
|
+
#
|
|
7
|
+
# ActiveAdmin::Dependency.draper
|
|
8
|
+
# => #<ActiveAdmin::Dependency::Matcher for draper 1.2.1>
|
|
9
|
+
#
|
|
10
|
+
# ActiveAdmin::Dependency.draper?
|
|
11
|
+
# => true
|
|
12
|
+
#
|
|
13
|
+
# ActiveAdmin::Dependency.draper? '>= 1.5.0'
|
|
14
|
+
# => false
|
|
15
|
+
#
|
|
16
|
+
# ActiveAdmin::Dependency.draper? '= 1.2.1'
|
|
17
|
+
# => true
|
|
18
|
+
#
|
|
19
|
+
# ActiveAdmin::Dependency.draper? '~> 1.2.0'
|
|
20
|
+
# => true
|
|
21
|
+
#
|
|
22
|
+
# ActiveAdmin::Dependency.rails? '>= 4.1.0', '<= 4.1.1'
|
|
23
|
+
# => true
|
|
24
|
+
#
|
|
25
|
+
# ActiveAdmin::Dependency.rails! '2'
|
|
26
|
+
# -> ActiveAdmin::DependencyError: You provided rails 3.2.18 but we need: 2.
|
|
27
|
+
#
|
|
28
|
+
# ActiveAdmin::Dependency.devise!
|
|
29
|
+
# -> ActiveAdmin::DependencyError: To use devise you need to specify it in your Gemfile.
|
|
30
|
+
#
|
|
31
|
+
#
|
|
32
|
+
# All but the pessimistic operator (~>) can also be run using Ruby's comparison syntax.
|
|
33
|
+
#
|
|
34
|
+
# ActiveAdmin::Dependency.rails >= '3.2.18'
|
|
35
|
+
# => true
|
|
36
|
+
#
|
|
37
|
+
# Which is especially useful if you're looking up a gem with dashes in the name.
|
|
38
|
+
#
|
|
39
|
+
# ActiveAdmin::Dependency['jquery-ui-rails'] < 5
|
|
40
|
+
# => false
|
|
41
|
+
#
|
|
42
|
+
def self.method_missing(name, *args)
|
|
43
|
+
if name[-1] == '?'
|
|
44
|
+
Matcher.new(name[0..-2]).match? args
|
|
45
|
+
elsif name[-1] == '!'
|
|
46
|
+
Matcher.new(name[0..-2]).match! args
|
|
47
|
+
else
|
|
48
|
+
Matcher.new name.to_s
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def self.[](name)
|
|
53
|
+
Matcher.new name.to_s
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
class Matcher
|
|
57
|
+
def initialize(name)
|
|
58
|
+
@name, @spec = name, Gem.loaded_specs[name]
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def match?(*reqs)
|
|
62
|
+
!!@spec && Gem::Requirement.create(reqs).satisfied_by?(@spec.version)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def match!(*reqs)
|
|
66
|
+
unless @spec
|
|
67
|
+
raise DependencyError, "To use #{@name} you need to specify it in your Gemfile."
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
unless match? reqs
|
|
71
|
+
raise DependencyError, "You provided #{@spec.name} #{@spec.version} but we need: #{reqs.join ', '}."
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
include Comparable
|
|
76
|
+
|
|
77
|
+
def <=>(other)
|
|
78
|
+
if @spec
|
|
79
|
+
@spec.version <=> Gem::Version.create(other)
|
|
80
|
+
else
|
|
81
|
+
# you'd otherwise get an unhelpful error message:
|
|
82
|
+
# ArgumentError: comparison of ActiveAdmin::Dependency::Matcher with 2 failed
|
|
83
|
+
raise DependencyError, "To use #{@name} you need to specify it in your Gemfile."
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def inspect
|
|
88
|
+
info = @spec ? "#{@spec.name} #{@spec.version}" : '(missing)'
|
|
89
|
+
"<ActiveAdmin::Dependency::Matcher for #{info}>"
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -23,13 +23,12 @@ module ActiveAdmin
|
|
|
23
23
|
# end
|
|
24
24
|
#
|
|
25
25
|
def deprecate(klass, method, message)
|
|
26
|
-
klass.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
EOC
|
|
26
|
+
klass.send :define_method, "deprecated_#{method}", klass.instance_method(method)
|
|
27
|
+
|
|
28
|
+
klass.send :define_method, method do |*args|
|
|
29
|
+
ActiveAdmin::Deprecation.warn "#{message}", caller
|
|
30
|
+
send "deprecated_#{method}", *args
|
|
31
|
+
end
|
|
33
32
|
end
|
|
34
33
|
|
|
35
34
|
end
|
data/lib/active_admin/devise.rb
CHANGED
|
@@ -1,28 +1,26 @@
|
|
|
1
|
+
ActiveAdmin::Dependency.devise! ActiveAdmin::Dependency::DEVISE
|
|
2
|
+
|
|
1
3
|
require 'devise'
|
|
2
4
|
|
|
3
5
|
module ActiveAdmin
|
|
4
6
|
module Devise
|
|
5
7
|
|
|
6
8
|
def self.config
|
|
7
|
-
|
|
8
|
-
:
|
|
9
|
-
:
|
|
10
|
-
:
|
|
9
|
+
{
|
|
10
|
+
path: ActiveAdmin.application.default_namespace || "/",
|
|
11
|
+
controllers: ActiveAdmin::Devise.controllers,
|
|
12
|
+
path_names: { sign_in: 'login', sign_out: "logout" },
|
|
13
|
+
sign_out_via: [*::Devise.sign_out_via, ActiveAdmin.application.logout_link_method].uniq
|
|
11
14
|
}
|
|
12
|
-
|
|
13
|
-
if ::Devise.respond_to?(:sign_out_via)
|
|
14
|
-
logout_methods = [::Devise.sign_out_via, ActiveAdmin.application.logout_link_method].flatten.uniq
|
|
15
|
-
config.merge!( :sign_out_via => logout_methods)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
config
|
|
19
15
|
end
|
|
20
16
|
|
|
21
17
|
def self.controllers
|
|
22
18
|
{
|
|
23
|
-
:
|
|
24
|
-
:
|
|
25
|
-
:
|
|
19
|
+
sessions: "active_admin/devise/sessions",
|
|
20
|
+
passwords: "active_admin/devise/passwords",
|
|
21
|
+
unlocks: "active_admin/devise/unlocks",
|
|
22
|
+
registrations: "active_admin/devise/registrations",
|
|
23
|
+
confirmations: "active_admin/devise/confirmations"
|
|
26
24
|
}
|
|
27
25
|
end
|
|
28
26
|
|
|
@@ -66,5 +64,19 @@ module ActiveAdmin
|
|
|
66
64
|
include ::ActiveAdmin::Devise::Controller
|
|
67
65
|
end
|
|
68
66
|
|
|
67
|
+
class RegistrationsController < ::Devise::RegistrationsController
|
|
68
|
+
include ::ActiveAdmin::Devise::Controller
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
class ConfirmationsController < ::Devise::ConfirmationsController
|
|
72
|
+
include ::ActiveAdmin::Devise::Controller
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def self.controllers_for_filters
|
|
76
|
+
[SessionsController, PasswordsController, UnlocksController,
|
|
77
|
+
RegistrationsController, ConfirmationsController
|
|
78
|
+
]
|
|
79
|
+
end
|
|
80
|
+
|
|
69
81
|
end
|
|
70
82
|
end
|
data/lib/active_admin/dsl.rb
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
module ActiveAdmin
|
|
2
2
|
|
|
3
|
-
#
|
|
4
3
|
# The Active Admin DSL. This class is where all the registration blocks
|
|
5
|
-
# are
|
|
6
|
-
# users of Active Admin
|
|
4
|
+
# are evaluated. This is the central place for the API given to
|
|
5
|
+
# users of Active Admin.
|
|
7
6
|
#
|
|
8
7
|
class DSL
|
|
9
8
|
|
|
@@ -13,10 +12,10 @@ module ActiveAdmin
|
|
|
13
12
|
|
|
14
13
|
# Runs the registration block inside this object
|
|
15
14
|
def run_registration_block(&block)
|
|
16
|
-
|
|
15
|
+
instance_exec &block if block_given?
|
|
17
16
|
end
|
|
18
17
|
|
|
19
|
-
# The instance of ActiveAdmin::
|
|
18
|
+
# The instance of ActiveAdmin::Resource that's being registered
|
|
20
19
|
# currently. You can use this within your registration blocks to
|
|
21
20
|
# modify options:
|
|
22
21
|
#
|
|
@@ -51,13 +50,13 @@ module ActiveAdmin
|
|
|
51
50
|
#
|
|
52
51
|
# @param [Module] mod A module to include
|
|
53
52
|
#
|
|
54
|
-
# @
|
|
53
|
+
# @return [Nil]
|
|
55
54
|
def include(mod)
|
|
56
55
|
mod.included(self)
|
|
57
56
|
end
|
|
58
57
|
|
|
59
58
|
# Returns the controller for this resource. If you pass a
|
|
60
|
-
# block, it will be
|
|
59
|
+
# block, it will be evaluated in the controller.
|
|
61
60
|
#
|
|
62
61
|
# Example:
|
|
63
62
|
#
|
|
@@ -72,19 +71,27 @@ module ActiveAdmin
|
|
|
72
71
|
# end
|
|
73
72
|
#
|
|
74
73
|
def controller(&block)
|
|
75
|
-
@config.controller.
|
|
74
|
+
@config.controller.class_exec(&block) if block_given?
|
|
76
75
|
@config.controller
|
|
77
76
|
end
|
|
78
77
|
|
|
79
78
|
# Add a new action item to the resource
|
|
80
79
|
#
|
|
80
|
+
# @param [Symbol] name
|
|
81
81
|
# @param [Hash] options valid keys include:
|
|
82
82
|
# :only: A single or array of controller actions to display
|
|
83
83
|
# this action item on.
|
|
84
84
|
# :except: A single or array of controller actions not to
|
|
85
85
|
# display this action item on.
|
|
86
|
-
def action_item(options = {}, &block)
|
|
87
|
-
|
|
86
|
+
def action_item(name = nil, options = {}, &block)
|
|
87
|
+
if name.is_a?(Hash)
|
|
88
|
+
options = name
|
|
89
|
+
name = nil
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
Deprecation.warn "using `action_item` without a name is deprecated! Use `action_item(:edit)`." unless name
|
|
93
|
+
|
|
94
|
+
config.add_action_item(name, options, &block)
|
|
88
95
|
end
|
|
89
96
|
|
|
90
97
|
# Add a new batch action item to the resource
|
|
@@ -101,7 +108,7 @@ module ActiveAdmin
|
|
|
101
108
|
def batch_action(title, options = {}, &block)
|
|
102
109
|
# Create symbol & title information
|
|
103
110
|
if title.is_a? String
|
|
104
|
-
sym = title.titleize.
|
|
111
|
+
sym = title.titleize.tr(' ', '').underscore.to_sym
|
|
105
112
|
else
|
|
106
113
|
sym = title
|
|
107
114
|
title = sym.to_s.titleize
|
data/lib/active_admin/engine.rb
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
module ActiveAdmin
|
|
2
2
|
class Engine < ::Rails::Engine
|
|
3
|
-
initializer "
|
|
4
|
-
|
|
3
|
+
initializer "active_admin.precompile", group: :all do |app|
|
|
4
|
+
ActiveAdmin.application.stylesheets.each do |path, _|
|
|
5
|
+
app.config.assets.precompile << path
|
|
6
|
+
end
|
|
7
|
+
ActiveAdmin.application.javascripts.each do |path|
|
|
8
|
+
app.config.assets.precompile << path
|
|
9
|
+
end
|
|
5
10
|
end
|
|
6
11
|
end
|
|
7
12
|
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
# Exception class to raise when there is an authorized access
|
|
3
|
+
# exception thrown. The exception has a few goodies that may
|
|
4
|
+
# be useful for capturing / recognizing security issues.
|
|
5
|
+
class AccessDenied < StandardError
|
|
6
|
+
attr_reader :user, :action, :subject
|
|
7
|
+
|
|
8
|
+
def initialize(user, action, subject)
|
|
9
|
+
@user, @action, @subject = user, action, subject
|
|
10
|
+
|
|
11
|
+
super()
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def message
|
|
15
|
+
I18n.t("active_admin.access_denied.message")
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
class Error < RuntimeError
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
class ErrorLoading < Error
|
|
23
|
+
# Locates the most recent file and line from the caught exception's backtrace.
|
|
24
|
+
def find_cause(folder, backtrace)
|
|
25
|
+
backtrace.grep(/\/(#{folder}\/.*\.rb):(\d+)/){ [$1, $2] }.first
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
class DatabaseHitDuringLoad < ErrorLoading
|
|
30
|
+
def initialize(exception)
|
|
31
|
+
file, line = find_cause(:app, exception.backtrace)
|
|
32
|
+
|
|
33
|
+
super "Your file, #{file} (line #{line}), caused a database error while Active Admin was loading. This " +
|
|
34
|
+
"is most common when your database is missing or doesn't have the latest migrations applied. To " +
|
|
35
|
+
"prevent this error, move the code to a place where it will only be run when a page is rendered. " +
|
|
36
|
+
"One solution can be, to wrap the query in a Proc." +
|
|
37
|
+
"Original error message: #{exception.message}"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def self.capture
|
|
41
|
+
yield
|
|
42
|
+
rescue *database_error_classes => exception
|
|
43
|
+
raise new exception
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
private
|
|
47
|
+
|
|
48
|
+
def self.database_error_classes
|
|
49
|
+
@classes ||= []
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
class DependencyError < ErrorLoading
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
class NoMenuError < KeyError
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
end
|
|
@@ -8,8 +8,8 @@ module ActiveAdmin
|
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
# For docs, please see ActiveAdmin::Filters::ResourceExtension#remove_filter
|
|
11
|
-
def remove_filter(
|
|
12
|
-
config.remove_filter(
|
|
11
|
+
def remove_filter(*attributes)
|
|
12
|
+
config.remove_filter(*attributes)
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
# For docs, please see ActiveAdmin::Filters::ResourceExtension#preserve_default_filters!
|
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
module ActiveAdmin
|
|
2
2
|
module Filters
|
|
3
|
-
|
|
4
3
|
# This form builder defines methods to build filter forms such
|
|
5
4
|
# as the one found in the sidebar of the index page of a standard resource.
|
|
6
5
|
class FormBuilder < ::ActiveAdmin::FormBuilder
|
|
7
6
|
include ::ActiveAdmin::Filters::FormtasticAddons
|
|
7
|
+
self.input_namespaces = [::Object, ::ActiveAdmin::Inputs::Filters, ::ActiveAdmin::Inputs, ::Formtastic::Inputs]
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
super
|
|
12
|
-
end
|
|
9
|
+
# TODO: remove input class finders after formtastic 4 (where it will be default)
|
|
10
|
+
self.input_class_finder = ::Formtastic::InputClassFinder
|
|
13
11
|
|
|
14
12
|
def filter(method, options = {})
|
|
15
13
|
if method.present? && options[:as] ||= default_input_type(method)
|
|
16
|
-
input(method, options)
|
|
14
|
+
template.concat input(method, options)
|
|
17
15
|
end
|
|
18
16
|
end
|
|
19
17
|
|
|
@@ -22,8 +20,10 @@ module ActiveAdmin
|
|
|
22
20
|
# Returns the default filter type for a given attribute. If you want
|
|
23
21
|
# to use a custom search method, you have to specify the type yourself.
|
|
24
22
|
def default_input_type(method, options = {})
|
|
25
|
-
if method =~ /_(contains|starts_with|ends_with)\z/
|
|
23
|
+
if method =~ /_(eq|equals|cont|contains|start|starts_with|end|ends_with)\z/
|
|
26
24
|
:string
|
|
25
|
+
elsif klass._ransackers.key?(method.to_s)
|
|
26
|
+
klass._ransackers[method.to_s].type
|
|
27
27
|
elsif reflection_for(method) || polymorphic_foreign_type?(method)
|
|
28
28
|
:select
|
|
29
29
|
elsif column = column_for(method)
|
|
@@ -39,15 +39,6 @@ module ActiveAdmin
|
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
41
|
end
|
|
42
|
-
|
|
43
|
-
def custom_input_class_name(as)
|
|
44
|
-
"Filter#{as.to_s.camelize}Input"
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def active_admin_input_class_name(as)
|
|
48
|
-
"ActiveAdmin::Inputs::Filter#{as.to_s.camelize}Input"
|
|
49
|
-
end
|
|
50
|
-
|
|
51
42
|
end
|
|
52
43
|
|
|
53
44
|
|
|
@@ -56,30 +47,28 @@ module ActiveAdmin
|
|
|
56
47
|
|
|
57
48
|
# Helper method to render a filter form
|
|
58
49
|
def active_admin_filters_form_for(search, filters, options = {})
|
|
59
|
-
defaults = { :
|
|
60
|
-
:
|
|
61
|
-
:
|
|
62
|
-
required = { :
|
|
63
|
-
:
|
|
50
|
+
defaults = { builder: ActiveAdmin::Filters::FormBuilder,
|
|
51
|
+
url: collection_path,
|
|
52
|
+
html: {class: 'filter_form'} }
|
|
53
|
+
required = { html: {method: :get},
|
|
54
|
+
as: :q }
|
|
64
55
|
options = defaults.deep_merge(options).deep_merge(required)
|
|
65
56
|
|
|
66
57
|
form_for search, options do |f|
|
|
67
58
|
filters.each do |attribute, opts|
|
|
68
|
-
|
|
69
|
-
|
|
59
|
+
next if opts.key?(:if) && !call_method_or_proc_on(self, opts[:if])
|
|
60
|
+
next if opts.key?(:unless) && call_method_or_proc_on(self, opts[:unless])
|
|
70
61
|
|
|
71
|
-
|
|
72
|
-
f.filter attribute, opts
|
|
73
|
-
end
|
|
62
|
+
f.filter attribute, opts.except(:if, :unless)
|
|
74
63
|
end
|
|
75
64
|
|
|
76
|
-
buttons = content_tag :div, :
|
|
65
|
+
buttons = content_tag :div, class: "buttons" do
|
|
77
66
|
f.submit(I18n.t('active_admin.filters.buttons.filter')) +
|
|
78
|
-
link_to(I18n.t('active_admin.filters.buttons.clear'), '#', :
|
|
79
|
-
hidden_field_tags_for(params, :
|
|
67
|
+
link_to(I18n.t('active_admin.filters.buttons.clear'), '#', class: 'clear_filters_btn') +
|
|
68
|
+
hidden_field_tags_for(params, except: [:q, :page])
|
|
80
69
|
end
|
|
81
70
|
|
|
82
|
-
f.
|
|
71
|
+
f.template.concat buttons
|
|
83
72
|
end
|
|
84
73
|
end
|
|
85
74
|
|
|
@@ -11,7 +11,7 @@ module ActiveAdmin
|
|
|
11
11
|
if klass.respond_to?(:human_attribute_name)
|
|
12
12
|
klass.human_attribute_name(method)
|
|
13
13
|
else
|
|
14
|
-
method.to_s.
|
|
14
|
+
method.to_s.public_send(builder.label_str_method)
|
|
15
15
|
end
|
|
16
16
|
end
|
|
17
17
|
|
|
@@ -37,34 +37,43 @@ module ActiveAdmin
|
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
def polymorphic_foreign_type?(method)
|
|
40
|
-
klass.
|
|
40
|
+
klass.reflect_on_all_associations.select{ |r| r.macro == :belongs_to && r.options[:polymorphic] }
|
|
41
41
|
.map(&:foreign_type).include? method.to_s
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
-
def searchable_through_association?(method = method)
|
|
45
|
-
ref = reflection_for(method)
|
|
46
|
-
ref.options[:through] && ref.through_reflection.klass.ransackable_attributes.include?(ref.foreign_key) if ref
|
|
47
|
-
end
|
|
48
|
-
|
|
49
44
|
#
|
|
50
|
-
# These help figure out whether the given method will be recognized by Ransack.
|
|
45
|
+
# These help figure out whether the given method or association will be recognized by Ransack.
|
|
51
46
|
#
|
|
52
47
|
|
|
48
|
+
def searchable_has_many_through?
|
|
49
|
+
if reflection && reflection.options[:through]
|
|
50
|
+
reflection.through_reflection.klass.ransackable_attributes.include? reflection.foreign_key
|
|
51
|
+
else
|
|
52
|
+
false
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
53
56
|
def seems_searchable?
|
|
54
|
-
has_predicate? || ransacker?
|
|
57
|
+
has_predicate? || ransacker? || scope?
|
|
55
58
|
end
|
|
56
59
|
|
|
57
60
|
# If the given method has a predicate (like _eq or _lteq), it's pretty
|
|
58
61
|
# likely we're dealing with a valid search method.
|
|
59
62
|
def has_predicate?
|
|
60
|
-
!!Ransack::Predicate.
|
|
63
|
+
!!Ransack::Predicate.detect_from_string(method.to_s)
|
|
61
64
|
end
|
|
62
65
|
|
|
63
|
-
# Ransack lets you define custom search methods,
|
|
66
|
+
# Ransack lets you define custom search methods, called ransackers.
|
|
64
67
|
def ransacker?
|
|
65
68
|
klass._ransackers.key? method.to_s
|
|
66
69
|
end
|
|
67
70
|
|
|
71
|
+
# Ransack supports exposing selected scopes on your model for advanced searches.
|
|
72
|
+
def scope?
|
|
73
|
+
context = Ransack::Context.for klass
|
|
74
|
+
context.respond_to?(:ransackable_scope?) && context.ransackable_scope?(method.to_s, klass)
|
|
75
|
+
end
|
|
76
|
+
|
|
68
77
|
end
|
|
69
78
|
end
|
|
70
79
|
end
|