module Typingpool::Utility::Castable
Public Class Methods
included(receiver)
click to toggle source
# File lib/typingpool/utility/castable.rb, line 37 def self.included(receiver) receiver.extend(ClassMethods) end
Public Instance Methods
as(sym, *args)
click to toggle source
Cast this object instance to a relative class. Call this from super in your own class if you want to pass args to the relative class constructor. All args after the first will be passed to new.
A relative class can be a subclass and in some cases a sibling class, parent class, parent sibling class, grandparent class, grandparent sibling class, and so on. A relative class will never be higher up the inheritance tree than the subclasses of the class where Castable
was included.
==== Params [sym] Symbol corresponding to relative class to cast into. For example, Class#as(:audio) will cast into a Class::Audio and Class#as(:csv) will cast into Class::CSV. Casting is class insensitive, which means you can't have class CSV and class Csv. To cast into a related class whose name is not not directly under that of its parent, you must either specify the full name, e.g. Class#as(:foo_bar_baz) to cast to Foo::Bar::Baz, or a name relative to the parent, e.g. Class#as(:remote_html), where Class::Remote does not inherit from Class but Class::Remote::HTML does. ==== Returns New instance of subclass
# File lib/typingpool/utility/castable.rb, line 29 def as(sym, *args) if klass = self.class.relative_klass(sym.to_s.downcase) klass.new(*args) else raise Error, "Can't find class '#{sym.to_s}' to cast to" end #if subklass =... end