Module: Mirah::Util
- Defined in:
- lib/mirah/util/delegate.rb,
lib/mirah/util/class_loader.rb,
lib/mirah/util/process_errors.rb,
lib/mirah/util/compilation_state.rb,
lib/mirah/util/argument_processor.rb
Defined Under Namespace
Modules: ProcessErrors Classes: ArgumentProcessor, CompilationState, Delegator
Constant Summary collapse
- ClassLoader =
Java::OrgMirah::MirahClassLoader
- IsolatedResourceLoader =
Java::OrgMirah::IsolatedResourceLoader
Class Method Summary collapse
Class Method Details
.DelegateClass(superclass) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/mirah/util/delegate.rb', line 9 def self.DelegateClass(superclass) klass = Class.new methods = superclass.public_instance_methods(true).map(&:to_s) methods -= ::Kernel.public_instance_methods(false).map(&:to_s) methods -= ["__id__", "__send__"] if RUBY_VERSION > '1.9' # avoid warnings methods |= ["to_s","to_a","inspect","==","=~","==="] klass.module_eval { def initialize(obj) # :nodoc: @_dc_obj = obj end def method_missing(m, *args) # :nodoc: unless @_dc_obj.respond_to?(m) super(m, *args) end @_dc_obj.__send__(m, *args) end def respond_to?(m, include_private = false) # :nodoc: return true if super return @_dc_obj.respond_to?(m, include_private) end def __getobj__ # :nodoc: @_dc_obj end def __setobj__(obj) # :nodoc: raise ArgumentError, "cannot delegate to self" if self.equal?(obj) @_dc_obj = obj end def clone # :nodoc: new = super new.__setobj__(__getobj__.clone) new end def dup # :nodoc: new = super new.__setobj__(__getobj__.clone) new end } for method in methods begin klass.module_eval <<-EOS, __FILE__, __LINE__+1 def #{method}(*args, &block) begin @_dc_obj.__send__(:#{method}, *args, &block) ensure [email protected]_if{|s| ::Mirah::Util::Delegator::IgnoreBacktracePat =~ s} if $@ end end EOS rescue SyntaxError raise NameError, "invalid identifier %s" % method, caller(3) end end return klass end |