dango_generator 0.3.4 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
-
1
+ 
2
2
  package org.rubyforge.dango {
3
3
  /**
4
4
  * Dangoのクライアントフレームワーク本体のクラス
@@ -41,15 +41,12 @@ package org.rubyforge.dango {
41
41
  private var delay_send_timer_msec:uint = 1500; // 遅延送信用のタイマーのミリ秒
42
42
  private var delay_send_cache:Array = []; // 遅延送信用のキャッシュ
43
43
 
44
- private var receve_count:uint = 0; // データ受信回数
45
- private var receive_row_cache:Array = []; // 受信データの一時保管用のキャッシュ
46
-
47
- private var recv_not_yet_size:uint = 0; // データ受信時のキャッシュサイズ
48
- private var recv_not_yet_str:String = ""; // データ受信時のキャッシュデータ
44
+ private var receive_cache_byta:ByteArray = new ByteArray; // 受信データの保管用のキャッシュ ByteArray
45
+ private var receive_cache_do_phase:uint = 0; // 受信データをどこまで処理してあるかのキャッシュ
46
+ private var receive_encode_type:uint = 0; // 受信データのエンコードタイプ
47
+ private var receive_data_size:uint = 0; // 受信データのデータサイズ
49
48
 
50
49
  private var recv_wait_do_cache:Array = []; // 実行待ち受信キャッシュ
51
- private var recv_cache_timer_msec:uint; // 受信キャッシュ用タイマーの実行間隔
52
- private var recv_cache_timer:Timer; // 受信キャッシュ用タイマーの追加
53
50
 
54
51
  private var recv_do_count_no:uint = 0; // 受信実行の回数
55
52
  private var recv_do_timer_msec:uint; // 受信実行用タイマーの実行間隔
@@ -67,8 +64,12 @@ package org.rubyforge.dango {
67
64
  public var sid:int;
68
65
 
69
66
  /**
67
+ * DangoClientFramework
70
68
  * コンストラクタ
71
69
  *
70
+ * @param config:*
71
+ * @param disp_obj:DisplayObject = null
72
+ * @return void
72
73
  */
73
74
  public function DangoClientFramework(config:*, disp_obj:DisplayObject = null){
74
75
  // is_debug = d; // Debugモードかどうかのフラグ
@@ -149,13 +150,6 @@ package org.rubyforge.dango {
149
150
  delay_send_timer.addEventListener(TimerEvent.TIMER, delay_send_callback); // イベントリスナーの発行
150
151
  delay_send_timer.start(); // タイマーの作動開始
151
152
 
152
- // 受信キャッシュ用タイマーの設定(4フレームごとに動かすよう変更)
153
- recv_cache_timer_msec = uint((1000 * 4) / frame_rate);
154
- if(is_debug){ trace("DangoClientFramework:recv_cache_timer_msec:" + recv_cache_timer_msec); }
155
- recv_cache_timer = new Timer(recv_cache_timer_msec, 0); // タイマーの追加
156
- recv_cache_timer.addEventListener(TimerEvent.TIMER, recv_cache_callback); // イベントリスナーの発行
157
- recv_cache_timer.start(); // タイマーの作動開始
158
-
159
153
  // 受信実行用タイマーの設定(2フレームごとに動かすよう変更)
160
154
  recv_do_timer_msec = uint((1000 * 2) / frame_rate);
161
155
  if(is_debug){ trace("DangoClientFramework:recv_do_timer_msec:" + recv_do_timer_msec); }
@@ -168,14 +162,26 @@ package org.rubyforge.dango {
168
162
  this.send_action("_notice_heart_beat", { "_hb_id": hb_id}, true); // ハートビート送信
169
163
  }
170
164
 
171
- //接続イベントの処理
165
+ /**
166
+ * connectHandler
167
+ * 接続イベントの処理
168
+ *
169
+ * @param evt:Event
170
+ * @return void
171
+ */
172
172
  private function connectHandler(evt:Event):void {
173
173
  is_connect = true;
174
174
  var msg:String = "DangoClientFramework:connectHandler:" + DangoUtil.now2str();
175
175
  if(is_debug){ trace(msg); }
176
176
  }
177
177
 
178
- //切断イベントの処理
178
+ /**
179
+ * closeHandler
180
+ * 切断イベントの処理
181
+ *
182
+ * @param evt:Event
183
+ * @return void
184
+ */
179
185
  private function closeHandler(evt:Event):void {
180
186
  // タイマーが動いていれば止める
181
187
  if(polling_timer != null && polling_timer.running){ polling_timer.stop(); }
@@ -186,7 +192,13 @@ package org.rubyforge.dango {
186
192
  this.dispatchEvent(new DangoErrorEvent("DangoError", DangoErrorCode.CloseError, msg));
187
193
  }
188
194
 
189
- //セキュリティエラーイベントの処理
195
+ /**
196
+ * securityErrorHandler
197
+ * セキュリティエラーイベントの処理
198
+ *
199
+ * @param evt:Event
200
+ * @return void
201
+ */
190
202
  private function securityErrorHandler(evt:SecurityErrorEvent):void {
191
203
  // タイマーが動いていれば止める
192
204
  if(polling_timer != null && polling_timer.running){ polling_timer.stop(); }
@@ -198,7 +210,13 @@ package org.rubyforge.dango {
198
210
  this.dispatchEvent(new DangoErrorEvent("DangoError", DangoErrorCode.SecurityError, msg));
199
211
  }
200
212
 
201
- //IOエラーイベントの処理
213
+ /**
214
+ * ioErrorHandler
215
+ * IOエラーイベントの処理
216
+ *
217
+ * @param evt:Event
218
+ * @return void
219
+ */
202
220
  private function ioErrorHandler(evt:IOErrorEvent):void {
203
221
  // タイマーが動いていれば止める
204
222
  if(polling_timer != null && polling_timer.running){ polling_timer.stop(); }
@@ -209,73 +227,182 @@ package org.rubyforge.dango {
209
227
  this.dispatchEvent(new DangoErrorEvent("DangoError", DangoErrorCode.IOError, msg));
210
228
  }
211
229
 
212
- // プログレスイベントの処理(呼び出し用イベントのディスパッチ)
213
- // とにかくキャッシュに入れるだけ
230
+ /**
231
+ * socketDataHandler
232
+ * プログレスイベントの処理:実体はsocket_read_push_cache
233
+ *
234
+ * @param evt:Event
235
+ * @return void
236
+ */
214
237
  private function socketDataHandler(evt:ProgressEvent):void {
215
- receve_count ++;
216
- if(is_debug){ trace("DangoClientFramework:socketDataHandler:" + receve_count + ":start:" + DangoUtil.now2str()); }
217
- var byte_array:ByteArray = new ByteArray;
218
- socket.readBytes(byte_array, 0, socket.bytesAvailable);
219
- receive_row_cache.push([byte_array, receve_count]);
238
+ socket_read_push_cache();
220
239
  }
221
240
 
222
- // Event送出用
241
+ /**
242
+ * addEventListener
243
+ * Event送出用
244
+ *
245
+ * @param type:String
246
+ * @param listener:Function
247
+ * @param useCapture:Boolean = false
248
+ * @param priority:int = 0
249
+ * @param useWeakReference:Boolean = false
250
+ * @return void
251
+ */
223
252
  public function addEventListener(type:String, listener:Function,
224
253
  useCapture:Boolean = false,
225
254
  priority:int = 0,
226
255
  useWeakReference:Boolean = false):void{
227
256
  dispatcher.addEventListener(type, listener, useCapture, priority);
228
257
  }
258
+
259
+ /**
260
+ * dispatchEvent
261
+ * Event送出用
262
+ *
263
+ * @param evt:Event
264
+ * @return Boolean
265
+ */
229
266
  public function dispatchEvent(evt:Event):Boolean{
230
267
  return dispatcher.dispatchEvent(evt);
231
268
  }
269
+
270
+ /**
271
+ * hasEventListener
272
+ * Event送出用
273
+ *
274
+ * @param type:String
275
+ * @return Boolean
276
+ */
232
277
  public function hasEventListener(type:String):Boolean{
233
278
  return dispatcher.hasEventListener(type);
234
279
  }
280
+
281
+ /**
282
+ * removeEventListener
283
+ * Event送出用
284
+ *
285
+ * @param type:String
286
+ * @param listener:Function
287
+ * @param useCapture:Boolean = false
288
+ * @return void
289
+ */
235
290
  public function removeEventListener(type:String, listener:Function,
236
291
  useCapture:Boolean = false):void{
237
292
  dispatcher.removeEventListener(type, listener, useCapture);
238
293
  }
294
+
295
+ /**
296
+ * willTrigger
297
+ * Event送出用
298
+ *
299
+ * @param type:String
300
+ * @return Boolean
301
+ */
239
302
  public function willTrigger(type:String):Boolean {
240
303
  return dispatcher.willTrigger(type);
241
304
  }
242
305
 
243
-
244
306
  /**
245
- * recv_cache_callback
246
- * 受信データの再構成とキャッシュをする
307
+ * socket_read_push_cache
308
+ * socketDataHandlerの実体処理
309
+ * データ受信、データのパース、実行待ちキャッシュに保存
247
310
  *
248
- * @param evt:TimerEvent
311
+ * @param void
249
312
  * @return void
250
313
  */
251
- public function recv_cache_callback(evt:TimerEvent):void {
252
- // if(is_debug){ trace("DangoClientFramework:recv_cache_callback:" + DangoUtil.now2str()); }
253
-
254
- if(receive_row_cache.length > 0){
255
- if(is_debug){ trace("DangoClientFramework:recv_cache_callback:receive_row_cache.length=" + receive_row_cache.length + ":" + DangoUtil.now2str()); }
256
- var arr:Array = receive_row_cache.shift(); // Queueとして取り出し
257
- var byte_array:ByteArray = arr[0];
258
- var recv_c:uint = arr[1];
259
- // if(is_debug){ trace("DangoClientFramework:recv_c=" + recv_c); }
260
- var receive_data:Array = this.parse_notice(byte_array);
314
+ private function socket_read_push_cache():void{
315
+ if(is_debug){ trace("DangoClientFramework:socket_read_push_cache:" + DangoUtil.now2str()); }
316
+
317
+ var crlf:String = "";
318
+ var temp_byta:ByteArray = new ByteArray;
319
+
320
+ socket.readBytes(receive_cache_byta, receive_cache_byta.length, socket.bytesAvailable); // データ読み込み
321
+
322
+ while(true){
323
+ // 長さ取得処理
324
+ if(receive_cache_do_phase == 0){
325
+ if(is_debug){ trace("DangoClientFramework:socket_read_push_cache:receive_cache_do_phase == 0:" + DangoUtil.now2str()); }
326
+ if(receive_cache_byta.length < 6){ break; } // 長さの読み込みが終わっていなければ
327
+
328
+ try{
329
+ if(is_debug){ trace("DangoClientFramework:socket_read_push_cache:receive_cache_do_phase == 0:start read"); }
330
+ receive_encode_type = receive_cache_byta.readByte(); // エンコードタイプ
331
+ receive_data_size = receive_cache_byta.readUnsignedInt(); // データサイズ
332
+ crlf = receive_cache_byta.readUTFBytes(1);
333
+
334
+ if(is_debug){ trace("DangoClientFramework:socket_read_push_cache:receive_encode_type=" + receive_encode_type); }
335
+ if(is_debug){ trace("DangoClientFramework:socket_read_push_cache:receive_data_size=" + receive_data_size); }
336
+
337
+ // receive_cache_bytaの不要な部分を削除
338
+ if(is_debug){ trace("DangoClientFramework:socket_read_push_cache:length=" + receive_cache_byta.length); }
339
+ if(is_debug){ trace("DangoClientFramework:socket_read_push_cache:position=" + receive_cache_byta.position); }
340
+
341
+ if(receive_cache_byta.length - receive_cache_byta.position > 0){
342
+ receive_cache_byta.readBytes(temp_byta, 0, receive_cache_byta.length - receive_cache_byta.position);
343
+ receive_cache_byta = temp_byta;
344
+ receive_cache_byta.position = 0;
345
+ } else {
346
+ receive_cache_byta = new ByteArray;
347
+ }
348
+ if(is_debug){ trace("DangoClientFramework:socket_read_push_cache:receive_cache_do_phase == 0:end read:length=" + receive_cache_byta.length); }
349
+
350
+ } catch(err:Error){
351
+ this.dispatchEvent(new DangoErrorEvent("DangoError", DangoErrorCode.IOError, "failed in DangoClientFramework:socket_read_push_cache:receive_cache_do_phase == 0"));
352
+ break;
353
+ }
354
+
355
+ receive_cache_do_phase = 1;
356
+ }
261
357
 
262
- if(recv_not_yet_size == 0){ // 未受信データが無ければ、ひとつのデータ受信が完了とみなす
263
- if(receive_data != []){ // データが空じゃなければ処理開始
264
- for(var i:uint = 0; i < receive_data.length; i++){
265
- var notice_name:String = receive_data[i]["notice"];
266
- var recv_server_time:String = receive_data[i]["server_time"];
267
-
268
- if(is_debug){ trace("DangoClientFramework:push recv_wait_do_cache:dango_" + notice_name + ": recv_c:" + recv_c + ":" + i + " recv_server_time:" + recv_server_time); }
269
- recv_wait_do_cache.push([notice_name, receive_data[i], recv_server_time, recv_do_count_no]);
270
-
271
- recv_do_count_no ++;
358
+ // データ取得処理
359
+ if(receive_cache_do_phase == 1){
360
+ if(is_debug){ trace("DangoClientFramework:socket_read_push_cache:receive_cache_do_phase == 1:" + DangoUtil.now2str()); }
361
+ if(receive_cache_byta.length < receive_data_size){ break; } // データの読み込みが終わっていなければ
362
+
363
+ try{
364
+ if(is_debug){ trace("DangoClientFramework:socket_read_push_cache:receive_cache_do_phase == 1:start read"); }
365
+ var recv_data:String = receive_cache_byta.readUTFBytes(receive_data_size); // データ取得
366
+ if(is_debug){ trace("DangoClientFramework:socket_read_push_cache:recv_data=" + recv_data); }
367
+
368
+ // データのパースと実行待ち受信キャッシュにデータを入れる
369
+ var ret_obj_data:Array;
370
+ if(recv_data != "" && recv_data != "\n"){ // データが空じゃないならdecode
371
+ ret_obj_data = JSON.decode(recv_data) as Array;
372
+ for(var i:uint = 0; i < ret_obj_data.length; i++){
373
+ var notice_name:String = ret_obj_data[i]["notice"];
374
+ var recv_server_time:String = ret_obj_data[i]["server_time"];
375
+
376
+ if(is_debug){ trace("DangoClientFramework:push recv_wait_do_cache:dango_" + notice_name + " i=" + i + " recv_server_time=" + recv_server_time); }
377
+ recv_wait_do_cache.push([notice_name, ret_obj_data[i], recv_server_time, recv_do_count_no]);
378
+ recv_do_count_no ++;
379
+ if(is_debug){ trace("DangoClientFramework:pushed recv_wait_do_cache:recv_do_count_no=" + recv_do_count_no); }
380
+ }
381
+ } else { // データが空なら空データを作ってreturn
382
+ if(is_debug){ trace("DangoClientFramework:ret_obj_data is empty." + DangoUtil.now2str()); }
383
+ }
384
+
385
+ // receive_cache_bytaの不要な部分を削除
386
+ if(is_debug){ trace("DangoClientFramework:socket_read_push_cache:length=" + receive_cache_byta.length); }
387
+ if(is_debug){ trace("DangoClientFramework:socket_read_push_cache:position=" + receive_cache_byta.position); }
388
+
389
+ if(receive_cache_byta.length - receive_cache_byta.position > 0){
390
+ receive_cache_byta.readBytes(temp_byta, 0, receive_cache_byta.length - receive_cache_byta.position);
391
+ receive_cache_byta = temp_byta;
392
+ receive_cache_byta.position = 0;
393
+ } else {
394
+ receive_cache_byta = new ByteArray;
272
395
  }
273
- } else { // データが空なら
274
- // if(is_debug){ trace("DangoClientFramework:receive_data is empty." + DangoUtil.now2str()); }
275
- if(is_debug){ trace("DangoClientFramework:receive_data is empty."); }
396
+ if(is_debug){ trace("DangoClientFramework:socket_read_push_cache:receive_cache_do_phase == 1:end read:length=" + receive_cache_byta.length); }
397
+
398
+ } catch(err:Error){
399
+ this.dispatchEvent(new DangoErrorEvent("DangoError", DangoErrorCode.IOError, "failed in DangoClientFramework:socket_read_push_cache:receive_cache_do_phase == 1"));
400
+ break;
276
401
  }
402
+ receive_cache_do_phase = 0;
277
403
  }
278
404
  }
405
+
279
406
  }
280
407
 
281
408
  /**
@@ -323,7 +450,7 @@ package org.rubyforge.dango {
323
450
  * @return void
324
451
  */
325
452
  public function polling_callback(evt:TimerEvent):void {
326
- if(is_debug){ trace("DangoClientFramework:polling_callback:" + DangoUtil.now2str() ); }
453
+ // if(is_debug){ trace("DangoClientFramework:polling_callback:" + DangoUtil.now2str() ); }
327
454
  if(socket.connected){
328
455
  // var send_obj:Object = null;
329
456
  // this.send_data_to_server(send_obj);
@@ -348,8 +475,7 @@ package org.rubyforge.dango {
348
475
  * delay_send_callback
349
476
  * 遅延送信用タイマーコールバック
350
477
  *
351
- * @param socket:Socket
352
- * @param send_obj:Object
478
+ * @param evt:TimerEvent
353
479
  * @return void
354
480
  */
355
481
  public function delay_send_callback(evt:TimerEvent):void {
@@ -373,8 +499,9 @@ package org.rubyforge.dango {
373
499
  * send data to server.
374
500
  * クライアント側から使うサーバーへのデータ送信メソッド
375
501
  *
376
- * @param socket:Socket
502
+ * @param action_name:String
377
503
  * @param send_obj:Object
504
+ * @param delay:Boolean=false
378
505
  * @return void
379
506
  */
380
507
  public function send_action(action_name:String, send_obj:Object, delay:Boolean=false):void {
@@ -397,15 +524,14 @@ package org.rubyforge.dango {
397
524
 
398
525
  // データをすぐ送信
399
526
  this.send_data_to_server([send_obj_dup]);
400
- if(is_debug){ trace("DangoClientFramework:send_action:end:" + action_name + ":" + DangoUtil.now2str()); }
527
+ // if(is_debug){ trace("DangoClientFramework:send_action:end:" + action_name + ":" + DangoUtil.now2str()); }
401
528
  }
402
529
 
403
530
  /**
404
531
  * send data to server.
405
532
  * フレームワーク側のデータ送信の一般処理
406
533
  *
407
- * @param socket:Socket
408
- * @param send_obj:Object
534
+ * @param send_obj:Array
409
535
  * @return void
410
536
  */
411
537
  public function send_data_to_server( send_obj:Array ):void {
@@ -441,111 +567,15 @@ package org.rubyforge.dango {
441
567
  // if(is_debug){ trace("DangoClientFramework:send_obj_str:" + send_obj_str + ":" + DangoUtil.now2str()); }
442
568
  }
443
569
 
444
- /**
445
- * receive data from server.
446
- * データ受信のデータのパースなど
447
- *
448
- * @return Object
449
- */
450
- public function parse_notice(byte_array:ByteArray):Array {
451
- if(is_debug){ trace("DangoClientFramework:parse_notice:" + DangoUtil.now2str()); }
452
-
453
- // 変数定義
454
- var recv_data_orig:String = "";
455
-
456
- // まず読めるデータをすべてByteArrayに入れる
457
- // var byte_array:ByteArray = new ByteArray;
458
- // socket.readBytes(byte_array, 0, socket.bytesAvailable);
459
-
460
- // 読んだデータの長さ取得
461
- var byte_read_size:uint = byte_array.length;
462
-
463
- if(recv_not_yet_size == 0){ // 未受信データが無ければ
464
- // if(is_debug){ trace("DangoClientFramework:recv_not_yet_size==0"); }
465
-
466
- if(byte_read_size < 6){ // きちんとデータが届いていなければ
467
- this.dispatchEvent(new DangoErrorEvent("DangoError", DangoErrorCode.IOError, "byte_read_size is too short."));
468
- return([]);
469
- }
470
-
471
- // 長さを取得
472
- var byte_array_size:ByteArray = new ByteArray;
473
- try{
474
- byte_array.readBytes(byte_array_size, 0, 5);
475
- } catch(err:Error){
476
- this.dispatchEvent(new DangoErrorEvent("DangoError", DangoErrorCode.IOError, "failed to byte_array.readBytes."));
477
- return([]);
478
- }
479
-
480
- var encode_type:int = byte_array_size.readByte();
481
- recv_not_yet_size = byte_array_size.readUnsignedInt();
482
- var crlf:String = byte_array.readUTFBytes(1);
483
- byte_read_size -= 6;
484
- // if(is_debug){ trace("DangoClientFramework:recv_not_yet_size=" + recv_not_yet_size); }
485
- }
486
-
487
- // 読めているだけ読んで、その分recv_not_yet_sizeを減らす
488
- if(recv_not_yet_size > byte_read_size){
489
- // if(is_debug){ trace("DangoClientFramework:byte_read_size=" + byte_read_size); }
490
- recv_data_orig = byte_array.readUTFBytes(byte_read_size);
491
- recv_not_yet_size -= byte_read_size;
492
- }else{
493
- // if(is_debug){ trace("DangoClientFramework:recv_not_yet_size=" + recv_not_yet_size); }
494
- recv_data_orig = byte_array.readUTFBytes(recv_not_yet_size);
495
- recv_not_yet_size = 0;
496
- }
497
-
498
- // if(is_debug){ trace("DangoClientFramework:recv_data_orig:" + recv_data_orig); }
499
-
500
- // 全データを受信したかどうかを確認
501
- if(recv_not_yet_size == 0){ // 受信完了ならJSONパース
502
- var recv_data:String = recv_not_yet_str + recv_data_orig;
503
- recv_not_yet_str = "";
504
-
505
- // if(is_debug){ trace("DangoClientFramework:recieve:data=" + ObjectUtil.toString(recv_data)); }
506
-
507
- var ret_obj_data:Array;
508
- if(recv_data && recv_data != "" && recv_data != "\n"){ // データが空じゃないならdecode
509
- ret_obj_data = JSON.decode(recv_data) as Array;
510
-
511
- } else { // データが空なら空データを作ってreturn
512
- return([]);
513
- }
514
-
515
- // ret_obj_dataがObjectでnoticeが存在しているかのチェック
516
- if(!(ret_obj_data is Array) || !(ret_obj_data[0]["notice"] is String)){
517
- // if(!is_connect){ throw new DangoError("error:recieve data is invalid." , 29); }
518
- throw new DangoError("error:recieve data is invalid." , 29);
519
- }
520
-
521
- /*
522
- if(ret_obj_data["notice"] == "_notice_sid"){
523
- if(is_debug){ trace("DangoClientFramework:recieve:_notice_sid:no response:" + receve_count + ":" + DangoUtil.now2str()); }
524
- }else{
525
- var response_notice_name:String;
526
- response_notice_name = "_response";
527
- if(is_debug){ trace("DangoClientFramework:sending:response:notice_name=" + ret_obj_data["notice"] + ":" + ret_obj_data["_id"] + ":" + receve_count + ":" + DangoUtil.now2str()); }
528
-
529
- this.send_action(response_notice_name, {"_id":ret_obj_data["_id"]}); // 受信完了確認の為に空データを送る
530
- }
531
- */
532
- return(ret_obj_data);
533
-
534
- } else { // まだデータが残っているなら空を返す
535
- recv_not_yet_str += recv_data_orig;
536
- return([]);
537
- }
538
- }
539
-
540
570
  /**
541
571
  * dango_before_filter の雛形
542
572
  * すべてのdango通知の前処理用のメソッド
543
- * over writeすべし
573
+ * オーバーライドして使うもの
544
574
  *
545
575
  * @param evt:DangoReceiveEvent
546
576
  * @return void
577
+ */
547
578
  protected function dango__before_filter(evt:Object):void {
548
579
  }
549
- */
550
580
  }
551
581
  }
@@ -1,11 +1,11 @@
1
1
  //参考:http://livedocs.adobe.com/flex/2_jp/docs/wwhelp/wwhimpl/js/html/wwhelp.htm?href=Part5_ProgAS.html
2
2
 
3
3
  package org.rubyforge.dango {
4
- import flash.events.*;
5
-
6
- public class DangoError extends Error {
7
- public function DangoError(message:String, errorID:int) {
8
- super(message, errorID);
9
- }
10
- }
4
+ import flash.events.*;
5
+
6
+ public class DangoError extends Error {
7
+ public function DangoError(message:String, errorID:int) {
8
+ super(message, errorID);
9
+ }
10
+ }
11
11
  }
@@ -1,7 +1,7 @@
1
1
  package org.rubyforge.dango {
2
- public class DangoErrorCode {
3
- public static var CloseError:uint = 1; // 接続が切れたときのエラーコード
4
- public static var SecurityError:uint = 2; // セキュリティエラー(crossdomainとか)のエラーコード
5
- public static var IOError:uint = 3; // IOの失敗時のエラーコード
6
- }
2
+ public class DangoErrorCode {
3
+ public static var CloseError:uint = 1; // 接続が切れたときのエラーコード
4
+ public static var SecurityError:uint = 2; // セキュリティエラー(crossdomainとか)のエラーコード
5
+ public static var IOError:uint = 3; // IOの失敗時のエラーコード
6
+ }
7
7
  }
@@ -1,23 +1,23 @@
1
1
 
2
2
  package org.rubyforge.dango {
3
- import flash.events.*;
4
-
5
- public class DangoErrorEvent extends Event {
6
- private var dango_type:String;
7
- public var code:uint;
8
- public var message:String;
9
-
10
- public function DangoErrorEvent(type:String, code_orig:uint, message_orig:String,
11
- bubbles:Boolean = false,
12
- cancelable:Boolean = false) {
13
- dango_type = type;
14
- code = code_orig;
15
- message = message_orig;
16
- super(type, bubbles, cancelable);
17
- }
18
-
19
- public override function clone():Event {
20
- return(new DangoErrorEvent(dango_type, code, message));
21
- }
22
- }
3
+ import flash.events.*;
4
+
5
+ public class DangoErrorEvent extends Event {
6
+ private var dango_type:String;
7
+ public var code:uint;
8
+ public var message:String;
9
+
10
+ public function DangoErrorEvent(type:String, code_orig:uint, message_orig:String,
11
+ bubbles:Boolean = false,
12
+ cancelable:Boolean = false) {
13
+ dango_type = type;
14
+ code = code_orig;
15
+ message = message_orig;
16
+ super(type, bubbles, cancelable);
17
+ }
18
+
19
+ public override function clone():Event {
20
+ return(new DangoErrorEvent(dango_type, code, message));
21
+ }
22
+ }
23
23
  }
@@ -1,25 +1,25 @@
1
1
 
2
2
  package org.rubyforge.dango {
3
- import flash.events.*;
4
-
5
- public class DangoReceiveEvent extends Event {
6
- private var dango_type:String;
7
- public var receive_data:Object;
8
- public var receive_count_no:uint;
9
-
10
- public function DangoReceiveEvent(type:String,
11
- receive_data_orig:Object,
12
- receive_count_no_orig:uint,
13
- bubbles:Boolean = false,
14
- cancelable:Boolean = false) {
15
- dango_type = type;
16
- receive_data = receive_data_orig;
17
- receive_count_no = receive_count_no_orig;
18
- super(type, bubbles, cancelable);
19
- }
20
-
21
- public override function clone():Event {
22
- return(new DangoReceiveEvent(dango_type, receive_data, receive_count_no));
23
- }
24
- }
3
+ import flash.events.*;
4
+
5
+ public class DangoReceiveEvent extends Event {
6
+ private var dango_type:String;
7
+ public var receive_data:Object;
8
+ public var receive_count_no:uint;
9
+
10
+ public function DangoReceiveEvent(type:String,
11
+ receive_data_orig:Object,
12
+ receive_count_no_orig:uint,
13
+ bubbles:Boolean = false,
14
+ cancelable:Boolean = false) {
15
+ dango_type = type;
16
+ receive_data = receive_data_orig;
17
+ receive_count_no = receive_count_no_orig;
18
+ super(type, bubbles, cancelable);
19
+ }
20
+
21
+ public override function clone():Event {
22
+ return(new DangoReceiveEvent(dango_type, receive_data, receive_count_no));
23
+ }
24
+ }
25
25
  }
@@ -1,127 +1,134 @@
1
1
  package org.rubyforge.dango {
2
- /**
3
- * Dangoで利便性を高めたURLLoader
4
- *
5
- */
2
+ /**
3
+ * Dangoで利便性を高めたURLLoader
4
+ *
5
+ */
6
6
 
7
- import flash.net.*;
8
- import flash.events.*;
9
- import flash.text.*;
10
- import flash.utils.*;
11
- import flash.system.*;
12
-
13
- import flash.events.IEventDispatcher;
14
- import flash.events.EventDispatcher;
15
- import flash.events.Event;
16
-
17
- import org.rubyforge.dango.*;
18
-
19
- public class DangoURLLoader implements IEventDispatcher {
20
-
21
- private var url:String; // 取得URL
22
- private var event_name:String; // 発生させるイベント名
23
- private var is_debug:Boolean; // Debugモードかどうかのフラグ
24
-
25
- private var dispatcher:EventDispatcher; // Event送出用
26
-
27
- // URLから認証情報を取得開始
28
- public function DangoURLLoader(u:String, e:String, d:Boolean = false){
29
- if(is_debug){ trace("DangoURLLoader:start"); }
30
-
31
- // 初期設定
32
- url = u;
33
- event_name = e;
34
- is_debug = d;
35
-
36
- // データ受信準備
37
- var loader:URLLoader = new URLLoader();
38
- loader.dataFormat = URLLoaderDataFormat.TEXT;
39
-
40
- // 各種イベントの登録
41
- configureListeners(loader);
42
-
43
- // Event送出用
44
- dispatcher = new EventDispatcher(this);
45
-
46
- // データ受信
47
- var request:URLRequest = new URLRequest(url);
48
- try {
49
- loader.load(request);
50
- } catch (error:Error) {
51
- var receive_object:Object = {"status":"failed", "data":"Unable to load requested document."};
52
- this.dispatchEvent(new DangoURLLoaderEvent(event_name, receive_object));
53
- }
54
-
55
- }
56
-
57
- private function configureListeners(loader:IEventDispatcher):void {
58
- loader.addEventListener(Event.COMPLETE, completeHandler);
59
- loader.addEventListener(Event.OPEN, openHandler);
60
- loader.addEventListener(ProgressEvent.PROGRESS, progressHandler);
61
- loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
62
- loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
63
- loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
64
- }
65
-
66
- private function completeHandler(event:Event):void {
67
- var loader:URLLoader = URLLoader(event.target);
68
- if(is_debug){ trace("DangoURLLoader:completeHandler: " + loader.data); }
69
-
70
- var receive_object:Object = {"status":"success", "data":loader.data};
71
- this.dispatchEvent(new DangoURLLoaderEvent(event_name, receive_object));
72
- }
7
+ import flash.net.*;
8
+ import flash.events.*;
9
+ import flash.text.*;
10
+ import flash.utils.*;
11
+ import flash.system.*;
12
+
13
+ import flash.events.IEventDispatcher;
14
+ import flash.events.EventDispatcher;
15
+ import flash.events.Event;
16
+
17
+ import org.rubyforge.dango.*;
18
+
19
+ public class DangoURLLoader implements IEventDispatcher {
20
+
21
+ private var url:String; // 取得URL
22
+ private var event_name:String; // 発生させるイベント名
23
+ private var is_debug:Boolean; // Debugモードかどうかのフラグ
24
+
25
+ private var dispatcher:EventDispatcher; // Event送出用
26
+
27
+ /**
28
+ * DangoURLLoader
29
+ * URLから認証情報を取得開始(コンストラクタ)
30
+ *
31
+ * @param u:String
32
+ * @param e:Strin
33
+ * @param d:Boolean = false
34
+ */
35
+ public function DangoURLLoader(u:String, e:String, d:Boolean = false){
36
+ if(is_debug){ trace("DangoURLLoader:start"); }
37
+
38
+ // 初期設定
39
+ url = u;
40
+ event_name = e;
41
+ is_debug = d;
42
+
43
+ // データ受信準備
44
+ var loader:URLLoader = new URLLoader();
45
+ loader.dataFormat = URLLoaderDataFormat.TEXT;
46
+
47
+ // 各種イベントの登録
48
+ configureListeners(loader);
49
+
50
+ // Event送出用
51
+ dispatcher = new EventDispatcher(this);
52
+
53
+ // データ受信
54
+ var request:URLRequest = new URLRequest(url);
55
+ try {
56
+ loader.load(request);
57
+ } catch (error:Error) {
58
+ var receive_object:Object = {"status":"failed", "data":"Unable to load requested document."};
59
+ this.dispatchEvent(new DangoURLLoaderEvent(event_name, receive_object));
60
+ }
61
+
62
+ }
63
+
64
+ private function configureListeners(loader:IEventDispatcher):void {
65
+ loader.addEventListener(Event.COMPLETE, completeHandler);
66
+ loader.addEventListener(Event.OPEN, openHandler);
67
+ loader.addEventListener(ProgressEvent.PROGRESS, progressHandler);
68
+ loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
69
+ loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
70
+ loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
71
+ }
72
+
73
+ private function completeHandler(event:Event):void {
74
+ var loader:URLLoader = URLLoader(event.target);
75
+ if(is_debug){ trace("DangoURLLoader:completeHandler: " + loader.data); }
76
+
77
+ var receive_object:Object = {"status":"success", "data":loader.data};
78
+ this.dispatchEvent(new DangoURLLoaderEvent(event_name, receive_object));
79
+ }
73
80
 
74
- private function openHandler(event:Event):void {
75
- var msg:String = "DangoURLLoader:openHandler: " + event;
76
- if(is_debug){ trace(msg); }
77
- }
81
+ private function openHandler(event:Event):void {
82
+ var msg:String = "DangoURLLoader:openHandler: " + event;
83
+ if(is_debug){ trace(msg); }
84
+ }
78
85
 
79
- private function progressHandler(event:ProgressEvent):void {
80
- var msg:String = "DangoURLLoader:progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal;
81
- if(is_debug){ trace(msg); }
82
- }
86
+ private function progressHandler(event:ProgressEvent):void {
87
+ var msg:String = "DangoURLLoader:progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal;
88
+ if(is_debug){ trace(msg); }
89
+ }
83
90
 
84
- private function securityErrorHandler(event:SecurityErrorEvent):void {
85
- var msg:String = "DangoURLLoader:securityErrorHandler";
86
- if(is_debug){ trace(msg); }
87
-
88
- var receive_object:Object = {"status":"failed", "data":msg};
89
- this.dispatchEvent(new DangoURLLoaderEvent(event_name, receive_object));
90
- }
91
+ private function securityErrorHandler(event:SecurityErrorEvent):void {
92
+ var msg:String = "DangoURLLoader:securityErrorHandler";
93
+ if(is_debug){ trace(msg); }
94
+
95
+ var receive_object:Object = {"status":"failed", "data":msg};
96
+ this.dispatchEvent(new DangoURLLoaderEvent(event_name, receive_object));
97
+ }
91
98
 
92
- private function httpStatusHandler(event:HTTPStatusEvent):void {
93
- var msg:String = "DangoURLLoader:httpStatusHandler: " + event;
94
- if(is_debug){ trace(msg); }
95
- }
99
+ private function httpStatusHandler(event:HTTPStatusEvent):void {
100
+ var msg:String = "DangoURLLoader:httpStatusHandler: " + event;
101
+ if(is_debug){ trace(msg); }
102
+ }
96
103
 
97
- private function ioErrorHandler(event:IOErrorEvent):void {
98
- var msg:String = "DangoURLLoader:ioErrorHandler" + event;
99
- if(is_debug){ trace(msg); }
100
-
101
- var receive_object:Object = {"status":"failed", "data":msg};
102
- this.dispatchEvent(new DangoURLLoaderEvent(event_name, receive_object));
103
- }
104
-
105
- // Event送出用
106
- public function addEventListener(type:String, listener:Function,
107
- useCapture:Boolean = false,
108
- priority:int = 0,
109
- useWeakReference:Boolean = false):void{
110
- dispatcher.addEventListener(type, listener, useCapture, priority);
111
- }
112
- public function dispatchEvent(evt:Event):Boolean{
113
- return dispatcher.dispatchEvent(evt);
114
- }
115
- public function hasEventListener(type:String):Boolean{
116
- return dispatcher.hasEventListener(type);
117
- }
118
- public function removeEventListener(type:String, listener:Function,
119
- useCapture:Boolean = false):void{
120
- dispatcher.removeEventListener(type, listener, useCapture);
121
- }
122
- public function willTrigger(type:String):Boolean {
123
- return dispatcher.willTrigger(type);
124
- }
125
- }
104
+ private function ioErrorHandler(event:IOErrorEvent):void {
105
+ var msg:String = "DangoURLLoader:ioErrorHandler" + event;
106
+ if(is_debug){ trace(msg); }
107
+
108
+ var receive_object:Object = {"status":"failed", "data":msg};
109
+ this.dispatchEvent(new DangoURLLoaderEvent(event_name, receive_object));
110
+ }
111
+
112
+ // Event送出用
113
+ public function addEventListener(type:String, listener:Function,
114
+ useCapture:Boolean = false,
115
+ priority:int = 0,
116
+ useWeakReference:Boolean = false):void{
117
+ dispatcher.addEventListener(type, listener, useCapture, priority);
118
+ }
119
+ public function dispatchEvent(evt:Event):Boolean{
120
+ return dispatcher.dispatchEvent(evt);
121
+ }
122
+ public function hasEventListener(type:String):Boolean{
123
+ return dispatcher.hasEventListener(type);
124
+ }
125
+ public function removeEventListener(type:String, listener:Function,
126
+ useCapture:Boolean = false):void{
127
+ dispatcher.removeEventListener(type, listener, useCapture);
128
+ }
129
+ public function willTrigger(type:String):Boolean {
130
+ return dispatcher.willTrigger(type);
131
+ }
132
+ }
126
133
  }
127
134
 
@@ -1,29 +1,29 @@
1
1
 
2
2
  package org.rubyforge.dango {
3
- /**
4
- * Dangoで利便性を高めたURLLoaderのイベントクラス
5
- *
6
- */
7
- import flash.net.*;
8
- import flash.events.*;
3
+ /**
4
+ * Dangoで利便性を高めたURLLoaderのイベントクラス
5
+ *
6
+ */
7
+ import flash.net.*;
8
+ import flash.events.*;
9
9
 
10
- import org.rubyforge.dango.*;
11
-
12
- public class DangoURLLoaderEvent extends Event {
13
- private var dango_type:String;
14
- public var receive_object:Object;
15
-
16
- public function DangoURLLoaderEvent(type:String, receive_object_orig:Object,
17
- bubbles:Boolean = false,
18
- cancelable:Boolean = false) {
19
- dango_type = type;
20
- receive_object = receive_object_orig;
21
- super(type, bubbles, cancelable);
22
- }
23
-
24
- public override function clone():Event {
25
- return(new DangoURLLoaderEvent(dango_type, receive_object));
26
- }
27
- }
10
+ import org.rubyforge.dango.*;
11
+
12
+ public class DangoURLLoaderEvent extends Event {
13
+ private var dango_type:String;
14
+ public var receive_object:Object;
15
+
16
+ public function DangoURLLoaderEvent(type:String, receive_object_orig:Object,
17
+ bubbles:Boolean = false,
18
+ cancelable:Boolean = false) {
19
+ dango_type = type;
20
+ receive_object = receive_object_orig;
21
+ super(type, bubbles, cancelable);
22
+ }
23
+
24
+ public override function clone():Event {
25
+ return(new DangoURLLoaderEvent(dango_type, receive_object));
26
+ }
27
+ }
28
28
  }
29
29
 
@@ -1,109 +1,136 @@
1
1
 
2
2
  package org.rubyforge.dango {
3
- /**
4
- * Dangoで使っているユーティリティクラス
5
- *
6
- */
7
-
8
- import flash.utils.*;
9
- // import mx.formatters.*;
10
- import mx.utils.ObjectUtil;
11
-
12
- public class DangoUtil {
13
-
14
- // Arrayから特定アイテムを削除した結果を返す
15
- public static function array_delete(arr:Array, delete_item:*):Array {
3
+ /**
4
+ * Dangoで使っているユーティリティクラス
5
+ *
6
+ */
7
+
8
+ import flash.utils.*;
9
+ // import mx.formatters.*;
10
+ import mx.utils.ObjectUtil;
11
+
12
+ public class DangoUtil {
13
+
14
+ /**
15
+ * array_delete
16
+ * Arrayから特定アイテムを削除した結果を返す
17
+ *
18
+ * @param arr:Array
19
+ * @param delete_item:*
20
+ * @return Array
21
+ */
22
+ public static function array_delete(arr:Array, delete_item:*):Array {
16
23
 
17
- // filterメソッドだと「ABC データは破損しているため、境界外の読み取りが試行されました。」が
18
- // Flashバージョンによって出るのでforループで作り直し
24
+ // filterメソッドだと「ABC データは破損しているため、境界外の読み取りが試行されました。」が
25
+ // Flashバージョンによって出るのでforループで作り直し
19
26
  /*
20
- var filter_function:Function = function filter_function(item:*, idx:int, arr:Array):Boolean {
21
- return(item != delete_item);
22
- };
23
- return(arr.filter(filter_function));
27
+ var filter_function:Function = function filter_function(item:*, idx:int, arr:Array):Boolean {
28
+ return(item != delete_item);
29
+ };
30
+ return(arr.filter(filter_function));
24
31
  */
25
- var temp_arr:Array = [];
26
- for (var i:uint = 0; i < arr.length; i ++) {
27
- var item:* = arr[i];
28
- if (item != delete_item){
29
- temp_arr.push(item);
30
- }
31
- }
32
- return(temp_arr);
33
- }
34
-
35
- // Stringのバイト数を返す
36
- public static function string_byte_length(str:String):int {
37
- var str_size_ba:ByteArray = new ByteArray();
38
- str_size_ba.writeUTFBytes(str);
39
- var size:int = str_size_ba.length;
40
- return(size);
41
- }
42
-
43
- // Date型から日時のStringにして返す
44
- public static function date2str(date:Date):String {
45
- // var df:DateFormatter = new DateFormatter();
46
- // df.formatString = "YYYY-MM-DD HH:NN:SS";
47
- // var str:String = df.format(date);
32
+ var temp_arr:Array = [];
33
+ for (var i:uint = 0; i < arr.length; i ++) {
34
+ var item:* = arr[i];
35
+ if (item != delete_item){
36
+ temp_arr.push(item);
37
+ }
38
+ }
39
+ return(temp_arr);
40
+ }
41
+
42
+ /**
43
+ * string_byte_length
44
+ * Stringのバイト数を返す
45
+ *
46
+ * @param str:String
47
+ * @return uint
48
+ */
49
+ public static function string_byte_length(str:String):uint {
50
+ var str_size_ba:ByteArray = new ByteArray();
51
+ str_size_ba.writeUTFBytes(str);
52
+ var size:uint = str_size_ba.length;
53
+ return(size);
54
+ }
55
+
56
+ /**
57
+ * date2str
58
+ * Date型から日時のStringにして返す
59
+ *
60
+ * @param date:Date
61
+ * @return String
62
+ */
63
+ public static function date2str(date:Date):String {
64
+ // var df:DateFormatter = new DateFormatter();
65
+ // df.formatString = "YYYY-MM-DD HH:NN:SS";
66
+ // var str:String = df.format(date);
48
67
 
49
- var str:String = "" +
50
- date.getFullYear() + "-" +
51
- (date.getMonth() + 1) + "-" +
52
- date.getDate() + " " +
53
- date.getHours() + ":" +
54
- date.getMinutes() + ":" +
55
- date.getSeconds() + "." +
56
- date.getMilliseconds() + " TZ=" +
57
- (date.getTimezoneOffset() / 60);
58
- return(str);
59
- }
60
-
61
- // 現在時間を返す
62
- public static function now2str():String {
63
- return(date2str(new Date()));
64
- }
65
-
66
- // URLのQUERY_STRINGのparse
67
- public static function parse_query(query:String, parse1:String = "&", parse2:String = "="):Object {
68
- // 受信データの分解
69
- var arr_split_equal:Array;
70
- var ret_object:Object = {};
71
-
72
- var regex1:RegExp = new RegExp(parse1);
73
- var regex2:RegExp = new RegExp(parse2);
74
-
75
- var arr_split_and:Array = query.split(regex1);
76
-
77
- // trace("1");
78
- // trace(ObjectUtil.toString(arr_split_and));
79
-
80
- for (var i:uint = 0; i < arr_split_and.length; i++) {
81
- // trace("2"+i);
82
- arr_split_equal = arr_split_and[i].split(regex2);
83
- // trace("3"+i);
84
- // trace(ObjectUtil.toString(arr_split_equal));
85
- // trace(arr_split_equal[0]);
86
- // trace(arr_split_equal[1]);
87
- // trace(String(arr_split_equal[0]));
88
- // trace(String(arr_split_equal[1]));
89
- ret_object[String(arr_split_equal[0])] = String(arr_split_equal[1]);
90
- // trace("4"+i);
91
- }
92
-
93
- return(ret_object);
94
- }
95
-
96
- // parametersからflashvarsを分解してobjectに入れて返す
97
- public static function get_flashvars(app:Object):Object {
98
- var flash_vars:Object = {};
99
- var value:String;
100
- for (var key:String in app.parameters) {
101
- value = app.parameters[key];
102
- flash_vars[key] = value;
103
- }
104
-
105
- return(flash_vars);
106
- }
107
-
108
- }
68
+ var str:String = "" +
69
+ date.getFullYear() + "-" +
70
+ (date.getMonth() + 1) + "-" +
71
+ date.getDate() + " " +
72
+ date.getHours() + ":" +
73
+ date.getMinutes() + ":" +
74
+ date.getSeconds() + "." +
75
+ date.getMilliseconds() + " TZ=" +
76
+ (date.getTimezoneOffset() / 60);
77
+ return(str);
78
+ }
79
+
80
+ /**
81
+ * now2str
82
+ * 現在時間を返す
83
+ *
84
+ * @return String
85
+ */
86
+ public static function now2str():String {
87
+ return(date2str(new Date()));
88
+ }
89
+
90
+ /**
91
+ * parse_query
92
+ * URLのQUERY_STRINGのparse
93
+ *
94
+ * @param query:String
95
+ * @param parse1:String = "&"
96
+ * @param parse2:String = "="
97
+ * @return Object
98
+ */
99
+ public static function parse_query(query:String, parse1:String = "&", parse2:String = "="):Object {
100
+ // 受信データの分解
101
+ var arr_split_equal:Array;
102
+ var ret_object:Object = {};
103
+
104
+ var regex1:RegExp = new RegExp(parse1);
105
+ var regex2:RegExp = new RegExp(parse2);
106
+
107
+ var arr_split_and:Array = query.split(regex1);
108
+
109
+ for (var i:uint = 0; i < arr_split_and.length; i++) {
110
+ arr_split_equal = arr_split_and[i].split(regex2);
111
+ ret_object[String(arr_split_equal[0])] = String(arr_split_equal[1]);
112
+ }
113
+
114
+ return(ret_object);
115
+ }
116
+
117
+ /**
118
+ * get_flashvars
119
+ * parametersからflashvarsを分解してobjectに入れて返す
120
+ *
121
+ * @param app:Object
122
+ * @return Object
123
+ */
124
+ public static function get_flashvars(app:Object):Object {
125
+ var flash_vars:Object = {};
126
+ var value:String;
127
+ for (var key:String in app.parameters) {
128
+ value = app.parameters[key];
129
+ flash_vars[key] = value;
130
+ }
131
+
132
+ return(flash_vars);
133
+ }
134
+
135
+ }
109
136
  }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dango_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keisuke Minami
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-07-26 00:00:00 +09:00
12
+ date: 2008-07-28 00:00:00 +09:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency