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
47 48 49 50 51 |
# File 'lib/monkey/ext.rb', line 47 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
64 65 66 |
# File 'lib/monkey/ext.rb', line 64 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 |
# 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 ObjectSpace.each_object(Module) do |mod| next unless mod.ancestors.include? klass and not mod.ancestors.include? self mod.send :include, klass end end end return @core_class end |
#expects(*list) ⇒ Object
68 69 70 71 72 |
# File 'lib/monkey/ext.rb', line 68 def expects(*list) list.each do |name| Monkey::Ext.expectations[core_class] << name.to_s end end |
#feature(name, mode = :instance, &block) ⇒ Object
53 54 55 56 57 58 59 60 61 62 |
# File 'lib/monkey/ext.rb', line 53 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
38 39 40 41 |
# File 'lib/monkey/ext.rb', line 38 def included(klass) klass.extend self::ClassMethods super end |
#rename_core_method(old_name, new_name) ⇒ Object
43 44 45 |
# File 'lib/monkey/ext.rb', line 43 def rename_core_method(old_name, new_name) core_class.send :undef_method, alias_core_method(old_name, new_name) end |