facets 0.6.3

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 (861) hide show
  1. data/ANN +53 -0
  2. data/ChangeLog +50 -0
  3. data/LICENSE-GPL +341 -0
  4. data/LICENSE-RUBY +60 -0
  5. data/README +130 -0
  6. data/Reapfile +74 -0
  7. data/TODO +42 -0
  8. data/VERSION +7 -0
  9. data/doc/classes/Array.html +1267 -0
  10. data/doc/classes/Array.src/M000027.html +19 -0
  11. data/doc/classes/Array.src/M000028.html +23 -0
  12. data/doc/classes/Array.src/M000029.html +18 -0
  13. data/doc/classes/Array.src/M000030.html +18 -0
  14. data/doc/classes/Array.src/M000031.html +18 -0
  15. data/doc/classes/Array.src/M000032.html +18 -0
  16. data/doc/classes/Array.src/M000033.html +18 -0
  17. data/doc/classes/Array.src/M000034.html +18 -0
  18. data/doc/classes/Array.src/M000035.html +18 -0
  19. data/doc/classes/Array.src/M000036.html +20 -0
  20. data/doc/classes/Array.src/M000037.html +31 -0
  21. data/doc/classes/Array.src/M000038.html +19 -0
  22. data/doc/classes/Array.src/M000039.html +24 -0
  23. data/doc/classes/Array.src/M000040.html +23 -0
  24. data/doc/classes/Array.src/M000041.html +31 -0
  25. data/doc/classes/Array.src/M000042.html +27 -0
  26. data/doc/classes/Array.src/M000044.html +22 -0
  27. data/doc/classes/Array.src/M000046.html +20 -0
  28. data/doc/classes/Array.src/M000047.html +18 -0
  29. data/doc/classes/Array.src/M000048.html +24 -0
  30. data/doc/classes/Array.src/M000049.html +19 -0
  31. data/doc/classes/Array.src/M000050.html +24 -0
  32. data/doc/classes/Array.src/M000051.html +22 -0
  33. data/doc/classes/Array.src/M000052.html +18 -0
  34. data/doc/classes/Array.src/M000053.html +25 -0
  35. data/doc/classes/Array.src/M000054.html +19 -0
  36. data/doc/classes/Array.src/M000055.html +26 -0
  37. data/doc/classes/Array.src/M000056.html +19 -0
  38. data/doc/classes/Array.src/M000057.html +28 -0
  39. data/doc/classes/Array.src/M000058.html +21 -0
  40. data/doc/classes/Array.src/M000059.html +18 -0
  41. data/doc/classes/Array.src/M000061.html +23 -0
  42. data/doc/classes/Binding.html +420 -0
  43. data/doc/classes/Binding.src/M000202.html +19 -0
  44. data/doc/classes/Binding.src/M000203.html +22 -0
  45. data/doc/classes/Binding.src/M000204.html +19 -0
  46. data/doc/classes/Binding.src/M000205.html +19 -0
  47. data/doc/classes/Binding.src/M000206.html +18 -0
  48. data/doc/classes/Binding.src/M000207.html +18 -0
  49. data/doc/classes/Binding.src/M000208.html +18 -0
  50. data/doc/classes/Binding.src/M000209.html +18 -0
  51. data/doc/classes/Binding.src/M000210.html +18 -0
  52. data/doc/classes/Binding.src/M000211.html +18 -0
  53. data/doc/classes/Binding.src/M000212.html +18 -0
  54. data/doc/classes/Binding.src/M000213.html +27 -0
  55. data/doc/classes/Binding.src/M000214.html +22 -0
  56. data/doc/classes/Class.html +216 -0
  57. data/doc/classes/Class.src/M000184.html +20 -0
  58. data/doc/classes/Class.src/M000185.html +20 -0
  59. data/doc/classes/Class.src/M000186.html +19 -0
  60. data/doc/classes/Comparable.html +190 -0
  61. data/doc/classes/Comparable.src/M000366.html +20 -0
  62. data/doc/classes/Comparable.src/M000367.html +18 -0
  63. data/doc/classes/Comparable.src/M000368.html +18 -0
  64. data/doc/classes/Continuation.html +188 -0
  65. data/doc/classes/Continuation.src/M000126.html +21 -0
  66. data/doc/classes/Enumerable.html +648 -0
  67. data/doc/classes/Enumerable.src/M000345.html +22 -0
  68. data/doc/classes/Enumerable.src/M000346.html +18 -0
  69. data/doc/classes/Enumerable.src/M000347.html +26 -0
  70. data/doc/classes/Enumerable.src/M000349.html +18 -0
  71. data/doc/classes/Enumerable.src/M000351.html +23 -0
  72. data/doc/classes/Enumerable.src/M000352.html +22 -0
  73. data/doc/classes/Enumerable.src/M000356.html +31 -0
  74. data/doc/classes/Enumerable.src/M000359.html +29 -0
  75. data/doc/classes/Enumerable.src/M000360.html +34 -0
  76. data/doc/classes/Enumerable.src/M000362.html +20 -0
  77. data/doc/classes/Enumerable.src/M000363.html +18 -0
  78. data/doc/classes/Enumerable.src/M000364.html +48 -0
  79. data/doc/classes/Enumerable.src/M000365.html +18 -0
  80. data/doc/classes/File.html +149 -0
  81. data/doc/classes/File.src/M000326.html +21 -0
  82. data/doc/classes/FileUtils.html +332 -0
  83. data/doc/classes/FileUtils.src/M000327.html +59 -0
  84. data/doc/classes/FileUtils.src/M000328.html +28 -0
  85. data/doc/classes/FileUtils.src/M000329.html +18 -0
  86. data/doc/classes/FileUtils.src/M000330.html +18 -0
  87. data/doc/classes/FileUtils.src/M000331.html +46 -0
  88. data/doc/classes/FileUtils.src/M000332.html +27 -0
  89. data/doc/classes/FileUtils.src/M000333.html +55 -0
  90. data/doc/classes/Float.html +180 -0
  91. data/doc/classes/Float.src/M000181.html +18 -0
  92. data/doc/classes/Float.src/M000182.html +19 -0
  93. data/doc/classes/Float.src/M000183.html +19 -0
  94. data/doc/classes/Functor.html +190 -0
  95. data/doc/classes/Functor.src/M000195.html +16 -0
  96. data/doc/classes/Functor.src/M000196.html +16 -0
  97. data/doc/classes/Functor.src/M000197.html +16 -0
  98. data/doc/classes/Functor.src/M000198.html +16 -0
  99. data/doc/classes/Hash.html +1319 -0
  100. data/doc/classes/Hash.src/M000063.html +20 -0
  101. data/doc/classes/Hash.src/M000064.html +18 -0
  102. data/doc/classes/Hash.src/M000065.html +22 -0
  103. data/doc/classes/Hash.src/M000066.html +23 -0
  104. data/doc/classes/Hash.src/M000067.html +21 -0
  105. data/doc/classes/Hash.src/M000068.html +25 -0
  106. data/doc/classes/Hash.src/M000069.html +18 -0
  107. data/doc/classes/Hash.src/M000070.html +22 -0
  108. data/doc/classes/Hash.src/M000071.html +20 -0
  109. data/doc/classes/Hash.src/M000072.html +26 -0
  110. data/doc/classes/Hash.src/M000073.html +19 -0
  111. data/doc/classes/Hash.src/M000074.html +19 -0
  112. data/doc/classes/Hash.src/M000075.html +24 -0
  113. data/doc/classes/Hash.src/M000078.html +18 -0
  114. data/doc/classes/Hash.src/M000080.html +20 -0
  115. data/doc/classes/Hash.src/M000083.html +18 -0
  116. data/doc/classes/Hash.src/M000084.html +20 -0
  117. data/doc/classes/Hash.src/M000086.html +19 -0
  118. data/doc/classes/Hash.src/M000087.html +20 -0
  119. data/doc/classes/Hash.src/M000089.html +16 -0
  120. data/doc/classes/Hash.src/M000090.html +19 -0
  121. data/doc/classes/Hash.src/M000091.html +22 -0
  122. data/doc/classes/Hash.src/M000092.html +18 -0
  123. data/doc/classes/Hash.src/M000093.html +18 -0
  124. data/doc/classes/Hash.src/M000094.html +20 -0
  125. data/doc/classes/Hash.src/M000095.html +19 -0
  126. data/doc/classes/Hash.src/M000096.html +19 -0
  127. data/doc/classes/Hash.src/M000097.html +19 -0
  128. data/doc/classes/Hash.src/M000098.html +18 -0
  129. data/doc/classes/Hash.src/M000099.html +18 -0
  130. data/doc/classes/Hash.src/M000100.html +19 -0
  131. data/doc/classes/Hash.src/M000101.html +24 -0
  132. data/doc/classes/Hash.src/M000104.html +55 -0
  133. data/doc/classes/Hash.src/M000105.html +19 -0
  134. data/doc/classes/Hash.src/M000106.html +19 -0
  135. data/doc/classes/Integer.html +248 -0
  136. data/doc/classes/Integer.src/M000007.html +19 -0
  137. data/doc/classes/Integer.src/M000008.html +18 -0
  138. data/doc/classes/Integer.src/M000009.html +18 -0
  139. data/doc/classes/Integer.src/M000010.html +21 -0
  140. data/doc/classes/Kernel.html +520 -0
  141. data/doc/classes/Kernel.src/M000334.html +27 -0
  142. data/doc/classes/Kernel.src/M000335.html +18 -0
  143. data/doc/classes/Kernel.src/M000336.html +18 -0
  144. data/doc/classes/Kernel.src/M000337.html +18 -0
  145. data/doc/classes/Kernel.src/M000338.html +24 -0
  146. data/doc/classes/Kernel.src/M000339.html +19 -0
  147. data/doc/classes/Kernel.src/M000340.html +22 -0
  148. data/doc/classes/Kernel.src/M000341.html +20 -0
  149. data/doc/classes/Kernel.src/M000342.html +19 -0
  150. data/doc/classes/Kernel.src/M000343.html +21 -0
  151. data/doc/classes/Kernel.src/M000344.html +18 -0
  152. data/doc/classes/MatchData.html +208 -0
  153. data/doc/classes/MatchData.src/M000107.html +21 -0
  154. data/doc/classes/MatchData.src/M000108.html +21 -0
  155. data/doc/classes/MatchData.src/M000109.html +18 -0
  156. data/doc/classes/Module.html +648 -0
  157. data/doc/classes/Module.src/M000112.html +32 -0
  158. data/doc/classes/Module.src/M000114.html +24 -0
  159. data/doc/classes/Module.src/M000115.html +41 -0
  160. data/doc/classes/Module.src/M000116.html +18 -0
  161. data/doc/classes/Module.src/M000117.html +20 -0
  162. data/doc/classes/Module.src/M000118.html +19 -0
  163. data/doc/classes/Module.src/M000119.html +20 -0
  164. data/doc/classes/Module.src/M000120.html +21 -0
  165. data/doc/classes/Module.src/M000122.html +23 -0
  166. data/doc/classes/Module.src/M000123.html +24 -0
  167. data/doc/classes/Module.src/M000124.html +20 -0
  168. data/doc/classes/Module.src/M000125.html +29 -0
  169. data/doc/classes/NilClass.html +336 -0
  170. data/doc/classes/NilClass.src/M000187.html +18 -0
  171. data/doc/classes/NilClass.src/M000188.html +16 -0
  172. data/doc/classes/NilClass.src/M000189.html +16 -0
  173. data/doc/classes/NilClass.src/M000190.html +16 -0
  174. data/doc/classes/NilClass.src/M000191.html +16 -0
  175. data/doc/classes/NilClass.src/M000192.html +16 -0
  176. data/doc/classes/NilClass.src/M000193.html +16 -0
  177. data/doc/classes/NilClass.src/M000194.html +16 -0
  178. data/doc/classes/Numeric.html +1122 -0
  179. data/doc/classes/Numeric.src/M000127.html +18 -0
  180. data/doc/classes/Numeric.src/M000128.html +18 -0
  181. data/doc/classes/Numeric.src/M000129.html +18 -0
  182. data/doc/classes/Numeric.src/M000130.html +29 -0
  183. data/doc/classes/Numeric.src/M000131.html +18 -0
  184. data/doc/classes/Numeric.src/M000132.html +18 -0
  185. data/doc/classes/Numeric.src/M000133.html +18 -0
  186. data/doc/classes/Numeric.src/M000135.html +18 -0
  187. data/doc/classes/Numeric.src/M000138.html +18 -0
  188. data/doc/classes/Numeric.src/M000141.html +18 -0
  189. data/doc/classes/Numeric.src/M000144.html +18 -0
  190. data/doc/classes/Numeric.src/M000147.html +19 -0
  191. data/doc/classes/Numeric.src/M000148.html +19 -0
  192. data/doc/classes/Numeric.src/M000149.html +18 -0
  193. data/doc/classes/Numeric.src/M000150.html +18 -0
  194. data/doc/classes/Numeric.src/M000151.html +18 -0
  195. data/doc/classes/Numeric.src/M000153.html +18 -0
  196. data/doc/classes/Numeric.src/M000155.html +18 -0
  197. data/doc/classes/Numeric.src/M000157.html +18 -0
  198. data/doc/classes/Numeric.src/M000159.html +18 -0
  199. data/doc/classes/Numeric.src/M000161.html +18 -0
  200. data/doc/classes/Numeric.src/M000163.html +18 -0
  201. data/doc/classes/Numeric.src/M000165.html +18 -0
  202. data/doc/classes/Numeric.src/M000167.html +18 -0
  203. data/doc/classes/Numeric.src/M000169.html +18 -0
  204. data/doc/classes/Numeric.src/M000171.html +18 -0
  205. data/doc/classes/Numeric.src/M000174.html +18 -0
  206. data/doc/classes/Numeric.src/M000178.html +20 -0
  207. data/doc/classes/Numeric.src/M000179.html +18 -0
  208. data/doc/classes/Numeric.src/M000180.html +18 -0
  209. data/doc/classes/Object.html +923 -0
  210. data/doc/classes/Object.src/M000215.html +21 -0
  211. data/doc/classes/Object.src/M000216.html +20 -0
  212. data/doc/classes/Object.src/M000217.html +18 -0
  213. data/doc/classes/Object.src/M000219.html +26 -0
  214. data/doc/classes/Object.src/M000220.html +20 -0
  215. data/doc/classes/Object.src/M000221.html +18 -0
  216. data/doc/classes/Object.src/M000222.html +18 -0
  217. data/doc/classes/Object.src/M000224.html +18 -0
  218. data/doc/classes/Object.src/M000226.html +18 -0
  219. data/doc/classes/Object.src/M000228.html +19 -0
  220. data/doc/classes/Object.src/M000229.html +19 -0
  221. data/doc/classes/Object.src/M000230.html +21 -0
  222. data/doc/classes/Object.src/M000232.html +18 -0
  223. data/doc/classes/Object.src/M000233.html +18 -0
  224. data/doc/classes/Object.src/M000234.html +19 -0
  225. data/doc/classes/Object.src/M000235.html +19 -0
  226. data/doc/classes/Object.src/M000236.html +19 -0
  227. data/doc/classes/Object.src/M000237.html +40 -0
  228. data/doc/classes/Object.src/M000238.html +27 -0
  229. data/doc/classes/Object.src/M000239.html +18 -0
  230. data/doc/classes/Object.src/M000240.html +18 -0
  231. data/doc/classes/Object.src/M000241.html +18 -0
  232. data/doc/classes/Object.src/M000242.html +18 -0
  233. data/doc/classes/OpenStruct.html +206 -0
  234. data/doc/classes/OpenStruct.src/M000199.html +22 -0
  235. data/doc/classes/OpenStruct.src/M000200.html +19 -0
  236. data/doc/classes/OpenStruct.src/M000201.html +20 -0
  237. data/doc/classes/Proc.html +184 -0
  238. data/doc/classes/Proc.src/M000110.html +20 -0
  239. data/doc/classes/Range.html +247 -0
  240. data/doc/classes/Range.src/M000003.html +23 -0
  241. data/doc/classes/Range.src/M000004.html +20 -0
  242. data/doc/classes/Range.src/M000005.html +18 -0
  243. data/doc/classes/Range.src/M000006.html +18 -0
  244. data/doc/classes/Regexp.html +205 -0
  245. data/doc/classes/Regexp.src/M000022.html +18 -0
  246. data/doc/classes/Regexp.src/M000023.html +18 -0
  247. data/doc/classes/Regexp.src/M000024.html +18 -0
  248. data/doc/classes/ScriptBug.html +111 -0
  249. data/doc/classes/String.html +1930 -0
  250. data/doc/classes/String.src/M000243.html +27 -0
  251. data/doc/classes/String.src/M000244.html +18 -0
  252. data/doc/classes/String.src/M000245.html +18 -0
  253. data/doc/classes/String.src/M000246.html +18 -0
  254. data/doc/classes/String.src/M000248.html +18 -0
  255. data/doc/classes/String.src/M000249.html +18 -0
  256. data/doc/classes/String.src/M000250.html +21 -0
  257. data/doc/classes/String.src/M000251.html +22 -0
  258. data/doc/classes/String.src/M000253.html +28 -0
  259. data/doc/classes/String.src/M000254.html +23 -0
  260. data/doc/classes/String.src/M000255.html +22 -0
  261. data/doc/classes/String.src/M000256.html +18 -0
  262. data/doc/classes/String.src/M000257.html +20 -0
  263. data/doc/classes/String.src/M000258.html +20 -0
  264. data/doc/classes/String.src/M000259.html +22 -0
  265. data/doc/classes/String.src/M000260.html +18 -0
  266. data/doc/classes/String.src/M000261.html +26 -0
  267. data/doc/classes/String.src/M000262.html +23 -0
  268. data/doc/classes/String.src/M000263.html +24 -0
  269. data/doc/classes/String.src/M000264.html +23 -0
  270. data/doc/classes/String.src/M000265.html +23 -0
  271. data/doc/classes/String.src/M000266.html +18 -0
  272. data/doc/classes/String.src/M000267.html +18 -0
  273. data/doc/classes/String.src/M000268.html +19 -0
  274. data/doc/classes/String.src/M000269.html +19 -0
  275. data/doc/classes/String.src/M000270.html +18 -0
  276. data/doc/classes/String.src/M000271.html +18 -0
  277. data/doc/classes/String.src/M000272.html +19 -0
  278. data/doc/classes/String.src/M000273.html +18 -0
  279. data/doc/classes/String.src/M000274.html +72 -0
  280. data/doc/classes/String.src/M000275.html +20 -0
  281. data/doc/classes/String.src/M000276.html +20 -0
  282. data/doc/classes/String.src/M000277.html +21 -0
  283. data/doc/classes/String.src/M000278.html +25 -0
  284. data/doc/classes/String.src/M000279.html +18 -0
  285. data/doc/classes/String.src/M000280.html +21 -0
  286. data/doc/classes/String.src/M000281.html +18 -0
  287. data/doc/classes/String.src/M000282.html +23 -0
  288. data/doc/classes/String.src/M000283.html +18 -0
  289. data/doc/classes/String.src/M000284.html +21 -0
  290. data/doc/classes/String.src/M000285.html +28 -0
  291. data/doc/classes/String.src/M000286.html +25 -0
  292. data/doc/classes/String.src/M000287.html +18 -0
  293. data/doc/classes/String.src/M000289.html +18 -0
  294. data/doc/classes/String.src/M000291.html +18 -0
  295. data/doc/classes/String.src/M000292.html +18 -0
  296. data/doc/classes/String.src/M000293.html +21 -0
  297. data/doc/classes/String.src/M000294.html +18 -0
  298. data/doc/classes/String.src/M000295.html +18 -0
  299. data/doc/classes/String.src/M000296.html +22 -0
  300. data/doc/classes/String.src/M000297.html +18 -0
  301. data/doc/classes/String.src/M000298.html +22 -0
  302. data/doc/classes/String.src/M000299.html +21 -0
  303. data/doc/classes/String.src/M000300.html +18 -0
  304. data/doc/classes/String.src/M000301.html +18 -0
  305. data/doc/classes/String.src/M000302.html +18 -0
  306. data/doc/classes/String.src/M000303.html +18 -0
  307. data/doc/classes/String.src/M000304.html +18 -0
  308. data/doc/classes/String.src/M000305.html +32 -0
  309. data/doc/classes/String.src/M000306.html +23 -0
  310. data/doc/classes/String.src/M000307.html +24 -0
  311. data/doc/classes/String.src/M000308.html +18 -0
  312. data/doc/classes/String.src/M000309.html +57 -0
  313. data/doc/classes/String/Format.html +279 -0
  314. data/doc/classes/String/Format.src/M000316.html +18 -0
  315. data/doc/classes/String/Format.src/M000317.html +18 -0
  316. data/doc/classes/String/Format.src/M000318.html +18 -0
  317. data/doc/classes/String/Format.src/M000320.html +18 -0
  318. data/doc/classes/String/Format.src/M000321.html +18 -0
  319. data/doc/classes/String/Format.src/M000322.html +18 -0
  320. data/doc/classes/String/Format.src/M000323.html +18 -0
  321. data/doc/classes/String/Format.src/M000324.html +18 -0
  322. data/doc/classes/String/Format.src/M000325.html +18 -0
  323. data/doc/classes/String/Inflect.html +221 -0
  324. data/doc/classes/String/Inflect.src/M000310.html +18 -0
  325. data/doc/classes/String/Inflect.src/M000311.html +18 -0
  326. data/doc/classes/String/Inflect.src/M000312.html +22 -0
  327. data/doc/classes/String/Inflect.src/M000313.html +22 -0
  328. data/doc/classes/String/Inflect.src/M000314.html +30 -0
  329. data/doc/classes/String/Inflect.src/M000315.html +31 -0
  330. data/doc/classes/Symbol.html +380 -0
  331. data/doc/classes/Symbol.src/M000012.html +18 -0
  332. data/doc/classes/Symbol.src/M000013.html +18 -0
  333. data/doc/classes/Symbol.src/M000014.html +22 -0
  334. data/doc/classes/Symbol.src/M000016.html +18 -0
  335. data/doc/classes/Symbol.src/M000017.html +18 -0
  336. data/doc/classes/Symbol.src/M000018.html +28 -0
  337. data/doc/classes/Symbol.src/M000019.html +26 -0
  338. data/doc/classes/Symbol.src/M000020.html +18 -0
  339. data/doc/classes/Symbol.src/M000021.html +18 -0
  340. data/doc/classes/Time.html +227 -0
  341. data/doc/classes/Time.src/M000025.html +51 -0
  342. data/doc/classes/Time.src/M000026.html +21 -0
  343. data/doc/created.rid +1 -0
  344. data/doc/files/LICENSE-GPL.html +537 -0
  345. data/doc/files/LICENSE-RUBY.html +166 -0
  346. data/doc/files/README.html +252 -0
  347. data/doc/files/lib/facet/all-base-common_rb.html +101 -0
  348. data/doc/files/lib/facet/all-base_rb.html +133 -0
  349. data/doc/files/lib/facet/array/[[]]_rb.html +108 -0
  350. data/doc/files/lib/facet/array/[]_rb.html +108 -0
  351. data/doc/files/lib/facet/array/at_rand_rb.html +101 -0
  352. data/doc/files/lib/facet/array/combinations_rb.html +101 -0
  353. data/doc/files/lib/facet/array/delete_values_rb.html +101 -0
  354. data/doc/files/lib/facet/array/first&last_rb.html +101 -0
  355. data/doc/files/lib/facet/array/get_rb.html +101 -0
  356. data/doc/files/lib/facet/array/head&tail_rb.html +101 -0
  357. data/doc/files/lib/facet/array/last_index_rb.html +101 -0
  358. data/doc/files/lib/facet/array/middle_rb.html +101 -0
  359. data/doc/files/lib/facet/array/pos_rb.html +101 -0
  360. data/doc/files/lib/facet/array/pull_rb.html +101 -0
  361. data/doc/files/lib/facet/array/range_rb.html +101 -0
  362. data/doc/files/lib/facet/array/rotate_rb.html +101 -0
  363. data/doc/files/lib/facet/array/select!_rb.html +101 -0
  364. data/doc/files/lib/facet/array/shuffle_rb.html +101 -0
  365. data/doc/files/lib/facet/array/store_rb.html +101 -0
  366. data/doc/files/lib/facet/array/thru_rb.html +101 -0
  367. data/doc/files/lib/facet/array/to_b_rb.html +101 -0
  368. data/doc/files/lib/facet/array/to_h_rb.html +101 -0
  369. data/doc/files/lib/facet/array_rb.html +120 -0
  370. data/doc/files/lib/facet/binding/called_rb.html +108 -0
  371. data/doc/files/lib/facet/binding/caller_rb.html +108 -0
  372. data/doc/files/lib/facet/binding/defined?_rb.html +108 -0
  373. data/doc/files/lib/facet/binding/delegate!_rb.html +101 -0
  374. data/doc/files/lib/facet/binding/eval_rb.html +101 -0
  375. data/doc/files/lib/facet/binding/lineno_rb.html +108 -0
  376. data/doc/files/lib/facet/binding/local_variables_rb.html +108 -0
  377. data/doc/files/lib/facet/binding/self_rb.html +108 -0
  378. data/doc/files/lib/facet/binding_rb.html +118 -0
  379. data/doc/files/lib/facet/class/cattr_rb.html +101 -0
  380. data/doc/files/lib/facet/class_rb.html +114 -0
  381. data/doc/files/lib/facet/comparable/bound_by_rb.html +101 -0
  382. data/doc/files/lib/facet/comparable_rb.html +114 -0
  383. data/doc/files/lib/facet/continuation/create_rb.html +101 -0
  384. data/doc/files/lib/facet/continuation_rb.html +114 -0
  385. data/doc/files/lib/facet/enumerable/**_rb.html +108 -0
  386. data/doc/files/lib/facet/enumerable/collect_with_counter_rb.html +101 -0
  387. data/doc/files/lib/facet/enumerable/cross_rb.html +108 -0
  388. data/doc/files/lib/facet/enumerable/each_slice_rb.html +101 -0
  389. data/doc/files/lib/facet/enumerable/every_rb.html +108 -0
  390. data/doc/files/lib/facet/enumerable/graph_rb.html +101 -0
  391. data/doc/files/lib/facet/enumerable/none?_rb.html +101 -0
  392. data/doc/files/lib/facet/enumerable/one?_rb.html +101 -0
  393. data/doc/files/lib/facet/enumerable/partition_by_rb.html +101 -0
  394. data/doc/files/lib/facet/enumerable/per_rb.html +108 -0
  395. data/doc/files/lib/facet/enumerable/to_hash_rb.html +101 -0
  396. data/doc/files/lib/facet/enumerable/uniq_by_rb.html +101 -0
  397. data/doc/files/lib/facet/enumerable_rb.html +118 -0
  398. data/doc/files/lib/facet/file/split_all_rb.html +101 -0
  399. data/doc/files/lib/facet/file_rb.html +114 -0
  400. data/doc/files/lib/facet/fileutils/head&tail_rb.html +108 -0
  401. data/doc/files/lib/facet/fileutils/safe_ln_rb.html +108 -0
  402. data/doc/files/lib/facet/fileutils/wc_rb.html +108 -0
  403. data/doc/files/lib/facet/fileutils/whereis_rb.html +108 -0
  404. data/doc/files/lib/facet/fileutils/which_rb.html +108 -0
  405. data/doc/files/lib/facet/fileutils_rb.html +115 -0
  406. data/doc/files/lib/facet/float/round_rb.html +101 -0
  407. data/doc/files/lib/facet/float_rb.html +114 -0
  408. data/doc/files/lib/facet/hash/<<_rb.html +101 -0
  409. data/doc/files/lib/facet/hash/[]_rb.html +101 -0
  410. data/doc/files/lib/facet/hash/alias!_rb.html +101 -0
  411. data/doc/files/lib/facet/hash/at_rand_rb.html +101 -0
  412. data/doc/files/lib/facet/hash/collate_rb.html +101 -0
  413. data/doc/files/lib/facet/hash/collect_rb.html +108 -0
  414. data/doc/files/lib/facet/hash/each_rb.html +101 -0
  415. data/doc/files/lib/facet/hash/has_keys?_rb.html +101 -0
  416. data/doc/files/lib/facet/hash/inverse_rb.html +101 -0
  417. data/doc/files/lib/facet/hash/keys_to_s_rb.html +101 -0
  418. data/doc/files/lib/facet/hash/keys_to_sym_rb.html +101 -0
  419. data/doc/files/lib/facet/hash/shuffle_rb.html +101 -0
  420. data/doc/files/lib/facet/hash/slice_rb.html +101 -0
  421. data/doc/files/lib/facet/hash/swap!_rb.html +101 -0
  422. data/doc/files/lib/facet/hash/swapkey!_rb.html +101 -0
  423. data/doc/files/lib/facet/hash/to_h_rb.html +101 -0
  424. data/doc/files/lib/facet/hash/to_ostruct_rb.html +108 -0
  425. data/doc/files/lib/facet/hash/traverse_rb.html +101 -0
  426. data/doc/files/lib/facet/hash/update_each_rb.html +101 -0
  427. data/doc/files/lib/facet/hash/weave_rb.html +101 -0
  428. data/doc/files/lib/facet/hash/zipnew_rb.html +101 -0
  429. data/doc/files/lib/facet/hash_rb.html +115 -0
  430. data/doc/files/lib/facet/integer/evenodd?_rb.html +101 -0
  431. data/doc/files/lib/facet/integer/factorial_rb.html +101 -0
  432. data/doc/files/lib/facet/integer/times_collect_rb.html +101 -0
  433. data/doc/files/lib/facet/integer_rb.html +116 -0
  434. data/doc/files/lib/facet/kernel/bug!_rb.html +101 -0
  435. data/doc/files/lib/facet/kernel/call_stack_rb.html +101 -0
  436. data/doc/files/lib/facet/kernel/called_rb.html +108 -0
  437. data/doc/files/lib/facet/kernel/demo_rb.html +101 -0
  438. data/doc/files/lib/facet/kernel/fn_rb.html +101 -0
  439. data/doc/files/lib/facet/kernel/get_by_id_rb.html +101 -0
  440. data/doc/files/lib/facet/kernel/here_rb.html +101 -0
  441. data/doc/files/lib/facet/kernel/maybe_rb.html +101 -0
  442. data/doc/files/lib/facet/kernel/method_name_rb.html +108 -0
  443. data/doc/files/lib/facet/kernel/require_all_rb.html +101 -0
  444. data/doc/files/lib/facet/kernel/require_local_rb.html +101 -0
  445. data/doc/files/lib/facet/kernel/resc_rb.html +101 -0
  446. data/doc/files/lib/facet/kernel/warn_with_line_rb.html +101 -0
  447. data/doc/files/lib/facet/kernel_rb.html +120 -0
  448. data/doc/files/lib/facet/matchdata/match_from_rb.html +108 -0
  449. data/doc/files/lib/facet/matchdata/match_rb.html +101 -0
  450. data/doc/files/lib/facet/matchdata_rb.html +115 -0
  451. data/doc/files/lib/facet/module/abstract_rb.html +118 -0
  452. data/doc/files/lib/facet/module/alias_module_function_rb.html +101 -0
  453. data/doc/files/lib/facet/module/basename_rb.html +101 -0
  454. data/doc/files/lib/facet/module/by_name_rb.html +108 -0
  455. data/doc/files/lib/facet/module/initializer_rb.html +101 -0
  456. data/doc/files/lib/facet/module/key_attributes_rb.html +101 -0
  457. data/doc/files/lib/facet/module/memoize_rb.html +130 -0
  458. data/doc/files/lib/facet/module/memoize_rb.src/M000002.html +18 -0
  459. data/doc/files/lib/facet/module/methods_rb.html +101 -0
  460. data/doc/files/lib/facet/module/redefine_method_rb.html +101 -0
  461. data/doc/files/lib/facet/module/redirect_rb.html +101 -0
  462. data/doc/files/lib/facet/module/sort_attributes_rb.html +101 -0
  463. data/doc/files/lib/facet/module/wrap_method_rb.html +101 -0
  464. data/doc/files/lib/facet/module_rb.html +116 -0
  465. data/doc/files/lib/facet/nil-as-emptiness_rb.html +130 -0
  466. data/doc/files/lib/facet/nil/[]_rb.html +101 -0
  467. data/doc/files/lib/facet/nil/empty?_rb.html +101 -0
  468. data/doc/files/lib/facet/nil/include?_rb.html +101 -0
  469. data/doc/files/lib/facet/nil/length_rb.html +101 -0
  470. data/doc/files/lib/facet/nil/to_f_rb.html +101 -0
  471. data/doc/files/lib/facet/nil/to_h_rb.html +101 -0
  472. data/doc/files/lib/facet/nil_rb.html +115 -0
  473. data/doc/files/lib/facet/numeric/bound_by_rb.html +101 -0
  474. data/doc/files/lib/facet/numeric/bytes_rb.html +101 -0
  475. data/doc/files/lib/facet/numeric/distance_rb.html +101 -0
  476. data/doc/files/lib/facet/numeric/octet_units_rb.html +108 -0
  477. data/doc/files/lib/facet/numeric/succ_rb.html +101 -0
  478. data/doc/files/lib/facet/numeric/times_rb.html +101 -0
  479. data/doc/files/lib/facet/numeric/to_b_rb.html +101 -0
  480. data/doc/files/lib/facet/numeric_rb.html +114 -0
  481. data/doc/files/lib/facet/object/__class___rb.html +101 -0
  482. data/doc/files/lib/facet/object/assign_with_rb.html +101 -0
  483. data/doc/files/lib/facet/object/bool?_rb.html +101 -0
  484. data/doc/files/lib/facet/object/constant_rb.html +101 -0
  485. data/doc/files/lib/facet/object/copy_rb.html +101 -0
  486. data/doc/files/lib/facet/object/in?_rb.html +101 -0
  487. data/doc/files/lib/facet/object/new_rb.html +101 -0
  488. data/doc/files/lib/facet/object/object_hexid_rb.html +101 -0
  489. data/doc/files/lib/facet/object/set_with_rb.html +101 -0
  490. data/doc/files/lib/facet/object/special_class_rb.html +101 -0
  491. data/doc/files/lib/facet/object/supers_rb.html +108 -0
  492. data/doc/files/lib/facet/object/to_b_rb.html +108 -0
  493. data/doc/files/lib/facet/object/to_bool_rb.html +101 -0
  494. data/doc/files/lib/facet/object/with_accessor_rb.html +101 -0
  495. data/doc/files/lib/facet/object_rb.html +120 -0
  496. data/doc/files/lib/facet/ostruct/[]_rb.html +108 -0
  497. data/doc/files/lib/facet/ostruct/ostruct_update_rb.html +108 -0
  498. data/doc/files/lib/facet/ostruct_rb.html +115 -0
  499. data/doc/files/lib/facet/proc/compose_rb.html +101 -0
  500. data/doc/files/lib/facet/proc/to_method_rb.html +138 -0
  501. data/doc/files/lib/facet/proc/to_method_rb.src/M000001.html +29 -0
  502. data/doc/files/lib/facet/proc_rb.html +115 -0
  503. data/doc/files/lib/facet/rand_rb.html +120 -0
  504. data/doc/files/lib/facet/range/to_r_rb.html +101 -0
  505. data/doc/files/lib/facet/range/umbrella_rb.html +101 -0
  506. data/doc/files/lib/facet/range/within?_rb.html +108 -0
  507. data/doc/files/lib/facet/range_rb.html +116 -0
  508. data/doc/files/lib/facet/regexp/arity_rb.html +101 -0
  509. data/doc/files/lib/facet/regexp/to_re_rb.html +101 -0
  510. data/doc/files/lib/facet/regexp_rb.html +115 -0
  511. data/doc/files/lib/facet/string/at_rand_rb.html +108 -0
  512. data/doc/files/lib/facet/string/blank?_rb.html +101 -0
  513. data/doc/files/lib/facet/string/braket_rb.html +101 -0
  514. data/doc/files/lib/facet/string/camelcase_rb.html +101 -0
  515. data/doc/files/lib/facet/string/case?_rb.html +101 -0
  516. data/doc/files/lib/facet/string/center_lines_rb.html +101 -0
  517. data/doc/files/lib/facet/string/chars_rb.html +101 -0
  518. data/doc/files/lib/facet/string/clump_rb.html +101 -0
  519. data/doc/files/lib/facet/string/cmp_rb.html +101 -0
  520. data/doc/files/lib/facet/string/dresner_rb.html +101 -0
  521. data/doc/files/lib/facet/string/each_word_rb.html +101 -0
  522. data/doc/files/lib/facet/string/first&last_rb.html +101 -0
  523. data/doc/files/lib/facet/string/format_rb.html +101 -0
  524. data/doc/files/lib/facet/string/fuzzy_match_rb.html +101 -0
  525. data/doc/files/lib/facet/string/index_all_rb.html +101 -0
  526. data/doc/files/lib/facet/string/inflect_rb.html +101 -0
  527. data/doc/files/lib/facet/string/line_to_char_map_rb.html +101 -0
  528. data/doc/files/lib/facet/string/line_wrap_rb.html +101 -0
  529. data/doc/files/lib/facet/string/margin_rb.html +101 -0
  530. data/doc/files/lib/facet/string/mscan_rb.html +101 -0
  531. data/doc/files/lib/facet/string/natcmp_rb.html +101 -0
  532. data/doc/files/lib/facet/string/rand_letter_rb.html +101 -0
  533. data/doc/files/lib/facet/string/range_rb.html +101 -0
  534. data/doc/files/lib/facet/string/shatter_rb.html +101 -0
  535. data/doc/files/lib/facet/string/shuffle_rb.html +101 -0
  536. data/doc/files/lib/facet/string/succ_rb.html +101 -0
  537. data/doc/files/lib/facet/string/tab_rb.html +101 -0
  538. data/doc/files/lib/facet/string/to_b_rb.html +101 -0
  539. data/doc/files/lib/facet/string/to_const_rb.html +108 -0
  540. data/doc/files/lib/facet/string/to_proc_rb.html +101 -0
  541. data/doc/files/lib/facet/string/to_re_rb.html +101 -0
  542. data/doc/files/lib/facet/string/unix_crypt_rb.html +108 -0
  543. data/doc/files/lib/facet/string/unpack_rb.html +101 -0
  544. data/doc/files/lib/facet/string/word_filter!_rb.html +101 -0
  545. data/doc/files/lib/facet/string/word_wrap_rb.html +101 -0
  546. data/doc/files/lib/facet/string_rb.html +122 -0
  547. data/doc/files/lib/facet/symbol/camelcase_rb.html +101 -0
  548. data/doc/files/lib/facet/symbol/gen_rb.html +101 -0
  549. data/doc/files/lib/facet/symbol/pad_rb.html +101 -0
  550. data/doc/files/lib/facet/symbol/succ_rb.html +101 -0
  551. data/doc/files/lib/facet/symbol/to_const_rb.html +108 -0
  552. data/doc/files/lib/facet/symbol/to_proc_rb.html +101 -0
  553. data/doc/files/lib/facet/symbol/to_str_rb.html +101 -0
  554. data/doc/files/lib/facet/symbol/~_rb.html +101 -0
  555. data/doc/files/lib/facet/symbol_rb.html +116 -0
  556. data/doc/files/lib/facet/time/custom_format_rb.html +108 -0
  557. data/doc/files/lib/facet/time/elapse_rb.html +101 -0
  558. data/doc/files/lib/facet/time_rb.html +107 -0
  559. data/doc/fr_class_index.html +54 -0
  560. data/doc/fr_file_index.html +239 -0
  561. data/doc/fr_method_index.html +394 -0
  562. data/doc/index.html +24 -0
  563. data/doc/rdoc-style.css +208 -0
  564. data/lib/facet-dev/README +11 -0
  565. data/lib/facet-dev/advice.rb +70 -0
  566. data/lib/facet-dev/array/**.rb +17 -0
  567. data/lib/facet-dev/array/at_rand.rb +95 -0
  568. data/lib/facet-dev/array/each_slice.rb +23 -0
  569. data/lib/facet-dev/array/pick_values.rb +32 -0
  570. data/lib/facet-dev/array/remove.rb +21 -0
  571. data/lib/facet-dev/arraysplit.tar.gz +0 -0
  572. data/lib/facet-dev/binding/class.rb +11 -0
  573. data/lib/facet-dev/binding/delegate.rb +15 -0
  574. data/lib/facet-dev/binding/proc.rb +6 -0
  575. data/lib/facet-dev/class_include.rb +13 -0
  576. data/lib/facet-dev/enumerable/[].rb +30 -0
  577. data/lib/facet-dev/enumerable/rand.rb +412 -0
  578. data/lib/facet-dev/fileutils/mv_f.rb +6 -0
  579. data/lib/facet-dev/fileutils/nl_convert.rb +69 -0
  580. data/lib/facet-dev/fileutils/tc_nlconvert.rb +60 -0
  581. data/lib/facet-dev/kernel/call_line.rb +15 -0
  582. data/lib/facet-dev/kernel/does.rb +7 -0
  583. data/lib/facet-dev/kernel/eval.rb +24 -0
  584. data/lib/facet-dev/kernel/message.rb +6 -0
  585. data/lib/facet-dev/module/preserved.rb +108 -0
  586. data/lib/facet-dev/object/==.rb +49 -0
  587. data/lib/facet-dev/object/>>.rb +50 -0
  588. data/lib/facet-dev/object/all.rb +11 -0
  589. data/lib/facet-dev/object/query.rb +15 -0
  590. data/lib/facet-dev/object/respond_with_value.rb +14 -0
  591. data/lib/facet-dev/rails/class_attribute_accessors.rb +57 -0
  592. data/lib/facet-dev/rails/class_inheritable_attributes.rb +117 -0
  593. data/lib/facet-dev/rails/clean_logger.rb +10 -0
  594. data/lib/facet-dev/rails/dependencies.rb +63 -0
  595. data/lib/facet-dev/rails/inflector.rb +84 -0
  596. data/lib/facet-dev/rails/misc.rb +8 -0
  597. data/lib/facet-dev/rails/module_attribute_accessors.rb +57 -0
  598. data/lib/facet-dev/rails/object_and_class.rb +24 -0
  599. data/lib/facet-dev/string/+.rb +19 -0
  600. data/lib/facet-dev/string/pred.rb +123 -0
  601. data/lib/facet-dev/string/slash.rb +15 -0
  602. data/lib/facet-dev/string/strip.rb +32 -0
  603. data/lib/facet-dev/string/succ_distance.rb +112 -0
  604. data/lib/facet-dev/string/tc_pred.rb +96 -0
  605. data/lib/facet-dev/string/word_wrap.rb +62 -0
  606. data/lib/facet-dev/taint.rb +10 -0
  607. data/lib/facet/all-base-common.rb +13 -0
  608. data/lib/facet/all-base.rb +27 -0
  609. data/lib/facet/array.rb +25 -0
  610. data/lib/facet/array/[[]].rb +42 -0
  611. data/lib/facet/array/[].rb +57 -0
  612. data/lib/facet/array/at_rand.rb +118 -0
  613. data/lib/facet/array/combinations.rb +122 -0
  614. data/lib/facet/array/delete_values.rb +46 -0
  615. data/lib/facet/array/first&last.rb +47 -0
  616. data/lib/facet/array/get.rb +15 -0
  617. data/lib/facet/array/head&tail.rb +33 -0
  618. data/lib/facet/array/last_index.rb +15 -0
  619. data/lib/facet/array/middle.rb +18 -0
  620. data/lib/facet/array/pos.rb +17 -0
  621. data/lib/facet/array/pull.rb +21 -0
  622. data/lib/facet/array/range.rb +22 -0
  623. data/lib/facet/array/rotate.rb +38 -0
  624. data/lib/facet/array/select!.rb +13 -0
  625. data/lib/facet/array/shuffle.rb +37 -0
  626. data/lib/facet/array/store.rb +4 -0
  627. data/lib/facet/array/thru.rb +18 -0
  628. data/lib/facet/array/to_b.rb +6 -0
  629. data/lib/facet/array/to_h.rb +30 -0
  630. data/lib/facet/binding.rb +15 -0
  631. data/lib/facet/binding/called.rb +29 -0
  632. data/lib/facet/binding/caller.rb +10 -0
  633. data/lib/facet/binding/defined?.rb +9 -0
  634. data/lib/facet/binding/delegate!.rb +19 -0
  635. data/lib/facet/binding/eval.rb +10 -0
  636. data/lib/facet/binding/lineno.rb +13 -0
  637. data/lib/facet/binding/local_variables.rb +39 -0
  638. data/lib/facet/binding/self.rb +10 -0
  639. data/lib/facet/class.rb +7 -0
  640. data/lib/facet/class/cattr.rb +82 -0
  641. data/lib/facet/comparable.rb +7 -0
  642. data/lib/facet/comparable/bound_by.rb +41 -0
  643. data/lib/facet/continuation.rb +8 -0
  644. data/lib/facet/continuation/create.rb +51 -0
  645. data/lib/facet/enumerable.rb +17 -0
  646. data/lib/facet/enumerable/**.rb +13 -0
  647. data/lib/facet/enumerable/collect_with_counter.rb +25 -0
  648. data/lib/facet/enumerable/cross.rb +79 -0
  649. data/lib/facet/enumerable/each_slice.rb +60 -0
  650. data/lib/facet/enumerable/every.rb +45 -0
  651. data/lib/facet/enumerable/graph.rb +48 -0
  652. data/lib/facet/enumerable/none?.rb +28 -0
  653. data/lib/facet/enumerable/one?.rb +35 -0
  654. data/lib/facet/enumerable/partition_by.rb +27 -0
  655. data/lib/facet/enumerable/per.rb +18 -0
  656. data/lib/facet/enumerable/to_hash.rb +17 -0
  657. data/lib/facet/enumerable/uniq_by.rb +35 -0
  658. data/lib/facet/file.rb +7 -0
  659. data/lib/facet/file/split_all.rb +17 -0
  660. data/lib/facet/fileutils.rb +11 -0
  661. data/lib/facet/fileutils/head&tail.rb +65 -0
  662. data/lib/facet/fileutils/safe_ln.rb +18 -0
  663. data/lib/facet/fileutils/wc.rb +62 -0
  664. data/lib/facet/fileutils/whereis.rb +63 -0
  665. data/lib/facet/fileutils/which.rb +53 -0
  666. data/lib/facet/float.rb +7 -0
  667. data/lib/facet/float/round.rb +33 -0
  668. data/lib/facet/hash.rb +23 -0
  669. data/lib/facet/hash/<<.rb +5 -0
  670. data/lib/facet/hash/[].rb +44 -0
  671. data/lib/facet/hash/alias!.rb +24 -0
  672. data/lib/facet/hash/at_rand.rb +88 -0
  673. data/lib/facet/hash/collate.rb +25 -0
  674. data/lib/facet/hash/collect.rb +8 -0
  675. data/lib/facet/hash/each.rb +28 -0
  676. data/lib/facet/hash/has_keys?.rb +48 -0
  677. data/lib/facet/hash/inverse.rb +29 -0
  678. data/lib/facet/hash/keys_to_s.rb +50 -0
  679. data/lib/facet/hash/keys_to_sym.rb +59 -0
  680. data/lib/facet/hash/shuffle.rb +51 -0
  681. data/lib/facet/hash/slice.rb +11 -0
  682. data/lib/facet/hash/swap!.rb +14 -0
  683. data/lib/facet/hash/swapkey!.rb +22 -0
  684. data/lib/facet/hash/to_h.rb +13 -0
  685. data/lib/facet/hash/to_ostruct.rb +30 -0
  686. data/lib/facet/hash/traverse.rb +35 -0
  687. data/lib/facet/hash/update_each.rb +24 -0
  688. data/lib/facet/hash/weave.rb +64 -0
  689. data/lib/facet/hash/zipnew.rb +15 -0
  690. data/lib/facet/integer.rb +9 -0
  691. data/lib/facet/integer/evenodd?.rb +25 -0
  692. data/lib/facet/integer/factorial.rb +27 -0
  693. data/lib/facet/integer/times_collect.rb +13 -0
  694. data/lib/facet/kernel.rb +18 -0
  695. data/lib/facet/kernel/bug!.rb +25 -0
  696. data/lib/facet/kernel/call_stack.rb +35 -0
  697. data/lib/facet/kernel/called.rb +20 -0
  698. data/lib/facet/kernel/demo.rb +25 -0
  699. data/lib/facet/kernel/fn.rb +10 -0
  700. data/lib/facet/kernel/get_by_id.rb +7 -0
  701. data/lib/facet/kernel/here.rb +11 -0
  702. data/lib/facet/kernel/maybe.rb +17 -0
  703. data/lib/facet/kernel/method_name.rb +18 -0
  704. data/lib/facet/kernel/require_all.rb +21 -0
  705. data/lib/facet/kernel/require_local.rb +26 -0
  706. data/lib/facet/kernel/resc.rb +7 -0
  707. data/lib/facet/kernel/warn_with_line.rb +19 -0
  708. data/lib/facet/matchdata.rb +8 -0
  709. data/lib/facet/matchdata/match.rb +12 -0
  710. data/lib/facet/matchdata/match_from.rb +38 -0
  711. data/lib/facet/module.rb +14 -0
  712. data/lib/facet/module/abstract.rb +20 -0
  713. data/lib/facet/module/alias_module_function.rb +28 -0
  714. data/lib/facet/module/basename.rb +18 -0
  715. data/lib/facet/module/by_name.rb +42 -0
  716. data/lib/facet/module/initializer.rb +35 -0
  717. data/lib/facet/module/key_attributes.rb +13 -0
  718. data/lib/facet/module/memoize.rb +50 -0
  719. data/lib/facet/module/methods.rb +98 -0
  720. data/lib/facet/module/redefine_method.rb +37 -0
  721. data/lib/facet/module/redirect.rb +39 -0
  722. data/lib/facet/module/sort_attributes.rb +12 -0
  723. data/lib/facet/module/wrap_method.rb +27 -0
  724. data/lib/facet/nil-as-emptiness.rb +34 -0
  725. data/lib/facet/nil.rb +15 -0
  726. data/lib/facet/nil/[].rb +12 -0
  727. data/lib/facet/nil/empty?.rb +19 -0
  728. data/lib/facet/nil/include?.rb +11 -0
  729. data/lib/facet/nil/length.rb +19 -0
  730. data/lib/facet/nil/to_f.rb +10 -0
  731. data/lib/facet/nil/to_h.rb +10 -0
  732. data/lib/facet/numeric.rb +9 -0
  733. data/lib/facet/numeric/bound_by.rb +41 -0
  734. data/lib/facet/numeric/bytes.rb +51 -0
  735. data/lib/facet/numeric/distance.rb +13 -0
  736. data/lib/facet/numeric/octet_units.rb +32 -0
  737. data/lib/facet/numeric/succ.rb +41 -0
  738. data/lib/facet/numeric/times.rb +106 -0
  739. data/lib/facet/numeric/to_b.rb +15 -0
  740. data/lib/facet/object.rb +20 -0
  741. data/lib/facet/object/__class__.rb +17 -0
  742. data/lib/facet/object/assign_with.rb +80 -0
  743. data/lib/facet/object/bool?.rb +49 -0
  744. data/lib/facet/object/constant.rb +22 -0
  745. data/lib/facet/object/copy.rb +13 -0
  746. data/lib/facet/object/in?.rb +12 -0
  747. data/lib/facet/object/new.rb +32 -0
  748. data/lib/facet/object/object_hexid.rb +12 -0
  749. data/lib/facet/object/set_with.rb +29 -0
  750. data/lib/facet/object/special_class.rb +45 -0
  751. data/lib/facet/object/supers.rb +38 -0
  752. data/lib/facet/object/to_b.rb +15 -0
  753. data/lib/facet/object/to_bool.rb +14 -0
  754. data/lib/facet/object/with_accessor.rb +50 -0
  755. data/lib/facet/ostruct.rb +8 -0
  756. data/lib/facet/ostruct/[].rb +29 -0
  757. data/lib/facet/ostruct/ostruct_update.rb +18 -0
  758. data/lib/facet/proc.rb +8 -0
  759. data/lib/facet/proc/compose.rb +22 -0
  760. data/lib/facet/proc/to_method.rb +43 -0
  761. data/lib/facet/rand.rb +10 -0
  762. data/lib/facet/range.rb +9 -0
  763. data/lib/facet/range/to_r.rb +16 -0
  764. data/lib/facet/range/umbrella.rb +37 -0
  765. data/lib/facet/range/within?.rb +19 -0
  766. data/lib/facet/regexp.rb +9 -0
  767. data/lib/facet/regexp/arity.rb +14 -0
  768. data/lib/facet/regexp/to_re.rb +25 -0
  769. data/lib/facet/string.rb +38 -0
  770. data/lib/facet/string/at_rand.rb +99 -0
  771. data/lib/facet/string/blank?.rb +14 -0
  772. data/lib/facet/string/braket.rb +27 -0
  773. data/lib/facet/string/camelcase.rb +24 -0
  774. data/lib/facet/string/case?.rb +44 -0
  775. data/lib/facet/string/center_lines.rb +26 -0
  776. data/lib/facet/string/chars.rb +34 -0
  777. data/lib/facet/string/clump.rb +51 -0
  778. data/lib/facet/string/cmp.rb +17 -0
  779. data/lib/facet/string/dresner.rb +25 -0
  780. data/lib/facet/string/each_word.rb +25 -0
  781. data/lib/facet/string/first&last.rb +123 -0
  782. data/lib/facet/string/format.rb +64 -0
  783. data/lib/facet/string/fuzzy_match.rb +82 -0
  784. data/lib/facet/string/index_all.rb +19 -0
  785. data/lib/facet/string/inflect.rb +70 -0
  786. data/lib/facet/string/line_to_char_map.rb +18 -0
  787. data/lib/facet/string/line_wrap.rb +20 -0
  788. data/lib/facet/string/margin.rb +27 -0
  789. data/lib/facet/string/mscan.rb +16 -0
  790. data/lib/facet/string/natcmp.rb +84 -0
  791. data/lib/facet/string/rand_letter.rb +13 -0
  792. data/lib/facet/string/range.rb +39 -0
  793. data/lib/facet/string/shatter.rb +17 -0
  794. data/lib/facet/string/shuffle.rb +49 -0
  795. data/lib/facet/string/succ.rb +17 -0
  796. data/lib/facet/string/tab.rb +38 -0
  797. data/lib/facet/string/to_b.rb +27 -0
  798. data/lib/facet/string/to_const.rb +16 -0
  799. data/lib/facet/string/to_proc.rb +25 -0
  800. data/lib/facet/string/to_re.rb +13 -0
  801. data/lib/facet/string/unix_crypt.rb +12 -0
  802. data/lib/facet/string/unpack.rb +15 -0
  803. data/lib/facet/string/word_filter!.rb +20 -0
  804. data/lib/facet/string/word_wrap.rb +43 -0
  805. data/lib/facet/symbol.rb +14 -0
  806. data/lib/facet/symbol/camelcase.rb +24 -0
  807. data/lib/facet/symbol/gen.rb +23 -0
  808. data/lib/facet/symbol/pad.rb +20 -0
  809. data/lib/facet/symbol/succ.rb +17 -0
  810. data/lib/facet/symbol/to_const.rb +16 -0
  811. data/lib/facet/symbol/to_proc.rb +22 -0
  812. data/lib/facet/symbol/to_str.rb +12 -0
  813. data/lib/facet/symbol/~.rb +8 -0
  814. data/lib/facet/time.rb +7 -0
  815. data/lib/facet/time/custom_format.rb +111 -0
  816. data/lib/facet/time/elapse.rb +18 -0
  817. data/setup.rb +1361 -0
  818. data/test/array/tc_array.rb +234 -0
  819. data/test/array/tc_brackets.rb +16 -0
  820. data/test/binding/tc_binding.rb +77 -0
  821. data/test/class/tc_class.rb +48 -0
  822. data/test/comparable/tc_comparable.rb +23 -0
  823. data/test/enumerable/tc_enumerable.rb +166 -0
  824. data/test/file/tc_file.rb +14 -0
  825. data/test/fileutils/tc_head&tail.rb +72 -0
  826. data/test/fileutils/tc_wc.rb +46 -0
  827. data/test/fileutils/tc_whereis.rb +35 -0
  828. data/test/fileutils/tc_which.rb +35 -0
  829. data/test/fileutils/test_file.txt +25 -0
  830. data/test/fileutils/test_file2.txt +25 -0
  831. data/test/float/tc_float.rb +70 -0
  832. data/test/hash/tc_each.rb +23 -0
  833. data/test/hash/tc_hash.rb +182 -0
  834. data/test/hash/tc_slice.rb +98 -0
  835. data/test/integer/tc_integer.rb +50 -0
  836. data/test/kernel/tc_kernel.rb +89 -0
  837. data/test/kernel/tc_warn_with_line.rb +1 -0
  838. data/test/kernel/test_file.rb +3 -0
  839. data/test/matchdata/tc_matchdata.rb +47 -0
  840. data/test/module/tc_memoize.rb +2 -0
  841. data/test/module/tc_methods.rb +13 -0
  842. data/test/module/tc_module.rb +51 -0
  843. data/test/module/tc_redef.rb +47 -0
  844. data/test/nil/tc_nil.rb +57 -0
  845. data/test/numeric/tc_numeric.rb +145 -0
  846. data/test/object/tc_constant.rb +21 -0
  847. data/test/object/tc_object.rb +138 -0
  848. data/test/object/tc_supers.rb +63 -0
  849. data/test/object/tc_with_accessor.rb +31 -0
  850. data/test/ostruct/tc_ostruct.rb +16 -0
  851. data/test/proc/tc_proc.rb +32 -0
  852. data/test/range/tc_range.rb +46 -0
  853. data/test/regexp/tc_regexp.rb +35 -0
  854. data/test/string/tc_fuzzy_match.rb +2 -0
  855. data/test/string/tc_margin.rb +98 -0
  856. data/test/string/tc_string.rb +341 -0
  857. data/test/string/tc_unix_crypt.rb +2 -0
  858. data/test/symbol/tc_symbol.rb +60 -0
  859. data/test/t_require.rb +4 -0
  860. data/test/time/tc_time.rb +30 -0
  861. metadata +1013 -0
@@ -0,0 +1,11 @@
1
+ *** IMPORTANT!!! ***
2
+
3
+ This directory contains alpha code and is generally considered
4
+ expiremental. It is provided as a means for conmmon development
5
+ and potential inspiration.
6
+
7
+ Some of these, or variations there-of, will find eventually become
8
+ part of the main lib.
9
+
10
+
11
+
@@ -0,0 +1,70 @@
1
+ #Copyright MJFP
2
+ #batsman dot geo at yahoo dot com
3
+
4
+ class Module
5
+ def def_advice(meth, &block)
6
+ prev = self.instance_method(meth)
7
+ define_method(meth) do |*a|
8
+ block.call prev.bind(self), *a
9
+ end
10
+ end
11
+
12
+ def def_preadvice(meth, &block)
13
+ prev = self.instance_method(meth)
14
+ define_method(meth) do |*a|
15
+ block.call(*a)
16
+ prev.bind(self).call(*a)
17
+ end
18
+ end
19
+
20
+ def def_postadvice(meth, &block)
21
+ prev = self.instance_method(meth)
22
+ define_method(meth) do |*a|
23
+ prev.bind(self).call(*a)
24
+ block.call(*a)
25
+ end
26
+ end
27
+ end
28
+
29
+ class A
30
+ def foo(*a)
31
+ puts "A#foo #{a.inspect}"
32
+ end
33
+ end
34
+ a = A.new
35
+ a.foo
36
+
37
+ class A
38
+ def_advice(:foo) do |prev, *a|
39
+ puts "before"
40
+ prev[*a]
41
+ puts "after"
42
+ end
43
+ end
44
+
45
+ puts "--"
46
+ a.foo
47
+
48
+ class A
49
+ def_preadvice(:foo) { puts "pre 1" }
50
+ def_postadvice(:foo) { puts "post 1"}
51
+ def_preadvice(:foo) { puts "pre 2" }
52
+ end
53
+
54
+ puts "--"
55
+ a.foo
56
+ batsman@tux-chan:/tmp$ ruby aop2.rb
57
+ A#foo []
58
+
59
+ =begin
60
+ before
61
+ A#foo []
62
+ after
63
+ pre 2
64
+ pre 1
65
+ before
66
+ A#foo []
67
+ after
68
+ post 1
69
+ =end
70
+
@@ -0,0 +1,17 @@
1
+ class Array
2
+ # Basic Array cross-product.
3
+ #--
4
+ # Note this code is wrong. The idea here is to
5
+ # offer a more effiecnt veriosn of Enumerable#cross
6
+ # for Array's. When done, require Array#**
7
+ # in Enumerable#** too.
8
+ #++
9
+ def **(other_enum)
10
+ res = Array.new
11
+ self.each do |i|
12
+ other_enum.each { |j| res << [i,j] }
13
+ end
14
+ return res
15
+ end
16
+ end
17
+
@@ -0,0 +1,95 @@
1
+ class Array
2
+
3
+ # Return an array element at random.
4
+ #
5
+ # require 'facet/array/at_rand'
6
+ #
7
+ # [1,2,3,4].at_rand #=> 1
8
+ # [1,2,3,4].at_rand #=> 4
9
+ # [1,2,3,4].at_rand(1) #=> [4]
10
+ # [1,2,3,4].at_rand(3) #=> [2,2,1]
11
+ # [1,2,3,4].at_rand(3) #=> [3,2,4]
12
+ #
13
+ # def at_rand(n=nil, exclusive=false)
14
+ # if n
15
+ # n = n.to_i
16
+ # if exclusive
17
+ # return dup if n >= length
18
+ # return sort_by{Kernel.rand}[0..n]
19
+ # else
20
+ # idx = []
21
+ # n.times do
22
+ # idx << Kernel.rand(self.size)
23
+ # end
24
+ # return values_at(*idx)
25
+ # end
26
+ # else
27
+ # return at( Kernel.rand(self.size) )
28
+ # end
29
+ # end
30
+
31
+ def at_rand(n=nil, exclusive=false)
32
+ if n
33
+ return values_at(*rand_index(n, :exclusive))
34
+ else
35
+ return at(Kernel.rand(length))
36
+ end
37
+ end
38
+ alias_method(:at_random, :at_rand)
39
+
40
+
41
+ def pick(n)
42
+
43
+ end
44
+
45
+
46
+ # Return random index or indexes of an array. If a number
47
+ # of indexes _n_ is given, an array of indexes is returned.
48
+ # This in non-exlusive and may pick the same index more than
49
+ # once.
50
+ #
51
+ # ["a", "b", "c"].rand_index #=> "a" (or "b", or "c")
52
+ # ["a", "b", "c"].rand_index(2) #=> ["a","b"]
53
+ # ["a", "b", "c"].rand_index(3) #=> ["a","b","b"]
54
+ #
55
+ def rand_index(n=nil)
56
+ if n
57
+ n = n.to_i
58
+ if exclusive
59
+ idx = (0...size).to_a
60
+ return idx if n >= length
61
+ return idx.sort_by{Kernel.rand}.slice(0,n)
62
+ else
63
+ idx = []
64
+ n.times{ idx << Kernel.rand(self.length) }
65
+ return idx
66
+ end
67
+ else
68
+ return Kernel.rand(size)
69
+ end
70
+ end
71
+
72
+ # Pick and return a random index or indexes of array.
73
+ # If a number of indexes _n_ is given, an array of indexes
74
+ # is returned. Unlike #rand_index, #pick_index is exclusive
75
+ # and will not pick the same index twice. If _n_ exceeds
76
+ # the size of the array, all elements are returned.
77
+ #
78
+ # ["a", "b", "c"].pick_index #=> "a" (or "b", or "c")
79
+ # ["a", "b", "c"].pick_index(2) #=> ["a","b"]
80
+ # ["a", "b", "c"].pick_index(3) #=> ["a","b","c"]
81
+ #
82
+ #
83
+ def pick_index(n=nil)
84
+ if n
85
+ n = n.to_i
86
+ idx = (0...size).to_a
87
+ return idx if n >= length
88
+ return idx.sort_by{Kernel.rand}.slice(0,n)
89
+ else
90
+ return Kernel.rand(size)
91
+ end
92
+ end
93
+
94
+ end
95
+
@@ -0,0 +1,23 @@
1
+ # DEPRECATE. THIS IS INCLUDED IN ENUMERABLE NOW.
2
+ class Array
3
+ # Iterates over +n+ elements at a time. If +n+ is
4
+ # not given then the arity of the block determines the
5
+ # slicing quantity.
6
+ #
7
+ # require 'facet/array/each_slice'
8
+ #
9
+ # [1, 2, 3, 4].each_slice(2){ |a,b| ... }
10
+ #
11
+ # Enumerable#each_slice offers the same functionality
12
+ # but this is a more efficient implementation specifically
13
+ # for the Array.
14
+ def each_slice(n=nil, &yld)
15
+ n = yld.arity.abs unless n
16
+ i=0
17
+ while i < self.length
18
+ yld.call(*self.slice(i,n))
19
+ i+=n
20
+ end
21
+ end
22
+ alias_method( :each_by, :each_slice )
23
+ end
@@ -0,0 +1,32 @@
1
+
2
+ class Array
3
+
4
+ # Pick out _n_ random elements from the array.
5
+ # If _n_ is not given then picks out a single
6
+ # element.
7
+ #
8
+ # require 'facet/array/pick'
9
+ #
10
+ # a = ["a", "b", "c", "d", "e"]
11
+ # a.pick #=> "b"
12
+ # a #=> ["a", "c", "d", "e"]
13
+ # a.pick(2) #=> ["a", "e"]
14
+ # a #=> ["c", "d"]
15
+ #
16
+ def pick(n=nil)
17
+ if n
18
+ n = n.to_i
19
+ all = (0..size).to_a
20
+ idx = pick_indexes(n)
21
+ vals = values_at(*idx)
22
+ replace( values_at( *(all - idx) )
23
+ return vals
24
+ else
25
+ i = Kernel.rand(size)
26
+ v = at(i)
27
+ delete_at(i)
28
+ return v
29
+ end
30
+ end
31
+
32
+ end
@@ -0,0 +1,21 @@
1
+ class Array
2
+ # Like +compact+ but takes an _object_ to be
3
+ # removed rather then just nil. Empty string
4
+ # ("") is the default if no parameter is given.
5
+ #
6
+ # require 'facet/array/remove'
7
+ #
8
+ # [1,'a',nil,""].remove #=> [1,'a',nil]
9
+ # [1,'a',nil,""].remove(nil) #=> [1,'a',""]
10
+ # [1,'a',nil,""].remove('a') #=> [1,nil,""]
11
+ #
12
+ # This could probably use a little error catching code (todo).
13
+ def remove(object="")
14
+ if object
15
+ delete(object)
16
+ else
17
+ compact
18
+ end
19
+ self
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ class Binding
2
+ # Returns the class in the binding context
3
+ # this is just a shortcut for self.class
4
+ # You can still get to the old class (of the binding)
5
+ # via #__class__. (NOTE: Is this really a good idea?)
6
+ alias_method( :__class__, :class ) unless respond_to?( :__class__ )
7
+ def class()
8
+ @class ||= eval( "self.class" )
9
+ @class
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ require 'facet/binding/binding' # This comes with the whole nine yards.
2
+ class Binding
3
+ # All missing methods delegate to binding's self.
4
+ #--
5
+ # (is this a good idea, or not?)
6
+ #++
7
+ alias_method( :method_missing_without_delegate, :method_missing )
8
+ def method_missing(sym, *args, &blk)
9
+ if send(:self).respond_to?(sym)
10
+ send(:self).send(sym, *args, &blk)
11
+ else
12
+ method_missing_without_delegate
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,6 @@
1
+ class Binding
2
+ # Returns the Proc that was active, if any, when the binding was created
3
+ #def proc() ... ??? ...
4
+ end
5
+
6
+
@@ -0,0 +1,13 @@
1
+ class Module
2
+ private
3
+ def when_included_provide_class_methods(&bl)
4
+ unless @__class_methods_module
5
+ @__class_methods_module = Module.new
6
+ def self.append_features(base)
7
+ super
8
+ base.extend(@__class_methods_module)
9
+ end
10
+ end
11
+ @__class_methods_module.class_eval(&bl)
12
+ end
13
+ end
@@ -0,0 +1,30 @@
1
+
2
+ module Enumerable
3
+ def [](*args)
4
+ arr = self.to_a
5
+ r = []
6
+ args.each{ |arg|
7
+ case arg
8
+ when Proc
9
+ r.concat arr.find_all &arg
10
+ when Range
11
+ r.concat arr[arg]
12
+ when Numeric
13
+ r << arr[arg]
14
+ else
15
+ raise ArgumentError, "Invalid enumeration"
16
+ #super if defined? super
17
+ end
18
+ }
19
+ r
20
+ end
21
+ end
22
+
23
+
24
+ # --- test ---
25
+
26
+ if $0 == __FILE__
27
+
28
+ p ("a".."z")[2,5,3..4]
29
+
30
+ end
@@ -0,0 +1,412 @@
1
+ #
2
+ # = rand.rb -- library for picking random elements and shuffling
3
+ #
4
+ # Copyright (C) 2004 Ilmari Heikkinen <mailto:kig@misfiring.net>
5
+ #
6
+ # Documentation:: Christian Neukirchen <mailto:chneukirchen@gmail.com>
7
+ #
8
+
9
+
10
+ module Enumerable
11
+ # Choose and return a random element of the Enumerable.
12
+ # [1, 2, 3, 4].pick #=> 2 (or 1, 3, 4)
13
+ def pick
14
+ entries.pick
15
+ end
16
+
17
+ # Return an array of the elements in random order.
18
+ # [1, 2, 3, 4].shuffle #=> [3, 4, 1, 2]
19
+ def shuffle
20
+ entries.shuffle
21
+ end
22
+
23
+ # Calls _block_ once for each element in _self_ in random order,
24
+ # passing that element as a parameter.
25
+ def each_random(&block)
26
+ shuffle.each(&block)
27
+ end
28
+
29
+ # Invokes _block_ once for each element of _self_ in random order.
30
+ # Creates a new array containing the values returned by the block.
31
+ def map_random(&block)
32
+ shuffle.map(&block)
33
+ end
34
+ end
35
+
36
+
37
+ class Array
38
+ # Choose and return a random element of _self_.
39
+ # [1, 2, 3, 4].pick #=> 2 (or 1, 3, 4)
40
+ def pick
41
+ self[pick_index]
42
+ end
43
+
44
+ # Deletes a random element of _self_, returning that element.
45
+ # a = [1, 2, 3, 4]
46
+ # a.pick #=> 2
47
+ # a #=> [1, 3, 4]
48
+ def pick!
49
+ i = pick_index
50
+ rv = self[i]
51
+ delete_at(i)
52
+ rv
53
+ end
54
+
55
+ # Return the index of an random element of _self_.
56
+ # ["foo", "bar", "baz"].pick_index #=> 1 (or 0, or 2)
57
+ def pick_index
58
+ rand(size)
59
+ end
60
+
61
+ # Destructive pick_index. Delete a random element of _self_ and
62
+ # return its index.
63
+ # a = [11, 22, 33, 44]
64
+ # a.pick_index! #=> 2
65
+ # a #=> [11, 22, 44]
66
+ def pick_index!
67
+ i = pick_index
68
+ delete_at i
69
+ i
70
+ end
71
+
72
+ # Return an array of the elements in random order.
73
+ # [11, 22, 33, 44].shuffle #=> [33, 11, 44, 22]
74
+ def shuffle
75
+ sort_by{rand}
76
+ end
77
+
78
+ # Destructive shuffle. Arrange the elements of _self_ in new order.
79
+ # a = [11, 22, 33, 44]
80
+ # a.shuffle!
81
+ # a #=> [33, 11, 44, 22]
82
+ def shuffle!
83
+ sort!{rand <=> 0.5}
84
+ end
85
+ end
86
+
87
+
88
+ class Hash
89
+ # Choose and return a random key-value pair of _self_.
90
+ # {:one => 1, :two => 2, :three => 3}.pick #=> [:one, 1]
91
+ def pick
92
+ k = keys.pick
93
+ [k, self[k]]
94
+ end
95
+
96
+ # Deletes a random key-value pair of _self_, returning that pair.
97
+ # a = {:one => 1, :two => 2, :three => 3}
98
+ # a.pick #=> [:two, 2]
99
+ # a #=> {:one => 1, :three => 3}
100
+ def pick!
101
+ rv = pick
102
+ delete rv.first
103
+ rv
104
+ end
105
+
106
+ # Return a random key of _self_.
107
+ # {:one => 1, :two => 2, :three => 3}.pick_key #=> :three
108
+ def pick_key
109
+ keys.pick
110
+ end
111
+
112
+ # Return a random value of _self_.
113
+ # {:one => 1, :two => 2, :three => 3}.pick_value #=> 3
114
+ def pick_value
115
+ values.pick
116
+ end
117
+
118
+ # Delete a random key-value pair of _self_ and return the key.
119
+ # a = {:one => 1, :two => 2, :three => 3}
120
+ # a.pick_key! #=> :two
121
+ # a #=> {:one => 1, :three => 3}
122
+ def pick_key!
123
+ pick!.first
124
+ end
125
+
126
+ # Delete a random key-value pair of _self_ and return the value.
127
+ # a = {:one => 1, :two => 2, :three => 3}
128
+ # a.pick_value! #=> 2
129
+ # a #=> {:one => 1, :three => 3}
130
+ def pick_value!
131
+ pick!.last
132
+ end
133
+
134
+ # Return the key-value pairs of _self_ with _keys_ and _values_
135
+ # shuffled independedly.
136
+ # {:one => 1, :two => 2, :three => 3}.shuffle_hash_pairs
137
+ # #=> [[:one, 3], [:two, 1], [:three, 2]]
138
+ def shuffle_hash_pairs
139
+ keys.shuffle.zip(values.shuffle)
140
+ end
141
+
142
+ # Return a copy of _self_ with _values_ arranged in random order.
143
+ # {:one => 1, :two => 2, :three => 3}.shuffle_hash
144
+ # #=> {:two=>2, :three=>1, :one=>3}
145
+ def shuffle_hash
146
+ shuffled = {}
147
+ shuffle_hash_pairs.each{|k, v|
148
+ shuffled[k] = v
149
+ }
150
+ shuffled
151
+ end
152
+
153
+ # Destructive shuffle_hash. Arrange the values of _self_ in
154
+ # new, random order.
155
+ # h = {:one => 1, :two => 2, :three => 3}
156
+ # h.shuffle_hash!
157
+ # h #=> {:two=>2, :three=>1, :one=>3}
158
+ def shuffle_hash!
159
+ shuffle_hash_pairs.each{|k, v|
160
+ self[k] = v
161
+ }
162
+ self
163
+ end
164
+ end
165
+
166
+
167
+ class String
168
+ # Return the string with characters arranged in random order.
169
+ # "Ruby rules".shuffle_chars #=> "e lybRsuur"
170
+ def shuffle_chars
171
+ split(//).shuffle.join('')
172
+ end
173
+
174
+ # Destructive shuffle_chars. Arrange the characters of the string
175
+ # in new, random order.
176
+ # s = "Ruby rules".shuffle_chars
177
+ # s.shuffle_chars!
178
+ # s #=> "e lybRsuur"
179
+ def shuffle_chars!
180
+ self[0,size] = shuffle_chars
181
+ end
182
+
183
+ # Return a random byte of _self_.
184
+ # "Ruby rules".pick_byte #=> 121
185
+ def pick_byte
186
+ self[pick_index]
187
+ end
188
+
189
+ # Return a single-character string of a random character in _self_.
190
+ # "Ruby rules".pick_char #=> "y"
191
+ def pick_char
192
+ pick_byte.chr
193
+ end
194
+
195
+ # Destructive pick_char. Delete a random character of the string
196
+ # and return it as a single-character string.
197
+ # s = "Ruby rules"
198
+ # s.pick_char! #=> "y"
199
+ # s #=> "Rub rules"
200
+ def pick_char!
201
+ i = pick_index
202
+ rv = self[i,1]
203
+ self[i,1] = ""
204
+ rv
205
+ end
206
+
207
+ # Destructive pick_byte. Delete a random byte of _self_ and return it.
208
+ # s = "Ruby rules"
209
+ # s.pick_byte! #=> 121
210
+ # s #=> "Rub rules"
211
+ def pick_byte!
212
+ pick_char![0]
213
+ end
214
+
215
+ # Return a random byte index of _self_.
216
+ # "Ruby rules".pick_index #=> 3
217
+ def pick_index
218
+ rand(size)
219
+ end
220
+
221
+ # Destructive pick_index. Delete a random byte of _self_ and
222
+ # return it's index.
223
+ # s = "Ruby rules"
224
+ # s.pick_index #=> 3
225
+ # s #=> "Rub rules"
226
+ def pick_index!
227
+ i = pick_index
228
+ self[i,1] = ""
229
+ i
230
+ end
231
+ end
232
+
233
+
234
+ if __FILE__ == $0
235
+
236
+ require 'test/unit'
237
+
238
+ module RandTestHelpers # :nodoc:
239
+ def picker(enum, enum_check, method, n=50)
240
+ (1..n).all?{ enum_check.include? enum.send(method) }
241
+ end
242
+
243
+ def try_shuffling(enum, enum_c, method)
244
+ rv = nil
245
+ 10.times{
246
+ rv = enum.send method
247
+ break if rv != enum_c
248
+ }
249
+ rv
250
+ end
251
+ end
252
+
253
+
254
+ class RandArrayTest < Test::Unit::TestCase # :nodoc:
255
+ include RandTestHelpers
256
+
257
+ def ar
258
+ (0..99).to_a
259
+ end
260
+
261
+ def test_pick
262
+ a = ar
263
+ results = (0...a.size).map{ a.pick }
264
+ assert true, results.all? {|r| a.include? r }
265
+ end
266
+
267
+ def test_pick!
268
+ a = ar
269
+ results = (0...a.size).map{ a.pick! }
270
+ assert true, results.sort == (0..99).to_a and a.empty?
271
+ end
272
+
273
+ def test_pick_index
274
+ a = ar
275
+ results = (0...a.size).map{ a.pick_index }
276
+ assert true, results.all? {|r| r.between?(0, a.size-1) }
277
+ end
278
+
279
+ def test_pick_index!
280
+ a = ar
281
+ # side-effect-relying block; a.size = a.size-1 after pick_index!,
282
+ # so the picked index max value is the new a.size
283
+ assert true, (0...a.size).all?{ a.pick_index!.between?(0, a.size) } and a.empty?
284
+ end
285
+
286
+ def test_shuffle
287
+ a = ar
288
+ shuffled = try_shuffling(a, a, :shuffle)
289
+ assert true, shuffled.sort == a and shuffled != a
290
+ end
291
+
292
+ def test_shuffle!
293
+ a = ar
294
+ try_shuffling(a, ar, :shuffle!)
295
+ assert true, a != ar and a.sort == ar
296
+ end
297
+ end
298
+
299
+
300
+ class RandHashTest < Test::Unit::TestCase # :nodoc:
301
+ include RandTestHelpers
302
+
303
+ def ha
304
+ Hash[*(1..100).to_a]
305
+ end
306
+
307
+ def test_pick
308
+ assert true, picker(ha, ha.entries, :pick)
309
+ end
310
+
311
+ def test_pick!
312
+ h = ha
313
+ assert true, picker(h, ha.entries, :pick!) and h.empty?
314
+ end
315
+
316
+ def test_pick_key
317
+ assert true, picker(ha, ha.keys, :pick_key)
318
+ end
319
+
320
+ def test_pick_key!
321
+ h = ha
322
+ assert true, picker(h, ha.keys, :pick_key!) and h.empty?
323
+ end
324
+
325
+ def test_pick_value
326
+ assert true, picker(ha, ha.values, :pick_value)
327
+ end
328
+
329
+ def test_pick_value!
330
+ h = ha
331
+ assert true, picker(h, ha.values, :pick_value!) and h.empty?
332
+ end
333
+
334
+ def test_shuffle_hash
335
+ h = ha
336
+ hs = try_shuffling(ha, h, :shuffle_hash)
337
+ assert true, hs != h and (hs.keys + hs.values).sort == (h.keys + h.values).sort
338
+ end
339
+
340
+ def test_shuffle_hash!
341
+ h = ha
342
+ hs = ha
343
+ try_shuffling(hs, h, :shuffle_hash!)
344
+ assert true, hs != h and (hs.keys + hs.values).sort == (h.keys + h.values).sort
345
+ end
346
+
347
+ def test_shuffle
348
+ h = ha
349
+ hs = try_shuffling(ha, h, :shuffle)
350
+ assert true, hs != h and hs.entries.sort == h.entries.sort
351
+ end
352
+ end
353
+
354
+
355
+ class RandStringTest < Test::Unit::TestCase # :nodoc:
356
+ include RandTestHelpers
357
+
358
+ def self.pick_tests(endings)
359
+ endings.each{|ending, compare_str_f|
360
+ define_method("test_pick#{ending}"){
361
+ s = str
362
+ assert true, picker(s, instance_eval(&compare_str_f), "pick#{ending}", s.size)
363
+ }
364
+ }
365
+ end
366
+
367
+ def self.pick_tests!(endings)
368
+ endings.each{|ending, compare_str_f|
369
+ define_method("test_pick#{ending}!"){
370
+ s = str
371
+ assert true, picker(s, instance_eval(&compare_str_f), "pick#{ending}!", s.size) and s.empty?
372
+ }
373
+ }
374
+ end
375
+
376
+ def str
377
+ (("a".."z").to_s + "\n") * 10
378
+ end
379
+
380
+ def test_shuffle
381
+ s = str
382
+ ss = try_shuffling(s, s.to_a, :shuffle)
383
+ assert true, ss != s.to_a and ss.sort == s.to_a.sort
384
+ end
385
+
386
+ def test_shuffle_chars
387
+ s = str
388
+ ss = try_shuffling(s, s.split(//), :shuffle_chars)
389
+ assert true, ss != s and ss.split(//).sort == s.split(//).sort
390
+ end
391
+
392
+ def test_shuffle_chars!
393
+ s = str
394
+ ss = str
395
+ try_shuffling(ss, s.split(//), :shuffle_chars!)
396
+ assert true, ss != s and ss.split(//).sort == s.split(//).sort
397
+ end
398
+
399
+ pick_tests({ "" => lambda{str.to_a},
400
+ :_char => lambda{str.split(//)},
401
+ :_byte => lambda{str.split(//).map{|c| c[0]}},
402
+ :_index => lambda{(0...str.size).to_a}
403
+ })
404
+
405
+ pick_tests!({ :_char => lambda{str.split(//)},
406
+ :_byte => lambda{str.split(//).map{|c| c[0]}},
407
+ :_index => lambda{(0...str.size).to_a}
408
+ })
409
+ end
410
+
411
+
412
+ end #if