制約フレームワークを書かないと連載させてもらえない Web 雑誌があるようなので、昨日こんなの書いてた。
静的解析もできないし、ドキュメンテーションにも活きないので各方面の識者から怒られそうだが {}
で書けるという見た目の点で許してほしい。
あとはつっこまれるとしたら、継承したときに事前条件、事後条件が強化される/緩和されるのあたり。全部やると大変なんすよ。invariant もないですね (method_added でイベントフックしてすべてのメソッドコールへ prepend かぶせるとかすればできるかな)。
class BeerLover
extend Contracts
attr_accessor :age