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,151 @@
1
+ module Pione
2
+ module Command
3
+ class PioneTupleSpaceViewer < BasicCommand
4
+ set_program_name("pione-tuple-space-viewer")
5
+
6
+ define_option('-i', '--identifier=NAME', 'show tuples that have the identifier') do |name|
7
+ @identifiers << name
8
+ end
9
+
10
+ define_option('-e', '--exclude=NAME', 'exclude the tuple identifier') do |name|
11
+ @exclusions << name
12
+ end
13
+
14
+ define_option('--package=NAME', 'show tuples which domain has the package name') do |name|
15
+ @package = name
16
+ end
17
+
18
+ define_option('--rule=NAME', 'show tuples which domain has the rule name') do |name|
19
+ @rule = name
20
+ end
21
+
22
+ define_option('--rule-path=NAME', 'show tuples which domain has the rule path') do |path|
23
+ @rule_path = path
24
+ end
25
+
26
+ define_option('--data-name=NAME', 'show tuples that has the the name') do |name|
27
+ @data_name = name
28
+ end
29
+
30
+ define_option(
31
+ '--type=TYPE',
32
+ 'show the bag which has the type("bag", "read_waiter", or "take_waiter")'
33
+ ) do |bag_type|
34
+ @bag_type = bag_type.to_sym
35
+ end
36
+
37
+ define_option('--client=ADDRESS', 'druby address of target client process') do |address|
38
+ @address = address
39
+ end
40
+
41
+ def initialize
42
+ @identifiers = []
43
+ @exclusions = []
44
+ @package = nil
45
+ @rule = nil
46
+ @rule_path = nil
47
+ @data_name = nil
48
+ @bag_type = nil
49
+ @tuple_space_servers = []
50
+ end
51
+
52
+ def prepare
53
+ require 'pp'
54
+ find_tuple_space_servers
55
+
56
+ # tuple space servers are not found
57
+ if @tuple_space_servers.empty?
58
+ abort("No tuple space servers.")
59
+ end
60
+ end
61
+
62
+ def start
63
+ # print each bags
64
+ @tuple_space_servers.each do |address, tuple_space_server|
65
+ puts "TupleSpaceServer: %s" % Terminal.red(address)
66
+ puts "-"*78
67
+ if @bag_type == :bag or @bag_type.nil?
68
+ puts "*** bag ***"
69
+ show_bag(tuple_space_server, :bag)
70
+ end
71
+ if @bag_type == :read_waiter or @bag_type.nil?
72
+ puts "*** read waiter ***"
73
+ show_bag(tuple_space_server, :read_waiter)
74
+ end
75
+ if @bag_type == :take_waiter or @bag_type.nil?
76
+ puts "*** take waiter ***"
77
+ show_bag(tuple_space_server, :take_waiter)
78
+ end
79
+
80
+ # summary
81
+ puts "*** summary ***"
82
+ puts "task: %s" % tuple_space_server.task_size
83
+ puts "working: %s" % tuple_space_server.working_size
84
+ puts "finished: %s" % tuple_space_server.finished_size
85
+ puts "data: %s" % tuple_space_server.data_size
86
+ end
87
+ end
88
+
89
+ private
90
+
91
+ def find_tuple_space_servers
92
+ if @address
93
+ @tuple_space_servers << [@address, get_tuple_space_server(@address)]
94
+ else
95
+ find_tuple_space_servers_in_range
96
+ end
97
+ end
98
+
99
+ def find_tuple_space_servers_in_range
100
+ Global.client_front_port_range.each do |port|
101
+ begin
102
+ address = "druby://%s:%s" % [Global.my_ip_address, port]
103
+ @tuple_space_servers << [address, get_tuple_space_server(address)]
104
+ rescue
105
+ # ignore
106
+ end
107
+ end
108
+ end
109
+
110
+ # Gets a tuple space server from the address.
111
+ def get_tuple_space_server(address)
112
+ ref = DRbObject.new_with_uri(address)
113
+ ref.ping
114
+ ref.tuple_space_server
115
+ end
116
+
117
+ def show_bag(tuple_space_server, type)
118
+ tuple_space_server.all_tuples(type).each do |tuple|
119
+ next if not(@identifiers.empty?) and not(@identifiers.include?(tuple.first.to_s))
120
+ next if @exclusions.include?(tuple.first.to_s)
121
+
122
+ t = Tuple.from_array(tuple)
123
+
124
+ # rule_path
125
+ if @rule_path
126
+ if t.respond_to?(:domain)
127
+ next unless /^(#{@rule_path})/.match(t.domain)
128
+ else
129
+ next
130
+ end
131
+ end
132
+
133
+ # name
134
+ if @data_name
135
+ if t.kind_of?(Tuple::Data) and t.respond_to?(:name)
136
+ next unless Model::DataExpr.new(@data_name).match(t.name)
137
+ else
138
+ next
139
+ end
140
+ end
141
+
142
+ # show
143
+ res = PP.pp(tuple, "")
144
+ res.gsub!(/\:[a-z]\w+/) {|s| Terminal.red(s) }
145
+ res.gsub!(/\#<(\S+)/) {|s| "#<%s" % Terminal.green($1) }
146
+ puts res
147
+ end
148
+ end
149
+ end
150
+ end
151
+ end
@@ -0,0 +1,6 @@
1
+ module Pione
2
+ module Command
3
+ module TupleSpaceProviderOwner
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,64 @@
1
+ module Pione
2
+ module Front
3
+ # FrontError is raised when front server cannnot start.
4
+ class FrontError < StandardError; end
5
+
6
+ # This is base class for all PIONE front classes. PIONE fronts exist in each
7
+ # command and control its process.
8
+ class BasicFront < PioneObject
9
+ include DRbUndumped
10
+ extend Forwardable
11
+
12
+ attr_reader :command
13
+ attr_reader :uri
14
+ attr_reader :attrs
15
+ attr_reader :link
16
+
17
+ # Creates a front server as druby's service.
18
+ def initialize(command, port)
19
+ @command = command
20
+ # @uri = start_service(port, {:verbose => true})
21
+ @uri = start_service(port, {})
22
+ @attrs = {}
23
+ end
24
+
25
+ # Returns the pid.
26
+ def pid
27
+ Process.pid
28
+ end
29
+
30
+ def link
31
+ @__link__
32
+ end
33
+
34
+ # Terminates the front.
35
+ def terminate
36
+ DRb.stop_service
37
+ end
38
+
39
+ private
40
+
41
+ # Starts drb service and returns the URI.
42
+ def start_service(port, config)
43
+ if port.kind_of?(Range)
44
+ port = port.each
45
+ begin
46
+ uri = "druby://%s:%s" % [Global.my_ip_address, port.next]
47
+ @__link__ = DRb.start_service(uri, self, config)
48
+ rescue StopIteration => e
49
+ raise FrontError.new("You couldn't start front server.")
50
+ rescue
51
+ retry
52
+ end
53
+ else
54
+ begin
55
+ DRb.start_service(port ? "druby://%s:%s" % [Global.my_ip_address, port] : nil, self, config)
56
+ rescue => e
57
+ raise FrontError.new("You couldn't start front server: %s" % e.message)
58
+ end
59
+ end
60
+ return DRb.uri
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,30 @@
1
+ module Pione
2
+ module Front
3
+ # BrokerFront is a front class for pione-broker command.
4
+ class BrokerFront < BasicFront
5
+ include TaskWorkerOwner
6
+
7
+ def_delegator :@command, :broker
8
+
9
+ # Create a new front.
10
+ def initialize(command)
11
+ super(command, Global.broker_front_port_range)
12
+ initialize_task_worker_owner
13
+ end
14
+
15
+ def get_tuple_space_server(connection_id)
16
+ broker.get_tuple_space_server(connection_id)
17
+ end
18
+
19
+ # Override the method with adding task worker agent to broker.
20
+ def add_task_worker_front(task_worker_front, connection_id)
21
+ super
22
+ broker.task_workers << task_worker_front.agent
23
+ end
24
+
25
+ def set_tuple_space_receiver(uri)
26
+ Global.set_tuple_space_receiver_uri(uri)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,28 @@
1
+ module Pione
2
+ module Front
3
+ # ClientFront is a front class for +pione-client+ command.
4
+ class ClientFront < BasicFront
5
+ extend Forwardable
6
+ include TaskWorkerOwner
7
+ include TupleSpaceProviderOwner
8
+
9
+ def_delegator :@command, :tuple_space_server
10
+ def_delegator :@command, :name
11
+
12
+ # Create a new front.
13
+ def initialize(command)
14
+ super(command, Global.client_front_port_range)
15
+ initialize_task_worker_owner
16
+ end
17
+
18
+ # Returns client's tuple space server for task workers.
19
+ # @param [String] connection_id
20
+ # connection id of task worker
21
+ # @return [TupleSpaceServer]
22
+ # tuple space server
23
+ def get_tuple_space_server(connection_id)
24
+ tuple_space_server
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,19 @@
1
+ module Pione
2
+ module Front
3
+ class RelayFront < BasicFront
4
+ include TupleSpaceProviderOwner
5
+
6
+ def_delegator :@command, :presence_port
7
+ def_delegator :@command, :tuple_space_server
8
+
9
+ # Create a new front.
10
+ def initialize(command)
11
+ super(command, Global.relay_front_port_range)
12
+ end
13
+
14
+ def presence_notifier
15
+ tuple_space_provider
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ module Pione
2
+ module Front
3
+ # TaskWorkerFront is a front class for pione-task-worker command.
4
+ class TaskWorkerFront < BasicFront
5
+ def_delegator :@command, :caller_front
6
+ def_delegator :@command, :connection_id
7
+ def_delegator :@command, :agent
8
+ def_delegator :@command, :tuple_space_server
9
+
10
+ # Create a new front.
11
+ def initialize(command)
12
+ super(command, Global.task_worker_front_port_range)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,42 @@
1
+ module Pione
2
+ module Front
3
+ module TaskWorkerOwner
4
+ attr_reader :task_worker_fronts
5
+ attr_reader :task_worker_front_connection_id
6
+
7
+ def get_tuple_space_server
8
+ raise NotImplementedError
9
+ end
10
+
11
+ def add_task_worker_front(task_worker_front, connection_id)
12
+ @task_worker_fronts << task_worker_front
13
+ @task_worker_front_connection_id << connection_id
14
+ end
15
+
16
+ def remove_task_worker_front(task_worker_front, connection_id)
17
+ @task_worker_fronts.delete(task_worker_front)
18
+ @task_worker_front_connection_id.delete(connection_id)
19
+ end
20
+
21
+ def terminate
22
+ terminate_task_worker_fronts
23
+ end
24
+
25
+ private
26
+
27
+ def initialize_task_worker_owner
28
+ @task_worker_fronts = []
29
+ @task_worker_front_connection_id = []
30
+ end
31
+
32
+ def terminate_task_worker_fronts
33
+ @task_worker_fronts.each do |front|
34
+ begin
35
+ front.terminate
36
+ rescue
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,22 @@
1
+ module Pione
2
+ module Front
3
+ # TupleSpaceProviderFront is a front class for pione-tuple-space-provider
4
+ # command.
5
+ class TupleSpaceProviderFront < BasicFront
6
+ def_delegator :@command, :tuple_space_provider
7
+ def_delegator :@command, :presence_port
8
+
9
+ def initialize(command)
10
+ super(command, Global.tuple_space_provider_front_port_range)
11
+ end
12
+
13
+ def presence_notifier
14
+ tuple_space_provider
15
+ end
16
+
17
+ def tuple_space_servers
18
+ tuple_space_provider.tuple_space_servers
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,11 @@
1
+ module Pione
2
+ module Front
3
+ module TupleSpaceProviderOwner
4
+ # Sets the uri as tuple space provider.
5
+ # @return [void]
6
+ def set_tuple_space_provider(uri)
7
+ Global.tuple_space_provider_uri = uri
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,18 @@
1
+ module Pione
2
+ module Front
3
+ # TupleSpaceProviderFront is a front class for pione-tuple-space-receiver
4
+ # command.
5
+ class TupleSpaceReceiverFront < BasicFront
6
+ def_delegator :@command, :tuple_space_receiver
7
+ def_delegator :@command, :presence_port
8
+
9
+ def initialize(command)
10
+ super(command, Global.tuple_space_receiver_front_port_range)
11
+ end
12
+
13
+ def presence_notifier
14
+ tuple_space_receiver
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,89 @@
1
+ module Pione::Model
2
+ # Assignment represents a value assignment for variable.
3
+ # @example
4
+ # # assigning a string
5
+ # $X := "a"
6
+ # # => Assignment.new(Variable.new('X'), PioneString.new('a'))
7
+ # @example
8
+ # # assigning a variable value
9
+ # $X := $Y
10
+ # # => Assignment.new(Variable.new('X'), Variable.new('Y'))
11
+ class Assignment < BasicModel
12
+ set_pione_model_type TypeAssignment
13
+
14
+ # Returns the variable part of assignment.
15
+ attr_reader :variable
16
+
17
+ # Returns the expression part of assignment.
18
+ attr_reader :expr
19
+
20
+ # Creates an assignment.
21
+ # @param [Variable] variable
22
+ # variable part of assignment
23
+ # @param [BasicModel] expr
24
+ # expression part of assignment
25
+ def initialize(variable, expr)
26
+ check_argument_type(variable, Variable)
27
+ check_argument_type(expr, BasicModel)
28
+ @variable = variable
29
+ @expr = expr
30
+ super()
31
+ end
32
+
33
+ # Evaluates the assignment. This method updates the variable table with the
34
+ # variable and expression. The expression is pushed into the table directory
35
+ # as it is because of lazy evaluation.
36
+ # @param [VariableTable] vtable
37
+ # variable table for evaluation
38
+ # @return [BasicModel]
39
+ # self
40
+ def eval(vtable)
41
+ vtable.set(@variable, @expr)
42
+ end
43
+
44
+ def set_toplevel(b)
45
+ @variable.set_toplevel(b)
46
+ end
47
+
48
+ # Returns true if the assignment is defined in toplevel.
49
+ # @return [Boolean]
50
+ # true if the assignment is defined in toplevel
51
+ def toplevel?
52
+ @variable.toplevel?
53
+ end
54
+
55
+ # Returns false because assignment form is complex(pair of variable and
56
+ # expression).
57
+ # @return [Boolean]
58
+ # false
59
+ def atomic?
60
+ false
61
+ end
62
+
63
+ # Returns true if the expression part of assignment includes variable.
64
+ # @return [Boolean]
65
+ # true if the expression part of assignment includes variable
66
+ def include_variable?
67
+ @expr.include_variable?
68
+ end
69
+
70
+ # @api private
71
+ def textize
72
+ "%s:=%s" % [@variable.textize, @expr.textize]
73
+ end
74
+
75
+ # Returns true if other is a variable object which name is same as myself.
76
+ # @api private
77
+ def ==(other)
78
+ return false unless other.kind_of?(self.class)
79
+ @variable == other.variable && @expr == other.expr
80
+ end
81
+
82
+ alias :eql? :"=="
83
+
84
+ # @api private
85
+ def hash
86
+ @variable.hash + @expr.hash
87
+ end
88
+ end
89
+ end