Sha256: 741202bb05f3c21dc88881035d8552f12dc87b8a4fed1a89309f3df27dda9db5
Contents?: true
Size: 1.36 KB
Versions: 3
Compression:
Stored size: 1.36 KB
Contents
module Contracts module Core def self.included(base) common(base) end def self.extended(base) common(base) end def self.common(base) return if base.respond_to?(:Contract) base.extend(MethodDecorators) base.instance_eval do def functype(funcname) contracts = Engine.fetch_from(self).decorated_methods_for(:class_methods, funcname) if contracts.nil? "No contract for #{self}.#{funcname}" else "#{funcname} :: #{contracts[0]}" end end end # NOTE: Workaround for `defined?(super)` bug in ruby 1.9.2 # source: http://stackoverflow.com/a/11181685 # bug: https://bugs.ruby-lang.org/issues/6644 base.class_eval <<-RUBY # TODO: deprecate # Required when contracts are included in global scope def Contract(*args) if defined?(super) super else self.class.Contract(*args) end end RUBY base.class_eval do def functype(funcname) contracts = Engine.fetch_from(self.class).decorated_methods_for(:instance_methods, funcname) if contracts.nil? "No contract for #{self.class}.#{funcname}" else "#{funcname} :: #{contracts[0]}" end end end 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/core.rb |
contracts-0.13.0 | lib/contracts/core.rb |
contracts-0.12.0 | lib/contracts/core.rb |