class ActiveAdmin::Namespace
Namespaces are the basic organizing principle for resources within Active Admin
Each resource is registered into a namespace which defines:
* the namespaceing for routing * the module to namespace controllers * the menu which gets displayed (other resources in the same namespace)
For example:
ActiveAdmin.register Post, :namespace => :admin
Will register the Post model into the “admin” namespace. This will namespace the urls for the resource to “/admin/posts” and will set the controller to Admin::PostsController
You can also register to the “root” namespace, which is to say no namespace at all.
ActiveAdmin.register Post, :namespace => false
This will register the resource to an instantiated namespace called :root. The resource will be accessible from “/posts” and the controller will be PostsController.
Constants
- RegisterEvent
Attributes
Public Class Methods
# File lib/active_admin/namespace.rb, line 32 def initialize(application, name) @application = application @name = name.to_s.underscore.to_sym @resources = ResourceCollection.new register_module unless root? build_menu_collection end
Public Instance Methods
Returns the name of the module if required. Will be nil if none is required.
eg:
Namespace.new(:admin).module_name # => 'Admin' Namespace.new(:root).module_name # => nil
# File lib/active_admin/namespace.rb, line 80 def module_name return nil if root? @module_name ||= name.to_s.camelize end
Override from ActiveAdmin::Settings
to inherit default attributes from the application
# File lib/active_admin/namespace.rb, line 98 def read_default_setting(name) application.send(name) end
Register a resource into this namespace. The preffered method to access this is to use the global registration ActiveAdmin.register which delegates to the proper namespace instance.
# File lib/active_admin/namespace.rb, line 43 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 ActiveAdmin::Event.dispatch ActiveAdmin::Resource::RegisterEvent, config # Return the config config end
# File lib/active_admin/namespace.rb, line 58 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
Returns the first registered ActiveAdmin::Resource
instance for a given class
# File lib/active_admin/namespace.rb, line 92 def resource_for(klass) resources[klass] end
# File lib/active_admin/namespace.rb, line 69 def root? name == :root end
Unload all the registered resources for this namespace
# File lib/active_admin/namespace.rb, line 86 def unload! unload_resources! reset_menu! end
Protected Instance Methods
# File lib/active_admin/namespace.rb, line 176 def build_page(name, options) resources.add Page.new(self, name, options) end
Either returns an existing Resource
instance or builds a new one for the resource and options
# File lib/active_admin/namespace.rb, line 172 def find_or_build_resource(resource_class, options) resources.add Resource.new(self, resource_class, options) end
# File lib/active_admin/namespace.rb, line 216 def parse_page_registration_block(config, &block) PageDSL.new(config).run_registration_block(&block) end
# File lib/active_admin/namespace.rb, line 211 def parse_registration_block(config, &block) config.dsl = ResourceDSL.new(config) config.dsl.run_registration_block(&block) end
Creates a ruby module to namespace all the classes in if required
# File lib/active_admin/namespace.rb, line 202 def register_module eval "module ::#{module_name}; end" end
# File lib/active_admin/namespace.rb, line 180 def register_page_controller(config) eval "class ::#{config.controller_name} < ActiveAdmin::PageController; end" config.controller.active_admin_config = config end
# File lib/active_admin/namespace.rb, line 206 def register_resource_controller(config) eval "class ::#{config.controller_name} < ActiveAdmin::ResourceController; end" config.controller.active_admin_config = config end
# File lib/active_admin/namespace.rb, line 185 def unload_resources! resources.each do |resource| parent = (module_name || 'Object').constantize const_name = resource.controller_name.split('::').last # Remove the const if its been defined parent.send(:remove_const, const_name) if parent.const_defined?(const_name) # 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