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
のオブジェクトを生成します (こ
の表現で正しい?). 引数の意味は, それぞれ次の通り.
性別を, FEMALE
か
MALE
で指定します. デフォルトは
FEMALE
.
献血できない日を計算するか否かを, TRUE
(計
算する) か FALSE
(計算しない) で指定しま
す. デフォルトは TRUE
. TRUE
の場合は,
add
や
delete
,
change_sex
すると自動的に
calc_cannot
を
実行します. 逆に FALSE
のときは, 明示的に
calc_cannot
を
実行しても献血できない日は計算されません.
献血できない日にも add
できるかどうかを, TRUE
(できる),
FALSE
(できない) で指定します. デフォルト
は FALSE
.
この条件は,
allow_add
や
disallow_add
で後から変更できます.
dona_type(date)
date に指定された日付の, 以下の情報を順にリストで 返します.
TRUE
) か
否 (FALSE
) かTRUE
) か
否 (FALSE
) かTRUE
) か
否 (FALSE
) かTRUE
) か
否 (FALSE
) かadd
されていない日付に対し
ては, 献血の種
類として nil
を返します.
cannot_list
以下のようなハッシュを返します.
TRUE
) か否 (FALSE
) かを,
この順番で 4 つの要素にした配列ただしキーになりうるのは, 一番新しい献血日以降の日付だけとな
ります. これは, 献血日が増えたときに, 指数関数的 (多分) に増大
する計算量を抑えるための仕様です (指数関数的に計算量が増大して
しまうのは, 実装が悪いんですが ;-). なので, 献血できるかどうかわ
からない日付に対して 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
を使って下
さい.
通常は, add や
delete(date)
,
change_sex(sex)
というデー
タの変更を伴うときに自動的に実行されます. しかし
calc_stop
を行うと
このメソッドは自動的に実行されませんので, 注意して下さい.
また calc_stop
したときには,
明示的にこのメソッドを実行しても, 献血できない日の再計算は行わ
れません.
calc_exec
add や
delete(date)
,
change_sex(sex)
というメソッ
ドが実行されたとき, 献血できない日の再計算を自動的に行うように
します. 返値はありません. 新しくオブジェクトが生成されたときに
は, デフォルトで献血できない日の再計算を自動的に行うようになり
ます. 通常はこの設定をお勧めします.
calc_stop
calc_exec の逆で, 献血できない日の再計 算を 行わない ようになります. このメソッドが 実行されると, calc_cannot を明示的 に実行しても献血できない日の再計算は行われませんので, 要注意で す.
calc?
献血できない日の再計算を行う (TRUE
) か否 (FALSE
) かを返します.
change_sex(sex)
性別を変更します. sex には
FEMALE
か MALE
を指定します. 成功すれば引数 sex と同じ値が, 失敗
すれば nil
が返ります.
sex
性別を
FEMALE
か MALE
で返します.
allow_add
calc_cannot
で計算され
た献血できない日, 種類の組み合わせでも
add
できるようになります.
disallow_add
allow_add
の逆で,
calc_cannot
で計算され
た献血できない日, 種類の組み合わせでは
add
できなくなります.
calc_stop
で献血できない
日の計算をしないようにしているときは, このメソッドを実行すると
add
などが正しく動作しないこと
があります.
新しくオブジェクトが生成されたときには, 献血できない日, 種
類の組み合わせでは add
できな
いようになってます.
allowed?
献血できない日, 種類の組み合わせでも
add
できる (TRUE
) か否 (FALSE
) を返します.
changed?
add
や
delete
,
change_sex
というメソッ
ドが実行されたのに
calc_cannot
が実行されていないときに
TRUE
,
calc_cannot
が実行されて, 登録されているデータと計
算された献血できない日に矛盾がないときには FALSE
が返されます.
Copyright (C) 1999, Masahiro SATO