module Asana::Resources::Registry

Internal: Global registry of Resource subclasses. It provides lookup from singular and plural names to the actual class objects.

Examples

class Unicorn < Asana::Resources::Resource
  path '/unicorns'
end

Registry.lookup(:unicorn) # => Unicorn
Registry.lookup_many(:unicorns) # => Unicorn

Public Class Methods

lookup(singular_name) click to toggle source

Public: Looks up a resource class by its singular name.

singular_name - [#to_s] the name of the resource, e.g :unicorn.

Returns the resource class or {Asana::Resources::Resource}.

# File lib/asana/resource_includes/registry.rb, line 34
def lookup(singular_name)
  resources.detect do |klass|
    klass.singular_name.to_s == singular_name.to_s
  end || Resource
end
lookup_many(plural_name) click to toggle source

Public: Looks up a resource class by its plural name.

plural_name - [#to_s] the plural name of the resource, e.g :unicorns.

Returns the resource class or {Asana::Resources::Resource}.

# File lib/asana/resource_includes/registry.rb, line 45
def lookup_many(plural_name)
  resources.detect do |klass|
    klass.plural_name.to_s == plural_name.to_s
  end || Resource
end
register(resource_klass) click to toggle source

Public: Registers a new resource class.

resource_klass - [Class] the resource class.

Returns nothing.

# File lib/asana/resource_includes/registry.rb, line 25
def register(resource_klass)
  resources << resource_klass
end
resources() click to toggle source

Internal: A set of Resource classes.

Returns the Set, defaulting to the empty set.

Note: this object is a mutable singleton, so it should not be accessed from multiple threads.

# File lib/asana/resource_includes/registry.rb, line 57
def resources
  @resources ||= Set.new
end