activeadmin 0.4.4 → 0.5.0.pre
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activeadmin might be problematic. Click here for more details.
- data/.gitignore +3 -0
- data/.travis.yml +5 -0
- data/CHANGELOG.md +50 -0
- data/CONTRIBUTING.md +2 -4
- data/Gemfile +10 -4
- data/Guardfile +0 -1
- data/LICENSE +1 -1
- data/README.rdoc +19 -8
- data/Rakefile +10 -1
- data/activeadmin.gemspec +2 -1
- data/app/assets/javascripts/active_admin/application.js +3 -9
- data/app/assets/javascripts/active_admin/base.js +1 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.checkbox-toggler.js.coffee +64 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +107 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +100 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.table-checkbox-toggler.js.coffee +27 -0
- data/app/assets/javascripts/active_admin/lib/namespace.js.coffee +3 -0
- data/app/assets/javascripts/active_admin/pages/application.js.coffee +13 -0
- data/app/assets/javascripts/active_admin/pages/batch_actions.js.coffee +26 -0
- data/app/assets/stylesheets/active_admin/_base.css.scss +32 -26
- data/app/assets/stylesheets/active_admin/_forms.css.scss +12 -5
- data/app/assets/stylesheets/active_admin/_header.css.scss +1 -2
- data/app/assets/stylesheets/active_admin/_typography.css.scss +1 -1
- data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +11 -0
- data/app/assets/stylesheets/active_admin/components/_buttons.scss +1 -2
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +151 -0
- data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +3 -3
- data/app/assets/stylesheets/active_admin/components/_popovers.css.scss +123 -0
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +1 -1
- data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +20 -27
- data/app/assets/stylesheets/active_admin/components/_tables.css.scss +1 -0
- data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +38 -36
- data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +5 -5
- data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +7 -3
- data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +19 -17
- data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +2 -2
- data/app/assets/stylesheets/active_admin/print.css.scss +290 -0
- data/app/views/active_admin/dashboard/index.html.arb +1 -1
- data/app/views/active_admin/devise/passwords/edit.html.erb +17 -14
- data/app/views/active_admin/devise/passwords/new.html.erb +4 -4
- data/app/views/active_admin/devise/sessions/new.html.erb +6 -6
- data/app/views/active_admin/devise/shared/_links.erb +6 -6
- data/app/views/active_admin/page/index.html.arb +1 -1
- data/app/views/active_admin/resource/edit.html.arb +1 -1
- data/app/views/active_admin/resource/index.csv.erb +1 -1
- data/app/views/active_admin/resource/index.html.arb +1 -1
- data/app/views/active_admin/resource/new.html.arb +1 -1
- data/app/views/active_admin/resource/show.html.arb +1 -1
- data/app/views/layouts/active_admin.html.arb +1 -1
- data/app/views/layouts/active_admin_logged_out.html.erb +2 -2
- data/cucumber.yml +1 -1
- data/docs/0-installation.md +10 -1
- data/docs/{9-custom-pages.md → 10-custom-pages.md} +0 -0
- data/docs/2-resource-customization.md +19 -1
- data/docs/3-index-pages.md +31 -0
- data/docs/4-csv-format.md +9 -0
- data/docs/6-show-screens.md +1 -1
- data/docs/9-batch-actions.md +161 -0
- data/features/dashboard.feature +31 -8
- data/features/development_reloading.feature +1 -1
- data/features/edit_page.feature +3 -3
- data/features/i18n.feature +35 -0
- data/features/index/batch_actions.feature +98 -0
- data/features/index/filters.feature +26 -0
- data/features/index/format_as_csv.feature +35 -0
- data/features/index/index_as_table.feature +30 -2
- data/features/index/index_blank_slate.feature +8 -3
- data/features/index/index_scopes.feature +130 -24
- data/features/index/page_title.feature +12 -0
- data/features/new_page.feature +3 -3
- data/features/registering_pages.feature +61 -0
- data/features/root_to.feature +17 -0
- data/features/show/default_content.feature +1 -1
- data/features/show/page_title.feature +14 -0
- data/features/sidebar_sections.feature +26 -0
- data/features/site_title.feature +1 -1
- data/features/specifying_actions.feature +7 -6
- data/features/step_definitions/action_link_steps.rb +1 -1
- data/features/step_definitions/additional_web_steps.rb +7 -1
- data/features/step_definitions/batch_action_steps.rb +94 -0
- data/features/step_definitions/configuration_steps.rb +30 -8
- data/features/step_definitions/factory_steps.rb +12 -0
- data/features/step_definitions/format_steps.rb +6 -2
- data/features/step_definitions/i18n_steps.rb +3 -0
- data/features/step_definitions/table_steps.rb +114 -0
- data/features/step_definitions/user_steps.rb +30 -4
- data/features/support/env.rb +54 -15
- data/features/support/paths.rb +2 -0
- data/features/users/logging_in.feature +1 -1
- data/features/users/logging_out.feature +2 -1
- data/features/users/resetting_password.feature +34 -0
- data/lib/active_admin.rb +46 -7
- data/lib/active_admin/application.rb +30 -15
- data/lib/active_admin/base_controller/menu.rb +3 -3
- data/lib/active_admin/batch_actions.rb +17 -0
- data/lib/active_admin/batch_actions/controller.rb +25 -0
- data/lib/active_admin/batch_actions/resource_extension.rb +126 -0
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +35 -0
- data/lib/active_admin/batch_actions/views/batch_action_popover.rb +28 -0
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +63 -0
- data/lib/active_admin/batch_actions/views/selection_cells.rb +37 -0
- data/lib/active_admin/comments.rb +5 -2
- data/lib/active_admin/comments/comment.rb +4 -3
- data/lib/active_admin/comments/views/active_admin_comments.rb +5 -5
- data/lib/active_admin/component.rb +1 -18
- data/lib/active_admin/csv_builder.rb +8 -3
- data/lib/active_admin/dashboards.rb +21 -4
- data/lib/active_admin/dashboards/dashboard_controller.rb +1 -5
- data/lib/active_admin/dependency_checker.rb +1 -1
- data/lib/active_admin/dsl.rb +61 -4
- data/lib/active_admin/engine.rb +1 -1
- data/lib/active_admin/filters.rb +8 -0
- data/lib/active_admin/filters/dsl.rb +12 -0
- data/lib/active_admin/filters/forms.rb +93 -0
- data/lib/active_admin/filters/resource_extension.rb +92 -0
- data/lib/active_admin/form_builder.rb +88 -33
- data/lib/active_admin/helpers/collection.rb +23 -0
- data/lib/active_admin/helpers/optional_display.rb +1 -1
- data/lib/active_admin/inputs/filter_select_input.rb +1 -1
- data/lib/active_admin/locales/bg.yml +37 -1
- data/lib/active_admin/locales/ca.yml +36 -0
- data/lib/active_admin/locales/cs.yml +36 -0
- data/lib/active_admin/locales/da.yml +36 -0
- data/lib/active_admin/locales/de.yml +42 -0
- data/lib/active_admin/locales/en.yml +27 -2
- data/lib/active_admin/locales/es.yml +45 -4
- data/lib/active_admin/locales/fr.yml +22 -0
- data/lib/active_admin/locales/{he_il.yml → he.yml} +37 -2
- data/lib/active_admin/locales/hr.yml +49 -5
- data/lib/active_admin/locales/hu.yml +21 -0
- data/lib/active_admin/locales/it.yml +36 -1
- data/lib/active_admin/locales/ja.yml +36 -0
- data/lib/active_admin/locales/ko.yml +36 -1
- data/lib/active_admin/locales/lv.yml +28 -2
- data/lib/active_admin/locales/nl.yml +42 -1
- data/lib/active_admin/locales/no-NB.yml +15 -0
- data/lib/active_admin/locales/pl.yml +45 -1
- data/lib/active_admin/locales/pt-BR.yml +36 -1
- data/lib/active_admin/locales/ro.yml +67 -0
- data/lib/active_admin/locales/ru.yml +43 -3
- data/lib/active_admin/locales/sv-SE.yml +41 -1
- data/lib/active_admin/locales/tr.yml +80 -0
- data/lib/active_admin/locales/vi.yml +80 -0
- data/lib/active_admin/locales/{zh_cn.yml → zh-CN.yml} +42 -2
- data/lib/active_admin/locales/zh-TW.yml +36 -1
- data/lib/active_admin/menu.rb +55 -30
- data/lib/active_admin/menu_builder.rb +65 -0
- data/lib/active_admin/menu_item.rb +55 -14
- data/lib/active_admin/namespace.rb +25 -55
- data/lib/active_admin/page.rb +15 -10
- data/lib/active_admin/resource.rb +9 -0
- data/lib/active_admin/resource/action_items.rb +4 -4
- data/lib/active_admin/resource/controllers.rb +1 -1
- data/lib/active_admin/resource/menu.rb +19 -21
- data/lib/active_admin/resource/naming.rb +55 -45
- data/lib/active_admin/resource/sidebars.rb +0 -13
- data/lib/active_admin/resource_collection.rb +10 -10
- data/lib/active_admin/resource_controller.rb +5 -5
- data/lib/active_admin/resource_controller/actions.rb +2 -0
- data/lib/active_admin/resource_controller/collection.rb +13 -4
- data/lib/active_admin/resource_dsl.rb +12 -6
- data/lib/active_admin/router.rb +27 -8
- data/lib/active_admin/scope.rb +1 -0
- data/lib/active_admin/sidebar_section.rb +2 -6
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_factory.rb +18 -13
- data/lib/active_admin/view_helpers.rb +0 -2
- data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -1
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +24 -25
- data/lib/active_admin/view_helpers/display_helper.rb +1 -1
- data/lib/active_admin/view_helpers/fields_for.rb +44 -0
- data/lib/active_admin/view_helpers/form_helper.rb +6 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -1
- data/lib/active_admin/views/components/action_list_popover.rb +29 -0
- data/lib/active_admin/views/components/attributes_table.rb +6 -2
- data/lib/active_admin/views/components/dropdown_menu.rb +73 -0
- data/lib/active_admin/views/components/paginated_collection.rb +13 -14
- data/lib/active_admin/views/components/popover.rb +27 -0
- data/lib/active_admin/views/components/scopes.rb +8 -13
- data/lib/active_admin/views/components/sidebar_section.rb +1 -1
- data/lib/active_admin/views/components/site_title.rb +55 -0
- data/lib/active_admin/views/components/status_tag.rb +4 -4
- data/lib/active_admin/views/components/table_for.rb +18 -18
- data/lib/active_admin/views/dashboard_section_renderer.rb +1 -1
- data/lib/active_admin/views/footer.rb +18 -0
- data/lib/active_admin/views/header.rb +31 -0
- data/lib/active_admin/views/index_as_block.rb +3 -0
- data/lib/active_admin/views/index_as_blog.rb +4 -0
- data/lib/active_admin/views/index_as_grid.rb +2 -0
- data/lib/active_admin/views/index_as_table.rb +19 -6
- data/lib/active_admin/views/pages/base.rb +14 -48
- data/lib/active_admin/views/pages/form.rb +3 -3
- data/lib/active_admin/views/pages/index.rb +56 -24
- data/lib/active_admin/views/pages/layout.rb +2 -2
- data/lib/active_admin/views/pages/page.rb +10 -4
- data/lib/active_admin/views/pages/show.rb +11 -8
- data/lib/active_admin/views/tabbed_navigation.rb +3 -3
- data/lib/active_admin/views/title_bar.rb +50 -0
- data/lib/active_admin/views/utility_nav.rb +41 -0
- data/lib/generators/active_admin/assets/assets_generator.rb +1 -1
- data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +1 -0
- data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +26 -3
- data/lib/generators/active_admin/devise/devise_generator.rb +2 -2
- data/lib/generators/active_admin/install/install_generator.rb +10 -10
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +21 -1
- data/lib/generators/active_admin/install/templates/admin_user.rb.erb +20 -0
- data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
- data/lib/generators/active_admin/resource/templates/admin.rb +1 -1
- data/spec/integration/memory_spec.rb +1 -11
- data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
- data/spec/javascripts/coffeescripts/jquery.aa.popover-spec.js.coffee +82 -0
- data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
- data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +60 -0
- data/spec/javascripts/compiled/jquery.aa.popover-spec.js +106 -0
- data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +37 -0
- data/spec/javascripts/fixtures/checkboxes.html +9 -0
- data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
- data/spec/javascripts/helpers/SpecHelper.js +3 -0
- data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +108 -0
- data/spec/javascripts/helpers/vendor/jasmine-jquery.js +288 -0
- data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +2915 -0
- data/spec/javascripts/support/jasmine.yml +74 -0
- data/spec/javascripts/support/jasmine_config.rb +23 -0
- data/spec/javascripts/support/jasmine_runner.rb +32 -0
- data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +34 -0
- data/spec/javascripts/support/jquery.min.js +4 -0
- data/spec/spec_helper.rb +13 -13
- data/spec/spec_helper_without_rails.rb +2 -3
- data/spec/support/detect_rails_version.rb +16 -10
- data/spec/support/rails_template.rb +13 -1
- data/spec/support/templates/admin/stores.rb +1 -0
- data/spec/support/templates/en.yml +6 -0
- data/spec/unit/action_builder_spec.rb +38 -0
- data/spec/unit/application_spec.rb +12 -16
- data/spec/unit/base_controller_shared_examples.rb +3 -6
- data/spec/unit/batch_actions/resource_spec.rb +91 -0
- data/spec/unit/batch_actions/settings_spec.rb +61 -0
- data/spec/unit/breadcrumbs_spec.rb +33 -0
- data/spec/unit/comments_spec.rb +6 -0
- data/spec/unit/config_shared_examples.rb +17 -64
- data/spec/unit/csv_builder_spec.rb +12 -2
- data/spec/unit/dashboard_controller_spec.rb +11 -5
- data/spec/unit/dsl_include_spec.rb +20 -0
- data/spec/unit/{filter_form_builder_spec.rb → filters/filter_form_builder_spec.rb} +10 -7
- data/spec/unit/filters/resource_spec.rb +60 -0
- data/spec/unit/form_builder_spec.rb +180 -28
- data/spec/unit/helpers/collection_spec.rb +65 -0
- data/spec/unit/menu_item_spec.rb +48 -53
- data/spec/unit/menu_spec.rb +46 -32
- data/spec/unit/namespace/register_page_spec.rb +0 -6
- data/spec/unit/namespace/register_resource_spec.rb +1 -8
- data/spec/unit/namespace_spec.rb +8 -2
- data/spec/unit/page_spec.rb +20 -8
- data/spec/unit/resource/naming_spec.rb +27 -26
- data/spec/unit/resource/sidebars_spec.rb +0 -7
- data/spec/unit/resource_collection_spec.rb +11 -11
- data/spec/unit/resource_controller/collection_spec.rb +23 -1
- data/spec/unit/resource_controller/sidebars_spec.rb +46 -0
- data/spec/unit/resource_controller_spec.rb +43 -0
- data/spec/unit/resource_registration_spec.rb +2 -13
- data/spec/unit/resource_spec.rb +0 -42
- data/spec/unit/routing_spec.rb +60 -14
- data/spec/unit/scope_spec.rb +7 -0
- data/spec/unit/view_factory_spec.rb +9 -6
- data/spec/unit/view_helpers/fields_for_spec.rb +41 -0
- data/spec/unit/view_helpers/form_helper_spec.rb +18 -0
- data/spec/unit/views/components/action_list_popover_spec.rb +30 -0
- data/spec/unit/views/components/attributes_table_spec.rb +32 -20
- data/spec/unit/views/components/batch_action_popover_spec.rb +33 -0
- data/spec/unit/views/components/blank_slate_spec.rb +5 -3
- data/spec/unit/views/components/columns_spec.rb +32 -22
- data/spec/unit/views/components/paginated_collection_spec.rb +54 -12
- data/spec/unit/views/components/panel_spec.rb +11 -6
- data/spec/unit/views/components/popover_spec.rb +33 -0
- data/spec/unit/views/components/sidebar_section_spec.rb +6 -6
- data/spec/unit/views/components/site_title_spec.rb +78 -0
- data/spec/unit/views/components/status_tag_spec.rb +17 -10
- data/spec/unit/views/components/table_for_spec.rb +37 -17
- data/spec/unit/views/pages/layout_spec.rb +51 -10
- data/spec/unit/views/tabbed_navigation_spec.rb +44 -23
- data/tasks/js.rake +32 -0
- data/tasks/test.rake +1 -1
- metadata +233 -200
- data/lib/active_admin/arbre.rb +0 -22
- data/lib/active_admin/arbre/builder.rb +0 -125
- data/lib/active_admin/arbre/context.rb +0 -45
- data/lib/active_admin/arbre/html/attributes.rb +0 -20
- data/lib/active_admin/arbre/html/class_list.rb +0 -24
- data/lib/active_admin/arbre/html/collection.rb +0 -27
- data/lib/active_admin/arbre/html/document.rb +0 -42
- data/lib/active_admin/arbre/html/element.rb +0 -161
- data/lib/active_admin/arbre/html/html5_elements.rb +0 -47
- data/lib/active_admin/arbre/html/tag.rb +0 -145
- data/lib/active_admin/arbre/html/text_node.rb +0 -35
- data/lib/active_admin/filter_form_builder.rb +0 -53
- data/lib/active_admin/renderer.rb +0 -87
- data/lib/active_admin/resource_controller/filters.rb +0 -58
- data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
- data/lib/active_admin/view_helpers/filter_form_helper.rb +0 -36
- data/lib/active_admin/view_helpers/renderer_helper.rb +0 -29
- data/lib/active_admin/views/header_renderer.rb +0 -82
- data/lib/generators/active_admin/assets/templates/dashboards.rb +0 -36
- data/lib/generators/active_admin/install/templates/dashboards.rb +0 -44
- data/spec/unit/arbre/context_spec.rb +0 -35
- data/spec/unit/arbre/html/element_finder_methods_spec.rb +0 -110
- data/spec/unit/arbre/html/element_spec.rb +0 -236
- data/spec/unit/arbre/html/tag_attributes_spec.rb +0 -61
- data/spec/unit/arbre/html/tag_spec.rb +0 -63
- data/spec/unit/arbre/html_spec.rb +0 -228
- data/spec/unit/renderer_spec.rb +0 -126
data/lib/active_admin/page.rb
CHANGED
@@ -35,24 +35,29 @@ module ActiveAdmin
|
|
35
35
|
include Resource::Menu
|
36
36
|
include Resource::Naming
|
37
37
|
|
38
|
-
#
|
39
|
-
def
|
38
|
+
# label is singular
|
39
|
+
def plural_resource_label
|
40
40
|
name
|
41
41
|
end
|
42
42
|
|
43
|
-
def
|
44
|
-
name
|
43
|
+
def resource_name
|
44
|
+
@resource_name ||= Resource::Name.new(nil, name)
|
45
|
+
end
|
46
|
+
|
47
|
+
def underscored_resource_name
|
48
|
+
resource_name.parameterize.underscore
|
45
49
|
end
|
46
50
|
|
51
|
+
def camelized_resource_name
|
52
|
+
underscored_resource_name.camelize
|
53
|
+
end
|
47
54
|
|
48
|
-
|
49
|
-
|
50
|
-
name
|
55
|
+
def default_menu_options
|
56
|
+
super.merge(:id => resource_name)
|
51
57
|
end
|
52
58
|
|
53
|
-
|
54
|
-
|
55
|
-
name
|
59
|
+
def controller_name
|
60
|
+
[namespace.module_name, camelized_resource_name + "Controller"].compact.join('::')
|
56
61
|
end
|
57
62
|
|
58
63
|
def belongs_to?
|
@@ -47,6 +47,9 @@ module ActiveAdmin
|
|
47
47
|
# Set the configuration for the CSV
|
48
48
|
attr_writer :csv_builder
|
49
49
|
|
50
|
+
# Store a reference to the DSL so that we can dereference it during garbage collection.
|
51
|
+
attr_accessor :dsl
|
52
|
+
|
50
53
|
module Base
|
51
54
|
def initialize(namespace, resource_class, options = {})
|
52
55
|
@namespace = namespace
|
@@ -109,6 +112,11 @@ module ActiveAdmin
|
|
109
112
|
@collection_actions = []
|
110
113
|
end
|
111
114
|
|
115
|
+
# Return only defined resource actions
|
116
|
+
def defined_actions
|
117
|
+
controller.instance_methods.map { |m| m.to_sym } & ResourceController::ACTIVE_ADMIN_ACTIONS
|
118
|
+
end
|
119
|
+
|
112
120
|
# Are admin notes turned on for this resource
|
113
121
|
def admin_notes?
|
114
122
|
admin_notes.nil? ? ActiveAdmin.admin_notes : admin_notes
|
@@ -155,5 +163,6 @@ module ActiveAdmin
|
|
155
163
|
def default_csv_builder
|
156
164
|
@default_csv_builder ||= CSVBuilder.default_for_resource(resource_class)
|
157
165
|
end
|
166
|
+
|
158
167
|
end # class Resource
|
159
168
|
end # module ActiveAdmin
|
@@ -54,23 +54,23 @@ module ActiveAdmin
|
|
54
54
|
# New Link on all actions except :new and :show
|
55
55
|
add_action_item :except => [:new, :show] do
|
56
56
|
if controller.action_methods.include?('new')
|
57
|
-
link_to(I18n.t('active_admin.new_model', :model => active_admin_config.
|
57
|
+
link_to(I18n.t('active_admin.new_model', :model => active_admin_config.resource_label), new_resource_path)
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
61
|
# Edit link on show
|
62
62
|
add_action_item :only => :show do
|
63
63
|
if controller.action_methods.include?('edit')
|
64
|
-
link_to(I18n.t('active_admin.edit_model', :model => active_admin_config.
|
64
|
+
link_to(I18n.t('active_admin.edit_model', :model => active_admin_config.resource_label), edit_resource_path(resource))
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
68
|
# Destroy link on show
|
69
69
|
add_action_item :only => :show do
|
70
70
|
if controller.action_methods.include?("destroy")
|
71
|
-
link_to(I18n.t('active_admin.delete_model', :model => active_admin_config.
|
71
|
+
link_to(I18n.t('active_admin.delete_model', :model => active_admin_config.resource_label),
|
72
72
|
resource_path(resource),
|
73
|
-
:method => :delete, :confirm => I18n.t('active_admin.delete_confirmation'))
|
73
|
+
:method => :delete, :data => {:confirm => I18n.t('active_admin.delete_confirmation')})
|
74
74
|
end
|
75
75
|
end
|
76
76
|
end
|
@@ -5,7 +5,7 @@ module ActiveAdmin
|
|
5
5
|
# Returns a properly formatted controller name for this
|
6
6
|
# config within its namespace
|
7
7
|
def controller_name
|
8
|
-
[namespace.module_name,
|
8
|
+
[namespace.module_name, resource_name.plural.camelize + "Controller"].compact.join('::')
|
9
9
|
end
|
10
10
|
|
11
11
|
# Returns the controller for this config
|
@@ -5,38 +5,36 @@ module ActiveAdmin
|
|
5
5
|
# Set the menu options. To not add this resource to the menu, just
|
6
6
|
# call #menu(false)
|
7
7
|
def menu(options = {})
|
8
|
-
|
9
|
-
|
8
|
+
if options == false
|
9
|
+
@display_menu = false
|
10
|
+
else
|
11
|
+
options = default_menu_options.merge(options)
|
12
|
+
@parent_menu_item = options.delete(:parent)
|
13
|
+
@menu_item = MenuItem.new(default_menu_options.merge(options))
|
14
|
+
end
|
10
15
|
end
|
11
16
|
|
12
|
-
|
13
|
-
|
14
|
-
@menu_options ||= {}
|
17
|
+
def menu_item
|
18
|
+
@menu_item ||= MenuItem.new(default_menu_options)
|
15
19
|
end
|
16
20
|
|
17
|
-
# Returns the name to put this resource under in the menu
|
18
21
|
def parent_menu_item_name
|
19
|
-
|
22
|
+
return nil unless @parent_menu_item
|
23
|
+
ActiveAdmin::Resource::Name.new(nil, @parent_menu_item)
|
20
24
|
end
|
21
25
|
|
22
|
-
#
|
23
|
-
def
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
menu_options[:priority] || 10
|
30
|
-
end
|
31
|
-
|
32
|
-
# Returns a proc for deciding whether to display the menu item or not in the view
|
33
|
-
def menu_item_display_if
|
34
|
-
menu_options[:if] || proc { true }
|
26
|
+
# The default menu options to pass through to MenuItem.new
|
27
|
+
def default_menu_options
|
28
|
+
{
|
29
|
+
:id => resource_name.plural,
|
30
|
+
:label => proc{ plural_resource_label },
|
31
|
+
:url => route_collection_path
|
32
|
+
}
|
35
33
|
end
|
36
34
|
|
37
35
|
# Should this resource be added to the menu system?
|
38
36
|
def include_in_menu?
|
39
|
-
|
37
|
+
@display_menu != false
|
40
38
|
end
|
41
39
|
|
42
40
|
end
|
@@ -1,72 +1,82 @@
|
|
1
1
|
module ActiveAdmin
|
2
2
|
class Resource
|
3
|
+
|
3
4
|
module Naming
|
4
|
-
# Returns the user facing name. Example: "Bank Account"
|
5
|
-
def resource_name
|
6
|
-
@resource_name ||= @options[:as]
|
7
|
-
@resource_name ||= singular_human_name
|
8
|
-
@resource_name ||= safe_resource_name
|
9
|
-
end
|
10
5
|
|
11
|
-
# Returns
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
@
|
6
|
+
# Returns a name used to uniquely identify this resource
|
7
|
+
# this should be an instance of ActiveAdmin:Resource::Name, which responds to
|
8
|
+
# #singular, #plural, #route_key, #human etc.
|
9
|
+
def resource_name
|
10
|
+
custom_name = @options[:as] && @options[:as].gsub(/\s/,'')
|
11
|
+
@resource_name ||= if custom_name || !resource_class.respond_to?(:model_name)
|
12
|
+
Resource::Name.new(resource_class, custom_name)
|
13
|
+
else
|
14
|
+
Resource::Name.new(resource_class)
|
15
|
+
end
|
16
16
|
end
|
17
17
|
|
18
|
-
#
|
19
|
-
def
|
20
|
-
|
18
|
+
# Returns the name to call this resource such as "Bank Account"
|
19
|
+
def resource_label
|
20
|
+
if @options[:as]
|
21
|
+
@options[:as]
|
22
|
+
else
|
23
|
+
resource_name.human(:default => resource_name.gsub('::', ' ').titleize)
|
24
|
+
end
|
21
25
|
end
|
22
26
|
|
23
|
-
|
24
|
-
|
25
|
-
@
|
27
|
+
# Returns the plural version of this resource such as "Bank Accounts"
|
28
|
+
def plural_resource_label
|
29
|
+
if @options[:as]
|
30
|
+
@options[:as].pluralize
|
31
|
+
else
|
32
|
+
resource_name.human(:count => 1.1, :default => resource_label.pluralize.titleize)
|
33
|
+
end
|
26
34
|
end
|
35
|
+
end
|
27
36
|
|
28
|
-
|
29
|
-
|
30
|
-
|
37
|
+
# A subclass of ActiveModel::Name which supports the different APIs presented
|
38
|
+
# in Rails < 3.1 and > 3.1.
|
39
|
+
class Name < ActiveModel::Name
|
31
40
|
|
32
|
-
|
33
|
-
|
34
|
-
|
41
|
+
def initialize(klass, name = nil)
|
42
|
+
if ActiveModel::Name.instance_method(:initialize).arity == 1
|
43
|
+
super(proxy_for_initializer(klass, name))
|
44
|
+
else
|
45
|
+
super(klass, nil, name)
|
46
|
+
end
|
35
47
|
end
|
36
48
|
|
37
|
-
def
|
38
|
-
|
39
|
-
|
49
|
+
def proxy_for_initializer(klass, name)
|
50
|
+
return klass unless name
|
51
|
+
return StringClassProxy.new(klass, name) if klass
|
40
52
|
|
41
|
-
|
42
|
-
def underscored_resource_name
|
43
|
-
camelized_resource_name.underscore
|
53
|
+
StringProxy.new(name)
|
44
54
|
end
|
45
55
|
|
46
|
-
|
47
|
-
|
48
|
-
plural_camelized_resource_name.underscore
|
56
|
+
def route_key
|
57
|
+
plural
|
49
58
|
end
|
50
59
|
|
60
|
+
class StringProxy
|
61
|
+
def initialize(name)
|
62
|
+
@name = name
|
63
|
+
end
|
51
64
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
def singular_human_name
|
56
|
-
return nil unless resource_class.respond_to?(:model_name)
|
57
|
-
resource_class.model_name.human.titleize
|
65
|
+
def name
|
66
|
+
@name
|
67
|
+
end
|
58
68
|
end
|
59
69
|
|
60
|
-
|
61
|
-
|
62
|
-
return nil unless resource_class.respond_to?(:model_name)
|
70
|
+
class StringClassProxy < StringProxy
|
71
|
+
delegate :lookup_ancestors, :i18n_scope, :to => :"@klass"
|
63
72
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
nil
|
73
|
+
def initialize(klass, name)
|
74
|
+
@klass = klass || name
|
75
|
+
super(name)
|
68
76
|
end
|
69
77
|
end
|
78
|
+
|
70
79
|
end
|
80
|
+
|
71
81
|
end
|
72
82
|
end
|
@@ -5,11 +5,6 @@ module ActiveAdmin
|
|
5
5
|
class Resource
|
6
6
|
module Sidebars
|
7
7
|
|
8
|
-
def initialize(*args)
|
9
|
-
super
|
10
|
-
add_default_sidebar_sections
|
11
|
-
end
|
12
|
-
|
13
8
|
def sidebar_sections
|
14
9
|
@sidebar_sections ||= []
|
15
10
|
end
|
@@ -26,14 +21,6 @@ module ActiveAdmin
|
|
26
21
|
!!@sidebar_sections && @sidebar_sections.any?
|
27
22
|
end
|
28
23
|
|
29
|
-
private
|
30
|
-
|
31
|
-
def add_default_sidebar_sections
|
32
|
-
self.sidebar_sections << ActiveAdmin::SidebarSection.new(:filters, :only => :index) do
|
33
|
-
active_admin_filters_form_for assigns["search"], filters_config
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
24
|
end
|
38
25
|
end
|
39
26
|
|
@@ -5,7 +5,7 @@ module ActiveAdmin
|
|
5
5
|
# Holds on to a collection of Resources. Is an Enumerable object
|
6
6
|
# so it has some Array like qualities.
|
7
7
|
#
|
8
|
-
# Adding a resource assumes that the object responds to #
|
8
|
+
# Adding a resource assumes that the object responds to #resource_name
|
9
9
|
class ResourceCollection
|
10
10
|
include Enumerable
|
11
11
|
|
@@ -13,19 +13,19 @@ module ActiveAdmin
|
|
13
13
|
@resource_hash = {}
|
14
14
|
end
|
15
15
|
|
16
|
-
# Add a new resource to the collection. If the
|
16
|
+
# Add a new resource to the collection. If the resource_name already
|
17
17
|
# exists, the exiting resource is returned.
|
18
18
|
#
|
19
19
|
# @param [Resource, Page] resource The resource to add to the collection
|
20
20
|
#
|
21
21
|
# @returns [Resource, Page] Either the existing resource or the new one
|
22
22
|
def add(resource)
|
23
|
-
if has_key?(resource.
|
24
|
-
existing_resource = find_by_key(resource.
|
23
|
+
if has_key?(resource.resource_name)
|
24
|
+
existing_resource = find_by_key(resource.resource_name)
|
25
25
|
ensure_resource_classes_match!(existing_resource, resource)
|
26
26
|
existing_resource
|
27
27
|
else
|
28
|
-
@resource_hash[resource.
|
28
|
+
@resource_hash[resource.resource_name] = resource
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -45,13 +45,13 @@ module ActiveAdmin
|
|
45
45
|
end
|
46
46
|
|
47
47
|
# @returns [Boolean] If the key has been registered in the collection
|
48
|
-
def has_key?(
|
49
|
-
@resource_hash.has_key?(
|
48
|
+
def has_key?(resource_name)
|
49
|
+
@resource_hash.has_key?(resource_name)
|
50
50
|
end
|
51
51
|
|
52
52
|
# Finds a resource by a given key
|
53
|
-
def find_by_key(
|
54
|
-
@resource_hash[
|
53
|
+
def find_by_key(resource_name)
|
54
|
+
@resource_hash[resource_name]
|
55
55
|
end
|
56
56
|
|
57
57
|
# Finds a resource based on it's class. Looks up the class Heirarchy if its
|
@@ -80,7 +80,7 @@ module ActiveAdmin
|
|
80
80
|
|
81
81
|
if existing_resource.resource_class != resource.resource_class
|
82
82
|
raise ActiveAdmin::ResourceMismatchError,
|
83
|
-
"Tried to register #{resource.resource_class} as #{resource.
|
83
|
+
"Tried to register #{resource.resource_class} as #{resource.resource_name} but already registered to #{existing_resource.resource_class}"
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
@@ -3,8 +3,8 @@ require 'active_admin/resource_controller/actions'
|
|
3
3
|
require 'active_admin/resource_controller/action_builder'
|
4
4
|
require 'active_admin/resource_controller/callbacks'
|
5
5
|
require 'active_admin/resource_controller/collection'
|
6
|
-
require 'active_admin/resource_controller/filters'
|
7
6
|
require 'active_admin/resource_controller/scoping'
|
7
|
+
require 'active_admin/resource_controller/sidebars'
|
8
8
|
require 'active_admin/resource_controller/resource_class_methods'
|
9
9
|
|
10
10
|
module ActiveAdmin
|
@@ -22,17 +22,17 @@ module ActiveAdmin
|
|
22
22
|
include ActionBuilder
|
23
23
|
include Callbacks
|
24
24
|
include Collection
|
25
|
-
include Filters
|
26
25
|
include Scoping
|
26
|
+
include Sidebars
|
27
27
|
extend ResourceClassMethods
|
28
28
|
|
29
29
|
class << self
|
30
30
|
def active_admin_config=(config)
|
31
31
|
@active_admin_config = config
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
unless config.nil?
|
34
|
+
defaults :resource_class => config.resource_class, :route_prefix => config.route_prefix, :instance_name => config.resource_name.singular
|
35
|
+
end
|
36
36
|
end
|
37
37
|
|
38
38
|
# Inherited Resources uses the inherited(base) hook method to
|
@@ -60,6 +60,7 @@ module ActiveAdmin
|
|
60
60
|
end
|
61
61
|
alias :update! :update
|
62
62
|
|
63
|
+
|
63
64
|
# Make aliases protected
|
64
65
|
protected :index!, :show!, :new!, :create!, :edit!, :update!
|
65
66
|
|
@@ -75,5 +76,6 @@ module ActiveAdmin
|
|
75
76
|
def csv_filename
|
76
77
|
"#{resource_collection_name.to_s.gsub('_', '-')}-#{Time.now.strftime("%Y-%m-%d")}.csv"
|
77
78
|
end
|
79
|
+
|
78
80
|
end
|
79
81
|
end
|
@@ -49,7 +49,7 @@ module ActiveAdmin
|
|
49
49
|
table_column = (column =~ /\./) ? column :
|
50
50
|
"#{table}.#{active_admin_config.resource_quoted_column_name(column)}"
|
51
51
|
|
52
|
-
chain.
|
52
|
+
chain.reorder("#{table_column} #{order}")
|
53
53
|
else
|
54
54
|
chain # just return the chain
|
55
55
|
end
|
@@ -88,14 +88,20 @@ module ActiveAdmin
|
|
88
88
|
end
|
89
89
|
|
90
90
|
def scope_current_collection(chain)
|
91
|
+
@collection_before_scope = chain
|
92
|
+
|
91
93
|
if current_scope
|
92
|
-
@before_scope_collection = chain
|
93
94
|
scope_chain(current_scope, chain)
|
94
95
|
else
|
95
96
|
chain
|
96
97
|
end
|
97
98
|
end
|
98
99
|
|
100
|
+
def collection_before_scope
|
101
|
+
@collection_before_scope
|
102
|
+
end
|
103
|
+
|
104
|
+
|
99
105
|
include ActiveAdmin::ScopeChain
|
100
106
|
|
101
107
|
def current_scope
|
@@ -116,8 +122,11 @@ module ActiveAdmin
|
|
116
122
|
end
|
117
123
|
|
118
124
|
def paginate(chain)
|
119
|
-
|
120
|
-
|
125
|
+
page_method_name = Kaminari.config.page_method_name
|
126
|
+
page = params[Kaminari.config.param_name]
|
127
|
+
|
128
|
+
chain.send(page_method_name, page).per(per_page)
|
129
|
+
end
|
121
130
|
|
122
131
|
def per_page
|
123
132
|
return max_csv_records if request.format == 'text/csv'
|