Module: Monkey::Ext::ExtDSL
- Included in:
- ClassDsl
- Defined in:
- lib/monkey/ext.rb
Defined Under Namespace
Modules: ClassDsl
Instance Method Summary collapse
- #alias_core_method(old_name, new_name) ⇒ Object
- #class_methods(&block) ⇒ Object
- #core_class(klass = nil) ⇒ Object
- #expects(*list) ⇒ Object
- #feature(name, mode = :instance, &block) ⇒ Object
- #included(klass) ⇒ Object
- #rename_core_method(old_name, new_name) ⇒ Object
Instance Method Details
#alias_core_method(old_name, new_name) ⇒ Object
50 51 52 53 54 |
# File 'lib/monkey/ext.rb', line 50 def alias_core_method(old_name, new_name) new_name = new_name % old_name if new_name.is_a? String core_class.send :alias_method, new_name, old_name old_name end |
#class_methods(&block) ⇒ Object
67 68 69 |
# File 'lib/monkey/ext.rb', line 67 def class_methods(&block) self::ClassMethods.class_eval(&block) end |
#core_class(klass = nil) ⇒ Object
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 |
# File 'lib/monkey/ext.rb', line 15 def core_class(klass = nil) if klass @core_class = klass klass.send :include, self self::ClassMethods.extend ClassDsl self::ClassMethods.core_class @core_class @core_class.class_eval <<-EOS def method_missing(meth, *args, &blk) return super if Monkey::Backend.setup? Monkey::Backend.setup __send__(meth, *args, &blk) end EOS unless klass.is_a? Class # HACK: Don't modify modules while looping through object space. # JRuby does not like that. list = [] ObjectSpace.each_object(Class) do |mod| list << mod if mod.ancestors.include? klass and not mod.ancestors.include? self end list.each { |e| e.send :include, klass } end end return @core_class end |
#expects(*list) ⇒ Object
71 72 73 74 75 |
# File 'lib/monkey/ext.rb', line 71 def expects(*list) list.each do |name| Monkey::Ext.expectations[core_class] << name.to_s end end |
#feature(name, mode = :instance, &block) ⇒ Object
56 57 58 59 60 61 62 63 64 65 |
# File 'lib/monkey/ext.rb', line 56 def feature(name, mode = :instance, &block) case mode when :instance then block.call when :class then class_methods(&block) when :shared feature(name, :instance, &block) feature(name, :class, &block) else raise ArgumentError, "unkown mode #{mode.inspect}" end end |
#included(klass) ⇒ Object
41 42 43 44 |
# File 'lib/monkey/ext.rb', line 41 def included(klass) klass.extend self::ClassMethods super end |
#rename_core_method(old_name, new_name) ⇒ Object
46 47 48 |
# File 'lib/monkey/ext.rb', line 46 def rename_core_method(old_name, new_name) core_class.send :undef_method, alias_core_method(old_name, new_name) end |