Module Rubygame::NamedResource::NamedResourceClassMethods
In: lib/rubygame/named_resource.rb

Adds class methods when the NamedResource module is included in a class. (Here, we are assuming that the NamedResource module was included in a class called MyClass.)


[]   []=   autoload   basename   exist?   find_file  


autoload_dirs  [RW]  An Array of paths to check for files. See find_file.

Public Instance methods

Retrieves an instance of the class from a per-class resource table (Hash).

If no object has been saved under the given name, invoke autoload to try to load a new instance, store it in the Hash table under this name, and sets the instance’s @name to this name.


# File lib/rubygame/named_resource.rb, line 101
      def []( name )
        result = @resources[name]

        if result.nil?
          result = autoload(name)
          if result
            self[name] = result
   = name

        return result

Stores an instance of the class in a per-class resource table (Hash) for future access. If another object is already stored with this name, the old record is lost.

May raise: TypeError, if you try to store anything

           that is not kind of this class.


# File lib/rubygame/named_resource.rb, line 126
      def []=( name, value )
        if( value.kind_of? self )
          @resources[name] = value
          raise TypeError, "#{self}#[]= can only store instances of #{self}"

This method is invoked when a non-existing resource is accessed with #[]. By default, this method simply returns nil, effectively disabling autoloading.

You should override this method in your class to provide class-specific loading behavior, or leave it as the default if you don’t need autoloading. Your method should return either an instance of the class, or nil.

NOTE: The find_file method is useful for getting the full path to a file which matches the name. That’s what it’s there for, so you should use it!


# File lib/rubygame/named_resource.rb, line 150
      def autoload( name )

Returns the basename for the path (i.e. the filename without the directory). Same as File.basename


# File lib/rubygame/named_resource.rb, line 162
      def basename( path )
        File.basename( path )

True if the given path points to a file that exists, otherwise false. Same as File.exist?


# File lib/rubygame/named_resource.rb, line 174
      def exist?( path )

Checks every directory in @autoload_dirs for a file with the given name, and returns the path (directory and name) for the first match.

If no directories have a file with that name, return nil.


# File lib/rubygame/named_resource.rb, line 189
      def find_file( filename )
        dir = @autoload_dirs.find { |dir|
          exist?( File.join(dir,filename) )

        if dir
          return File.join(dir,filename)
          return nil