module Contracts::NonIntrusive

Constants

VERSION

Public Class Methods

included(base) click to toggle source
# File lib/contracts/non_intrusive.rb, line 22
def self.included(base)
  base.send(:extend, self)
end

Public Instance Methods

Contract(*contracts) click to toggle source
# File lib/contracts/non_intrusive.rb, line 26
def Contract(*contracts)
  lambda do |method_map|
    name = method_map.first.first
    raw_name = method_map.first.last
    simple_method = SimpleMethodReference.new(name, raw_name)
    contract = nil

    define_method(name) do |*args, &blk|
      simple_method.set_method_once(method(raw_name))
      klass = self.class == Class ? self : self.class
      contract ||= Contract.new(klass, simple_method, *contracts)
      contract.call_with(self, *args, &blk)
    end
  end
end