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,282 @@
1
+ module Pione::Model
2
+ # Parameters is a PIONE mode class for parameters.
3
+ class Parameters < BasicModel
4
+ # InvalidParameter is raised when you specify invalid parameter.
5
+ class InvalidParameter < TypeError
6
+ # Creates a error.
7
+ # @param [Object] key
8
+ # specified key
9
+ def initialize(key)
10
+ @key = key
11
+ end
12
+
13
+ # @api private
14
+ def message
15
+ "invalid parameter key: %s" % [@key.inspect]
16
+ end
17
+ end
18
+
19
+ # InvalidArgument is raised when you specify invalid argument.
20
+ class InvalidArgument < TypeError
21
+ # Creates a error.
22
+ # @param [Object] val
23
+ # specified value
24
+ def initialize(val)
25
+ @val = val
26
+ end
27
+
28
+ # @api private
29
+ def message
30
+ "invalid argument value: %s" % [@val.inspect]
31
+ end
32
+ end
33
+
34
+ class << self
35
+ # Creates a empty parameters object.
36
+ # @return [Parameters]
37
+ # empty parameters
38
+ def empty
39
+ self.new({})
40
+ end
41
+
42
+ # Merges arguments' parameters.
43
+ # @param [Array<Parameters>] list
44
+ # merge target elements
45
+ # @return [Parameters]
46
+ # merged result
47
+ def merge(*list)
48
+ new_params = empty
49
+ list.each do |params|
50
+ new_params = new_params.merge(params)
51
+ end
52
+ return new_params
53
+ end
54
+ end
55
+
56
+ attr_reader :data
57
+ set_pione_model_type TypeParameters
58
+
59
+ # Creates a parameters object.
60
+ # @param [Hash{Variable => BasicModel}] data
61
+ # parameters data table
62
+ def initialize(data)
63
+ raise TypeError.new(data) unless data.kind_of?(Hash)
64
+ data.each do |key, val|
65
+ raise InvalidParameter.new(key) unless key.kind_of?(Variable)
66
+ raise InvalidArgument.new(val) unless val.kind_of?(BasicModel)
67
+ end
68
+ @data = data
69
+ super()
70
+ end
71
+
72
+ # Evaluates the object with variable table.
73
+ # @param [VariableTable] vtable
74
+ # variable tabale for evaluation
75
+ # @return [BasicModel]
76
+ # evaluated result
77
+ def eval(vtable)
78
+ return self.class.empty if empty?
79
+ data = @data.map{|key, val| [key, val.eval(vtable)]}.flatten(1)
80
+ self.class.new(Hash[*data])
81
+ end
82
+
83
+ # Returns true if parameters include variables.
84
+ # @return [Boolean]
85
+ # true if parameters include variables
86
+ def include_variable?
87
+ @data.any? {|_, val| val.include_variable?}
88
+ end
89
+
90
+ # @api private
91
+ def textize
92
+ "{" + @data.map{|k,v| "%s:%s" % [k.textize[1..-1], v.textize]}.join(", ") + "}"
93
+ end
94
+
95
+ # Returns value of parameter name.
96
+ # @param [String] name
97
+ # parameter name to get the value
98
+ # @return [BasicModel]
99
+ # the value
100
+ def [](name)
101
+ @data[Variable.new(name)]
102
+ end
103
+
104
+ # Returns the value corresponding to the parameter name. Raises an error
105
+ # when the parameter name is kind of a variable.
106
+ # @param [Variable] name
107
+ # variable to get the value
108
+ # @return [BasicModel]
109
+ # the value
110
+ def get(name)
111
+ raise InvalidParameter.new(name) unless name.kind_of?(Variable)
112
+ @data[name]
113
+ end
114
+
115
+ # Adds the parameter value and return new parameters.
116
+ # @param [Variable] name
117
+ # @param [BasicModel] value
118
+ # @return [Parameters]
119
+ # new parameters with the parameter
120
+ def set(name, value)
121
+ raise InvalidParameter.new(name) unless name.kind_of?(Variable)
122
+ raise InvalidArgument.new(value) unless value.kind_of?(BasicModel)
123
+ self.class.new(@data.merge({name => value}))
124
+ end
125
+
126
+ # Adds the parameter value.
127
+ # @param [Variable] name
128
+ # @param [BasicModel] value
129
+ # @return [void]
130
+ def set!(name, value)
131
+ raise InvalidParameter.new(name) unless name.kind_of?(Variable)
132
+ raise InvalidArgument.new(value) unless value.kind_of?(BasicModel)
133
+ @data.merge!({name => value})
134
+ end
135
+
136
+ # Adds the parameter value safety and return new parameters.
137
+ # @param [Variable] name
138
+ # @param [BasicModel] value
139
+ # @return [Parameters]
140
+ # new parameters with the parameter
141
+ def set_safety(name, value)
142
+ if not(@data.has_key?(name)) or @data[name].kind_of?(UndefinedValue)
143
+ set(name, value)
144
+ end
145
+ end
146
+
147
+ # Adds the parameter value safety.
148
+ # @param [Variable] name
149
+ # @param [BasicModel] value
150
+ # @return [void]
151
+ def set_safety!(name, value)
152
+ if not(@data.has_key?(name)) or @data[name].kind_of?(UndefinedValue)
153
+ set!(name, value)
154
+ end
155
+ end
156
+
157
+ # Deletes the parameter by name.
158
+ # @param [Variable] name
159
+ # target's name
160
+ # @return [Parameters]
161
+ # new parameters that deleted the target
162
+ def delete(name)
163
+ raise InvalidParameter.new(name) unless name.kind_of?(Variable)
164
+ new_data = @data.clone
165
+ new_data.delete(name)
166
+ self.class.new(new_data)
167
+ end
168
+
169
+ # Returns true if the parameters is empty.
170
+ # @return [Boolean]
171
+ # true if the parameters is empty
172
+ def empty?
173
+ @data.empty?
174
+ end
175
+
176
+ # Updates parameters with the argument and return new parameters with it.
177
+ # @param [BasicModel] other
178
+ # merge target
179
+ # @return [Parameters]
180
+ # new parameters that merged the target
181
+ def merge(other)
182
+ case other
183
+ when Parameters
184
+ self.class.new(@data.merge(other.data))
185
+ when Variable
186
+ self.class.new(@data.merge({other => UndefinedValue.new}))
187
+ when Assignment
188
+ self.class.new(@data.merge({other.variable => other.expr}))
189
+ else
190
+ raise TypeError.new(other)
191
+ end
192
+ end
193
+
194
+ # Updates parameters with the argument destructively.
195
+ # @param [BasicModel] other
196
+ # merge target
197
+ # @return [void]
198
+ def merge!(other)
199
+ case other
200
+ when Parameters
201
+ @data.merge!(other.data)
202
+ when Variable
203
+ @data.merge!({other => UndefinedValue.new})
204
+ when Assignment
205
+ @data.merge!({other.variable => other.expr})
206
+ else
207
+ raise TypeError.new(other)
208
+ end
209
+ end
210
+
211
+ # Converts into variable table.
212
+ # @return [VariableTable]
213
+ # variable table which values are same as the parameters.
214
+ def as_variable_table
215
+ VariableTable.new(@data)
216
+ end
217
+
218
+ # Returns key list.
219
+ # @return [Array<Variable>]
220
+ # parameter key list
221
+ def keys
222
+ @data.keys.sort
223
+ end
224
+
225
+ # @api private
226
+ def string_form
227
+ "{" + @data.map{|k,v| "#{k}: #{v}"}.join(", ") + "}"
228
+ end
229
+
230
+ # @api private
231
+ def to_json(*args)
232
+ @data.to_json(*args)
233
+ end
234
+
235
+ # @api private
236
+ def ==(other)
237
+ return false unless other.kind_of?(self.class)
238
+ @data == other.data
239
+ end
240
+
241
+ alias :eql? :"=="
242
+
243
+ # @api private
244
+ def hash
245
+ @data.hash
246
+ end
247
+ end
248
+
249
+ TypeParameters.instance_eval do
250
+ define_pione_method('==', [TypeParameters], TypeBoolean) do |rec, other|
251
+ PioneBoolean.new(rec.data == other.data)
252
+ end
253
+
254
+ define_pione_method("!=", [TypeParameters], TypeBoolean) do |rec, other|
255
+ PioneBoolean.not(rec.call_pione_method("==", other))
256
+ end
257
+
258
+ define_pione_method("[]", [TypeString], TypeAny) do |rec, name|
259
+ rec.get(Variable.new(name.value))
260
+ end
261
+
262
+ define_pione_method("get", [TypeString], TypeAny) do |rec, name|
263
+ rec.get(Variable.new(name.value))
264
+ end
265
+
266
+ define_pione_method(
267
+ "set",
268
+ [TypeString, TypeAny],
269
+ TypeParameters
270
+ ) do |rec, name, val|
271
+ rec.set(Variable.new(name.value), val)
272
+ end
273
+
274
+ define_pione_method("empty?", [], TypeBoolean) do |rec|
275
+ PioneBoolean.new(rec.empty?)
276
+ end
277
+
278
+ define_pione_method("as_string", [], TypeString) do |rec|
279
+ PioneString.new(rec.string_form)
280
+ end
281
+ end
282
+ end
@@ -0,0 +1,120 @@
1
+ module Pione::Model
2
+ # Rule representation in the flow element context.
3
+ class RuleExpr < BasicModel
4
+ set_pione_model_type TypeRuleExpr
5
+
6
+ attr_reader :package
7
+ attr_reader :name
8
+ attr_reader :params
9
+
10
+ # Create a rule expression.
11
+ # @param [String] package pione package name
12
+ # @param [String] name rule name
13
+ # @param [Parameters] params parameters
14
+ def initialize(package, name, params=Parameters.empty)
15
+ @package = package
16
+ @name = name
17
+ @params = params
18
+ super()
19
+ end
20
+
21
+ # Returns rule path form.
22
+ # @return [String]
23
+ # rule path string
24
+ def path
25
+ "&%s:%s" % [@package.name, @name]
26
+ end
27
+
28
+ # FIXME
29
+ def rule_path
30
+ raise UnboundVariableError.new(self) if @package.include_variable?
31
+ "&%s:%s" % [@package.name, @name]
32
+ end
33
+
34
+ # @api private
35
+ def task_id_string
36
+ "RuleExpr<%s,#{@name}>" % [@package.task_id_string]
37
+ end
38
+
39
+ # @api private
40
+ def textize
41
+ "rule_expr(%s,\"%s\")" % [@package.textize, @name]
42
+ end
43
+
44
+ # Sets a package name and returns a new expression.
45
+ # @param [String] package
46
+ # package name
47
+ # @return [RuleExpr]
48
+ # new rule expression with the package name
49
+ def set_package(package)
50
+ return self.class.new(package, @name, @params)
51
+ end
52
+
53
+ # Sets parameters and returns a new expression.
54
+ # @param [Parameters] params
55
+ # parameters
56
+ # @return [RuleExpr]
57
+ # new rule expression with the parameters
58
+ def set_params(params)
59
+ return self.class.new(@package, @name, params)
60
+ end
61
+
62
+ # Evaluates the object with the variable table.
63
+ # @param [VariableTable] vtable
64
+ # variable table for evaluation
65
+ # @return [BasicModel]
66
+ # evaluation result
67
+ def eval(vtable)
68
+ return self.class.new(
69
+ @package.eval(vtable),
70
+ @name,
71
+ @params.eval(vtable)
72
+ )
73
+ end
74
+
75
+ # Returns true if the package or parameters include variables.
76
+ # @return [Boolean]
77
+ # true if the package or parameters include variables
78
+ def include_variable?
79
+ @package.include_variable? or @params.include_variable?
80
+ end
81
+
82
+ # @api private
83
+ def ==(other)
84
+ return false unless other.kind_of?(self.class)
85
+ return false unless @package = other.package
86
+ return false unless @name == other.name
87
+ return false unless @params == other.params
88
+ return true
89
+ end
90
+
91
+ # @api private
92
+ alias :eql? :"=="
93
+
94
+ # @api private
95
+ def hash
96
+ @package.hash + @name.hash + @params.hash
97
+ end
98
+ end
99
+
100
+ TypeRuleExpr.instance_eval do
101
+ define_pione_method("==", [TypeRuleExpr], TypeBoolean) do |rec, other|
102
+ PioneBoolean.new(
103
+ rec.package == other.package &&
104
+ rec.name == other.name &&
105
+ rec.params == other.params)
106
+ end
107
+
108
+ define_pione_method("!=", [TypeRuleExpr], TypeBoolean) do |rec, other|
109
+ PioneBoolean.not(rec.call_pione_method("==", other))
110
+ end
111
+
112
+ define_pione_method("params", [TypeParameters], TypeRuleExpr) do |rec, params|
113
+ rec.set_params(params)
114
+ end
115
+
116
+ define_pione_method("as_string", [], TypeString) do |rec|
117
+ PioneString.new(rec.name)
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,166 @@
1
+ module Pione::Model
2
+ # RuleIOElement is a special PIONE model object for matched data name result.
3
+ class RuleIOElement < BasicModel
4
+ set_pione_model_type TypeRuleIOElement
5
+
6
+ attr_accessor :name
7
+ attr_accessor :uri
8
+ attr_accessor :match
9
+
10
+ # Creates a element with the name.
11
+ # @param [PioneString, String] name
12
+ # element name
13
+ def initialize(name)
14
+ @name = name.kind_of?(PioneString) ? name : PioneString.new(name)
15
+ @uri = PioneString.new("")
16
+ @match = PioneList.new()
17
+ end
18
+
19
+ # @api private
20
+ def textize
21
+ "rule-io-element(%s,%s,%s)" % [@name.to_ruby, @uri.textize, @match.textize]
22
+ end
23
+
24
+ # @api private
25
+ def uri=(uri)
26
+ @uri = uri.to_pione
27
+ end
28
+
29
+ # @api private
30
+ def ==(other)
31
+ return false unless other.kind_of?(self.class)
32
+ @name == other.name && @uri == other.uri && @match == other.match
33
+ end
34
+
35
+ alias :eql? :"=="
36
+
37
+ # @api private
38
+ def hash
39
+ @value.hash
40
+ end
41
+
42
+ #
43
+ # pione method
44
+ #
45
+
46
+ define_pione_method("==", [TypeRuleIOElement], TypeBoolean) do |rec, other|
47
+ PioneBoolean.new(rec.values == other.values)
48
+ end
49
+
50
+ define_pione_method("!=", [TypeRuleIOElement], TypeBoolean) do |rec, other|
51
+ PioneBoolean.not(rec.call_pione_method("==", other))
52
+ end
53
+
54
+ define_pione_method("uri", [], TypeString) do |rec, other|
55
+ PioneString.new(rec.uri)
56
+ end
57
+
58
+ define_pione_method("match", [], TypeList.new(TypeString)) do |rec|
59
+ rec.match
60
+ end
61
+
62
+ define_pione_method("MATCH", [], TypeList.new(TypeString)) do |rec|
63
+ rec.call_pione_method("match")
64
+ end
65
+
66
+ define_pione_method("[]", [TypeInteger], TypeAny) do |rec, i|
67
+ rec.match[i.value-1]
68
+ end
69
+
70
+ define_pione_method("as_string", [], TypeString) do |rec|
71
+ rec.name
72
+ end
73
+ end
74
+
75
+ # RuleIOList is a input or output list for RuleIOElement.
76
+ class RuleIOList < BasicModel
77
+ extend Forwardable
78
+
79
+ set_pione_model_type TypeRuleIOList
80
+
81
+ attr_accessor :elements
82
+ def_delegators :@elements, :[], :size, :length
83
+
84
+ # Creates a list object.
85
+ # @param [Array<RuleIOElement>] elts
86
+ # list elements
87
+ def initialize(elts = [])
88
+ @elements = elts
89
+ end
90
+
91
+ # Returns new list which appended the element.
92
+ # @param [RuleIOElement] elt
93
+ # target element
94
+ # @return [RuleIOList]
95
+ # new list object that added the element
96
+ def add(elt)
97
+ unless elt.kind_of?(RuleIOElement) || elt.kind_of?(self.class)
98
+ raise ArgumentError.new(elt)
99
+ end
100
+ self.class.new(@elements + [elt])
101
+ end
102
+
103
+ # Adds the element to this list.
104
+ # @param [RuleIOElement] elt
105
+ # target element
106
+ # @return [void]
107
+ def add!(elt)
108
+ unless elt.kind_of?(RuleIOElement) || elt.kinf_of?(self.class)
109
+ raise ArgumentError.new(elt)
110
+ end
111
+ @elements << elt
112
+ end
113
+
114
+ # @api private
115
+ def textize
116
+ "rule-io-list(%s)" % @elements.map{|elt|
117
+ elt.textize
118
+ }.join(DataExpr::SEPARATOR)
119
+ end
120
+
121
+ # @api private
122
+ def ==(other)
123
+ return false unless other.kind_of?(self.class)
124
+ @elements == other.elements
125
+ end
126
+
127
+ alias :eql? :"=="
128
+
129
+ # @api private
130
+ def hash
131
+ @elements.hash
132
+ end
133
+
134
+ #
135
+ # pione method
136
+ #
137
+
138
+ define_pione_method("==", [TypeRuleIOList], TypeBoolean) do |rec, other|
139
+ PioneBoolean.new(rec.values == other.values)
140
+ end
141
+
142
+ define_pione_method("!=", [TypeRuleIOList], TypeBoolean) do |rec, other|
143
+ PioneBoolean.not(rec.call_pione_method("==", other))
144
+ end
145
+
146
+ define_pione_method("[]", [TypeInteger], TypeAny) do |rec, i|
147
+ rec.elements[i.value-1]
148
+ end
149
+
150
+ define_pione_method("join", [TypeString], TypeString) do |rec, connective|
151
+ PioneString.new(
152
+ rec.elements.map{|elt|
153
+ elt.call_pione_method("as_string").to_ruby
154
+ }.join(connective.to_ruby)
155
+ )
156
+ end
157
+
158
+ define_pione_method("as_string", [], TypeString) do |rec|
159
+ PioneString.new(
160
+ rec.elements.map{|elt|
161
+ elt.call_pione_method("as_string").to_ruby
162
+ }.join(DataExpr::SEPARATOR)
163
+ )
164
+ end
165
+ end
166
+ end