From: Dice Date: 2016-03-13T21:30:21+09:00 Subject: [ruby-list:50286] NeuronCheck 0.1.0 リリース Diceです。 新しいRubyライブラリ NeuronCheck をリリースしました。 ■ドキュメント http://ruby.morphball.net/neuroncheck/doc/ ■概要 NeuronCheckは、下記の2つの機能を、宣言的な文法で実現するRubyライブラリです。  1. メソッドの引数や戻り値のチェック  2. メソッド実行前後の簡単な条件チェック(事前条件、事後条件) 簡単な記述でさまざまな種類のチェックが行えることと プロダクション環境のパフォーマンスに、ほとんど悪影響を与えずに 導入できることの2つが大きな特徴です。 また、メソッドの実行時にチェックを行う以外にも 他ライブラリに組み込む形で、チェック機能を単体で使用することもできます。 NeuronCheckは、EiffelやD言語の契約プログラミングの考え方、およびRubype gemに インスパイアされて作られており 「実行可能なドキュメントの形で、型情報や事前条件などを記述し、その記述に応じた チェックを行えるようにする」ことを目指しています。 ■サンプルコード require 'neuroncheck' class Converter # Converterクラス内でNeuronCheckを使用可能にする extend NeuronCheck # NeuronCheckのチェック宣言部 ndecl { # メソッドに3つの引数があり、順に # 「文字列」「eachメソッドを持つ任意のオブジェクト」「数値 or nil」 # であることをチェック args String, respondable(:each), [Numeric, nil] # selfを返すメソッドであることをチェック returns :self # 事前条件のチェック。 # メソッドの呼び出し時に、引数 threshold が0以上 (非負数) でなければ # エラーを発生させる precond do assert{ threshold >= 0 } end } # 実際のメソッド定義。呼び出し時に上で宣言したチェックが行われる def convert(text, keywords, threshold = nil) # (メイン処理) end end conv = Converter.new conv.convert('text', ['Blog', 'Learning'], 0.5) # => エラーにならず、正常に実行できる conv.convert(100, ['Blog', 'Learning'], 0.5) # => 下記の例外が発生する # script.rb:34:in `
': 1st argument `text' of `Converter#convert' must be String, but was 100 (NeuronCheckError) # got: 100 # signature: Converter#convert(text:String, keywords:respondable(:each), threshold:[Numeric, nil]) -> self # declared at: script.rb:11:in `block in ' ■必要環境 Ruby 2.0.0以降が必要です。 また、一部機能(NeuronCheckSyntax)ではRefinementを使用しているため その機能を使いたい場合には、Ruby 2.1.0以降が必要になります。 ■インストール コマンドライン端末から、下記のコマンドを打ち込むことでインストールが可能です。 % gem install neuroncheck ■その他 - NeuronCheckはまだ生まれたばかりのライブラリです。 記法や実装について、ご意見やご指摘、もしくは 「こうしたほうがより良いライブラリになるのではないか」 といったご提案がありましたら、ぜひメールやWebサイトへのコメント等で  ご連絡をお願いいたします。 - ソースコードはgithubで公開しております。 https://github.com/tetradice/neuroncheck それでは、失礼します。 -- Dice tetradice@gmail.com twitter: @tetradice_ruby