activeadmin 0.6.0 → 0.6.1
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.
- data/.gitignore +5 -1
- data/.travis.yml +1 -1
- data/.yardopts +2 -3
- data/CHANGELOG.md +180 -36
- data/CONTRIBUTING.md +12 -2
- data/Gemfile +9 -3
- data/README.rdoc +38 -65
- data/Rakefile +1 -3
- data/activeadmin.gemspec +10 -11
- data/app/assets/images/active_admin/index_list_icons/block_icon.svg +1 -1
- data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +1 -1
- data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +1 -1
- data/app/assets/images/active_admin/index_list_icons/table_icon.svg +1 -1
- data/app/assets/javascripts/active_admin/components/jquery.aa.checkbox-toggler.js.coffee +2 -2
- data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +2 -2
- data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +2 -2
- data/app/assets/javascripts/active_admin/components/jquery.aa.table-checkbox-toggler.js.coffee +2 -2
- data/app/assets/javascripts/active_admin/lib/namespace.js.coffee +2 -1
- data/app/assets/javascripts/active_admin/pages/application.js.coffee +6 -1
- data/app/assets/stylesheets/active_admin/_base.css.scss +29 -34
- data/app/assets/stylesheets/active_admin/_forms.css.scss +65 -62
- data/app/assets/stylesheets/active_admin/_header.css.scss +57 -45
- data/app/assets/stylesheets/active_admin/_typography.css.scss +9 -9
- data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +1 -1
- data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +5 -5
- data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +2 -2
- data/app/assets/stylesheets/active_admin/components/_comments.css.scss +1 -1
- data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +20 -20
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +16 -16
- data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +25 -23
- data/app/assets/stylesheets/active_admin/components/_grid.scss +2 -2
- data/app/assets/stylesheets/active_admin/components/_index_list.scss +1 -1
- data/app/assets/stylesheets/active_admin/components/_pagination.scss +10 -10
- data/app/assets/stylesheets/active_admin/components/_panels.scss +1 -1
- data/app/assets/stylesheets/active_admin/components/_popovers.css.scss +27 -27
- data/app/assets/stylesheets/active_admin/components/_scopes.scss +1 -1
- data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +10 -10
- data/app/assets/stylesheets/active_admin/components/_tables.css.scss +9 -9
- data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +3 -3
- data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +4 -4
- data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +4 -7
- data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +5 -5
- data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +3 -3
- data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +6 -6
- data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +8 -8
- data/app/assets/stylesheets/active_admin/mixins/_typography.scss +1 -1
- data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +1 -1
- data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +9 -1
- data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +1 -1
- data/app/assets/stylesheets/active_admin/print.css.scss +2 -8
- data/app/assets/stylesheets/active_admin/structure/_footer.scss +5 -5
- data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +13 -13
- data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +14 -14
- data/app/views/active_admin/devise/passwords/edit.html.erb +1 -1
- data/app/views/active_admin/devise/sessions/new.html.erb +1 -1
- data/app/views/active_admin/devise/shared/_links.erb +8 -1
- data/app/views/active_admin/resource/index.csv.erb +3 -3
- data/app/views/layouts/active_admin_logged_out.html.erb +5 -3
- data/config/locales/bg.yml +101 -0
- data/{lib/active_admin → config}/locales/ca.yml +24 -7
- data/{lib/active_admin → config}/locales/cs.yml +34 -12
- data/{lib/active_admin → config}/locales/da.yml +29 -7
- data/config/locales/de-CH.yml +117 -0
- data/{lib/active_admin → config}/locales/de.yml +19 -9
- data/config/locales/en-GB.yml +90 -0
- data/{lib/active_admin → config}/locales/en.yml +16 -6
- data/config/locales/es.yml +106 -0
- data/{lib/active_admin/locales/es.yml → config/locales/es_MX.yml} +14 -8
- data/{lib/active_admin → config}/locales/fr.yml +14 -6
- data/{lib/active_admin → config}/locales/he.yml +16 -6
- data/{lib/active_admin → config}/locales/hr.yml +14 -6
- data/{lib/active_admin → config}/locales/hu.yml +31 -6
- data/{lib/active_admin → config}/locales/it.yml +14 -6
- data/{lib/active_admin → config}/locales/ja.yml +32 -7
- data/{lib/active_admin → config}/locales/ko.yml +14 -6
- data/{lib/active_admin → config}/locales/lt.yml +15 -6
- data/{lib/active_admin → config}/locales/lv.yml +14 -6
- data/{lib/active_admin → config}/locales/nl.yml +14 -6
- data/{lib/active_admin → config}/locales/no-NB.yml +14 -6
- data/{lib/active_admin → config}/locales/pl.yml +14 -6
- data/{lib/active_admin → config}/locales/pt-BR.yml +14 -6
- data/{lib/active_admin → config}/locales/pt-PT.yml +14 -6
- data/{lib/active_admin → config}/locales/ro.yml +32 -7
- data/{lib/active_admin → config}/locales/ru.yml +30 -8
- data/{lib/active_admin → config}/locales/sv-SE.yml +14 -6
- data/{lib/active_admin → config}/locales/tr.yml +15 -6
- data/config/locales/uk.yml +100 -0
- data/{lib/active_admin → config}/locales/vi.yml +15 -6
- data/{lib/active_admin → config}/locales/zh-CN.yml +15 -6
- data/{lib/active_admin → config}/locales/zh-TW.yml +15 -6
- data/docs/0-installation.md +22 -18
- data/docs/1-general-configuration.md +1 -1
- data/docs/10-custom-pages.md +3 -3
- data/docs/11-decorators.md +18 -2
- data/docs/12-arbre-components.md +53 -54
- data/docs/13-authorization-adapter.md +31 -10
- data/docs/2-resource-customization.md +16 -1
- data/docs/3-index-pages.md +13 -1
- data/docs/3-index-pages/create-an-index.md +4 -4
- data/docs/3-index-pages/index-as-block.md +1 -1
- data/docs/3-index-pages/index-as-blog.md +1 -1
- data/docs/3-index-pages/index-as-grid.md +1 -1
- data/docs/4-csv-format.md +4 -4
- data/docs/5-forms.md +46 -3
- data/docs/{6-show-screens.md → 6-show-pages.md} +3 -3
- data/docs/8-custom-actions.md +3 -3
- data/docs/9-batch-actions.md +9 -1
- data/features/action_item.feature +6 -6
- data/features/authorization_cancan.feature +1 -1
- data/features/belongs_to.feature +3 -3
- data/features/breadcrumb.feature +2 -2
- data/features/comments/commenting.feature +7 -5
- data/features/dashboard.feature +0 -51
- data/features/favicon.feature +20 -0
- data/features/global_navigation.feature +0 -1
- data/features/index/batch_actions.feature +12 -11
- data/features/index/filters.feature +6 -6
- data/features/index/format_as_csv.feature +4 -5
- data/features/index/index_as_blog.feature +20 -1
- data/features/index/index_as_table.feature +1 -1
- data/features/index/index_blank_slate.feature +3 -3
- data/features/index/index_parameters.feature +4 -10
- data/features/index/index_scope_to.feature +24 -0
- data/features/index/index_scopes.feature +17 -5
- data/features/index/pagination.feature +15 -0
- data/features/registering_pages.feature +1 -1
- data/features/registering_resources.feature +2 -2
- data/features/show/default_content.feature +3 -3
- data/features/sidebar_sections.feature +3 -3
- data/features/specifying_actions.feature +1 -1
- data/features/step_definitions/additional_web_steps.rb +3 -16
- data/features/step_definitions/asset_steps.rb +5 -1
- data/features/step_definitions/attribute_steps.rb +4 -4
- data/features/step_definitions/batch_action_steps.rb +25 -74
- data/features/step_definitions/breadcrumb_steps.rb +1 -3
- data/features/step_definitions/comment_steps.rb +0 -1
- data/features/step_definitions/configuration_steps.rb +53 -69
- data/features/step_definitions/dashboard_steps.rb +2 -2
- data/features/step_definitions/factory_steps.rb +17 -33
- data/features/step_definitions/filter_steps.rb +2 -2
- data/features/step_definitions/format_steps.rb +10 -14
- data/features/step_definitions/index_scope_steps.rb +9 -25
- data/features/step_definitions/index_views_steps.rb +1 -1
- data/features/step_definitions/sidebar_steps.rb +2 -1
- data/features/step_definitions/site_title_steps.rb +1 -1
- data/features/step_definitions/table_steps.rb +6 -1
- data/features/step_definitions/user_steps.rb +23 -38
- data/features/step_definitions/web_steps.rb +18 -147
- data/features/support/env.rb +13 -34
- data/features/support/paths.rb +2 -0
- data/features/users/logging_in.feature +2 -2
- data/features/users/logging_out.feature +0 -12
- data/features/users/resetting_password.feature +1 -1
- data/lib/active_admin.rb +4 -17
- data/lib/active_admin/abstract_view_factory.rb +1 -1
- data/lib/active_admin/application.rb +19 -28
- data/lib/active_admin/asset_registration.rb +7 -25
- data/lib/active_admin/authorization_adapter.rb +9 -5
- data/lib/active_admin/base_controller.rb +2 -2
- data/lib/active_admin/base_controller/authorization.rb +25 -27
- data/lib/active_admin/batch_actions/resource_extension.rb +3 -3
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +1 -1
- data/lib/active_admin/batch_actions/views/selection_cells.rb +1 -1
- data/lib/active_admin/callbacks.rb +1 -1
- data/lib/active_admin/cancan_adapter.rb +2 -2
- data/lib/active_admin/comments.rb +32 -38
- data/lib/active_admin/comments/comment.rb +6 -8
- data/lib/active_admin/comments/views.rb +0 -1
- data/lib/active_admin/comments/views/active_admin_comments.rb +27 -38
- data/lib/active_admin/csv_builder.rb +4 -6
- data/lib/active_admin/dependency_checker.rb +4 -0
- data/lib/active_admin/deprecation.rb +3 -3
- data/lib/active_admin/dsl.rb +5 -5
- data/lib/active_admin/engine.rb +1 -1
- data/lib/active_admin/filters.rb +2 -1
- data/lib/active_admin/filters/forms.rb +36 -43
- data/lib/active_admin/filters/formtastic_addons.rb +45 -0
- data/lib/active_admin/filters/resource_extension.rb +9 -1
- data/lib/active_admin/form_builder.rb +30 -19
- data/lib/active_admin/helpers/optional_display.rb +11 -13
- data/lib/active_admin/helpers/settings.rb +50 -8
- data/lib/active_admin/inputs/filter_base.rb +5 -18
- data/lib/active_admin/inputs/filter_base/search_method_select.rb +73 -0
- data/lib/active_admin/inputs/filter_boolean_input.rb +6 -14
- data/lib/active_admin/inputs/filter_check_boxes_input.rb +1 -1
- data/lib/active_admin/inputs/filter_numeric_input.rb +2 -47
- data/lib/active_admin/inputs/filter_select_input.rb +32 -10
- data/lib/active_admin/inputs/filter_string_input.rb +12 -14
- data/lib/active_admin/namespace.rb +8 -40
- data/lib/active_admin/page.rb +2 -2
- data/lib/active_admin/page_dsl.rb +1 -1
- data/lib/active_admin/reloader.rb +3 -3
- data/lib/active_admin/resource.rb +16 -23
- data/lib/active_admin/resource/belongs_to.rb +8 -5
- data/lib/active_admin/resource/menu.rb +10 -23
- data/lib/active_admin/resource/naming.rb +3 -3
- data/lib/active_admin/resource/page_presenters.rb +2 -2
- data/lib/active_admin/resource/routes.rb +74 -21
- data/lib/active_admin/resource/scope_to.rb +74 -0
- data/lib/active_admin/resource/scopes.rb +8 -4
- data/lib/active_admin/resource_collection.rb +20 -66
- data/lib/active_admin/resource_controller.rb +12 -16
- data/lib/active_admin/resource_controller/data_access.rb +19 -22
- data/lib/active_admin/resource_controller/resource_class_methods.rb +2 -2
- data/lib/active_admin/resource_controller/scoping.rb +4 -9
- data/lib/active_admin/resource_dsl.rb +5 -32
- data/lib/active_admin/router.rb +34 -47
- data/lib/active_admin/scope.rb +5 -3
- data/lib/active_admin/sidebar_section.rb +1 -1
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_factory.rb +1 -1
- data/lib/active_admin/view_helpers/auto_link_helper.rb +1 -1
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +8 -8
- data/lib/active_admin/view_helpers/display_helper.rb +15 -6
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +2 -2
- data/lib/active_admin/view_helpers/form_helper.rb +6 -1
- data/lib/active_admin/view_helpers/icon_helper.rb +1 -1
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +5 -5
- data/lib/active_admin/view_helpers/title_helper.rb +1 -1
- data/lib/active_admin/views/components/action_list_popover.rb +6 -6
- data/lib/active_admin/views/components/attributes_table.rb +9 -12
- data/lib/active_admin/views/components/blank_slate.rb +4 -4
- data/lib/active_admin/views/components/columns.rb +1 -1
- data/lib/active_admin/views/components/index_list.rb +1 -1
- data/lib/active_admin/views/components/paginated_collection.rb +20 -12
- data/lib/active_admin/views/components/panel.rb +1 -1
- data/lib/active_admin/views/components/scopes.rb +2 -1
- data/lib/active_admin/views/components/sidebar_section.rb +1 -1
- data/lib/active_admin/views/components/status_tag.rb +1 -1
- data/lib/active_admin/views/header.rb +2 -2
- data/lib/active_admin/views/index_as_blog.rb +16 -3
- data/lib/active_admin/views/index_as_table.rb +2 -2
- data/lib/active_admin/views/pages/base.rb +8 -3
- data/lib/active_admin/views/pages/form.rb +2 -2
- data/lib/active_admin/views/pages/index.rb +19 -17
- data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +1 -1
- data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +1 -13
- data/lib/generators/active_admin/devise/devise_generator.rb +22 -1
- data/lib/generators/active_admin/install/install_generator.rb +1 -5
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +40 -19
- data/lib/generators/active_admin/install/templates/admin_user.rb.erb +18 -18
- data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +19 -0
- data/lib/generators/active_admin/resource/resource_generator.rb +1 -1
- data/lib/generators/active_admin/resource/templates/admin.rb +1 -1
- data/script/use_rails +1 -1
- data/spec/integration/memory_spec.rb +3 -2
- data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +4 -4
- data/spec/javascripts/coffeescripts/jquery.aa.popover-spec.js.coffee +1 -1
- data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +2 -2
- data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +4 -4
- data/spec/javascripts/compiled/jquery.aa.popover-spec.js +1 -1
- data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +2 -2
- data/spec/spec_helper.rb +16 -6
- data/spec/spec_helper_without_rails.rb +2 -0
- data/spec/support/deferred_garbage_collection.rb +19 -0
- data/spec/support/jslint.yml +1 -1
- data/spec/support/rails_template.rb +29 -27
- data/spec/support/templates/admin/stores.rb +5 -1
- data/spec/unit/abstract_view_factory_spec.rb +1 -1
- data/spec/unit/action_builder_spec.rb +7 -7
- data/spec/unit/active_admin_spec.rb +0 -14
- data/spec/unit/application_spec.rb +16 -17
- data/spec/unit/asset_registration_spec.rb +21 -8
- data/spec/unit/authorization/authorization_adapter_spec.rb +3 -3
- data/spec/unit/authorization/controller_authorization_spec.rb +16 -24
- data/spec/unit/batch_actions/resource_spec.rb +11 -11
- data/spec/unit/belongs_to_spec.rb +1 -1
- data/spec/unit/cancan_adapter_spec.rb +11 -3
- data/spec/unit/comments_spec.rb +10 -28
- data/spec/unit/controller_filters_spec.rb +22 -24
- data/spec/unit/csv_builder_spec.rb +3 -3
- data/spec/unit/devise_spec.rb +10 -10
- data/spec/unit/filters/filter_form_builder_spec.rb +140 -45
- data/spec/unit/filters/resource_spec.rb +20 -19
- data/spec/unit/form_builder_spec.rb +122 -70
- data/spec/unit/menu_item_spec.rb +3 -3
- data/spec/unit/namespace/authorization_spec.rb +4 -8
- data/spec/unit/namespace/register_page_spec.rb +1 -1
- data/spec/unit/namespace/register_resource_spec.rb +12 -7
- data/spec/unit/namespace_spec.rb +4 -10
- data/spec/unit/page_spec.rb +1 -1
- data/spec/unit/resource/menu_spec.rb +1 -1
- data/spec/unit/resource/naming_spec.rb +9 -0
- data/spec/unit/resource/pagination_spec.rb +2 -2
- data/spec/unit/resource/routes_spec.rb +73 -0
- data/spec/unit/resource/scopes_spec.rb +1 -1
- data/spec/unit/resource_collection_spec.rb +95 -43
- data/spec/unit/resource_registration_spec.rb +3 -12
- data/spec/unit/resource_spec.rb +41 -48
- data/spec/unit/routing_spec.rb +10 -64
- data/spec/unit/scope_spec.rb +19 -0
- data/spec/unit/settings_spec.rb +88 -0
- data/spec/unit/view_factory_spec.rb +1 -0
- data/spec/unit/{breadcrumbs_spec.rb → view_helpers/breadcrumbs_spec.rb} +16 -7
- data/spec/unit/view_helpers/display_name_spec.rb +41 -0
- data/spec/unit/view_helpers/form_helper_spec.rb +36 -2
- data/spec/unit/views/components/attributes_table_spec.rb +17 -9
- data/spec/unit/views/components/batch_action_popover_spec.rb +4 -4
- data/spec/unit/views/components/index_list_spec.rb +2 -2
- data/spec/unit/views/components/paginated_collection_spec.rb +42 -0
- data/spec/unit/views/components/panel_spec.rb +8 -0
- data/spec/unit/views/components/site_title_spec.rb +2 -2
- data/spec/unit/views/components/table_for_spec.rb +4 -4
- data/spec/unit/views/pages/form_spec.rb +35 -0
- data/spec/unit/views/pages/layout_spec.rb +1 -1
- data/spec/unit/views/tabbed_navigation_spec.rb +10 -10
- data/tasks/parallel_tests.rake +1 -1
- data/tasks/test.rake +4 -1
- metadata +117 -106
- data/app/assets/stylesheets/active_admin/pages/_dashboard.scss +0 -5
- data/lib/active_admin/comments/views/active_admin_comment.rb +0 -0
- data/lib/active_admin/dashboards.rb +0 -68
- data/lib/active_admin/dashboards/dashboard_controller.rb +0 -50
- data/lib/active_admin/dashboards/section.rb +0 -34
- data/lib/active_admin/locales/bg.yml +0 -77
- data/lib/generators/active_admin/install/templates/migrations/1_create_admin_notes.rb +0 -17
- data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +0 -26
- data/spec/unit/base_controller_spec.rb +0 -6
- data/spec/unit/dashboard_controller_spec.rb +0 -76
- data/spec/unit/dashboard_section_spec.rb +0 -56
- data/spec/unit/dashboards_spec.rb +0 -59
- data/spec/unit/display_name_spec.rb +0 -29
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Filters
|
|
3
|
+
module FormtasticAddons
|
|
4
|
+
|
|
5
|
+
#
|
|
6
|
+
# The below are Formtastic overrides to use `base` instead of `class` for MetaSearch.
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
# Returns the default label for a given attribute. Uses ActiveModel I18n if available.
|
|
10
|
+
def humanized_method_name
|
|
11
|
+
if object.base.respond_to?(:human_attribute_name)
|
|
12
|
+
object.base.human_attribute_name(method)
|
|
13
|
+
else
|
|
14
|
+
method.to_s.send(builder.label_str_method)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Returns the association reflection for the method if it exists
|
|
19
|
+
def reflection_for(method)
|
|
20
|
+
@object.base.reflect_on_association(method) if @object.base.respond_to?(:reflect_on_association)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Returns the column for an attribute on the object being searched if it exists.
|
|
24
|
+
def column_for(method)
|
|
25
|
+
@object.base.columns_hash[method.to_s] if @object.base.respond_to?(:columns_hash)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
#
|
|
29
|
+
# The below are custom methods that Formtastic does not provide.
|
|
30
|
+
#
|
|
31
|
+
|
|
32
|
+
def foreign_key?(method)
|
|
33
|
+
@object.base.reflections.select{ |_,r| r.macro == :belongs_to }.values
|
|
34
|
+
.map(&:foreign_key).include? method.to_s
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def polymorphic_foreign_type?(method)
|
|
38
|
+
type = Rails::VERSION::MAJOR == 3 && Rails::VERSION::MINOR == 0 ? proc{ |r| r.options[:foreign_type] } : :foreign_type
|
|
39
|
+
@object.base.reflections.values.select{ |r| r.macro == :belongs_to && r.options[:polymorphic] }
|
|
40
|
+
.map(&type).include? method.to_s
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -96,7 +96,15 @@ module ActiveAdmin
|
|
|
96
96
|
# Returns a default set of filters for the associations
|
|
97
97
|
def default_association_filters
|
|
98
98
|
if resource_class.respond_to?(:reflections)
|
|
99
|
-
|
|
99
|
+
block = if Rails::VERSION::MAJOR == 3 && Rails::VERSION::MINOR == 0
|
|
100
|
+
proc{ |_,r| [r.options[:foreign_type], r.primary_key_name] }
|
|
101
|
+
else
|
|
102
|
+
proc{ |_,r| [r.foreign_type, r.foreign_key] }
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
poly, not_poly = resource_class.reflections.partition{ |_,r| r.macro == :belongs_to && r.options[:polymorphic] }
|
|
106
|
+
filters = poly.map(&block).flatten + not_poly.map(&:first)
|
|
107
|
+
filters.collect{ |name| { :attribute => name.to_sym } }
|
|
100
108
|
else
|
|
101
109
|
[]
|
|
102
110
|
end
|
|
@@ -9,7 +9,7 @@ module ActiveAdmin
|
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
def inputs(*args, &block)
|
|
12
|
-
@
|
|
12
|
+
@use_form_buffer = block_given?
|
|
13
13
|
form_buffers.last << with_new_form_buffer{ super }
|
|
14
14
|
end
|
|
15
15
|
|
|
@@ -17,7 +17,7 @@ module ActiveAdmin
|
|
|
17
17
|
# to the form buffer. Else, return it directly.
|
|
18
18
|
def input(method, *args)
|
|
19
19
|
content = with_new_form_buffer{ super }
|
|
20
|
-
@
|
|
20
|
+
@use_form_buffer ? form_buffers.last << content : content
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def cancel_link(url = {:action => "index"}, html_options = {}, li_attrs = {})
|
|
@@ -42,7 +42,7 @@ module ActiveAdmin
|
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
def has_many(association, options = {}, &block)
|
|
45
|
-
options = { :for => association }.merge(options)
|
|
45
|
+
options = { :for => association, :new_record => true }.merge(options)
|
|
46
46
|
options[:class] ||= ""
|
|
47
47
|
options[:class] << "inputs has_many_fields"
|
|
48
48
|
|
|
@@ -57,9 +57,13 @@ module ActiveAdmin
|
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
if has_many_form.object.new_record?
|
|
60
|
-
contents += template.content_tag(:li) do
|
|
60
|
+
contents += template.content_tag(:li, :class => 'has_many_delete') do
|
|
61
61
|
template.link_to I18n.t('active_admin.has_many_delete'), "#", :onclick => "$(this).closest('.has_many_fields').remove(); return false;", :class => "button"
|
|
62
62
|
end
|
|
63
|
+
elsif options[:allow_destroy]
|
|
64
|
+
has_many_form.input :_destroy, :as => :boolean, :wrapper_html => {:class => "has_many_remove"},
|
|
65
|
+
:label => I18n.t('active_admin.has_many_remove')
|
|
66
|
+
|
|
63
67
|
end
|
|
64
68
|
|
|
65
69
|
contents
|
|
@@ -67,10 +71,17 @@ module ActiveAdmin
|
|
|
67
71
|
|
|
68
72
|
form_buffers.last << with_new_form_buffer do
|
|
69
73
|
template.content_tag :div, :class => "has_many #{association}" do
|
|
70
|
-
|
|
74
|
+
# Allow customization of the nested form heading
|
|
75
|
+
unless options.key?(:heading) && !options[:heading]
|
|
76
|
+
form_heading = options[:heading] ||
|
|
77
|
+
object.class.reflect_on_association(association).klass.model_name.human(:count => 1.1)
|
|
78
|
+
form_buffers.last << template.content_tag(:h3, form_heading)
|
|
79
|
+
end
|
|
80
|
+
|
|
71
81
|
inputs options, &form_block
|
|
72
82
|
|
|
73
|
-
|
|
83
|
+
js = options[:new_record] ? js_for_has_many(association, form_block, template) : ""
|
|
84
|
+
form_buffers.last << js.html_safe
|
|
74
85
|
end
|
|
75
86
|
end
|
|
76
87
|
end
|
|
@@ -119,7 +130,7 @@ module ActiveAdmin
|
|
|
119
130
|
"ActiveAdmin::Inputs::#{as.to_s.camelize}Input"
|
|
120
131
|
end
|
|
121
132
|
|
|
122
|
-
#
|
|
133
|
+
# Overrides Formtastic's version to include ActiveAdmin::Inputs::*
|
|
123
134
|
def input_class_with_const_defined(as)
|
|
124
135
|
input_class_name = custom_input_class_name(as)
|
|
125
136
|
|
|
@@ -130,33 +141,33 @@ module ActiveAdmin
|
|
|
130
141
|
elsif Formtastic::Inputs.const_defined?(input_class_name)
|
|
131
142
|
standard_input_class_name(as).constantize
|
|
132
143
|
else
|
|
133
|
-
raise Formtastic::UnknownInputError
|
|
144
|
+
raise Formtastic::UnknownInputError, "Unable to find input class #{input_class_name}"
|
|
134
145
|
end
|
|
135
146
|
end
|
|
136
147
|
|
|
137
148
|
# use auto-loading in development environment
|
|
138
149
|
def input_class_by_trying(as)
|
|
139
150
|
begin
|
|
151
|
+
custom_input_class_name(as).constantize
|
|
152
|
+
rescue NameError
|
|
140
153
|
begin
|
|
141
|
-
|
|
154
|
+
active_admin_input_class_name(as).constantize
|
|
142
155
|
rescue NameError
|
|
143
|
-
|
|
144
|
-
active_admin_input_class_name(as).constantize
|
|
145
|
-
rescue NameError
|
|
146
|
-
standard_input_class_name(as).constantize
|
|
147
|
-
end
|
|
156
|
+
standard_input_class_name(as).constantize
|
|
148
157
|
end
|
|
149
158
|
end
|
|
150
159
|
rescue NameError
|
|
151
|
-
raise Formtastic::UnknownInputError
|
|
160
|
+
raise Formtastic::UnknownInputError, "Unable to find input class for #{as}"
|
|
152
161
|
end
|
|
153
162
|
|
|
154
163
|
# This method calls the block it's passed (in our case, the `f.inputs` block)
|
|
155
|
-
# and wraps the resulting HTML in a fieldset. If your block
|
|
156
|
-
#
|
|
164
|
+
# and wraps the resulting HTML in a fieldset. If your block doesn't have a
|
|
165
|
+
# valid return value but it was otherwise built correctly, we instead use
|
|
157
166
|
# the most recent part of the Active Admin form buffer.
|
|
158
167
|
def field_set_and_list_wrapping(*args, &block)
|
|
159
|
-
block_given? ? super{
|
|
168
|
+
block_given? ? super{
|
|
169
|
+
(val = yield).is_a?(String) ? val : form_buffers.last
|
|
170
|
+
} : super
|
|
160
171
|
end
|
|
161
172
|
|
|
162
173
|
private
|
|
@@ -172,7 +183,7 @@ module ActiveAdmin
|
|
|
172
183
|
def js_for_has_many(association, form_block, template)
|
|
173
184
|
assoc_reflection = object.class.reflect_on_association(association)
|
|
174
185
|
assoc_name = assoc_reflection.klass.model_name
|
|
175
|
-
placeholder = "NEW_#{assoc_name.upcase.split(' ').join('_')}_RECORD"
|
|
186
|
+
placeholder = "NEW_#{assoc_name.to_s.upcase.split(' ').join('_')}_RECORD"
|
|
176
187
|
opts = {
|
|
177
188
|
:for => [association, assoc_reflection.klass.new],
|
|
178
189
|
:class => "inputs has_many_fields",
|
|
@@ -14,26 +14,24 @@ module ActiveAdmin
|
|
|
14
14
|
# to ensure that the display options are setup correctly
|
|
15
15
|
|
|
16
16
|
module OptionalDisplay
|
|
17
|
-
def display_on?(action, render_context =
|
|
18
|
-
return false if @options[:only]
|
|
17
|
+
def display_on?(action, render_context = self)
|
|
18
|
+
return false if @options[:only] && !@options[:only].include?(action.to_sym)
|
|
19
19
|
return false if @options[:except] && @options[:except].include?(action.to_sym)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
end
|
|
20
|
+
|
|
21
|
+
case condition = @options[:if]
|
|
22
|
+
when Symbol, String
|
|
23
|
+
render_context.send condition
|
|
24
|
+
when Proc
|
|
25
|
+
render_context.instance_exec &condition
|
|
26
|
+
else
|
|
27
|
+
true
|
|
29
28
|
end
|
|
30
|
-
true
|
|
31
29
|
end
|
|
32
30
|
|
|
33
31
|
private
|
|
34
32
|
|
|
35
33
|
def normalize_display_options!
|
|
36
|
-
@options[:only]
|
|
34
|
+
@options[:only] = Array(@options[:only]) if @options[:only]
|
|
37
35
|
@options[:except] = Array(@options[:except]) if @options[:except]
|
|
38
36
|
end
|
|
39
37
|
end
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
require 'active_support/concern'
|
|
2
|
-
|
|
3
1
|
module ActiveAdmin
|
|
4
2
|
|
|
5
3
|
# Adds a class method to a class to create settings with default values.
|
|
@@ -18,7 +16,10 @@ module ActiveAdmin
|
|
|
18
16
|
# conf.site_title #=> "Override Default"
|
|
19
17
|
#
|
|
20
18
|
module Settings
|
|
21
|
-
|
|
19
|
+
|
|
20
|
+
def self.included(base)
|
|
21
|
+
base.extend ClassMethods
|
|
22
|
+
end
|
|
22
23
|
|
|
23
24
|
def read_default_setting(name)
|
|
24
25
|
default_settings[name]
|
|
@@ -34,10 +35,9 @@ module ActiveAdmin
|
|
|
34
35
|
|
|
35
36
|
def setting(name, default)
|
|
36
37
|
default_settings[name] = default
|
|
37
|
-
|
|
38
|
+
attr_writer name
|
|
38
39
|
|
|
39
|
-
#
|
|
40
|
-
# if @name has not been set yet
|
|
40
|
+
# Creates a reader that will grab the default if no value has been set.
|
|
41
41
|
class_eval <<-EOC, __FILE__, __LINE__ + 1
|
|
42
42
|
def #{name}
|
|
43
43
|
if instance_variable_defined? :@#{name}
|
|
@@ -50,10 +50,10 @@ module ActiveAdmin
|
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
def deprecated_setting(name, default, message = nil)
|
|
53
|
-
message = message || "The #{name} setting is deprecated and will be removed."
|
|
54
53
|
setting(name, default)
|
|
55
54
|
|
|
56
|
-
|
|
55
|
+
message ||= "The #{name} setting is deprecated and will be removed."
|
|
56
|
+
ActiveAdmin::Deprecation.deprecate self, name, message
|
|
57
57
|
ActiveAdmin::Deprecation.deprecate self, :"#{name}=", message
|
|
58
58
|
end
|
|
59
59
|
|
|
@@ -62,5 +62,47 @@ module ActiveAdmin
|
|
|
62
62
|
end
|
|
63
63
|
|
|
64
64
|
end
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
# Allows you to define child classes that should receive the same
|
|
68
|
+
# settings, as well as the same default values.
|
|
69
|
+
#
|
|
70
|
+
# Example from the codebase:
|
|
71
|
+
#
|
|
72
|
+
# class Application
|
|
73
|
+
# include Settings
|
|
74
|
+
# include Settings::Inheritance
|
|
75
|
+
#
|
|
76
|
+
# settings_inherited_by :Namespace
|
|
77
|
+
#
|
|
78
|
+
# inheritable_setting :root_to, 'dashboard#index'
|
|
79
|
+
# end
|
|
80
|
+
#
|
|
81
|
+
module Inheritance
|
|
82
|
+
|
|
83
|
+
def self.included(base)
|
|
84
|
+
base.extend ClassMethods
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
module ClassMethods
|
|
88
|
+
|
|
89
|
+
def settings_inherited_by(heir)
|
|
90
|
+
(@setting_heirs ||= []) << heir
|
|
91
|
+
heir.send :include, ActiveAdmin::Settings
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def inheritable_setting(name, default)
|
|
95
|
+
setting name, default
|
|
96
|
+
@setting_heirs.each{ |c| c.setting name, default }
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def deprecated_inheritable_setting(name, default)
|
|
100
|
+
deprecated_setting name, default
|
|
101
|
+
@setting_heirs.each{ |c| c.deprecated_setting name, default }
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
65
107
|
end
|
|
66
108
|
end
|
|
@@ -2,12 +2,13 @@ module ActiveAdmin
|
|
|
2
2
|
module Inputs
|
|
3
3
|
module FilterBase
|
|
4
4
|
include ::Formtastic::Inputs::Base
|
|
5
|
+
include ::ActiveAdmin::Filters::FormtasticAddons
|
|
6
|
+
|
|
7
|
+
extend ::ActiveSupport::Autoload
|
|
8
|
+
autoload :SearchMethodSelect
|
|
5
9
|
|
|
6
10
|
def input_wrapping(&block)
|
|
7
|
-
template.content_tag
|
|
8
|
-
template.capture(&block),
|
|
9
|
-
wrapper_html_options
|
|
10
|
-
)
|
|
11
|
+
template.content_tag :div, template.capture(&block), wrapper_html_options
|
|
11
12
|
end
|
|
12
13
|
|
|
13
14
|
def required?
|
|
@@ -27,20 +28,6 @@ module ActiveAdmin
|
|
|
27
28
|
end
|
|
28
29
|
end
|
|
29
30
|
|
|
30
|
-
# Returns the default label for a given attribute
|
|
31
|
-
# Will use ActiveModel I18n if possible
|
|
32
|
-
def humanized_method_name
|
|
33
|
-
if object.base.respond_to?(:human_attribute_name)
|
|
34
|
-
object.base.human_attribute_name(method)
|
|
35
|
-
else
|
|
36
|
-
method.to_s.send(builder.label_str_method)
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# Returns the association reflection for the method if it exists
|
|
41
|
-
def reflection_for(method)
|
|
42
|
-
@object.base.reflect_on_association(method) if @object.base.respond_to?(:reflect_on_association)
|
|
43
|
-
end
|
|
44
31
|
end
|
|
45
32
|
end
|
|
46
33
|
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# This is a common set of Formtastic overrides needed to build a filter form
|
|
2
|
+
# that lets you select from a set of search methods for a given attribute.
|
|
3
|
+
#
|
|
4
|
+
# Your class must declare available filters for this module to work.
|
|
5
|
+
# Those filters must be recognizable by Metasearch. For example:
|
|
6
|
+
#
|
|
7
|
+
# class FilterNumericInput < ::Formtastic::Inputs::NumberInput
|
|
8
|
+
# include FilterBase
|
|
9
|
+
# include FilterBase::SearchMethodSelect
|
|
10
|
+
#
|
|
11
|
+
# filter :equals, :greater_than, :less_than
|
|
12
|
+
# end
|
|
13
|
+
#
|
|
14
|
+
module ActiveAdmin
|
|
15
|
+
module Inputs
|
|
16
|
+
module FilterBase
|
|
17
|
+
module SearchMethodSelect
|
|
18
|
+
|
|
19
|
+
def self.included(base)
|
|
20
|
+
base.extend ClassMethods
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
module ClassMethods
|
|
24
|
+
attr_reader :filters
|
|
25
|
+
|
|
26
|
+
def filter(*filters)
|
|
27
|
+
(@filters ||= []).push *filters
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def wrapper_html_options
|
|
32
|
+
opts = super
|
|
33
|
+
(opts[:class] ||= '') << ' select_and_search'
|
|
34
|
+
opts
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def to_html
|
|
38
|
+
input_wrapping do
|
|
39
|
+
label_html << # your label
|
|
40
|
+
select_html << # the dropdown that holds the available search methods
|
|
41
|
+
input_html # your input field
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def input_html
|
|
46
|
+
builder.text_field current_filter, input_html_options
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def select_html
|
|
50
|
+
template.select_tag '', template.options_for_select(filter_options, current_filter)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def filters
|
|
54
|
+
options[:filters] || self.class.filters
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def current_filter
|
|
58
|
+
@current_filter ||= begin
|
|
59
|
+
methods = filters.map{ |f| "#{method}_#{f}" }
|
|
60
|
+
methods.detect{ |m| @object.send m } || methods.first
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def filter_options
|
|
65
|
+
filters.collect do |filter|
|
|
66
|
+
[I18n.t("active_admin.filters.predicates.#{filter}"), "#{method}_#{filter}"]
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -4,35 +4,27 @@ module ActiveAdmin
|
|
|
4
4
|
include FilterBase
|
|
5
5
|
|
|
6
6
|
def to_html
|
|
7
|
-
input_wrapping do
|
|
7
|
+
input_wrapping do
|
|
8
8
|
[ label_html,
|
|
9
9
|
check_box_html
|
|
10
10
|
].join("\n").html_safe
|
|
11
11
|
end
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
def check_box_html
|
|
15
|
-
template.check_box_tag("#{object_name}[#{method}]", checked_value, checked?, input_html_options)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
14
|
def search_method
|
|
19
|
-
method.to_s.match(
|
|
15
|
+
method.to_s.match(search_conditions) ? method : "#{method}_eq"
|
|
20
16
|
end
|
|
21
17
|
|
|
22
18
|
def checked?
|
|
23
|
-
|
|
24
|
-
object && ActionView::Helpers::InstanceTag.check_box_checked?(object.send(search_method), checked_value)
|
|
25
|
-
else
|
|
26
|
-
object && boolean_checked?(object.send(search_method), checked_value)
|
|
27
|
-
end
|
|
19
|
+
object && boolean_checked?(object.send(search_method), checked_value)
|
|
28
20
|
end
|
|
29
21
|
|
|
30
22
|
def input_html_options
|
|
31
|
-
{ :name => "q[#{search_method}]" }
|
|
23
|
+
{ :name => "q[#{ search_method }]" }
|
|
32
24
|
end
|
|
33
25
|
|
|
34
|
-
def
|
|
35
|
-
/(is_true|is_false|is_present|is_blank|is_null|is_not_null)
|
|
26
|
+
def search_conditions
|
|
27
|
+
/(is_true|is_false|is_present|is_blank|is_null|is_not_null)\z/
|
|
36
28
|
end
|
|
37
29
|
|
|
38
30
|
end
|