Sha256: c9f1fe12d456a95c13e69583b92457eecca7c757ad10128fe31cfbc404203f18
Contents?: true
Size: 1.19 KB
Versions: 1
Compression:
Stored size: 1.19 KB
Contents
module Contracts module MethodDecorators def self.extended(klass) Engine.apply(klass) end def inherited(subclass) Engine.fetch_from(subclass).set_eigenclass_owner super end def method_added(name) MethodHandler.new(name, false, self).handle super end def singleton_method_added(name) MethodHandler.new(name, true, self).handle super end end class Decorator # an attr_accessor for a class variable: class << self; attr_accessor :decorators; end def self.inherited(klass) name = klass.name.gsub(/^./, &:downcase) return if name =~ /^[^A-Za-z_]/ || name =~ /[^0-9A-Za-z_]/ # the file and line parameters set the text for error messages # make a new method that is the name of your decorator. # that method accepts random args and a block. # inside, `decorate` is called with those params. MethodDecorators.module_eval <<-ruby_eval, __FILE__, __LINE__ + 1 def #{klass}(*args, &blk) ::Contracts::Engine.fetch_from(self).decorate(#{klass}, *args, &blk) end ruby_eval end def initialize(klass, method) @method = method end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
contracts-lite-0.15.0 | lib/contracts/decorators.rb |