class Predef

Constants

VERSION

Public Class Methods

new(klass) click to toggle source
# File lib/predef.rb, line 45
def initialize klass
  prepend_features klass
end
predef(klass, method_name, &definition) click to toggle source
# File lib/predef.rb, line 6
def self.predef klass, method_name, &definition
  unless klass.public_method_defined? method_name
    raise ::Predef::Error, "#{klass}##{method_name} is not defined! Use `Predef.predef!` if you want to define a new method."
  end

  predef! klass, method_name, &definition
end
predef!(klass, method_name, &definition) click to toggle source
# File lib/predef.rb, line 14
def self.predef! klass, method_name, &definition
  if defined? klass.__PREDEF__
    instance = klass.__PREDEF__
  else
    instance = new(klass)

    singleton_class = class << klass; self ; end
    singleton_class.class_eval do
      define_method(:__PREDEF__) { instance }
    end
  end

  instance.module_eval do
    define_method(method_name, &definition)
  end
  method_name
end
unpredef(klass, method_name) click to toggle source
# File lib/predef.rb, line 32
def self.unpredef klass, method_name
  if !(defined? klass.__PREDEF__) || !(klass.__PREDEF__.public_method_defined? method_name)
    raise ::Predef::Error, "#{klass}##{method_name} has never been predef-ed!"
  end
  self.unpredef! klass, method_name
end
unpredef!(klass, method_name) click to toggle source
# File lib/predef.rb, line 39
def self.unpredef! klass, method_name
  klass.__PREDEF__.module_eval do
    remove_method method_name
  end
end