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,73 @@
1
+ module Pione
2
+ module Util
3
+ module Misc
4
+ # Ignores all exceptions of the block execution.
5
+ # @yield []
6
+ # target block
7
+ # @return [void]
8
+ def ignore_exception(&b)
9
+ begin
10
+ b.call
11
+ rescue Exception
12
+ # do nothing
13
+ end
14
+ end
15
+
16
+ # Generates random UUID.
17
+ # @return [String]
18
+ # generated UUID string
19
+ # @note
20
+ # we use uuidtools gem for generating UUID
21
+ def generate_uuid
22
+ UUIDTools::UUID.random_create.to_s
23
+ end
24
+
25
+ def generate_uuid_int
26
+ UUIDTools::UUID.random_create.to_i
27
+ end
28
+
29
+ # Returns the hostname of the machine.
30
+ # @return [String]
31
+ # hostname
32
+ def hostname
33
+ Socket.gethostname
34
+ end
35
+
36
+ # Returns CPU core number. The number is based on +/proc/cpuinfo+. Platforms
37
+ # that don't have cpuinfo returns 1.
38
+ # @return [Integer]
39
+ # CPU core nunmber
40
+ def core_number
41
+ begin
42
+ `cat /proc/cpuinfo | grep processor | wc -l`.to_i
43
+ rescue
44
+ 1
45
+ end
46
+ end
47
+
48
+ # Parses IP address string. Address string is written with port number.
49
+ # @return [Array<String, Integer>]
50
+ def parse_ip_address(s)
51
+ ":"
52
+ end
53
+
54
+ # Returns my IP address list. The list includes IPv4 addresses only.
55
+ def my_ip_address_list
56
+ addrs = Socket.ip_address_list.select do |addr|
57
+ addr.ipv4? and not(addr.ipv4_loopback?) and not(addr.ipv4_multicast?)
58
+ end
59
+ if not(addrs.empty?)
60
+ privates = addrs.select{|addr| addr.ipv4_private?}
61
+ not_privates = addrs - privates
62
+ privates = privates.sort{|a,b| a.ip_address <=> b.ip_address}
63
+ not_privates = not_privates.sort{|a, b| a.ip_address <=> b.ip_address}
64
+ (privates + not_privates).map {|addr| addr.ip_address}
65
+ else
66
+ Socket.ip_address_list.select{|addr| addr.ipv4_loopback?}.map{|addr| addr.ip_address}
67
+ end
68
+ end
69
+ end
70
+
71
+ extend Misc
72
+ end
73
+ end
@@ -0,0 +1,78 @@
1
+ module Pione
2
+ module Util
3
+ # Terminal is a set of utility methods for displaying characters in terminal.
4
+ module Terminal
5
+ # @api private
6
+ @@color_mode = true
7
+
8
+ # Sets color mode.
9
+ #
10
+ # @param [bool] bool
11
+ # whether color mode is true
12
+ # @return [void]
13
+ def color_mode=(bool)
14
+ @@color_mode = bool
15
+ end
16
+ module_function :color_mode=
17
+
18
+ # Returns a colored string.
19
+ #
20
+ # @param [Symbol] color
21
+ # color name
22
+ # @param [String] str
23
+ # target string
24
+ # @return [String]
25
+ def color(color, str)
26
+ case color
27
+ when :red
28
+ red(str)
29
+ when :green
30
+ green(str)
31
+ when :magenta
32
+ magenta(str)
33
+ else
34
+ str
35
+ end
36
+ end
37
+ module_function :color
38
+
39
+ # Returns a red colored string.
40
+ #
41
+ # @param [String] str
42
+ # target string
43
+ # @return [String]
44
+ def red(str)
45
+ colorize(str, "\x1b[31m", "\x1b[39m")
46
+ end
47
+ module_function :red
48
+
49
+ # Returns a green colored string.
50
+ #
51
+ # @param [String] str
52
+ # target string
53
+ # @return [String]
54
+ def green(str)
55
+ colorize(str, "\x1b[32m", "\x1b[39m")
56
+ end
57
+ module_function :green
58
+
59
+ # Returns a magenta colored string.
60
+ #
61
+ # @param [String] str
62
+ # target string
63
+ # @return [String]
64
+ def magenta(str)
65
+ colorize(str, "\x1b[35m", "\x1b[39m")
66
+ end
67
+ module_function :magenta
68
+
69
+ private
70
+
71
+ # @api private
72
+ def colorize(str, bc, ec)
73
+ @@color_mode ? bc + str + ec : str
74
+ end
75
+ module_function :colorize
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,53 @@
1
+ module Pione
2
+ module Util
3
+ class WaiterTable
4
+ include DRbUndumped
5
+
6
+ def initialize
7
+ @mutex = Mutex.new
8
+ @table = {}
9
+ @waiting_thread = {}
10
+ end
11
+
12
+ def push(req_id, val)
13
+ @mutex.synchronize {@table[req_id] = val}
14
+ thread = @mutex.synchronize {@waiting_thread[req_id]}
15
+ if thread && thread.status == "sleep"
16
+ thread.run
17
+ end
18
+ end
19
+
20
+ def take(req_id, msg_id, args)
21
+ unless @mutex.synchronize {@table.has_key?(req_id)}
22
+ @mutex.synchronize {@waiting_thread[req_id] = Thread.current}
23
+ Thread.stop
24
+ @mutex.synchronize {@waiting_thread.delete(req_id)}
25
+ end
26
+ return @mutex.synchronize {@table.delete(req_id)}
27
+ end
28
+
29
+ def to_s
30
+ @mutex.synchronize do
31
+ table = convert_string(@table)
32
+ waiting = convert_string(@waiting)
33
+ "#<WaiterTable @table=%s @waiting=%s>" % [table, waiting]
34
+ end
35
+ end
36
+
37
+ def convert_string(obj)
38
+ case obj
39
+ when Hash
40
+ "{%s}" % obj.map do |k,v|
41
+ "%s=>%s" % [convert_string(k), convert_string(v)]
42
+ end.join(", ")
43
+ when Array
44
+ "[%s]" % obj.map{|elt| convert_string(elt)}.join(", ")
45
+ when DRbObject
46
+ "#<DRbObject @drburi=%s, @drbref=%s>" % [obj.__drburi, obj.__drbref]
47
+ else
48
+ obj.inspect
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,3 @@
1
+ module Pione
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,2 @@
1
+ export PATH=$PWD/bin:$PATH
2
+ export RUBYLIB=$PWD/lib
@@ -0,0 +1,34 @@
1
+ require 'drb'
2
+
3
+ class TestService
4
+ include DRbUndumped
5
+
6
+ def test
7
+ "abc"
8
+ end
9
+
10
+ def pid
11
+ Process.pid
12
+ end
13
+ end
14
+
15
+ uri = "druby://localhost:33333"
16
+
17
+ pid1 = Process.fork do
18
+ puts "child: #{Process.pid}"
19
+ ts = TestService.new
20
+ DRb.start_service(uri, ts)
21
+ p ts.pid
22
+ sleep 10
23
+ Process.daemon
24
+ puts "aaaaaaaaaaaaaaaaaaaaa"
25
+ end
26
+
27
+ sleep 1
28
+
29
+ ref = DRbObject.new_with_uri(uri)
30
+ puts ref.pid
31
+
32
+ #DRb.remove_server(server)
33
+ sleep 1
34
+
@@ -0,0 +1,40 @@
1
+
2
+ list = []
3
+
4
+ def make_thread(list)
5
+ th = Thread.new do
6
+ begin
7
+ while true do
8
+ sleep 100
9
+ end
10
+ ensure
11
+ sleep 0.01
12
+ list << th.object_id
13
+ end
14
+ end
15
+ end
16
+
17
+ def kill_threads(threads)
18
+ threads.list.each do |th|
19
+ th.kill
20
+ th.kill
21
+ th.kill
22
+ end
23
+ if threads.list.map{|th| th.alive?}.include?(true)
24
+ kill_threads(threads)
25
+ end
26
+ end
27
+
28
+ threads = ThreadGroup.new
29
+ 1..100.times do
30
+ threads.add make_thread(list)
31
+ end
32
+ kill_threads(threads)
33
+
34
+ while threads.list.map{|th| th.alive?}.include?(true)
35
+ sleep 1
36
+ end
37
+
38
+ sleep 10
39
+
40
+ puts "size: #{list.size}"
@@ -0,0 +1,56 @@
1
+ require 'drb/drb'
2
+ require 'rinda/rinda'
3
+
4
+ Thread.abort_on_exception = true
5
+
6
+ module DRb
7
+ class DRbConn
8
+ @table = {}
9
+ def self.open(remote_uri) # :nodoc:
10
+ begin
11
+ conn = nil
12
+
13
+ @mutex.synchronize do
14
+ cache = @table[remote_uri]
15
+ if not(cache.nil?) && cache.alive?
16
+ conn = cache
17
+ else
18
+ puts "new"
19
+ cache.close unless cache.nil?
20
+ conn = self.new(remote_uri) unless conn
21
+ @table[remote_uri] = conn
22
+ end
23
+ end
24
+
25
+ succ, result = yield(conn)
26
+ return succ, result
27
+
28
+ ensure
29
+ if conn
30
+ if succ
31
+ puts "succ"
32
+ else
33
+ conn.close
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ DRb.start_service
42
+
43
+ ts = DRbObject.new_with_uri('druby://localhost:30000')
44
+ $count = 0
45
+ 10000.times do
46
+ Thread.new do
47
+ $count += 1
48
+ ts.take([:a])
49
+ end
50
+ end
51
+
52
+ loop do
53
+ break if $count == 10000
54
+ puts $count
55
+ sleep 1
56
+ end
@@ -0,0 +1,14 @@
1
+ require 'drb/drb'
2
+ require 'rinda/rinda'
3
+ require 'rinda/tuplespace'
4
+
5
+ ts = Rinda::TupleSpace.new
6
+ DRb.start_service('druby://localhost:30000', ts)
7
+ Thread.new do
8
+ loop do
9
+ p DRb::DRbConn.instance_variable_get(:@pool)
10
+ sleep 1
11
+ end
12
+ end
13
+
14
+ DRb.thread.join
@@ -0,0 +1,36 @@
1
+ require 'benchmarkx'
2
+ require 'innocent-white/tuple-space-server'
3
+
4
+ #
5
+ # apt-get install rmagic
6
+ # gem install rmagic
7
+ # gem install benchmarkx
8
+ #
9
+
10
+ $ts_server = InnocentWhite::TupleSpaceServer.new(task_worker_resource: 4)
11
+
12
+ def write(n)
13
+ n.times do |i|
14
+ $ts_server.write([:test, i])
15
+ end
16
+ end
17
+
18
+ def take(n)
19
+ n.times do |i|
20
+ $ts_server.take([:test, i])
21
+ end
22
+ end
23
+
24
+ def write_and_take(n)
25
+ write(n)
26
+ take(n)
27
+ end
28
+
29
+ include BenchmarkX
30
+ benchmark(" " + CAPTION, 7, FMTSTR) do |x|
31
+ x.filename = "example/write_and_take_test.png"
32
+ x.gruff.title = "write and take test"
33
+ [500, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000].each do |i|
34
+ x.report("#{i}:") {write_and_take(i)}
35
+ end
36
+ end
@@ -0,0 +1,49 @@
1
+ # -*- ruby -*-
2
+ # -*- encoding: utf-8 -*-
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'pione/version'
6
+
7
+ Gem::Specification.new do |gem|
8
+ gem.name = "pione"
9
+ gem.version = Pione::VERSION
10
+ gem.authors = ["Keita Yamaguchi"]
11
+ gem.email = ["keita.yamaguchi@gmail.com"]
12
+ gem.description = %q{PIONE(Process-rule for Input/Output Negotiation Enviromenment) is a rule-based workflow engine.}
13
+ gem.summary = %q{rule-based workflow engine}
14
+ gem.homepage = "http://pione.github.com/"
15
+ gem.license = "MIT"
16
+
17
+ gem.files = `git ls-files`.split($/)
18
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
19
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
20
+ gem.require_paths = ["lib"]
21
+
22
+ gem.required_ruby_version = '>= 1.9.2'
23
+
24
+ #
25
+ # dependencies
26
+ #
27
+
28
+ # requisite for system
29
+ gem.add_dependency "parslet", "~> 1.4.0"
30
+ gem.add_dependency "uuidtools", "~> 2.1.3"
31
+ gem.add_dependency "highline", "~> 1.6.15"
32
+
33
+ # for dropbox resource
34
+ gem.add_dependency "dropbox-sdk"
35
+
36
+ # for web client only
37
+ gem.add_dependency "sinatra"
38
+ gem.add_dependency "thin"
39
+
40
+ # test framework
41
+ gem.add_development_dependency "bacon", "~> 1.2.0"
42
+
43
+ # maintainanse tools
44
+ gem.add_development_dependency "rake"
45
+ gem.add_development_dependency "bundler"
46
+
47
+ # for documentation
48
+ gem.add_development_dependency "yard"
49
+ end