genie 0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (313) hide show
  1. data/genie-0.1.gem +0 -0
  2. data/genie-0.1/docs/classes/BasicCommand.html +249 -0
  3. data/genie-0.1/docs/classes/BasicCommand.src/M000070.html +18 -0
  4. data/genie-0.1/docs/classes/BasicCommand.src/M000071.html +18 -0
  5. data/genie-0.1/docs/classes/BasicCommand.src/M000072.html +18 -0
  6. data/genie-0.1/docs/classes/BasicCommand.src/M000073.html +18 -0
  7. data/genie-0.1/docs/classes/BasicCommand.src/M000074.html +16 -0
  8. data/genie-0.1/docs/classes/Command.html +277 -0
  9. data/genie-0.1/docs/classes/Command.src/M000052.html +20 -0
  10. data/genie-0.1/docs/classes/Command.src/M000053.html +18 -0
  11. data/genie-0.1/docs/classes/Command.src/M000054.html +20 -0
  12. data/genie-0.1/docs/classes/Command.src/M000055.html +20 -0
  13. data/genie-0.1/docs/classes/Command.src/M000056.html +18 -0
  14. data/genie-0.1/docs/classes/Command.src/M000057.html +18 -0
  15. data/genie-0.1/docs/classes/Command.src/M000058.html +23 -0
  16. data/genie-0.1/docs/classes/CommandMetainfo.html +362 -0
  17. data/genie-0.1/docs/classes/CommandMetainfo.src/M000042.html +18 -0
  18. data/genie-0.1/docs/classes/CommandMetainfo.src/M000043.html +18 -0
  19. data/genie-0.1/docs/classes/CommandMetainfo.src/M000044.html +19 -0
  20. data/genie-0.1/docs/classes/CommandMetainfo.src/M000045.html +25 -0
  21. data/genie-0.1/docs/classes/CommandMetainfo.src/M000046.html +21 -0
  22. data/genie-0.1/docs/classes/CommandMetainfo.src/M000047.html +21 -0
  23. data/genie-0.1/docs/classes/CompoundResult.html +359 -0
  24. data/genie-0.1/docs/classes/CompoundResult.src/M000075.html +18 -0
  25. data/genie-0.1/docs/classes/CompoundResult.src/M000076.html +18 -0
  26. data/genie-0.1/docs/classes/CompoundResult.src/M000078.html +18 -0
  27. data/genie-0.1/docs/classes/CompoundResult.src/M000079.html +18 -0
  28. data/genie-0.1/docs/classes/CompoundResult.src/M000080.html +18 -0
  29. data/genie-0.1/docs/classes/CompoundResult.src/M000082.html +18 -0
  30. data/genie-0.1/docs/classes/CompoundResult.src/M000084.html +20 -0
  31. data/genie-0.1/docs/classes/CompoundResult.src/M000085.html +18 -0
  32. data/genie-0.1/docs/classes/CompoundResult.src/M000086.html +18 -0
  33. data/genie-0.1/docs/classes/CompoundResult.src/M000087.html +20 -0
  34. data/genie-0.1/docs/classes/EntryProcessor.html +223 -0
  35. data/genie-0.1/docs/classes/EntryProcessor.src/M000008.html +18 -0
  36. data/genie-0.1/docs/classes/EntryProcessor.src/M000009.html +20 -0
  37. data/genie-0.1/docs/classes/EntryProcessor.src/M000010.html +18 -0
  38. data/genie-0.1/docs/classes/EntryProcessor.src/M000011.html +23 -0
  39. data/genie-0.1/docs/classes/Log4r.html +114 -0
  40. data/genie-0.1/docs/classes/Log4r/LogEvent.html +153 -0
  41. data/genie-0.1/docs/classes/Log4r/LogEvent.src/M000123.html +16 -0
  42. data/genie-0.1/docs/classes/NotifiedProcessor.html +155 -0
  43. data/genie-0.1/docs/classes/NotifiedProcessor.src/M000094.html +22 -0
  44. data/genie-0.1/docs/classes/NullTransactionController.html +191 -0
  45. data/genie-0.1/docs/classes/NullTransactionController.src/M000030.html +16 -0
  46. data/genie-0.1/docs/classes/NullTransactionController.src/M000031.html +16 -0
  47. data/genie-0.1/docs/classes/Object.html +154 -0
  48. data/genie-0.1/docs/classes/Object.src/M000103.html +16 -0
  49. data/genie-0.1/docs/classes/Periodic.html +564 -0
  50. data/genie-0.1/docs/classes/Periodic.src/M000124.html +26 -0
  51. data/genie-0.1/docs/classes/Periodic.src/M000125.html +21 -0
  52. data/genie-0.1/docs/classes/Periodic.src/M000126.html +18 -0
  53. data/genie-0.1/docs/classes/Periodic.src/M000127.html +18 -0
  54. data/genie-0.1/docs/classes/Periodic.src/M000128.html +31 -0
  55. data/genie-0.1/docs/classes/Periodic.src/M000129.html +30 -0
  56. data/genie-0.1/docs/classes/Periodic.src/M000130.html +18 -0
  57. data/genie-0.1/docs/classes/Periodic.src/M000131.html +18 -0
  58. data/genie-0.1/docs/classes/Periodic.src/M000132.html +16 -0
  59. data/genie-0.1/docs/classes/PollingProcessor.html +303 -0
  60. data/genie-0.1/docs/classes/PollingProcessor.src/M000088.html +23 -0
  61. data/genie-0.1/docs/classes/PollingProcessor.src/M000089.html +19 -0
  62. data/genie-0.1/docs/classes/PollingProcessor.src/M000091.html +22 -0
  63. data/genie-0.1/docs/classes/PollingProcessor.src/M000092.html +18 -0
  64. data/genie-0.1/docs/classes/PollingProcessor.src/M000093.html +18 -0
  65. data/genie-0.1/docs/classes/Queue.html +562 -0
  66. data/genie-0.1/docs/classes/Queue.src/M000104.html +22 -0
  67. data/genie-0.1/docs/classes/Queue.src/M000105.html +18 -0
  68. data/genie-0.1/docs/classes/Queue.src/M000106.html +18 -0
  69. data/genie-0.1/docs/classes/Queue.src/M000107.html +18 -0
  70. data/genie-0.1/docs/classes/Queue.src/M000108.html +21 -0
  71. data/genie-0.1/docs/classes/Queue.src/M000109.html +21 -0
  72. data/genie-0.1/docs/classes/Queue.src/M000110.html +22 -0
  73. data/genie-0.1/docs/classes/Queue.src/M000111.html +16 -0
  74. data/genie-0.1/docs/classes/Queue.src/M000112.html +18 -0
  75. data/genie-0.1/docs/classes/Queue.src/M000113.html +19 -0
  76. data/genie-0.1/docs/classes/Queue.src/M000114.html +23 -0
  77. data/genie-0.1/docs/classes/Queue.src/M000115.html +21 -0
  78. data/genie-0.1/docs/classes/Queue.src/M000116.html +19 -0
  79. data/genie-0.1/docs/classes/Queue.src/M000117.html +20 -0
  80. data/genie-0.1/docs/classes/Queue.src/M000118.html +25 -0
  81. data/genie-0.1/docs/classes/Queue.src/M000119.html +18 -0
  82. data/genie-0.1/docs/classes/Queue.src/M000120.html +22 -0
  83. data/genie-0.1/docs/classes/Queue.src/M000121.html +22 -0
  84. data/genie-0.1/docs/classes/Queue.src/M000122.html +20 -0
  85. data/genie-0.1/docs/classes/QueueDispatcher.html +247 -0
  86. data/genie-0.1/docs/classes/QueueDispatcher.src/M000048.html +18 -0
  87. data/genie-0.1/docs/classes/QueueDispatcher.src/M000049.html +21 -0
  88. data/genie-0.1/docs/classes/QueueDispatcher.src/M000050.html +18 -0
  89. data/genie-0.1/docs/classes/QueueDispatcher.src/M000051.html +32 -0
  90. data/genie-0.1/docs/classes/QueueEntry.html +522 -0
  91. data/genie-0.1/docs/classes/QueueEntry.src/M000012.html +21 -0
  92. data/genie-0.1/docs/classes/QueueEntry.src/M000013.html +18 -0
  93. data/genie-0.1/docs/classes/QueueEntry.src/M000014.html +18 -0
  94. data/genie-0.1/docs/classes/QueueEntry.src/M000015.html +18 -0
  95. data/genie-0.1/docs/classes/QueueEntry.src/M000017.html +16 -0
  96. data/genie-0.1/docs/classes/QueueEntry.src/M000018.html +19 -0
  97. data/genie-0.1/docs/classes/QueueEntry.src/M000020.html +19 -0
  98. data/genie-0.1/docs/classes/QueueEntry.src/M000022.html +19 -0
  99. data/genie-0.1/docs/classes/QueueEntry.src/M000023.html +21 -0
  100. data/genie-0.1/docs/classes/QueueEntry.src/M000024.html +19 -0
  101. data/genie-0.1/docs/classes/QueueEntry.src/M000025.html +18 -0
  102. data/genie-0.1/docs/classes/QueueEntry.src/M000026.html +18 -0
  103. data/genie-0.1/docs/classes/QueueEntry.src/M000028.html +18 -0
  104. data/genie-0.1/docs/classes/Result.html +289 -0
  105. data/genie-0.1/docs/classes/Result.src/M000063.html +20 -0
  106. data/genie-0.1/docs/classes/Result.src/M000064.html +18 -0
  107. data/genie-0.1/docs/classes/Result.src/M000066.html +18 -0
  108. data/genie-0.1/docs/classes/Result.src/M000068.html +18 -0
  109. data/genie-0.1/docs/classes/Result.src/M000069.html +19 -0
  110. data/genie-0.1/docs/classes/SemanticCommand.html +229 -0
  111. data/genie-0.1/docs/classes/SemanticCommand.src/M000059.html +19 -0
  112. data/genie-0.1/docs/classes/SemanticCommand.src/M000060.html +18 -0
  113. data/genie-0.1/docs/classes/SemanticCommand.src/M000061.html +18 -0
  114. data/genie-0.1/docs/classes/TransactionBundle.html +260 -0
  115. data/genie-0.1/docs/classes/TransactionBundle.src/M000001.html +18 -0
  116. data/genie-0.1/docs/classes/TransactionBundle.src/M000002.html +20 -0
  117. data/genie-0.1/docs/classes/TransactionBundle.src/M000003.html +20 -0
  118. data/genie-0.1/docs/classes/TransactionBundle.src/M000004.html +18 -0
  119. data/genie-0.1/docs/classes/TransactionBundle.src/M000005.html +18 -0
  120. data/genie-0.1/docs/classes/TransactionBundle.src/M000007.html +19 -0
  121. data/genie-0.1/docs/classes/UndoRedoCommand.html +308 -0
  122. data/genie-0.1/docs/classes/UndoRedoCommand.src/M000095.html +19 -0
  123. data/genie-0.1/docs/classes/UndoRedoCommand.src/M000096.html +16 -0
  124. data/genie-0.1/docs/classes/UndoRedoCommand.src/M000097.html +16 -0
  125. data/genie-0.1/docs/classes/UndoRedoCommand.src/M000098.html +16 -0
  126. data/genie-0.1/docs/classes/UndoRedoCommand.src/M000099.html +18 -0
  127. data/genie-0.1/docs/classes/UndoRedoCommand.src/M000101.html +18 -0
  128. data/genie-0.1/docs/classes/UndoRedoCommand.src/M000102.html +18 -0
  129. data/genie-0.1/docs/classes/UnitOfWork.html +322 -0
  130. data/genie-0.1/docs/classes/UnitOfWork.src/M000032.html +19 -0
  131. data/genie-0.1/docs/classes/UnitOfWork.src/M000033.html +18 -0
  132. data/genie-0.1/docs/classes/UnitOfWork.src/M000034.html +18 -0
  133. data/genie-0.1/docs/classes/UnitOfWork.src/M000035.html +18 -0
  134. data/genie-0.1/docs/classes/UnitOfWork.src/M000036.html +18 -0
  135. data/genie-0.1/docs/classes/UnitOfWork.src/M000037.html +18 -0
  136. data/genie-0.1/docs/classes/UnitOfWork.src/M000038.html +18 -0
  137. data/genie-0.1/docs/classes/UnitOfWork.src/M000039.html +18 -0
  138. data/genie-0.1/docs/classes/UnitOfWork.src/M000040.html +18 -0
  139. data/genie-0.1/docs/created.rid +1 -0
  140. data/genie-0.1/docs/dot/f_0.dot +14 -0
  141. data/genie-0.1/docs/dot/f_0.png +0 -0
  142. data/genie-0.1/docs/dot/f_1.dot +14 -0
  143. data/genie-0.1/docs/dot/f_1.png +0 -0
  144. data/genie-0.1/docs/dot/f_2.dot +14 -0
  145. data/genie-0.1/docs/dot/f_2.png +0 -0
  146. data/genie-0.1/docs/dot/f_3.dot +84 -0
  147. data/genie-0.1/docs/dot/f_3.png +0 -0
  148. data/genie-0.1/docs/dot/f_4.dot +14 -0
  149. data/genie-0.1/docs/dot/f_4.png +0 -0
  150. data/genie-0.1/docs/dot/f_5.dot +78 -0
  151. data/genie-0.1/docs/dot/f_5.png +0 -0
  152. data/genie-0.1/docs/dot/f_6.dot +50 -0
  153. data/genie-0.1/docs/dot/f_6.png +0 -0
  154. data/genie-0.1/docs/dot/f_7.dot +57 -0
  155. data/genie-0.1/docs/dot/f_7.png +0 -0
  156. data/genie-0.1/docs/dot/m_5_0.dot +30 -0
  157. data/genie-0.1/docs/dot/m_5_0.png +0 -0
  158. data/genie-0.1/docs/dot/m_7_0.dot +39 -0
  159. data/genie-0.1/docs/dot/m_7_0.png +0 -0
  160. data/genie-0.1/docs/files/License_txt.html +161 -0
  161. data/genie-0.1/docs/files/ReadMe_Amber_txt.html +491 -0
  162. data/genie-0.1/docs/files/ReadMe_txt.html +444 -0
  163. data/genie-0.1/docs/files/nist/genie/commands_rb.html +121 -0
  164. data/genie-0.1/docs/files/nist/genie/genie_rb.html +116 -0
  165. data/genie-0.1/docs/files/nist/genie/processors_rb.html +111 -0
  166. data/genie-0.1/docs/files/nist/genie/queues_rb.html +118 -0
  167. data/genie-0.1/docs/files/nist/genie/results_rb.html +117 -0
  168. data/genie-0.1/docs/fr_class_index.html +46 -0
  169. data/genie-0.1/docs/fr_file_index.html +34 -0
  170. data/genie-0.1/docs/fr_method_index.html +160 -0
  171. data/genie-0.1/docs/images/overview.jpg +0 -0
  172. data/genie-0.1/docs/index.html +24 -0
  173. data/genie-0.1/docs/rdoc-style.css +208 -0
  174. data/genie-0.1/lib/nist/genie/commands.rb +413 -0
  175. data/genie-0.1/lib/nist/genie/genie.rb +4 -0
  176. data/genie-0.1/lib/nist/genie/processors.rb +382 -0
  177. data/genie-0.1/lib/nist/genie/queues.rb +435 -0
  178. data/genie-0.1/lib/nist/genie/results.rb +113 -0
  179. data/genie-0.1/tests/helpers.rb +45 -0
  180. data/genie-0.1/tests/test_commands.rb +338 -0
  181. data/genie-0.1/tests/test_processors.rb +17 -0
  182. data/genie-0.1/tests/test_queues.rb +288 -0
  183. data/genie-0.1/tests/test_results.rb +37 -0
  184. data/trimurti-0.1.gem +0 -0
  185. data/trimurti-0.1/docs/classes/Array.html +176 -0
  186. data/trimurti-0.1/docs/classes/Array.src/M000005.html +19 -0
  187. data/trimurti-0.1/docs/classes/Array.src/M000006.html +19 -0
  188. data/trimurti-0.1/docs/classes/Asserter.html +136 -0
  189. data/trimurti-0.1/docs/classes/Brahma.html +360 -0
  190. data/trimurti-0.1/docs/classes/Brahma.src/M000029.html +21 -0
  191. data/trimurti-0.1/docs/classes/Brahma.src/M000030.html +20 -0
  192. data/trimurti-0.1/docs/classes/Brahma.src/M000031.html +36 -0
  193. data/trimurti-0.1/docs/classes/Brahma.src/M000032.html +18 -0
  194. data/trimurti-0.1/docs/classes/Brahma.src/M000033.html +20 -0
  195. data/trimurti-0.1/docs/classes/Brahma.src/M000034.html +21 -0
  196. data/trimurti-0.1/docs/classes/Brahma.src/M000035.html +25 -0
  197. data/trimurti-0.1/docs/classes/Brahma.src/M000036.html +22 -0
  198. data/trimurti-0.1/docs/classes/Brahma.src/M000037.html +22 -0
  199. data/trimurti-0.1/docs/classes/ComponentSpec.html +275 -0
  200. data/trimurti-0.1/docs/classes/ComponentSpec.src/M000001.html +21 -0
  201. data/trimurti-0.1/docs/classes/ComponentSpec.src/M000002.html +18 -0
  202. data/trimurti-0.1/docs/classes/DRb.html +165 -0
  203. data/trimurti-0.1/docs/classes/DRb.src/M000062.html +18 -0
  204. data/trimurti-0.1/docs/classes/DRb.src/M000063.html +18 -0
  205. data/trimurti-0.1/docs/classes/GUID.html +129 -0
  206. data/trimurti-0.1/docs/classes/Linda.html +444 -0
  207. data/trimurti-0.1/docs/classes/Linda.src/M000007.html +16 -0
  208. data/trimurti-0.1/docs/classes/Linda.src/M000008.html +16 -0
  209. data/trimurti-0.1/docs/classes/Linda.src/M000009.html +20 -0
  210. data/trimurti-0.1/docs/classes/Linda.src/M000010.html +16 -0
  211. data/trimurti-0.1/docs/classes/Linda.src/M000011.html +18 -0
  212. data/trimurti-0.1/docs/classes/Linda.src/M000012.html +21 -0
  213. data/trimurti-0.1/docs/classes/Linda.src/M000013.html +18 -0
  214. data/trimurti-0.1/docs/classes/Linda.src/M000014.html +18 -0
  215. data/trimurti-0.1/docs/classes/Linda.src/M000015.html +18 -0
  216. data/trimurti-0.1/docs/classes/Linda.src/M000016.html +18 -0
  217. data/trimurti-0.1/docs/classes/Linda.src/M000017.html +20 -0
  218. data/trimurti-0.1/docs/classes/Linda.src/M000018.html +20 -0
  219. data/trimurti-0.1/docs/classes/Object.html +153 -0
  220. data/trimurti-0.1/docs/classes/Object.src/M000021.html +18 -0
  221. data/trimurti-0.1/docs/classes/Plugins.html +174 -0
  222. data/trimurti-0.1/docs/classes/Plugins.src/M000024.html +32 -0
  223. data/trimurti-0.1/docs/classes/Plugins.src/M000025.html +32 -0
  224. data/trimurti-0.1/docs/classes/Plugins/Spec.html +267 -0
  225. data/trimurti-0.1/docs/classes/Plugins/Spec.src/M000026.html +22 -0
  226. data/trimurti-0.1/docs/classes/Plugins/Spec.src/M000027.html +18 -0
  227. data/trimurti-0.1/docs/classes/Plugins/Spec.src/M000028.html +20 -0
  228. data/trimurti-0.1/docs/classes/QBE_ID.html +147 -0
  229. data/trimurti-0.1/docs/classes/QBE_ID.src/M000059.html +18 -0
  230. data/trimurti-0.1/docs/classes/QueryByExample.html +270 -0
  231. data/trimurti-0.1/docs/classes/QueryByExample.src/M000054.html +17 -0
  232. data/trimurti-0.1/docs/classes/QueryByExample.src/M000055.html +17 -0
  233. data/trimurti-0.1/docs/classes/QueryByExample.src/M000056.html +17 -0
  234. data/trimurti-0.1/docs/classes/QueryByExample.src/M000057.html +17 -0
  235. data/trimurti-0.1/docs/classes/QueryByExample.src/M000058.html +17 -0
  236. data/trimurti-0.1/docs/classes/Shiva.html +159 -0
  237. data/trimurti-0.1/docs/classes/Shiva.src/M000060.html +18 -0
  238. data/trimurti-0.1/docs/classes/Shiva.src/M000061.html +19 -0
  239. data/trimurti-0.1/docs/classes/String.html +176 -0
  240. data/trimurti-0.1/docs/classes/String.src/M000022.html +16 -0
  241. data/trimurti-0.1/docs/classes/String.src/M000023.html +16 -0
  242. data/trimurti-0.1/docs/classes/Symbol.html +176 -0
  243. data/trimurti-0.1/docs/classes/Symbol.src/M000003.html +16 -0
  244. data/trimurti-0.1/docs/classes/Symbol.src/M000004.html +16 -0
  245. data/trimurti-0.1/docs/classes/Trimurti.html +189 -0
  246. data/trimurti-0.1/docs/classes/Trimurti.src/M000019.html +16 -0
  247. data/trimurti-0.1/docs/classes/Trimurti.src/M000020.html +16 -0
  248. data/trimurti-0.1/docs/classes/Vishnu.html +563 -0
  249. data/trimurti-0.1/docs/classes/Vishnu.src/M000038.html +18 -0
  250. data/trimurti-0.1/docs/classes/Vishnu.src/M000039.html +18 -0
  251. data/trimurti-0.1/docs/classes/Vishnu.src/M000040.html +18 -0
  252. data/trimurti-0.1/docs/classes/Vishnu.src/M000041.html +22 -0
  253. data/trimurti-0.1/docs/classes/Vishnu.src/M000042.html +23 -0
  254. data/trimurti-0.1/docs/classes/Vishnu.src/M000043.html +24 -0
  255. data/trimurti-0.1/docs/classes/Vishnu.src/M000044.html +24 -0
  256. data/trimurti-0.1/docs/classes/Vishnu.src/M000045.html +18 -0
  257. data/trimurti-0.1/docs/classes/Vishnu.src/M000046.html +22 -0
  258. data/trimurti-0.1/docs/classes/Vishnu.src/M000047.html +20 -0
  259. data/trimurti-0.1/docs/classes/Vishnu.src/M000048.html +18 -0
  260. data/trimurti-0.1/docs/classes/Vishnu.src/M000049.html +22 -0
  261. data/trimurti-0.1/docs/classes/Vishnu.src/M000050.html +20 -0
  262. data/trimurti-0.1/docs/classes/Vishnu.src/M000051.html +19 -0
  263. data/trimurti-0.1/docs/classes/Vishnu.src/M000052.html +30 -0
  264. data/trimurti-0.1/docs/classes/Vishnu.src/M000053.html +21 -0
  265. data/trimurti-0.1/docs/created.rid +1 -0
  266. data/trimurti-0.1/docs/dot/f_0.dot +14 -0
  267. data/trimurti-0.1/docs/dot/f_0.png +0 -0
  268. data/trimurti-0.1/docs/dot/f_1.dot +14 -0
  269. data/trimurti-0.1/docs/dot/f_1.png +0 -0
  270. data/trimurti-0.1/docs/dot/f_2.dot +14 -0
  271. data/trimurti-0.1/docs/dot/f_2.png +0 -0
  272. data/trimurti-0.1/docs/dot/f_3.dot +39 -0
  273. data/trimurti-0.1/docs/dot/f_3.png +0 -0
  274. data/trimurti-0.1/docs/dot/f_4.dot +39 -0
  275. data/trimurti-0.1/docs/dot/f_4.png +0 -0
  276. data/trimurti-0.1/docs/dot/f_5.dot +69 -0
  277. data/trimurti-0.1/docs/dot/f_5.png +0 -0
  278. data/trimurti-0.1/docs/dot/f_6.dot +149 -0
  279. data/trimurti-0.1/docs/dot/f_6.png +0 -0
  280. data/trimurti-0.1/docs/dot/m_3_0.dot +30 -0
  281. data/trimurti-0.1/docs/dot/m_3_0.png +0 -0
  282. data/trimurti-0.1/docs/dot/m_4_0.dot +39 -0
  283. data/trimurti-0.1/docs/dot/m_4_0.png +0 -0
  284. data/trimurti-0.1/docs/dot/m_5_0.dot +40 -0
  285. data/trimurti-0.1/docs/dot/m_5_0.png +0 -0
  286. data/trimurti-0.1/docs/dot/m_5_1.dot +30 -0
  287. data/trimurti-0.1/docs/dot/m_5_1.png +0 -0
  288. data/trimurti-0.1/docs/dot/m_6_0.dot +40 -0
  289. data/trimurti-0.1/docs/dot/m_6_0.png +0 -0
  290. data/trimurti-0.1/docs/dot/m_6_1.dot +30 -0
  291. data/trimurti-0.1/docs/dot/m_6_1.png +0 -0
  292. data/trimurti-0.1/docs/dot/m_6_2.dot +30 -0
  293. data/trimurti-0.1/docs/dot/m_6_2.png +0 -0
  294. data/trimurti-0.1/docs/files/License_txt.html +132 -0
  295. data/trimurti-0.1/docs/files/ReadMe_Amber_txt.html +491 -0
  296. data/trimurti-0.1/docs/files/ReadMe_txt.html +694 -0
  297. data/trimurti-0.1/docs/files/nist/trimurti/linda_rb.html +129 -0
  298. data/trimurti-0.1/docs/files/nist/trimurti/plugins_rb.html +129 -0
  299. data/trimurti-0.1/docs/files/nist/trimurti/queryByExample_rb.html +128 -0
  300. data/trimurti-0.1/docs/files/nist/trimurti/trimurti_rb.html +151 -0
  301. data/trimurti-0.1/docs/fr_class_index.html +43 -0
  302. data/trimurti-0.1/docs/fr_file_index.html +33 -0
  303. data/trimurti-0.1/docs/fr_method_index.html +89 -0
  304. data/trimurti-0.1/docs/images/overview.jpg +0 -0
  305. data/trimurti-0.1/docs/index.html +24 -0
  306. data/trimurti-0.1/docs/rdoc-style.css +208 -0
  307. data/trimurti-0.1/lib/nist/trimurti/linda.rb +163 -0
  308. data/trimurti-0.1/lib/nist/trimurti/plugins.rb +107 -0
  309. data/trimurti-0.1/lib/nist/trimurti/queryByExample.rb +81 -0
  310. data/trimurti-0.1/lib/nist/trimurti/trimurti.rb +433 -0
  311. data/trimurti-0.1/tests/test_linda.rb +111 -0
  312. data/trimurti-0.1/tests/test_trimurti.rb +247 -0
  313. metadata +467 -0
@@ -0,0 +1,435 @@
1
+
2
+ require 'nist/common/rubyToolsDay'
3
+ require 'nist/common/singletonReflection'
4
+
5
+ class QueueDispatcher
6
+
7
+ # An array of queues
8
+ attr_accessor :child_queues
9
+
10
+ # A two-argument Proc that determines which queue(s) should
11
+ # be sent #enqueue and #do messages. The arguments are:
12
+ # * The queue under evaluation
13
+ # * The Command to be distributed
14
+ # The result is treated as a Boolean.
15
+ # When the selection_proc is nil (as it is by default)
16
+ # all child_queues are selected.
17
+ attr_accessor :selection_proc
18
+
19
+ def initialize(*child_queues)
20
+ self.child_queues = child_queues
21
+ end
22
+
23
+ # Returns an Array of queues that the argument (a command)
24
+ # should be distributed to.
25
+ def select_queues(cmnd)
26
+ return child_queues unless selection_proc
27
+ child_queues.select {|queue|
28
+ selection_proc.call(queue, cmnd)
29
+ }
30
+ end
31
+
32
+ # Ask each of the child_queues selected by selection_proc
33
+ # to enqueue the argument. Unlike Queue#enquue (which returns
34
+ # a QueueEntry), this returns an Array of QueueEntries.
35
+ def enqueue(cmnd)
36
+ select_queues(cmnd).collect {|queue| queue.enqueue(cmmnd) }
37
+ end
38
+
39
+ # Ask each of the child_queues selected by selection_proc
40
+ # to enqueue the argument.
41
+ def do(cmnd)
42
+ selected = select_queues(cmnd)
43
+ # Avoid the assembly of a composite result if only one queue is selected
44
+ return selected[0].do(cmnd) if selected.size == 1
45
+ # Since #do sleeps until the command has been processed, we need to
46
+ # spawn a thread for each queue. If we did not do that, the #do would
47
+ # be issued sequentially.
48
+ answer = Result.new
49
+ threads = Array.new
50
+ selected.each {|queue|
51
+ threads << Thread.new(answer) {|result| result.add(true, queue.do(cmnd)) }
52
+ }
53
+ # Wait for all threads to finish
54
+ threads.each {|thread| thread.join }
55
+ # Finally done!
56
+ answer
57
+ end
58
+
59
+ end # QueueDispatcher
60
+
61
+ # ======================================
62
+
63
+ class Queue
64
+
65
+ # If strict_bundle_handling is true, all the commands in
66
+ # a TransactionBundle must be redone if any command fails.
67
+ # Otherwise, the commands that failed are asked if they
68
+ # may_have_side_effects: if any of the failures might have
69
+ # side effects, the entire TransactionBundle must be redone.
70
+ # If, however, all the failed commands respond that they can
71
+ # not contain side effects, only the failures are redone.
72
+ # strict_bundle_handling is cautious, but not necessary
73
+ # (provided the side effect query is accuate): after all,
74
+ # the bundle is not a UnitOfWork.
75
+ attr_accessor :strict_bundle_handling
76
+
77
+ # An Array of available QueueEntries.
78
+ # The oldest entries have the lowest indices.
79
+ attr_accessor :available
80
+
81
+ # QueueEntries that are currently being processed.
82
+ attr_accessor :claimed
83
+
84
+ # QueueEntries that have been fully processed (not necessarily
85
+ # successfully).
86
+ attr_accessor :history
87
+
88
+ # An Array of objcts that respond to
89
+ # command_added(aCommand, aQue)
90
+ # This method returns a Boolean, true if the
91
+ # reciever wishes to handle the command.
92
+ # When a command is enqueued, watchers are
93
+ # notified until either one of the watchers
94
+ # accepts the command, or all of the watchers
95
+ # have been informed of the command.
96
+ # The order of watchers in this array changes
97
+ # with every send of notify_watchers. This
98
+ # rotation distributes the load among watchers.
99
+ attr_accessor :watchers
100
+
101
+ def initialize
102
+ self.strict_bundle_handling=true
103
+ self.available=Array.new
104
+ self.claimed=Array.new
105
+ self.history=Array.new
106
+ self.watchers=Array.new
107
+ end
108
+
109
+ def add_processor(processor)
110
+ processor.queue = self
111
+ end
112
+
113
+ # Register a watcher to recieve entry_added messages.
114
+ def add_watcher(watcher)
115
+ watchers << watcher
116
+ end
117
+
118
+ # Deregister a watcher, so that it no longer
119
+ # recieves entry_added messages.
120
+ # Returns the removed watcher (nil if it was not present)
121
+ def remove_watcher(watcher)
122
+ watchers.delete(watcher)
123
+ end
124
+
125
+ # Add to the receiver a command which will be executed
126
+ # asynchronously.
127
+ def enqueue(cmnd)
128
+ entry = cmnd.to_entry
129
+ available << entry
130
+ Thread.new(entry) { |e| notify_watchers(e) }
131
+ entry
132
+ end
133
+
134
+ def do(cmnd)
135
+ entry = enqueue(cmnd)
136
+ entry.thread = Thread.current
137
+ Thread.stop
138
+ entry.result
139
+ end
140
+
141
+ def notify_watchers(queueEntry)
142
+ watchers.size.times {
143
+ w = watchers.shift
144
+ watchers.push(w)
145
+ return if w.entry_added(queueEntry)
146
+ }
147
+ end
148
+
149
+ # Number of entries available for execution.
150
+ def num_available; available.size; end
151
+
152
+ # Total estimated time of all entries available for execution
153
+ def estimated_seconds
154
+ available.inject(0.0) {|sum, entry| sum + entry.estimated_seconds }
155
+ end
156
+
157
+ # Returns the age of the oldest QueueEntry.
158
+ # Returns 0.0 if none are available
159
+ def age_oldest_available
160
+ return 0.0 if available.empty?
161
+ available[0].age
162
+ end
163
+
164
+ # Acts like claim_one if num is less than two.
165
+ # Otherwise builds a TransactionBundle from
166
+ # the specified number of QueueEntries (or num_available
167
+ # if that is smaller). Adds the TransactionBundle
168
+ # to claimed, and returns the TransactionBundle.
169
+ def claim_num(num)
170
+ return claim_one if num<2
171
+ # Ruby actually uses num.min(available.size)
172
+ kids = available.slice!(0, num)
173
+ answer = TransactionBundle.new(kids)
174
+ claimed << answer
175
+ answer
176
+ end
177
+
178
+ # Remove the oldest QueueEntrhy from available.
179
+ # Add this oldest entry to claimed.
180
+ # Return the entry.
181
+ def claim_one
182
+ return nil if available.empty?
183
+ answer = available.shift
184
+ claimed << answer
185
+ answer
186
+ end
187
+
188
+ # Returns a QueueEntry or TransactionBundle
189
+ # that should approach as closely
190
+ # as possible the requested execution time
191
+ # (limited to the specified number of entries).
192
+ # maxNum can be nil if an upper limit on the
193
+ # number of commands is not desired.
194
+ def claim_seconds(sec, maxNum=nil)
195
+ num = num_for_estimated_seconds(sec, maxNum)
196
+ claim_num(num)
197
+ end
198
+
199
+ # Transfer the specified entry from available
200
+ # to claimed, and return the entry (nil if
201
+ # the entry is not present).
202
+ def claim_entry(entry)
203
+ answer = available.delete(entry)
204
+ claimed << answer if answer
205
+ answer
206
+ end
207
+
208
+ # Computes how many of the oldest available commands
209
+ # are necessary to approach (but not exceed) an estimated
210
+ # execution time of sec seconds. An upper limit can be
211
+ # specified: use nil if the upper limit is not desired.
212
+ def num_for_estimated_seconds(sec, maxNum=nil)
213
+ answer = 0
214
+ time = 0.0
215
+ available.each {|entry|
216
+ time+=entry.estimated_seconds
217
+ return answer if time > sec || (maxNum && answer>=maxNum)
218
+ answer+=1
219
+ }
220
+ answer
221
+ end
222
+
223
+ # Remove the argument from the claimed collection
224
+ def _relinquish(entry)
225
+ claimed.delete(entry)
226
+ end
227
+
228
+ # Return the entries to the beginning of the #available
229
+ # collection. The arguments are intended
230
+ # to be QueueEntries, not TransactionBundles
231
+ # (which are decomposed by #partition inside #processed).
232
+ def _reschedule(*entries)
233
+ entries.reverse.each {|entry|
234
+ available.unshift(entry)
235
+ _relinquish(entry)
236
+ }
237
+ entries
238
+ end
239
+
240
+
241
+ # The entries have either completed successfully,
242
+ # or we've given up on them. Either way, add them
243
+ # to the history. The arguments are intended
244
+ # to be QueueEntries, not TransactionBundles
245
+ # (which are decomposed by #partition inside #processed).
246
+ def _finish(*entries)
247
+ entries.each {|entry|
248
+ entry.finish
249
+ history << entry
250
+ _relinquish(entry)
251
+ }
252
+ end
253
+
254
+ # The entry has been processed (not necessarily to completion).
255
+ # Remove the receiver from #claimed, and add the entry or its children
256
+ # to either #history or #available.
257
+ # Return an (ideally empty) Array of those entries that have been
258
+ # rescheduled.
259
+ def processed(entry)
260
+ not_done, done = entry.partition(strict_bundle_handling)
261
+ _finish(*done)
262
+ _reschedule( *not_done )
263
+ end
264
+
265
+ end # Queue
266
+
267
+
268
+ # #############################################################
269
+
270
+ # Represents an entry in a queue
271
+ class QueueEntry
272
+
273
+ # The command executed by the entry.
274
+ attr_accessor :command
275
+
276
+ # An instance of Time representing the
277
+ # moment when the entry was added to the queue
278
+ attr_accessor :when_added
279
+
280
+ # An instance of Time representing the
281
+ # moment when processor finished working with the entry.
282
+ attr_accessor :when_finished
283
+
284
+ # The Thread that will be awakended once the
285
+ # entry has been fully processed.
286
+ # Nil if the entry was directly added by #enque.
287
+ # Not nil if the entry was added by #do.
288
+ attr_accessor :thread
289
+
290
+ # An Integer, originally zero, specifying how many times the
291
+ # command has been attempted.
292
+ attr_accessor :num_attempts
293
+
294
+ # An array of Results
295
+ attr_accessor :results
296
+
297
+ # A Symbol that specifies the state of the entry.
298
+ # This is currently not used: it can be used
299
+ # by other components.
300
+ attr_accessor :status
301
+
302
+ def initialize(command)
303
+ self.command=command
304
+ self.num_attempts=0
305
+ self.when_added=Time.now
306
+ self.results=Array.new
307
+ end
308
+
309
+ # Returns the time in seconds since
310
+ # the creation of the entry.
311
+ def age
312
+ Time.now - when_added
313
+ end
314
+
315
+ forward(:command, nil, :may_update, :may_have_side_effects, :estimated_seconds, :description)
316
+
317
+ # Retruns an Integer, the number of times
318
+ # the system can currently attempt the command
319
+ def remaining_attempts
320
+ command.max_attempts - num_attempts
321
+ end
322
+
323
+ # Returns a Boolean, true if the system has
324
+ # not exhausted its maximum number of attempts.
325
+ def remaining_attempts?
326
+ remaining_attempts > 0
327
+ end
328
+ alias has_remaining_attempts remaining_attempts?
329
+
330
+
331
+ # Return the most recent result. Returns nil if
332
+ # the command has not yet been attempted.
333
+ def result; results[-1]; end
334
+
335
+ # Returns a Boolean, true if the most recent Result
336
+ # has an error.
337
+ def error?
338
+ r = result
339
+ r && r.error?
340
+ end
341
+ alias has_error error?
342
+
343
+ # Returns a Boolean, true if the most recent Result
344
+ # has an error that might not occur if the command was
345
+ # attempted another time.
346
+ def retryable_error?
347
+ r = result
348
+ r && r.retryable_error?
349
+ end
350
+ alias has_retryable_error retryable_error?
351
+
352
+ # The queue is done with the entry.
353
+ # Wakes up the thread that submitted the entry to the queue
354
+ # (via #do). Should not be called until the que is done with
355
+ # the entry, and a result (sccessfull or not) is available.
356
+ def finish
357
+ self.when_finished = Time.now
358
+ thread.run if thread
359
+ end
360
+
361
+ # Ask the command to #do. Caches the Result.
362
+ def do
363
+ r = command.do
364
+ self.num_attempts+= 1
365
+ results << r
366
+ r
367
+ end
368
+
369
+ # returns an array composed of two arrays:
370
+ # entries that need to be rescheduled for another try
371
+ # entries that that are finished, and should not be tried again.
372
+ def partition(strict)
373
+ return [[self],[]] if retry?
374
+ [[],[self]]
375
+ end
376
+
377
+ def retry?
378
+ retryable_error? && remaining_attempts?
379
+ end
380
+
381
+ def undo?
382
+ command.undoable? && :undo!=command.type
383
+ end
384
+ alias can_undo undo?
385
+
386
+ def redo?
387
+ command.undoable? && :undo==command.type
388
+ end
389
+ alias can_redo redo?
390
+
391
+ end # QueueEntry
392
+
393
+
394
+ class TransactionBundle
395
+
396
+ attr_accessor :children
397
+
398
+ def initialize(children)
399
+ self.children=children
400
+ end
401
+
402
+ def do
403
+ answer = CompoundResult.new
404
+ children.each {|kid| answer.add(kid.do) }
405
+ answer
406
+ end
407
+
408
+ # returns an array composed of two arrays:
409
+ # entries that need to be rescheduled for another try
410
+ # entries that that are finished, and should not be tried again.
411
+ def partition(strict)
412
+ return children.partition {|kid| kid.retry? } if retry_individually(strict)
413
+ return [children,[]] if retry?
414
+ [[],children]
415
+ end
416
+
417
+ def may_update
418
+ children.any? {|kid| kid.may_update }
419
+ end
420
+
421
+ def retry?
422
+ children.any? {|kid| kid.retry? }
423
+ end
424
+ alias should_retry retry?
425
+
426
+ def retry_individually(strict)
427
+ return false if strict
428
+ ! children.any? {|kid| kid.error? && kid.may_have_side_effects }
429
+ end
430
+
431
+
432
+ end # TransactionBundle
433
+
434
+
435
+
@@ -0,0 +1,113 @@
1
+ require 'nist/common/log'
2
+
3
+ class Log4r::LogEvent
4
+ # Applications that casn have recoverable errors
5
+ # need to define Log4r::LogEvent#retryable_error?
6
+ # This framework does not currently define what is
7
+ # retryable, so we define here a retryable_error?
8
+ # that always returns false.
9
+ def retryable_error?; false; end
10
+ end
11
+
12
+
13
+ # Represents the result of an attempt to execute a command
14
+ class Result
15
+
16
+ # A resolvable referring to the result of the execution
17
+ attr_accessor :result
18
+
19
+ # An Array of Log4r::LogEvents (both fatal and non fatal)
20
+ # resulting from exection.
21
+ attr_accessor :notices
22
+
23
+ # A Float containing the wall clock time in seconds required to execute the command
24
+ attr_accessor :execution_seconds
25
+
26
+ # A hash of additional data not present in the command's args,
27
+ # but necessary to undo the operation.
28
+ attr_accessor :undo_data
29
+
30
+ def initialize(result=nil)
31
+ self.result=result
32
+ self.notices=Array.new
33
+ self.undo_data=Hash.new
34
+ end
35
+
36
+ def error?
37
+ notices.any? {|notice| notice.error? }
38
+ end
39
+ alias has_error error?
40
+
41
+ def retryable_error?
42
+ notices.any? {|notice| notice.retryable_error? }
43
+ end
44
+ alias has_retryable_error retryable_error?
45
+
46
+ def add_notices(anArray)
47
+ notices.concat(anArray)
48
+ end
49
+
50
+ def add_error(description, levelString='ERROR', trace=caller)
51
+ levelNum = Log4r.level_name_to_index(levelString)
52
+ notices << Log4r::LogEvent.new(levelNum, logger, trace, description)
53
+ end
54
+
55
+ end # Result
56
+
57
+ # #############################################################
58
+
59
+ class CompoundResult
60
+
61
+ attr_accessor :children
62
+
63
+ def initialize(*kids)
64
+ self.children=kids
65
+ end
66
+
67
+ def add(aResult)
68
+ children << aResult
69
+ end
70
+ alias << add
71
+
72
+ def size
73
+ children.size
74
+ end
75
+
76
+ def [](idx)
77
+ children[idx]
78
+ end
79
+
80
+ def error?
81
+ children.any? {|kid| kid.error? }
82
+ end
83
+ alias has_error error?
84
+
85
+ def retryable_error?
86
+ children.any? {|kid| kid.retryable_error? }
87
+ end
88
+ alias has_retryable_error retryable_error?
89
+
90
+ def notices
91
+ answer = Array.new
92
+ children.each {|kid| answer.concat(kid.notices) }
93
+ answer
94
+ end
95
+
96
+ # Returns an Array of child Result#result values.
97
+ def result
98
+ children.collect {|kid| kid.result }
99
+ end
100
+
101
+ # Returns the sum of the execution times, as seconds.
102
+ def execution_seconds
103
+ children.inject(0.0) {|sum, kid| sum + kid.execution_seconds }
104
+ end
105
+
106
+ # Returns the union of all the child result undo_data hashes.
107
+ def undo_data
108
+ answer = Hash.new
109
+ children.each {|kid| answer.merge!(kid.undo_data) }
110
+ answer
111
+ end
112
+
113
+ end # CompoundResult