module Monkey::Ext::ExtDSL

Public Instance Methods

alias_core_method(old_name, new_name) click to toggle source
# File lib/monkey/ext.rb, line 63
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) click to toggle source
# File lib/monkey/ext.rb, line 80
def class_methods(&block)
  self::ExtClassMethods.class_eval(&block)
end
core_class(klass = nil) click to toggle source
# File lib/monkey/ext.rb, line 16
      def core_class(klass = nil)
        if klass
          @core_class = klass
          klass.send :include, self
          self::ExtClassMethods.extend ClassDsl
          self::ExtClassMethods.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
          propagate_include
        end
        @core_class
      end
each_module(&block) click to toggle source
# File lib/monkey/ext.rb, line 35
def each_module(&block)
  list = []
  ObjectSpace.each_object(Class) { |c| list << c }
  list.each(&block)
end
expects(*list) click to toggle source
# File lib/monkey/ext.rb, line 84
def expects(*list)
  list.each do |name|
    Monkey::Ext.expectations[core_class] << name.to_s
  end
end
feature(name, mode = :instance, &block) click to toggle source
# File lib/monkey/ext.rb, line 69
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) click to toggle source
Calls superclass method
# File lib/monkey/ext.rb, line 54
def included(klass)
  klass.extend self::ExtClassMethods
  super
end
propagate_include() click to toggle source
# File lib/monkey/ext.rb, line 46
def propagate_include
  return if core_class.is_a? Class
  each_module do |mod|
    next unless mod < core_class and not mod < self
    mod.send(:include, core_class)
  end
end
rename_core_method(old_name, new_name) click to toggle source
# File lib/monkey/ext.rb, line 59
def rename_core_method(old_name, new_name)
  core_class.send :undef_method, alias_core_method(old_name, new_name)
end