jiji 1.2.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.
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
+ }