パルカワ2

最近はFlutterをやっています

実行時、引数のチェックを行うgemを作ってみた。

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に対応してない