bdrec.rb -- Ruby Class for Blood Donation Record

これは何?

Ruby で献血記録を取り扱 うためのクラス BloodDonationRecord を作ってみました. これ を作った一番の目的は, 献血した日付と献血の種類を入力すると, 献 血できない期間を自動的に計算するようなものが欲しい ということ です.

[注意] 日付に関しては, クラス内部で date2.rb に依存した 処理が行われ ています. bdrec.rb を使うときには, 日付関係は date2.rb に定義されてい る Date クラスを使って下さい.

クラス

BloodDonationRecord (長いですね ;-) だけが定義されてま す.

定数

T2, T4, PLS, PLT, PLSPLT

献血の種類で, 順に全血 200ml, 全血 400ml, 血漿, 血小板, 血漿 + 血小板を意味します. add の 引数や dona_type の返値に使わ れます.

FEMALE, MALE

順に女性, 男性を意味します. new, change_sex の引数, sex の返値に使われます.

その他

上記以外にも, いろいろな定数が定義されています. しかし BloodDonationRecord クラスを使うだけなら, 上記以 外の定数を知る必要はありません.

メソッド

new(sex, calc, allow)

BloodDonationRecord のオブジェクトを生成します (こ の表現で正しい?). 引数の意味は, それぞれ次の通り.

sex

性別を, FEMALEMALE で指定します. デフォルトは FEMALE.

calc

献血できない日を計算するか否かを, TRUE (計 算する) か FALSE (計算しない) で指定しま す. デフォルトは TRUE. TRUE の場合は, adddelete, change_sex すると自動的に calc_cannot を 実行します. 逆に FALSE のときは, 明示的に calc_cannot を 実行しても献血できない日は計算されません.

この条件は, calc_execcalc_stop で後か ら変更することが可能です.

allow

献血できない日にも add できるかどうかを, TRUE (できる), FALSE (できない) で指定します. デフォルト は FALSE.

この条件は, allow_adddisallow_add で後から変更できます.

dona_type(date)

date に指定された日付の, 以下の情報を順にリストで 返します.

add されていない日付に対し ては, 献血の種 類として nil を返します.

cannot_list

以下のようなハッシュを返します.

ただしキーになりうるのは, 一番新しい献血日以降の日付だけとな ります. これは, 献血日が増えたときに, 指数関数的 (多分) に増大 する計算量を抑えるための仕様です (指数関数的に計算量が増大して しまうのは, 実装が悪いんですが ;-). なので, 献血できるかどうかわ からない日付に対して add する のが気持ち悪いという場合には, 一番新しい献血日以降の日付 に対してのみ add できるような スクリプトを書いて下さい.

calc_stop などで献血でき ない日の計算をしないようにしているときは, このメソッドは間違っ た結果を返す可能性があります. そのときには, calc_exec で献血できない 日の計算を許可し, calc_cannot で明示的に計算を行った上で, このメソッドを実行して下さい.

add(date, dtype)

献血した日を追加します. date は Date クラスのオブ ジェクト, dtype には 献血の種類 を指定します.

実行されると, dona_type(date) の引数に date を指定したときと同じものが返ってき ます. つまり登録に失敗したときには, リストの最初に nil が返ってきます.

delete(date)

add したデータを消去します. date には Date クラスのオブジェクトを指定します. 正しく消去された場合には, add したときに指 定した献血の種類が, 失敗したときには nil が返って きます.

calc_cannot

それまでに add されたデータを使い, 献血した 日付の中で一番新しい日付以降の, 献血できない日を計算します. 返 値はありません. 計算した結果が欲しいときには cannot_list を使って下 さい.

通常は, adddelete(date), change_sex(sex) というデー タの変更を伴うときに自動的に実行されます. しかし calc_stop を行うと このメソッドは自動的に実行されませんので, 注意して下さい. また calc_stop したときには, 明示的にこのメソッドを実行しても, 献血できない日の再計算は行わ れません.

calc_exec

adddelete(date), change_sex(sex) というメソッ ドが実行されたとき, 献血できない日の再計算を自動的に行うように します. 返値はありません. 新しくオブジェクトが生成されたときに は, デフォルトで献血できない日の再計算を自動的に行うようになり ます. 通常はこの設定をお勧めします.

calc_stop

calc_exec の逆で, 献血できない日の再計 算を 行わない ようになります. このメソッドが 実行されると, calc_cannot を明示的 に実行しても献血できない日の再計算は行われませんので, 要注意で す.

calc?

献血できない日の再計算を行う (TRUE) か否 (FALSE) かを返します.

change_sex(sex)

性別を変更します. sex には FEMALEMALE を指定します. 成功すれば引数 sex と同じ値が, 失敗 すれば nil が返ります.

sex

性別を FEMALEMALE で返します.

allow_add

calc_cannot で計算され た献血できない日, 種類の組み合わせでも add できるようになります.

disallow_add

allow_add の逆で, calc_cannot で計算され た献血できない日, 種類の組み合わせでは add できなくなります. calc_stop で献血できない 日の計算をしないようにしているときは, このメソッドを実行すると add などが正しく動作しないこと があります.

新しくオブジェクトが生成されたときには, 献血できない日, 種 類の組み合わせでは add できな いようになってます.

allowed?

献血できない日, 種類の組み合わせでも add できる (TRUE) か否 (FALSE) を返します.

changed?

adddelete, change_sex というメソッ ドが実行されたのに calc_cannot が実行されていないときに TRUE, calc_cannot が実行されて, 登録されているデータと計 算された献血できない日に矛盾がないときには FALSE が返されます.

ひとこと


m@sa.to or msato@iis.u-tokyo.ac.jp