Sha256: 9c80f15ab70536f00f91a369e9155875434f29258772b5607b5a2652f82ec45a

Contents?: true

Size: 1.82 KB

Versions: 24

Compression:

Stored size: 1.82 KB

Contents

require_relative 'resource'
require 'set'

module Asana
  module Resources
    # 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
    #
    module Registry
      class << self
        # Public: Registers a new resource class.
        #
        # resource_klass - [Class] the resource class.
        #
        # Returns nothing.
        def register(resource_klass)
          resources << resource_klass
        end

        # 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}.
        def lookup(singular_name)
          resources.detect do |klass|
            klass.singular_name.to_s == singular_name.to_s
          end || Resource
        end

        # 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}.
        def lookup_many(plural_name)
          resources.detect do |klass|
            klass.plural_name.to_s == plural_name.to_s
          end || Resource
        end

        # 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.
        def resources
          @resources ||= Set.new
        end
      end
    end
  end
end

Version data entries

24 entries across 24 versions & 2 rubygems

Version Path
asana-2.0.1 lib/asana/resource_includes/registry.rb
asana-2.0.0 lib/asana/resource_includes/registry.rb
asana-1.0.0 lib/asana/resource_includes/registry.rb
asana-0.10.13 lib/asana/resource_includes/registry.rb
asana-0.10.12 lib/asana/resource_includes/registry.rb
asana-0.10.3 lib/asana/resource_includes/registry.rb
asana-0.10.2 lib/asana/resource_includes/registry.rb
asana-0.10.1 lib/asana/resource_includes/registry.rb
asana-0.10.0 lib/asana/resource_includes/registry.rb
asana-0.9.3 lib/asana/resource_includes/registry.rb
asana-0.9.2 lib/asana/resource_includes/registry.rb
asana-0.9.1 lib/asana/resource_includes/registry.rb
asana-0.9.0 lib/asana/resource_includes/registry.rb
asana-0.8.1 lib/asana/resource_includes/registry.rb
asana-0.8.0 lib/asana/resource_includes/registry.rb
asana-0.6.3 lib/asana/resource_includes/registry.rb
asana-0.6.2 lib/asana/resource_includes/registry.rb
asana-0.6.0 lib/asana/resource_includes/registry.rb
asana-0.5.0 lib/asana/resource_includes/registry.rb
asana-0.4.0 lib/asana/resource_includes/registry.rb