Class: ActiveAdmin::ResourceCollection

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/active_admin/resource_collection.rb

Overview

Holds on to a collection of Resources. Is an Enumerable object so it has some Array like qualities.

Adding a resource assumes that the object responds to #resource_name

Instance Method Summary collapse

Constructor Details

#initializeResourceCollection

Returns a new instance of ResourceCollection.



12
13
14
# File 'lib/active_admin/resource_collection.rb', line 12

def initialize
  @resource_hash = {}
end

Instance Method Details

#add(resource) ⇒ Object

Add a new resource to the collection. If the resource_name already exists, the exiting resource is returned.

Parameters:

  • resource (Resource, Page)

    The resource to add to the collection



22
23
24
25
26
27
28
29
30
# File 'lib/active_admin/resource_collection.rb', line 22

def add(resource)
  if has_key?(resource.resource_name)
    existing_resource = find_by_key(resource.resource_name)
    ensure_resource_classes_match!(existing_resource, resource)
    existing_resource
  else
    @resource_hash[resource.resource_name] = resource
  end
end

#each(&block) ⇒ Object

For enumerable



38
39
40
# File 'lib/active_admin/resource_collection.rb', line 38

def each(&block)
  @resource_hash.values.each(&block)
end

#find_by_key(resource_name) ⇒ Object

Finds a resource by a given key



53
54
55
# File 'lib/active_admin/resource_collection.rb', line 53

def find_by_key(resource_name)
  @resource_hash[resource_name]
end

#find_by_resource_class(resource_class) ⇒ Object

Finds a resource based on it’s class. Looks up the class Heirarchy if its a subclass of an Active Record class (ie: implementes base_class)



59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/active_admin/resource_collection.rb', line 59

def find_by_resource_class(resource_class)
  resource_class_name = resource_class.to_s
  match = resources_with_a_resource_class.find{|r| r.resource_class.to_s == resource_class_name }
  return match if match

  if resource_class.respond_to?(:base_class)
    base_class_name = resource_class.base_class.to_s
    resources_with_a_resource_class.find{|r| r.resource_class.to_s == base_class_name }
  else
    nil
  end
end

#has_key?(resource_name) ⇒ Boolean

Returns:

  • (Boolean)


48
49
50
# File 'lib/active_admin/resource_collection.rb', line 48

def has_key?(resource_name)
  @resource_hash.has_key?(resource_name)
end

#keysObject



43
44
45
# File 'lib/active_admin/resource_collection.rb', line 43

def keys
  @resource_hash.keys
end

#resourcesObject



33
34
35
# File 'lib/active_admin/resource_collection.rb', line 33

def resources
  @resource_hash.values
end