class ActiveAdmin::Namespace
resource will be accessible from “/posts” and the controller will be PostsController.
This will register the resource to an instantiated namespace called :root. The
ActiveAdmin.register Post, namespace: false
You can also register to the “root” namespace, which is to say no namespace at all.
Admin::PostsController
urls for the resource to “/admin/posts” and will set the controller to
Will register the Post model into the “admin” namespace. This will namespace the
ActiveAdmin.register Post, namespace: :admin
For example:
* the menu which gets displayed (other resources in the same namespace)
* the module to namespace controllers
* the namespaceing for routing
Each resource is registered into a namespace which defines:
Namespaces are the basic organizing principle for resources within Active Admin
def add_current_user_to_menu(menu, priority = 10, html_options = {})
-
html_options
(Hash
) -- An options hash to pass along to link_to -
priority
(Fixnum
) -- The numeric priority for the order in which it appears -
menu
(ActiveAdmin::MenuItem
) -- The menu to add the logout link to
def add_current_user_to_menu(menu, priority = 10, html_options = {}) if current_user_method menu.add id: "current_user", priority: priority, html_options: html_options, label: -> { display_name current_active_admin_user }, url: -> { auto_url_for(current_active_admin_user) }, if: :current_active_admin_user? end end
def add_logout_button_to_menu(menu, priority = 20, html_options = {})
-
html_options
(Hash
) -- An options hash to pass along to link_to -
priority
(Fixnum
) -- The numeric priority for the order in which it appears -
menu
(ActiveAdmin::MenuItem
) -- The menu to add the logout link to
def add_logout_button_to_menu(menu, priority = 20, html_options = {}) if logout_link_path html_options = html_options.reverse_merge(method: logout_link_method || :get) menu.add id: "logout", priority: priority, html_options: html_options, label: -> { I18n.t "active_admin.logout" }, url: -> { render_or_call_method_or_proc_on self, active_admin_namespace.logout_link_path }, if: :current_active_admin_user? end end
def build_default_utility_nav
def build_default_utility_nav return if @menus.exists? :utility_navigation @menus.menu :utility_navigation do |menu| add_current_user_to_menu menu add_logout_button_to_menu menu end end
def build_menu(name = DEFAULT_MENU)
-
(void)
-
Other tags:
- Yield: - The block to be ran when the menu is built
Parameters:
-
name
(Symbol
) -- The name of the menu. Default: :default
def build_menu(name = DEFAULT_MENU) @menus.before_build do |menus| menus.menu name do |menu| yield menu end end end
def build_menu_collection
def build_menu_collection @menus = MenuCollection.new @menus.on_build do build_default_utility_nav resources.each do |resource| resource.add_to_menu(@menus) end end end
def build_page(name, options)
def build_page(name, options) resources.add Page.new(self, name, options) end
def fetch_menu(name)
def fetch_menu(name) @menus.fetch(name) end
def find_or_build_resource(resource_class, options)
def find_or_build_resource(resource_class, options) resources.add Resource.new(self, resource_class, options) end
def initialize(application, name)
def initialize(application, name) @application = application @name = name.to_s.underscore @resources = ResourceCollection.new register_module unless root? build_menu_collection end
def method_missing(method, *args)
def method_missing(method, *args) settings.respond_to?(method) ? settings.send(method, *args) : super end
def module_name
Namespace.new(:root).module_name # => nil
Namespace.new(:admin).module_name # => 'Admin'
eg:
is required.
Returns the name of the module if required. Will be nil if none
def module_name root? ? nil : @name.camelize end
def name
def name @name.to_sym end
def parse_page_registration_block(config, &block)
def parse_page_registration_block(config, &block) PageDSL.new(config).run_registration_block(&block) end
def parse_registration_block(config, &block)
def parse_registration_block(config, &block) config.dsl = ResourceDSL.new(config) config.dsl.run_registration_block(&block) end
def register(resource_class, options = {}, &block)
use the global registration ActiveAdmin.register which delegates to the proper
Register a resource into this namespace. The preferred method to access this is to
def register(resource_class, options = {}, &block) config = find_or_build_resource(resource_class, options) # Register the resource register_resource_controller(config) parse_registration_block(config, &block) if block_given? reset_menu! # Dispatch a registration event ActiveSupport::Notifications.instrument ActiveAdmin::Resource::RegisterEvent, { active_admin_resource: config } # Return the config config end
def register_module
def register_module unless Object.const_defined? module_name Object.const_set module_name, Module.new end end
def register_page(name, options = {}, &block)
def register_page(name, options = {}, &block) config = build_page(name, options) # Register the resource register_page_controller(config) parse_page_registration_block(config, &block) if block_given? reset_menu! config end
def register_page_controller(config)
def register_page_controller(config) eval "class ::#{config.controller_name} < ActiveAdmin::PageController; end" config.controller.active_admin_config = config end
def register_resource_controller(config)
def register_resource_controller(config) eval "class ::#{config.controller_name} < ActiveAdmin::ResourceController; end" config.controller.active_admin_config = config end
def reset_menu!
def reset_menu! @menus.clear! end
def resource_for(klass)
def resource_for(klass) resources[klass] end
def respond_to_missing?(method, include_private = false)
def respond_to_missing?(method, include_private = false) settings.respond_to?(method) || super end
def root?
def root? name == :root end
def route_prefix
def route_prefix root? ? nil : @name end
def setting(name, default)
def setting(name, default) ActiveAdmin.deprecator.warn "This method does not do anything and will be removed." end
def settings
def settings @settings ||= SettingsNode.build(application.namespace_settings) end
def unload!
def unload! unload_resources! reset_menu! end
def unload_resources!
def unload_resources! resources.each do |resource| parent = (module_name || "Object").constantize name = resource.controller_name.split("::").last parent.send(:remove_const, name) if parent.const_defined?(name, false) # Remove circular references resource.controller.active_admin_config = nil if resource.is_a?(Resource) && resource.dsl resource.dsl.run_registration_block { @config = nil } end end @resources = ResourceCollection.new end