jiji 1.2.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (670) hide show
  1. data/ChangeLog +58 -0
  2. data/README +1 -0
  3. data/base/agents/moving_average_agent.rb +78 -0
  4. data/base/shared_lib/moving_average.rb +35 -0
  5. data/base/shared_lib/system/cross.rb +76 -0
  6. data/base/shared_lib/system/position_manager.rb +160 -0
  7. data/base/shared_lib/system/signal.rb +347 -0
  8. data/bin/jiji +5 -0
  9. data/html/css/calendar.css +432 -0
  10. data/html/css/datatable.css +299 -0
  11. data/html/css/default.css +627 -0
  12. data/html/css/dialog.css +77 -0
  13. data/html/css/treeview.css +205 -0
  14. data/html/img/auto_trade_off.gif +0 -0
  15. data/html/img/auto_trade_on.gif +0 -0
  16. data/html/img/back_bottom.gif +0 -0
  17. data/html/img/back_middle.gif +0 -0
  18. data/html/img/back_top.gif +0 -0
  19. data/html/img/bin_closed.png +0 -0
  20. data/html/img/bin_empty.png +0 -0
  21. data/html/img/bt-create-title-1.gif +0 -0
  22. data/html/img/bt-create-title-2.gif +0 -0
  23. data/html/img/bt-create-title-3.gif +0 -0
  24. data/html/img/button_add.gif +0 -0
  25. data/html/img/button_add_gray.gif +0 -0
  26. data/html/img/button_add_over.gif +0 -0
  27. data/html/img/button_add_small.gif +0 -0
  28. data/html/img/button_add_small_gray.gif +0 -0
  29. data/html/img/button_add_small_over.gif +0 -0
  30. data/html/img/button_apply.gif +0 -0
  31. data/html/img/button_apply_gray.gif +0 -0
  32. data/html/img/button_apply_over.gif +0 -0
  33. data/html/img/button_calendar.gif +0 -0
  34. data/html/img/button_calendar_over.gif +0 -0
  35. data/html/img/button_cancel.gif +0 -0
  36. data/html/img/button_cancel.jpg +0 -0
  37. data/html/img/button_cancel_gray.gif +0 -0
  38. data/html/img/button_cancel_over.gif +0 -0
  39. data/html/img/button_cancel_over.jpg +0 -0
  40. data/html/img/button_close.gif +0 -0
  41. data/html/img/button_close_gray.gif +0 -0
  42. data/html/img/button_close_over.gif +0 -0
  43. data/html/img/button_mkcol.gif +0 -0
  44. data/html/img/button_mkcol_gray.gif +0 -0
  45. data/html/img/button_mkcol_over.gif +0 -0
  46. data/html/img/button_no.gif +0 -0
  47. data/html/img/button_no_gray.gif +0 -0
  48. data/html/img/button_no_over.gif +0 -0
  49. data/html/img/button_ok.gif +0 -0
  50. data/html/img/button_ok_gray.gif +0 -0
  51. data/html/img/button_ok_over.gif +0 -0
  52. data/html/img/button_remove.gif +0 -0
  53. data/html/img/button_remove_gray.gif +0 -0
  54. data/html/img/button_remove_over.gif +0 -0
  55. data/html/img/button_remove_small.gif +0 -0
  56. data/html/img/button_remove_small_gray.gif +0 -0
  57. data/html/img/button_remove_small_over.gif +0 -0
  58. data/html/img/button_rename.gif +0 -0
  59. data/html/img/button_rename_gray.gif +0 -0
  60. data/html/img/button_rename_over.gif +0 -0
  61. data/html/img/button_save.gif +0 -0
  62. data/html/img/button_save_gray.gif +0 -0
  63. data/html/img/button_save_over.gif +0 -0
  64. data/html/img/button_start.gif +0 -0
  65. data/html/img/button_start_over.gif +0 -0
  66. data/html/img/button_update.gif +0 -0
  67. data/html/img/button_update_gray.gif +0 -0
  68. data/html/img/button_update_over.gif +0 -0
  69. data/html/img/button_update_s.gif +0 -0
  70. data/html/img/button_update_s_gray.gif +0 -0
  71. data/html/img/button_update_s_over.gif +0 -0
  72. data/html/img/button_yes.gif +0 -0
  73. data/html/img/button_yes_gray.gif +0 -0
  74. data/html/img/button_yes_over.gif +0 -0
  75. data/html/img/circle.gif +0 -0
  76. data/html/img/control_play.png +0 -0
  77. data/html/img/control_play_blue.png +0 -0
  78. data/html/img/delta.gif +0 -0
  79. data/html/img/dialog_info.jpg +0 -0
  80. data/html/img/dialog_input.jpg +0 -0
  81. data/html/img/dialog_warn.jpg +0 -0
  82. data/html/img/dt-arrow-dn.png +0 -0
  83. data/html/img/dt-arrow-up.png +0 -0
  84. data/html/img/folder.png +0 -0
  85. data/html/img/folder_brick.png +0 -0
  86. data/html/img/folder_user.png +0 -0
  87. data/html/img/foot.jpg +0 -0
  88. data/html/img/goto.gif +0 -0
  89. data/html/img/goto_o.gif +0 -0
  90. data/html/img/h3_bt-create_0.gif +0 -0
  91. data/html/img/h3_bt-create_1.gif +0 -0
  92. data/html/img/h3_bt-create_2.gif +0 -0
  93. data/html/img/h3_result_0.gif +0 -0
  94. data/html/img/h3_result_1.gif +0 -0
  95. data/html/img/h3_result_2.gif +0 -0
  96. data/html/img/h3_result_3.gif +0 -0
  97. data/html/img/h3_result_4.gif +0 -0
  98. data/html/img/h3_result_5.gif +0 -0
  99. data/html/img/h3_result_6.gif +0 -0
  100. data/html/img/h3_rt-setting_0.gif +0 -0
  101. data/html/img/h3_rt-setting_1.gif +0 -0
  102. data/html/img/head.jpg +0 -0
  103. data/html/img/line-numbers.png +0 -0
  104. data/html/img/line_white.gif +0 -0
  105. data/html/img/loading.gif +0 -0
  106. data/html/img/page_white_ruby.png +0 -0
  107. data/html/img/panel_100_bottom.gif +0 -0
  108. data/html/img/panel_100_middle.gif +0 -0
  109. data/html/img/panel_100_top.gif +0 -0
  110. data/html/img/panel_140_650_b.gif +0 -0
  111. data/html/img/panel_140_650_m.gif +0 -0
  112. data/html/img/panel_140_650_t.gif +0 -0
  113. data/html/img/panel_140_660_b.gif +0 -0
  114. data/html/img/panel_140_660_m.gif +0 -0
  115. data/html/img/panel_140_660_t.gif +0 -0
  116. data/html/img/panel_140_b.gif +0 -0
  117. data/html/img/panel_140_m.gif +0 -0
  118. data/html/img/panel_140_t.gif +0 -0
  119. data/html/img/panel_260_b.gif +0 -0
  120. data/html/img/panel_260_m.gif +0 -0
  121. data/html/img/panel_260_t.gif +0 -0
  122. data/html/img/panel_300_b.gif +0 -0
  123. data/html/img/panel_300_m.gif +0 -0
  124. data/html/img/panel_300_t.gif +0 -0
  125. data/html/img/panel_320_b.gif +0 -0
  126. data/html/img/panel_320_m.gif +0 -0
  127. data/html/img/panel_320_t.gif +0 -0
  128. data/html/img/panel_360_b.gif +0 -0
  129. data/html/img/panel_360_m.gif +0 -0
  130. data/html/img/panel_360_t.gif +0 -0
  131. data/html/img/panel_380_b.gif +0 -0
  132. data/html/img/panel_380_m.gif +0 -0
  133. data/html/img/panel_380_t.gif +0 -0
  134. data/html/img/panel_500_b.gif +0 -0
  135. data/html/img/panel_500_m.gif +0 -0
  136. data/html/img/panel_500_t.gif +0 -0
  137. data/html/img/panel_620_b.gif +0 -0
  138. data/html/img/panel_620_m.gif +0 -0
  139. data/html/img/panel_620_t.gif +0 -0
  140. data/html/img/panel_780_b.gif +0 -0
  141. data/html/img/panel_780_m.gif +0 -0
  142. data/html/img/panel_780_t.gif +0 -0
  143. data/html/img/problem.gif +0 -0
  144. data/html/img/progressbar.gif +0 -0
  145. data/html/img/result-title-1-1.gif +0 -0
  146. data/html/img/result-title-1-2.gif +0 -0
  147. data/html/img/result-title-2-1.gif +0 -0
  148. data/html/img/result-title-2-2.gif +0 -0
  149. data/html/img/result-title-3-1.gif +0 -0
  150. data/html/img/result-title-4-1.gif +0 -0
  151. data/html/img/rt-setting-title-1.gif +0 -0
  152. data/html/img/rt-setting-title-2.gif +0 -0
  153. data/html/img/s.gif +0 -0
  154. data/html/img/scroll.gif +0 -0
  155. data/html/img/separator.gif +0 -0
  156. data/html/img/sidebar_agent.png +0 -0
  157. data/html/img/sidebar_agent_edit.png +0 -0
  158. data/html/img/sidebar_agent_edit_agent.png +0 -0
  159. data/html/img/sidebar_agent_edit_agent_over.png +0 -0
  160. data/html/img/sidebar_agent_edit_agent_s.png +0 -0
  161. data/html/img/sidebar_agent_edit_over.png +0 -0
  162. data/html/img/sidebar_agent_edit_s.png +0 -0
  163. data/html/img/sidebar_agent_edit_shared_lib.png +0 -0
  164. data/html/img/sidebar_agent_edit_shared_lib_over.png +0 -0
  165. data/html/img/sidebar_agent_edit_shared_lib_s.png +0 -0
  166. data/html/img/sidebar_back.gif +0 -0
  167. data/html/img/sidebar_bt.png +0 -0
  168. data/html/img/sidebar_bt_create.png +0 -0
  169. data/html/img/sidebar_bt_create_over.png +0 -0
  170. data/html/img/sidebar_bt_create_s.png +0 -0
  171. data/html/img/sidebar_bt_result.png +0 -0
  172. data/html/img/sidebar_bt_result_over.png +0 -0
  173. data/html/img/sidebar_bt_result_s.png +0 -0
  174. data/html/img/sidebar_result_rmt.png +0 -0
  175. data/html/img/sidebar_result_rmt_over.png +0 -0
  176. data/html/img/sidebar_result_rmt_s.png +0 -0
  177. data/html/img/sidebar_rt.png +0 -0
  178. data/html/img/sidebar_rt_setting.png +0 -0
  179. data/html/img/sidebar_rt_setting_over.png +0 -0
  180. data/html/img/sidebar_rt_setting_s.png +0 -0
  181. data/html/img/sprite.png +0 -0
  182. data/html/img/submenu_agents.png +0 -0
  183. data/html/img/submenu_agents_over.png +0 -0
  184. data/html/img/submenu_agents_s.png +0 -0
  185. data/html/img/submenu_graph.png +0 -0
  186. data/html/img/submenu_graph_over.png +0 -0
  187. data/html/img/submenu_graph_s.png +0 -0
  188. data/html/img/submenu_info.png +0 -0
  189. data/html/img/submenu_info_over.png +0 -0
  190. data/html/img/submenu_info_s.png +0 -0
  191. data/html/img/submenu_log.png +0 -0
  192. data/html/img/submenu_log_over.png +0 -0
  193. data/html/img/submenu_log_s.png +0 -0
  194. data/html/img/submenu_operation.png +0 -0
  195. data/html/img/submenu_operation_over.png +0 -0
  196. data/html/img/submenu_operation_s.png +0 -0
  197. data/html/img/submenu_trade.png +0 -0
  198. data/html/img/submenu_trade_over.png +0 -0
  199. data/html/img/submenu_trade_s.png +0 -0
  200. data/html/img/td_over.gif +0 -0
  201. data/html/img/td_over_d.gif +0 -0
  202. data/html/img/td_selected.gif +0 -0
  203. data/html/img/thead.gif +0 -0
  204. data/html/img/transparent.gif +0 -0
  205. data/html/img/yui/treeview-sprite.gif +0 -0
  206. data/html/index.html +492 -0
  207. data/html/js/agent-editor/agent-editor-page.js +324 -0
  208. data/html/js/agent-editor/agent-editor.js +363 -0
  209. data/html/js/agent-editor/agent-list-tree.js +251 -0
  210. data/html/js/agent-selector.js +666 -0
  211. data/html/js/app.js +198 -0
  212. data/html/js/bt-create-page.js +205 -0
  213. data/html/js/container-min.js +1 -0
  214. data/html/js/container-utils.js +78 -0
  215. data/html/js/container.js +944 -0
  216. data/html/js/dialog.js +279 -0
  217. data/html/js/edit_area/autocompletion.js +491 -0
  218. data/html/js/edit_area/edit_area.css +546 -0
  219. data/html/js/edit_area/edit_area.js +539 -0
  220. data/html/js/edit_area/edit_area_compressor.php +408 -0
  221. data/html/js/edit_area/edit_area_full.gz +0 -0
  222. data/html/js/edit_area/edit_area_full.js +38 -0
  223. data/html/js/edit_area/edit_area_full_with_plugins.gz +0 -0
  224. data/html/js/edit_area/edit_area_full_with_plugins.js +39 -0
  225. data/html/js/edit_area/edit_area_functions.js +1205 -0
  226. data/html/js/edit_area/edit_area_loader.js +1082 -0
  227. data/html/js/edit_area/elements_functions.js +334 -0
  228. data/html/js/edit_area/highlight.js +391 -0
  229. data/html/js/edit_area/images/autocompletion.gif +0 -0
  230. data/html/js/edit_area/images/close.gif +0 -0
  231. data/html/js/edit_area/images/fullscreen.gif +0 -0
  232. data/html/js/edit_area/images/go_to_line.gif +0 -0
  233. data/html/js/edit_area/images/goto.png +0 -0
  234. data/html/js/edit_area/images/help.gif +0 -0
  235. data/html/js/edit_area/images/help.png +0 -0
  236. data/html/js/edit_area/images/highlight.gif +0 -0
  237. data/html/js/edit_area/images/load.gif +0 -0
  238. data/html/js/edit_area/images/move.gif +0 -0
  239. data/html/js/edit_area/images/newdocument.gif +0 -0
  240. data/html/js/edit_area/images/opacity.png +0 -0
  241. data/html/js/edit_area/images/processing.gif +0 -0
  242. data/html/js/edit_area/images/redo.gif +0 -0
  243. data/html/js/edit_area/images/redo.png +0 -0
  244. data/html/js/edit_area/images/reset_highlight.gif +0 -0
  245. data/html/js/edit_area/images/save.gif +0 -0
  246. data/html/js/edit_area/images/save.png +0 -0
  247. data/html/js/edit_area/images/search.gif +0 -0
  248. data/html/js/edit_area/images/search.png +0 -0
  249. data/html/js/edit_area/images/smooth_selection.gif +0 -0
  250. data/html/js/edit_area/images/spacer.gif +0 -0
  251. data/html/js/edit_area/images/statusbar_resize.gif +0 -0
  252. data/html/js/edit_area/images/undo.gif +0 -0
  253. data/html/js/edit_area/images/undo.png +0 -0
  254. data/html/js/edit_area/images/word_wrap.gif +0 -0
  255. data/html/js/edit_area/keyboard.js +145 -0
  256. data/html/js/edit_area/langs/bg.js +73 -0
  257. data/html/js/edit_area/langs/cs.js +67 -0
  258. data/html/js/edit_area/langs/de.js +67 -0
  259. data/html/js/edit_area/langs/dk.js +67 -0
  260. data/html/js/edit_area/langs/en.js +67 -0
  261. data/html/js/edit_area/langs/eo.js +67 -0
  262. data/html/js/edit_area/langs/es.js +64 -0
  263. data/html/js/edit_area/langs/fi.js +67 -0
  264. data/html/js/edit_area/langs/fr.js +67 -0
  265. data/html/js/edit_area/langs/hr.js +67 -0
  266. data/html/js/edit_area/langs/it.js +67 -0
  267. data/html/js/edit_area/langs/ja.js +67 -0
  268. data/html/js/edit_area/langs/mk.js +67 -0
  269. data/html/js/edit_area/langs/nl.js +67 -0
  270. data/html/js/edit_area/langs/pl.js +67 -0
  271. data/html/js/edit_area/langs/pt.js +67 -0
  272. data/html/js/edit_area/langs/ru.js +67 -0
  273. data/html/js/edit_area/langs/sk.js +67 -0
  274. data/html/js/edit_area/langs/zh.js +67 -0
  275. data/html/js/edit_area/license_apache.txt +7 -0
  276. data/html/js/edit_area/license_bsd.txt +10 -0
  277. data/html/js/edit_area/license_lgpl.txt +458 -0
  278. data/html/js/edit_area/manage_area.js +623 -0
  279. data/html/js/edit_area/plugins/charmap/charmap.js +90 -0
  280. data/html/js/edit_area/plugins/charmap/css/charmap.css +64 -0
  281. data/html/js/edit_area/plugins/charmap/images/charmap.gif +0 -0
  282. data/html/js/edit_area/plugins/charmap/jscripts/map.js +373 -0
  283. data/html/js/edit_area/plugins/charmap/langs/bg.js +12 -0
  284. data/html/js/edit_area/plugins/charmap/langs/cs.js +6 -0
  285. data/html/js/edit_area/plugins/charmap/langs/de.js +6 -0
  286. data/html/js/edit_area/plugins/charmap/langs/dk.js +6 -0
  287. data/html/js/edit_area/plugins/charmap/langs/en.js +6 -0
  288. data/html/js/edit_area/plugins/charmap/langs/eo.js +6 -0
  289. data/html/js/edit_area/plugins/charmap/langs/es.js +6 -0
  290. data/html/js/edit_area/plugins/charmap/langs/fr.js +6 -0
  291. data/html/js/edit_area/plugins/charmap/langs/hr.js +6 -0
  292. data/html/js/edit_area/plugins/charmap/langs/it.js +6 -0
  293. data/html/js/edit_area/plugins/charmap/langs/ja.js +6 -0
  294. data/html/js/edit_area/plugins/charmap/langs/mk.js +6 -0
  295. data/html/js/edit_area/plugins/charmap/langs/nl.js +6 -0
  296. data/html/js/edit_area/plugins/charmap/langs/pl.js +6 -0
  297. data/html/js/edit_area/plugins/charmap/langs/pt.js +6 -0
  298. data/html/js/edit_area/plugins/charmap/langs/ru.js +6 -0
  299. data/html/js/edit_area/plugins/charmap/langs/sk.js +6 -0
  300. data/html/js/edit_area/plugins/charmap/langs/zh.js +6 -0
  301. data/html/js/edit_area/plugins/charmap/popup.html +24 -0
  302. data/html/js/edit_area/plugins/test/css/test.css +3 -0
  303. data/html/js/edit_area/plugins/test/images/Thumbs.db +0 -0
  304. data/html/js/edit_area/plugins/test/images/test.gif +0 -0
  305. data/html/js/edit_area/plugins/test/langs/bg.js +10 -0
  306. data/html/js/edit_area/plugins/test/langs/cs.js +4 -0
  307. data/html/js/edit_area/plugins/test/langs/de.js +4 -0
  308. data/html/js/edit_area/plugins/test/langs/dk.js +4 -0
  309. data/html/js/edit_area/plugins/test/langs/en.js +4 -0
  310. data/html/js/edit_area/plugins/test/langs/eo.js +4 -0
  311. data/html/js/edit_area/plugins/test/langs/es.js +4 -0
  312. data/html/js/edit_area/plugins/test/langs/fr.js +4 -0
  313. data/html/js/edit_area/plugins/test/langs/hr.js +4 -0
  314. data/html/js/edit_area/plugins/test/langs/it.js +4 -0
  315. data/html/js/edit_area/plugins/test/langs/ja.js +4 -0
  316. data/html/js/edit_area/plugins/test/langs/mk.js +4 -0
  317. data/html/js/edit_area/plugins/test/langs/nl.js +4 -0
  318. data/html/js/edit_area/plugins/test/langs/pl.js +4 -0
  319. data/html/js/edit_area/plugins/test/langs/pt.js +4 -0
  320. data/html/js/edit_area/plugins/test/langs/ru.js +4 -0
  321. data/html/js/edit_area/plugins/test/langs/sk.js +4 -0
  322. data/html/js/edit_area/plugins/test/langs/zh.js +4 -0
  323. data/html/js/edit_area/plugins/test/test.js +110 -0
  324. data/html/js/edit_area/plugins/test/test2.js +1 -0
  325. data/html/js/edit_area/reg_syntax/basic.js +69 -0
  326. data/html/js/edit_area/reg_syntax/brainfuck.js +44 -0
  327. data/html/js/edit_area/reg_syntax/c.js +62 -0
  328. data/html/js/edit_area/reg_syntax/coldfusion.js +119 -0
  329. data/html/js/edit_area/reg_syntax/cpp.js +65 -0
  330. data/html/js/edit_area/reg_syntax/css.js +84 -0
  331. data/html/js/edit_area/reg_syntax/html.js +50 -0
  332. data/html/js/edit_area/reg_syntax/java.js +56 -0
  333. data/html/js/edit_area/reg_syntax/js.js +93 -0
  334. data/html/js/edit_area/reg_syntax/pas.js +82 -0
  335. data/html/js/edit_area/reg_syntax/perl.js +88 -0
  336. data/html/js/edit_area/reg_syntax/php.js +156 -0
  337. data/html/js/edit_area/reg_syntax/python.js +144 -0
  338. data/html/js/edit_area/reg_syntax/robotstxt.js +24 -0
  339. data/html/js/edit_area/reg_syntax/ruby.js +67 -0
  340. data/html/js/edit_area/reg_syntax/sql.js +55 -0
  341. data/html/js/edit_area/reg_syntax/tsql.js +87 -0
  342. data/html/js/edit_area/reg_syntax/vb.js +52 -0
  343. data/html/js/edit_area/reg_syntax/xml.js +56 -0
  344. data/html/js/edit_area/reg_syntax.js +166 -0
  345. data/html/js/edit_area/regexp.js +139 -0
  346. data/html/js/edit_area/resize_area.js +78 -0
  347. data/html/js/edit_area/search_replace.js +174 -0
  348. data/html/js/edit_area/template.html +101 -0
  349. data/html/js/json-broker-client.js +67 -0
  350. data/html/js/page-manager.js +93 -0
  351. data/html/js/prototype.js +4184 -0
  352. data/html/js/result-page.js +775 -0
  353. data/html/js/rt-setting-page.js +152 -0
  354. data/html/js/sidebar.js +263 -0
  355. data/html/js/templates.js +386 -0
  356. data/html/js/utils.js +890 -0
  357. data/html/js/uuid.js +103 -0
  358. data/html/js/yui/treeview.js +3671 -0
  359. data/html/swf/chart.swf +0 -0
  360. data/html/test/agent_editor_spec.js +815 -0
  361. data/html/test/index.html +40 -0
  362. data/html/test/jsspec/JSSpec.css +224 -0
  363. data/html/test/jsspec/JSSpec.js +1549 -0
  364. data/html/test/jsspec/diff_match_patch.js +1 -0
  365. data/html/test/utils_spec.js +111 -0
  366. data/lib/jiji/agent/agent.rb +149 -0
  367. data/lib/jiji/agent/agent_manager.rb +138 -0
  368. data/lib/jiji/agent/agent_registry.rb +165 -0
  369. data/lib/jiji/agent/permitter.rb +128 -0
  370. data/lib/jiji/agent/util.rb +16 -0
  371. data/lib/jiji/collector.rb +226 -0
  372. data/lib/jiji/command.rb +204 -0
  373. data/lib/jiji/configuration.rb +86 -0
  374. data/lib/jiji/dao/file_system_dao.rb +158 -0
  375. data/lib/jiji/dao/rate_dao.rb +149 -0
  376. data/lib/jiji/dao/timed_data_dao.rb +336 -0
  377. data/lib/jiji/dao/trade_result_dao.rb +128 -0
  378. data/lib/jiji/error.rb +49 -0
  379. data/lib/jiji/migration/migrator.rb +50 -0
  380. data/lib/jiji/migration/migrator1_0_3.rb +26 -0
  381. data/lib/jiji/migration/migrator1_1_0.rb +46 -0
  382. data/lib/jiji/migration/migrator1_2_0.rb +67 -0
  383. data/lib/jiji/models.rb +223 -0
  384. data/lib/jiji/observer.rb +105 -0
  385. data/lib/jiji/operator.rb +396 -0
  386. data/lib/jiji/output.rb +221 -0
  387. data/lib/jiji/output_manager.rb +84 -0
  388. data/lib/jiji/plugin/embedded/click_securities_demo_plugin.rb +141 -0
  389. data/lib/jiji/plugin/embedded/single_click_client.rb +116 -0
  390. data/lib/jiji/plugin/plugin_loader.rb +53 -0
  391. data/lib/jiji/plugin/securities_plugin.rb +134 -0
  392. data/lib/jiji/process.rb +234 -0
  393. data/lib/jiji/process_manager.rb +290 -0
  394. data/lib/jiji/registry.rb +349 -0
  395. data/lib/jiji/server.rb +127 -0
  396. data/lib/jiji/service/agent_service.rb +230 -0
  397. data/lib/jiji/service/hello_service.rb +10 -0
  398. data/lib/jiji/service/output_service.rb +82 -0
  399. data/lib/jiji/service/process_service.rb +76 -0
  400. data/lib/jiji/service/rate_service.rb +38 -0
  401. data/lib/jiji/service/system_service.rb +14 -0
  402. data/lib/jiji/service/trade_result_service.rb +31 -0
  403. data/lib/jiji/util/backtester.rb +116 -0
  404. data/lib/jiji/util/block_to_session.rb +70 -0
  405. data/lib/jiji/util/cache.rb +79 -0
  406. data/lib/jiji/util/csv_append_support.rb +15 -0
  407. data/lib/jiji/util/file_lock.rb +86 -0
  408. data/lib/jiji/util/fix_yaml_bug.rb +11 -0
  409. data/lib/jiji/util/include_proxy.rb +17 -0
  410. data/lib/jiji/util/iterator.rb +70 -0
  411. data/lib/jiji/util/json_broker.rb +55 -0
  412. data/lib/jiji/util/json_rpc_requestor.rb +30 -0
  413. data/lib/jiji/util/rate_data_importer.rb +219 -0
  414. data/lib/jiji/util/synchronize_interceptor.rb +41 -0
  415. data/lib/jiji/util/thread_use_generator.rb +52 -0
  416. data/lib/jiji/util/util.rb +112 -0
  417. data/lib/jiji_plugin.rb +6 -0
  418. data/swf/build.xml +23 -0
  419. data/swf/chart/FxChart-config.xml +9 -0
  420. data/swf/chart/FxChart.mxml +17 -0
  421. data/swf/chart/fx/chart/Chart.as +173 -0
  422. data/swf/chart/fx/chart/ctrl/AutoUpdate.as +96 -0
  423. data/swf/chart/fx/chart/ctrl/Controller.as +270 -0
  424. data/swf/chart/fx/chart/ctrl/Event.as +75 -0
  425. data/swf/chart/fx/chart/model/Model.as +228 -0
  426. data/swf/chart/fx/chart/model/TimedData.as +40 -0
  427. data/swf/chart/fx/chart/ui/AbstractChartUI.as +59 -0
  428. data/swf/chart/fx/chart/ui/AbstractDrawChartUI.as +63 -0
  429. data/swf/chart/fx/chart/ui/Constants.as +233 -0
  430. data/swf/chart/fx/chart/ui/InformationWindow.as +228 -0
  431. data/swf/chart/fx/chart/ui/LayerManager.as +95 -0
  432. data/swf/chart/fx/chart/ui/Loading.as +32 -0
  433. data/swf/chart/fx/chart/ui/Pointer.as +61 -0
  434. data/swf/chart/fx/chart/ui/RangeInfoWindow.as +84 -0
  435. data/swf/chart/fx/chart/ui/RenderingContext.as +54 -0
  436. data/swf/chart/fx/chart/ui/ScaleSelector.as +84 -0
  437. data/swf/chart/fx/chart/ui/Scroll.as +241 -0
  438. data/swf/chart/fx/chart/ui/ScrollBar.as +378 -0
  439. data/swf/chart/fx/chart/ui/Stage.as +97 -0
  440. data/swf/chart/fx/chart/ui/TradeDetailWindow.as +147 -0
  441. data/swf/chart/fx/chart/ui/TradeResult.as +330 -0
  442. data/swf/chart/fx/chart/ui/Window.as +96 -0
  443. data/swf/chart/fx/chart/ui/candle/Axis.as +112 -0
  444. data/swf/chart/fx/chart/ui/candle/Candle.as +79 -0
  445. data/swf/chart/fx/chart/ui/candle/CandleChart.as +81 -0
  446. data/swf/chart/fx/chart/ui/graph/Graph.as +200 -0
  447. data/swf/chart/fx/chart/ui/graph/GraphManager.as +192 -0
  448. data/swf/chart/fx/chart/ui/resource/buy.gif +0 -0
  449. data/swf/chart/fx/chart/ui/resource/cursor_hand.gif +0 -0
  450. data/swf/chart/fx/chart/ui/resource/diff_label.gif +0 -0
  451. data/swf/chart/fx/chart/ui/resource/down.gif +0 -0
  452. data/swf/chart/fx/chart/ui/resource/down_buy.gif +0 -0
  453. data/swf/chart/fx/chart/ui/resource/down_buy_1.gif +0 -0
  454. data/swf/chart/fx/chart/ui/resource/down_buy_2.gif +0 -0
  455. data/swf/chart/fx/chart/ui/resource/down_buy_3.gif +0 -0
  456. data/swf/chart/fx/chart/ui/resource/down_sell.gif +0 -0
  457. data/swf/chart/fx/chart/ui/resource/down_sell_1.gif +0 -0
  458. data/swf/chart/fx/chart/ui/resource/down_sell_2.gif +0 -0
  459. data/swf/chart/fx/chart/ui/resource/down_sell_3.gif +0 -0
  460. data/swf/chart/fx/chart/ui/resource/draw_buy.gif +0 -0
  461. data/swf/chart/fx/chart/ui/resource/draw_sell.gif +0 -0
  462. data/swf/chart/fx/chart/ui/resource/end_label.gif +0 -0
  463. data/swf/chart/fx/chart/ui/resource/fixed.gif +0 -0
  464. data/swf/chart/fx/chart/ui/resource/loading.gif +0 -0
  465. data/swf/chart/fx/chart/ui/resource/max_label.gif +0 -0
  466. data/swf/chart/fx/chart/ui/resource/min_label.gif +0 -0
  467. data/swf/chart/fx/chart/ui/resource/scroll_bar.gif +0 -0
  468. data/swf/chart/fx/chart/ui/resource/scroll_bar_a.gif +0 -0
  469. data/swf/chart/fx/chart/ui/resource/scroll_bar_handle.gif +0 -0
  470. data/swf/chart/fx/chart/ui/resource/scroll_bar_handle_a.gif +0 -0
  471. data/swf/chart/fx/chart/ui/resource/scroll_bar_handle_o.gif +0 -0
  472. data/swf/chart/fx/chart/ui/resource/scroll_bar_left.gif +0 -0
  473. data/swf/chart/fx/chart/ui/resource/scroll_bar_left_a.gif +0 -0
  474. data/swf/chart/fx/chart/ui/resource/scroll_bar_left_o.gif +0 -0
  475. data/swf/chart/fx/chart/ui/resource/scroll_bar_o.gif +0 -0
  476. data/swf/chart/fx/chart/ui/resource/scroll_bar_right.gif +0 -0
  477. data/swf/chart/fx/chart/ui/resource/scroll_bar_right_a.gif +0 -0
  478. data/swf/chart/fx/chart/ui/resource/scroll_bar_right_o.gif +0 -0
  479. data/swf/chart/fx/chart/ui/resource/scroll_handle.gif +0 -0
  480. data/swf/chart/fx/chart/ui/resource/scroll_info_handle.gif +0 -0
  481. data/swf/chart/fx/chart/ui/resource/scroll_left_button.gif +0 -0
  482. data/swf/chart/fx/chart/ui/resource/scroll_left_button_d.gif +0 -0
  483. data/swf/chart/fx/chart/ui/resource/scroll_left_button_down.gif +0 -0
  484. data/swf/chart/fx/chart/ui/resource/scroll_left_button_g.gif +0 -0
  485. data/swf/chart/fx/chart/ui/resource/scroll_left_button_o.gif +0 -0
  486. data/swf/chart/fx/chart/ui/resource/scroll_left_button_up.gif +0 -0
  487. data/swf/chart/fx/chart/ui/resource/scroll_outer.gif +0 -0
  488. data/swf/chart/fx/chart/ui/resource/scroll_outer_left.gif +0 -0
  489. data/swf/chart/fx/chart/ui/resource/scroll_outer_right.gif +0 -0
  490. data/swf/chart/fx/chart/ui/resource/scroll_right_button.gif +0 -0
  491. data/swf/chart/fx/chart/ui/resource/scroll_right_button_d.gif +0 -0
  492. data/swf/chart/fx/chart/ui/resource/scroll_right_button_down.gif +0 -0
  493. data/swf/chart/fx/chart/ui/resource/scroll_right_button_g.gif +0 -0
  494. data/swf/chart/fx/chart/ui/resource/scroll_right_button_o.gif +0 -0
  495. data/swf/chart/fx/chart/ui/resource/scroll_right_button_up.gif +0 -0
  496. data/swf/chart/fx/chart/ui/resource/scroll_slider_left.gif +0 -0
  497. data/swf/chart/fx/chart/ui/resource/scroll_slider_right.gif +0 -0
  498. data/swf/chart/fx/chart/ui/resource/sell.gif +0 -0
  499. data/swf/chart/fx/chart/ui/resource/start_label.gif +0 -0
  500. data/swf/chart/fx/chart/ui/resource/stripe.gif +0 -0
  501. data/swf/chart/fx/chart/ui/resource/stripe_b.gif +0 -0
  502. data/swf/chart/fx/chart/ui/resource/stripe_r.gif +0 -0
  503. data/swf/chart/fx/chart/ui/resource/unfixed.gif +0 -0
  504. data/swf/chart/fx/chart/ui/resource/up.gif +0 -0
  505. data/swf/chart/fx/chart/ui/resource/up_buy.gif +0 -0
  506. data/swf/chart/fx/chart/ui/resource/up_buy_1.gif +0 -0
  507. data/swf/chart/fx/chart/ui/resource/up_buy_2.gif +0 -0
  508. data/swf/chart/fx/chart/ui/resource/up_buy_3.gif +0 -0
  509. data/swf/chart/fx/chart/ui/resource/up_sell.gif +0 -0
  510. data/swf/chart/fx/chart/ui/resource/up_sell_1.gif +0 -0
  511. data/swf/chart/fx/chart/ui/resource/up_sell_2.gif +0 -0
  512. data/swf/chart/fx/chart/ui/resource/up_sell_3.gif +0 -0
  513. data/swf/chart/fx/net/StubFactory.as +113 -0
  514. data/swf/chart/fx/util/ListenerSupport.as +55 -0
  515. data/swf/chart/fx/util/PositionManager.as +95 -0
  516. data/swf/chart/fx/util/ScaleFormatter.as +156 -0
  517. data/swf/chart/fx/util/Util.as +61 -0
  518. data/swf/chart/log.as +40 -0
  519. data/swf/lib/corelib.swc +0 -0
  520. data/test/BackCollectorTest/basic/2008-08-04/AUDJPY.csv +5 -0
  521. data/test/BackCollectorTest/basic/2008-08-04/USDJPY.csv +5 -0
  522. data/test/BackCollectorTest/basic/2008-08-04/ZARJPY.csv +5 -0
  523. data/test/BackCollectorTest/basic/2008-08-05/AUDJPY.csv +5 -0
  524. data/test/BackCollectorTest/basic/2008-08-05/USDJPY.csv +5 -0
  525. data/test/BackCollectorTest/basic/2008-08-05/ZARJPY.csv +5 -0
  526. data/test/BackCollectorTest/basic/2008-08-06/AUDJPY.csv +5 -0
  527. data/test/BackCollectorTest/basic/2008-08-06/USDJPY.csv +5 -0
  528. data/test/BackCollectorTest/basic/2008-08-06/ZARJPY.csv +5 -0
  529. data/test/BackCollectorTest/basic/2008-08-07/AUDJPY.csv +5 -0
  530. data/test/BackCollectorTest/basic/2008-08-07/USDJPY.csv +5 -0
  531. data/test/BackCollectorTest/basic/2008-08-07/ZARJPY.csv +5 -0
  532. data/test/BackCollectorTest/basic/AUDJPY/raw/2008-08-04.csv +5 -0
  533. data/test/BackCollectorTest/basic/AUDJPY/raw/2008-08-05.csv +5 -0
  534. data/test/BackCollectorTest/basic/AUDJPY/raw/2008-08-06.csv +5 -0
  535. data/test/BackCollectorTest/basic/AUDJPY/raw/2008-08-07.csv +5 -0
  536. data/test/BackCollectorTest/basic/USDJPY/raw/2008-08-04.csv +5 -0
  537. data/test/BackCollectorTest/basic/USDJPY/raw/2008-08-05.csv +5 -0
  538. data/test/BackCollectorTest/basic/USDJPY/raw/2008-08-06.csv +5 -0
  539. data/test/BackCollectorTest/basic/USDJPY/raw/2008-08-07.csv +5 -0
  540. data/test/BackCollectorTest/basic/ZARJPY/raw/2008-08-04.csv +5 -0
  541. data/test/BackCollectorTest/basic/ZARJPY/raw/2008-08-05.csv +5 -0
  542. data/test/BackCollectorTest/basic/ZARJPY/raw/2008-08-06.csv +5 -0
  543. data/test/BackCollectorTest/basic/ZARJPY/raw/2008-08-07.csv +5 -0
  544. data/test/BackCollectorTest/lack/2008-08-04/AUDJPY.csv +5 -0
  545. data/test/BackCollectorTest/lack/2008-08-04/USDJPY.csv +5 -0
  546. data/test/BackCollectorTest/lack/2008-08-04/ZARJPY.csv +5 -0
  547. data/test/BackCollectorTest/lack/2008-08-06/AUDJPY.csv +5 -0
  548. data/test/BackCollectorTest/lack/2008-08-06/USDJPY.csv +5 -0
  549. data/test/BackCollectorTest/lack/2008-08-06/ZARJPY.csv +5 -0
  550. data/test/BackCollectorTest/lack/2008-08-07/AUDJPY.csv +5 -0
  551. data/test/BackCollectorTest/lack/2008-08-07/USDJPY.csv +5 -0
  552. data/test/BackCollectorTest/lack/2008-08-07/ZARJPY.csv +5 -0
  553. data/test/BackCollectorTest/lack/AUDJPY/raw/2008-08-04.csv +5 -0
  554. data/test/BackCollectorTest/lack/AUDJPY/raw/2008-08-06.csv +5 -0
  555. data/test/BackCollectorTest/lack/AUDJPY/raw/2008-08-07.csv +5 -0
  556. data/test/BackCollectorTest/lack/USDJPY/raw/2008-08-04.csv +5 -0
  557. data/test/BackCollectorTest/lack/USDJPY/raw/2008-08-06.csv +5 -0
  558. data/test/BackCollectorTest/lack/USDJPY/raw/2008-08-07.csv +5 -0
  559. data/test/BackCollectorTest/lack/ZARJPY/raw/2008-08-04.csv +5 -0
  560. data/test/BackCollectorTest/lack/ZARJPY/raw/2008-08-06.csv +5 -0
  561. data/test/BackCollectorTest/lack/ZARJPY/raw/2008-08-07.csv +5 -0
  562. data/test/OutputregistryTest/conf/configuration.yaml +3 -0
  563. data/test/ProcessManagerTest/agents/moving_average.rb +95 -0
  564. data/test/ProcessManagerTest/conf/configuration.yaml +6 -0
  565. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-21.csv +5853 -0
  566. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-22.csv +5821 -0
  567. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-23.csv +5921 -0
  568. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-24.csv +5956 -0
  569. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-25.csv +5796 -0
  570. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-21.csv +5853 -0
  571. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-22.csv +5821 -0
  572. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-23.csv +5921 -0
  573. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-24.csv +5956 -0
  574. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-25.csv +5796 -0
  575. data/test/ProcessTest/agents/foo.rb +10 -0
  576. data/test/ProcessTest/conf/configuration.yaml +3 -0
  577. data/test/agent/agent_tests.rb +10 -0
  578. data/test/agent/test_AgentManager.rb +321 -0
  579. data/test/agent/test_AgentRegistry.rb +662 -0
  580. data/test/agent/test_PeriodicallyAgent.rb +180 -0
  581. data/test/agent/test_Permitter.rb +217 -0
  582. data/test/all_tests.rb +24 -0
  583. data/test/dao/dao_tests.rb +9 -0
  584. data/test/dao/test_FileSystemDao.rb +431 -0
  585. data/test/dao/test_RateDao.rb +695 -0
  586. data/test/dao/test_TradeResultDao.rb +487 -0
  587. data/test/jiji_plugin.rb +7 -0
  588. data/test/migration/migration_tests.rb +10 -0
  589. data/test/migration/migrator1_0_3test_data/rmt/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  590. data/test/migration/migrator1_0_3test_data/rmt/out/NjM5YWFhZmQtNDFjNy00NjUxLWIwYmItNTc3ZjAyZTg5ODA5/56e75YuV5bmz5Z2H57ea/meta.yaml +12 -0
  591. data/test/migration/migrator1_0_3test_data/rmt/out/NjM5YWFhZmQtNDFjNy00NjUxLWIwYmItNTc3ZjAyZTg5ODA5/56e75Yuasdwqdd/meta.yaml +12 -0
  592. data/test/migration/migrator1_1_0test_data/configuration.yaml +11 -0
  593. data/test/migration/migrator1_2_0test_data/basic/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +8 -0
  594. data/test/migration/migrator1_2_0test_data/basic/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  595. data/test/migration/migrator1_2_0test_data/basic/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  596. data/test/migration/migrator1_2_0test_data/basic/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  597. data/test/migration/migrator1_2_0test_data/basic/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  598. data/test/migration/migrator1_2_0test_data/basic/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  599. data/test/migration/migrator1_2_0test_data/basic/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +10 -0
  600. data/test/migration/migrator1_2_0test_data/basic/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-05.csv +20 -0
  601. data/test/migration/migrator1_2_0test_data/basic/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-06.csv +20 -0
  602. data/test/migration/migrator1_2_0test_data/basic/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +18 -0
  603. data/test/migration/migrator1_2_0test_data/basic/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/meta.yaml +9 -0
  604. data/test/migration/migrator1_2_0test_data/basic/props.yaml +85 -0
  605. data/test/migration/migrator1_2_0test_data/illegal_props/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +8 -0
  606. data/test/migration/migrator1_2_0test_data/illegal_props/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  607. data/test/migration/migrator1_2_0test_data/illegal_props/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  608. data/test/migration/migrator1_2_0test_data/illegal_props/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  609. data/test/migration/migrator1_2_0test_data/illegal_props/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  610. data/test/migration/migrator1_2_0test_data/illegal_props/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  611. data/test/migration/migrator1_2_0test_data/illegal_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +10 -0
  612. data/test/migration/migrator1_2_0test_data/illegal_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-05.csv +20 -0
  613. data/test/migration/migrator1_2_0test_data/illegal_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-06.csv +20 -0
  614. data/test/migration/migrator1_2_0test_data/illegal_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +18 -0
  615. data/test/migration/migrator1_2_0test_data/illegal_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/meta.yaml +9 -0
  616. data/test/migration/migrator1_2_0test_data/illegal_props/props.yaml +1 -0
  617. data/test/migration/migrator1_2_0test_data/no_outs/props.yaml +85 -0
  618. data/test/migration/migrator1_2_0test_data/no_props/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +8 -0
  619. data/test/migration/migrator1_2_0test_data/no_props/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  620. data/test/migration/migrator1_2_0test_data/no_props/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  621. data/test/migration/migrator1_2_0test_data/no_props/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  622. data/test/migration/migrator1_2_0test_data/no_props/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  623. data/test/migration/migrator1_2_0test_data/no_props/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  624. data/test/migration/migrator1_2_0test_data/no_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +10 -0
  625. data/test/migration/migrator1_2_0test_data/no_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-05.csv +20 -0
  626. data/test/migration/migrator1_2_0test_data/no_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-06.csv +20 -0
  627. data/test/migration/migrator1_2_0test_data/no_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +18 -0
  628. data/test/migration/migrator1_2_0test_data/no_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/meta.yaml +9 -0
  629. data/test/migration/test_Migrator.rb +117 -0
  630. data/test/migration/test_Migrator1_0_3.rb +118 -0
  631. data/test/migration/test_Migrator1_1_0.rb +56 -0
  632. data/test/migration/test_Migrator1_2_0.rb +94 -0
  633. data/test/plugin/embedded/test_SingleClickClient.rb +144 -0
  634. data/test/plugin/error_test/jiji_plugin.rb +2 -0
  635. data/test/plugin/plugin_tests.rb +8 -0
  636. data/test/plugin/test/foo_plugin.rb +1 -0
  637. data/test/plugin/test/jiji_plugin.rb +2 -0
  638. data/test/plugin/test_Loader.rb +33 -0
  639. data/test/plugin/test_gem/a/jiji_plugin_test_gem_a-1.0.0.gem +0 -0
  640. data/test/plugin/test_gem/a/jiji_plugin_test_gem_a.gemspec +10 -0
  641. data/test/plugin/test_gem/a/lib/jiji_plugin.rb +2 -0
  642. data/test/plugin/test_gem/a/lib/jiji_plugin_test.rb +6 -0
  643. data/test/plugin/test_gem/b/jiji_plugin_test_gem_b-1.0.0.gem +0 -0
  644. data/test/plugin/test_gem/b/jiji_plugin_test_gem_b.gemspec +9 -0
  645. data/test/plugin/test_gem/b/lib/jiji_plugin.rb +2 -0
  646. data/test/service/all_service_tests.rb +10 -0
  647. data/test/service/test_AgentService.rb +185 -0
  648. data/test/service/test_OutputService.rb +33 -0
  649. data/test/service/test_RateService.rb +56 -0
  650. data/test/shared/rate.csv +144 -0
  651. data/test/shared/shared_tests.rb +9 -0
  652. data/test/shared/test_Cross.rb +144 -0
  653. data/test/shared/test_PositionManager.rb +285 -0
  654. data/test/shared/test_Signal.rb +65 -0
  655. data/test/test_BackTestCollector.rb +273 -0
  656. data/test/test_Collector.rb +230 -0
  657. data/test/test_Configuration.rb +61 -0
  658. data/test/test_Configuration_a.yaml +6 -0
  659. data/test/test_Operator.rb +501 -0
  660. data/test/test_Output.rb +175 -0
  661. data/test/test_OutputManager.rb +162 -0
  662. data/test/test_Output_registry.rb +42 -0
  663. data/test/test_Process.rb +557 -0
  664. data/test/test_ProcessManager.rb +723 -0
  665. data/test/test_utils.rb +112 -0
  666. data/test/util/test_BlockToSession.rb +121 -0
  667. data/test/util/test_CSV.rb +84 -0
  668. data/test/util/test_SynchronizeInterceptor.rb +76 -0
  669. data/test/util/util_tests.rb +9 -0
  670. metadata +941 -0
@@ -0,0 +1,944 @@
1
+ // ネームスペース
2
+ if ( typeof container == "undefined" ) {
3
+ container = {};
4
+ }
5
+
6
+ container.VERSION = "0.4.0";
7
+
8
+ /**
9
+ * コンテナ
10
+ * @param {Function} module コンポーネント定義を行う関数。
11
+ */
12
+ container.Container = function ( module ) {
13
+ var binder = new container.Binder( {} );
14
+ module( binder );
15
+ this.defs = binder.defs;
16
+
17
+ // 循環生成防止用のフィールド。作成中のモジュールの一覧が入る。
18
+ this.creating = [];
19
+
20
+ // 名前でキャッシュを作っておく。
21
+ // EagerSingletonなオブジェクトがあれば生成。
22
+ this.typeCache = {};
23
+ this.nameCache = {};
24
+ var thiz = this;
25
+ this.eachComponentDef( function( def ) {
26
+ if ( def && def[container.Annotation.Container]
27
+ && def[container.Annotation.Container][container.Annotation.Scope] == container.Scope.EagerSingleton ) {
28
+ thiz.create( def );
29
+ }
30
+ // 名前でキャッシュ
31
+ if ( def && def[container.Annotation.Container]
32
+ && def[container.Annotation.Container][container.Annotation.Name] ) {
33
+ var name = def[container.Annotation.Container][container.Annotation.Name];
34
+ if ( !thiz.nameCache[name] ) {
35
+ thiz.nameCache[name] = []
36
+ }
37
+ thiz.nameCache[name].push( def );
38
+ }
39
+ });
40
+ }
41
+ container.Container.prototype = {
42
+ /**
43
+ * コンポーネント名またはcontainer.Typeに対応するオブジェクトを取得します。
44
+ *
45
+ * @param {String or container.Type} nameOrType コンポーネント名またはcontainer.Type
46
+ * @return 対応するオブジェクト。複数のコンポーネントがマッチした場合、最初の1つを返します。
47
+ */
48
+ get: function( nameOrType ){
49
+ if ( nameOrType instanceof container.Type ) {
50
+ // キャッシュがなければスキャン
51
+ if ( !this.typeCache[nameOrType] ) {
52
+ this._createTypeCahce( nameOrType );
53
+ }
54
+ if ( this.typeCache[nameOrType].length > 0 ) {
55
+ return this.create( this.typeCache[nameOrType][0]);
56
+ } else {
57
+ throw container.createError( new Error(),
58
+ container.ErrorCode.ComponentNotFound,
59
+ "component not found.name=" + nameOrType, {"nameOrType":nameOrType} );
60
+ }
61
+ } else {
62
+ if ( this.nameCache[nameOrType] && this.nameCache[nameOrType].length > 0 ) {
63
+ return this.create( this.nameCache[nameOrType][0]);
64
+ } else {
65
+ throw container.createError( new Error(),
66
+ container.ErrorCode.ComponentNotFound,
67
+ "component not found.name=" + nameOrType, {"nameOrType":nameOrType} );
68
+ }
69
+ }
70
+ },
71
+ /**
72
+ * コンポーネント名またはcontainer.Typeに対応するオブジェクトをすべて取得します。
73
+ *
74
+ * @param {String or container.Type} nameOrType コンポーネント名またはcontainer.Type
75
+ * @return 対応するオブジェクトの配列
76
+ */
77
+ gets: function( nameOrType ){
78
+ var objects = [];
79
+ if ( nameOrType instanceof container.Type ) {
80
+ // キャッシュがなければスキャン
81
+ if ( !this.typeCache[nameOrType] ) {
82
+ this._createTypeCahce( nameOrType );
83
+ }
84
+ var defs = this.typeCache[nameOrType]
85
+ for ( var i=0; i < defs.length; i++ ) {
86
+ objects.push( this.create( defs[i]) );
87
+ }
88
+ } else {
89
+ if ( this.nameCache[nameOrType] ) {
90
+ var defs = this.nameCache[nameOrType];
91
+ for ( var i=0; i < defs.length; i++ ) {
92
+ objects.push( this.create( defs[i]) );
93
+ }
94
+ }
95
+ }
96
+ return objects;
97
+ },
98
+ /**
99
+ * コンテナを破棄します。
100
+ */
101
+ destroy: function( ) {
102
+ var thiz = this;
103
+ this.eachComponentDef( function( def ) {
104
+ if ( !def.instance ){ return; }
105
+ var obj = def.instance;
106
+ var config = def[container.Annotation.Container];
107
+ if ( !config || !config[container.Annotation.Destroy] ) { return; }
108
+ var destroy = config[container.Annotation.Destroy];
109
+ if ( typeof destroy == "string" ) {
110
+ obj[destroy].apply( obj, [this] );
111
+ } else if ( typeof destroy == "function" ) {
112
+ destroy( obj, thiz );
113
+ } else {
114
+ throw container.createError( new Error(),
115
+ container.ErrorCode.IllegalDefinition,
116
+ "illegal destroy method. string or function is supported.", {"def":def} );
117
+ }
118
+ def.instance = null;
119
+ });
120
+ },
121
+
122
+ /**
123
+ * コンポーネント定義からコンポーネントを生成する。
124
+ * @param {Hash} def コンポーネント定義
125
+ */
126
+ create: function( def ) {
127
+
128
+ // 既に作成済みのインスタンスがあればそれを返す。
129
+ if ( def.instance ) { return def.instance; }
130
+
131
+ // 循環チェック
132
+ if ( this._isCreating(def) ) {
133
+ throw container.createError( new Error(),
134
+ container.ErrorCode.CircularReference,
135
+ "circulative component creation.", {"def":def} );
136
+ }
137
+
138
+ try {
139
+ this.creating.push( def );
140
+
141
+ var obj = def.constractor( this ); // 生成
142
+ def.instance = obj; // キャッシュ
143
+
144
+ // アノーテョンで指定した設定とコンテナのコンポーネント設定をマージ
145
+ var config = def[container.Annotation.Container] || {};
146
+
147
+ // 自動インジェクション
148
+ if ( config[container.Annotation.AutoInjection] != false ) {
149
+ for ( var property in obj ) {
150
+ if ( obj[property] instanceof container.inner.Component ) {
151
+ obj[property] = this.get( obj[property].name );
152
+ } else if ( obj[ property] instanceof container.inner.Components ) {
153
+ obj[property] = this.gets( obj[property].name );
154
+ } else if ( obj[ property] === container.Inject ) {
155
+ obj[property] = this.get( property );
156
+ } else if ( obj[ property] === container.Injects ) {
157
+ obj[property] = this.gets( property );
158
+ }
159
+ }
160
+ }
161
+
162
+ // プロパティインジェクション
163
+ if ( config[container.Annotation.Inject] ) {
164
+ var inject = config[container.Annotation.Inject];
165
+ for ( var f in inject ) {
166
+ if ( inject[f] instanceof container.inner.Component ) {
167
+ obj[f] = this.get( inject[f].name );
168
+ } else if ( inject[f] instanceof container.inner.Components ) {
169
+ obj[f] = this.gets( inject[f].name );
170
+ } else if ( inject[f] instanceof container.inner.Provider ) {
171
+ obj[f] = inject[f].func( obj, this );
172
+ } else {
173
+ obj[f] = inject[f];
174
+ }
175
+ }
176
+ }
177
+
178
+ // 初期化関数の実行
179
+ if ( config[container.Annotation.Initialize] ) {
180
+ var initialize = config[container.Annotation.Initialize];
181
+ if ( typeof initialize == "string" ) {
182
+ obj[initialize].apply( obj, [this] );
183
+ } else if ( typeof initialize == "function" ) {
184
+ initialize( obj, this );
185
+ } else {
186
+ throw container.createError( new Error(),
187
+ container.ErrorCode.IllegalDefinition,
188
+ "illegal initialize method. string or function is supported.", {"def":def} );
189
+ }
190
+ }
191
+
192
+ // インターセプタの設定
193
+ if ( config[container.Annotation.Intercept] ) {
194
+ var interceptors = config[container.Annotation.Intercept];
195
+ for ( var i=0; i < interceptors.length; i++ ) {
196
+ this.applyInterceptor( obj, interceptors[i][0], interceptors[i][1] );
197
+ }
198
+ }
199
+
200
+ // グローバルインターセプタの設定
201
+ if ( this.defs.interceptors && def.componentType != "function" ) { // バインドメソッドには適用しない。
202
+ for ( var i=0; i < this.defs.interceptors.length; i++ ) {
203
+ var insterceptor = this.defs.interceptors[i];
204
+ if ( !insterceptor.nameMatcher) { continue; }
205
+ if ( insterceptor.nameMatcher instanceof container.Type
206
+ && insterceptor.nameMatcher.isImplementor(obj) ) {
207
+ this.applyInterceptor( obj, insterceptor.interceptor, insterceptor.methodMatcher );
208
+ } else if ( insterceptor.nameMatcher instanceof container.Matcher
209
+ && config[container.Annotation.Name]
210
+ && insterceptor.nameMatcher.match( config[container.Annotation.Name] )) {
211
+ this.applyInterceptor( obj, insterceptor.interceptor, insterceptor.methodMatcher );
212
+ }
213
+ }
214
+ }
215
+
216
+ // シングルトンの場合、次回同じインスタンスを返すのでコンポーネント定義にキャッシュしたままにしておく。
217
+ // プロトタイプの場合破棄
218
+ if ( config[container.Annotation.Scope] == container.Scope.Prototype ) {
219
+ def.instance = undefined;
220
+ }
221
+ return obj;
222
+ } catch ( error ) {
223
+ def.instance = undefined; // エラーの場合破棄
224
+ throw error;
225
+ } finally {
226
+ this.creating.pop();
227
+ }
228
+ },
229
+ /**
230
+ * インターセプターを適用する。
231
+ * @param {Object} target 適用対象のオブジェクト
232
+ */
233
+ applyInterceptor: function( target, interceptor, matcher ) {
234
+ if ( !interceptor || !matcher ) { return; }
235
+ for ( var f in target ) {
236
+ if ( typeof target[f] == "function" && matcher.match( f ) ) {
237
+ (function() { // f をローカル化するため関数で。
238
+ var x = f;
239
+ var original = target[x];
240
+ target[x] = function( ) {
241
+ // インターセプターを実行する関数に置き換える。
242
+ var mi = new container.MethodInvocation( x, original, target, arguments );
243
+ return interceptor( mi );
244
+ }
245
+ })();
246
+ }
247
+ }
248
+ },
249
+ /**
250
+ * コンポーネント定義を列挙する。
251
+ * @param {Function} block 列挙先。第1引数でコンポーネント定義が渡される。
252
+ */
253
+ eachComponentDef : function( block ) {
254
+ for ( var i = 0; i < this.defs.objects.length; i++ ) {
255
+ if ( block ) {
256
+ block.apply( null, [this.defs.objects[i]] );
257
+ }
258
+ }
259
+ },
260
+ _createTypeCahce: function( nameOrType ) {
261
+ var list = [];
262
+ var self = this;
263
+ this.eachComponentDef( function( def ){
264
+ // 循環する場合は対象に含めない。
265
+ if ( self._isCreating(def) && !def.instance ) { return }
266
+ var obj = self.create( def );
267
+ if ( nameOrType.isImplementor( obj ) ) {
268
+ list.push( def );
269
+ }
270
+ });
271
+ this.typeCache[nameOrType] = list;
272
+ },
273
+ _isCreating: function(def) {
274
+ for ( var i=0; i < this.creating.length; i++ ) {
275
+ if ( def === this.creating[i] ) {
276
+ return true;
277
+ }
278
+ }
279
+ return false;
280
+ }
281
+ }
282
+
283
+ /**
284
+ * バインダー
285
+ * @param {Hash} defs コンポーネント定義
286
+ * @param {String} namespace ネームスペース
287
+ */
288
+ container.Binder = function( defs, namespace ){
289
+ this.defs = defs;
290
+ this.namespace = namespace;
291
+ }
292
+ container.Binder.prototype = {
293
+
294
+ /**
295
+ * コンポーネントを登録する
296
+ * @param {Function} clazz コンポーネントクラス
297
+ * @return コンポーネント定義オブジェクト
298
+ */
299
+ bind: function( clazz ) {
300
+ return this._bind( "object", clazz.prototype.meta, function() {
301
+ return new clazz();
302
+ });
303
+ },
304
+
305
+ /**
306
+ * 条件にマッチするコンポーネントメソッドを登録する。
307
+ *
308
+ * - Typeまたは名前にマッチするコンポーネントの指定したメソッドをコンポーネントとして登録する。
309
+ * - 複数のコンポーネントがある場合、最初に見つかったTypeまたは名前にマッチするコンポーネントのメソッドが登録される。
310
+ *
311
+ * @param {String or container.Type} nameOrType コンポーネント名またはcontainer.Type
312
+ * @param {String} methodName メソッド名
313
+ * @return コンポーネント定義オブジェクト
314
+ */
315
+ bindMethod: function( nameOrType, methodName ) {
316
+ var self = this;
317
+ return this._bind( "function", null, function( container ) {
318
+ var obj = container.get( nameOrType );
319
+ if (!obj) {
320
+ throw container.createError( new Error(),
321
+ container.ErrorCode.ComponentNotFound,
322
+ "component not found.name=" + nameOrType, {"nameOrType":nameOrType} );
323
+ }
324
+ return self._createBindMethod( obj, methodName );
325
+ });
326
+ },
327
+
328
+
329
+ /**
330
+ * 条件にマッチするコンポーネントメソッドの配列を登録する。
331
+ *
332
+ * - Typeまたは名前にマッチするコンポーネントの指定したメソッドをコンポーネントとして登録する。
333
+ * - 複数のコンポーネントがある場合、Typeまたは名前にマッチするコンポーネントメソッドの配列が登録される。
334
+ *
335
+ * @param {String or container.Type} nameOrType コンポーネント名またはcontainer.Type
336
+ * @param {String} methodName メソッド名
337
+ * @return コンポーネント定義オブジェクト
338
+ */
339
+ bindMethods: function( nameOrType, methodName ) {
340
+ var self = this;
341
+ return this._bind( "function", null, function( container ) {
342
+ var objs = container.gets( nameOrType );
343
+ var list = [];
344
+ for ( var i=0; i<objs.length;i++ ) {
345
+ list.push( self._createBindMethod( objs[i], methodName ) );
346
+ }
347
+ return list;
348
+ });
349
+ },
350
+
351
+ /**
352
+ * プロバイダが返す値をコンポーネントとして登録する。
353
+ * @param {function} provider プロバイダ関数。第一引数としてcontainer.Containerが渡される。
354
+ * @return コンポーネント定義オブジェクト
355
+ */
356
+ bindProvider: function( provider ) {
357
+ return this._bind( "object", null, provider );
358
+ },
359
+
360
+ /**
361
+ * インスタンスをコンポーネントとして登録する。
362
+ * @param {Object} instance インスタンス
363
+ * @return コンポーネント定義オブジェクト
364
+ */
365
+ bindInstance: function( instance ) {
366
+ return this._bind( "object", instance.meta, function() {
367
+ return instance;
368
+ } );
369
+ },
370
+
371
+ /**
372
+ * すべてのコンポーネントを対象とするインターセプタを登録する。
373
+ * @param {Fucntion} interceptor インターセプタ関数
374
+ * @param {container.Matcher or container.Type} インターセプタを適用するコンポーネントを選択するcontainer.Matcher or container.Type
375
+ * @param {container.Matcher} インターセプタを適用するメソッド名を選択するMatcher
376
+ */
377
+ bindInterceptor: function( interceptor, nameMatcherOrType, methodMatcher ) {
378
+ var interceptors = this._getInterceptorDefs();
379
+ interceptors.push( {
380
+ "interceptor": interceptor,
381
+ "nameMatcher": nameMatcherOrType,
382
+ "methodMatcher": methodMatcher
383
+ } );
384
+ },
385
+ /**
386
+ * ネームスペースを作成する。
387
+ * @param {String} namespace ネームスペース
388
+ * @param {Function} module コンポーネント定義を行う関数
389
+ */
390
+ ns: function( namespace, module ) {
391
+ if ( this.namespace ) {
392
+ namespace = this.namespace + "." + namespace;
393
+ }
394
+ module( new container.Binder( this.defs, namespace ) );
395
+ },
396
+
397
+ _bind: function( type, meta, constractor ) {
398
+ var objectDef = this._clone( meta );
399
+ objectDef.constractor = constractor;
400
+ objectDef.componentType = type;
401
+ var list = this._getObjectDefs();
402
+ list.push( objectDef );
403
+ return new container.Builder( objectDef, this.namespace );
404
+ },
405
+ _getObjectDefs: function( ) {
406
+ if ( !this.defs.objects ) {
407
+ this.defs.objects = [];
408
+ }
409
+ return this.defs.objects;
410
+ },
411
+ _getInterceptorDefs: function( ) {
412
+ if ( !this.defs.interceptors ) {
413
+ this.defs.interceptors = [];
414
+ }
415
+ return this.defs.interceptors;
416
+ },
417
+ _createBindMethod: function(obj, methodName) {
418
+ return function() { return obj[methodName].apply( obj, arguments );}
419
+ },
420
+ _clone: function(org) {
421
+ var tmp = {};
422
+ if ( org && org[container.Annotation.Container] ) {
423
+ org = org[container.Annotation.Container];
424
+ for ( var i in container.Annotation) {
425
+ var a = container.Annotation[i]
426
+ if ( a != container.Annotation.Intercept
427
+ && a != container.Annotation.Container ) {
428
+ tmp[a] = org[a];
429
+ }
430
+ }
431
+ tmp[container.Annotation.Intercept] = [];
432
+ if ( org[container.Annotation.Intercept] ) {
433
+ var list = org[container.Annotation.Intercept];
434
+ for ( var i=0; i < list.length; i++ ) {
435
+ tmp[container.Annotation.Intercept].push( list[i] );
436
+ }
437
+ }
438
+ }
439
+ var res = {};
440
+ res[container.Annotation.Container] = tmp;
441
+ return res;
442
+ }
443
+ }
444
+ container.Builder = function( def, namespace ){
445
+ if ( !def[ container.Annotation.Container ] ) {
446
+ def[ container.Annotation.Container ] = {};
447
+ }
448
+ this.def = def[ container.Annotation.Container ];
449
+ if ( !this.def[container.Annotation.Intercept] ) {
450
+ this.def[container.Annotation.Intercept] = [];
451
+ }
452
+ this.namespace = namespace;
453
+ }
454
+ container.Builder.prototype = {
455
+ /**
456
+ * コンポーネントの名前を設定する。
457
+ * @param {String} name コンポーネント名
458
+ * @return 自身のインスタンス
459
+ */
460
+ to: function( name ) {
461
+ if (this.namespace) {
462
+ name = this.namespace + "." + name;
463
+ }
464
+ this.def[container.Annotation.Name] = name;
465
+ return this;
466
+ },
467
+ /**
468
+ * コンポーネントに注入するプロパティを設定する。
469
+ * @param {Hash} injectionParameter コンポーネントに注入するプロパティ
470
+ * @return 自身のインスタンス
471
+ */
472
+ inject: function( injectionParameter ) {
473
+ this.def[container.Annotation.Inject] = injectionParameter;
474
+ return this;
475
+ },
476
+ /**
477
+ * コンポーネント生成時に実行される初期化関数を設定する。
478
+ * @param {Function or String} initializeFunctionOrName 初期化関数または初期化時に呼び出す関数名
479
+ * @return 自身のインスタンス
480
+ */
481
+ initialize:function( initializeFunctionOrName ) {
482
+ this.def[container.Annotation.Initialize] = initializeFunctionOrName;
483
+ return this;
484
+ },
485
+ /**
486
+ * コンテナの破棄時にに実行される破棄関数を設定する。
487
+ *
488
+ * 注意:破棄関数が呼ばれるのは、SingletonまたはEagerSingletonコンポーネントのみです。
489
+ *
490
+ * @param {Function or String} destroyFunctionOrName 破棄関数または破棄時に呼び出す関数名
491
+ */
492
+ destroy:function( destroyFunctionOrName ) {
493
+ this.def[container.Annotation.Destroy] = destroyFunctionOrName;
494
+ return this;
495
+ },
496
+ /**
497
+ * コンポーネントのスコープを設定する。
498
+ * @param {String} scope スコープ。container.Scopeの値が指定可能
499
+ */
500
+ scope:function( scope ) {
501
+ this.def[container.Annotation.Scope] = scope;
502
+ return this;
503
+ },
504
+ /**
505
+ * コンポーネントにインターセプタを追加する。
506
+ * @param {Function} interceptor インターセプタ関数
507
+ * @param {container.Matcher} matcher フックするメソッド名を示すcontainer.Matcher
508
+ */
509
+ intercept:function( interceptor, matcher ) {
510
+ this.def[container.Annotation.Intercept].push( [ interceptor, matcher ] );
511
+ return this;
512
+ }
513
+ }
514
+
515
+ /**
516
+ * 指定した条件にマッチするか評価するオブジェクト。
517
+ * @param {RegExp} or {Array<RegExp>} or {Function} includes
518
+ * マッチ条件。
519
+ * 正規表現、正規表現の配列、または関数で指定する。
520
+ * -正規表現 .. 値が正規表現にマッチするか
521
+ * -正規表現の配列 .. 値が正規表現のいずれかにマッチするか
522
+ * -関数 .. 関数の実行結果がtrueであるか。(引数として評価対象の値が渡される。)
523
+ * @param {RegExp} or {Array<RegExp>} or {Function} excludes
524
+ * マッチ対象外を指定する条件。includeに含まれていてもexcludeにマッチする場合、マッチしないと見なされる。
525
+ * 正規表現、正規表現の配列、または関数で指定する。
526
+ * -正規表現 .. 値が正規表現にマッチするか
527
+ * -正規表現の配列 .. 値が正規表現のいずれかにマッチするか
528
+ * -関数 .. 関数の実行結果がtrueであるか。(引数として評価対象の値が渡される。)
529
+ */
530
+ container.Matcher = function ( includes, excludes ){
531
+
532
+ if ( includes && !(includes instanceof Array
533
+ || includes instanceof RegExp
534
+ || includes instanceof Function )){
535
+ throw container.createError( new Error(),
536
+ container.ErrorCode.IllegalArgument,
537
+ "Illegal includes.", {} );
538
+ }
539
+ if ( excludes && !(excludes instanceof Array
540
+ || excludes instanceof RegExp
541
+ || excludes instanceof Function )){
542
+ throw container.createError( new Error(),
543
+ container.ErrorCode.IllegalArgument,
544
+ "Illegal excludes.", {} );
545
+ }
546
+ this.excludes = excludes;
547
+ this.includes = includes;
548
+ }
549
+ container.Matcher.prototype = {
550
+
551
+ /**
552
+ * 評価値が条件にマッチするか評価する。
553
+ * @param {String} value 評価値
554
+ * @return マッチする場合true
555
+ */
556
+ match: function( value ){
557
+ if ( this.excludes && this.getEvaluator( this.excludes)(value) ) {
558
+ return false;
559
+ }
560
+ if ( this.includes && this.getEvaluator( this.includes)(value) ) {
561
+ return true;
562
+ }
563
+ return false
564
+ },
565
+ getEvaluator: function( includes ) {
566
+ if ( includes instanceof Array ){
567
+ return function( value ) {
568
+ for (var i=0; i<includes.length; i++) {
569
+ if ( includes[i] instanceof RegExp && includes[i].test( value )){
570
+ return true;
571
+ }
572
+ }
573
+ return false;
574
+ };
575
+ } else if ( includes instanceof RegExp ){
576
+ return function( value ) {
577
+ return includes.test( value );
578
+ };
579
+ } else if ( includes instanceof Function ){
580
+ return includes;
581
+ }
582
+ }
583
+ }
584
+
585
+ /**
586
+ * インターセプタの引数として渡されるオブジェクト
587
+ * @param {String} name インターセプトされた関数名
588
+ * @param {Function} original インターセプトされたオリジナルの関数
589
+ * @param {Object} target インターセプトされたオブジェクト
590
+ * @param {Object} arg 関数に渡された引数(arguments)
591
+ */
592
+ container.MethodInvocation = function( name, original, target, arg ) {
593
+ this.name = name;
594
+ this.original = original;
595
+ this.arg = arg;
596
+ this.target = target;
597
+ }
598
+ container.MethodInvocation.prototype = {
599
+
600
+ /**
601
+ * インターセプトされたオブジェクトを取得する。
602
+ * @return インターセプトされたオブジェクト
603
+ */
604
+ getThis: function() { return this.target; },
605
+
606
+ /**
607
+ * 現在の引数を使用して、オリジナルの関数を実行する。
608
+ * 引数を改変するには、getArguments()の戻り値を直接編集する。
609
+ * @return オリジナルの関数の実行結果
610
+ */
611
+ proceed: function() {
612
+ return this.original.apply( this.target, this.arg );
613
+ },
614
+ /**
615
+ * 関数に渡された引数を取得する。
616
+ * @return 関数に渡された引数。
617
+ */
618
+ getArguments: function() { return this.arg; },
619
+ /**
620
+ * オリジナルの関数を取得する。
621
+ * @return オリジナルの関数
622
+ */
623
+ getOriginalMethod: function() { return this.original; },
624
+ /**
625
+ * インターセプトされた関数名を取得する。
626
+ * @return インターセプトされた関数名
627
+ */
628
+ getMethodName: function() { return this.name; }
629
+ }
630
+
631
+ /**
632
+ * 内部クラス。
633
+ */
634
+ container.inner = {}
635
+ container.inner.Component = function( name ) {
636
+ this.name = name;
637
+ }
638
+ container.inner.Components = function( name ) {
639
+ this.name = name;
640
+ }
641
+ container.inner.Provider = function( func ) {
642
+ this.func = func;
643
+ }
644
+
645
+ /**
646
+ * 例外にメッセージ等を設定する。
647
+ * @param {Error} エラー
648
+ * @param {int} code エラーコード。container.Exception.ErrorCodeの定数を参照。
649
+ * @param {String} message エラーメッセージ
650
+ * @param {Hash} options 補足情報
651
+ */
652
+ container.createError = function( error, code, message, options ) {
653
+ error.errorCode = code;
654
+ error.message = message;
655
+ error.options = options;
656
+ error.name = "container.Exception";
657
+ return error;
658
+ }
659
+
660
+ /**
661
+ * エラーコード
662
+ */
663
+ container.ErrorCode = {
664
+ // 引数が不正
665
+ IllegalArgument: 1,
666
+ // コンポーネント定義が存在しない。
667
+ ComponentNotFound: 100,
668
+ // コンポーネント定義が不正。
669
+ IllegalDefinition: 101,
670
+ // 循環参照
671
+ CircularReference: 102
672
+ }
673
+
674
+ container.Annotation = {
675
+ Container: "@Container",
676
+ Name: "@Name",
677
+ Inject: "@Inject",
678
+ Initialize: "@Initialize",
679
+ Destroy: "@Destroy",
680
+ Intercept: "@Intercept",
681
+ Scope: "@Scope",
682
+ AutoInjection: "@AutoInjection"
683
+ }
684
+ container.Scope = {
685
+ Singleton: "Singleton",
686
+ Prototype: "Prototype",
687
+ EagerSingleton: "EagerSingleton"
688
+ }
689
+
690
+ // ユーティリティ
691
+ /**
692
+ * すべてにマッチするcontainer.Matcherを作成する。
693
+ */
694
+ container.any = function() {
695
+ return new container.Matcher( /.*/ );
696
+ }
697
+ /**
698
+ * コンポーネントを挿入するインジェクション指定を作成する。
699
+ */
700
+ container.component = function( nameOrType ) {
701
+ return new container.inner.Component( nameOrType );
702
+ }
703
+ /**
704
+ * コンポーネントの配列を挿入するインジェクション指定を作成する。
705
+ */
706
+ container.components = function( nameOrType ) {
707
+ return new container.inner.Components( nameOrType );
708
+ }
709
+ /**
710
+ * 関数の実行結果を挿入するインジェクション指定を作成する。
711
+ */
712
+ container.provides = function( func ) {
713
+ return new container.inner.Provider( func );
714
+ }
715
+
716
+ /**
717
+ * 自動インジェクションの指定
718
+ */
719
+ container.Inject = function( nameOrType ) {
720
+ return container.component( nameOrType );
721
+ }
722
+ container.Injects = function( nameOrType ) {
723
+ return container.components( nameOrType );
724
+ }
725
+
726
+ /**
727
+ * タイプ
728
+ */
729
+ container.Type = function() {}
730
+ container.Type.prototype = {
731
+
732
+ /**
733
+ * 同じタイプであるか評価します。
734
+ * @param {container.Type} that タイプ
735
+ * @return 同じであればtrue
736
+ */
737
+ equals: function( that ) {},
738
+
739
+ /**
740
+ * オブジェクトがTypeの条件を満たすか評価します。
741
+ * @param {Object} obj オブジェクト
742
+ * @return 条件を満たす場合true
743
+ */
744
+ isImplementor: function( obj ) {}
745
+ }
746
+
747
+ /**
748
+ * ユーテイリティ
749
+ */
750
+ container.types = {
751
+
752
+ /**
753
+ * 指定されたメソッドをすべて実装することを示すTypeを生成する。
754
+ * @param {String or Regexp or container.Type} methods メソッド名、正規表現またはcontainer.Type
755
+ * @return 指定されたメソッドをすべて実装することを示すcontainer.Type
756
+ */
757
+ has: function() {
758
+ return new container.inner.types.And( container.types._createTypes( arguments ));
759
+ },
760
+ /**
761
+ * 指定されたメソッドのいずれかを実装することを示すTypeを生成する。
762
+ * @param {String or Regexp or container.Type} methods メソッド名、正規表現またはcontainer.Type
763
+ * @return 指定されたメソッドのいずれかを実装することを示すcontainer.Type
764
+ */
765
+ hasAny: function() {
766
+ return new container.inner.types.Or( container.types._createTypes( arguments ));
767
+ },
768
+
769
+ /**
770
+ * 指定された型の条件を満たさないことを示すTypeを生成する。
771
+ * @param {String or Regexp or container.Type} type メソッド名、正規表現またはcontainer.Type
772
+ * @return 指定された型の条件を満たさないことを示すType
773
+ */
774
+ not: function( type ) {
775
+ return new container.inner.types.Not( container.types._createType(type) );
776
+ },
777
+
778
+ _createTypes: function ( list ) {
779
+ var types = [];
780
+ for ( var i=0; i < list.length; i++ ) {
781
+ types.push( container.types._createType( list[i] ));
782
+ }
783
+ return types;
784
+ },
785
+ _createType: function ( item ) {
786
+ if ( item instanceof RegExp ) {
787
+ return new container.inner.types.RegexpMethod(item);
788
+ } else if ( item instanceof container.Type ) {
789
+ return item ;
790
+ } else if ( typeof item == "string" ) {
791
+ return new container.inner.types.Method(item);
792
+ } else {
793
+ throw "illegal argument.";
794
+ }
795
+ }
796
+ }
797
+
798
+ container.inner.types = {}
799
+
800
+ /**
801
+ * 完全一致
802
+ */
803
+ container.inner.types.Method = function( name ) {
804
+ this.name = name;
805
+ }
806
+ container.inner.types.Method.prototype = new container.Type();
807
+ container.inner.types.Method.prototype.equals = function( that ) {
808
+ if ( !that || !( that instanceof container.inner.types.Method ) ){
809
+ return false;
810
+ }
811
+ return this.name == that.name;
812
+ }
813
+ container.inner.types.Method.prototype.isImplementor = function( obj ) {
814
+ return typeof obj[this.name] == "function";
815
+ }
816
+ container.inner.types.Method.prototype.toString = function( ) {
817
+ return "!container.inner.types.Method:" + this.name;
818
+ }
819
+
820
+
821
+ /**
822
+ * 正規表現一致
823
+ */
824
+ container.inner.types.RegexpMethod = function( exp ) {
825
+ this.exp = exp;
826
+ }
827
+ container.inner.types.RegexpMethod.prototype = new container.Type();
828
+ container.inner.types.RegexpMethod.prototype.equals = function( that ) {
829
+ if ( !that || !( that instanceof container.inner.types.RegexpMethod ) ){
830
+ return false;
831
+ }
832
+ return this.exp.ignoreCase == that.exp.ignoreCase
833
+ && this.exp.global == that.exp.global
834
+ && this.exp.source == that.exp.source;
835
+ }
836
+ container.inner.types.RegexpMethod.prototype.isImplementor = function( obj ) {
837
+ for ( var key in obj ) {
838
+ if ( typeof obj[key] == "function" && this.exp.test( key ) ) {
839
+ return true;
840
+ }
841
+ }
842
+ return false;
843
+ }
844
+ container.inner.types.RegexpMethod.prototype.toString = function( ) {
845
+ return "!container.inner.types.RegexpMethod:/" + this.exp.source + "/"
846
+ + this.exp.ignoreCase + "/" + this.exp.global ;
847
+ }
848
+
849
+
850
+ /**
851
+ * And
852
+ */
853
+ container.inner.types.And = function(types) {
854
+ this.types = types;
855
+ }
856
+ container.inner.types.And.prototype = new container.Type();
857
+ container.inner.types.And.prototype.equals = function( that ) {
858
+ if ( !that || !( that instanceof container.inner.types.And ) ){
859
+ return false;
860
+ }
861
+ if ( this.types.length != that.types.length ){
862
+ return false;
863
+ }
864
+ for ( var i=0; i < this.types.length; i++ ) {
865
+ var a = this.types[i];
866
+ var b = that.types[i];
867
+ if ( !a.equals(b) ) { return false; }
868
+ }
869
+ return true;
870
+ }
871
+ container.inner.types.And.prototype.isImplementor = function( obj ) {
872
+ for ( var i=0; i < this.types.length; i++ ) {
873
+ if ( !this.types[i].isImplementor(obj)) {
874
+ return false;
875
+ }
876
+ }
877
+ return true;
878
+ }
879
+ container.inner.types.And.prototype.toString = function( ) {
880
+ var str = "!container.inner.types.And:[";
881
+ for ( var i=0; i < this.types.length; i++ ) {
882
+ str += this.types[i].toString() + ",";
883
+ }
884
+ str += "]";
885
+ return str;
886
+ }
887
+
888
+ /**
889
+ * Or
890
+ */
891
+ container.inner.types.Or = function(types) {
892
+ this.types = types;
893
+ }
894
+ container.inner.types.Or.prototype = new container.Type();
895
+ container.inner.types.Or.prototype.equals = function( that ) {
896
+ if ( !that || !( that instanceof container.inner.types.Or ) ){
897
+ return false;
898
+ }
899
+ if ( this.types.length != that.types.length ){
900
+ return false;
901
+ }
902
+ for ( var i=0; i < this.types.length; i++ ) {
903
+ var a = this.types[i];
904
+ var b = that.types[i];
905
+ if ( !a.equals(b) ) { return false; }
906
+ }
907
+ return true;
908
+ }
909
+ container.inner.types.Or.prototype.isImplementor = function( obj ) {
910
+ for ( var i=0; i < this.types.length; i++ ) {
911
+ if ( this.types[i].isImplementor(obj)) {
912
+ return true;
913
+ }
914
+ }
915
+ return false;
916
+ }
917
+ container.inner.types.Or.prototype.toString = function( ) {
918
+ var str = "!container.inner.types.Or:[";
919
+ for ( var i=0; i < this.types.length; i++ ) {
920
+ str += this.types[i].toString() + ",";
921
+ }
922
+ str += "]";
923
+ return str;
924
+ }
925
+
926
+ /**
927
+ * Not
928
+ */
929
+ container.inner.types.Not = function(type) {
930
+ this.type = type;
931
+ }
932
+ container.inner.types.Not.prototype = new container.Type();
933
+ container.inner.types.Not.prototype.equals = function( that ) {
934
+ if ( !that || !( that instanceof container.inner.types.Not ) ){
935
+ return false;
936
+ }
937
+ return this.type.equals( that.type );
938
+ }
939
+ container.inner.types.Not.prototype.isImplementor = function( obj ) {
940
+ return !this.type.isImplementor(obj);
941
+ }
942
+ container.inner.types.Not.prototype.toString = function( ) {
943
+ return "!container.inner.types.Not:[" + this.type.toString() + "]";
944
+ }