Sha256: ec6ee75ef50783bd8f98a8e5f91b1019e3a439c2ca0a50f65e3220fe2216c7cf
Contents?: true
Size: 871 Bytes
Versions: 1
Compression:
Stored size: 871 Bytes
Contents
module AbstractInterface class InterfaceNotImplementedError < NoMethodError end def self.included(klass) klass.send(:include, AbstractInterface::Methods) klass.send(:extend, AbstractInterface::Methods) klass.send(:extend, AbstractInterface::ClassMethods) end module Methods def api_not_implemented(klass, method_name = nil) if method_name.nil? caller.first.match(/in \`(.+)\'/) method_name = $1 end raise AbstractInterface::InterfaceNotImplementedError.new("#{klass.class.name} needs to implement '#{method_name}' for interface #{self.name}!") end end module ClassMethods def needs_implementation(name, *args) self.class_eval do define_method(name) do |*args| Bicycle.api_not_implemented(self, name) end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
citygate-0.0.1 | lib/abstract_interface.rb |