Class: Object
- Inherits:
- BasicObject
- Defined in:
- src/ruby/osx/objc/oc_import_openclass.rb
Overview
The following code defines a new subclass of Object (Ruby's).
module OSX
class NSCocoaClass end
end
This Object.inherited() replaces the subclass of Object class by a Cocoa class from # OSX.ns_import.
Class Method Summary (collapse)
- + (Object) _before_method_added
- + (Object) _before_osx_inherited
- + (Object) _before_singleton_method_added
- + (Object) _real_class_and_mod(klass)
- + (Object) _register_method(sym, class_method)
- + (Object) inherited(subklass)
- + (Object) method_added(sym)
- + (Object) method_missing(symbol, *args)
- + (Object) singleton_method_added(sym)
Class Method Details
+ (Object) _before_method_added
80 |
# File 'src/ruby/osx/objc/oc_import_openclass.rb', line 80 alias _before_method_added method_added |
+ (Object) _before_osx_inherited
34 |
# File 'src/ruby/osx/objc/oc_import_openclass.rb', line 34 alias _before_osx_inherited inherited |
+ (Object) _before_singleton_method_added
86 |
# File 'src/ruby/osx/objc/oc_import_openclass.rb', line 86 alias _before_singleton_method_added singleton_method_added |
+ (Object) _real_class_and_mod(klass)
21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'src/ruby/osx/objc/oc_import_openclass.rb', line 21 def _real_class_and_mod(klass) unless klass.ancestors.include?(OSX::Boxed) klassname = klass.name.to_s unless klassname.nil? || klassname.empty? if Object.included_modules.include?(OSX) and /::/.match(klassname).nil? [klassname, Object] elsif klassname[0..4] == 'OSX::' and (tokens = klassname.split(/::/)).size == 2 and klass.superclass != OSX::Boxed [tokens[1], OSX] end end end end |
+ (Object) _register_method(sym, class_method)
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'src/ruby/osx/objc/oc_import_openclass.rb', line 52 def _register_method(sym, class_method) if self != Object nsklassname, mod = _real_class_and_mod(self) if nsklassname begin nsklass = OSX.const_get(nsklassname) raise NameError unless nsklass.ancestors.include?(OSX::NSObject) if class_method method = self.method(sym).unbind OSX.__rebind_umethod__(nsklass.class, method) nsklass.module_eval do (class << self; self; end).instance_eval do define_method(sym, method) end end else method = self.instance_method(sym) OSX.__rebind_umethod__(nsklass, method) nsklass.module_eval do define_method(sym, method) end end rescue NameError end end end end |
+ (Object) inherited(subklass)
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'src/ruby/osx/objc/oc_import_openclass.rb', line 35 def inherited(subklass) nsklassname, mod = _real_class_and_mod(subklass) if nsklassname and (first_char = nsklassname[0]) >= ?A and first_char <= ?Z # remove Ruby's class mod.instance_eval { remove_const nsklassname.intern } begin klass = OSX.ns_import nsklassname.intern raise NameError if klass.nil? subklass = klass rescue NameError # redefine subclass (looks not a Cocoa class) mod.const_set(nsklassname, subklass) end end _before_osx_inherited(subklass) end |
+ (Object) method_added(sym)
81 82 83 84 |
# File 'src/ruby/osx/objc/oc_import_openclass.rb', line 81 def method_added(sym) _register_method(sym, false) _before_method_added(sym) end |
+ (Object) method_missing(symbol, *args)
92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'src/ruby/osx/objc/oc_import_openclass.rb', line 92 def method_missing(symbol, *args) nsklassname, mod = _real_class_and_mod(self) if nsklassname begin nsklass = OSX.const_get(nsklassname) if nsklass.respond_to?(symbol) return nsklass.send(symbol, *args) end rescue NameError end end raise NoMethodError, "undefined method `#{symbol.to_s}' for #{self}" end |
+ (Object) singleton_method_added(sym)
87 88 89 90 |
# File 'src/ruby/osx/objc/oc_import_openclass.rb', line 87 def singleton_method_added(sym) _register_method(sym, true) _before_singleton_method_added(sym) end |