ttk 0.1.576

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 (625) hide show
  1. data/AUTHORS +32 -0
  2. data/COPYING +18 -0
  3. data/ChangeLog +4629 -0
  4. data/DATE +1 -0
  5. data/DESCRIPTION +8 -0
  6. data/GUIDELINES +84 -0
  7. data/LGPL +504 -0
  8. data/NEWS +69 -0
  9. data/NORM +85 -0
  10. data/README +206 -0
  11. data/REVISION +1 -0
  12. data/Rakefile +120 -0
  13. data/TODO +23 -0
  14. data/TODO.old +115 -0
  15. data/VERSION +5 -0
  16. data/bin/getopts/ttk.rb +394 -0
  17. data/bin/getopts/ttkd.rb +150 -0
  18. data/bin/getopts/ttkm.rb +71 -0
  19. data/bin/ttk +170 -0
  20. data/bin/ttkd +73 -0
  21. data/bin/ttkm +54 -0
  22. data/doc/html/classes/IO/CutInput.html +159 -0
  23. data/doc/html/classes/IO/Delegator.html +291 -0
  24. data/doc/html/classes/IO/Dispatch.html +204 -0
  25. data/doc/html/classes/IO/Ext.html +118 -0
  26. data/doc/html/classes/IO/ImplExt.html +149 -0
  27. data/doc/html/classes/IO/ImplIndent.html +175 -0
  28. data/doc/html/classes/IO/ImplPrintFile.html +142 -0
  29. data/doc/html/classes/IO/ImplPrintIO.html +143 -0
  30. data/doc/html/classes/IO/InputFilter.html +347 -0
  31. data/doc/html/classes/IO/OutputFilter.html +298 -0
  32. data/doc/html/classes/NilClass.html +198 -0
  33. data/doc/html/classes/SafeEval.html +277 -0
  34. data/doc/html/classes/String.html +245 -0
  35. data/doc/html/classes/SymTbl.html +146 -0
  36. data/doc/html/classes/TTK.html +658 -0
  37. data/doc/html/classes/TTK/AbortStatus.html +211 -0
  38. data/doc/html/classes/TTK/Daemons.html +142 -0
  39. data/doc/html/classes/TTK/Daemons/Daemon.html +170 -0
  40. data/doc/html/classes/TTK/Daemons/Daemon/Logger.html +192 -0
  41. data/doc/html/classes/TTK/Daemons/Master.html +163 -0
  42. data/doc/html/classes/TTK/Daemons/Slave.html +158 -0
  43. data/doc/html/classes/TTK/Dumpers.html +150 -0
  44. data/doc/html/classes/TTK/Dumpers/Dumper.html +461 -0
  45. data/doc/html/classes/TTK/Dumpers/Notif.html +208 -0
  46. data/doc/html/classes/TTK/Dumpers/Xml.html +260 -0
  47. data/doc/html/classes/TTK/Dumpers/Yaml.html +307 -0
  48. data/doc/html/classes/TTK/ErrorStatus.html +133 -0
  49. data/doc/html/classes/TTK/FailStatus.html +195 -0
  50. data/doc/html/classes/TTK/Fetchers.html +135 -0
  51. data/doc/html/classes/TTK/Fetchers/Client.html +229 -0
  52. data/doc/html/classes/TTK/Fetchers/Client/Receiver.html +254 -0
  53. data/doc/html/classes/TTK/Fetchers/Server.html +256 -0
  54. data/doc/html/classes/TTK/Fetchers/Server/Sender.html +241 -0
  55. data/doc/html/classes/TTK/Filters.html +142 -0
  56. data/doc/html/classes/TTK/Filters/BasicLogger.html +187 -0
  57. data/doc/html/classes/TTK/Filters/Filter.html +188 -0
  58. data/doc/html/classes/TTK/Filters/Saver.html +279 -0
  59. data/doc/html/classes/TTK/Loaders.html +115 -0
  60. data/doc/html/classes/TTK/Loaders/BaseNode.html +224 -0
  61. data/doc/html/classes/TTK/Loaders/Loader.html +242 -0
  62. data/doc/html/classes/TTK/Loaders/OYaml.html +161 -0
  63. data/doc/html/classes/TTK/Loaders/Yaml.html +157 -0
  64. data/doc/html/classes/TTK/Loaders/YamlOld.html +155 -0
  65. data/doc/html/classes/TTK/Logger.html +836 -0
  66. data/doc/html/classes/TTK/Logger/Path.html +161 -0
  67. data/doc/html/classes/TTK/Logger/SectionNode.html +925 -0
  68. data/doc/html/classes/TTK/Logger/Severity.html +306 -0
  69. data/doc/html/classes/TTK/Logger/ToTTKLog.html +119 -0
  70. data/doc/html/classes/TTK/Logger/Verbosity.html +278 -0
  71. data/doc/html/classes/TTK/LoggerFactory.html +204 -0
  72. data/doc/html/classes/TTK/Monitors.html +132 -0
  73. data/doc/html/classes/TTK/Monitors/Client.html +261 -0
  74. data/doc/html/classes/TTK/Monitors/Monitor.html +209 -0
  75. data/doc/html/classes/TTK/Monitors/Server.html +288 -0
  76. data/doc/html/classes/TTK/Monitors/Server/Notification.html +118 -0
  77. data/doc/html/classes/TTK/Monitors/Server/Notifier.html +118 -0
  78. data/doc/html/classes/TTK/PassStatus.html +168 -0
  79. data/doc/html/classes/TTK/RunningStatus.html +133 -0
  80. data/doc/html/classes/TTK/Services.html +161 -0
  81. data/doc/html/classes/TTK/Services/DRbService.html +217 -0
  82. data/doc/html/classes/TTK/Services/DRbService/Notification.html +123 -0
  83. data/doc/html/classes/TTK/Services/DRbService/SubTestable.html +197 -0
  84. data/doc/html/classes/TTK/Services/FetcherClient.html +190 -0
  85. data/doc/html/classes/TTK/Services/FetcherServer.html +149 -0
  86. data/doc/html/classes/TTK/Services/MonitorClient.html +190 -0
  87. data/doc/html/classes/TTK/Services/MonitorServer.html +149 -0
  88. data/doc/html/classes/TTK/Services/TesterClient.html +207 -0
  89. data/doc/html/classes/TTK/Services/TesterMaster.html +193 -0
  90. data/doc/html/classes/TTK/Services/TesterMaster/Notification.html +123 -0
  91. data/doc/html/classes/TTK/Services/TesterSlave.html +157 -0
  92. data/doc/html/classes/TTK/Services/TesterSlave/Notification.html +118 -0
  93. data/doc/html/classes/TTK/SkipStatus.html +169 -0
  94. data/doc/html/classes/TTK/StartStatus.html +133 -0
  95. data/doc/html/classes/TTK/Status.html +373 -0
  96. data/doc/html/classes/TTK/StatusException.html +161 -0
  97. data/doc/html/classes/TTK/StatusWithMessage.html +220 -0
  98. data/doc/html/classes/TTK/Strategies.html +356 -0
  99. data/doc/html/classes/TTK/Strategies/Abort.html +161 -0
  100. data/doc/html/classes/TTK/Strategies/Authors.html +170 -0
  101. data/doc/html/classes/TTK/Strategies/Ball.html +200 -0
  102. data/doc/html/classes/TTK/Strategies/Block.html +230 -0
  103. data/doc/html/classes/TTK/Strategies/Bootstrap.html +238 -0
  104. data/doc/html/classes/TTK/Strategies/Checkout.html +201 -0
  105. data/doc/html/classes/TTK/Strategies/Clean.html +160 -0
  106. data/doc/html/classes/TTK/Strategies/Cmd.html +218 -0
  107. data/doc/html/classes/TTK/Strategies/CmdBase.html +312 -0
  108. data/doc/html/classes/TTK/Strategies/Collection.html +282 -0
  109. data/doc/html/classes/TTK/Strategies/Compile.html +199 -0
  110. data/doc/html/classes/TTK/Strategies/Composite.html +541 -0
  111. data/doc/html/classes/TTK/Strategies/Composite/Ordered.html +183 -0
  112. data/doc/html/classes/TTK/Strategies/Configure.html +270 -0
  113. data/doc/html/classes/TTK/Strategies/DistDelegate.html +192 -0
  114. data/doc/html/classes/TTK/Strategies/DistDuplicate.html +221 -0
  115. data/doc/html/classes/TTK/Strategies/DistStrategy.html +224 -0
  116. data/doc/html/classes/TTK/Strategies/Distribute.html +163 -0
  117. data/doc/html/classes/TTK/Strategies/Error.html +161 -0
  118. data/doc/html/classes/TTK/Strategies/Extract.html +179 -0
  119. data/doc/html/classes/TTK/Strategies/Fail.html +161 -0
  120. data/doc/html/classes/TTK/Strategies/Fetch.html +400 -0
  121. data/doc/html/classes/TTK/Strategies/Fetcher.html +276 -0
  122. data/doc/html/classes/TTK/Strategies/Glob.html +201 -0
  123. data/doc/html/classes/TTK/Strategies/IOBased.html +400 -0
  124. data/doc/html/classes/TTK/Strategies/Import.html +215 -0
  125. data/doc/html/classes/TTK/Strategies/JUnit.html +623 -0
  126. data/doc/html/classes/TTK/Strategies/KillAll.html +249 -0
  127. data/doc/html/classes/TTK/Strategies/Make.html +235 -0
  128. data/doc/html/classes/TTK/Strategies/Make/All.html +120 -0
  129. data/doc/html/classes/TTK/Strategies/Make/Check.html +120 -0
  130. data/doc/html/classes/TTK/Strategies/Make/Default.html +155 -0
  131. data/doc/html/classes/TTK/Strategies/Make/DistCheck.html +120 -0
  132. data/doc/html/classes/TTK/Strategies/Make/Install.html +120 -0
  133. data/doc/html/classes/TTK/Strategies/Make/Target.html +179 -0
  134. data/doc/html/classes/TTK/Strategies/Package.html +271 -0
  135. data/doc/html/classes/TTK/Strategies/PackageCollection.html +168 -0
  136. data/doc/html/classes/TTK/Strategies/Pass.html +161 -0
  137. data/doc/html/classes/TTK/Strategies/Pool.html +306 -0
  138. data/doc/html/classes/TTK/Strategies/Pool/PoolComponent.html +139 -0
  139. data/doc/html/classes/TTK/Strategies/ProbabilityThreshold.html +187 -0
  140. data/doc/html/classes/TTK/Strategies/Proxy.html +211 -0
  141. data/doc/html/classes/TTK/Strategies/RUnit.html +355 -0
  142. data/doc/html/classes/TTK/Strategies/RemoteCmd.html +213 -0
  143. data/doc/html/classes/TTK/Strategies/SignalCmd.html +269 -0
  144. data/doc/html/classes/TTK/Strategies/Sleep.html +193 -0
  145. data/doc/html/classes/TTK/Strategies/SqlQuery.html +248 -0
  146. data/doc/html/classes/TTK/Strategies/Strategy.html +2847 -0
  147. data/doc/html/classes/TTK/Strategies/Strategy/AssertEval.html +233 -0
  148. data/doc/html/classes/TTK/Strategies/Strategy/AttributedClass.html +107 -0
  149. data/doc/html/classes/TTK/Strategies/Strategy/AttributedClass/Attribute.html +246 -0
  150. data/doc/html/classes/TTK/Strategies/Strategy/Failure.html +121 -0
  151. data/doc/html/classes/TTK/Strategies/Stub.html +179 -0
  152. data/doc/html/classes/TTK/Strategies/SubCmd.html +243 -0
  153. data/doc/html/classes/TTK/Strategies/Suite.html +182 -0
  154. data/doc/html/classes/TTK/Strategies/Test.html +310 -0
  155. data/doc/html/classes/TTK/Strategies/Tester.html +218 -0
  156. data/doc/html/classes/TTK/Streams.html +116 -0
  157. data/doc/html/classes/TTK/Streams/Diff.html +148 -0
  158. data/doc/html/classes/TTK/Streams/Stream.html +295 -0
  159. data/doc/html/classes/TTK/SymTbl.html +266 -0
  160. data/doc/html/classes/TTK/TTKException.html +118 -0
  161. data/doc/html/classes/TTK/TTKModule.html +145 -0
  162. data/doc/html/classes/TTK/Testers.html +156 -0
  163. data/doc/html/classes/TTK/Testers/Master.html +304 -0
  164. data/doc/html/classes/TTK/Testers/Slave.html +120 -0
  165. data/doc/html/classes/TTK/Testers/Tester.html +547 -0
  166. data/doc/html/classes/TTK/Testers/Tester/Config.html +310 -0
  167. data/doc/html/classes/TTK/Testers/Tester/Notification.html +123 -0
  168. data/doc/html/classes/TTK/Testers/Tester/Notifier.html +118 -0
  169. data/doc/html/classes/TTK/Testers/Tester/QueryNode.html +341 -0
  170. data/doc/html/classes/TTK/Testers/Tester/RemoteStatus.html +165 -0
  171. data/doc/html/classes/TTK/Testers/Tester/RunningTask.html +262 -0
  172. data/doc/html/classes/TTK/Testers/Tester/Score.html +198 -0
  173. data/doc/html/classes/TTK/TimeoutAbortStatus.html +161 -0
  174. data/doc/html/classes/TTK/Tools.html +111 -0
  175. data/doc/html/classes/TTK/Tools/HostDispatcher.html +246 -0
  176. data/doc/html/classes/TTK/Weights.html +160 -0
  177. data/doc/html/classes/TTK/Weights/WExpr.html +326 -0
  178. data/doc/html/classes/TTK/Weights/WFloat.html +149 -0
  179. data/doc/html/classes/TTK/Weights/WMin.html +148 -0
  180. data/doc/html/classes/TTK/Weights/Weight.html +624 -0
  181. data/doc/html/created.rid +1 -0
  182. data/doc/html/files/AUTHORS.html +198 -0
  183. data/doc/html/files/NEWS.html +236 -0
  184. data/doc/html/files/README.html +435 -0
  185. data/doc/html/files/TODO.html +128 -0
  186. data/doc/html/files/lib/ttk/Tools/HostDispatcher_rb.html +126 -0
  187. data/doc/html/files/lib/ttk/Tools/SafeEval_rb.html +119 -0
  188. data/doc/html/files/lib/ttk/Tools/cut_output_rb.html +126 -0
  189. data/doc/html/files/lib/ttk/Tools/io/delegator_rb.html +127 -0
  190. data/doc/html/files/lib/ttk/Tools/io/dispatch_rb.html +127 -0
  191. data/doc/html/files/lib/ttk/Tools/io/ext_rb.html +126 -0
  192. data/doc/html/files/lib/ttk/Tools/io/filters_rb.html +127 -0
  193. data/doc/html/files/lib/ttk/daemons/Daemon_rb.html +126 -0
  194. data/doc/html/files/lib/ttk/daemons/Master_rb.html +119 -0
  195. data/doc/html/files/lib/ttk/daemons/Slave_rb.html +119 -0
  196. data/doc/html/files/lib/ttk/daemons/daemon/logger_rb.html +126 -0
  197. data/doc/html/files/lib/ttk/dumpers/Dumper_rb.html +119 -0
  198. data/doc/html/files/lib/ttk/dumpers/Notif_rb.html +119 -0
  199. data/doc/html/files/lib/ttk/dumpers/Xml_rb.html +126 -0
  200. data/doc/html/files/lib/ttk/dumpers/Yaml_rb.html +119 -0
  201. data/doc/html/files/lib/ttk/fetchers/Client_rb.html +126 -0
  202. data/doc/html/files/lib/ttk/fetchers/Server_rb.html +126 -0
  203. data/doc/html/files/lib/ttk/fetchers/client/receiver_rb.html +127 -0
  204. data/doc/html/files/lib/ttk/fetchers/server/sender_rb.html +127 -0
  205. data/doc/html/files/lib/ttk/filters/BasicLogger_rb.html +126 -0
  206. data/doc/html/files/lib/ttk/filters/Filter_rb.html +119 -0
  207. data/doc/html/files/lib/ttk/filters/Saver_rb.html +119 -0
  208. data/doc/html/files/lib/ttk/loaders/Loader_rb.html +119 -0
  209. data/doc/html/files/lib/ttk/loaders/OYaml_rb.html +126 -0
  210. data/doc/html/files/lib/ttk/loaders/YamlOld_rb.html +126 -0
  211. data/doc/html/files/lib/ttk/loaders/Yaml_rb.html +126 -0
  212. data/doc/html/files/lib/ttk/logger/path_rb.html +119 -0
  213. data/doc/html/files/lib/ttk/logger/section_node_rb.html +119 -0
  214. data/doc/html/files/lib/ttk/logger/severity_rb.html +119 -0
  215. data/doc/html/files/lib/ttk/logger/to_ttk_log_rb.html +119 -0
  216. data/doc/html/files/lib/ttk/logger/verbosity_rb.html +119 -0
  217. data/doc/html/files/lib/ttk/logger_factory_rb.html +119 -0
  218. data/doc/html/files/lib/ttk/logger_rb.html +131 -0
  219. data/doc/html/files/lib/ttk/monitors/Client_rb.html +119 -0
  220. data/doc/html/files/lib/ttk/monitors/Monitor_rb.html +127 -0
  221. data/doc/html/files/lib/ttk/monitors/Server_rb.html +126 -0
  222. data/doc/html/files/lib/ttk/services/DRbService/sub_testable_rb.html +119 -0
  223. data/doc/html/files/lib/ttk/services/DRbService_rb.html +126 -0
  224. data/doc/html/files/lib/ttk/services/FetcherClient_rb.html +119 -0
  225. data/doc/html/files/lib/ttk/services/FetcherServer_rb.html +119 -0
  226. data/doc/html/files/lib/ttk/services/MonitorClient_rb.html +119 -0
  227. data/doc/html/files/lib/ttk/services/MonitorServer_rb.html +119 -0
  228. data/doc/html/files/lib/ttk/services/TesterClient_rb.html +119 -0
  229. data/doc/html/files/lib/ttk/services/TesterMaster_rb.html +119 -0
  230. data/doc/html/files/lib/ttk/services/TesterSlave_rb.html +119 -0
  231. data/doc/html/files/lib/ttk/status_rb.html +119 -0
  232. data/doc/html/files/lib/ttk/strategies/Abort_rb.html +119 -0
  233. data/doc/html/files/lib/ttk/strategies/Authors_rb.html +119 -0
  234. data/doc/html/files/lib/ttk/strategies/Ball_rb.html +119 -0
  235. data/doc/html/files/lib/ttk/strategies/Block_rb.html +119 -0
  236. data/doc/html/files/lib/ttk/strategies/Bootstrap_rb.html +119 -0
  237. data/doc/html/files/lib/ttk/strategies/Checkout_rb.html +127 -0
  238. data/doc/html/files/lib/ttk/strategies/Clean_rb.html +119 -0
  239. data/doc/html/files/lib/ttk/strategies/CmdBase_rb.html +119 -0
  240. data/doc/html/files/lib/ttk/strategies/Cmd_rb.html +119 -0
  241. data/doc/html/files/lib/ttk/strategies/Collection_rb.html +119 -0
  242. data/doc/html/files/lib/ttk/strategies/Compile_rb.html +119 -0
  243. data/doc/html/files/lib/ttk/strategies/Composite_rb.html +119 -0
  244. data/doc/html/files/lib/ttk/strategies/Configure_rb.html +119 -0
  245. data/doc/html/files/lib/ttk/strategies/DistDelegate_rb.html +119 -0
  246. data/doc/html/files/lib/ttk/strategies/DistDuplicate_rb.html +119 -0
  247. data/doc/html/files/lib/ttk/strategies/DistStrategy_rb.html +119 -0
  248. data/doc/html/files/lib/ttk/strategies/Distribute_rb.html +119 -0
  249. data/doc/html/files/lib/ttk/strategies/Error_rb.html +119 -0
  250. data/doc/html/files/lib/ttk/strategies/Extract_rb.html +126 -0
  251. data/doc/html/files/lib/ttk/strategies/Fail_rb.html +119 -0
  252. data/doc/html/files/lib/ttk/strategies/Fetch_rb.html +127 -0
  253. data/doc/html/files/lib/ttk/strategies/Fetcher_rb.html +126 -0
  254. data/doc/html/files/lib/ttk/strategies/Glob_rb.html +119 -0
  255. data/doc/html/files/lib/ttk/strategies/IOBased_rb.html +119 -0
  256. data/doc/html/files/lib/ttk/strategies/Import_rb.html +119 -0
  257. data/doc/html/files/lib/ttk/strategies/JUnit_rb.html +119 -0
  258. data/doc/html/files/lib/ttk/strategies/KillAll_rb.html +119 -0
  259. data/doc/html/files/lib/ttk/strategies/Make_rb.html +119 -0
  260. data/doc/html/files/lib/ttk/strategies/PackageCollection_rb.html +126 -0
  261. data/doc/html/files/lib/ttk/strategies/Package_rb.html +119 -0
  262. data/doc/html/files/lib/ttk/strategies/Pass_rb.html +119 -0
  263. data/doc/html/files/lib/ttk/strategies/Pool_rb.html +119 -0
  264. data/doc/html/files/lib/ttk/strategies/ProbabilityThreshold_rb.html +119 -0
  265. data/doc/html/files/lib/ttk/strategies/Proxy_rb.html +119 -0
  266. data/doc/html/files/lib/ttk/strategies/RUnit_rb.html +127 -0
  267. data/doc/html/files/lib/ttk/strategies/RemoteCmd_rb.html +126 -0
  268. data/doc/html/files/lib/ttk/strategies/SignalCmd_rb.html +119 -0
  269. data/doc/html/files/lib/ttk/strategies/Sleep_rb.html +119 -0
  270. data/doc/html/files/lib/ttk/strategies/SqlQuery_rb.html +126 -0
  271. data/doc/html/files/lib/ttk/strategies/Strategy/assert_eval_rb.html +127 -0
  272. data/doc/html/files/lib/ttk/strategies/Strategy_rb.html +131 -0
  273. data/doc/html/files/lib/ttk/strategies/Streams/Diff_rb.html +119 -0
  274. data/doc/html/files/lib/ttk/strategies/Streams/Stream_rb.html +126 -0
  275. data/doc/html/files/lib/ttk/strategies/Stub_rb.html +119 -0
  276. data/doc/html/files/lib/ttk/strategies/SubCmd_rb.html +119 -0
  277. data/doc/html/files/lib/ttk/strategies/Suite_rb.html +119 -0
  278. data/doc/html/files/lib/ttk/strategies/Test_rb.html +127 -0
  279. data/doc/html/files/lib/ttk/strategies/Tester_rb.html +126 -0
  280. data/doc/html/files/lib/ttk/symtbl_rb.html +126 -0
  281. data/doc/html/files/lib/ttk/testers/Master_rb.html +119 -0
  282. data/doc/html/files/lib/ttk/testers/Slave_rb.html +119 -0
  283. data/doc/html/files/lib/ttk/testers/Tester_rb.html +131 -0
  284. data/doc/html/files/lib/ttk/testers/tester/config_rb.html +126 -0
  285. data/doc/html/files/lib/ttk/testers/tester/notifier_rb.html +119 -0
  286. data/doc/html/files/lib/ttk/testers/tester/query_node_rb.html +126 -0
  287. data/doc/html/files/lib/ttk/testers/tester/remote_status_rb.html +119 -0
  288. data/doc/html/files/lib/ttk/testers/tester/running_task_rb.html +119 -0
  289. data/doc/html/files/lib/ttk/testers/tester/score_rb.html +119 -0
  290. data/doc/html/files/lib/ttk/weights/WExpr_rb.html +119 -0
  291. data/doc/html/files/lib/ttk/weights/WFloat_rb.html +119 -0
  292. data/doc/html/files/lib/ttk/weights/WMin_rb.html +119 -0
  293. data/doc/html/files/lib/ttk/weights/Weight_rb.html +126 -0
  294. data/doc/html/files/lib/ttk_rb.html +146 -0
  295. data/doc/html/files/lib/ttkd_rb.html +131 -0
  296. data/doc/html/files/template/README.html +160 -0
  297. data/doc/html/files/test/examples/README.html +190 -0
  298. data/doc/html/fr_class_index.html +186 -0
  299. data/doc/html/fr_file_index.html +147 -0
  300. data/doc/html/fr_method_index.html +581 -0
  301. data/doc/html/index.html +24 -0
  302. data/doc/html/rdoc-style.css +208 -0
  303. data/lib/ttk.rb +111 -0
  304. data/lib/ttk/Tools/HostDispatcher.rb +44 -0
  305. data/lib/ttk/Tools/SafeEval.rb +64 -0
  306. data/lib/ttk/Tools/cut_output.rb +35 -0
  307. data/lib/ttk/Tools/io/delegator.rb +88 -0
  308. data/lib/ttk/Tools/io/dispatch.rb +31 -0
  309. data/lib/ttk/Tools/io/ext.rb +70 -0
  310. data/lib/ttk/Tools/io/filters.rb +71 -0
  311. data/lib/ttk/daemons/Daemon.rb +34 -0
  312. data/lib/ttk/daemons/Master.rb +34 -0
  313. data/lib/ttk/daemons/Slave.rb +29 -0
  314. data/lib/ttk/daemons/daemon/logger.rb +57 -0
  315. data/lib/ttk/dumpers/Dumper.rb +81 -0
  316. data/lib/ttk/dumpers/Notif.rb +33 -0
  317. data/lib/ttk/dumpers/Xml.rb +112 -0
  318. data/lib/ttk/dumpers/Yaml.rb +159 -0
  319. data/lib/ttk/fetchers/Client.rb +41 -0
  320. data/lib/ttk/fetchers/Server.rb +49 -0
  321. data/lib/ttk/fetchers/client/receiver.rb +62 -0
  322. data/lib/ttk/fetchers/server/sender.rb +69 -0
  323. data/lib/ttk/filters/BasicLogger.rb +30 -0
  324. data/lib/ttk/filters/Filter.rb +24 -0
  325. data/lib/ttk/filters/Saver.rb +60 -0
  326. data/lib/ttk/loaders/Loader.rb +123 -0
  327. data/lib/ttk/loaders/OYaml.rb +60 -0
  328. data/lib/ttk/loaders/Yaml.rb +74 -0
  329. data/lib/ttk/loaders/YamlOld.rb +65 -0
  330. data/lib/ttk/logger.rb +237 -0
  331. data/lib/ttk/logger/path.rb +23 -0
  332. data/lib/ttk/logger/section_node.rb +214 -0
  333. data/lib/ttk/logger/severity.rb +62 -0
  334. data/lib/ttk/logger/to_ttk_log.rb +83 -0
  335. data/lib/ttk/logger/verbosity.rb +61 -0
  336. data/lib/ttk/logger_factory.rb +50 -0
  337. data/lib/ttk/monitors/Client.rb +61 -0
  338. data/lib/ttk/monitors/Monitor.rb +50 -0
  339. data/lib/ttk/monitors/Server.rb +73 -0
  340. data/lib/ttk/services/DRbService.rb +45 -0
  341. data/lib/ttk/services/DRbService/sub_testable.rb +41 -0
  342. data/lib/ttk/services/FetcherClient.rb +31 -0
  343. data/lib/ttk/services/FetcherServer.rb +23 -0
  344. data/lib/ttk/services/MonitorClient.rb +31 -0
  345. data/lib/ttk/services/MonitorServer.rb +23 -0
  346. data/lib/ttk/services/TesterClient.rb +38 -0
  347. data/lib/ttk/services/TesterMaster.rb +40 -0
  348. data/lib/ttk/services/TesterSlave.rb +31 -0
  349. data/lib/ttk/status.rb +190 -0
  350. data/lib/ttk/strategies/Abort.rb +24 -0
  351. data/lib/ttk/strategies/Authors.rb +43 -0
  352. data/lib/ttk/strategies/Ball.rb +68 -0
  353. data/lib/ttk/strategies/Block.rb +95 -0
  354. data/lib/ttk/strategies/Bootstrap.rb +52 -0
  355. data/lib/ttk/strategies/Checkout.rb +53 -0
  356. data/lib/ttk/strategies/Clean.rb +29 -0
  357. data/lib/ttk/strategies/Cmd.rb +55 -0
  358. data/lib/ttk/strategies/CmdBase.rb +103 -0
  359. data/lib/ttk/strategies/Collection.rb +131 -0
  360. data/lib/ttk/strategies/Compile.rb +56 -0
  361. data/lib/ttk/strategies/Composite.rb +173 -0
  362. data/lib/ttk/strategies/Configure.rb +64 -0
  363. data/lib/ttk/strategies/DistDelegate.rb +45 -0
  364. data/lib/ttk/strategies/DistDuplicate.rb +64 -0
  365. data/lib/ttk/strategies/DistStrategy.rb +42 -0
  366. data/lib/ttk/strategies/Distribute.rb +39 -0
  367. data/lib/ttk/strategies/Error.rb +23 -0
  368. data/lib/ttk/strategies/Extract.rb +45 -0
  369. data/lib/ttk/strategies/Fail.rb +26 -0
  370. data/lib/ttk/strategies/Fetch.rb +124 -0
  371. data/lib/ttk/strategies/Fetcher.rb +74 -0
  372. data/lib/ttk/strategies/Glob.rb +48 -0
  373. data/lib/ttk/strategies/IOBased.rb +156 -0
  374. data/lib/ttk/strategies/Import.rb +45 -0
  375. data/lib/ttk/strategies/JUnit.rb +205 -0
  376. data/lib/ttk/strategies/KillAll.rb +59 -0
  377. data/lib/ttk/strategies/Make.rb +94 -0
  378. data/lib/ttk/strategies/Package.rb +128 -0
  379. data/lib/ttk/strategies/PackageCollection.rb +72 -0
  380. data/lib/ttk/strategies/Pass.rb +24 -0
  381. data/lib/ttk/strategies/Pool.rb +99 -0
  382. data/lib/ttk/strategies/ProbabilityThreshold.rb +42 -0
  383. data/lib/ttk/strategies/Proxy.rb +42 -0
  384. data/lib/ttk/strategies/RUnit.rb +170 -0
  385. data/lib/ttk/strategies/RemoteCmd.rb +48 -0
  386. data/lib/ttk/strategies/SignalCmd.rb +85 -0
  387. data/lib/ttk/strategies/Sleep.rb +36 -0
  388. data/lib/ttk/strategies/SqlQuery.rb +120 -0
  389. data/lib/ttk/strategies/Strategy.rb +606 -0
  390. data/lib/ttk/strategies/Strategy/assert_eval.rb +53 -0
  391. data/lib/ttk/strategies/Streams/Diff.rb +60 -0
  392. data/lib/ttk/strategies/Streams/Stream.rb +133 -0
  393. data/lib/ttk/strategies/Stub.rb +35 -0
  394. data/lib/ttk/strategies/SubCmd.rb +58 -0
  395. data/lib/ttk/strategies/Suite.rb +118 -0
  396. data/lib/ttk/strategies/Test.rb +88 -0
  397. data/lib/ttk/strategies/Tester.rb +59 -0
  398. data/lib/ttk/symtbl.rb +115 -0
  399. data/lib/ttk/testers/Master.rb +69 -0
  400. data/lib/ttk/testers/Slave.rb +19 -0
  401. data/lib/ttk/testers/Tester.rb +134 -0
  402. data/lib/ttk/testers/tester/config.rb +65 -0
  403. data/lib/ttk/testers/tester/notifier.rb +24 -0
  404. data/lib/ttk/testers/tester/query_node.rb +91 -0
  405. data/lib/ttk/testers/tester/remote_status.rb +29 -0
  406. data/lib/ttk/testers/tester/running_task.rb +47 -0
  407. data/lib/ttk/testers/tester/score.rb +34 -0
  408. data/lib/ttk/weights/WExpr.rb +68 -0
  409. data/lib/ttk/weights/WFloat.rb +23 -0
  410. data/lib/ttk/weights/WMin.rb +22 -0
  411. data/lib/ttk/weights/Weight.rb +85 -0
  412. data/lib/ttkd.rb +51 -0
  413. data/ruby_ex/abstract.rb +246 -0
  414. data/ruby_ex/abstract_node.rb +85 -0
  415. data/ruby_ex/array_each_pair.rb +18 -0
  416. data/ruby_ex/ask.rb +101 -0
  417. data/ruby_ex/attributed_class.rb +304 -0
  418. data/ruby_ex/cache.rb +373 -0
  419. data/ruby_ex/checkout.rb +12 -0
  420. data/ruby_ex/config_file.rb +96 -0
  421. data/ruby_ex/const_regexp.rb +59 -0
  422. data/ruby_ex/daemon.rb +134 -0
  423. data/ruby_ex/diff.rb +667 -0
  424. data/ruby_ex/dlogger.rb +62 -0
  425. data/ruby_ex/drb/dispatcher.rb +252 -0
  426. data/ruby_ex/drb/dispatcher_server_test.rb +29 -0
  427. data/ruby_ex/drb/drb_observable.rb +97 -0
  428. data/ruby_ex/drb/drb_observable_pool.rb +27 -0
  429. data/ruby_ex/drb/drb_service.rb +43 -0
  430. data/ruby_ex/drb/drb_undumped_attributes.rb +55 -0
  431. data/ruby_ex/drb/drb_undumped_indexed_object.rb +54 -0
  432. data/ruby_ex/drb/insecure_protected_methods.rb +103 -0
  433. data/ruby_ex/drb/session_client_test.rb +40 -0
  434. data/ruby_ex/drb/session_manager.rb +246 -0
  435. data/ruby_ex/drb/session_server.rb +53 -0
  436. data/ruby_ex/dtime.rb +143 -0
  437. data/ruby_ex/dumpable_proc.rb +63 -0
  438. data/ruby_ex/exception.rb +32 -0
  439. data/ruby_ex/filetype.rb +229 -0
  440. data/ruby_ex/fileutils_ex.rb +44 -0
  441. data/ruby_ex/fold.rb +58 -0
  442. data/ruby_ex/generate_id.rb +31 -0
  443. data/ruby_ex/inactive_timeout.rb +137 -0
  444. data/ruby_ex/indexed_node.rb +66 -0
  445. data/ruby_ex/io_marshal.rb +100 -0
  446. data/ruby_ex/ioo.rb +194 -0
  447. data/ruby_ex/labeled_node.rb +63 -0
  448. data/ruby_ex/logger_observer.rb +23 -0
  449. data/ruby_ex/md5sum.rb +66 -0
  450. data/ruby_ex/mktemp.rb +208 -0
  451. data/ruby_ex/module/attr_once.rb +36 -0
  452. data/ruby_ex/module/autoload_tree.rb +68 -0
  453. data/ruby_ex/module/hierarchy.rb +335 -0
  454. data/ruby_ex/module/instance_method_visibility.rb +73 -0
  455. data/ruby_ex/module_ex.rb +11 -0
  456. data/ruby_ex/node.rb +80 -0
  457. data/ruby_ex/object_monitor.rb +145 -0
  458. data/ruby_ex/object_monitor_activity.rb +33 -0
  459. data/ruby_ex/observable.rb +140 -0
  460. data/ruby_ex/observable_pool.rb +293 -0
  461. data/ruby_ex/orderedhash.rb +252 -0
  462. data/ruby_ex/pathname_ex.rb +113 -0
  463. data/ruby_ex/pp_hierarchy.rb +29 -0
  464. data/ruby_ex/pseudo_cache.rb +190 -0
  465. data/ruby_ex/queue.rb +56 -0
  466. data/ruby_ex/safe_eval.rb +348 -0
  467. data/ruby_ex/service_manager.rb +121 -0
  468. data/ruby_ex/session/administrable.rb +120 -0
  469. data/ruby_ex/session/client.rb +153 -0
  470. data/ruby_ex/session/const.rb +18 -0
  471. data/ruby_ex/session/dispatcher.rb +184 -0
  472. data/ruby_ex/session/error.rb +21 -0
  473. data/ruby_ex/session/fetchable.rb +57 -0
  474. data/ruby_ex/session/fetcher.rb +62 -0
  475. data/ruby_ex/session/hookable.rb +26 -0
  476. data/ruby_ex/session/profile.rb +110 -0
  477. data/ruby_ex/session/server.rb +582 -0
  478. data/ruby_ex/session/test/administrable_test.rb +337 -0
  479. data/ruby_ex/session/test/basic_test.rb +523 -0
  480. data/ruby_ex/session/test/dispatcher_test.rb +409 -0
  481. data/ruby_ex/session/test/fetchable_test.rb +119 -0
  482. data/ruby_ex/session/test/sub_server_test.rb +188 -0
  483. data/ruby_ex/spring.rb +136 -0
  484. data/ruby_ex/spring_set.rb +137 -0
  485. data/ruby_ex/symtbl.rb +106 -0
  486. data/ruby_ex/synflow.rb +474 -0
  487. data/ruby_ex/test/unit/ui/yaml/testrunner.rb +164 -0
  488. data/ruby_ex/thread_mutex.rb +10 -0
  489. data/ruby_ex/timeout_ex.rb +81 -0
  490. data/ruby_ex/top_down.rb +73 -0
  491. data/ruby_ex/trace.rb +26 -0
  492. data/ruby_ex/uri/druby.rb +81 -0
  493. data/ruby_ex/uri/file.rb +39 -0
  494. data/ruby_ex/uri/ftp_ex.rb +37 -0
  495. data/ruby_ex/uri/http_ex.rb +43 -0
  496. data/ruby_ex/uri/svn.rb +101 -0
  497. data/ruby_ex/uri_ex.rb +35 -0
  498. data/ruby_ex/version.rb +66 -0
  499. data/ruby_ex/yaml/basenode_ext.rb +63 -0
  500. data/ruby_ex/yaml/transform.rb +447 -0
  501. data/ruby_ex/yaml/yregexpath.rb +76 -0
  502. data/test/all/TestTAssert/first.yml +65 -0
  503. data/test/all/TestTAssert/segfault.yml +31 -0
  504. data/test/all/dist-suite-indirect-nested.yml +15 -0
  505. data/test/all/dist-suite-nested-3.yml +16 -0
  506. data/test/all/dist-suite-nested-in-pool.yml +51 -0
  507. data/test/all/dist-suite-nested.yml +28 -0
  508. data/test/all/no_suite.yml +18 -0
  509. data/test/all/pipeline-timeout.yml +21 -0
  510. data/test/all/remote_cmd.yml +23 -0
  511. data/test/all/remote_dispatcher.yml +26 -0
  512. data/test/all/suite_timeout.yml +32 -0
  513. data/test/all/weight.yml +113 -0
  514. data/test/all/xunit/junit/MultiRight/Foo/Foo.java +11 -0
  515. data/test/all/xunit/junit/MultiRight/Foo/FooTest.java +15 -0
  516. data/test/all/xunit/junit/MultiRight/MultiRight.java +13 -0
  517. data/test/all/xunit/junit/MultiRight/MultiRightTest.java +12 -0
  518. data/test/all/xunit/junit/MultiRight/bar/Bar.java +11 -0
  519. data/test/all/xunit/junit/MultiRight/bar/BarTest.java +21 -0
  520. data/test/all/xunit/junit/MultiRight/build.sh +7 -0
  521. data/test/all/xunit/junit/SimpleException/SimpleExceptionTest.java +11 -0
  522. data/test/all/xunit/junit/SimpleException/build.sh +4 -0
  523. data/test/all/xunit/junit/build.sh +9 -0
  524. data/test/all/xunit/junit/multibar.yml +6 -0
  525. data/test/all/xunit/junit/multifoo.yml +6 -0
  526. data/test/all/xunit/junit/multiright.yml +8 -0
  527. data/test/all/xunit/junit/simple_exception.yml +6 -0
  528. data/test/examples-suite.yml +10 -0
  529. data/test/examples/README +68 -0
  530. data/test/examples/cache/simple.yml +33 -0
  531. data/test/examples/sql/basic.yml +26 -0
  532. data/test/examples/students-suite.yml +11 -0
  533. data/test/examples/students/ball.yml +13 -0
  534. data/test/examples/students/glob_stud.yml +23 -0
  535. data/test/examples/students/mini-lib.yml +73 -0
  536. data/test/examples/students/pool_stud.yml +35 -0
  537. data/test/examples/students/stud.yml +25 -0
  538. data/test/ressources/ball/20040804-exam_a1-zapngo-tessar_m.tar.gz +0 -0
  539. data/test/ressources/ball/Makefile +24 -0
  540. data/test/ressources/ball/bar_p-mini-lib.tar.bz2 +0 -0
  541. data/test/ressources/ball/bar_p-mini-lib/Makefile +20 -0
  542. data/test/ressources/ball/bar_p-mini-lib/my_strlen.c +13 -0
  543. data/test/ressources/ball/foo_s-mini-lib.tar.bz2 +0 -0
  544. data/test/ressources/ball/foo_s-mini-lib/Makefile +20 -0
  545. data/test/ressources/ball/foo_s-mini-lib/configure +2 -0
  546. data/test/ressources/ball/foo_s-mini-lib/my_strlen.c +10 -0
  547. data/test/ressources/ball/hello.tar.bz2 +0 -0
  548. data/test/ressources/ball/hello.tar.gz +0 -0
  549. data/test/ressources/ball/hello/Makefile +14 -0
  550. data/test/ressources/ball/hello/hello.c +7 -0
  551. data/test/ressources/ball/jack-exit.tar.bz2 +0 -0
  552. data/test/ressources/ball/jack-exit/Makefile +14 -0
  553. data/test/ressources/ball/jack-exit/exit.c +16 -0
  554. data/test/ressources/ball/joe-exit.tar.bz2 +0 -0
  555. data/test/ressources/ball/joe-exit/Makefile +14 -0
  556. data/test/ressources/ball/joe-exit/exit.c +8 -0
  557. data/test/ressources/ball/joe_i-mini-lib.tar.bz2 +0 -0
  558. data/test/ressources/ball/joe_i-mini-lib/Makefile +20 -0
  559. data/test/ressources/ball/joe_i-mini-lib/configure +2 -0
  560. data/test/ressources/ball/joe_i-mini-lib/my_strlen.c +10 -0
  561. data/test/ressources/ball/john-exit.tar.bz2 +0 -0
  562. data/test/ressources/ball/john-exit/Makefile +14 -0
  563. data/test/ressources/ball/john-exit/exit.c +6 -0
  564. data/test/ressources/ball/qux_j-mini-lib.tar.bz2 +0 -0
  565. data/test/ressources/ball/qux_j-mini-lib/Makefile +20 -0
  566. data/test/ressources/ball/qux_j-mini-lib/my_strlen.c +12 -0
  567. data/test/ressources/mini-lib/Makefile +9 -0
  568. data/test/ressources/mini-lib/strlen.c +15 -0
  569. data/test/ressources/package/pkg_foo.tar.gz +0 -0
  570. data/test/ressources/package/pkg_foo/Makefile +20 -0
  571. data/test/ressources/package/pkg_foo/bootstrap +3 -0
  572. data/test/ressources/package/pkg_foo/configure +3 -0
  573. data/test/ressources/package/pkg_foo/foo.sh +2 -0
  574. data/test/ressources/runit/bad.rb +30 -0
  575. data/test/ressources/runit/error.rb +6 -0
  576. data/test/ressources/runit/good.rb +30 -0
  577. data/test/ressources/text/1.txt +4 -0
  578. data/test/runit/dumpers/xml_test.rb +75 -0
  579. data/test/runit/dumpers/yaml_test.rb +68 -0
  580. data/test/runit/fetchers/fetchers_test.rb +48 -0
  581. data/test/runit/loaders/OYaml_test.rb +35 -0
  582. data/test/runit/logger/section_node_test.rb +125 -0
  583. data/test/runit/logger/severity_test.rb +41 -0
  584. data/test/runit/logger/verbosity_test.rb +49 -0
  585. data/test/runit/logger_test.rb +295 -0
  586. data/test/runit/strategies/Strategy/assert_eval_test.rb +196 -0
  587. data/test/ttk-check +26 -0
  588. data/test/ttk-dist-suite.yml +44 -0
  589. data/test/ttk-dist/cat/file.in +3 -0
  590. data/test/ttk-dist/cat/file.out +3 -0
  591. data/test/ttk-dist/dist-abort.yml +51 -0
  592. data/test/ttk-dist/dist-cat.yml +38 -0
  593. data/test/ttk-dist/dist-delegate.yml +56 -0
  594. data/test/ttk-dist/dist-dispatch.yml +28 -0
  595. data/test/ttk-dist/dist-error.yml +10 -0
  596. data/test/ttk-dist/dist-fail.yml +9 -0
  597. data/test/ttk-dist/dist-nested-pass.yml +11 -0
  598. data/test/ttk-dist/dist-pass.yml +8 -0
  599. data/test/ttk-dist/dist-ribute.yml +31 -0
  600. data/test/ttk-dist/dist-suite.yml +18 -0
  601. data/test/ttk-dist/local-fetch.yml +17 -0
  602. data/test/ttk-dist/tester.yml +36 -0
  603. data/test/ttk-minimal-suite.yml +12 -0
  604. data/test/ttk-minimal/author.yml +14 -0
  605. data/test/ttk-minimal/base.yml +137 -0
  606. data/test/ttk-minimal/block.yml +15 -0
  607. data/test/ttk-minimal/cat.yml +19 -0
  608. data/test/ttk-minimal/diff.yml +29 -0
  609. data/test/ttk-minimal/env_cmd.yml +54 -0
  610. data/test/ttk-minimal/exit.yml +17 -0
  611. data/test/ttk-minimal/fatal.yml +32 -0
  612. data/test/ttk-minimal/glob.yml +13 -0
  613. data/test/ttk-minimal/import.yml +33 -0
  614. data/test/ttk-minimal/killall.yml +36 -0
  615. data/test/ttk-minimal/pkg.yml +18 -0
  616. data/test/ttk-minimal/pool.yml +44 -0
  617. data/test/ttk-minimal/probability_threshold.yml +39 -0
  618. data/test/ttk-minimal/runit.yml +25 -0
  619. data/test/ttk-minimal/signal_cmd.yml +24 -0
  620. data/test/ttk-minimal/sub.yml +9 -0
  621. data/test/ttk-minimal/test.yml +26 -0
  622. data/test/ttk-minimal/timeout.yml +24 -0
  623. data/test/ttk-minimal/unit_test.yml +13 -0
  624. data/test/ttk-minimal/wc.yml +28 -0
  625. metadata +801 -0
@@ -0,0 +1,304 @@
1
+ # Copyright: Copyright (c) 2004 Nicolas Pouillard. All rights reserved.
2
+ # Author: Nicolas Pouillard <ertai@lrde.epita.fr>.
3
+ # License: Gnu General Public License.
4
+
5
+ # $LastChangedBy: ertai $
6
+ # $Id: attributed_class.rb 186 2005-04-03 00:07:45Z ertai $
7
+
8
+
9
+ # Extension to have inherited, class attributes,
10
+ # Where each class have his own attributes set.
11
+ module AttributedClass
12
+
13
+ class Attribute
14
+
15
+ attr_reader :name, :descr, :klass, :default_proc
16
+ attr_accessor :default
17
+
18
+ @@default_proc = nil
19
+
20
+ def initialize ( name, descr, *args, &block )
21
+ raise ArgumentError, 'need a symbol' unless name.is_a? Symbol
22
+ @name, @descr = name, descr
23
+ @default, @klass = nil, nil
24
+ @mandatory = false
25
+ @visible = true
26
+ if block_given?
27
+ @default_proc = block
28
+ else
29
+ @default_proc = @@default_proc
30
+ end
31
+ other = []
32
+
33
+ args.each do |arg|
34
+ case arg
35
+ when :mandatory then @mandatory = true
36
+ when :invisible then @visible = false
37
+ else other << arg
38
+ end
39
+ end
40
+
41
+ case other.size
42
+ when 1
43
+ if other[0].is_a? Class
44
+ @klass = [other[0]]
45
+ elsif other[0].is_a? Array and other[0].all? { |k| k.is_a? Class }
46
+ @klass = other[0]
47
+ else
48
+ @default = other[0]
49
+ end
50
+ when 2
51
+ a, b = other
52
+ if a.is_a? Class and b.is_a? a
53
+ @klass, @default = [a], b
54
+ elsif a.is_a? Array and
55
+ a.all? { |k| k.is_a? Class } and
56
+ a.any? { |k| b.is_a? k }
57
+ @klass, @default = a, b
58
+ elsif b.is_a? Class and a.is_a? b
59
+ @klass, @default = [b], a
60
+ elsif b.is_a? Array and
61
+ b.all? { |k| k.is_a? Class } and
62
+ b.any? { |k| a.is_a? k }
63
+ @klass, @default = b, a
64
+ else
65
+ raise ArgumentError, 'need a Class and a default value'
66
+ end
67
+ when 0
68
+ else raise ArgumentError, 'too many values'
69
+ end
70
+
71
+ # removed because it causes some probleme when distributed such a class
72
+ #[@name, @descr, @default].each { |x| x.freeze }
73
+ end
74
+
75
+ def visible?
76
+ @visible
77
+ end
78
+
79
+ def invisible?
80
+ !@visible
81
+ end
82
+
83
+ def mandatory?
84
+ @mandatory
85
+ end
86
+
87
+ def valid? ( anObject )
88
+ return false if mandatory? and anObject.nil?
89
+ @klass.nil? or @klass.empty? or @klass.any? { |k| anObject.is_a? k }
90
+ end
91
+
92
+
93
+ def self.set_default_proc ( &block )
94
+ @@default_proc = block
95
+ end
96
+
97
+
98
+ def help ( output=STDERR )
99
+ output << "#@name: #@descr"
100
+ output << " [#@klass]" unless @klass.nil?
101
+ other = []
102
+ other << 'mandatory' if mandatory?
103
+ other << 'invisible' if invisible?
104
+ output << " (#{other.join(', ')})" unless other.empty?
105
+ output
106
+ end
107
+
108
+ def inspect
109
+ help('#<') + '>'
110
+ end
111
+
112
+ end # class Attribute
113
+
114
+
115
+ class MethodAttribute < Attribute
116
+ VISIBILITIES = [ :private, :protected, :public, :unknown ]
117
+ attr_reader :visibility
118
+ def private?
119
+ @visibility == :private
120
+ end
121
+ def protected?
122
+ @visibility == :protected
123
+ end
124
+ def public?
125
+ @visibility == :public
126
+ end
127
+ def initialize ( name, descr, *args )
128
+ vis = args.find { |arg| VISIBILITIES.include? arg }
129
+ args.delete(vis) unless vis.nil?
130
+ @visibility = vis || :unknown
131
+ super(name, descr, *args)
132
+ end
133
+ end # class MethodAttribute
134
+
135
+
136
+ class AttributeError < Exception
137
+
138
+ def initialize ( anObject, anAttr, val=nil )
139
+ if val.nil?
140
+ super "Missing the #{anAttr.name} attribute for `#{anObject}'"
141
+ else
142
+ super "Attribute #{anAttr.name} wait for a `#{anAttr.klass}' not " +
143
+ "`#{val}' in #{anObject}"
144
+ end
145
+ end
146
+
147
+ end # class AttributeError
148
+
149
+
150
+ def self.included ( aClass )
151
+
152
+ aClass.module_eval do
153
+
154
+ def initialize_attributes ( *default_proc_args )
155
+ self.class.attributes.each do |attr|
156
+ next if attr.is_a? MethodAttribute
157
+ if attr.default_proc.nil? and attr.default.nil?
158
+ instance_variable_set("@#{attr.name}", nil)
159
+ else
160
+ unless attr.default_proc.nil?
161
+ pr = attr.default_proc
162
+ if pr.arity == default_proc_args.size
163
+ default = pr[*default_proc_args]
164
+ else
165
+ default = pr[attr, *default_proc_args]
166
+ end
167
+ attr.default = default
168
+ end
169
+ send "#{attr.name}=", attr.default
170
+ end
171
+ end
172
+ end
173
+
174
+ def self.set_default_proc ( &block )
175
+ Attribute.set_default_proc(&block)
176
+ end
177
+
178
+ def each_attribute ( &block )
179
+ self.class.attributes.each do |attr|
180
+ block[attr, send(attr.name)]
181
+ end
182
+ end
183
+
184
+ def each_variable_attribute ( &block )
185
+ self.class.attributes.each do |attr|
186
+ next if attr.is_a? MethodAttribute
187
+ block[attr, send(attr.name)]
188
+ end
189
+ end
190
+
191
+ def each_method_attribute ( &block )
192
+ self.class.attributes.each do |attr|
193
+ next unless attr.is_a? MethodAttribute
194
+ block[attr, send(attr.name)]
195
+ end
196
+ end
197
+
198
+ def check_attribute ( attr, anObject )
199
+ unless attr.valid? anObject
200
+ raise AttributeError.new(self, attr, anObject)
201
+ end
202
+ end
203
+
204
+ def check_attributes
205
+ each_variable_attribute(&method(:check_attribute))
206
+ end
207
+
208
+ def self.help ( output=STDERR )
209
+ output.puts "#{self.to_s}:"
210
+ attributes.each do |attr|
211
+ output << ' '
212
+ attr.help(output)
213
+ output.puts '.'
214
+ end
215
+ end
216
+
217
+ def self.attributes
218
+ unless defined? @attributes
219
+ if superclass and superclass.respond_to? :attributes
220
+ @attributes = superclass.attributes.dup
221
+ else
222
+ @attributes = []
223
+ end
224
+ end
225
+ @attributes
226
+ end
227
+
228
+ def self.attribute ( name, descr, *args, &block )
229
+ attr = Attribute.new(name, descr, *args, &block)
230
+ unless method_defined? name
231
+ if att = get_attribute(name, MethodAttribute)
232
+ attributes.delete(att)
233
+ end
234
+ attr_reader name
235
+ end
236
+ meth = "#{name}="
237
+ unless method_defined? meth
238
+ if att = get_attribute(meth, MethodAttribute)
239
+ attributes.delete(att)
240
+ end
241
+ attr_writer name
242
+ end
243
+ attributes << attr
244
+ end
245
+
246
+ def self.method_attribute ( name, descr, *args, &block )
247
+ # unless method_defined? name
248
+ # raise ArgumentError, "Undefined method #{name}"
249
+ # end
250
+ attr = MethodAttribute.new(name, descr, *args, &block)
251
+ attributes << attr
252
+ end
253
+
254
+ def self.get_attribute ( name, type=nil )
255
+ if type.nil?
256
+ attributes.find { |attr| attr.name == name }
257
+ else
258
+ attributes.find { |attr| attr.name == name && attr.is_a?(type) }
259
+ end
260
+ end
261
+
262
+ end
263
+
264
+ end
265
+
266
+ end # module AttributedClass
267
+
268
+
269
+
270
+ if defined? TEST_MODE or $0 == __FILE__
271
+
272
+ require 'test/unit'
273
+ class AttributedClassTest < Test::Unit::TestCase
274
+
275
+ def test_simple
276
+ c = Class.new
277
+ assert_nothing_raised do
278
+ c.module_eval { include AttributedClass }
279
+ end
280
+ assert_equal([], c.attributes)
281
+ assert_nothing_raised do
282
+ c.module_eval { attribute :foo, 'foofoo', 42 }
283
+ end
284
+ cc, d, dd = nil, nil, nil
285
+ assert_nothing_raised { cc = c.new }
286
+ assert_equal(nil, cc.foo)
287
+ assert_nothing_raised { cc.initialize_attributes }
288
+ assert_equal(42, cc.foo)
289
+ assert_nothing_raised { cc.foo = 32 }
290
+ assert_equal(32, cc.foo)
291
+ assert_nothing_raised { d = Class.new(c) }
292
+ assert_nothing_raised do
293
+ d.module_eval { attribute :bar, 'foofoo', :mandatory }
294
+ end
295
+ assert_nothing_raised { dd = d.new }
296
+ assert_nothing_raised { dd.initialize_attributes }
297
+ assert_raise(AttributedClass::AttributeMissingError) do
298
+ dd.check_attributes
299
+ end
300
+ end
301
+
302
+ end # class AttributedClassTest
303
+
304
+ end
data/ruby_ex/cache.rb ADDED
@@ -0,0 +1,373 @@
1
+ # Copyright: Copyright (c) 2004 Nicolas Despres. All rights reserved.
2
+ # Author: Nicolas Despres <polrop@lrde.epita.fr>.
3
+ # License: Gnu General Public License.
4
+
5
+ # $LastChangedBy: ertai $
6
+ # $Id: cache.rb 186 2005-04-03 00:07:45Z ertai $
7
+
8
+
9
+ require 'pathname'
10
+ require 'md5'
11
+ require 'tempfile'
12
+ require 'fileutils'
13
+
14
+
15
+ class Cache
16
+
17
+ #
18
+ # Constants
19
+ #
20
+ REPOSITORY = '/var/cache/ruby_ex_cache'
21
+ MAX_SIZE = 50 * 1024 * 1024 # 50 MB
22
+ BLOCK_SIZE = 1024 # octets
23
+
24
+ #
25
+ # Attributs
26
+ #
27
+ attr_reader :repository, :max_size, :size
28
+
29
+ #
30
+ # Constructor
31
+ #
32
+ def initialize(repository=REPOSITORY, max_size=MAX_SIZE)
33
+ @repository = Pathname.new(repository)
34
+ @max_size = check_max_size(max_size)
35
+ create
36
+ end
37
+
38
+ #
39
+ # Methods
40
+ #
41
+ def create
42
+ @size = 0
43
+ @atime = []
44
+ if @repository.directory?
45
+ @repository.each_entry do |p|
46
+ next if p.to_s =~ /^\./
47
+ full_p = @repository + p
48
+ @atime << full_p
49
+ @size += full_p.size
50
+ end
51
+ @atime.sort! { |a, b| a.atime <=> b.atime }
52
+ else
53
+ @repository.mkdir
54
+ end
55
+ end
56
+
57
+ def clear
58
+ @repository.each_entry do |p|
59
+ (@repository + p).delete unless p.to_s =~ /^\./
60
+ end
61
+ @size = 0
62
+ @atime.clear
63
+ end
64
+
65
+ def recreate
66
+ clear
67
+ create
68
+ end
69
+
70
+ def open(md5sum=nil, mode='r', perm=0644, &block)
71
+ case mode
72
+ when 'r': read(md5sum, &block)
73
+ when 'w': write(perm, &block)
74
+ else
75
+ raise(ArgumentError, "`#{mode}' - bad mode")
76
+ end
77
+ end
78
+
79
+ def read(md5sum, &block)
80
+ p = @repository + md5sum.to_s
81
+ p.open('r', &block)
82
+ @atime.delete(p)
83
+ @atime << p
84
+ p
85
+ end
86
+
87
+ def write(perm=0644, &block)
88
+ tmp = nil
89
+ p = nil
90
+ begin
91
+ md5 = Digest::MD5.new
92
+ tmp = Tempfile.new('cache')
93
+ new_size = 0
94
+ while (str = block[])
95
+ tmp.write(str)
96
+ md5 << str
97
+ new_size += str.size
98
+ end
99
+ tmp.close
100
+ p = @repository + md5.to_s
101
+ if p.exist?
102
+ @atime.delete(p)
103
+ else
104
+ @size += new_size
105
+ end
106
+ FileUtils.move(tmp.path, p)
107
+ p.chmod(perm)
108
+ rescue
109
+ tmp.delete if tmp
110
+ raise
111
+ end
112
+ @atime << p
113
+ adjust_size
114
+ p
115
+ end
116
+
117
+ def import(filename)
118
+ p = nil
119
+ File.open(filename) do |f|
120
+ p = write(File.stat(filename).mode) { f.eof? ? nil : f.read(BLOCK_SIZE) }
121
+ end
122
+ p
123
+ end
124
+
125
+ def export(md5sum, dst_filename)
126
+ p = @repository + md5sum.to_s
127
+ FileUtils.copy_entry(p, dst_filename)
128
+ update_entry(p)
129
+ p
130
+ end
131
+
132
+ def present?(md5sum)
133
+ p = @repository + md5sum.to_s
134
+ p.exist? ? p : nil;
135
+ end
136
+
137
+ def each
138
+ @atime.each { |p| yield(p) }
139
+ end
140
+
141
+ def [](index)
142
+ @atime[index]
143
+ end
144
+
145
+ def max_size=(max_size)
146
+ @max_size = check_max_size(max_size)
147
+ adjust_size
148
+ end
149
+
150
+ def nb_files
151
+ @atime.size
152
+ end
153
+
154
+ protected
155
+ def adjust_size
156
+ while @size > @max_size
157
+ p = @atime.shift
158
+ @size -= p.size
159
+ p.delete
160
+ end
161
+ @size
162
+ end
163
+
164
+ protected
165
+ def check_max_size(max_size)
166
+ unless max_size > 0
167
+ raise(ArgumentError, "`#{max_size}' - bad cache maximum size")
168
+ end
169
+ max_size
170
+ end
171
+
172
+ end # class Cache
173
+
174
+
175
+ #
176
+ # Unit test suite
177
+ #
178
+ if defined? TEST_MODE or __FILE__ == $0
179
+
180
+
181
+ require 'test/unit/ui/yaml/testrunner'
182
+ require 'md5sum'
183
+
184
+
185
+ class CacheTest < Test::Unit::TestCase
186
+
187
+ #
188
+ # Tests
189
+ #
190
+ def test_simple
191
+ tmp_cache = nil
192
+ begin
193
+ tmp_cache = Tempfile.new('cache')
194
+ repo = Pathname.new(tmp_cache.path)
195
+ tmp_cache.delete
196
+ cache = nil
197
+ assert_nothing_raised { cache = Cache.new(repo) }
198
+ assert_equal(0, cache.nb_files, 'bad nb_files')
199
+ assert_nothing_raised { cache.create }
200
+ assert_equal(0, cache.nb_files, 'bad nb_files')
201
+ assert_nothing_raised { cache.clear }
202
+ assert_equal(0, cache.nb_files, 'bad nb_files')
203
+ assert_nothing_raised { cache.create }
204
+ assert_equal(0, cache.nb_files, 'bad nb_files')
205
+ assert_raises(Errno::ENOENT) { cache.open('toto', 'r') { |f| f.gets } }
206
+ assert_equal(0, cache.nb_files, 'bad nb_files')
207
+ assert_equal(0, cache.size)
208
+
209
+ data = [ "toto\n", "tata\n" ]
210
+ p1 = cache.open(nil, 'w') do
211
+ data.shift
212
+ end
213
+ assert_equal(File.md5sum(p1.to_s).to_s, p1.basename.to_s, 'bad md5 open')
214
+ assert_equal(1, cache.nb_files, 'bad nb_files')
215
+ assert_equal(p1, cache[0])
216
+ assert_equal(10, cache.size)
217
+ assert_equal(p1, cache.present?(p1.basename))
218
+ tmp_p = cache.read(p1) do |f|
219
+ assert_equal("toto\n", f.gets)
220
+ assert_equal("tata\n", f.gets)
221
+ assert(f.eof?)
222
+ end
223
+ assert_equal(tmp_p, p1)
224
+ check_atime(cache)
225
+ assert_equal(1, cache.nb_files, 'bad nb_files')
226
+ assert(cache.present?(p1))
227
+ assert_equal(p1, cache[0])
228
+ assert(! cache.present?('foo'))
229
+
230
+ tmp_file = Tempfile.new('cache')
231
+ system("man printf > #{tmp_file.path} 2> /dev/null")
232
+ md5 = File.md5sum(tmp_file.path)
233
+ p2 = cache.import(tmp_file.path)
234
+ assert_equal(md5.to_s, p2.basename.to_s, 'bad name after import')
235
+ assert(p2.exist?, 'file do not exist after import')
236
+ assert(FileUtils.cmp(tmp_file.path, p2.to_s), 'bad import')
237
+ assert_equal(md5.to_s, File.md5sum(p2.to_s).to_s, 'bad md5 import')
238
+ tmp_file.delete
239
+ assert_equal(2, cache.nb_files, 'bad nb_files')
240
+ assert_equal(p2, cache[1])
241
+ check_atime(cache)
242
+
243
+ data = [ "foo\n", "bar\n" ]
244
+ p3 = cache.open(nil, 'w') do
245
+ data.shift
246
+ end
247
+ assert_equal(File.md5sum(p3.to_s).to_s, p3.basename.to_s, 'bad md5 open')
248
+ assert_equal(3, cache.nb_files, 'bad nb_files')
249
+ assert_equal(p3, cache[2])
250
+ assert_equal(p3, cache.present?(p3.basename))
251
+
252
+ assert_equal(p1, cache[0], 'p1 first')
253
+ assert_equal(p2, cache[1], 'p2 second')
254
+ assert_equal(p3, cache[2], 'p3 third')
255
+ assert_equal(p1, cache.read(p1) { |f| f.gets })
256
+ assert_equal(p2, cache[0], 'p2 first')
257
+ assert_equal(p3, cache[1], 'p3 second')
258
+ assert_equal(p1, cache[2], 'p1 third')
259
+ check_atime(cache)
260
+ assert_equal(3, cache.nb_files, 'bad nb_files')
261
+
262
+
263
+ new_cache = nil
264
+ assert_nothing_raised { new_cache = Cache.new(repo) }
265
+ assert_equal(3, new_cache.nb_files, 'bad nb_files in new cache')
266
+ check_atime(new_cache)
267
+ assert_equal(cache.size, new_cache.size)
268
+
269
+ assert_equal(3, cache.nb_files, 'bad nb_files')
270
+ assert(cache.size > 1024)
271
+ cache.max_size = 1024
272
+ assert(cache.size < 1024)
273
+ assert_equal(p1.size + p3.size, cache.size)
274
+ assert_equal(2, cache.nb_files, 'bad nb_files')
275
+ assert_equal(p3, cache[0], 'p3 first')
276
+ assert_equal(p1, cache[1], 'p1 second')
277
+
278
+ cache.clear
279
+ assert_equal(0, cache.nb_files, 'bad nb_files')
280
+ assert_equal(0, cache.size)
281
+ ensure
282
+ repo.rmtree if repo
283
+ end
284
+ end
285
+
286
+ def test_write_twice_the_same
287
+ tmp_cache = nil
288
+ begin
289
+ tmp_cache = Tempfile.new('cache')
290
+ repo = Pathname.new(tmp_cache.path)
291
+ tmp_cache.delete
292
+ cache = nil
293
+ assert_nothing_raised { cache = Cache.new(repo) }
294
+ assert_equal(0, cache.nb_files, 'bad nb_files')
295
+ assert_equal(0, cache.size)
296
+
297
+ data = [ "toto\n", "tata\n" ]
298
+ d = data.dup
299
+ p1 = cache.open(nil, 'w') do
300
+ d.shift
301
+ end
302
+
303
+ assert_equal(File.md5sum(p1.to_s).to_s, p1.basename.to_s, 'bad md5 open')
304
+ assert_equal(1, cache.nb_files, 'bad nb_files')
305
+ assert_equal(p1, cache[0])
306
+ assert_equal(10, cache.size)
307
+ assert_equal(p1, cache.present?(p1.basename))
308
+
309
+ data = [ "toto\n", "tata\n" ]
310
+ d = data.dup
311
+ p2 = cache.open(nil, 'w') do
312
+ d.shift
313
+ end
314
+
315
+ assert_equal(File.md5sum(p1.to_s).to_s, p1.basename.to_s, 'bad md5 open')
316
+ assert_equal(1, cache.nb_files, 'bad nb_files')
317
+ assert_equal(p1, cache[0])
318
+ assert_equal(10, cache.size)
319
+ assert_equal(p1, cache.present?(p1.basename))
320
+ ensure
321
+ repo.rmtree if repo
322
+ end
323
+ end
324
+
325
+ def test_nested_write
326
+ tmp_cache = nil
327
+ begin
328
+ tmp_cache = Tempfile.new('cache')
329
+ repo = Pathname.new(tmp_cache.path)
330
+ tmp_cache.delete
331
+ cache = nil
332
+ assert_nothing_raised { cache = Cache.new(repo) }
333
+ assert_equal(0, cache.nb_files, 'bad nb_files')
334
+ assert_equal(0, cache.size)
335
+
336
+ data = [ "toto\n", "tata\n" ]
337
+ d1 = data.dup
338
+ p1 = cache.open(nil, 'w') do
339
+ d2 = data.dup
340
+ p2 = cache.open(nil, 'w') do
341
+ d2.shift
342
+ end
343
+ d1.shift
344
+ end
345
+
346
+ assert_equal(File.md5sum(p1.to_s).to_s, p1.basename.to_s, 'bad md5 open')
347
+ assert_equal(1, cache.nb_files, 'bad nb_files')
348
+ assert_equal(p1, cache[0])
349
+ assert_equal(10, cache.size)
350
+ assert_equal(p1, cache.present?(p1.basename))
351
+
352
+ ensure
353
+ repo.rmtree if repo
354
+ end
355
+ end
356
+
357
+ #
358
+ # Utilities
359
+ #
360
+ protected
361
+ def check_atime(cache)
362
+ j = 0
363
+ for i in 1...cache.nb_files do
364
+ assert(cache[j].atime <= cache[i].atime, "bad atime order for #{i}")
365
+ j = i
366
+ end
367
+ end
368
+
369
+ end # class CacheTest
370
+
371
+
372
+ end
373
+