pione 0.1.0

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 (366) hide show
  1. data/.gitignore +14 -0
  2. data/Gemfile +5 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +94 -0
  5. data/Rakefile +118 -0
  6. data/bin/pione-broker +5 -0
  7. data/bin/pione-clean +5 -0
  8. data/bin/pione-client +5 -0
  9. data/bin/pione-eval +111 -0
  10. data/bin/pione-relay +5 -0
  11. data/bin/pione-relay-account-db +5 -0
  12. data/bin/pione-relay-client-db +5 -0
  13. data/bin/pione-search-log +30 -0
  14. data/bin/pione-syntax-checker +5 -0
  15. data/bin/pione-task-worker +5 -0
  16. data/bin/pione-tuple-space-provider +5 -0
  17. data/bin/pione-tuple-space-receiver +5 -0
  18. data/bin/pione-tuple-space-viewer +5 -0
  19. data/demo/demo.rb +311 -0
  20. data/demo/public/base.css +94 -0
  21. data/demo/public/demo.js +107 -0
  22. data/demo/public/index.html +91 -0
  23. data/demo/public/jquery-1.8.3.min.js +2 -0
  24. data/example/CountChar/CountChar.pione +64 -0
  25. data/example/CountChar/misc/CountChar.rb +22 -0
  26. data/example/CountChar/text/aidokushono_insho.txt +32 -0
  27. data/example/CountChar/text/aikokuka_shokan.txt +108 -0
  28. data/example/CountChar/text/carlyle_hakubutsukan.txt +58 -0
  29. data/example/CountChar/text/dark_minister.txt +2440 -0
  30. data/example/CountChar/text/kaikano_otto.txt +61 -0
  31. data/example/CountChar/text/kaikon.txt +30 -0
  32. data/example/CountChar/text/nagashimano_shi.txt +45 -0
  33. data/example/CountChar/text/saikachibuchi.txt +80 -0
  34. data/example/CountChar/text/saikonihonno_josei.txt +91 -0
  35. data/example/CountChar/text/taishojugonenno_bundan.txt +21 -0
  36. data/example/FeatureExample/FeatureExample.pione +7 -0
  37. data/example/Fib/Fib.pione +56 -0
  38. data/example/Fib/FibBC.pione +56 -0
  39. data/example/HelloWorld/HelloWorld.pione +5 -0
  40. data/example/LucasNumber/LucasNumber.pione +64 -0
  41. data/example/MakePair/MakePair.pione +14 -0
  42. data/example/MakePair/data/1.i +0 -0
  43. data/example/MakePair/data/2.i +0 -0
  44. data/example/MakePair/data/3.i +0 -0
  45. data/example/MakePair/data/4.i +0 -0
  46. data/example/MakePair/data/5.i +0 -0
  47. data/example/SieveOfEratosthenes/SieveOfEratosthenes.pione +61 -0
  48. data/example/SingleParticlesWithRef/Makefile +289 -0
  49. data/example/SingleParticlesWithRef/SingleParticlesWithRef.Makefile +153 -0
  50. data/example/SingleParticlesWithRef/SingleParticlesWithRef.pione +116 -0
  51. data/example/SingleParticlesWithRef/SingleParticlesWithRefFull.pione +400 -0
  52. data/example/SingleParticlesWithRef/data/121p-shift-0-0-0.roi +0 -0
  53. data/example/SingleParticlesWithRef/data/121p-shift-0-120-0.roi +0 -0
  54. data/example/SingleParticlesWithRef/data/121p-shift-0-180-0.roi +0 -0
  55. data/example/SingleParticlesWithRef/data/121p-shift-0-240-0.roi +0 -0
  56. data/example/SingleParticlesWithRef/data/121p-shift-0-300-0.roi +0 -0
  57. data/example/SingleParticlesWithRef/data/121p-shift-0-60-0.roi +0 -0
  58. data/example/SingleParticlesWithRef/data/121p-shift-120-0-0.roi +0 -0
  59. data/example/SingleParticlesWithRef/data/121p-shift-120-120-0.roi +0 -0
  60. data/example/SingleParticlesWithRef/data/121p-shift-120-180-0.roi +0 -0
  61. data/example/SingleParticlesWithRef/data/121p-shift-120-240-0.roi +0 -0
  62. data/example/SingleParticlesWithRef/data/121p-shift-120-300-0.roi +0 -0
  63. data/example/SingleParticlesWithRef/data/121p-shift-120-60-0.roi +0 -0
  64. data/example/SingleParticlesWithRef/data/121p-shift-180-0-0.roi +0 -0
  65. data/example/SingleParticlesWithRef/data/121p-shift-180-120-0.roi +0 -0
  66. data/example/SingleParticlesWithRef/data/121p-shift-180-180-0.roi +0 -0
  67. data/example/SingleParticlesWithRef/data/121p-shift-180-240-0.roi +0 -0
  68. data/example/SingleParticlesWithRef/data/121p-shift-180-300-0.roi +0 -0
  69. data/example/SingleParticlesWithRef/data/121p-shift-180-60-0.roi +0 -0
  70. data/example/SingleParticlesWithRef/data/121p-shift-240-0-0.roi +0 -0
  71. data/example/SingleParticlesWithRef/data/121p-shift-240-120-0.roi +0 -0
  72. data/example/SingleParticlesWithRef/data/121p-shift-240-180-0.roi +0 -0
  73. data/example/SingleParticlesWithRef/data/121p-shift-240-240-0.roi +0 -0
  74. data/example/SingleParticlesWithRef/data/121p-shift-240-300-0.roi +0 -0
  75. data/example/SingleParticlesWithRef/data/121p-shift-240-60-0.roi +0 -0
  76. data/example/SingleParticlesWithRef/data/121p-shift-300-0-0.roi +0 -0
  77. data/example/SingleParticlesWithRef/data/121p-shift-300-120-0.roi +0 -0
  78. data/example/SingleParticlesWithRef/data/121p-shift-300-180-0.roi +0 -0
  79. data/example/SingleParticlesWithRef/data/121p-shift-300-240-0.roi +0 -0
  80. data/example/SingleParticlesWithRef/data/121p-shift-300-300-0.roi +0 -0
  81. data/example/SingleParticlesWithRef/data/121p-shift-300-60-0.roi +0 -0
  82. data/example/SingleParticlesWithRef/data/121p-shift-60-0-0.roi +0 -0
  83. data/example/SingleParticlesWithRef/data/121p-shift-60-120-0.roi +0 -0
  84. data/example/SingleParticlesWithRef/data/121p-shift-60-180-0.roi +0 -0
  85. data/example/SingleParticlesWithRef/data/121p-shift-60-240-0.roi +0 -0
  86. data/example/SingleParticlesWithRef/data/121p-shift-60-300-0.roi +0 -0
  87. data/example/SingleParticlesWithRef/data/121p-shift-60-60-0.roi +0 -0
  88. data/example/SingleParticlesWithRef/data/121p-shift-noise-0-0-0.roi +0 -0
  89. data/example/SingleParticlesWithRef/data/121p-shift-noise-0-120-0.roi +0 -0
  90. data/example/SingleParticlesWithRef/data/121p-shift-noise-0-180-0.roi +0 -0
  91. data/example/SingleParticlesWithRef/data/121p-shift-noise-0-240-0.roi +0 -0
  92. data/example/SingleParticlesWithRef/data/121p-shift-noise-0-300-0.roi +0 -0
  93. data/example/SingleParticlesWithRef/data/121p-shift-noise-0-60-0.roi +0 -0
  94. data/example/SingleParticlesWithRef/data/121p-shift-noise-120-0-0.roi +0 -0
  95. data/example/SingleParticlesWithRef/data/121p-shift-noise-120-120-0.roi +0 -0
  96. data/example/SingleParticlesWithRef/data/121p-shift-noise-120-180-0.roi +0 -0
  97. data/example/SingleParticlesWithRef/data/121p-shift-noise-120-240-0.roi +0 -0
  98. data/example/SingleParticlesWithRef/data/121p-shift-noise-120-300-0.roi +0 -0
  99. data/example/SingleParticlesWithRef/data/121p-shift-noise-120-60-0.roi +0 -0
  100. data/example/SingleParticlesWithRef/data/121p-shift-noise-180-0-0.roi +0 -0
  101. data/example/SingleParticlesWithRef/data/121p-shift-noise-180-120-0.roi +0 -0
  102. data/example/SingleParticlesWithRef/data/121p-shift-noise-180-180-0.roi +0 -0
  103. data/example/SingleParticlesWithRef/data/121p-shift-noise-180-240-0.roi +0 -0
  104. data/example/SingleParticlesWithRef/data/121p-shift-noise-180-300-0.roi +0 -0
  105. data/example/SingleParticlesWithRef/data/121p-shift-noise-180-60-0.roi +0 -0
  106. data/example/SingleParticlesWithRef/data/121p-shift-noise-240-0-0.roi +0 -0
  107. data/example/SingleParticlesWithRef/data/121p-shift-noise-240-120-0.roi +0 -0
  108. data/example/SingleParticlesWithRef/data/121p-shift-noise-240-180-0.roi +0 -0
  109. data/example/SingleParticlesWithRef/data/121p-shift-noise-240-240-0.roi +0 -0
  110. data/example/SingleParticlesWithRef/data/121p-shift-noise-240-300-0.roi +0 -0
  111. data/example/SingleParticlesWithRef/data/121p-shift-noise-240-60-0.roi +0 -0
  112. data/example/SingleParticlesWithRef/data/121p-shift-noise-300-0-0.roi +0 -0
  113. data/example/SingleParticlesWithRef/data/121p-shift-noise-300-120-0.roi +0 -0
  114. data/example/SingleParticlesWithRef/data/121p-shift-noise-300-180-0.roi +0 -0
  115. data/example/SingleParticlesWithRef/data/121p-shift-noise-300-240-0.roi +0 -0
  116. data/example/SingleParticlesWithRef/data/121p-shift-noise-300-300-0.roi +0 -0
  117. data/example/SingleParticlesWithRef/data/121p-shift-noise-300-60-0.roi +0 -0
  118. data/example/SingleParticlesWithRef/data/121p-shift-noise-60-0-0.roi +0 -0
  119. data/example/SingleParticlesWithRef/data/121p-shift-noise-60-120-0.roi +0 -0
  120. data/example/SingleParticlesWithRef/data/121p-shift-noise-60-180-0.roi +0 -0
  121. data/example/SingleParticlesWithRef/data/121p-shift-noise-60-240-0.roi +0 -0
  122. data/example/SingleParticlesWithRef/data/121p-shift-noise-60-300-0.roi +0 -0
  123. data/example/SingleParticlesWithRef/data/121p-shift-noise-60-60-0.roi +0 -0
  124. data/example/SingleParticlesWithRef/data/121p-shift.pdb +3381 -0
  125. data/example/SingleParticlesWithRef/data/all.ref2d +0 -0
  126. data/example/SingleParticlesWithRef/data/all.ref3d +0 -0
  127. data/example/Sum/Sum.pione +52 -0
  128. data/example/SyntaxError/call_rule_error.pione +6 -0
  129. data/example/SyntaxError/feature_line_error.pione +7 -0
  130. data/example/SyntaxError/flow_block_error.pione +5 -0
  131. data/example/SyntaxError/input_line_error.pione +6 -0
  132. data/example/SyntaxError/invalid_rule_name.pione +6 -0
  133. data/example/SyntaxError/param_line_error.pione +7 -0
  134. data/example/SyntaxError/variable-binding-error.pione +11 -0
  135. data/lib/pione.rb +241 -0
  136. data/lib/pione/agent/basic-agent.rb +333 -0
  137. data/lib/pione/agent/broker.rb +274 -0
  138. data/lib/pione/agent/command-listener.rb +47 -0
  139. data/lib/pione/agent/input-generator.rb +194 -0
  140. data/lib/pione/agent/logger.rb +65 -0
  141. data/lib/pione/agent/process-manager.rb +38 -0
  142. data/lib/pione/agent/rule-provider.rb +64 -0
  143. data/lib/pione/agent/task-worker.rb +274 -0
  144. data/lib/pione/agent/trivial-routine-worker.rb +28 -0
  145. data/lib/pione/agent/tuple-space-client.rb +146 -0
  146. data/lib/pione/agent/tuple-space-server-client-life-checker.rb +29 -0
  147. data/lib/pione/command-option/basic-option.rb +42 -0
  148. data/lib/pione/command-option/child-process-option.rb +17 -0
  149. data/lib/pione/command-option/common-option.rb +29 -0
  150. data/lib/pione/command-option/daemon-option.rb +12 -0
  151. data/lib/pione/command-option/presence-notifier-option.rb +15 -0
  152. data/lib/pione/command-option/task-worker-owner-option.rb +17 -0
  153. data/lib/pione/command-option/tuple-space-provider-option.rb +26 -0
  154. data/lib/pione/command-option/tuple-space-provider-owner-option.rb +16 -0
  155. data/lib/pione/command-option/tuple-space-receiver-option.rb +12 -0
  156. data/lib/pione/command/basic-command.rb +126 -0
  157. data/lib/pione/command/child-process.rb +43 -0
  158. data/lib/pione/command/daemon-process.rb +18 -0
  159. data/lib/pione/command/front-owner-command.rb +37 -0
  160. data/lib/pione/command/pione-broker.rb +53 -0
  161. data/lib/pione/command/pione-clean.rb +16 -0
  162. data/lib/pione/command/pione-client.rb +273 -0
  163. data/lib/pione/command/pione-relay-account-db.rb +85 -0
  164. data/lib/pione/command/pione-relay-client-db.rb +80 -0
  165. data/lib/pione/command/pione-relay.rb +47 -0
  166. data/lib/pione/command/pione-syntax-checker.rb +103 -0
  167. data/lib/pione/command/pione-task-worker.rb +123 -0
  168. data/lib/pione/command/pione-tuple-space-provider.rb +87 -0
  169. data/lib/pione/command/pione-tuple-space-receiver.rb +55 -0
  170. data/lib/pione/command/pione-tuple-space-viewer.rb +151 -0
  171. data/lib/pione/command/tuple-space-provider-owner.rb +6 -0
  172. data/lib/pione/front/basic-front.rb +64 -0
  173. data/lib/pione/front/broker-front.rb +30 -0
  174. data/lib/pione/front/client-front.rb +28 -0
  175. data/lib/pione/front/relay-front.rb +19 -0
  176. data/lib/pione/front/task-worker-front.rb +16 -0
  177. data/lib/pione/front/task-worker-owner.rb +42 -0
  178. data/lib/pione/front/tuple-space-provider-front.rb +22 -0
  179. data/lib/pione/front/tuple-space-provider-owner.rb +11 -0
  180. data/lib/pione/front/tuple-space-receiver-front.rb +18 -0
  181. data/lib/pione/model/assignment.rb +89 -0
  182. data/lib/pione/model/basic-model.rb +395 -0
  183. data/lib/pione/model/binary-operator.rb +80 -0
  184. data/lib/pione/model/block.rb +233 -0
  185. data/lib/pione/model/boolean.rb +138 -0
  186. data/lib/pione/model/call-rule.rb +69 -0
  187. data/lib/pione/model/data-expr.rb +360 -0
  188. data/lib/pione/model/feature-expr.rb +794 -0
  189. data/lib/pione/model/float.rb +107 -0
  190. data/lib/pione/model/integer.rb +140 -0
  191. data/lib/pione/model/list.rb +104 -0
  192. data/lib/pione/model/message.rb +80 -0
  193. data/lib/pione/model/package.rb +48 -0
  194. data/lib/pione/model/parameters.rb +282 -0
  195. data/lib/pione/model/rule-expr.rb +120 -0
  196. data/lib/pione/model/rule-io.rb +166 -0
  197. data/lib/pione/model/rule.rb +294 -0
  198. data/lib/pione/model/string.rb +111 -0
  199. data/lib/pione/model/undefined-value.rb +24 -0
  200. data/lib/pione/model/variable-table.rb +315 -0
  201. data/lib/pione/model/variable.rb +87 -0
  202. data/lib/pione/parser/block-parser.rb +83 -0
  203. data/lib/pione/parser/common-parser.rb +145 -0
  204. data/lib/pione/parser/document-parser.rb +58 -0
  205. data/lib/pione/parser/error-message.yml +4 -0
  206. data/lib/pione/parser/expr-parser.rb +266 -0
  207. data/lib/pione/parser/feature-expr-parser.rb +105 -0
  208. data/lib/pione/parser/flow-element-parser.rb +181 -0
  209. data/lib/pione/parser/literal-parser.rb +182 -0
  210. data/lib/pione/parser/rule-definition-parser.rb +163 -0
  211. data/lib/pione/parser/syntax-error.rb +61 -0
  212. data/lib/pione/patch/array-patch.rb +3 -0
  213. data/lib/pione/patch/drb-patch.rb +467 -0
  214. data/lib/pione/patch/monitor-patch.rb +16 -0
  215. data/lib/pione/patch/rinda-patch.rb +759 -0
  216. data/lib/pione/patch/uri-patch.rb +66 -0
  217. data/lib/pione/relay/receiver-socket.rb +69 -0
  218. data/lib/pione/relay/relay-account-db.rb +55 -0
  219. data/lib/pione/relay/relay-client-db.rb +53 -0
  220. data/lib/pione/relay/relay-socket.rb +215 -0
  221. data/lib/pione/relay/trampoline.rb +22 -0
  222. data/lib/pione/relay/transmitter-socket.rb +167 -0
  223. data/lib/pione/resource/basic-resource.rb +92 -0
  224. data/lib/pione/resource/dropbox-resource.rb +106 -0
  225. data/lib/pione/resource/ftp.rb +84 -0
  226. data/lib/pione/resource/local.rb +113 -0
  227. data/lib/pione/rule-handler/action-handler.rb +184 -0
  228. data/lib/pione/rule-handler/basic-handler.rb +217 -0
  229. data/lib/pione/rule-handler/flow-handler.rb +339 -0
  230. data/lib/pione/rule-handler/root-handler.rb +23 -0
  231. data/lib/pione/rule-handler/system-handler.rb +13 -0
  232. data/lib/pione/system/common.rb +22 -0
  233. data/lib/pione/system/config.rb +20 -0
  234. data/lib/pione/system/document.rb +81 -0
  235. data/lib/pione/system/file-cache.rb +150 -0
  236. data/lib/pione/system/global.rb +346 -0
  237. data/lib/pione/system/identifier.rb +61 -0
  238. data/lib/pione/system/init.rb +16 -0
  239. data/lib/pione/system/object.rb +35 -0
  240. data/lib/pione/transformer/block-transformer.rb +23 -0
  241. data/lib/pione/transformer/document-transformer.rb +36 -0
  242. data/lib/pione/transformer/expr-transformer.rb +89 -0
  243. data/lib/pione/transformer/feature-expr-transformer.rb +56 -0
  244. data/lib/pione/transformer/flow-element-transformer.rb +66 -0
  245. data/lib/pione/transformer/literal-transformer.rb +76 -0
  246. data/lib/pione/transformer/rule-definition-transformer.rb +62 -0
  247. data/lib/pione/transformer/transformer-module.rb +37 -0
  248. data/lib/pione/tuple-space/data-finder.rb +165 -0
  249. data/lib/pione/tuple-space/presence-notifier.rb +83 -0
  250. data/lib/pione/tuple-space/relay.rb +9 -0
  251. data/lib/pione/tuple-space/tuple-space-provider.rb +85 -0
  252. data/lib/pione/tuple-space/tuple-space-receiver.rb +140 -0
  253. data/lib/pione/tuple-space/tuple-space-server-interface.rb +60 -0
  254. data/lib/pione/tuple-space/tuple-space-server.rb +156 -0
  255. data/lib/pione/tuple-space/update-criteria.rb +96 -0
  256. data/lib/pione/tuple/agent-tuple.rb +10 -0
  257. data/lib/pione/tuple/attribute-tuple.rb +7 -0
  258. data/lib/pione/tuple/base-uri-tuple.rb +9 -0
  259. data/lib/pione/tuple/basic-tuple.rb +317 -0
  260. data/lib/pione/tuple/bye-tuple.rb +9 -0
  261. data/lib/pione/tuple/command-tuple.rb +9 -0
  262. data/lib/pione/tuple/data-tuple.rb +18 -0
  263. data/lib/pione/tuple/dry-run-tuple.rb +8 -0
  264. data/lib/pione/tuple/exception-tuple.rb +11 -0
  265. data/lib/pione/tuple/finished-tuple.rb +17 -0
  266. data/lib/pione/tuple/foreground-tuple.rb +7 -0
  267. data/lib/pione/tuple/log-tuple.rb +14 -0
  268. data/lib/pione/tuple/process-info-tuple.rb +9 -0
  269. data/lib/pione/tuple/request-rule-tuple.rb +9 -0
  270. data/lib/pione/tuple/rule-tuple.rb +10 -0
  271. data/lib/pione/tuple/shift-tuple.rb +13 -0
  272. data/lib/pione/tuple/task-tuple.rb +36 -0
  273. data/lib/pione/tuple/task-worker-resource-tuple.rb +9 -0
  274. data/lib/pione/tuple/working-tuple.rb +13 -0
  275. data/lib/pione/uri-scheme/basic-scheme.rb +40 -0
  276. data/lib/pione/uri-scheme/broadcast-scheme.rb +11 -0
  277. data/lib/pione/uri-scheme/dropbox-scheme.rb +9 -0
  278. data/lib/pione/uri-scheme/local-scheme.rb +28 -0
  279. data/lib/pione/util/error-report.rb +12 -0
  280. data/lib/pione/util/log.rb +79 -0
  281. data/lib/pione/util/message.rb +155 -0
  282. data/lib/pione/util/misc.rb +73 -0
  283. data/lib/pione/util/terminal.rb +78 -0
  284. data/lib/pione/util/waiter-table.rb +53 -0
  285. data/lib/pione/version.rb +3 -0
  286. data/misc/env.sh +2 -0
  287. data/misc/test-drb-stop-service.rb +34 -0
  288. data/misc/test-ensure-and-thread-kill.rb +40 -0
  289. data/misc/test-many-waiters-client.rb +56 -0
  290. data/misc/test-many-waiters-server.rb +14 -0
  291. data/misc/write_and_take_test.png +0 -0
  292. data/misc/write_and_take_test.rb +36 -0
  293. data/pione.gemspec +49 -0
  294. data/test/agent/spec_basic-agent.rb +170 -0
  295. data/test/agent/spec_broker.rb +36 -0
  296. data/test/agent/spec_command-listener.rb +30 -0
  297. data/test/agent/spec_input-generator.rb +123 -0
  298. data/test/agent/spec_logger.rb +71 -0
  299. data/test/agent/spec_rule-provider.rb +65 -0
  300. data/test/agent/spec_task-worker.rb +307 -0
  301. data/test/agent/spec_tuple-space-client.rb +30 -0
  302. data/test/model/spec_assignment.rb +51 -0
  303. data/test/model/spec_binary-operator.rb +39 -0
  304. data/test/model/spec_block.rb +154 -0
  305. data/test/model/spec_boolean.rb +115 -0
  306. data/test/model/spec_call-rule.rb +23 -0
  307. data/test/model/spec_data-expr.rb +312 -0
  308. data/test/model/spec_feature-expr.rb +359 -0
  309. data/test/model/spec_feature-expr.yml +16 -0
  310. data/test/model/spec_float.rb +141 -0
  311. data/test/model/spec_integer.rb +141 -0
  312. data/test/model/spec_list.rb +26 -0
  313. data/test/model/spec_message.rb +42 -0
  314. data/test/model/spec_package.rb +15 -0
  315. data/test/model/spec_parameters.rb +148 -0
  316. data/test/model/spec_rule-expr.rb +66 -0
  317. data/test/model/spec_rule-io.rb +32 -0
  318. data/test/model/spec_rule.rb +158 -0
  319. data/test/model/spec_string.rb +106 -0
  320. data/test/model/spec_variable-table.rb +117 -0
  321. data/test/model/spec_variable.rb +84 -0
  322. data/test/parser/spec_block-parser.rb +5 -0
  323. data/test/parser/spec_block-parser.yml +85 -0
  324. data/test/parser/spec_common-parser.rb +281 -0
  325. data/test/parser/spec_expr-parser.rb +6 -0
  326. data/test/parser/spec_expr-parser.yml +82 -0
  327. data/test/parser/spec_feature-expr-parser.rb +32 -0
  328. data/test/parser/spec_feature-expr-parser.yml +25 -0
  329. data/test/parser/spec_flow-element-parser.rb +5 -0
  330. data/test/parser/spec_flow-element-parser.yml +180 -0
  331. data/test/parser/spec_literal-parser.rb +5 -0
  332. data/test/parser/spec_literal-parser.yml +123 -0
  333. data/test/parser/spec_rule-definition-parser.rb +5 -0
  334. data/test/parser/spec_rule-definition-parser.yml +93 -0
  335. data/test/patch/spec_rinda-patch.rb +32 -0
  336. data/test/patch/spec_uri-patch.rb +23 -0
  337. data/test/rule-handler/spec_action-handler.rb +135 -0
  338. data/test/rule-handler/spec_flow-handler.rb +127 -0
  339. data/test/spec_common.rb +14 -0
  340. data/test/spec_data-finder.rb +88 -0
  341. data/test/spec_data-finder.yml +115 -0
  342. data/test/spec_document.rb +76 -0
  343. data/test/spec_identifier.rb +29 -0
  344. data/test/spec_log.rb +52 -0
  345. data/test/spec_object.rb +20 -0
  346. data/test/spec_resource.rb +73 -0
  347. data/test/spec_update-criteria.rb +83 -0
  348. data/test/test-util.rb +223 -0
  349. data/test/transformer/spec_block-transformer.rb +26 -0
  350. data/test/transformer/spec_expr-transformer.rb +106 -0
  351. data/test/transformer/spec_feature-expr-transformer.rb +21 -0
  352. data/test/transformer/spec_flow-element-transformer.rb +154 -0
  353. data/test/transformer/spec_literal-transformer.rb +58 -0
  354. data/test/transformer/spec_rule-definition-transformer.rb +168 -0
  355. data/test/tuple-space/spec_tuple-space-provider.rb +36 -0
  356. data/test/tuple-space/spec_tuple-space-receiver.rb +32 -0
  357. data/test/tuple-space/spec_tuple-space-server.rb +49 -0
  358. data/test/tuple/spec_basic-tuple.rb +87 -0
  359. data/test/tuple/spec_data-tuple.rb +85 -0
  360. data/test/tuple/spec_finished-tuple.rb +61 -0
  361. data/test/tuple/spec_task-tuple.rb +127 -0
  362. data/test/tuple/spec_working-tuple.rb +58 -0
  363. data/test/uri-scheme/spec_broadcast-scheme.rb +40 -0
  364. data/test/uri-scheme/spec_dropbox-scheme.rb +31 -0
  365. data/test/uri-scheme/spec_local-scheme.rb +69 -0
  366. metadata +660 -0
@@ -0,0 +1,150 @@
1
+ module Pione
2
+ module System
3
+ # FileCache is a caching system for task workers.
4
+ module FileCache
5
+ # Returns file cache class.
6
+ # @return [Class]
7
+ # CacheMethod class
8
+ def self.cache_method
9
+ @klass || SimpleCacheMethod
10
+ end
11
+
12
+ # Sets a file cache class.
13
+ # @param [Class] klass
14
+ # CacheMethod class
15
+ # @return [void]
16
+ def self.set_cache_method(klass)
17
+ @klass = klass
18
+ end
19
+
20
+ # Returns the singleton.
21
+ # @return [CacheMethod]
22
+ # cache method instance
23
+ def self.instance
24
+ @instance ||= cache_method.new
25
+ end
26
+
27
+ # Gets cached data path from the uri resource.
28
+ # @param [String] uri
29
+ # uri to get
30
+ # @return [String]
31
+ # cached path string
32
+ def self.get(uri)
33
+ instance.get(uri)
34
+ end
35
+
36
+ # Puts the data to uri resource and caches it.
37
+ def self.put(src, uri)
38
+ instance.put(src, uri)
39
+ end
40
+
41
+ # Shifts the resource from old uri to new uri.
42
+ # @param [String] old_uri
43
+ # old resource uri
44
+ # @param [String] new_uri
45
+ # new resource uri
46
+ # @return [void]
47
+ def self.shift(old_uri, new_uri)
48
+ instance.shift(old_uri, new_uri)
49
+ end
50
+
51
+ # FileCache is an interface class of cache methods.
52
+ class FileCacheMethod
53
+ # Gets the cache location path of the URI.
54
+ # @param [String] uri
55
+ # resource uri
56
+ # @return [String]
57
+ # cached path
58
+ def get(uri)
59
+ raise NotImplementedError
60
+ end
61
+
62
+ # Puts the file into cache with the URI.
63
+ # @return [void]
64
+ def put(src, uri)
65
+ raise NotImplementedError
66
+ end
67
+
68
+ # Shitfs the URI.
69
+ # @param [String] old_uri
70
+ # old resource uri
71
+ # @param [String] new_uri
72
+ # new resource uri
73
+ # @return [void]
74
+ def shift(old_uri, new_uri)
75
+ raise NotImplementedError
76
+ end
77
+ end
78
+
79
+ # SimpleCacheMethod is a simple cache method implementation.
80
+ class SimpleCacheMethod < FileCacheMethod
81
+ # Creates a method.
82
+ def initialize
83
+ @table = {}
84
+ @tmpdir = Global.file_cache_directory
85
+ end
86
+
87
+ # Gets cached data path from the uri resource.
88
+ # @param [String] uri
89
+ # resource uri
90
+ # @return [String]
91
+ # cached path
92
+ def get(uri)
93
+ # check cached or not
94
+ unless @table.has_key?(uri)
95
+ # prepare cache path
96
+ path = prepare_cache_path
97
+
98
+ # link the resource file to cache path
99
+ Resource[uri].link_to(path)
100
+ @table[uri.to_s] = path
101
+ end
102
+
103
+ return @table[uri.to_s]
104
+ end
105
+
106
+ # Puts the data to uri resource and caches it in local.
107
+ # @return [void]
108
+ def put(src, uri)
109
+ # prepare cache path
110
+ path = prepare_cache_path
111
+
112
+ # move the file from the working directory to cache
113
+ FileUtils.mv(src, path)
114
+
115
+ # make a symbolic link from original location to the cache
116
+ FileUtils.symlink(path, src)
117
+
118
+ # copy from cache to the resource file
119
+ @table[uri.to_s] = path
120
+ Resource[uri].link_from(path)
121
+ end
122
+
123
+ # @param [String] old_uri
124
+ # old resource uri
125
+ # @param [String] new_uri
126
+ # new resource uri
127
+ # @return [void]
128
+ def shift(old_uri, new_uri)
129
+ if path = @table[old_uri.to_s]
130
+ if new_uri.scheme == "local"
131
+ FileUtils.symlink(new_uri.path, path, :force => true)
132
+ end
133
+ @table[new_uri.to_s] = path
134
+ end
135
+ end
136
+
137
+ private
138
+
139
+ # Makes new cache path.
140
+ # @api private
141
+ def prepare_cache_path
142
+ cache = Tempfile.new("", Global.file_cache_directory)
143
+ path = cache.path
144
+ cache.close(true)
145
+ return path
146
+ end
147
+ end
148
+ end
149
+ end
150
+ end
@@ -0,0 +1,346 @@
1
+ module Pione
2
+ module System
3
+ # Global is a table of global variables in PIONE system. It defines item
4
+ # names, default values, and configuration conditions. You can set and get
5
+ # value by calling item named method.
6
+ module Global
7
+ # GlobalInterface provides item definition methods.
8
+ module GlobalInterface
9
+ # @api private
10
+ def self.extended(mod)
11
+ mod.instance_variable_set(:@__names__, [])
12
+ mod.instance_variable_set(:@__config__, {})
13
+ mod.instance_variable_set(:@__initializer__, [])
14
+ end
15
+
16
+ # Defines a global variable item.
17
+ # @param [Symbol] name
18
+ # item name
19
+ # @param [Boolean] configurable
20
+ # this means the item is configurable if true
21
+ # @param [Object] val
22
+ # default value
23
+ # @return [void]
24
+ def define_item(name, config, val=nil, &b)
25
+ @__names__ << name
26
+ if config
27
+ @__config__[name] = config.kind_of?(TrueClass) ? name : config
28
+ end
29
+
30
+ singleton_class.module_eval do |mod|
31
+ # value reader
32
+ define_method(name) do
33
+ instance_variable_get("@%s" % name)
34
+ end
35
+
36
+ # value writer
37
+ define_method("set_%s" % name) do |val|
38
+ instance_variable_set("@%s" % name, val)
39
+ end
40
+
41
+ # value writer
42
+ define_method("%s=" % name) do |val|
43
+ instance_variable_set("@%s" % name, val)
44
+ end
45
+ end
46
+
47
+ instance_variable_set("@%s" % name, val) if val
48
+ @__initializer__ << [name, b] if block_given?
49
+ end
50
+
51
+ # Returns all item names.
52
+ # @return [Symbol]
53
+ # all item names
54
+ def all_names
55
+ @__names__
56
+ end
57
+
58
+ # Initializes global values.
59
+ # @return [void]
60
+ def init
61
+ @__config__.each do |name, config_name|
62
+ if val = Global.config[config_name]
63
+ instance_variable_set("@%s" % name, val)
64
+ end
65
+ end
66
+
67
+ @__initializer__.each do |name, action|
68
+ unless instance_variable_get("@%s" % name)
69
+ instance_variable_set("@%s" % name, action.call)
70
+ end
71
+ end
72
+ end
73
+ end
74
+
75
+ extend GlobalInterface
76
+
77
+ #
78
+ # debug
79
+ #
80
+
81
+ # show distributed object communication
82
+ define_item(:show_communication, false, false)
83
+
84
+ # show presence notifier
85
+ define_item(:show_presence_notifier, false, false)
86
+
87
+ #
88
+ # system
89
+ #
90
+
91
+ define_item(:config, true, Config.new("~/.pione/config.yml"))
92
+
93
+ # .pione dir
94
+ define_item(:dot_pione_dir, true) do
95
+ Pathname.new("~/.pione").expand_path.tap {|path|
96
+ path.mkpath unless path.exist?
97
+ }
98
+ end
99
+
100
+ # config path
101
+ define_item(:config_path, true) do
102
+ Global.dot_pione_dir + "config.yml"
103
+ end
104
+
105
+ # root of working directory
106
+ define_item(:working_directory_root, true) do
107
+ Pathname.new(File.join(Dir.tmpdir, "pione-wd-" + Etc.getlogin)).tap {|path|
108
+ path.mkpath unless path.exist?
109
+ }
110
+ end
111
+
112
+ # working directory
113
+ define_item(:working_directory, false) do
114
+ Pathname.new(Dir.mktmpdir(nil, Global.working_directory_root))
115
+ end
116
+
117
+ # root of file cache directory
118
+ define_item(:file_cache_directory_root, true) do
119
+ Pathname.new(File.join(Dir.tmpdir, "pione-file-cache-" + Etc.getlogin)).tap {|path|
120
+ path.mkpath unless path.exist?
121
+ }
122
+ end
123
+
124
+ # file cache directory
125
+ define_item(:file_cache_directory, false) do
126
+ Pathname.new(Dir.mktmpdir(nil, Global.file_cache_directory_root))
127
+ end
128
+
129
+ # system front server
130
+ define_item(:front, false)
131
+
132
+ # This means the process's IP address.
133
+ define_item(:my_ip_address, true) do
134
+ Util.my_ip_address_list.first
135
+ end
136
+
137
+ # This means current working directory. The directory is defined by the
138
+ # following rule:
139
+ # - 1. if environment variable "PWD" is defined, use it
140
+ # - 2. if "pwd" command exists, use the command result with logical option
141
+ # - 3. otherwise Dir.pwd
142
+ define_item(:pwd, false) do
143
+ (ENV["PWD"] || `pwd -L`.chomp || Dir.pwd)
144
+ end
145
+
146
+ #
147
+ # pione-client
148
+ #
149
+
150
+ # client-front port range begin
151
+ define_item(:client_front_port_range_begin, true, 40000)
152
+
153
+ # client-front port range end
154
+ define_item(:client_front_port_range_end, true, 40999)
155
+
156
+ # client-front port range
157
+ define_item(:client_front_port_range, false) do
158
+ Range.new(
159
+ Global.client_front_port_range_begin,
160
+ Global.client_front_port_range_end
161
+ )
162
+ end
163
+
164
+ #
165
+ # pione-broker
166
+ #
167
+
168
+ # broker-front port range begin
169
+ define_item(:broker_front_port_range_begin, true, 41000)
170
+
171
+ # broker-front port range end
172
+ define_item(:broker_front_port_range_end, true, 41999)
173
+
174
+ # broker-front port range
175
+ define_item(:broker_front_port_range, false) do
176
+ Range.new(
177
+ Global.broker_front_port_range_begin,
178
+ Global.broker_front_port_range_end
179
+ )
180
+ end
181
+
182
+ #
183
+ # provider & receiver
184
+ #
185
+
186
+ # presence port
187
+ define_item(:presence_port, true, 56000)
188
+
189
+ #
190
+ # pione-tuple-space-provider
191
+ #
192
+
193
+ # tuple space provider uri
194
+ define_item(:tuple_space_provider_uri, false)
195
+
196
+ # provider-front port range begin
197
+ define_item(:tuple_space_provider_front_port_range_begin, true, 42000)
198
+
199
+ # provider-front port range end
200
+ define_item(:tuple_space_provider_front_port_range_end, true, 42999)
201
+
202
+ # provider-front port range
203
+ define_item(:tuple_space_provider_front_port_range, false) do
204
+ Range.new(
205
+ Global.tuple_space_provider_front_port_range_begin,
206
+ Global.tuple_space_provider_front_port_range_end
207
+ )
208
+ end
209
+
210
+ # presence notification address
211
+ define_item(:presence_notification_addresses, true) do
212
+ [URI.parse("broadcast://%s:%s" % ["255.255.255.255", Global.presence_port])]
213
+ end
214
+
215
+ #
216
+ # pione-tuple-space-receiver
217
+ #
218
+
219
+ # tuple space receiver uri
220
+ define_item(:tuple_space_receiver_uri, false)
221
+
222
+ # receiver-front port range begin
223
+ define_item(:tuple_space_receiver_front_port_range_begin, true, 43000)
224
+
225
+ # receiver-front port range end
226
+ define_item(:tuple_space_receiver_front_port_range_end, true, 43999)
227
+
228
+ # receiver-front port range
229
+ define_item(:tuple_space_receiver_front_port_range, false) do
230
+ Range.new(
231
+ Global.tuple_space_receiver_front_port_range_begin,
232
+ Global.tuple_space_receiver_front_port_range_end
233
+ )
234
+ end
235
+
236
+ # disconnect time for tuple space receiver
237
+ define_item(:tuple_space_receiver_disconnect_time, true, 180)
238
+
239
+ #
240
+ # relay
241
+ #
242
+
243
+ # relay user database path
244
+ define_item(:relay_client_db_path, true) do
245
+ Global.dot_pione_dir + "relay-client.db"
246
+ end
247
+
248
+ # relay client database object
249
+ define_item(:relay_client_db, false)
250
+
251
+ # relay account database path
252
+ define_item(:relay_account_db_path, true) do
253
+ Global.dot_pione_dir + "relay-account.db"
254
+ end
255
+
256
+ # relay account database object
257
+ define_item(:relay_account_db, false)
258
+
259
+ # relay server's realm
260
+ define_item(:relay_realm, true)
261
+
262
+ # relay uri
263
+ define_item(:relay_uri, false)
264
+
265
+ # relay port
266
+ define_item(:relay_port, true, 56001)
267
+
268
+ # certname for relay server
269
+ define_item(:relay_ssl_certname, true, [["CN", "localhost.localhost"]])
270
+
271
+ # relay-front port range begin
272
+ define_item(:relay_front_port_range_begin, true, 44000)
273
+
274
+ # relay-front port range end
275
+ define_item(:relay_front_port_range_end, true, 44999)
276
+
277
+ # relay-front port range
278
+ define_item(:relay_front_port_range, false) do
279
+ Range.new(
280
+ Global.relay_front_port_range_begin,
281
+ Global.relay_front_port_range_end
282
+ )
283
+ end
284
+
285
+ # relay-proxy port range begin
286
+ define_item(:relay_proxy_port_range_begin, true, 45000)
287
+
288
+ # relay-proxy port range end
289
+ define_item(:relay_proxy_port_range_end, true, 45999)
290
+
291
+ # relay-proxy port range
292
+ define_item(:relay_proxy_port_range, false) do
293
+ Range.new(
294
+ Global.relay_proxy_port_range_begin,
295
+ Global.relay_proxy_port_range_end
296
+ )
297
+ end
298
+
299
+ # relay-client authentication timeout second
300
+ define_item(:relay_client_auth_timeout_sec, true, 5)
301
+
302
+ # relay tuple space server
303
+ define_item(:relay_tuple_space_server, false)
304
+
305
+ # relay-transmitter proxy side port range begin
306
+ define_item(:relay_transmitter_proxy_side_port_begin, true, 46000)
307
+
308
+ # relay-transmitter proxy side port range end
309
+ define_item(:relay_transmitter_proxy_side_port_end, true, 46999)
310
+
311
+ # relay-transmitter proxy side port range
312
+ define_item(:relay_transmitter_proxy_side_port_range, false) do
313
+ Range.new(
314
+ Global.relay_transmitter_proxy_side_port_begin,
315
+ Global.relay_transmitter_proxy_side_port_end
316
+ )
317
+ end
318
+
319
+ # relay-receiver
320
+ define_item(:relay_receiver, false)
321
+
322
+ #
323
+ # task worker
324
+ #
325
+
326
+ # task-worker-front port range begin
327
+ define_item(:task_worker_front_port_range_begin, true, 50000)
328
+
329
+ # task-worker-front port range end
330
+ define_item(:task_worker_front_port_range_end, true, 54999)
331
+
332
+ # task-worker-front port range
333
+ define_item(:task_worker_front_port_range, false) do
334
+ Range.new(
335
+ Global.task_worker_front_port_range_begin,
336
+ Global.task_worker_front_port_range_end
337
+ )
338
+ end
339
+
340
+ #
341
+ # input generator
342
+ #
343
+ define_item(:input_generator_stream_check_timespan, true, 3)
344
+ end
345
+ end
346
+ end