Sha256: 06a710e7f077cc5202733282193ab4446256cde89c57cae6db7270730609f852
Contents?: true
Size: 764 Bytes
Versions: 1
Compression:
Stored size: 764 Bytes
Contents
require 'behaves/version' require 'set' module Behaves def implements(*methods) @behaviors ||= Set.new(methods) end def behaves_like(klass) at_exit do required = defined_behaviors(klass) implemented = Set.new(self.instance_methods - Object.instance_methods) unimplemented = required - implemented exit if unimplemented.empty? raise NotImplementedError, "Expected `#{self}` to behave like `#{klass}`, but `#{unimplemented.to_a.join(', ')}` are not implemented." end end private def defined_behaviors(klass) if behaviors = klass.instance_variable_get("@behaviors") behaviors else raise NotImplementedError, "Expected `#{klass}` to define behaviors, but none found." end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
behaves-0.1.1 | lib/behaves.rb |