Sha256: 184d527e5f90d0e31bf55184416bcafa705dd7bcb5d4102d31b8a0f6f62a76a9

Contents?: true

Size: 1.26 KB

Versions: 7

Compression:

Stored size: 1.26 KB

Contents

module ActiveAdmin
  # This is a container for resources, which acts much like a Hash.
  # It's assumed that an added resource responds to `resource_name`.
  class ResourceCollection
    include Enumerable
    extend Forwardable
    def_delegators :@resources, :empty?, :has_key?, :keys, :values, :[]=

    def initialize
      @resources = {}
    end

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

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

    # 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

    private

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

  end
end

Version data entries

7 entries across 7 versions & 2 rubygems

Version Path
yousty-activeadmin-1.0.4.pre lib/active_admin/resource_collection.rb
yousty-activeadmin-1.0.3.pre lib/active_admin/resource_collection.rb
yousty-activeadmin-1.0.2.pre lib/active_admin/resource_collection.rb
yousty-activeadmin-1.0.1.pre lib/active_admin/resource_collection.rb
yousty-activeadmin-1.0.0.pre lib/active_admin/resource_collection.rb
activeadmin-0.6.2 lib/active_admin/resource_collection.rb
activeadmin-0.6.1 lib/active_admin/resource_collection.rb