https://github.com/hisaichi5518/ruby-smartargs
ザンネンなことにType Annotationだ!とかそんなのではないです。
新幹線の中でType Annotationに思いを馳せていたら、実行時に引数のclassをチェック出来るだけでも便利では!!ってなったので書いてみた。
しかしながら、色々考える事多かったので諸々対応してない。
こういう感じで、subの後に型を配列で渡して、そのあとにメソッドを定義する。
require 'spec_helper' require 'smartargs' class T1 extend Smartargs::Mixin sub [String, Fixnum], def hoge(x, y) true end end describe Smartargs do it 'has a version number' do expect(Smartargs::VERSION).not_to be nil end it 'returns true' do t = T1.new expect(t.hoge("str", 100)).to eq(true) end # 型がちがう it 'returns ArgumentError' do t = T1.new expect { t.hoge("str", "100") }.to raise_error(ArgumentError) end # すくない it 'returns ArgumentError' do t = T1.new expect { t.hoge("str") }.to raise_error(ArgumentError) end # 多い it 'returns ArgumentError' do t = T1.new expect { t.hoge("str", 100, "fuga") }.to raise_error(ArgumentError) end end
ちなみにsubというのはいい名前が思いつかなかったので、僕が打ち慣れているsubにしました!!!!!!!!!!Perl最高!!!!!!!
メモ
do |x, y| end
だと引数が全部任意になるt.hoge(x: "hoge")
に対応してないdef self.hoge
に対応してない- moduleに対応してない