[ruby-list:50286] NeuronCheck 0.1.0 リリース
From:
Dice <tetradice@...>
Date:
2016-03-13 12:30:21 UTC
List:
ruby-list #50286
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 `<main>': 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 <class:Converter>'
■必要環境
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