genie 0.1

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 (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