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,22 @@
1
+ module Pione
2
+ module Relay
3
+ class Trampoline
4
+ def initialize(uri, config)
5
+ @obj = DRb::DRbObject.new_with_uri(uri)
6
+ @protocol = TransmitterSocket.open_server(uri, config)
7
+ end
8
+
9
+ undef :to_s
10
+
11
+ def method_missing(msg_id, *arg, &b)
12
+ req_id = @protocol.send_request(@obj, msg_id, arg, b)
13
+ @protocol.reader_thread
14
+ succ, result = DRb.waiter_table.take(req_id, msg_id, arg)
15
+ unless succ
16
+ raise result
17
+ end
18
+ return result
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,167 @@
1
+ module Pione
2
+ module Relay
3
+ # TransmitterSocket is a connection layer from PIONE relay to PIONE client.
4
+ class TransmitterSocket < DRb::DRbTCPSocket
5
+ class TransmitterSocketError < Exception; end
6
+
7
+ @@receiver_socket = {}
8
+ @@proxy_socket = {}
9
+
10
+ def self.receiver_socket
11
+ @@receiver_socket
12
+ end
13
+
14
+ def self.proxy_socket
15
+ @@proxy_socket
16
+ end
17
+
18
+ # Parses special URI for reverse scheme.
19
+ def self.parse_uri(uri)
20
+ if uri =~ /^transmitter:\/\/([\w-]+)(\?(.*))?$/
21
+ transmitter_id = $1
22
+ option = $3
23
+ return transmitter_id, option
24
+ else
25
+ raise DRb::DRbBadScheme.new(uri) unless uri =~ /^transmitter:/
26
+ raise DRb::DRbBadURI.new('can\'t parse uri:' + uri)
27
+ end
28
+ end
29
+
30
+ # Creates a fake connection from proxy to relay transmitter.
31
+ # @api private
32
+ def self.open(uri, config)
33
+ # reverse socket needs URI always
34
+ raise ArgumentError.new("You should specify transmitter URI.") unless uri
35
+
36
+ # get transmitter_id
37
+ transmitter_id, _ = parse_uri(uri)
38
+ transmitter_id.untaint
39
+
40
+ # get proxy side socket
41
+ soc = @@proxy_socket[transmitter_id]
42
+ unless soc
43
+ msg = "No receiver side socket for %s." % transmitter_id
44
+ raise TransmitterSocketError.new(msg)
45
+ end
46
+ proxy_socket = TCPSocket.new("localhost", soc.addr[1])
47
+
48
+ # create instance with proxy socket
49
+ self.new(uri, nil, proxy_socket, config)
50
+ end
51
+
52
+ # Opens a fake socket.
53
+ def self.open_server(uri, config)
54
+ # the method needs URI explicitly
55
+ raise ArgumentError.new("You should specify transmitter URI.") unless uri
56
+
57
+ # get transmitter_id
58
+ transmitter_id, _ = parse_uri(uri)
59
+ transmitter_id.untaint
60
+
61
+ # get receiver side socket
62
+ receiver_socket = @@receiver_socket[transmitter_id]
63
+ unless receiver_socket
64
+ msg = "No receiver side sockets for %s." % transmitter_id
65
+ raise TransmitterSocketError.new(msg)
66
+ end
67
+
68
+ # get proxy side socket
69
+ proxy_socket = @@proxy_socket[transmitter_id]
70
+ unless proxy_socket
71
+ msg = "No proxy side sockets for %s." % transmitter_id
72
+ raise TransmitterSocketError.new(msg)
73
+ end
74
+
75
+ # create instance with receiver and proxy sockets
76
+ self.new(uri, receiver_socket, proxy_socket, config)
77
+ end
78
+
79
+ def self.uri_option(uri, config)
80
+ transmitter_id, option = parse_uri(uri)
81
+ return "transmitter://%s" % transmitter_id, option
82
+ end
83
+
84
+ def initialize(uri, receiver_socket, proxy_socket, config)
85
+ @uri = uri
86
+ @receiver_socket = receiver_socket
87
+ @proxy_socket = proxy_socket
88
+ @config = config
89
+ @acl = config[:tcp_acl]
90
+ @receiver_msg = DRb::DRbMessage.new(config)
91
+ @proxy_msg = DRb::DRbMessage.new(config)
92
+ set_sockopt(@receiver_socket) if @receiver_socket
93
+ set_sockopt(@proxy_socket) if @proxy_socket
94
+ end
95
+
96
+ # Sends a request from transmitter to receiver.
97
+ # @api private
98
+ def send_request(ref, msg_id, arg, b)
99
+ if @receiver_socket
100
+ ref = DRbObject.new_with_uri("receiver://%s:%s" % ["localhost", Global.relay_port])
101
+ #p ref.__drburi if ref.kind_of?(DRbObject)
102
+ #p msg_id
103
+ #p arg
104
+ @receiver_msg.send_request(@receiver_socket, ref, msg_id, arg, b)
105
+ else
106
+ @proxy_msg.send_request(@proxy_socket, ref, msg_id, arg, b)
107
+ end
108
+ end
109
+
110
+ # Receives a request from proxy to transmitter.
111
+ # @api private
112
+ def recv_request
113
+ @proxy_msg.recv_request(@proxy_socket)
114
+ end
115
+
116
+ # Sends a reply from transmitter to proxy.
117
+ # @api private
118
+ def send_reply(req_id, succ, result)
119
+ @proxy_msg.send_reply(req_id, @proxy_socket, succ, result)
120
+ end
121
+
122
+ # Receives a reply from receiver to transmitter.
123
+ # @api private
124
+ def recv_reply
125
+ if @receiver_socket
126
+ @receiver_msg.recv_reply(@receiver_socket)
127
+ else
128
+ @proxy_msg.recv_reply(@proxy_socket)
129
+ end
130
+ end
131
+
132
+ # Closes proxy side socket.
133
+ def close
134
+ @proxy_socket.close
135
+ @proxy_socket = nil
136
+ end
137
+
138
+ # Opens fake connection from proxy to transmitter.
139
+ # Just returns self.
140
+ def accept
141
+ while true
142
+ soc = @proxy_socket.accept
143
+ break if (@acl ? @acl.allow_socket?(soc) : true)
144
+ soc.close
145
+ end
146
+
147
+ if Global.show_communication
148
+ puts "proxy connects to transmitter"
149
+ end
150
+
151
+ # create instance
152
+ self.class.new(uri, nil, soc, @config)
153
+ rescue => e
154
+ soc.close
155
+ if Global.show_communication
156
+ puts "closed transmitter's proxy side socket"
157
+ puts "%s: %s" % [e.class, e.message]
158
+ caller.each {|line| puts " %s" % line}
159
+ end
160
+ retry
161
+ end
162
+ end
163
+
164
+ # install the protocol
165
+ DRb::DRbProtocol.add_protocol(TransmitterSocket)
166
+ end
167
+ end
@@ -0,0 +1,92 @@
1
+ module Pione
2
+ # Resource is a module for data resources.
3
+ module Resource
4
+ # ResourceError is raised when any resource errors happen.
5
+ class ResourceError < Exception
6
+ def initialize(uri)
7
+ @uri = uri
8
+ end
9
+ end
10
+
11
+ class NotFound < ResourceError; end
12
+
13
+ # @api private
14
+ @@schemes = {}
15
+
16
+ # Returns the resource object corresponding to the uri.
17
+ # @return [BasicResource]
18
+ # resouce object
19
+ def self.[](uri)
20
+ uri = uri.kind_of?(::URI::Generic) ? uri : ::URI.parse(uri)
21
+ @@schemes[uri.scheme].new(uri)
22
+ end
23
+
24
+ # BasicResource is an interface class for all resouce classes.
25
+ class BasicResource
26
+ attr_reader :uri
27
+ attr_reader :path
28
+
29
+ # Creates a data resource on URI.
30
+ # @param [String] data
31
+ # data content
32
+ # @return[void]
33
+ def create(data)
34
+ raise NotImplementedError
35
+ end
36
+
37
+ # Reads a resource data from URI.
38
+ # @return [String]
39
+ # data content
40
+ def read
41
+ raise NotImplementedError
42
+ end
43
+
44
+ # Updates a resource data on URI.
45
+ # @param [String] data
46
+ # new data content
47
+ # @return [void]
48
+ def update(data)
49
+ raise NotImplementedError
50
+ end
51
+
52
+ # Deletes a resource data on URI.
53
+ # @return [void]
54
+ def delete
55
+ raise NotImplementedError
56
+ end
57
+
58
+ # Returns mtime of the resource.
59
+ # @return [Time]
60
+ # mtime
61
+ def mtime
62
+ raise NotImplementedError
63
+ end
64
+
65
+ # Returns entries of the resource path.
66
+ # @return [Array<Resource>]
67
+ # resource entries of the resource path
68
+ def entries
69
+ raise NotImplementedError
70
+ end
71
+
72
+ # Returns the basename of resource.
73
+ # @return [String]
74
+ # basename
75
+ def basename
76
+ raise NotImplementedError
77
+ end
78
+
79
+ def exist?
80
+ raise NotImplementedError
81
+ end
82
+
83
+ def link_to(dist)
84
+ raise NotImplementedError
85
+ end
86
+
87
+ def link_from(dist)
88
+ raise NotImplementedError
89
+ end
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,106 @@
1
+ module Pione
2
+ module Resource
3
+ class Dropbox < BasicResource
4
+ def self.init(tuple_space_server)
5
+ tuple_consumer_key = Tuple[:attribute].new("dropbox_consumer_key", nil)
6
+ tuple_consumer_secret = Tuple[:attribute].new("dropbox_consumer_secret", nil)
7
+ tuple_access_token_key = Tuple[:attribute].new("dropbox_access_token_key", nil)
8
+ tuple_access_token_secret = Tuple[:attribute].new("dropbox_access_token_secret", nil)
9
+
10
+ consumer_key = tuple_space_server.read(tuple_consumer_key, 0).value rescue nil
11
+ consumer_secret = tuple_space_server.read(tuple_consumer_secret, 0).value rescue nil
12
+ access_token_key = tuple_space_server.read(tuple_access_token_key, 0).value rescue nil
13
+ access_token_secret = tuple_space_server.read(tuple_access_token_secret, 0).value rescue nil
14
+
15
+ @session = DropboxSession.new(consumer_key, consumer_secret)
16
+ @session.set_access_token(access_token_key, access_token_secret)
17
+ end
18
+
19
+ def self.share_access_token(tuple_space_server, consumer_key, consumer_secret)
20
+ access_token = session.get_access_token
21
+ [ Tuple[:attribute].new("dropbox_consumer_key", consumer_key),
22
+ Tuple[:attribute].new("dropbox_consumer_secret", consumer_secret),
23
+ Tuple[:attribute].new("dropbox_access_token_key", access_token.key),
24
+ Tuple[:attribute].new("dropbox_access_token_secret", access_token.secret)
25
+ ].each {|tuple| tuple_space_server.write(tuple) }
26
+ end
27
+
28
+ def self.ready?
29
+ @session.authorized?
30
+ end
31
+
32
+ def self.set_session(session)
33
+ @session = session
34
+ end
35
+
36
+ def self.session
37
+ @session
38
+ end
39
+
40
+ def initialize(uri)
41
+ @uri = uri.kind_of?(URI::Generic) ? uri : URI.parse(uri)
42
+ raise ArgumentError unless @uri.kind_of?(Pione::URIScheme::DropboxScheme)
43
+ @path = uri.path
44
+ @client = DropboxClient.new(self.class.session, "app_folder")
45
+ end
46
+
47
+ def create(data)
48
+ @client.put_file(@path, StringIO.new(data))
49
+ end
50
+
51
+ def read
52
+ @client.get_file(@path)
53
+ end
54
+
55
+ def update(data)
56
+ @client.put_file(@path, StringIO.new(data), true)
57
+ end
58
+
59
+ def delete
60
+ @client.delete_file(@path)
61
+ end
62
+
63
+ def mtime
64
+ metadata = @client.metadata(@path)
65
+ Time.parse(metadata["modified"])
66
+ end
67
+
68
+ def entries
69
+ metadata = @client.metadata(@path)
70
+ if not(metadata["is_dir"]) or metadata["is_deleted"]
71
+ raise NotFound.new(self)
72
+ end
73
+ metadata["contents"].select{|entry| not(entry["is_dir"]) and not(entry["is_deleted"])}.map do |entry|
74
+ Resource["dropbox:%s" % entry["path"]]
75
+ end
76
+ end
77
+
78
+ def basename
79
+ Pathname.new(@path).basename.to_s
80
+ end
81
+
82
+ def exist?
83
+ metadata = @client.metadata(@path)
84
+ return not(metadata["is_deleted"])
85
+ rescue DropboxError
86
+ return false
87
+ end
88
+
89
+ def link_to(dist)
90
+ File.open(dist, "w") do |out|
91
+ out.write read
92
+ end
93
+ end
94
+
95
+ def link_from(other)
96
+ update(File.read(other))
97
+ end
98
+
99
+ def shift_from(other)
100
+ @client.file_move(other.path, @path)
101
+ end
102
+ end
103
+
104
+ @@schemes['dropbox'] = Dropbox
105
+ end
106
+ end
@@ -0,0 +1,84 @@
1
+ module Pione
2
+ module Resource
3
+ # FTP represents resources on FTP server.
4
+ class FTP < BasicResource
5
+ # Creates a resouce.
6
+ # @param [String, ::URI] uri
7
+ # resource URI
8
+ def initialize(uri)
9
+ @uri = uri.kind_of?(::URI::Generic) ? uri : ::URI.parse(uri)
10
+ raise ArgumentError unless @uri.kind_of?(::URI::FTP)
11
+ @path = uri.path
12
+ end
13
+
14
+ # (see BasicResource#create)
15
+ def create(data)
16
+ Net::FTP.open(@uri.host, @uri.user, @uri.password) do |ftp|
17
+ pathes = @path.split('/')
18
+ makedirs(ftp, pathes)
19
+ t = Tempfile.open("aaa")
20
+ t.write(data)
21
+ t.close(false)
22
+ ftp.put(t.path, @path)
23
+ end
24
+ end
25
+
26
+ # (see BasicResource#read)
27
+ def read
28
+ begin
29
+ tempfile = Tempfile.new("test")
30
+ Net::FTP.open(@uri.host, @uri.user, @uri.password) do |ftp|
31
+ ftp.get(@path, tempfile.path)
32
+ end
33
+ File.read(tempfile.path)
34
+ rescue Net::FTPPermErrro
35
+ raise NotFound.new(@uri)
36
+ end
37
+ end
38
+
39
+ # (see BasicResource#update)
40
+ def update(data)
41
+ Net::FTP.open(@uri.host, @uri.user, @uri.password) do |ftp|
42
+ begin
43
+ ftp.dir(File.dirname(@path))
44
+ t = Tempfile.open("aaa")
45
+ t.write(data)
46
+ t.close(false)
47
+ ftp.put(t.path, @path)
48
+ rescue Net::FTPPermErrro
49
+ raise NotFound.new(@uri)
50
+ end
51
+ end
52
+ end
53
+
54
+ # (see BasicResource#delete)
55
+ def delete
56
+ Net::FTP.open(@uri.host, @uri.user, @uri.password) do |ftp|
57
+ ftp.delete(@path)
58
+ end
59
+ end
60
+
61
+ # (see BasicResource#copy_to)
62
+ def copy_to(dist)
63
+ FileUtil.symlink(@path, dist)
64
+ end
65
+
66
+ private
67
+
68
+ # @api private
69
+ def makedirs(ftp, path, size=0)
70
+ unless path.size == size + 1
71
+ pa = File.join(*path[0..size])
72
+ begin
73
+ ftp.mkdir(pa)
74
+ rescue Net::FTPPermError
75
+ ensure
76
+ makedirs(ftp, path, size+1)
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+ @@schemes['ftp'] = FTP
83
+ end
84
+ end