nsm-activeadmin 0.2.2
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/.document +5 -0
- data/.gitignore +34 -0
- data/.travis.yml +4 -0
- data/.yardopts +8 -0
- data/CHANGELOG.rdoc +76 -0
- data/Gemfile +39 -0
- data/LICENSE +25 -0
- data/README.rdoc +487 -0
- data/Rakefile +27 -0
- data/activeadmin.gemspec +28 -0
- 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-input-icon.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/loading.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
- data/app/assets/images/active_admin/orderable.png +0 -0
- data/app/assets/javascripts/active_admin/base.js +12 -0
- data/app/assets/javascripts/active_admin/vendor.js +382 -0
- data/app/assets/stylesheets/active_admin/_base.css.scss +400 -0
- data/app/assets/stylesheets/active_admin/_forms.css.scss +256 -0
- data/app/assets/stylesheets/active_admin/_header.css.scss +110 -0
- data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
- data/app/assets/stylesheets/active_admin/_typography.css.scss +100 -0
- data/app/assets/stylesheets/active_admin/components/_comments.css.scss +40 -0
- data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +123 -0
- data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +38 -0
- data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +8 -0
- data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +27 -0
- data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +29 -0
- data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +20 -0
- data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
- data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
- data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +34 -0
- data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +21 -0
- data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +21 -0
- data/app/views/active_admin/dashboard/index.html.arb +1 -0
- data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/active_admin/devise/passwords/edit.html.erb +16 -0
- data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
- data/app/views/active_admin/devise/sessions/new.html.erb +18 -0
- data/app/views/active_admin/devise/shared/_links.erb +20 -0
- data/app/views/active_admin/devise/unlocks/new.html.erb +12 -0
- data/app/views/active_admin/resource/edit.html.arb +1 -0
- data/app/views/active_admin/resource/index.csv.erb +20 -0
- data/app/views/active_admin/resource/index.html.arb +1 -0
- data/app/views/active_admin/resource/new.html.arb +1 -0
- data/app/views/active_admin/resource/show.html.arb +1 -0
- data/app/views/layouts/active_admin.html.arb +1 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +35 -0
- data/cucumber.yml +2 -0
- data/docs/1-general-configuration.md +52 -0
- data/docs/2-resource-customization.md +35 -0
- data/docs/3-index-pages.md +55 -0
- data/docs/3-index-pages/index-as-block.md +16 -0
- data/docs/3-index-pages/index-as-blog.md +61 -0
- data/docs/3-index-pages/index-as-grid.md +21 -0
- data/docs/3-index-pages/index-as-table.md +74 -0
- data/docs/4-csv-format.md +14 -0
- data/docs/5-forms.md +39 -0
- data/docs/6-show-screens.md +22 -0
- data/docs/7-sidebars.md +35 -0
- data/docs/8-custom-actions.md +123 -0
- data/features/comments/commenting.feature +112 -0
- data/features/comments/viewing_index.feature +19 -0
- data/features/dashboard.feature +26 -0
- data/features/edit_page.feature +106 -0
- data/features/first_boot.feature +16 -0
- data/features/global_navigation.feature +30 -0
- data/features/index/format_as_csv.feature +46 -0
- data/features/index/formats.feature +12 -0
- data/features/index/index_as_block.feature +15 -0
- data/features/index/index_as_blog.feature +50 -0
- data/features/index/index_as_grid.feature +45 -0
- data/features/index/index_as_table.feature +81 -0
- data/features/index/index_blank_slate.feature +55 -0
- data/features/index/index_scopes.feature +52 -0
- data/features/index/pagination.feature +17 -0
- data/features/menu.feature +26 -0
- data/features/new_page.feature +75 -0
- data/features/registering_assets.feature +35 -0
- data/features/registering_resources.feature +33 -0
- data/features/show/default_content.feature +43 -0
- data/features/show/page_title.feature +33 -0
- data/features/sidebar_sections.feature +127 -0
- data/features/specifying_actions.feature +87 -0
- data/features/step_definitions/action_item_steps.rb +7 -0
- data/features/step_definitions/additional_web_steps.rb +77 -0
- data/features/step_definitions/asset_steps.rb +7 -0
- data/features/step_definitions/attribute_steps.rb +13 -0
- data/features/step_definitions/comment_steps.rb +8 -0
- data/features/step_definitions/configuration_steps.rb +31 -0
- data/features/step_definitions/dashboard_steps.rb +11 -0
- data/features/step_definitions/factory_steps.rb +29 -0
- data/features/step_definitions/flash_steps.rb +3 -0
- data/features/step_definitions/format_steps.rb +35 -0
- data/features/step_definitions/index_scope_steps.rb +20 -0
- data/features/step_definitions/layout_steps.rb +3 -0
- data/features/step_definitions/menu_steps.rb +7 -0
- data/features/step_definitions/pagination_steps.rb +8 -0
- data/features/step_definitions/sidebar_steps.rb +7 -0
- data/features/step_definitions/tab_steps.rb +3 -0
- data/features/step_definitions/user_steps.rb +26 -0
- data/features/step_definitions/web_steps.rb +211 -0
- data/features/sti_resource.feature +61 -0
- data/features/support/env.rb +90 -0
- data/features/support/paths.rb +50 -0
- data/features/support/selectors.rb +45 -0
- data/features/users/logging_in.feature +34 -0
- data/features/users/logging_out.feature +13 -0
- data/lib/active_admin.rb +74 -0
- data/lib/active_admin/abstract_view_factory.rb +95 -0
- data/lib/active_admin/application.rb +228 -0
- data/lib/active_admin/arbre.rb +23 -0
- data/lib/active_admin/arbre/attributes.rb +20 -0
- data/lib/active_admin/arbre/class_list.rb +28 -0
- data/lib/active_admin/arbre/collection.rb +27 -0
- data/lib/active_admin/arbre/context.rb +14 -0
- data/lib/active_admin/arbre/core_extensions.rb +5 -0
- data/lib/active_admin/arbre/document.rb +42 -0
- data/lib/active_admin/arbre/element.rb +151 -0
- data/lib/active_admin/arbre/html.rb +84 -0
- data/lib/active_admin/arbre/html5_elements.rb +47 -0
- data/lib/active_admin/arbre/tag.rb +137 -0
- data/lib/active_admin/arbre/text_node.rb +35 -0
- data/lib/active_admin/asset_registration.rb +34 -0
- data/lib/active_admin/callbacks.rb +89 -0
- data/lib/active_admin/comments.rb +88 -0
- data/lib/active_admin/comments/comment.rb +21 -0
- data/lib/active_admin/comments/configuration.rb +18 -0
- data/lib/active_admin/comments/namespace_helper.rb +14 -0
- data/lib/active_admin/comments/resource_helper.rb +17 -0
- data/lib/active_admin/comments/show_page_helper.rb +23 -0
- data/lib/active_admin/comments/views.rb +3 -0
- data/lib/active_admin/comments/views/active_admin_comment.rb +0 -0
- data/lib/active_admin/comments/views/active_admin_comments.rb +82 -0
- data/lib/active_admin/component.rb +22 -0
- data/lib/active_admin/controller_action.rb +12 -0
- data/lib/active_admin/csv_builder.rb +45 -0
- data/lib/active_admin/dashboards.rb +48 -0
- data/lib/active_admin/dashboards/dashboard_controller.rb +38 -0
- data/lib/active_admin/dashboards/section.rb +34 -0
- data/lib/active_admin/deprecation.rb +36 -0
- data/lib/active_admin/devise.rb +43 -0
- data/lib/active_admin/dsl.rb +224 -0
- data/lib/active_admin/engine.rb +4 -0
- data/lib/active_admin/event.rb +31 -0
- data/lib/active_admin/form_builder.rb +109 -0
- data/lib/active_admin/helpers/optional_display.rb +34 -0
- data/lib/active_admin/helpers/settings.rb +63 -0
- data/lib/active_admin/iconic.rb +51 -0
- data/lib/active_admin/iconic/icons.rb +142 -0
- data/lib/active_admin/locales/da.yml +28 -0
- data/lib/active_admin/locales/en.yml +40 -0
- data/lib/active_admin/locales/es.yml +39 -0
- data/lib/active_admin/locales/it.yml +39 -0
- data/lib/active_admin/locales/pt-BR.yml +36 -0
- data/lib/active_admin/locales/ru.yml +40 -0
- data/lib/active_admin/locales/zh_cn.yml +40 -0
- data/lib/active_admin/menu.rb +42 -0
- data/lib/active_admin/menu_item.rb +73 -0
- data/lib/active_admin/namespace.rb +206 -0
- data/lib/active_admin/page_config.rb +15 -0
- data/lib/active_admin/reloader.rb +30 -0
- data/lib/active_admin/renderer.rb +87 -0
- data/lib/active_admin/resource.rb +151 -0
- data/lib/active_admin/resource/action_items.rb +88 -0
- data/lib/active_admin/resource/belongs_to.rb +31 -0
- data/lib/active_admin/resource/menu.rb +45 -0
- data/lib/active_admin/resource/naming.rb +36 -0
- data/lib/active_admin/resource/scopes.rb +33 -0
- data/lib/active_admin/resource/sidebars.rb +36 -0
- data/lib/active_admin/resource_controller.rb +103 -0
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/actions.rb +79 -0
- data/lib/active_admin/resource_controller/callbacks.rb +47 -0
- data/lib/active_admin/resource_controller/collection.rb +144 -0
- data/lib/active_admin/resource_controller/filters.rb +58 -0
- data/lib/active_admin/resource_controller/form.rb +42 -0
- data/lib/active_admin/resource_controller/menu.rb +29 -0
- data/lib/active_admin/resource_controller/page_configurations.rb +53 -0
- data/lib/active_admin/resource_controller/scoping.rb +36 -0
- data/lib/active_admin/resource_controller/sidebars.rb +18 -0
- data/lib/active_admin/router.rb +85 -0
- data/lib/active_admin/sass/active_admin.scss +3 -0
- data/lib/active_admin/sass/css_loader.rb +16 -0
- data/lib/active_admin/sass/helpers.rb +40 -0
- data/lib/active_admin/scope.rb +17 -0
- data/lib/active_admin/sidebar_section.rb +41 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
- data/lib/active_admin/version.rb +3 -0
- data/lib/active_admin/view_factory.rb +23 -0
- data/lib/active_admin/view_helpers.rb +22 -0
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
- data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +42 -0
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +29 -0
- data/lib/active_admin/view_helpers/display_helper.rb +38 -0
- data/lib/active_admin/view_helpers/filter_form_helper.rb +186 -0
- data/lib/active_admin/view_helpers/form_helper.rb +13 -0
- data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +26 -0
- data/lib/active_admin/view_helpers/renderer_helper.rb +29 -0
- data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
- data/lib/active_admin/view_helpers/title_helper.rb +11 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
- data/lib/active_admin/views.rb +8 -0
- data/lib/active_admin/views/action_items.rb +17 -0
- data/lib/active_admin/views/components/attributes_table.rb +66 -0
- data/lib/active_admin/views/components/blank_slate.rb +33 -0
- data/lib/active_admin/views/components/columns.rb +47 -0
- data/lib/active_admin/views/components/paginated_collection.rb +92 -0
- data/lib/active_admin/views/components/panel.rb +26 -0
- data/lib/active_admin/views/components/scopes.rb +70 -0
- data/lib/active_admin/views/components/sidebar_section.rb +28 -0
- data/lib/active_admin/views/components/status_tag.rb +55 -0
- data/lib/active_admin/views/components/table_for.rb +193 -0
- data/lib/active_admin/views/dashboard_section_renderer.rb +19 -0
- data/lib/active_admin/views/header_renderer.rb +53 -0
- data/lib/active_admin/views/index_as_block.rb +29 -0
- data/lib/active_admin/views/index_as_blog.rb +129 -0
- data/lib/active_admin/views/index_as_grid.rb +70 -0
- data/lib/active_admin/views/index_as_table.rb +148 -0
- data/lib/active_admin/views/pages/base.rb +155 -0
- data/lib/active_admin/views/pages/dashboard.rb +62 -0
- data/lib/active_admin/views/pages/edit.rb +28 -0
- data/lib/active_admin/views/pages/index.rb +74 -0
- data/lib/active_admin/views/pages/layout.rb +26 -0
- data/lib/active_admin/views/pages/new.rb +28 -0
- data/lib/active_admin/views/pages/show.rb +56 -0
- data/lib/active_admin/views/tabs_renderer.rb +58 -0
- data/lib/activeadmin.rb +1 -0
- data/lib/generators/active_admin/assets/assets_generator.rb +21 -0
- data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +427 -0
- data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +6 -0
- data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +1 -0
- data/lib/generators/active_admin/assets/templates/dashboards.rb +36 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +49 -0
- data/lib/generators/active_admin/install/install_generator.rb +44 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +93 -0
- data/lib/generators/active_admin/install/templates/dashboards.rb +38 -0
- data/lib/generators/active_admin/install/templates/migrations/1_create_admin_notes.rb +16 -0
- data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +25 -0
- data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
- data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
- data/script/local +44 -0
- data/script/use_rails +45 -0
- data/spec/integration/belongs_to_spec.rb +42 -0
- data/spec/integration/default_namespace.rb +77 -0
- data/spec/integration/javascript_spec.rb +20 -0
- data/spec/integration/stylesheets_spec.rb +41 -0
- data/spec/spec_helper.rb +157 -0
- data/spec/support/detect_rails_version.rb +11 -0
- data/spec/support/integration_example_group.rb +33 -0
- data/spec/support/jslint.yml +80 -0
- data/spec/support/rails_template.rb +32 -0
- data/spec/support/rails_template_with_data.rb +33 -0
- data/spec/support/templates/cucumber.rb +24 -0
- data/spec/unit/abstract_view_factory_spec.rb +79 -0
- data/spec/unit/action_builder_spec.rb +88 -0
- data/spec/unit/application_spec.rb +78 -0
- data/spec/unit/arbre/html/context_spec.rb +22 -0
- data/spec/unit/arbre/html/element_finder_methods_spec.rb +54 -0
- data/spec/unit/arbre/html/element_spec.rb +224 -0
- data/spec/unit/arbre/html/tag_attributes_spec.rb +61 -0
- data/spec/unit/arbre/html/tag_spec.rb +63 -0
- data/spec/unit/arbre/html_spec.rb +210 -0
- data/spec/unit/asset_registration_spec.rb +37 -0
- data/spec/unit/auto_link_spec.rb +39 -0
- data/spec/unit/belongs_to_spec.rb +45 -0
- data/spec/unit/breadcrumbs_spec.rb +110 -0
- data/spec/unit/comments_spec.rb +57 -0
- data/spec/unit/component_spec.rb +18 -0
- data/spec/unit/controller_filters_spec.rb +34 -0
- data/spec/unit/csv_builder_spec.rb +83 -0
- data/spec/unit/dashboard_controller_spec.rb +26 -0
- data/spec/unit/dashboard_section_spec.rb +56 -0
- data/spec/unit/dashboards_spec.rb +59 -0
- data/spec/unit/display_name_spec.rb +29 -0
- data/spec/unit/event_spec.rb +41 -0
- data/spec/unit/filter_form_builder_spec.rb +182 -0
- data/spec/unit/form_builder_spec.rb +239 -0
- data/spec/unit/generators/install_rails_3_1_spec.rb +16 -0
- data/spec/unit/helpers/settings_spec.rb +30 -0
- data/spec/unit/menu_item_spec.rb +143 -0
- data/spec/unit/menu_spec.rb +53 -0
- data/spec/unit/namespace_spec.rb +214 -0
- data/spec/unit/pretty_format_spec.rb +35 -0
- data/spec/unit/rails_spec.rb +43 -0
- data/spec/unit/registration_spec.rb +76 -0
- data/spec/unit/reloader_spec.rb +28 -0
- data/spec/unit/renderer_spec.rb +108 -0
- data/spec/unit/resource/action_items_spec.rb +62 -0
- data/spec/unit/resource/menu_spec.rb +80 -0
- data/spec/unit/resource/naming_spec.rb +56 -0
- data/spec/unit/resource/scopes_spec.rb +30 -0
- data/spec/unit/resource/sidebars_spec.rb +50 -0
- data/spec/unit/resource_controller/collection_spec.rb +34 -0
- data/spec/unit/resource_controller_spec.rb +152 -0
- data/spec/unit/resource_spec.rb +260 -0
- data/spec/unit/routing_spec.rb +88 -0
- data/spec/unit/sass/helpers_spec.rb +47 -0
- data/spec/unit/scope_spec.rb +31 -0
- data/spec/unit/tabs_renderer_spec.rb +85 -0
- data/spec/unit/view_factory_spec.rb +19 -0
- data/spec/unit/views/components/attributes_table_spec.rb +100 -0
- data/spec/unit/views/components/blank_slate_spec.rb +31 -0
- data/spec/unit/views/components/columns_spec.rb +75 -0
- data/spec/unit/views/components/panel_spec.rb +31 -0
- data/spec/unit/views/components/sidebar_section_spec.rb +37 -0
- data/spec/unit/views/components/status_tag_spec.rb +81 -0
- data/spec/unit/views/components/table_for_spec.rb +130 -0
- data/spec/unit/views/pages/layout_spec.rb +22 -0
- data/tasks/docs.rake +39 -0
- data/tasks/test.rake +49 -0
- data/tasks/yard.rake +6 -0
- metadata +510 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
require 'active_admin/resource/action_items'
|
|
2
|
+
require 'active_admin/resource/menu'
|
|
3
|
+
require 'active_admin/resource/naming'
|
|
4
|
+
require 'active_admin/resource/scopes'
|
|
5
|
+
require 'active_admin/resource/sidebars'
|
|
6
|
+
|
|
7
|
+
module ActiveAdmin
|
|
8
|
+
|
|
9
|
+
# Resource is the primary data storage for resource configuration in Active Admin
|
|
10
|
+
#
|
|
11
|
+
# When you register a resource (ActiveAdmin.register Post) you are actually creating
|
|
12
|
+
# a new Resource instance within the given Namespace.
|
|
13
|
+
#
|
|
14
|
+
# The instance of the current resource is available in ResourceController and views
|
|
15
|
+
# by calling the #active_admin_config method.
|
|
16
|
+
#
|
|
17
|
+
class Resource
|
|
18
|
+
|
|
19
|
+
# Event dispatched when a new resource is registered
|
|
20
|
+
RegisterEvent = 'active_admin.resource.register'.freeze
|
|
21
|
+
|
|
22
|
+
autoload :BelongsTo, 'active_admin/resource/belongs_to'
|
|
23
|
+
|
|
24
|
+
# The namespace this resource belongs to
|
|
25
|
+
attr_reader :namespace
|
|
26
|
+
|
|
27
|
+
# The class this resource wraps. If you register the Post model, Resource#resource
|
|
28
|
+
# will point to the Post class
|
|
29
|
+
attr_reader :resource
|
|
30
|
+
|
|
31
|
+
# A hash of page configurations for the controller indexed by action name
|
|
32
|
+
attr_reader :page_configs
|
|
33
|
+
|
|
34
|
+
# An array of member actions defined for this resource
|
|
35
|
+
attr_reader :member_actions
|
|
36
|
+
|
|
37
|
+
# An array of collection actions defined for this resource
|
|
38
|
+
attr_reader :collection_actions
|
|
39
|
+
|
|
40
|
+
# The default sort order to use in the controller
|
|
41
|
+
attr_accessor :sort_order
|
|
42
|
+
|
|
43
|
+
# Scope this resource to an association in the controller
|
|
44
|
+
attr_accessor :scope_to
|
|
45
|
+
|
|
46
|
+
# If we're scoping resources, use this method on the parent to return the collection
|
|
47
|
+
attr_accessor :scope_to_association_method
|
|
48
|
+
|
|
49
|
+
# Set to false to turn off admin notes
|
|
50
|
+
attr_accessor :admin_notes
|
|
51
|
+
|
|
52
|
+
# Set the configuration for the CSV
|
|
53
|
+
attr_writer :csv_builder
|
|
54
|
+
|
|
55
|
+
module Base
|
|
56
|
+
def initialize(namespace, resource, options = {})
|
|
57
|
+
@namespace = namespace
|
|
58
|
+
@resource = resource
|
|
59
|
+
@options = default_options.merge(options)
|
|
60
|
+
@sort_order = @options[:sort_order]
|
|
61
|
+
@page_configs = {}
|
|
62
|
+
@member_actions, @collection_actions = [], []
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
include Base
|
|
67
|
+
include ActionItems
|
|
68
|
+
include Menu
|
|
69
|
+
include Naming
|
|
70
|
+
include Scopes
|
|
71
|
+
include Sidebars
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def resource_table_name
|
|
75
|
+
resource.quoted_table_name
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Returns a properly formatted controller name for this
|
|
79
|
+
# resource within its namespace
|
|
80
|
+
def controller_name
|
|
81
|
+
[namespace.module_name, camelized_resource_name.pluralize + "Controller"].compact.join('::')
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Returns the controller for this resource
|
|
85
|
+
def controller
|
|
86
|
+
@controller ||= controller_name.constantize
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Returns the routes prefix for this resource
|
|
90
|
+
def route_prefix
|
|
91
|
+
namespace.module_name.try(:underscore)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Returns a symbol for the route to use to get to the
|
|
95
|
+
# collection of this resource
|
|
96
|
+
def route_collection_path
|
|
97
|
+
[route_prefix, controller.resources_configuration[:self][:route_collection_name], 'path'].compact.join('_').to_sym
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Returns the named route for an instance of this resource
|
|
101
|
+
def route_instance_path
|
|
102
|
+
[route_prefix, controller.resources_configuration[:self][:route_instance_name], 'path'].compact.join('_').to_sym
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Clears all the member actions this resource knows about
|
|
106
|
+
def clear_member_actions!
|
|
107
|
+
@member_actions = []
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def clear_collection_actions!
|
|
111
|
+
@collection_actions = []
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# Are admin notes turned on for this resource
|
|
115
|
+
def admin_notes?
|
|
116
|
+
admin_notes.nil? ? ActiveAdmin.admin_notes : admin_notes
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def belongs_to(target, options = {})
|
|
120
|
+
@belongs_to = Resource::BelongsTo.new(self, target, options)
|
|
121
|
+
controller.belongs_to(target, options.dup)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def belongs_to_config
|
|
125
|
+
@belongs_to
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
# Do we belong to another resource
|
|
129
|
+
def belongs_to?
|
|
130
|
+
!belongs_to_config.nil?
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# The csv builder for this resource
|
|
134
|
+
def csv_builder
|
|
135
|
+
@csv_builder || default_csv_builder
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
private
|
|
139
|
+
|
|
140
|
+
def default_options
|
|
141
|
+
{
|
|
142
|
+
:namespace => ActiveAdmin.application.default_namespace,
|
|
143
|
+
:sort_order => "#{resource.respond_to?(:primary_key) ? resource.primary_key : 'id'}_desc"
|
|
144
|
+
}
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def default_csv_builder
|
|
148
|
+
@default_csv_builder ||= CSVBuilder.default_for_resource(resource)
|
|
149
|
+
end
|
|
150
|
+
end # class Resource
|
|
151
|
+
end # module ActiveAdmin
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
require 'active_admin/helpers/optional_display'
|
|
2
|
+
|
|
3
|
+
module ActiveAdmin
|
|
4
|
+
|
|
5
|
+
class Resource
|
|
6
|
+
module ActionItems
|
|
7
|
+
|
|
8
|
+
# Add the default action items to a resource when it's
|
|
9
|
+
# initialized
|
|
10
|
+
def initialize(*args)
|
|
11
|
+
super
|
|
12
|
+
add_default_action_items
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# @return [Array] The set of action items for this resource
|
|
16
|
+
def action_items
|
|
17
|
+
@action_items ||= []
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Add a new action item to a resource
|
|
21
|
+
#
|
|
22
|
+
# @param [Hash] options valid keys include:
|
|
23
|
+
# :only: A single or array of controller actions to display
|
|
24
|
+
# this action item on.
|
|
25
|
+
# :except: A single or array of controller actions not to
|
|
26
|
+
# display this action item on.
|
|
27
|
+
def add_action_item(options = {}, &block)
|
|
28
|
+
self.action_items << ActiveAdmin::ActionItem.new(options, &block)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Returns a set of action items to display for a specific controller action
|
|
32
|
+
#
|
|
33
|
+
# @param [String, Symbol] action the action to retrieve action items for
|
|
34
|
+
#
|
|
35
|
+
# @return [Array] Array of ActionItems for the controller actions
|
|
36
|
+
def action_items_for(action)
|
|
37
|
+
action_items.select{|item| item.display_on?(action) }
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Clears all the existing action items for this resource
|
|
41
|
+
def clear_action_items!
|
|
42
|
+
@action_items = []
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
private
|
|
46
|
+
|
|
47
|
+
# Adds the default action items to each resource
|
|
48
|
+
def add_default_action_items
|
|
49
|
+
# New Link on all actions except :new and :show
|
|
50
|
+
add_action_item :except => [:new, :show] do
|
|
51
|
+
if controller.action_methods.include?('new')
|
|
52
|
+
link_to(I18n.t('active_admin.new_model', :model => active_admin_config.resource_name), new_resource_path)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Edit link on show
|
|
57
|
+
add_action_item :only => :show do
|
|
58
|
+
if controller.action_methods.include?('edit')
|
|
59
|
+
link_to(I18n.t('active_admin.edit_model', :model => active_admin_config.resource_name), edit_resource_path(resource))
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Destroy link on show
|
|
64
|
+
add_action_item :only => :show do
|
|
65
|
+
if controller.action_methods.include?("destroy")
|
|
66
|
+
link_to(I18n.t('active_admin.delete_model', :model => active_admin_config.resource_name),
|
|
67
|
+
resource_path(resource),
|
|
68
|
+
:method => :delete, :confirm => I18n.t('active_admin.delete_confirmation'))
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Model class to store the data for ActionItems
|
|
77
|
+
class ActionItem
|
|
78
|
+
include ActiveAdmin::OptionalDisplay
|
|
79
|
+
|
|
80
|
+
attr_accessor :block
|
|
81
|
+
|
|
82
|
+
def initialize(options = {}, &block)
|
|
83
|
+
@options, @block = options, block
|
|
84
|
+
normalize_display_options!
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
class Resource
|
|
3
|
+
class BelongsTo
|
|
4
|
+
|
|
5
|
+
class TargetNotFound < StandardError; end
|
|
6
|
+
|
|
7
|
+
# The resource which initiated this relationship
|
|
8
|
+
attr_reader :owner
|
|
9
|
+
|
|
10
|
+
def initialize(owner_resource, target_name, options = {})
|
|
11
|
+
@owner, @target_name = owner_resource, target_name
|
|
12
|
+
@options = options
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Returns the target resource class or raises an exception if it doesn't exist
|
|
16
|
+
def target
|
|
17
|
+
namespace.resources[@target_name.to_s.camelize] or
|
|
18
|
+
raise TargetNotFound, "Could not find registered resource #{@target_name} in #{namespace.name} with #{namespace.resources.keys.inspect}"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def namespace
|
|
22
|
+
@owner.namespace
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def optional?
|
|
26
|
+
@options[:optional]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
class Resource
|
|
3
|
+
module Menu
|
|
4
|
+
|
|
5
|
+
# Set the menu options. To not add this resource to the menu, just
|
|
6
|
+
# call #menu(false)
|
|
7
|
+
def menu(options = {})
|
|
8
|
+
options = options == false ? { :display => false } : options
|
|
9
|
+
@menu_options = options
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# The options to use for the menu
|
|
13
|
+
def menu_options
|
|
14
|
+
@menu_options ||= {}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Returns the name to put this resource under in the menu
|
|
18
|
+
def parent_menu_item_name
|
|
19
|
+
menu_options[:parent]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Returns the name to be displayed in the menu for this resource
|
|
23
|
+
def menu_item_name
|
|
24
|
+
menu_options[:label] || plural_resource_name
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Returns the items priority for altering the default sort order
|
|
28
|
+
def menu_item_priority
|
|
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 }
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Should this resource be added to the menu system?
|
|
38
|
+
def include_in_menu?
|
|
39
|
+
return false if menu_options[:display] == false
|
|
40
|
+
!(belongs_to? && !belongs_to_config.optional?)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
class Resource
|
|
3
|
+
module Naming
|
|
4
|
+
|
|
5
|
+
# An underscored safe representation internally for this resource
|
|
6
|
+
def underscored_resource_name
|
|
7
|
+
@underscored_resource_name ||= if @options[:as]
|
|
8
|
+
@options[:as].gsub(' ', '').underscore.singularize
|
|
9
|
+
else
|
|
10
|
+
resource.name.gsub('::','').underscore
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# A camelized safe representation for this resource
|
|
15
|
+
def camelized_resource_name
|
|
16
|
+
underscored_resource_name.camelize
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Returns the name to call this resource.
|
|
20
|
+
# By default will use resource.model_name.human
|
|
21
|
+
def resource_name
|
|
22
|
+
@resource_name ||= if @options[:as] || !resource.respond_to?(:model_name)
|
|
23
|
+
underscored_resource_name.titleize
|
|
24
|
+
else
|
|
25
|
+
resource.model_name.human.titleize
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Returns the plural version of this resource
|
|
30
|
+
def plural_resource_name
|
|
31
|
+
@plural_resource_name ||= resource_name.pluralize
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
class Resource
|
|
3
|
+
module Scopes
|
|
4
|
+
|
|
5
|
+
# Return an array of scopes for this resource
|
|
6
|
+
def scopes
|
|
7
|
+
@scopes ||= []
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Returns a scope for this object by its identifier
|
|
11
|
+
def get_scope_by_id(id)
|
|
12
|
+
id = id.to_s
|
|
13
|
+
scopes.find{|s| s.id == id }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def default_scope
|
|
17
|
+
@default_scope
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Create a new scope object for this resource.
|
|
21
|
+
# If you want to internationalize the scope name, you can add
|
|
22
|
+
# to your i18n files a key like "active_admin.scopes.scope_method".
|
|
23
|
+
def scope(*args, &block)
|
|
24
|
+
options = args.extract_options!
|
|
25
|
+
self.scopes << ActiveAdmin::Scope.new(*args, &block)
|
|
26
|
+
if options[:default]
|
|
27
|
+
@default_scope = scopes.last
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'active_admin/helpers/optional_display'
|
|
2
|
+
|
|
3
|
+
module ActiveAdmin
|
|
4
|
+
|
|
5
|
+
class Resource
|
|
6
|
+
module Sidebars
|
|
7
|
+
|
|
8
|
+
def initialize(*args)
|
|
9
|
+
super
|
|
10
|
+
add_default_sidebar_sections
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def sidebar_sections
|
|
14
|
+
@sidebar_sections ||= []
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def clear_sidebar_sections!
|
|
18
|
+
@sidebar_sections = []
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def sidebar_sections_for(action)
|
|
22
|
+
sidebar_sections.select{|section| section.display_on?(action) }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def add_default_sidebar_sections
|
|
28
|
+
self.sidebar_sections << ActiveAdmin::SidebarSection.new(:filters, :only => :index) do
|
|
29
|
+
active_admin_filters_form_for assigns["search"], filters_config
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
require 'inherited_resources'
|
|
2
|
+
require 'active_admin/resource_controller/actions'
|
|
3
|
+
require 'active_admin/resource_controller/action_builder'
|
|
4
|
+
require 'active_admin/resource_controller/callbacks'
|
|
5
|
+
require 'active_admin/resource_controller/collection'
|
|
6
|
+
require 'active_admin/resource_controller/filters'
|
|
7
|
+
require 'active_admin/resource_controller/form'
|
|
8
|
+
require 'active_admin/resource_controller/menu'
|
|
9
|
+
require 'active_admin/resource_controller/page_configurations'
|
|
10
|
+
require 'active_admin/resource_controller/scoping'
|
|
11
|
+
|
|
12
|
+
module ActiveAdmin
|
|
13
|
+
class ResourceController < ::InheritedResources::Base
|
|
14
|
+
|
|
15
|
+
helper ::ActiveAdmin::ViewHelpers
|
|
16
|
+
|
|
17
|
+
layout :determine_active_admin_layout
|
|
18
|
+
|
|
19
|
+
respond_to :html, :xml, :json
|
|
20
|
+
respond_to :csv, :only => :index
|
|
21
|
+
|
|
22
|
+
before_filter :only_render_implemented_actions
|
|
23
|
+
before_filter :authenticate_active_admin_user
|
|
24
|
+
|
|
25
|
+
ACTIVE_ADMIN_ACTIONS = [:index, :show, :new, :create, :edit, :update, :destroy]
|
|
26
|
+
|
|
27
|
+
include Actions
|
|
28
|
+
include ActionBuilder
|
|
29
|
+
include Callbacks
|
|
30
|
+
include Collection
|
|
31
|
+
include Filters
|
|
32
|
+
include Form
|
|
33
|
+
include Menu
|
|
34
|
+
include PageConfigurations
|
|
35
|
+
include Scoping
|
|
36
|
+
|
|
37
|
+
class << self
|
|
38
|
+
|
|
39
|
+
# Reference to the Resource object which initialized
|
|
40
|
+
# this controller
|
|
41
|
+
attr_accessor :active_admin_config
|
|
42
|
+
|
|
43
|
+
def active_admin_config=(config)
|
|
44
|
+
@active_admin_config = config
|
|
45
|
+
defaults :resource_class => config.resource,
|
|
46
|
+
:route_prefix => config.route_prefix,
|
|
47
|
+
:instance_name => config.underscored_resource_name
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
public :belongs_to
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
protected
|
|
54
|
+
|
|
55
|
+
# By default Rails will render un-implemented actions when the view exists. Becuase Active
|
|
56
|
+
# Admin allows you to not render any of the actions by using the #actions method, we need
|
|
57
|
+
# to check if they are implemented.
|
|
58
|
+
def only_render_implemented_actions
|
|
59
|
+
raise AbstractController::ActionNotFound unless action_methods.include?(params[:action])
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Determine which layout to use.
|
|
63
|
+
#
|
|
64
|
+
# 1. If we're rendering a standard Active Admin action, we want layout(false)
|
|
65
|
+
# because these actions are subclasses of the Base page (which implementes
|
|
66
|
+
# all the required layout code)
|
|
67
|
+
# 2. If we're rendering a custom action, we'll use the active_admin layout so
|
|
68
|
+
# that users can render any template inside Active Admin.
|
|
69
|
+
def determine_active_admin_layout
|
|
70
|
+
ACTIVE_ADMIN_ACTIONS.include?(params[:action].to_sym) ? false : 'active_admin'
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Calls the authentication method as defined in ActiveAdmin.authentication_method
|
|
74
|
+
def authenticate_active_admin_user
|
|
75
|
+
send(active_admin_application.authentication_method) if active_admin_application.authentication_method
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def current_active_admin_user
|
|
79
|
+
send(active_admin_application.current_user_method) if active_admin_application.current_user_method
|
|
80
|
+
end
|
|
81
|
+
helper_method :current_active_admin_user
|
|
82
|
+
|
|
83
|
+
def current_active_admin_user?
|
|
84
|
+
!current_active_admin_user.nil?
|
|
85
|
+
end
|
|
86
|
+
helper_method :current_active_admin_user?
|
|
87
|
+
|
|
88
|
+
def active_admin_config
|
|
89
|
+
self.class.active_admin_config
|
|
90
|
+
end
|
|
91
|
+
helper_method :active_admin_config
|
|
92
|
+
|
|
93
|
+
def active_admin_application
|
|
94
|
+
ActiveAdmin.application
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# Returns the renderer class to use for the given action.
|
|
98
|
+
def renderer_for(action)
|
|
99
|
+
active_admin_application.view_factory["#{action}_page"]
|
|
100
|
+
end
|
|
101
|
+
helper_method :renderer_for
|
|
102
|
+
end
|
|
103
|
+
end
|