Sha256: b2b4df1bd02670b934c3bf64c86394779af63c62affa3e3d54a370cb4fb88de5
Contents?: true
Size: 1.18 KB
Versions: 3
Compression:
Stored size: 1.18 KB
Contents
module Contracts module MethodDecorators def self.extended(klass) Engine.apply(klass) end def inherited(subclass) Engine.fetch_from(subclass).set_eigenclass_owner 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(/^./) { |m| m.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
3 entries across 3 versions & 2 rubygems
Version | Path |
---|---|
files.com-1.0.55 | docs/vendor/bundle/ruby/2.5.0/gems/contracts-0.13.0/lib/contracts/decorators.rb |
contracts-0.14.0 | lib/contracts/decorators.rb |
contracts-0.13.0 | lib/contracts/decorators.rb |