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_dirs | [RW] | An Array of paths to check for files. See find_file. |
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 result.name = name end end return result end
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 else raise TypeError, "#{self}#[]= can only store instances of #{self}" end end
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 ) nil end
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 ) File.exist?(path) end
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) else return nil end end