class ActiveAdmin::ResourceCollection

It’s assumed that an added resource responds to ‘resource_name`.
This is a container for resources, which acts much like a Hash.

def [](klass)

Finds a resource based on the resource name, the resource class, or the base class.
def [](klass)
  if match = @resources[klass]
    match
  elsif match = real_resources.detect{ |r| [r.resource_name.to_s, r.resource_class.to_s].include? klass.to_s }
    match
  elsif klass.respond_to? :base_class
    real_resources.detect{ |r| r.resource_class.to_s == klass.base_class.to_s }
  end
end

def add(resource)

def add(resource)
  @resources[resource.resource_name] ||= resource
end

def each(&block)

Changes `each` to pass in the value, instead of both the key and value.
def each(&block)
  values.each &block
end

def initialize

def initialize
  @resources = {}
end

def real_resources

make sense, because by definition a ResourceCollection is a collection of resources.
REFACTOR: ResourceCollection currently stores Resource and Page objects. That doesn't
def real_resources
  select{ |r| r.respond_to? :resource_class }
end