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,107 @@
1
+ module Pione::Model
2
+ # PioneFloat represents float values in PIONE system.
3
+ class PioneFloat < BasicModel
4
+ set_pione_model_type TypeFloat
5
+
6
+ attr_reader :value
7
+
8
+ # Creates a float value in PIONE system.
9
+ # @param [Float] value
10
+ # value in ruby
11
+ def initialize(value)
12
+ @value = value
13
+ super()
14
+ end
15
+
16
+ # @api private
17
+ def textize
18
+ "#PioneFloat{%s}" % @value
19
+ # @value.to_s
20
+ end
21
+
22
+ # Returns ruby's value.
23
+ # @return [Float]
24
+ # ruby's value
25
+ def to_ruby
26
+ return @value
27
+ end
28
+
29
+ # @api private
30
+ def ==(other)
31
+ return false unless other.kind_of?(self.class)
32
+ @value == other.value
33
+ end
34
+
35
+ alias :eql? :"=="
36
+
37
+ # @api private
38
+ def hash
39
+ @value.hash
40
+ end
41
+ end
42
+
43
+ TypeFloat.instance_eval do
44
+ # Returns true if the other equals self.
45
+ # @return [PioneBoolean]
46
+ # true if the other equals self
47
+ define_pione_method("==", [TypeFloat], TypeBoolean) do |rec, other|
48
+ PioneBoolean.new(rec.value == other.value)
49
+ end
50
+
51
+ define_pione_method("!=", [TypeFloat], TypeBoolean) do |rec, other|
52
+ PioneBoolean.not(rec.call_pione_method("==", other))
53
+ end
54
+
55
+ define_pione_method(">", [TypeFloat], TypeBoolean) do |rec, other|
56
+ PioneBoolean.new(rec.value > other.value)
57
+ end
58
+
59
+ define_pione_method(">=", [TypeFloat], TypeBoolean) do |rec, other|
60
+ PioneBoolean.or(rec.call_pione_method(">", other),
61
+ rec.call_pione_method("==", other))
62
+ end
63
+
64
+ define_pione_method("<", [TypeFloat], TypeBoolean) do |rec, other|
65
+ PioneBoolean.new(rec.value < other.value)
66
+ end
67
+
68
+ define_pione_method("<=", [TypeFloat], TypeBoolean) do |rec, other|
69
+ PioneBoolean.or(rec.call_pione_method("<", other),
70
+ rec.call_pione_method("==", other))
71
+ end
72
+
73
+ define_pione_method("+", [TypeFloat], TypeFloat) do |rec, other|
74
+ PioneFloat.new(rec.value + other.value)
75
+ end
76
+
77
+ define_pione_method("-", [TypeFloat], TypeFloat) do |rec, other|
78
+ PioneFloat.new(rec.value - other.value)
79
+ end
80
+
81
+ define_pione_method("*", [TypeFloat], TypeFloat) do |rec, other|
82
+ PioneFloat.new(rec.value * other.value)
83
+ end
84
+
85
+ define_pione_method("%", [TypeFloat], TypeFloat) do |rec, other|
86
+ # TODO: zero division error
87
+ PioneFloat.new(rec.value % other.value)
88
+ end
89
+
90
+ define_pione_method("/", [TypeFloat], TypeFloat) do |rec, other|
91
+ # TODO: zero division error
92
+ PioneFloat.new(rec.value / other.value)
93
+ end
94
+
95
+ define_pione_method("as_string", [], TypeString) do |rec|
96
+ PioneString.new(rec.value.to_s)
97
+ end
98
+
99
+ define_pione_method("as_int", [], TypeInteger) do |rec|
100
+ PioneInteger.new(rec.value.to_i)
101
+ end
102
+
103
+ define_pione_method("as_float", [], TypeFloat) do |rec|
104
+ rec
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,140 @@
1
+ module Pione::Model
2
+ # PioneInteger represents integer value in PIONE system.
3
+ class PioneInteger < BasicModel
4
+ set_pione_model_type TypeInteger
5
+
6
+ attr_reader :value
7
+
8
+ # Creates a integer value in PIONE system.
9
+ # @param [Integer] value
10
+ # value in ruby
11
+ def initialize(value)
12
+ @value = value
13
+ super()
14
+ end
15
+
16
+ # @api private
17
+ def task_id_string
18
+ "Integer<#{@value}>"
19
+ end
20
+
21
+ # @api private
22
+ def textize
23
+ @value.to_s
24
+ end
25
+
26
+ # Returns the ruby's value.
27
+ # @return [Integer]
28
+ # ruby's value
29
+ def to_ruby
30
+ return @value
31
+ end
32
+
33
+ # @api private
34
+ def ==(other)
35
+ return false unless other.kind_of?(self.class)
36
+ @value == other.value
37
+ end
38
+
39
+ alias :eql? :"=="
40
+
41
+ # @api private
42
+ def hash
43
+ @value.hash
44
+ end
45
+
46
+ # @api private
47
+ def inspect
48
+ "#<Pione::Model::PioneInteger @value=%s>" % @value.inspect
49
+ end
50
+
51
+ # @api private
52
+ alias :to_s :inspect
53
+ end
54
+
55
+ TypeInteger.instance_eval do
56
+ define_pione_method("==", [TypeInteger], TypeBoolean) do |rec, other|
57
+ PioneBoolean.new(rec.value == other.value)
58
+ end
59
+
60
+ define_pione_method("!=", [TypeInteger], TypeBoolean) do |rec, other|
61
+ PioneBoolean.not(rec.call_pione_method("==", other))
62
+ end
63
+
64
+ define_pione_method(">", [TypeInteger], TypeBoolean) do |rec, other|
65
+ PioneBoolean.new(rec.value > other.value)
66
+ end
67
+
68
+ define_pione_method(">=", [TypeInteger], TypeBoolean) do |rec, other|
69
+ PioneBoolean.or(rec.call_pione_method(">", other),
70
+ rec.call_pione_method("==", other))
71
+ end
72
+
73
+ define_pione_method("<", [TypeInteger], TypeBoolean) do |rec, other|
74
+ PioneBoolean.new(rec.value < other.value)
75
+ end
76
+
77
+ define_pione_method("<=", [TypeInteger], TypeBoolean) do |rec, other|
78
+ PioneBoolean.or(rec.call_pione_method("<", other),
79
+ rec.call_pione_method("==", other))
80
+ end
81
+
82
+ define_pione_method("+", [TypeInteger], TypeInteger) do |rec, other|
83
+ PioneInteger.new(rec.value + other.value)
84
+ end
85
+
86
+ define_pione_method("-", [TypeInteger], TypeInteger) do |rec, other|
87
+ PioneInteger.new(rec.value - other.value)
88
+ end
89
+
90
+ define_pione_method("*", [TypeInteger], TypeInteger) do |rec, other|
91
+ PioneInteger.new(rec.value * other.value)
92
+ end
93
+
94
+ define_pione_method("%", [TypeInteger], TypeInteger) do |rec, other|
95
+ # TODO: zero division error
96
+ PioneInteger.new(rec.value % other.value)
97
+ end
98
+
99
+ define_pione_method("/", [TypeInteger], TypeInteger) do |rec, other|
100
+ # TODO: zero division error
101
+ PioneInteger.new(rec.value / other.value)
102
+ end
103
+
104
+ define_pione_method("as_string", [], TypeString) do |rec|
105
+ PioneString.new(rec.value.to_s)
106
+ end
107
+
108
+ define_pione_method("as_int", [], TypeInteger) do |rec|
109
+ rec
110
+ end
111
+
112
+ define_pione_method("as_float", [], TypeFloat) do |rec|
113
+ PioneFloat.new(rec.value.to_f)
114
+ end
115
+
116
+ define_pione_method("next", [], TypeInteger) do |rec|
117
+ PioneInteger.new(rec.value.next)
118
+ end
119
+
120
+ define_pione_method("prev", [], TypeInteger) do |rec|
121
+ PioneInteger.new(rec.value.pred)
122
+ end
123
+
124
+ define_pione_method("even?", [], TypeBoolean) do |rec|
125
+ PioneBoolean.new(rec.value.even?)
126
+ end
127
+
128
+ define_pione_method("odd?", [], TypeBoolean) do |rec|
129
+ PioneBoolean.new(rec.value.odd?)
130
+ end
131
+ end
132
+ end
133
+
134
+ # Integer extention for PIONE.
135
+ class Integer
136
+ # Returns the PIONE's value.
137
+ def to_pione
138
+ PioneInteger.new(self)
139
+ end
140
+ end
@@ -0,0 +1,104 @@
1
+ module Pione::Model
2
+ # PioneList is a list that include same type elements.
3
+ class PioneList < BasicModel
4
+ extend Forwardable
5
+
6
+ set_pione_model_type TypeList[TypeAny]
7
+
8
+ attr_reader :values
9
+ def_delegators :@values, :[], :size, :empty?
10
+
11
+ # Creates a list with elements.
12
+ # @param [Array] elts
13
+ # elements
14
+ def initialize(*elts)
15
+ unless elts.empty?
16
+ if elts.find{|val| not(val.kind_of?(BasicModel))}
17
+ raise ArgumentError.new(elts)
18
+ end
19
+ unless elts.map{|val| val.pione_model_type}.uniq.size == 1
20
+ raise ArgumentError.new(elts)
21
+ end
22
+ end
23
+ @values = elts
24
+ end
25
+
26
+ # Returns pione model type corresponding to the elements.
27
+ # @return [TypeList]
28
+ # the type
29
+ def pione_model_type
30
+ type = @values.empty? ? TypeAny : @values.first.pione_model_type
31
+ TypeList.new(type)
32
+ end
33
+
34
+ # Returns new list which appended the element.
35
+ # @param [BasicModel] elt
36
+ # the element object
37
+ # @return [PioneList]
38
+ # new list with the element
39
+ def add(elt)
40
+ unless elt.kind_of?(BasicModel)
41
+ raise ArgumentError.new(elt)
42
+ end
43
+ unless pione_model_type == elt.pione_model_type
44
+ raise ArgumentError.new(elt)
45
+ end
46
+ self.class.new(@values + [elt])
47
+ end
48
+
49
+
50
+ # @api private
51
+ def textize
52
+ "[%s]" % @values.map{|val| val.textize}.join(",")
53
+ end
54
+
55
+ # @api private
56
+ def ==(other)
57
+ return false unless other.kind_of?(self.class)
58
+ @values == other.values
59
+ end
60
+
61
+ alias :eql? :"=="
62
+
63
+ # @api private
64
+ def hash
65
+ @value.hash
66
+ end
67
+
68
+ #
69
+ # pione method
70
+ #
71
+
72
+ define_pione_method("==", [TypeList[TypeAny]], TypeBoolean) do |rec, other|
73
+ PioneBoolean.new(rec.values == other.values)
74
+ end
75
+
76
+ define_pione_method("!=", [TypeList[TypeAny]], TypeBoolean) do |rec, other|
77
+ PioneBoolean.not(rec.call_pione_method("==", other))
78
+ end
79
+
80
+ define_pione_method("+", [TypeList[TypeAny]], TypeList[TypeAny]) do |rec, other|
81
+ PioneList.new(rec.values + other.values)
82
+ end
83
+
84
+ define_pione_method("-", [TypeList[TypeAny]], TypeList[TypeAny]) do |rec, other|
85
+ PioneList.new(rec.values - other.values)
86
+ end
87
+
88
+ define_pione_method("*", [TypeList[TypeAny]], TypeList[TypeAny]) do |rec, other|
89
+ PioneList.new(rec.values * other.values)
90
+ end
91
+
92
+ define_pione_method("empty?", [], TypeBoolean) do |rec|
93
+ PioneBoolean.new(rec.empty?)
94
+ end
95
+
96
+ define_pione_method("[]", [TypeInteger], TypeAny) do |rec, i|
97
+ rec.values[i.value]
98
+ end
99
+
100
+ define_pione_method("as_string", [], TypeString) do |rec|
101
+ PioneString.new(rec.values.to_s)
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,80 @@
1
+ module Pione::Model
2
+ # Message represents method callers for PIONE model objects.
3
+ # @example
4
+ # 1.as_string()
5
+ # @example
6
+ # '*.txt'.except('a*')
7
+ class Message < BasicModel
8
+ attr_reader :name
9
+ attr_reader :receiver
10
+ attr_reader :arguments
11
+
12
+ # Creates a message.
13
+ # @param [String] name
14
+ # message name
15
+ # @param [BasicModel] receiver
16
+ # message receiver
17
+ # @param [BasicModel] arguments
18
+ # message arguments
19
+ def initialize(name, receiver, *arguments)
20
+ @name = name
21
+ @receiver = receiver.to_pione
22
+ @arguments = arguments.map{|arg| arg.to_pione}
23
+ super()
24
+ end
25
+
26
+ # Returns false because Message is a complex form.
27
+ # @return [Boolean]
28
+ # false
29
+ def atomic?
30
+ false
31
+ end
32
+
33
+ # Returns PIONE model type of the message result according to type
34
+ # interface.
35
+ # @return [Symbol]
36
+ # PIONE model type
37
+ def pione_model_type
38
+ @receiver.pione_model_type.method_interface[@name.to_s].output
39
+ end
40
+
41
+ # Evaluates the application expression and returns application result.
42
+ # @param [VariableTable] vtable variable table for the evaluation
43
+ # @return [BasicModel]
44
+ # evaluation result
45
+ def eval(vtable)
46
+ receiver = @receiver.eval(vtable)
47
+ arguments = @arguments.map{|arg| arg.eval(vtable)}
48
+ receiver.call_pione_method(@name, *arguments)
49
+ end
50
+
51
+ # Returns true if the receiver or arguments include variables.
52
+ # @return [Boolean]
53
+ # true if the receiver or arguments include variables
54
+ def include_variable?
55
+ @receiver.include_variable? or @arguments.any?{|arg| arg.include_variable?}
56
+ end
57
+
58
+ # @api private
59
+ def textize
60
+ args = [@name, @receiver.textize, @arguments.textize]
61
+ "message(\"%s\",%s,[%s])" % args
62
+ end
63
+
64
+ # @api private
65
+ def ==(other)
66
+ return false unless other.kind_of?(self.class)
67
+ return false unless @name == other.name
68
+ return false unless @receiver == other.receiver
69
+ return false unless @arguments == other.arguments
70
+ return true
71
+ end
72
+
73
+ alias :eql? :"=="
74
+
75
+ # @api private
76
+ def hash
77
+ @name.hash + @receiver.hash + @arguments.hash
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,48 @@
1
+ module Pione::Model
2
+ # Package is a PIONE model class for rule package.
3
+ class Package < BasicModel
4
+ attr_reader :name
5
+ set_pione_model_type TypePackage
6
+
7
+ # Creates a package with name.
8
+ # @param [String] name
9
+ # package name
10
+ def initialize(name)
11
+ @name = name
12
+ super()
13
+ end
14
+
15
+ # @api private
16
+ def task_id_string
17
+ "Package<#{@name}>"
18
+ end
19
+
20
+ # @api private
21
+ def textize
22
+ "package(\"%s\")" % [@name]
23
+ end
24
+
25
+ # Return a rule path.
26
+ # @param [RuleExpr] other
27
+ # rule expression
28
+ # @return [String]
29
+ # rule path string
30
+ def +(other)
31
+ raise ArgumentError.new(other) unless other.kind_of?(RuleExpr)
32
+ "#{@name}:#{other.name}"
33
+ end
34
+
35
+ # @api private
36
+ def ==(other)
37
+ return false unless other.kind_of?(self.class)
38
+ @name == other.name
39
+ end
40
+
41
+ alias :eql? :"=="
42
+
43
+ # @api private
44
+ def hash
45
+ @value.hash
46
+ end
47
+ end
48
+ end