module Sandbox
def self.add_attributes(klass, *attrs)
def self.add_attributes(klass, *attrs) self.const_get_from_string(klass).class_eval do attr_accessor *attrs # set up the 'initialize' method to assign the attributes define_method(:initialize) do |*value_hash| value_hash = value_hash.first value_hash ||= {} value_hash.each do |k, v| instance_variable_set("@#{k.to_s}", v) end end end end
def self.add_class(klass)
def self.add_class(klass) const_set_from_string(klass) end
def self.add_class_method(klass, method_name, proc_obj=nil, &blk)
def self.add_class_method(klass, method_name, proc_obj=nil, &blk) singleton = ( class << self.const_get_from_string(klass); self end) singleton.send(:define_method, method_name, proc_obj || blk) end
def self.add_method(klass, method_name, proc_obj=nil, &blk)
def self.add_method(klass, method_name, proc_obj=nil, &blk) self.const_get_from_string(klass).send(:define_method, method_name, proc_obj || blk) end
def self.cleanup!
def self.cleanup! constants.each { |klass| remove_const klass } end
def self.const_get_from_string(klass)
def self.const_get_from_string(klass) klass.split("::").inject(self) { |const, klass| const.const_get(klass) } end
def self.const_set_from_string(delimited_klasses)
def self.const_set_from_string(delimited_klasses) # try to const_get before set const_set to avoid "already initialized" warnings delimited_klasses.split("::").inject(self) do |const, klass| const.constants.collect(&:to_s).include?(klass.to_s) ? const.const_get(klass) : const.const_set(klass, Class.new) end @@created_classes << delimited_klasses.split("::").first @@created_classes.uniq! end
def self.created_classes
def self.created_classes @@created_classes end
def self.scoop!
def self.scoop! self.cleanup! end