Class: ActiveAdmin::Namespace

Inherits:
Object
  • Object
show all
Defined in:
lib/active_admin/namespace.rb

Overview

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.

Constant Summary collapse

RegisterEvent =
'active_admin.namespace.register'.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(application, name) ⇒ Namespace

Returns a new instance of Namespace.



33
34
35
36
37
38
39
40
# File 'lib/active_admin/namespace.rb', line 33

def initialize(application, name)
  @application = application
  @name = name.to_s.underscore.to_sym
  @resources = {}
  @menu = Menu.new
  register_module unless root?
  generate_dashboard_controller
end

Instance Attribute Details

#applicationObject (readonly)

Returns the value of attribute application.



31
32
33
# File 'lib/active_admin/namespace.rb', line 31

def application
  @application
end

Returns the value of attribute menu.



31
32
33
# File 'lib/active_admin/namespace.rb', line 31

def menu
  @menu
end

#nameObject (readonly)

Returns the value of attribute name.



31
32
33
# File 'lib/active_admin/namespace.rb', line 31

def name
  @name
end

#resourcesObject (readonly)

Returns the value of attribute resources.



31
32
33
# File 'lib/active_admin/namespace.rb', line 31

def resources
  @resources
end

Instance Method Details

#dashboard_controller_nameObject

Returns the name of the dashboard controller for this namespace



80
81
82
# File 'lib/active_admin/namespace.rb', line 80

def dashboard_controller_name
  [module_name, "DashboardController"].compact.join("::")
end

#load_menu!Object

The menu gets built by Active Admin once all the resources have been loaded. This method gets called to register each resource with the menu system.



93
94
95
96
97
98
# File 'lib/active_admin/namespace.rb', line 93

def load_menu!
  register_dashboard
  resources.values.each do |config|
    register_with_menu(config) if config.include_in_menu?
  end
end

#module_nameObject

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


74
75
76
77
# File 'lib/active_admin/namespace.rb', line 74

def module_name
  return nil if root?
  @module_name ||= name.to_s.camelize
end

#register(resource, options = {}, &block) ⇒ Object

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.



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/active_admin/namespace.rb', line 45

def register(resource, options = {}, &block)
  config = find_or_build_resource(resource, options)

  # Register the resource
  register_resource_controller(config)
  parse_registration_block(config, &block) if block_given?
  register_with_menu(config) if config.include_in_menu?

  # Ensure that the dashboard is generated
  generate_dashboard_controller

  # Dispatch a registration event
  ActiveAdmin::Event.dispatch ActiveAdmin::Resource::RegisterEvent, config

  # Return the config
  config
end

#resource_for(klass) ⇒ Object

Returns the first registered ActiveAdmin::Resource instance for a given class



101
102
103
# File 'lib/active_admin/namespace.rb', line 101

def resource_for(klass)
  resources.values.find{|config| config.resource == klass }
end

#root?Boolean

Returns:

  • (Boolean)


63
64
65
# File 'lib/active_admin/namespace.rb', line 63

def root?
  name == :root
end

#unload!Object

Unload all the registered resources for this namespace



85
86
87
88
89
# File 'lib/active_admin/namespace.rb', line 85

def unload!
  unload_resources!
  unload_dashboard!
  unload_menu!
end