Sha256: 34196efb2bf3a841b31765ecdcaee5881ab9519ba248b8f16fa75d50697080fd
Contents?: true
Size: 1.16 KB
Versions: 2
Compression:
Stored size: 1.16 KB
Contents
module Override def override object, methods methods.each do |method, result| result.respond_to?(:to_proc) ? object.meta_def(method, &result) : object.meta_def(method) { |*_| result } end object end def expect object, method, options expectation = lambda do |*params| unless params == options[:with] raise ExpectationError.new(options[:with], params) end options[:return] end override(object, method => expectation) end class ExpectationError < ArgumentError def initialize(expected, actual) super("Expected #{expected.inspect}, got #{actual.inspect}") end end end # Metaid == a few simple metaclass helper # (See http://whytheluckystiff.net/articles/seeingMetaclassesClearly.html.) class Object # The hidden singleton lurks behind everyone def metaclass; class << self; self; end; end def meta_eval &blk; metaclass.instance_eval &blk; end # Adds methods to a metaclass def meta_def name, &blk meta_eval { define_method name, &blk } end # Defines an instance method within a class def class_def name, &blk class_eval { define_method name, &blk } end end
Version data entries
2 entries across 2 versions & 2 rubygems
Version | Path |
---|---|
soveran-override-0.0.10 | lib/override.rb |
override-0.0.10 | lib/override.rb |