New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DataModel.create()に、スキーマ例外の発生するオブジェクトを含む配列を渡した時、例外の発生するオブジェクトよりまえのアイテムは作られるのにイベントが発生しない。 #232

Closed
fukudayasuo opened this Issue Aug 9, 2013 · 3 comments

Comments

Projects
None yet
2 participants
@fukudayasuo
model.addEventListener('itemsChange', function(){ alert('itemsChange!') });
try{
    // 2番目の引数によって例外が発生する。
    model.create([{id:'00001', val:'1'}, {id:'00002', val:2}, {id:'00003', val:3}]);
} catch(e) {
    // 2番目の引数によって例外が発生する
}
// イベントは発生しない

model.get('00001'); // 例外発生までのアイテムは作成されている
model.get('00002') === null; // true
model.get('00003') === null; // true

アイテムが作成されているのにイベントが発生しないのはおかしいので、仕様を変更する。

@fukudayasuo

This comment has been minimized.

Show comment
Hide comment
@fukudayasuo

fukudayasuo Aug 9, 2013

途中で例外が発生した場合は、データアイテムを1つも作らない、または値をセットしないように修正します。
(create()は引数に渡したもの全て作られる(またはセットされる)か、全て作られない(セットされない)かのどっちかになります。)

アイテムの作成、またはアイテムのセット内で行っているvaliidate処理を別メソッドに切り分け、全てvalidateが通ってからcreate,setするように修正します。

また、切り分けた別メソッドを外にだし、ユーザコードからアイテム生成またはセットの前にvalidateチェックを行えるようにします。

途中で例外が発生した場合は、データアイテムを1つも作らない、または値をセットしないように修正します。
(create()は引数に渡したもの全て作られる(またはセットされる)か、全て作られない(セットされない)かのどっちかになります。)

アイテムの作成、またはアイテムのセット内で行っているvaliidate処理を別メソッドに切り分け、全てvalidateが通ってからcreate,setするように修正します。

また、切り分けた別メソッドを外にだし、ユーザコードからアイテム生成またはセットの前にvalidateチェックを行えるようにします。

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue Aug 12, 2013

fukudayasuo
#232 対応しました。
createはデータアイテムを1つも作らない、または値をセットしないように修正しました。

model.createとitem.setは、引数チェック関数を呼び出してからcreate/setを行うようにしました。

Model#validateCreate, Item#validateSetメソッドを公開し、ユーザコードからチェックをできるようにしました。

validateCreate,
validateSetは、引数をcreate/setに渡した時に例外が発生する場合はその例外オブジェクト、例外が発生しない場合はnullを返すようにしました。

残件:validateCreate/validateSetのテストケース作成。
@fukudayasuo

This comment has been minimized.

Show comment
Hide comment
@fukudayasuo

fukudayasuo Aug 12, 2013

createはデータアイテムを1つも作らない、または値をセットしないように修正しました。

model.createとitem.setは、引数チェック関数を呼び出してからcreate/setを行うようにしました。

DataModel#validateCreate, DataItem#validateSetメソッドを公開し、ユーザコードからチェックをできるようにしました。

テストケースの追加を行いました。

validateCreate/validateSetは、引数をcreate/setに渡した時に例外が発生する場合はその例外オブジェクト、例外が発生しない場合はnullを返すようにしました。

validateCreate/validateSetでは、depend項目の計算までは行いません。(depend.calcは実行しません)。
これは、calcの戻り値がチェック時とセット時で同じになるとは限らないためです。

そのため、depend.calcを実行した時に例外が発生するかどうかは実際にセットするまで分かりません。

createはデータアイテムを1つも作らない、または値をセットしないように修正しました。

model.createとitem.setは、引数チェック関数を呼び出してからcreate/setを行うようにしました。

DataModel#validateCreate, DataItem#validateSetメソッドを公開し、ユーザコードからチェックをできるようにしました。

テストケースの追加を行いました。

validateCreate/validateSetは、引数をcreate/setに渡した時に例外が発生する場合はその例外オブジェクト、例外が発生しない場合はnullを返すようにしました。

validateCreate/validateSetでは、depend項目の計算までは行いません。(depend.calcは実行しません)。
これは、calcの戻り値がチェック時とセット時で同じになるとは限らないためです。

そのため、depend.calcを実行した時に例外が発生するかどうかは実際にセットするまで分かりません。

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue Aug 12, 2013

@fukudayasuo

This comment has been minimized.

Show comment
Hide comment
@fukudayasuo

fukudayasuo Aug 12, 2013

validateCreate及びvalidateSetについては、新しくissueを作成しました。
#233

validateCreate及びvalidateSetについては、新しくissueを作成しました。
#233

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment