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.

Defined Under Namespace

Classes: Store

Constant Summary collapse

RegisterEvent =
"active_admin.namespace.register".freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(application, name) ⇒ Namespace

Returns a new instance of Namespace.



39
40
41
42
43
44
45
# File 'lib/active_admin/namespace.rb', line 39

def initialize(application, name)
  @application = application
  @name = name.to_s.underscore
  @resources = ResourceCollection.new
  register_module unless root?
  build_menu_collection
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args) ⇒ Object



59
60
61
# File 'lib/active_admin/namespace.rb', line 59

def method_missing(method, *args)
  settings.respond_to?(method) ? settings.send(method, *args) : super
end

Instance Attribute Details

#applicationObject (readonly)

Returns the value of attribute application.



37
38
39
# File 'lib/active_admin/namespace.rb', line 37

def application
  @application
end

Returns the value of attribute menus.



37
38
39
# File 'lib/active_admin/namespace.rb', line 37

def menus
  @menus
end

#resourcesObject (readonly)

Returns the value of attribute resources.



37
38
39
# File 'lib/active_admin/namespace.rb', line 37

def resources
  @resources
end

Class Method Details

.setting(name, default) ⇒ Object



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

def setting(name, default)
  Deprecation.warn "This method does not do anything and will be removed."
end

Instance Method Details

#add_current_user_to_menu(menu, priority = 10, html_options = {}) ⇒ Object

The default user session menu item

Parameters:

  • menu (ActiveAdmin::MenuItem)

    The menu to add the logout link to

  • priority (Fixnum) (defaults to: 10)

    The numeric priority for the order in which it appears

  • html_options (Hash) (defaults to: {})

    An options hash to pass along to link_to



166
167
168
169
170
171
172
173
# File 'lib/active_admin/namespace.rb', line 166

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

#add_logout_button_to_menu(menu, priority = 20, html_options = {}) ⇒ Object

The default logout menu item

Parameters:

  • menu (ActiveAdmin::MenuItem)

    The menu to add the logout link to

  • priority (Fixnum) (defaults to: 20)

    The numeric priority for the order in which it appears

  • html_options (Hash) (defaults to: {})

    An options hash to pass along to link_to



150
151
152
153
154
155
156
157
158
# File 'lib/active_admin/namespace.rb', line 150

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

#build_menu(name = DEFAULT_MENU) {|ActiveAdmin::Menu| ... } ⇒ void

This method returns an undefined value.

Add a callback to be ran when we build the menu

Parameters:

  • name (Symbol) (defaults to: DEFAULT_MENU)

    The name of the menu. Default: :default

Yields:



136
137
138
139
140
141
142
# File 'lib/active_admin/namespace.rb', line 136

def build_menu(name = DEFAULT_MENU)
  @menus.before_build do |menus|
    menus.menu name do |menu|
      yield menu
    end
  end
end

#fetch_menu(name) ⇒ Object



122
123
124
# File 'lib/active_admin/namespace.rb', line 122

def fetch_menu(name)
  @menus.fetch(name)
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


103
104
105
# File 'lib/active_admin/namespace.rb', line 103

def module_name
  root? ? nil : @name.camelize
end

#nameObject



47
48
49
# File 'lib/active_admin/namespace.rb', line 47

def name
  @name.to_sym
end

#register(resource_class, 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.



66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/active_admin/namespace.rb', line 66

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, config

  # Return the config
  config
end

#register_page(name, options = {}, &block) ⇒ Object



81
82
83
84
85
86
87
88
89
90
# File 'lib/active_admin/namespace.rb', line 81

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

#reset_menu!Object



126
127
128
# File 'lib/active_admin/namespace.rb', line 126

def reset_menu!
  @menus.clear!
end

#resource_for(klass) ⇒ Object

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



118
119
120
# File 'lib/active_admin/namespace.rb', line 118

def resource_for(klass)
  resources[klass]
end

#respond_to_missing?(method, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


55
56
57
# File 'lib/active_admin/namespace.rb', line 55

def respond_to_missing?(method, include_private = false)
  settings.respond_to?(method) || super
end

#root?Boolean

Returns:

  • (Boolean)


92
93
94
# File 'lib/active_admin/namespace.rb', line 92

def root?
  name == :root
end

#route_prefixObject



107
108
109
# File 'lib/active_admin/namespace.rb', line 107

def route_prefix
  root? ? nil : @name
end

#settingsObject



51
52
53
# File 'lib/active_admin/namespace.rb', line 51

def settings
  @settings ||= SettingsNode.build(application.namespace_settings)
end

#unload!Object

Unload all the registered resources for this namespace



112
113
114
115
# File 'lib/active_admin/namespace.rb', line 112

def unload!
  unload_resources!
  reset_menu!
end