facets 1.7.46 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (764) hide show
  1. data/PROJECT +41 -23
  2. data/Rakefile +164 -0
  3. data/VERSION +1 -1
  4. data/demo/cuts/benchmark.rb +71 -0
  5. data/demo/cuts/override.rb +33 -0
  6. data/doc/AUTHORS +1 -0
  7. data/doc/{CHANGELOG.1 → HISTORY.1} +0 -0
  8. data/doc/HISTORY.txt +798 -0
  9. data/doc/LATEST +240 -0
  10. data/lib/facet/ann.rb +1 -0
  11. data/lib/facet/ann_attr.rb +1 -0
  12. data/lib/facet/arguments.rb +1 -0
  13. data/lib/facet/array/index.rb +1 -0
  14. data/lib/facet/array/to_path.rb +1 -0
  15. data/lib/facet/autoscript.rb +1 -0
  16. data/lib/facet/autovivify.rb +1 -0
  17. data/lib/facet/behvior.rb +1 -0
  18. data/lib/facet/buildingblock.rb +1 -0
  19. data/lib/facet/class/class_load.rb +1 -0
  20. data/lib/facet/class/class_require.rb +1 -0
  21. data/lib/facet/config/inspect.rb +1 -0
  22. data/lib/facet/consoleutils.rb +1 -0
  23. data/lib/facet/dependency.rb +1 -0
  24. data/lib/facet/dir/self/multiglob.rb +1 -0
  25. data/lib/facet/dir/self/multiglob_recurse.rb +1 -0
  26. data/lib/facet/dir/self/multiglob_sum.rb +1 -0
  27. data/lib/facet/enumerable/injecting.rb +1 -0
  28. data/lib/facet/file/self/yaml.rb +1 -0
  29. data/lib/facet/fileutils/compress.rb +1 -0
  30. data/lib/facet/fileutils/stage.rb +1 -0
  31. data/lib/facet/fileutils/staged.rb +1 -0
  32. data/lib/facet/hash/insert.rb +1 -0
  33. data/lib/facet/hash/op_add.rb +1 -0
  34. data/lib/facet/hash/op_and.rb +1 -0
  35. data/lib/facet/hash/op_mul.rb +1 -0
  36. data/lib/facet/hash/op_or.rb +1 -0
  37. data/lib/facet/hash/op_sub.rb +1 -0
  38. data/lib/facet/hash/pairs_at.rb +1 -0
  39. data/lib/facet/hash/rekey.rb +1 -0
  40. data/lib/facet/htmlfilter.rb +1 -0
  41. data/lib/facet/integer/to_roman.rb +1 -0
  42. data/lib/facet/kernel/ask.rb +1 -0
  43. data/lib/facet/kernel/class_def.rb +1 -0
  44. data/lib/facet/kernel/daemonize.rb +1 -0
  45. data/lib/facet/kernel/enable_warnings.rb +1 -0
  46. data/lib/facet/kernel/instance_class.rb +1 -0
  47. data/lib/facet/kernel/instance_values.rb +1 -0
  48. data/lib/facet/kernel/meta_alias.rb +1 -0
  49. data/lib/facet/kernel/meta_class.rb +1 -0
  50. data/lib/facet/kernel/meta_def.rb +1 -0
  51. data/lib/facet/kernel/meta_eval.rb +1 -0
  52. data/lib/facet/kernel/object_send.rb +1 -0
  53. data/lib/facet/kernel/populate.rb +1 -0
  54. data/lib/facet/kernel/qua_class.rb +1 -0
  55. data/lib/facet/kernel/silence_stream.rb +1 -0
  56. data/lib/facet/kernel/super_at.rb +1 -0
  57. data/lib/facet/kernel/supress.rb +1 -0
  58. data/lib/facet/kernel/with.rb +1 -0
  59. data/lib/facet/kernel/yaml.rb +1 -0
  60. data/lib/facet/minitar.rb +1 -0
  61. data/lib/facet/module/alias_accessor.rb +1 -0
  62. data/lib/facet/module/include_and_extend.rb +1 -0
  63. data/lib/facet/module/include_function_module.rb +1 -0
  64. data/lib/facet/module/module_load.rb +1 -0
  65. data/lib/facet/module/module_method.rb +1 -0
  66. data/lib/facet/module/module_require.rb +1 -0
  67. data/lib/facet/module/new.rb +1 -0
  68. data/lib/facet/module/prepend.rb +1 -0
  69. data/lib/facet/openhash.rb +1 -0
  70. data/lib/facet/ostruct/instance_delegate.rb +1 -0
  71. data/lib/facet/populate.rb +1 -0
  72. data/lib/facet/proc/bind.rb +1 -0
  73. data/lib/facet/proc/to_h.rb +1 -0
  74. data/lib/facet/proc/update.rb +1 -0
  75. data/lib/facet/script.rb +1 -0
  76. data/lib/facet/string/rewrite.rb +1 -0
  77. data/lib/facet/symbol/chomp.rb +1 -0
  78. data/lib/facet/uploadutils.rb +1 -0
  79. data/lib/facet/version_number.rb +1 -0
  80. data/lib/facets.rb +3 -207
  81. data/lib/facets/automatic.rb +29 -0
  82. data/lib/facets/core/all.rb +1 -1
  83. data/lib/facets/core/array/index.rb +15 -0
  84. data/lib/facets/core/array/to_path.rb +11 -0
  85. data/lib/facets/core/class/class_load.rb +3 -0
  86. data/lib/facets/core/class/class_require.rb +3 -0
  87. data/lib/facets/core/config/inspect.rb +9 -0
  88. data/lib/facets/core/dir/self/multiglob.rb +32 -0
  89. data/lib/facets/core/dir/self/multiglob_recurse.rb +5 -0
  90. data/lib/facets/core/dir/self/multiglob_sum.rb +40 -0
  91. data/lib/facets/core/enumerable/each_slice.rb +1 -0
  92. data/lib/facets/core/enumerable/every.rb +2 -2
  93. data/lib/facets/core/enumerable/injecting.rb +22 -0
  94. data/lib/facets/core/enumerable/partition_by.rb +10 -8
  95. data/lib/facets/core/file/self/yaml.rb +16 -0
  96. data/lib/facets/core/fileutils/compress.rb +154 -0
  97. data/lib/facets/core/fileutils/stage.rb +230 -0
  98. data/lib/facets/core/fileutils/staged.rb +3 -0
  99. data/lib/facets/core/hash/insert.rb +20 -0
  100. data/lib/facets/core/hash/op_add.rb +29 -0
  101. data/lib/facets/core/hash/op_and.rb +37 -0
  102. data/lib/facets/core/hash/op_mul.rb +17 -0
  103. data/lib/facets/core/hash/op_or.rb +2 -0
  104. data/lib/facets/core/hash/op_sub.rb +2 -0
  105. data/lib/facets/core/hash/pairs_at.rb +17 -0
  106. data/lib/facets/core/hash/rekey.rb +89 -0
  107. data/lib/facets/core/hash/reverse_merge.rb +6 -3
  108. data/lib/facets/core/inflect.rb +5 -14
  109. data/lib/facets/core/integer/to_roman.rb +20 -0
  110. data/lib/facets/core/kernel/as.rb +46 -29
  111. data/lib/facets/core/kernel/ask.rb +14 -0
  112. data/lib/facets/core/kernel/class_def.rb +10 -0
  113. data/lib/facets/core/kernel/daemonize.rb +21 -0
  114. data/lib/facets/core/kernel/enable_warnings.rb +14 -0
  115. data/lib/facets/core/kernel/{quaclass.rb → instance_class.rb} +7 -6
  116. data/lib/facets/core/kernel/instance_exec.rb +12 -10
  117. data/lib/facets/core/kernel/instance_values.rb +12 -0
  118. data/lib/facets/core/kernel/meta_alias.rb +14 -0
  119. data/lib/facets/core/kernel/meta_class.rb +38 -0
  120. data/lib/facets/core/kernel/meta_def.rb +14 -0
  121. data/lib/facets/core/kernel/meta_eval.rb +16 -0
  122. data/lib/facets/core/kernel/metaclass.rb +8 -12
  123. data/lib/facets/core/kernel/object_send.rb +21 -0
  124. data/lib/facets/core/kernel/populate.rb +39 -0
  125. data/lib/facets/core/kernel/qua_class.rb +41 -0
  126. data/lib/facets/core/kernel/returning.rb +7 -47
  127. data/lib/facets/core/kernel/send_as.rb +10 -4
  128. data/lib/facets/core/kernel/set_with.rb +25 -7
  129. data/lib/facets/core/kernel/silence_stream.rb +22 -0
  130. data/lib/facets/core/kernel/singleton.rb +1 -2
  131. data/lib/facets/core/kernel/{superior.rb → super_at.rb} +4 -1
  132. data/lib/facets/core/kernel/supermethod.rb +1 -1
  133. data/lib/facets/core/kernel/supress.rb +15 -0
  134. data/lib/facets/core/kernel/with.rb +57 -0
  135. data/lib/facets/core/kernel/yaml.rb +7 -0
  136. data/lib/facets/core/module/alias_accessor.rb +19 -0
  137. data/lib/facets/core/module/alias_method_chain.rb +33 -0
  138. data/lib/facets/core/module/class_extension.rb +1 -1
  139. data/lib/facets/core/module/include_and_extend.rb +10 -0
  140. data/lib/facets/core/module/include_as.rb +17 -16
  141. data/lib/facets/core/module/include_function_module.rb +13 -0
  142. data/lib/facets/core/module/inject.rb +1 -0
  143. data/lib/facets/core/module/memoize.rb +4 -3
  144. data/lib/facets/core/module/module_load.rb +51 -0
  145. data/lib/facets/core/module/module_method.rb +13 -0
  146. data/lib/facets/core/module/module_require.rb +3 -0
  147. data/lib/facets/core/module/namespace.rb +96 -36
  148. data/lib/facets/core/module/new.rb +37 -0
  149. data/lib/facets/core/module/prepend.rb +63 -0
  150. data/lib/facets/core/module/self/op_add.rb +16 -0
  151. data/lib/facets/core/ostruct.rb +6 -4
  152. data/lib/facets/core/ostruct/__merge__.rb +3 -50
  153. data/lib/facets/core/ostruct/__table__.rb +3 -10
  154. data/lib/facets/core/ostruct/__update__.rb +29 -0
  155. data/lib/facets/core/ostruct/instance_delegate.rb +58 -0
  156. data/lib/facets/core/ostruct/op_fetch.rb +18 -0
  157. data/lib/facets/core/ostruct/op_store.rb +3 -40
  158. data/lib/facets/core/proc/bind.rb +35 -0
  159. data/lib/facets/core/proc/to_h.rb +27 -0
  160. data/lib/facets/core/proc/to_method.rb +15 -29
  161. data/lib/facets/core/proc/update.rb +11 -0
  162. data/lib/facets/core/string/dresner.rb +1 -1
  163. data/lib/facets/core/string/rewrite.rb +34 -0
  164. data/lib/facets/core/symbol/chomp.rb +9 -0
  165. data/lib/facets/core/time/stamp.rb +32 -16
  166. data/lib/facets/more/ann.rb +249 -0
  167. data/lib/facets/more/ann_attr.rb +164 -0
  168. data/lib/facets/more/arguments.rb +479 -0
  169. data/lib/facets/more/autoscript.rb +34 -0
  170. data/lib/facets/more/autovivify.rb +16 -0
  171. data/lib/facets/more/basicobject.rb +67 -54
  172. data/lib/facets/more/behvior.rb +59 -0
  173. data/lib/facets/more/buildingblock.rb +192 -0
  174. data/lib/facets/more/command.rb +332 -146
  175. data/lib/facets/more/consoleutils.rb +45 -0
  176. data/lib/facets/more/cookie.rb +5 -2
  177. data/lib/facets/more/dependency.rb +199 -0
  178. data/lib/facets/more/dictionary.rb +49 -11
  179. data/lib/facets/more/functor.rb +33 -27
  180. data/lib/facets/more/htmlbuilder.rb +8 -18
  181. data/lib/facets/more/htmlfilter.rb +566 -0
  182. data/lib/facets/more/htmlhelper.rb +3 -8
  183. data/lib/facets/more/http.rb +0 -1
  184. data/lib/facets/more/httpaccess.rb +1 -1
  185. data/lib/facets/more/instance_intercept.rb +1 -1
  186. data/lib/facets/more/main_as_module.rb +2 -0
  187. data/lib/facets/more/methodfilter.rb +4 -0
  188. data/lib/facets/more/minitar.rb +979 -0
  189. data/lib/facets/more/multiton.rb +43 -24
  190. data/lib/facets/more/opencascade.rb +3 -3
  191. data/lib/facets/more/openhash.rb +350 -0
  192. data/lib/facets/more/openobject.rb +9 -306
  193. data/lib/facets/more/populate.rb +37 -0
  194. data/lib/facets/more/script.rb +157 -0
  195. data/lib/facets/more/uploadutils.rb +207 -0
  196. data/lib/facets/more/version_number.rb +98 -0
  197. data/lib/facets/more/xmlbuilder.rb +26 -21
  198. data/lib/facets/more/xmlhelper.rb +1 -1
  199. data/lib/facets/sys.rb +212 -0
  200. data/lib/facets/{more → yore}/annattr.rb +1 -1
  201. data/lib/facets/{more → yore}/annotation.rb +38 -32
  202. data/lib/facets/yore/builderobject.rb +222 -0
  203. data/lib/facets/{core → yore}/kernel/own.rb +0 -0
  204. data/lib/facets/{core → yore}/kernel/require_facet.rb +0 -0
  205. data/lib/facets/yore/module/inject.rb +9 -0
  206. data/lib/facets/yore/module/namespace.rb +62 -0
  207. data/setup.rb +2 -2
  208. data/test/special/main_as_module.rb +14 -0
  209. data/work/README +42 -0
  210. data/work/TODO +73 -0
  211. data/work/bin/minitar +3 -0
  212. data/work/bin/minitar.rb +814 -0
  213. data/work/core/array/at_rand.rb +95 -0
  214. data/work/core/array/each_slice.rb +23 -0
  215. data/work/core/array/pick_values.rb +32 -0
  216. data/work/core/array/rand_indexes.rb +33 -0
  217. data/work/core/binding/class.rb +11 -0
  218. data/work/core/binding/delegate-binding.rb +19 -0
  219. data/work/core/binding/delegate.rb +15 -0
  220. data/work/core/binding/proc.rb +6 -0
  221. data/work/core/class/to_module.rb +3 -0
  222. data/work/core/enumerable/op_fetch.rb +30 -0
  223. data/work/core/fileutils/cptouch.rb +20 -0
  224. data/work/core/fileutils/nl_convert.rb +133 -0
  225. data/work/core/io/expect.rb +127 -0
  226. data/work/core/join_with.rb +13 -0
  227. data/work/core/kernel/call_line.rb +15 -0
  228. data/work/core/kernel/does.rb +7 -0
  229. data/work/core/kernel/message.rb +6 -0
  230. data/work/core/kernel/query.rb +15 -0
  231. data/work/core/kernel/taint.rb +10 -0
  232. data/work/core/logger/clean_logger.rb +10 -0
  233. data/work/core/module/attr-old.rb +308 -0
  234. data/work/core/module/attr.rb +98 -0
  235. data/work/core/module/attr_xxx.rb +22 -0
  236. data/work/core/module/by_regexp.rb +21 -0
  237. data/work/core/module/cast.rb +64 -0
  238. data/work/core/module/class_attribute_accessors.rb +57 -0
  239. data/work/core/module/inherit.rb +99 -0
  240. data/work/core/module/inherit0.rb +59 -0
  241. data/work/core/module/let.rb +51 -0
  242. data/work/core/module/meta_attr.rb +60 -0
  243. data/work/core/module/module_attribute_accessors.rb +57 -0
  244. data/work/core/module/permissions.rb +32 -0
  245. data/work/core/module/preserved.rb +108 -0
  246. data/work/core/module/sattr_accessor.rb +1 -0
  247. data/work/core/module/sattr_reader.rb +1 -0
  248. data/work/core/module/sattr_setter.rb +1 -0
  249. data/work/core/module/sattr_tester.rb +1 -0
  250. data/work/core/module/sattr_writer.rb +1 -0
  251. data/work/core/module/tc_attr.rb +107 -0
  252. data/work/core/module/to_module.rb +37 -0
  253. data/work/core/module/version.rb +23 -0
  254. data/work/core/string/frequency.rb +40 -0
  255. data/work/core/string/op_add.rb +24 -0
  256. data/work/core/string/op_div.rb +15 -0
  257. data/work/core/string/pred.rb +217 -0
  258. data/work/core/string/probability.rb +35 -0
  259. data/work/core/string/succ_distance.rb +112 -0
  260. data/work/core/string/to_arr.rb +57 -0
  261. data/work/core/string/to_ary.rb +12 -0
  262. data/work/core/string/word_wrap.rb +62 -0
  263. data/work/misc/calibre/ProjectInfo.annotation +46 -0
  264. data/work/misc/calibre/ProjectInfo.ansicode +33 -0
  265. data/work/misc/calibre/ProjectInfo.association +34 -0
  266. data/work/misc/calibre/ProjectInfo.basicobject +36 -0
  267. data/work/misc/calibre/ProjectInfo.bbcode +34 -0
  268. data/work/misc/calibre/ProjectInfo.binaryreader +35 -0
  269. data/work/misc/calibre/ProjectInfo.bitmask +33 -0
  270. data/work/misc/calibre/ProjectInfo.classinherit +36 -0
  271. data/work/misc/calibre/ProjectInfo.classmethods +36 -0
  272. data/work/misc/calibre/ProjectInfo.cloneable +33 -0
  273. data/work/misc/calibre/ProjectInfo.consoleapp +35 -0
  274. data/work/misc/calibre/ProjectInfo.coroutine +37 -0
  275. data/work/misc/calibre/ProjectInfo.crypt +33 -0
  276. data/work/misc/calibre/ProjectInfo.dictionary +40 -0
  277. data/work/misc/calibre/ProjectInfo.downloader +39 -0
  278. data/work/misc/calibre/ProjectInfo.enumerablepass +35 -0
  279. data/work/misc/calibre/ProjectInfo.expirable +37 -0
  280. data/work/misc/calibre/ProjectInfo.floatstring +35 -0
  281. data/work/misc/calibre/ProjectInfo.functor +40 -0
  282. data/work/misc/calibre/ProjectInfo.heap +33 -0
  283. data/work/misc/calibre/ProjectInfo.inheritor +36 -0
  284. data/work/misc/calibre/ProjectInfo.interval +36 -0
  285. data/work/misc/calibre/ProjectInfo.lisp +38 -0
  286. data/work/misc/calibre/ProjectInfo.lrucache +34 -0
  287. data/work/misc/calibre/ProjectInfo.mathconstants +41 -0
  288. data/work/misc/calibre/ProjectInfo.methodprobe +38 -0
  289. data/work/misc/calibre/ProjectInfo.mock +34 -0
  290. data/work/misc/calibre/ProjectInfo.multiton +36 -0
  291. data/work/misc/calibre/ProjectInfo.nackclass +33 -0
  292. data/work/misc/calibre/ProjectInfo.nilcomparable +35 -0
  293. data/work/misc/calibre/ProjectInfo.nullclass +35 -0
  294. data/work/misc/calibre/ProjectInfo.one +37 -0
  295. data/work/misc/calibre/ProjectInfo.openobject +39 -0
  296. data/work/misc/calibre/ProjectInfo.paramix +38 -0
  297. data/work/misc/calibre/ProjectInfo.pool +33 -0
  298. data/work/misc/calibre/ProjectInfo.progressbar +37 -0
  299. data/work/misc/calibre/ProjectInfo.reference +36 -0
  300. data/work/misc/calibre/ProjectInfo.semaphore +36 -0
  301. data/work/misc/calibre/ProjectInfo.stateparser +39 -0
  302. data/work/misc/calibre/ProjectInfo.statichash +33 -0
  303. data/work/misc/calibre/ProjectInfo.system +34 -0
  304. data/work/misc/calibre/ProjectInfo.tagiterator +36 -0
  305. data/work/misc/calibre/ProjectInfo.timer +35 -0
  306. data/work/misc/calibre/ProjectInfo.tracepoint +37 -0
  307. data/work/misc/calibre/ProjectInfo.tuple +36 -0
  308. data/work/misc/calibre/ProjectInfo.uniheritable +34 -0
  309. data/work/misc/calibre/ProjectInfo.units +34 -0
  310. data/work/misc/calibre/ProjectInfo.yamlstruct +34 -0
  311. data/work/more/annotation-rw.rb +217 -0
  312. data/work/more/aobject.rb +132 -0
  313. data/work/more/autohash.rb +67 -0
  314. data/work/more/cache.rb +189 -0
  315. data/work/more/class_inheritable_attributes.rb +120 -0
  316. data/work/more/commandrunner.rb +101 -0
  317. data/work/more/daemon.rb +70 -0
  318. data/work/more/debugger.rb +167 -0
  319. data/work/more/detach.rb +423 -0
  320. data/work/more/enumtype.rb +115 -0
  321. data/work/more/ioreactor.rb +671 -0
  322. data/work/more/logger_sing.rb +207 -0
  323. data/work/more/must.rb +37 -0
  324. data/work/more/old-tkxml.rb +189 -0
  325. data/work/more/pairhash.rb +55 -0
  326. data/work/more/password.rb +80 -0
  327. data/work/more/print_exception.rb +35 -0
  328. data/work/more/rand.rb +412 -0
  329. data/work/more/range.rb +383 -0
  330. data/work/more/sanitize.rb +48 -0
  331. data/work/more/superstruct.rb +735 -0
  332. data/work/more/tag.rb +31 -0
  333. data/work/more/timer.rb +164 -0
  334. data/work/op_rshift.rb +87 -0
  335. data/work/pore/autorequire.rb +83 -0
  336. data/work/pore/basefactory.rb +40 -0
  337. data/work/pore/hash/each.rb +76 -0
  338. data/work/pore/merge3.rb +765 -0
  339. data/work/pore/superann.rb +134 -0
  340. data/work/pore/sys.rb +186 -0
  341. data/work/pore/utils.rb +518 -0
  342. data/work/yore/HashAquisition.rb +36 -0
  343. data/work/yore/Rakefile.old +181 -0
  344. data/work/yore/Reapfile +63 -0
  345. data/work/yore/annotation.rb +489 -0
  346. data/{test/lib/facets/more/test_annotation.rb → work/yore/annotation2.rb} +166 -18
  347. data/work/yore/commandutils.rb +379 -0
  348. data/work/yore/openobject.rb +298 -0
  349. data/work/yore/reap.rb +184 -0
  350. data/work/yore/reap.yml +47 -0
  351. data/work/yore/taskable-old.rb +519 -0
  352. data/{lib/facets/more → work/yore}/taskable.rb +176 -17
  353. metadata +1164 -1427
  354. data/doc/CHANGELOG +0 -146
  355. data/lib/facet/annattr.rb +0 -1
  356. data/lib/facet/annotation.rb +0 -1
  357. data/lib/facet/builderobject.rb +0 -1
  358. data/lib/facet/kernel/own.rb +0 -1
  359. data/lib/facet/kernel/quaclass.rb +0 -1
  360. data/lib/facet/kernel/require_facet.rb +0 -1
  361. data/lib/facet/kernel/superior.rb +0 -1
  362. data/lib/facet/one.rb +0 -1
  363. data/lib/facet/ostruct/instance.rb +0 -1
  364. data/lib/facet/predicate.rb +0 -1
  365. data/lib/facet/taskable.rb +0 -1
  366. data/lib/facets/core/ostruct/instance.rb +0 -37
  367. data/lib/facets/more/builderobject.rb +0 -97
  368. data/lib/facets/more/one.rb +0 -153
  369. data/lib/facets/more/predicate.rb +0 -184
  370. data/test/lib/facets/core/array/test_at_rand.rb +0 -34
  371. data/test/lib/facets/core/array/test_delete_unless.rb +0 -28
  372. data/test/lib/facets/core/array/test_delete_values.rb +0 -28
  373. data/test/lib/facets/core/array/test_delete_values_at.rb +0 -31
  374. data/test/lib/facets/core/array/test_first.rb +0 -46
  375. data/test/lib/facets/core/array/test_head.rb +0 -42
  376. data/test/lib/facets/core/array/test_last_index.rb +0 -26
  377. data/test/lib/facets/core/array/test_merge.rb +0 -35
  378. data/test/lib/facets/core/array/test_mid.rb +0 -33
  379. data/test/lib/facets/core/array/test_middle.rb +0 -29
  380. data/test/lib/facets/core/array/test_op_fetch.rb +0 -35
  381. data/test/lib/facets/core/array/test_pick.rb +0 -40
  382. data/test/lib/facets/core/array/test_pos.rb +0 -28
  383. data/test/lib/facets/core/array/test_pot.rb +0 -28
  384. data/test/lib/facets/core/array/test_pull.rb +0 -28
  385. data/test/lib/facets/core/array/test_rand_index.rb +0 -29
  386. data/test/lib/facets/core/array/test_rand_subset.rb +0 -29
  387. data/test/lib/facets/core/array/test_range.rb +0 -32
  388. data/test/lib/facets/core/array/test_rotate.rb +0 -36
  389. data/test/lib/facets/core/array/test_select.rb +0 -28
  390. data/test/lib/facets/core/array/test_shuffle.rb +0 -35
  391. data/test/lib/facets/core/array/test_thru.rb +0 -27
  392. data/test/lib/facets/core/array/test_to_b.rb +0 -27
  393. data/test/lib/facets/core/array/test_to_h.rb +0 -33
  394. data/test/lib/facets/core/array/test_to_hash.rb +0 -27
  395. data/test/lib/facets/core/binding/self/test_of_caller.rb +0 -35
  396. data/test/lib/facets/core/binding/test___LINE__.rb +0 -43
  397. data/test/lib/facets/core/binding/test_call_stack.rb +0 -34
  398. data/test/lib/facets/core/binding/test_called.rb +0 -30
  399. data/test/lib/facets/core/binding/test_caller.rb +0 -35
  400. data/test/lib/facets/core/binding/test_defined.rb +0 -34
  401. data/test/lib/facets/core/binding/test_eval.rb +0 -34
  402. data/test/lib/facets/core/binding/test_local_variables.rb +0 -34
  403. data/test/lib/facets/core/binding/test_method_name.rb +0 -34
  404. data/test/lib/facets/core/binding/test_op_fetch.rb +0 -34
  405. data/test/lib/facets/core/binding/test_op_store.rb +0 -35
  406. data/test/lib/facets/core/binding/test_self.rb +0 -34
  407. data/test/lib/facets/core/class/test_cattr.rb +0 -63
  408. data/test/lib/facets/core/class/test_descendents.rb +0 -30
  409. data/test/lib/facets/core/class/test_method_name.rb +0 -26
  410. data/test/lib/facets/core/class/test_remove_descendents.rb +0 -32
  411. data/test/lib/facets/core/class/test_unix_path.rb +0 -26
  412. data/test/lib/facets/core/comparable/test_at_least.rb +0 -34
  413. data/test/lib/facets/core/comparable/test_clip.rb +0 -44
  414. data/test/lib/facets/core/comparable/test_cmp.rb +0 -28
  415. data/test/lib/facets/core/continuation/self/test_create.rb +0 -26
  416. data/test/lib/facets/core/date/test_days_in_month.rb +0 -30
  417. data/test/lib/facets/core/date/test_days_of_month.rb +0 -30
  418. data/test/lib/facets/core/date/test_stamp.rb +0 -38
  419. data/test/lib/facets/core/date/test_to_date.rb +0 -30
  420. data/test/lib/facets/core/date/test_to_s.rb +0 -30
  421. data/test/lib/facets/core/date/test_to_time.rb +0 -30
  422. data/test/lib/facets/core/dir/self/test_ancestor.rb +0 -26
  423. data/test/lib/facets/core/dir/self/test_ascend.rb +0 -41
  424. data/test/lib/facets/core/enumerable/self/test_combinations.rb +0 -46
  425. data/test/lib/facets/core/enumerable/self/test_cross.rb +0 -31
  426. data/test/lib/facets/core/enumerable/test_collect_with_index.rb +0 -27
  427. data/test/lib/facets/core/enumerable/test_commonality.rb +0 -31
  428. data/test/lib/facets/core/enumerable/test_compact_collect.rb +0 -27
  429. data/test/lib/facets/core/enumerable/test_count.rb +0 -38
  430. data/test/lib/facets/core/enumerable/test_cross.rb +0 -30
  431. data/test/lib/facets/core/enumerable/test_each_by.rb +0 -71
  432. data/test/lib/facets/core/enumerable/test_each_combination.rb +0 -29
  433. data/test/lib/facets/core/enumerable/test_each_pair.rb +0 -29
  434. data/test/lib/facets/core/enumerable/test_each_slice.rb +0 -57
  435. data/test/lib/facets/core/enumerable/test_each_unique_pair.rb +0 -29
  436. data/test/lib/facets/core/enumerable/test_eachn.rb +0 -34
  437. data/test/lib/facets/core/enumerable/test_entropy.rb +0 -26
  438. data/test/lib/facets/core/enumerable/test_every.rb +0 -35
  439. data/test/lib/facets/core/enumerable/test_ew.rb +0 -31
  440. data/test/lib/facets/core/enumerable/test_filter_collect.rb +0 -31
  441. data/test/lib/facets/core/enumerable/test_find_collisions.rb +0 -30
  442. data/test/lib/facets/core/enumerable/test_frequency.rb +0 -27
  443. data/test/lib/facets/core/enumerable/test_graph.rb +0 -30
  444. data/test/lib/facets/core/enumerable/test_ideal_entropy.rb +0 -27
  445. data/test/lib/facets/core/enumerable/test_none.rb +0 -33
  446. data/test/lib/facets/core/enumerable/test_occur.rb +0 -30
  447. data/test/lib/facets/core/enumerable/test_one.rb +0 -35
  448. data/test/lib/facets/core/enumerable/test_op_pow.rb +0 -27
  449. data/test/lib/facets/core/enumerable/test_partition_by.rb +0 -31
  450. data/test/lib/facets/core/enumerable/test_permutation.rb +0 -29
  451. data/test/lib/facets/core/enumerable/test_permute.rb +0 -29
  452. data/test/lib/facets/core/enumerable/test_probability.rb +0 -27
  453. data/test/lib/facets/core/enumerable/test_to_h.rb +0 -27
  454. data/test/lib/facets/core/enumerable/test_uniq_by.rb +0 -28
  455. data/test/lib/facets/core/file/self/test_create.rb +0 -44
  456. data/test/lib/facets/core/file/self/test_open_as_string.rb +0 -50
  457. data/test/lib/facets/core/file/self/test_read_list.rb +0 -40
  458. data/test/lib/facets/core/file/self/test_sanitize.rb +0 -46
  459. data/test/lib/facets/core/file/self/test_split_all.rb +0 -27
  460. data/test/lib/facets/core/float/test_round_at.rb +0 -46
  461. data/test/lib/facets/core/float/test_round_to.rb +0 -46
  462. data/test/lib/facets/core/hash/self/test_zipnew.rb +0 -28
  463. data/test/lib/facets/core/hash/test_alias.rb +0 -31
  464. data/test/lib/facets/core/hash/test_assert_has_keys.rb +0 -27
  465. data/test/lib/facets/core/hash/test_assert_has_only_keys.rb +0 -27
  466. data/test/lib/facets/core/hash/test_at.rb +0 -28
  467. data/test/lib/facets/core/hash/test_collate.rb +0 -35
  468. data/test/lib/facets/core/hash/test_each_with_index.rb +0 -29
  469. data/test/lib/facets/core/hash/test_each_with_key.rb +0 -29
  470. data/test/lib/facets/core/hash/test_graph.rb +0 -28
  471. data/test/lib/facets/core/hash/test_has_keys.rb +0 -27
  472. data/test/lib/facets/core/hash/test_has_only_keys.rb +0 -27
  473. data/test/lib/facets/core/hash/test_inverse.rb +0 -30
  474. data/test/lib/facets/core/hash/test_normalize_keys.rb +0 -34
  475. data/test/lib/facets/core/hash/test_op_fetch.rb +0 -111
  476. data/test/lib/facets/core/hash/test_op_lshift.rb +0 -29
  477. data/test/lib/facets/core/hash/test_rand_key.rb +0 -27
  478. data/test/lib/facets/core/hash/test_rand_pair.rb +0 -27
  479. data/test/lib/facets/core/hash/test_rand_value.rb +0 -27
  480. data/test/lib/facets/core/hash/test_replace_each.rb +0 -29
  481. data/test/lib/facets/core/hash/test_shuffle.rb +0 -32
  482. data/test/lib/facets/core/hash/test_slice.rb +0 -27
  483. data/test/lib/facets/core/hash/test_stringify_keys.rb +0 -34
  484. data/test/lib/facets/core/hash/test_swap.rb +0 -27
  485. data/test/lib/facets/core/hash/test_swapkey.rb +0 -29
  486. data/test/lib/facets/core/hash/test_symbolize_keys.rb +0 -34
  487. data/test/lib/facets/core/hash/test_to_h.rb +0 -27
  488. data/test/lib/facets/core/hash/test_to_ostruct.rb +0 -30
  489. data/test/lib/facets/core/hash/test_to_ostruct_recurse.rb +0 -44
  490. data/test/lib/facets/core/hash/test_traverse.rb +0 -37
  491. data/test/lib/facets/core/hash/test_update_each.rb +0 -29
  492. data/test/lib/facets/core/hash/test_update_keys.rb +0 -28
  493. data/test/lib/facets/core/hash/test_update_values.rb +0 -28
  494. data/test/lib/facets/core/hash/test_weave.rb +0 -29
  495. data/test/lib/facets/core/integer/test_factorial.rb +0 -30
  496. data/test/lib/facets/core/integer/test_multiple.rb +0 -43
  497. data/test/lib/facets/core/integer/test_of.rb +0 -28
  498. data/test/lib/facets/core/integer/test_ordinal.rb +0 -29
  499. data/test/lib/facets/core/integer/test_times_collect.rb +0 -28
  500. data/test/lib/facets/core/kernel/test___class__.rb +0 -26
  501. data/test/lib/facets/core/kernel/test_as.rb +0 -42
  502. data/test/lib/facets/core/kernel/test_assign_from.rb +0 -31
  503. data/test/lib/facets/core/kernel/test_assign_with.rb +0 -31
  504. data/test/lib/facets/core/kernel/test_bool.rb +0 -41
  505. data/test/lib/facets/core/kernel/test_bug.rb +0 -26
  506. data/test/lib/facets/core/kernel/test_call_stack.rb +0 -26
  507. data/test/lib/facets/core/kernel/test_called.rb +0 -26
  508. data/test/lib/facets/core/kernel/test_callee.rb +0 -26
  509. data/test/lib/facets/core/kernel/test_constant.rb +0 -33
  510. data/test/lib/facets/core/kernel/test_copy.rb +0 -40
  511. data/test/lib/facets/core/kernel/test_deep_copy.rb +0 -40
  512. data/test/lib/facets/core/kernel/test_demo.rb +0 -28
  513. data/test/lib/facets/core/kernel/test_fn.rb +0 -26
  514. data/test/lib/facets/core/kernel/test_get_by_id.rb +0 -28
  515. data/test/lib/facets/core/kernel/test_here.rb +0 -26
  516. data/test/lib/facets/core/kernel/test_in.rb +0 -27
  517. data/test/lib/facets/core/kernel/test_instance_exec.rb +0 -52
  518. data/test/lib/facets/core/kernel/test_maybe.rb +0 -26
  519. data/test/lib/facets/core/kernel/test_metaclass.rb +0 -34
  520. data/test/lib/facets/core/kernel/test_method.rb +0 -32
  521. data/test/lib/facets/core/kernel/test_methods.rb +0 -50
  522. data/test/lib/facets/core/kernel/test_new.rb +0 -30
  523. data/test/lib/facets/core/kernel/test_object_class.rb +0 -26
  524. data/test/lib/facets/core/kernel/test_object_hexid.rb +0 -27
  525. data/test/lib/facets/core/kernel/test_quaclass.rb +0 -27
  526. data/test/lib/facets/core/kernel/test_require_all.rb +0 -26
  527. data/test/lib/facets/core/kernel/test_require_esc.rb +0 -27
  528. data/test/lib/facets/core/kernel/test_require_facet.rb +0 -27
  529. data/test/lib/facets/core/kernel/test_resc.rb +0 -27
  530. data/test/lib/facets/core/kernel/test_returning.rb +0 -30
  531. data/test/lib/facets/core/kernel/test_send_as.rb +0 -26
  532. data/test/lib/facets/core/kernel/test_set_from.rb +0 -33
  533. data/test/lib/facets/core/kernel/test_set_with.rb +0 -33
  534. data/test/lib/facets/core/kernel/test_silently.rb +0 -28
  535. data/test/lib/facets/core/kernel/test_singleton.rb +0 -40
  536. data/test/lib/facets/core/kernel/test_singleton_class.rb +0 -27
  537. data/test/lib/facets/core/kernel/test_superior.rb +0 -30
  538. data/test/lib/facets/core/kernel/test_supermethod.rb +0 -33
  539. data/test/lib/facets/core/kernel/test_this.rb +0 -26
  540. data/test/lib/facets/core/kernel/test_to_b.rb +0 -28
  541. data/test/lib/facets/core/kernel/test_to_bool.rb +0 -28
  542. data/test/lib/facets/core/kernel/test_to_data.rb +0 -59
  543. data/test/lib/facets/core/kernel/test_uri.rb +0 -30
  544. data/test/lib/facets/core/kernel/test_val.rb +0 -43
  545. data/test/lib/facets/core/kernel/test_with_accessor.rb +0 -51
  546. data/test/lib/facets/core/matchdata/test_match.rb +0 -29
  547. data/test/lib/facets/core/matchdata/test_matchtree.rb +0 -37
  548. data/test/lib/facets/core/module/self/test_op_add.rb +0 -48
  549. data/test/lib/facets/core/module/test_abstract.rb +0 -36
  550. data/test/lib/facets/core/module/test_alias_module_function.rb +0 -34
  551. data/test/lib/facets/core/module/test_ancestor.rb +0 -26
  552. data/test/lib/facets/core/module/test_basename.rb +0 -26
  553. data/test/lib/facets/core/module/test_by_name.rb +0 -29
  554. data/test/lib/facets/core/module/test_class_extension.rb +0 -70
  555. data/test/lib/facets/core/module/test_clone_using.rb +0 -55
  556. data/test/lib/facets/core/module/test_dirname.rb +0 -26
  557. data/test/lib/facets/core/module/test_equate_on.rb +0 -37
  558. data/test/lib/facets/core/module/test_include_as.rb +0 -35
  559. data/test/lib/facets/core/module/test_initializer.rb +0 -32
  560. data/test/lib/facets/core/module/test_instance_methods.rb +0 -59
  561. data/test/lib/facets/core/module/test_integrate.rb +0 -35
  562. data/test/lib/facets/core/module/test_memoize.rb +0 -50
  563. data/test/lib/facets/core/module/test_modspace.rb +0 -27
  564. data/test/lib/facets/core/module/test_namespace.rb +0 -33
  565. data/test/lib/facets/core/module/test_nesting.rb +0 -36
  566. data/test/lib/facets/core/module/test_nodef.rb +0 -30
  567. data/test/lib/facets/core/module/test_on_included.rb +0 -36
  568. data/test/lib/facets/core/module/test_redef.rb +0 -30
  569. data/test/lib/facets/core/module/test_redefine_method.rb +0 -30
  570. data/test/lib/facets/core/module/test_redirect.rb +0 -30
  571. data/test/lib/facets/core/module/test_redirect_method.rb +0 -30
  572. data/test/lib/facets/core/module/test_remove.rb +0 -30
  573. data/test/lib/facets/core/module/test_rename.rb +0 -31
  574. data/test/lib/facets/core/module/test_rename_method.rb +0 -31
  575. data/test/lib/facets/core/module/test_revisal.rb +0 -35
  576. data/test/lib/facets/core/module/test_shadow_method.rb +0 -30
  577. data/test/lib/facets/core/module/test_sort_on.rb +0 -42
  578. data/test/lib/facets/core/module/test_this.rb +0 -31
  579. data/test/lib/facets/core/module/test_wrap.rb +0 -30
  580. data/test/lib/facets/core/module/test_wrap_method.rb +0 -30
  581. data/test/lib/facets/core/nilclass/test_blank.rb +0 -26
  582. data/test/lib/facets/core/nilclass/test_empty.rb +0 -26
  583. data/test/lib/facets/core/nilclass/test_include.rb +0 -26
  584. data/test/lib/facets/core/nilclass/test_op_fetch.rb +0 -28
  585. data/test/lib/facets/core/nilclass/test_size.rb +0 -30
  586. data/test/lib/facets/core/nilclass/test_to_h.rb +0 -26
  587. data/test/lib/facets/core/numeric/test_approx.rb +0 -29
  588. data/test/lib/facets/core/numeric/test_ceil_multiple.rb +0 -31
  589. data/test/lib/facets/core/numeric/test_distance.rb +0 -28
  590. data/test/lib/facets/core/numeric/test_succ.rb +0 -40
  591. data/test/lib/facets/core/numeric/test_to_b.rb +0 -27
  592. data/test/lib/facets/core/ostruct/test___merge__.rb +0 -38
  593. data/test/lib/facets/core/ostruct/test___update__.rb +0 -29
  594. data/test/lib/facets/core/ostruct/test_op_fetch.rb +0 -27
  595. data/test/lib/facets/core/ostruct/test_op_store.rb +0 -28
  596. data/test/lib/facets/core/proc/test_compose.rb +0 -29
  597. data/test/lib/facets/core/proc/test_op_mul.rb +0 -34
  598. data/test/lib/facets/core/proc/test_to_method.rb +0 -44
  599. data/test/lib/facets/core/range/test_to_r.rb +0 -27
  600. data/test/lib/facets/core/range/test_to_range.rb +0 -27
  601. data/test/lib/facets/core/range/test_umbrella.rb +0 -34
  602. data/test/lib/facets/core/range/test_within.rb +0 -29
  603. data/test/lib/facets/core/regexp/test_arity.rb +0 -33
  604. data/test/lib/facets/core/regexp/test_to_re.rb +0 -27
  605. data/test/lib/facets/core/regexp/test_to_regexp.rb +0 -27
  606. data/test/lib/facets/core/string/self/test_interpolate.rb +0 -27
  607. data/test/lib/facets/core/string/self/test_patterns.rb +0 -28
  608. data/test/lib/facets/core/string/self/test_rand_letter.rb +0 -26
  609. data/test/lib/facets/core/string/test_align_center.rb +0 -34
  610. data/test/lib/facets/core/string/test_at_rand.rb +0 -35
  611. data/test/lib/facets/core/string/test_basename.rb +0 -41
  612. data/test/lib/facets/core/string/test_blank.rb +0 -27
  613. data/test/lib/facets/core/string/test_bracket.rb +0 -49
  614. data/test/lib/facets/core/string/test_camelcase.rb +0 -39
  615. data/test/lib/facets/core/string/test_camelize.rb +0 -26
  616. data/test/lib/facets/core/string/test_capitalized.rb +0 -26
  617. data/test/lib/facets/core/string/test_chars.rb +0 -27
  618. data/test/lib/facets/core/string/test_cmp.rb +0 -30
  619. data/test/lib/facets/core/string/test_demodulize.rb +0 -38
  620. data/test/lib/facets/core/string/test_divide.rb +0 -29
  621. data/test/lib/facets/core/string/test_downcase.rb +0 -26
  622. data/test/lib/facets/core/string/test_dresner.rb +0 -32
  623. data/test/lib/facets/core/string/test_each_char.rb +0 -29
  624. data/test/lib/facets/core/string/test_each_word.rb +0 -29
  625. data/test/lib/facets/core/string/test_first.rb +0 -43
  626. data/test/lib/facets/core/string/test_fold.rb +0 -34
  627. data/test/lib/facets/core/string/test_humanize.rb +0 -26
  628. data/test/lib/facets/core/string/test_indent.rb +0 -40
  629. data/test/lib/facets/core/string/test_index_all.rb +0 -26
  630. data/test/lib/facets/core/string/test_last.rb +0 -46
  631. data/test/lib/facets/core/string/test_line_wrap.rb +0 -27
  632. data/test/lib/facets/core/string/test_lines.rb +0 -26
  633. data/test/lib/facets/core/string/test_lowercase.rb +0 -26
  634. data/test/lib/facets/core/string/test_margin.rb +0 -117
  635. data/test/lib/facets/core/string/test_methodize.rb +0 -27
  636. data/test/lib/facets/core/string/test_modulize.rb +0 -29
  637. data/test/lib/facets/core/string/test_mscan.rb +0 -30
  638. data/test/lib/facets/core/string/test_natcmp.rb +0 -30
  639. data/test/lib/facets/core/string/test_nchar.rb +0 -29
  640. data/test/lib/facets/core/string/test_pathize.rb +0 -29
  641. data/test/lib/facets/core/string/test_pop.rb +0 -47
  642. data/test/lib/facets/core/string/test_pot.rb +0 -39
  643. data/test/lib/facets/core/string/test_push.rb +0 -40
  644. data/test/lib/facets/core/string/test_quote.rb +0 -49
  645. data/test/lib/facets/core/string/test_rand_byte.rb +0 -35
  646. data/test/lib/facets/core/string/test_rand_index.rb +0 -26
  647. data/test/lib/facets/core/string/test_range.rb +0 -27
  648. data/test/lib/facets/core/string/test_range_all.rb +0 -27
  649. data/test/lib/facets/core/string/test_range_of_line.rb +0 -28
  650. data/test/lib/facets/core/string/test_regesc.rb +0 -28
  651. data/test/lib/facets/core/string/test_shatter.rb +0 -29
  652. data/test/lib/facets/core/string/test_shift.rb +0 -40
  653. data/test/lib/facets/core/string/test_shuffle.rb +0 -27
  654. data/test/lib/facets/core/string/test_similarity.rb +0 -26
  655. data/test/lib/facets/core/string/test_singular.rb +0 -86
  656. data/test/lib/facets/core/string/test_soundex.rb +0 -41
  657. data/test/lib/facets/core/string/test_succ.rb +0 -29
  658. data/test/lib/facets/core/string/test_to_a.rb +0 -27
  659. data/test/lib/facets/core/string/test_to_b.rb +0 -41
  660. data/test/lib/facets/core/string/test_to_const.rb +0 -28
  661. data/test/lib/facets/core/string/test_to_date.rb +0 -30
  662. data/test/lib/facets/core/string/test_to_proc.rb +0 -33
  663. data/test/lib/facets/core/string/test_to_re.rb +0 -28
  664. data/test/lib/facets/core/string/test_to_time.rb +0 -30
  665. data/test/lib/facets/core/string/test_unix_crypt.rb +0 -30
  666. data/test/lib/facets/core/string/test_unpack.rb +0 -34
  667. data/test/lib/facets/core/string/test_unshift.rb +0 -39
  668. data/test/lib/facets/core/string/test_upcase.rb +0 -30
  669. data/test/lib/facets/core/string/test_whitespace.rb +0 -27
  670. data/test/lib/facets/core/string/test_word_filter.rb +0 -34
  671. data/test/lib/facets/core/string/test_word_wrap.rb +0 -51
  672. data/test/lib/facets/core/string/test_words.rb +0 -37
  673. data/test/lib/facets/core/symbol/test_camelcase.rb +0 -26
  674. data/test/lib/facets/core/symbol/test_camelize.rb +0 -27
  675. data/test/lib/facets/core/symbol/test_capitalize.rb +0 -26
  676. data/test/lib/facets/core/symbol/test_capitalized.rb +0 -27
  677. data/test/lib/facets/core/symbol/test_downcase.rb +0 -27
  678. data/test/lib/facets/core/symbol/test_not.rb +0 -29
  679. data/test/lib/facets/core/symbol/test_pad.rb +0 -27
  680. data/test/lib/facets/core/symbol/test_succ.rb +0 -28
  681. data/test/lib/facets/core/symbol/test_to_const.rb +0 -28
  682. data/test/lib/facets/core/symbol/test_to_proc.rb +0 -33
  683. data/test/lib/facets/core/symbol/test_to_str.rb +0 -28
  684. data/test/lib/facets/core/symbol/test_underscore.rb +0 -26
  685. data/test/lib/facets/core/symbol/test_upcase.rb +0 -27
  686. data/test/lib/facets/core/time/test_change.rb +0 -33
  687. data/test/lib/facets/core/time/test_elapse.rb +0 -27
  688. data/test/lib/facets/core/time/test_stamp.rb +0 -31
  689. data/test/lib/facets/core/time/test_to_date.rb +0 -31
  690. data/test/lib/facets/core/time/test_to_s.rb +0 -31
  691. data/test/lib/facets/core/time/test_to_time.rb +0 -31
  692. data/test/lib/facets/more/test_annattr.rb +0 -39
  693. data/test/lib/facets/more/test_ansicode.rb +0 -36
  694. data/test/lib/facets/more/test_association.rb +0 -51
  695. data/test/lib/facets/more/test_autoarray.rb +0 -32
  696. data/test/lib/facets/more/test_basicobject.rb +0 -67
  697. data/test/lib/facets/more/test_bbcode.rb +0 -34
  698. data/test/lib/facets/more/test_binaryreader.rb +0 -64
  699. data/test/lib/facets/more/test_bitmask.rb +0 -47
  700. data/test/lib/facets/more/test_bytes.rb +0 -84
  701. data/test/lib/facets/more/test_classmethods.rb +0 -69
  702. data/test/lib/facets/more/test_command.rb +0 -38
  703. data/test/lib/facets/more/test_coroutine.rb +0 -60
  704. data/test/lib/facets/more/test_crypt.rb +0 -46
  705. data/test/lib/facets/more/test_cut.rb +0 -198
  706. data/test/lib/facets/more/test_dictionary.rb +0 -97
  707. data/test/lib/facets/more/test_elementor.rb +0 -52
  708. data/test/lib/facets/more/test_enumerablepass.rb +0 -86
  709. data/test/lib/facets/more/test_floatstring.rb +0 -36
  710. data/test/lib/facets/more/test_functor.rb +0 -39
  711. data/test/lib/facets/more/test_htmlbuilder.rb +0 -38
  712. data/test/lib/facets/more/test_infinity.rb +0 -50
  713. data/test/lib/facets/more/test_inheritor.rb +0 -155
  714. data/test/lib/facets/more/test_instance_intercept.rb +0 -50
  715. data/test/lib/facets/more/test_interval.rb +0 -119
  716. data/test/lib/facets/more/test_json.rb +0 -232
  717. data/test/lib/facets/more/test_linkedlist.rb +0 -53
  718. data/test/lib/facets/more/test_lisp.rb +0 -47
  719. data/test/lib/facets/more/test_lisp_format.rb +0 -37
  720. data/test/lib/facets/more/test_lrucache.rb +0 -25
  721. data/test/lib/facets/more/test_mathconstants.rb +0 -18
  722. data/test/lib/facets/more/test_methodfilter.rb +0 -45
  723. data/test/lib/facets/more/test_methodprobe.rb +0 -53
  724. data/test/lib/facets/more/test_multipliers.rb +0 -114
  725. data/test/lib/facets/more/test_multiton.rb +0 -199
  726. data/test/lib/facets/more/test_nackclass.rb +0 -45
  727. data/test/lib/facets/more/test_nilcomparable.rb +0 -47
  728. data/test/lib/facets/more/test_opencascade.rb +0 -75
  729. data/test/lib/facets/more/test_openobject.rb +0 -126
  730. data/test/lib/facets/more/test_overload.rb +0 -54
  731. data/test/lib/facets/more/test_paramix.rb +0 -100
  732. data/test/lib/facets/more/test_pqueue.rb +0 -39
  733. data/test/lib/facets/more/test_predicate.rb +0 -79
  734. data/test/lib/facets/more/test_preinitialize.rb +0 -49
  735. data/test/lib/facets/more/test_promoteself.rb +0 -45
  736. data/test/lib/facets/more/test_recorder.rb +0 -44
  737. data/test/lib/facets/more/test_snapshot.rb +0 -34
  738. data/test/lib/facets/more/test_statichash.rb +0 -31
  739. data/test/lib/facets/more/test_syncarray.rb +0 -28
  740. data/test/lib/facets/more/test_synchash.rb +0 -28
  741. data/test/lib/facets/more/test_tagiterator.rb +0 -93
  742. data/test/lib/facets/more/test_taskable.rb +0 -190
  743. data/test/lib/facets/more/test_timer.rb +0 -66
  744. data/test/lib/facets/more/test_times.rb +0 -73
  745. data/test/lib/facets/more/test_tuple.rb +0 -64
  746. data/test/lib/facets/more/test_typecast.rb +0 -68
  747. data/test/lib/facets/more/test_uninheritable.rb +0 -42
  748. data/test/lib/facets/more/test_units.rb +0 -111
  749. data/test/lib/facets/more/test_xmlbuilder.rb +0 -38
  750. data/test/lib/facets/more/test_xmlhelper.rb +0 -40
  751. data/test/lib/facets/more/test_xoxo.rb +0 -288
  752. data/test/lib/facets/more/test_yamlstruct.rb +0 -37
  753. data/util/announce +0 -20
  754. data/util/changelog +0 -8
  755. data/util/count +0 -8
  756. data/util/extest +0 -8
  757. data/util/list +0 -38
  758. data/util/package +0 -9
  759. data/util/prepare +0 -12
  760. data/util/redirect +0 -34
  761. data/util/release +0 -13
  762. data/util/setup +0 -7
  763. data/util/test +0 -7
  764. data/util/version +0 -8
@@ -0,0 +1,383 @@
1
+ =begin rdoc
2
+
3
+ = Descrete Range Class
4
+
5
+ This is the Range class slightly modified to be truly desecrete in nature.
6
+ Use the Interval class (see interval.rb) for a truly continuious range class.
7
+
8
+ == Synopsis
9
+
10
+ The following code uses class +Xs+, which is defined in the
11
+ class-level documentation.
12
+
13
+ require 'trix/range'
14
+
15
+ range = Xs.new(1)..Xs.new(10)
16
+ range.step(2) {|x| puts x}
17
+ range.step(3) {|x| puts x}
18
+
19
+ _produces:_
20
+
21
+ 1 x
22
+ 3 xxx
23
+ 5 xxxxx
24
+ 7 xxxxxxx
25
+ 9 xxxxxxxxx
26
+ 1 x
27
+ 4 xxxx
28
+ 7 xxxxxxx
29
+ 10 xxxxxxxxxx
30
+
31
+ == Notes
32
+
33
+ Range is not quite have descrete behavior becasue it also performs
34
+ double-duty as a continious interval class. Its just a bit too overloaded
35
+ and this limits its full potential. To remedy, a separate Interval class
36
+ has been created to handle true interval functionality. And here we
37
+ adjust Range to be truely discrete.
38
+
39
+ Range originally dependened on two methods: #succ and #<=>. If numeric
40
+ ranges were the only concern, those could just as well be #+ and #<=>,
41
+ but esoteric forms make that unfeasible --the obvious example being a
42
+ String range. To properly handle this, Range fully seperates and extends
43
+ the parallel methods: #succ for #+, #cmp for #<=> ( in the future we may
44
+ add #pred for #- ). It also adds the option of #distance to properly
45
+ calculate the difference between the sentinals. This is neccessary
46
+ to ensure congruent bahavior. For instance, presently String Range's
47
+ can give bad results because #<=> does not measure order in the same
48
+ manner that #succ generates order.
49
+
50
+ == Todo List
51
+
52
+ * Add skip parameter, to allow skip-ranges, i.e. skipping successive iterations.
53
+
54
+ == Author
55
+
56
+ * Thomas Sawyer
57
+
58
+ =end
59
+
60
+ require 'carat/infinity'
61
+ require 'carat/interval'
62
+
63
+
64
+ class Range
65
+
66
+ alias_method :initialize_simple, :initialize
67
+ private :initialize_simple
68
+
69
+ def initialize( first, halt, exclude_last=false, &succ )
70
+ @first = first
71
+ @last = halt.kind_of?(Proc) ? nil : halt
72
+ @halt = @last ? nil : halt
73
+ #@exclude_first = exclude_first
74
+ @exclude_last = exclude_last
75
+ @direction = (@last <=> @first)
76
+ #@direction = 1 if @direction == 0
77
+ @succ = succ || nil #@first.method(:succ).to_proc
78
+ #@halt = nil #exclude_last? ? proc{ |x| x.cmp(@last) != -1 } : proc{ |x| x.cmp(@last) == 1 }
79
+ initialize_simple(@first, @last, @exclude_last)
80
+ end
81
+
82
+ def succ ; @succ ; end
83
+
84
+ def succ!(s)
85
+ if @succ
86
+ @succ.call(s)
87
+ else
88
+ s.succ
89
+ end
90
+ end
91
+
92
+ def succ=(succ_proc)
93
+ raise ArgumentError unless Proc === succ_proc
94
+ @succ = succ_proc
95
+ end
96
+
97
+ def halt ; @halt ; end
98
+
99
+ def halt?(s)
100
+ if @halt
101
+ @halt.call(s)
102
+ else
103
+ if @exclude_last
104
+ s.cmp(@last) != -1
105
+ else
106
+ s.cmp(@last) == 1
107
+ end
108
+ end
109
+ end
110
+
111
+ def halt=(halt_proc)
112
+ raise ArgumentError unless Proc === halt_proc
113
+ @halt = halt_proc
114
+ end
115
+
116
+ #def first ; @first ; end
117
+ #def last ; @last ; end
118
+ #def exclude_first? ; @exclude_first ; end
119
+ #def exclude_last? ; @exclude_last ; end
120
+ alias exclude_last? exclude_end?
121
+
122
+ def direction
123
+ @direction ||= (@last <=> @first)
124
+ end
125
+
126
+ # poor names
127
+ #undef_method :begin
128
+ #undef_method :end
129
+ #undef_method :exclude_end?
130
+
131
+ def -@ ; Range.new( @first, @last, true, &@succ ) ; end
132
+
133
+ def distance
134
+ return @last.distance(@first) if @last and @last.respond_to?(:distance)
135
+ self.to_a.length # should it just be nil instead?
136
+ end
137
+ alias_method( :length, :distance )
138
+ alias_method( :size, :distance )
139
+
140
+ def min
141
+ (@first.cmp(@last) == -1) ? @first : @last
142
+ end
143
+
144
+ def max
145
+ (@first.cmp(@last) == 1) ? @first : @last
146
+ end
147
+
148
+ # +between?+ simply tests whether the given value falls
149
+ # between the sentinels by comparison. It does not
150
+ # verify that the value is acutally in the range's sequence.
151
+ def between?(x)
152
+ #tf = exclude_first? ? 1 : 0
153
+ tl = exclude_last? ? -1 : 0
154
+ # if other classes handled Infinity in their <=> method
155
+ # (which probably they should) this clause would not be required
156
+ if first.kind_of?(InfinityClass)
157
+ ft = ((first <=> x) <= tf)
158
+ else
159
+ ft = (x <=> first) >= tf
160
+ end
161
+ if last.kind_of?(InfinityClass)
162
+ fl = ((last <=> x) >= tl)
163
+ else
164
+ fl = (x <=> last) <= tl
165
+ end
166
+ ft && fl
167
+ end
168
+
169
+ # Is this proper alias of +===+?
170
+ alias_method( :===, :between? )
171
+
172
+ # +include?+ is an alias for +member?+. It is like between
173
+ # but makes sure that the value is in the range sequence.
174
+ alias_method( :include?, :member? )
175
+
176
+ # Compares two ranges to see if they are equal
177
+ def eql?(other)
178
+ return false unless @first == other.first
179
+ other_last = other.exclude_last? ? other.last : other.last
180
+ if self.exclude_last? and not other.exclude_last?
181
+ return false unless self.last == other.last.succ
182
+ elsif other.exclude_last? and not self.exclude_last?
183
+ return false unless self.last.succ == other.last
184
+ else
185
+ return false unless @last == other.last
186
+ end
187
+ true
188
+ end
189
+
190
+ alias each_succ each
191
+ def each( &blk )
192
+ return each_succ( &blk ) unless @succ or @halt
193
+ if @halt
194
+ halt_proc = @halt
195
+ else
196
+ halt_proc = exclude_last? ? proc{ |x| x.cmp(@last) != -1 } : proc{ |x| x.cmp(@last) == 1 }
197
+ end
198
+ #t = exclude_last? ? -1 : 0
199
+ s = @first
200
+ if @succ
201
+ #while (s <=> @last) == -1 or (s <=> @last) == t
202
+ until halt_proc.call(s)
203
+ yield(s)
204
+ @succ.call(s)
205
+ end
206
+ else
207
+ #while (s <=> @last) == -1 or (s <=> @last) == t
208
+ until halt_proc.call(s)
209
+ yield(s)
210
+ s.succ
211
+ end
212
+ end
213
+ end
214
+
215
+ # # each(n) where n is steps, if n is negative it is nth
216
+ # # I know, it's a neg num trick :( but I think it's
217
+ # # better then having another method like #each_nth,
218
+ # # cause then you'd need #to_a_nth, too, etc.
219
+ # def each(n=1) # :yield:
220
+ # n = (length / n.abs) if n < 0
221
+ # n = n * direction
222
+ # i = first; i.succ(n) if exclude_first?
223
+ # t = exclude_last? ? -1 : 0
224
+ # while (i <=> last) == -1 or (i <=> last) == t
225
+ # yield(i)
226
+ # i.succ(n)
227
+ # end
228
+ # end
229
+
230
+ # # each(n) where n is steps, if n is negative it is nth
231
+ # # I know, it's a neg num trick :( but I think it's
232
+ # # better then having another method like #each_nth,
233
+ # # cause then you'd need #to_a_nth, too, etc.
234
+ # def reverse_each(n=1) # :yield:
235
+ # n = (length / n.abs) if n < 0
236
+ # n = n * direction
237
+ # i = last; i -= n if exclude_first?
238
+ # t = exclude_first? ? 1 : 0
239
+ # while (i <=> first) == 1 or (i <=> first) == t
240
+ # yield(i)
241
+ # i += n
242
+ # end
243
+ # end
244
+
245
+ # def to_a(n=1)
246
+ # a=[]; each(n){|e| a << e}
247
+ # a
248
+ # end
249
+
250
+ # Is this even desirable at this point?
251
+ # Sequences depend on #succ rather then #+
252
+ # so don't expect the same results from each!
253
+ # def to_seq
254
+ # seed = exclude_first? ? first.succ : first
255
+ # halt = exclude_last? ? proc{|x| (x <=> last) >= 0} : proc{|x| (x <=> last) > 0}
256
+ # Sequence.new( seed, &halt )
257
+ # end
258
+
259
+ end
260
+
261
+
262
+
263
+ =begin test
264
+
265
+
266
+ require 'test/unit'
267
+
268
+ class GeneralTest < Test::Unit::TestCase
269
+
270
+ def test_include_001
271
+ a = Range.new(1,10)
272
+ assert_equal(false, a.include?(0))
273
+ assert_equal(true, a.include?(1))
274
+ assert_equal(true, a.include?(2))
275
+ assert_equal(true, a.include?(9))
276
+ assert_equal(true, a.include?(10))
277
+ assert_equal(false, a.include?(11))
278
+ end
279
+
280
+ def test_include_002
281
+ a = Range.new(1,10,false,true)
282
+ assert_equal(false, a.include?(0))
283
+ assert_equal(true, a.include?(1))
284
+ assert_equal(true, a.include?(2))
285
+ assert_equal(true, a.include?(9))
286
+ assert_equal(false, a.include?(10))
287
+ assert_equal(false, a.include?(11))
288
+ end
289
+
290
+ def test_include_003
291
+ a = Range.new(1,10,true,false)
292
+ assert_equal(false, a.include?(0))
293
+ assert_equal(false, a.include?(1))
294
+ assert_equal(true, a.include?(2))
295
+ assert_equal(true, a.include?(9))
296
+ assert_equal(true, a.include?(10))
297
+ assert_equal(false, a.include?(11))
298
+ end
299
+
300
+ def test_include_004
301
+ a = Range.new(1,10,true,true)
302
+ assert_equal(false, a.include?(0))
303
+ assert_equal(false, a.include?(1))
304
+ assert_equal(true, a.include?(2))
305
+ assert_equal(true, a.include?(9))
306
+ assert_equal(false, a.include?(10))
307
+ assert_equal(false, a.include?(11))
308
+ end
309
+
310
+ end
311
+
312
+ class LrgNumericTest < Test::Unit::TestCase
313
+ def test_include
314
+ a = Range.new(0,100000000)
315
+ assert_equal(true, a.include?(0))
316
+ assert_equal(true, a.include?(1000))
317
+ assert_equal(true, a.include?(1000000))
318
+ assert_equal(true, a.include?(100000000))
319
+ assert_equal(false, a.include?(INFINITY))
320
+ end
321
+ def test_include_with_step
322
+ a = Range.new(0,100000000)
323
+ assert_equal(true, a.include?(0))
324
+ assert_equal(true, a.include?(5))
325
+ assert_equal(true, a.include?(70007))
326
+ assert_equal(true, a.include?(5000005))
327
+ assert_equal(false, a.include?(INFINITY))
328
+ end
329
+ end
330
+
331
+ class InfTest < Test::Unit::TestCase
332
+ def test_include?
333
+ a = Range.new(-INFINITY,-3)
334
+ assert_equal(true, a.include?(-INFINITY))
335
+ assert_equal(true, a.include?(-4))
336
+ assert_equal(true, a.include?(-3))
337
+ assert_equal(false, a.include?(-2))
338
+ assert_equal(false, a.include?(INFINITY))
339
+ a = Range.new(-INFINITY,-3,false,true)
340
+ assert_equal(true, a.include?(-INFINITY))
341
+ assert_equal(true, a.include?(-4))
342
+ assert_equal(false, a.include?(-3))
343
+ assert_equal(false, a.include?(-2))
344
+ assert_equal(false, a.include?(INFINITY))
345
+ a = Range.new(-3,INFINITY)
346
+ assert_equal(false, a.include?(-INFINITY))
347
+ assert_equal(false, a.include?(-4))
348
+ assert_equal(true, a.include?(-3))
349
+ assert_equal(true, a.include?(-2))
350
+ assert_equal(true, a.include?(INFINITY))
351
+ a = Range.new(-INFINITY,INFINITY)
352
+ assert_equal(true, a.include?(-INFINITY))
353
+ assert_equal(true, a.include?(-4))
354
+ assert_equal(true, a.include?(-3))
355
+ assert_equal(true, a.include?(-2))
356
+ assert_equal(true, a.include?(INFINITY))
357
+ a = Range.new(-3,-2)
358
+ assert_equal(false, a.include?(-INFINITY))
359
+ assert_equal(false, a.include?(-4))
360
+ assert_equal(true, a.include?(-3))
361
+ assert_equal(true, a.include?(-2))
362
+ assert_equal(false, a.include?(INFINITY))
363
+ end
364
+ end
365
+
366
+ class OrdinalTest < Test::Unit::TestCase
367
+ def test_include
368
+ a = Range.new('a','g')
369
+ #assert_equal(false, a.include?(-INFINITY))
370
+ assert_equal(true, a.include?('a'))
371
+ assert_equal(true, a.include?('c'))
372
+ assert_equal(false, a.include?('z'))
373
+ #assert_equal(false, a.include?(INFINITY))
374
+ end
375
+ #def test_error
376
+ # assert_raises(ArgumentError) {
377
+ # a = (-INFINITY..'z')
378
+ # }
379
+ #end
380
+ end
381
+
382
+ =end
383
+
@@ -0,0 +1,48 @@
1
+ # Code from rubyonrails project (http://www.rubyonrails.com)
2
+ # Temporarily here.
3
+
4
+ require 'html/tokenizer'
5
+ require 'html/node'
6
+
7
+ VERBOTEN_TAGS = %w(form script) unless defined?(VERBOTEN_TAGS)
8
+ VERBOTEN_ATTRS = /^on/i unless defined?(VERBOTEN_ATTRS)
9
+
10
+ class String
11
+ # Sanitizes the given HTML by making form and script tags into regular
12
+ # text, and removing all "onxxx" attributes (so that arbitrary Javascript
13
+ # cannot be executed). Also removes href attributes that start with
14
+ # "javascript:".
15
+ #
16
+ # Returns the sanitized text.
17
+ def self.sanitize(html)
18
+ # only do this if absolutely necessary
19
+ if html.index("<")
20
+ tokenizer = HTML::Tokenizer.new(html)
21
+ new_text = ""
22
+
23
+ while token = tokenizer.next
24
+ node = HTML::Node.parse(nil, 0, 0, token, false)
25
+ new_text << case node
26
+ when HTML::Tag
27
+ if VERBOTEN_TAGS.include?(node.name)
28
+ node.to_s.gsub(/</, "&lt;")
29
+ else
30
+ if node.closing != :close
31
+ node.attributes.delete_if { |attr,v| attr =~ VERBOTEN_ATTRS }
32
+ if node.attributes["href"] =~ /^javascript:/i
33
+ node.attributes.delete "href"
34
+ end
35
+ end
36
+ node.to_s
37
+ end
38
+ else
39
+ node.to_s.gsub(/</, "&lt;")
40
+ end
41
+ end
42
+
43
+ html = new_text
44
+ end
45
+
46
+ html
47
+ end
48
+ end
@@ -0,0 +1,735 @@
1
+ #--
2
+ # SuperStruct
3
+ # Copyright (c) 2005 Hal Fulton
4
+ #
5
+ # Ruby License
6
+ #
7
+ # This module is free software. You may use, modify, and/or redistribute this
8
+ # software under the same terms as Ruby.
9
+ #
10
+ # This program is distributed in the hope that it will be useful, but WITHOUT
11
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12
+ # FOR A PARTICULAR PURPOSE.
13
+ #++
14
+
15
+ # = SuperStruct
16
+ #
17
+ # This is an easy way to create Struct-like classes; it converts easily
18
+ # between hashes and arrays, and it allows OpenStruct-like dynamic naming
19
+ # of members.
20
+ #
21
+ # Unlike Struct, it creates a "real" class, and it has real instance variables
22
+ # with predictable names.
23
+ #
24
+ # A basic limitation is that the hash keys must be legal method names (unless
25
+ # used with send()).
26
+ #
27
+ # Basically, ss["alpha"], ss[:alpha], ss[0], and ss.alpha all mean the same.
28
+ #
29
+ # == What It's Like
30
+ #
31
+ # It's like a Struct...
32
+ # - you can pass in a list of symbols for accessors
33
+ # - it will create a class for you
34
+ # but...
35
+ # - you don't have to pass in the class name
36
+ # - it returns a "real" class
37
+ # . instance variables have the expected names
38
+ # . you can reopen and add methods
39
+ # - it doesn't go into the Struct:: namespace
40
+ # - it preserves the order of the fields
41
+ # - you can use Strings instead of Symbols for the names
42
+ #
43
+ # It's like an Array...
44
+ # - you can access the items by [number] and [number]=
45
+ # but...
46
+ # - you can also access the items by ["name"] and ["name"]=
47
+ # - you can access the items by accessors
48
+ #
49
+ # It's like an OpenStruct...
50
+ # - (if you use .open instead of .new) you can add fields
51
+ # automatically with x.field or x.field=val
52
+ # but...
53
+ # - you can initialize it like a Struct
54
+ # - it preserves the order of the fields
55
+ #
56
+ # It's like a Hash...
57
+ # - data can be accessed by ["name"]
58
+ # but...
59
+ # - order (of entry or creation) is preserved
60
+ # - arbitrary objects are not allowed (it does obj.to_str or obj.to_s)
61
+ # - strings must be valid method names
62
+ #
63
+ # It's like Ara Howard's Named Array...
64
+ # - we can access elements by ["name"] or ["name"]=
65
+ # but...
66
+ # - you can access the items by accessors
67
+ # - strings must be valid method names
68
+ #
69
+ # It's like Florian Gross's Keyed List...
70
+ # (to be done)
71
+ # but...
72
+ # - it preserves the order of the fields
73
+ #
74
+ # == Usage
75
+ #
76
+ # # Need not assign to existing fields (default to nil)
77
+ # myStruct = SuperStruct.new(:alpha)
78
+ # x = myStruct.new
79
+ # x.alpha # nil
80
+ #
81
+ # # A value assigned at construction may be retrieved
82
+ # myStruct = SuperStruct.new(:alpha)
83
+ # x = myStruct.new(234)
84
+ # x.alpha # 234
85
+ #
86
+ # # Unassigned fields are nil
87
+ # myStruct = SuperStruct.new(:alpha,:beta)
88
+ # x = myStruct.new(234)
89
+ # x.beta # nil
90
+ #
91
+ # # An open structure may not construct with nonexistent fields
92
+ # myStruct = SuperStruct.open
93
+ # x = myStruct.new(234) # error
94
+ #
95
+ # # An open structure may assign fields not previously existing
96
+ # myStruct = SuperStruct.open
97
+ # x = myStruct.new
98
+ # x.foo = 123
99
+ # x.bar = 456
100
+ #
101
+ # # The act of retrieving a nonexistent field from an open struct will
102
+ # # create that field
103
+ # myStruct = SuperStruct.open
104
+ # x = myStruct.new
105
+ # x.foo # nil
106
+ #
107
+ # # A field (in an open struct) that is unassigned will be nil
108
+ # myStruct = SuperStruct.open
109
+ # x = myStruct.new
110
+ # y = x.foobar
111
+ #
112
+ # # A struct created with new rather than open cannot reference nonexistent
113
+ # # fields
114
+ # myStruct = SuperStruct.new
115
+ # x = myStruct.new
116
+ # x.foo # error
117
+ #
118
+ # # Adding a field to a struct will create a writer and reader for that field
119
+ #
120
+ # # An open struct will also create a writer and a reader together
121
+ #
122
+ # # A field has a real writer and reader corresponding to it
123
+ #
124
+ # # A string will work as well as a symbol
125
+ # myStruct = SuperStruct.new("alpha")
126
+ #
127
+ # # to_a will return an array of values
128
+ # myStruct = SuperStruct.new("alpha","beta","gamma")
129
+ # x = myStruct.new(7,8,9)
130
+ # assert(x.to_a == [7,8,9])
131
+ #
132
+ # # Instance method 'members' will return a list of members (as strings)
133
+ # myStruct = SuperStruct.new(:alpha,"beta")
134
+ # x = myStruct.new
135
+ # assert_equal(["alpha","beta"],x.members)
136
+ #
137
+ # # Class method 'members' will return a list of members (as strings)
138
+ # myStruct = SuperStruct.new(:alpha,"beta")
139
+ # assert_equal(["alpha","beta"],myStruct.members)
140
+ #
141
+ # # to_ary will allow a struct to be treated like an array in
142
+ # # multiple assignment
143
+ # myStruct = SuperStruct.new("alpha","beta","gamma")
144
+ # x = myStruct.new(7,8,9)
145
+ # a,b,c = x
146
+ # assert(b == 8)
147
+ #
148
+ # # to_ary will allow a struct to be treated like an array in
149
+ # # passed parameters
150
+ # myStruct = SuperStruct.new("alpha","beta","gamma")
151
+ # x = myStruct.new(7,8,9)
152
+ # b = meth(*x)
153
+ #
154
+ # # to_hash will return a hash with fields as keys
155
+ # myStruct = SuperStruct.new("alpha","beta","gamma")
156
+ # x = myStruct.new(7,8,9)
157
+ # h = x.to_hash
158
+ # assert_equal({"alpha"=>7,"beta"=>8,"gamma"=>9},h)
159
+ #
160
+ # # A field name (String) may be used in a hash-like notation
161
+ # myStruct = SuperStruct.new("alpha","beta","gamma")
162
+ # x = myStruct.new(7,8,9)
163
+ # y = x["beta"]
164
+ #
165
+ # # A field name (Symbol) may be used in a hash-like notation
166
+ # myStruct = SuperStruct.new("alpha","beta","gamma")
167
+ # x = myStruct.new(7,8,9)
168
+ # y = x[:beta]
169
+ #
170
+ # # [offset,length] may be used as for arrays
171
+ # myStruct = SuperStruct.new("alpha","beta","gamma")
172
+ # x = myStruct.new(7,8,9)
173
+ # y = x[0,2]
174
+ #
175
+ # # Ranges may be used as for arrays
176
+ # myStruct = SuperStruct.new("alpha","beta","gamma")
177
+ # x = myStruct.new(7,8,9)
178
+ # y = x[1..2]
179
+ #
180
+ # # Adding a field to an open struct adds it to the instance
181
+ # myStruct = SuperStruct.open(:alpha)
182
+ # x = myStruct.new
183
+ # x.beta = 5
184
+ #
185
+ # # Adding a field to an open struct adds it to the class also
186
+ # myStruct = SuperStruct.open(:alpha)
187
+ # x = myStruct.new
188
+ # x.beta = 5
189
+ #
190
+ # # An array passed to SuperStruct.new need not be starred
191
+ # myStruct = SuperStruct.new(%w[alpha beta gamma])
192
+ # x = myStruct.new
193
+ #
194
+ # # A hash passed to #set will set multiple values at once
195
+ # myStruct = SuperStruct.new(%w[alpha beta gamma])
196
+ # x = myStruct.new
197
+ # hash = {"alpha"=>234,"beta"=>345,"gamma"=>456}
198
+ # x.set(hash)
199
+ #
200
+ # # ||= works properly
201
+ # x = SuperStruct.open.new
202
+ # x.foo ||= 333
203
+ # x.bar = x.bar || 444
204
+ #
205
+ # # attr_tester will create a ?-method
206
+ # myStruct = SuperStruct.new(:alive)
207
+ # myStruct.attr_tester :alive
208
+ # x = myStruct.new(true)
209
+ # x.alive? # true
210
+ #
211
+ #
212
+ # == Author(s)
213
+ #
214
+ # * Hal Fulton
215
+ #
216
+
217
+ class SuperStruct
218
+
219
+ def SuperStruct.new(*args)
220
+ @table = []
221
+ @setsyms = [] # Setter symbols
222
+ klass = Class.new
223
+ if (args.size == 1) && (args[0].is_a? Array)
224
+ args = args[0]
225
+ end
226
+ strs = args.map {|x| x.to_s }
227
+ args.each_with_index do |k,i|
228
+ case
229
+ when (! [String,Symbol].include? k.class)
230
+ raise ArgumentError, "Need a String or Symbol"
231
+ when (strs[i] !~ /[_a-zA-Z][_a-zA-Z0-9]*/)
232
+ raise ArgumentError, "Illegal character"
233
+ end
234
+ k = k.intern if k.is_a? String
235
+ @table << k
236
+ @setsyms << (k.to_s + "=").intern
237
+ klass.instance_eval { attr_accessor k }
238
+ end
239
+
240
+ setsyms = @setsyms
241
+ table = @table
242
+ vals = @vals
243
+ klass.class_eval do
244
+ attr_reader :singleton
245
+ define_method(:initialize) do |*vals|
246
+ n = vals.size
247
+ m = table.size
248
+ case
249
+ when n < m
250
+ # raise ArgumentError, "Too few arguments (#{n} for #{m})"
251
+ # Never mind... extra variables will just be nil
252
+ when n > m
253
+ raise ArgumentError, "Too many arguments (#{n} for #{m})"
254
+ end
255
+ setsyms.each_with_index do |var,i|
256
+ self.send(var,vals[i])
257
+ end
258
+ end
259
+ define_method(:pretty_print) do |q| # pp.rb support
260
+ q.object_group(self) do
261
+ q.seplist(self.members, proc { q.text "," }) do |member|
262
+ # self.members.each do |member|
263
+ # q.text "," # unless q.first?
264
+ q.breakable
265
+ q.text member.to_s
266
+ q.text '='
267
+ q.group(1) do
268
+ q.breakable ''
269
+ q.pp self[member]
270
+ end
271
+ end
272
+ end
273
+ end
274
+ define_method(:inspect) do
275
+ str = "#<#{self.class}:"
276
+ table.each {|item| str << " #{item}=#{self.send(item)}" }
277
+ str + ">"
278
+ end
279
+ define_method(:[]) do |*index|
280
+ case index.map {|x| x.class }
281
+ when [Fixnum]
282
+ self.send(table[*index])
283
+ when [Fixnum,Fixnum], [Range]
284
+ table[*index].map {|x| self.send(x)}
285
+ when [String]
286
+ self.send(index[0].intern)
287
+ when [Symbol]
288
+ self.send(index[0])
289
+ else
290
+ raise ArgumentError,"Illegal index"
291
+ end
292
+ end
293
+ define_method(:[]=) do |*index|
294
+ value = index[-1]
295
+ index = index[0..-2]
296
+ case index.map {|x| x.class }
297
+ when [Fixnum]
298
+ self.send(table[*index])
299
+ when [Fixnum,Fixnum], [Range]
300
+ setsyms[*index].map {|x| self.send(x,value) }
301
+ when [String]
302
+ self.send(index[0].intern,value)
303
+ when [Symbol]
304
+ self.send(index[0],value)
305
+ else
306
+ raise ArgumentError,"Illegal index"
307
+ end
308
+ end
309
+ define_method(:to_a) { table.map {|x| eval("@"+x.to_s) } }
310
+ define_method(:to_ary) { to_a }
311
+ define_method(:members) { table.map {|x| x.to_s } }
312
+ define_method(:to_struct) do
313
+ mems = table
314
+ Struct.new("TEMP",*mems)
315
+ # Struct::TEMP.new(*vals) # Why doesn't this work??
316
+ data = mems.map {|x| self.send(x) }
317
+ Struct::TEMP.new(*data)
318
+ end
319
+ define_method(:to_hash) do
320
+ hash = {}
321
+ table.each do |mem|
322
+ mem = mem.to_s
323
+ hash.update(mem => self.send(mem))
324
+ end
325
+ hash
326
+ end
327
+ define_method(:set) {|h| h.each_pair {|k,v| send(k.to_s+"=",v) } }
328
+
329
+ # Class methods...
330
+
331
+ @singleton = class << self
332
+ self
333
+ end
334
+
335
+ @singleton.instance_eval do
336
+ define_method(:members) do
337
+ table.map {|x| x.to_s }
338
+ end
339
+ me = self
340
+ define_method(:attr_tester) do |*syms|
341
+ syms.each {|sym| alias_method(sym.to_s+"?",sym) }
342
+ end
343
+ end
344
+
345
+ end
346
+ klass
347
+ end
348
+
349
+
350
+ def SuperStruct.open(*args)
351
+ klass = SuperStruct.new(*args)
352
+ table = @table
353
+ setsyms = @setsyms
354
+ table = @table
355
+ klass.class_eval do
356
+ define_method(:method_missing) do |meth, *args|
357
+ mname = meth.id2name
358
+ if mname =~ /=$/
359
+ getter = mname.chop
360
+ setter = mname
361
+ elsif mname =~ /\?$/
362
+ raise NoMethodError # ?-methods are not created automatically
363
+ else
364
+ getter = mname
365
+ setter = mname + "="
366
+ end
367
+ gsym = getter.intern
368
+ ssym = setter.intern
369
+ ivar = "@" + getter
370
+ setsyms << setter
371
+ table << getter
372
+ len = args.length
373
+ if mname == getter
374
+ klass.class_eval do # getter
375
+ define_method(getter) do
376
+ instance_variable_get(ivar)
377
+ end
378
+ end
379
+ else
380
+ klass.class_eval do # setter
381
+ define_method(setter) do |*args|
382
+ if len != 1
383
+ raise ArgumentError, "Wrong # of arguments (#{len} for 1)", caller(1)
384
+ end
385
+ instance_variable_set(ivar,args[0])
386
+ instance_variable_get(ivar)
387
+ end
388
+ end
389
+ end
390
+ if mname == setter
391
+ self.send(setter,*args)
392
+ else
393
+ if len == 0
394
+ self.send(getter)
395
+ else
396
+ raise NoMethodError, "Undefined method '#{mname}' for #{self}", caller(1)
397
+ end
398
+ end
399
+ end
400
+ end
401
+ klass
402
+ end
403
+
404
+ end
405
+
406
+
407
+
408
+ # _____ _
409
+ # |_ _|__ ___| |_
410
+ # | |/ _ \/ __| __|
411
+ # | | __/\__ \ |_
412
+ # |_|\___||___/\__|
413
+ #
414
+
415
+ =begin testing
416
+
417
+ #
418
+ # SuperStruct test code
419
+ # Hal Fulton
420
+ # Version 1.0.1 (in sync with library code)
421
+ # License: The Ruby License
422
+ #
423
+
424
+ require "test/unit"
425
+
426
+ class Tester < Test::Unit::TestCase
427
+
428
+ def test001
429
+ # Must pass in String or Symbol
430
+ assert_raises(ArgumentError) { SuperStruct.new(0) }
431
+ end
432
+
433
+ def test002
434
+ # Must pass in valid name(s)
435
+ assert_raises(ArgumentError) { SuperStruct.new("###") }
436
+ end
437
+
438
+ def test003
439
+ # Can't assign to nonexistent fields
440
+ myStruct = SuperStruct.new
441
+ assert_raises(ArgumentError) { myStruct.new(345) }
442
+ end
443
+
444
+ def test004
445
+ # Need not assign to existing fields (default to nil)
446
+ myStruct = SuperStruct.new(:alpha)
447
+ assert_nothing_raised(ArgumentError) { myStruct.new }
448
+ end
449
+
450
+ def test005
451
+ # A value assigned at construction may be retrieved
452
+ myStruct = SuperStruct.new(:alpha)
453
+ x = myStruct.new(234)
454
+ assert(x.alpha == 234)
455
+ end
456
+
457
+ def test006
458
+ # Unassigned fields are nil
459
+ myStruct = SuperStruct.new(:alpha,:beta)
460
+ x = myStruct.new(234)
461
+ assert(x.beta == nil)
462
+ end
463
+
464
+ def test007
465
+ # An open structure still may not construct with nonexistent fields
466
+ myStruct = SuperStruct.open
467
+ assert_raises(ArgumentError) { x = myStruct.new(234) }
468
+ end
469
+
470
+ def test008
471
+ # An open structure may assign fields not previously existing
472
+ myStruct = SuperStruct.open
473
+ x = myStruct.new
474
+ assert_nothing_raised { x.foobar = 123 }
475
+ end
476
+
477
+ def test009
478
+ # A field assigned to an open struct after its construction may be retrieved
479
+ myStruct = SuperStruct.open
480
+ x = myStruct.new
481
+ x.foobar = 123
482
+ assert(x.foobar == 123)
483
+ end
484
+
485
+ def test010
486
+ # The act of retrieving a nonexistent field from an open struct will
487
+ # create that field
488
+ myStruct = SuperStruct.open
489
+ x = myStruct.new
490
+ assert_nothing_raised { y = x.foobar }
491
+ end
492
+
493
+ def test011
494
+ # A field (in an open struct) that is unassigned will be nil
495
+ myStruct = SuperStruct.open
496
+ x = myStruct.new
497
+ y = x.foobar
498
+ assert(y == nil)
499
+ end
500
+
501
+ def test012
502
+ # A struct created with new rather than open cannot reference nonexistent
503
+ # fields
504
+ myStruct = SuperStruct.new
505
+ x = myStruct.new
506
+ assert_raises(NoMethodError) { y = x.foobar }
507
+ end
508
+
509
+ def test013
510
+ # Adding a field to a struct will create a writer and reader for that field
511
+ myStruct = SuperStruct.new(:alpha)
512
+ x = myStruct.new
513
+ x.send(:alpha=,1)
514
+ assert(x.alpha == 1)
515
+ end
516
+
517
+ def test014
518
+ # Only a single value may be passed to a writer (for code coverage)
519
+ myStruct = SuperStruct.new(:alpha)
520
+ x = myStruct.new
521
+ assert_raises(ArgumentError) { x.send(:alpha=,1,2) }
522
+ end
523
+
524
+ def test015
525
+ # An open struct will also create a writer and a reader together
526
+ myStruct = SuperStruct.open
527
+ x = myStruct.new
528
+ x.send(:alpha=,1)
529
+ assert(x.alpha == 1)
530
+ end
531
+
532
+ def test016
533
+ # Only a single value may be passed to a writer (for code coverage)
534
+ myStruct = SuperStruct.open
535
+ x = myStruct.new
536
+ assert_raises(ArgumentError) { x.send(:alpha=,1,2) }
537
+ end
538
+
539
+ def test017
540
+ # A field has a real writer and reader corresponding to it
541
+ myStruct = SuperStruct.new(:alpha)
542
+ x = myStruct.new
543
+ assert(myStruct.instance_methods.include?("alpha"))
544
+ assert(myStruct.instance_methods.include?("alpha="))
545
+ end
546
+
547
+ def test018
548
+ # Creating a field by retrieval in an open struct will NOT create a writer
549
+ # (This behavior has changed!)
550
+ myStruct = SuperStruct.open
551
+ x = myStruct.new
552
+ y = x.alpha
553
+ assert(myStruct.instance_methods.include?("alpha"))
554
+ assert(!myStruct.instance_methods.include?("alpha="))
555
+ end
556
+
557
+ def test019
558
+ # Creating a field by writing in an open struct will NOT create a reader
559
+ # (This behavior has changed!)
560
+ myStruct = SuperStruct.open
561
+ x = myStruct.new
562
+ x.alpha = 5
563
+ assert(myStruct.instance_methods.include?("alpha="))
564
+ assert(!myStruct.instance_methods.include?("alpha"))
565
+ end
566
+
567
+ def test020
568
+ # A string will work as well as a symbol
569
+ myStruct = SuperStruct.new("alpha")
570
+ x = myStruct.new
571
+ assert(myStruct.instance_methods.include?("alpha"))
572
+ assert(myStruct.instance_methods.include?("alpha="))
573
+ end
574
+
575
+ def test021
576
+ # to_a will return an array of values
577
+ myStruct = SuperStruct.new("alpha","beta","gamma")
578
+ x = myStruct.new(7,8,9)
579
+ assert(x.to_a == [7,8,9])
580
+ end
581
+
582
+ def test022
583
+ # Instance method 'members' will return a list of members (as strings)
584
+ myStruct = SuperStruct.new(:alpha,"beta")
585
+ x = myStruct.new
586
+ assert_equal(["alpha","beta"],x.members)
587
+ end
588
+
589
+ def test023
590
+ # Class method 'members' will return a list of members (as strings)
591
+ myStruct = SuperStruct.new(:alpha,"beta")
592
+ assert_equal(["alpha","beta"],myStruct.members)
593
+ end
594
+
595
+ def test024
596
+ # to_ary will allow a struct to be treated like an array in
597
+ # multiple assignment
598
+ myStruct = SuperStruct.new("alpha","beta","gamma")
599
+ x = myStruct.new(7,8,9)
600
+ a,b,c = x
601
+ assert(b == 8)
602
+ end
603
+
604
+ def aux025(*arr) # Just used in test 25
605
+ arr[1]
606
+ end
607
+
608
+ def test025
609
+ # to_ary will allow a struct to be treated like an array in
610
+ # passed parameters
611
+ myStruct = SuperStruct.new("alpha","beta","gamma")
612
+ x = myStruct.new(7,8,9)
613
+ b = aux025(*x)
614
+ assert(b == 8)
615
+ end
616
+
617
+ def test026
618
+ # to_hash will return a hash with fields as keys
619
+ myStruct = SuperStruct.new("alpha","beta","gamma")
620
+ x = myStruct.new(7,8,9)
621
+ h = x.to_hash
622
+ assert_equal({"alpha"=>7,"beta"=>8,"gamma"=>9},h)
623
+ end
624
+
625
+ def test027
626
+ # A field name (String) may be used in a hash-like notation
627
+ myStruct = SuperStruct.new("alpha","beta","gamma")
628
+ x = myStruct.new(7,8,9)
629
+ y = x["beta"]
630
+ assert(8,y)
631
+ end
632
+
633
+ def test028
634
+ # A field name (Symbol) may be used in a hash-like notation
635
+ myStruct = SuperStruct.new("alpha","beta","gamma")
636
+ x = myStruct.new(7,8,9)
637
+ y = x[:beta]
638
+ assert(8,y)
639
+ end
640
+
641
+ def test029
642
+ # [offset,length] may be used as for arrays
643
+ myStruct = SuperStruct.new("alpha","beta","gamma")
644
+ x = myStruct.new(7,8,9)
645
+ y = x[0,2]
646
+ assert([7,8],y)
647
+ end
648
+
649
+ def test030
650
+ # Ranges may be used as for arrays
651
+ myStruct = SuperStruct.new("alpha","beta","gamma")
652
+ x = myStruct.new(7,8,9)
653
+ y = x[1..2]
654
+ assert([8,9],y)
655
+ end
656
+
657
+ def test031
658
+ # Adding a field to an open struct adds it to the instance
659
+ myStruct = SuperStruct.open(:alpha)
660
+ x = myStruct.new
661
+ x.beta = 5
662
+ assert_equal(["alpha","beta"],x.members)
663
+ end
664
+
665
+ def test032
666
+ # Adding a field to an open struct adds it to the class also
667
+ myStruct = SuperStruct.open(:alpha)
668
+ x = myStruct.new
669
+ x.beta = 5
670
+ assert_equal(["alpha","beta"],myStruct.members)
671
+ end
672
+
673
+ def test033
674
+ # An array passed to SuperStruct.new need not be starred
675
+ myStruct = SuperStruct.new(%w[alpha beta gamma])
676
+ x = myStruct.new
677
+ assert_equal(%w[alpha beta gamma],x.members)
678
+ end
679
+
680
+ def xtest034
681
+ # A hash passed to SuperStruct.new will initialize the values
682
+ # (but order will not be predictable!)
683
+ assert false, "Not implemented yet."
684
+ end
685
+
686
+ def test035
687
+ # A hash passed to #set will set multiple values at once
688
+ myStruct = SuperStruct.new(%w[alpha beta gamma])
689
+ x = myStruct.new
690
+ hash = {"alpha"=>234,"beta"=>345,"gamma"=>456}
691
+ x.set(hash)
692
+ assert_equal([234,345,456], x.to_a)
693
+ end
694
+
695
+ def test036
696
+ # Make sure ||= works properly
697
+ x = SuperStruct.open.new
698
+ x.foo ||= 333
699
+ x.bar = x.bar || 444
700
+ assert_equal(333,x.foo)
701
+ assert_equal(444,x.bar)
702
+ end
703
+
704
+ def test037
705
+ # A simple array index works ok
706
+ myStruct = SuperStruct.new("alpha","beta","gamma")
707
+ x = myStruct.new(7,8,9)
708
+ assert_equal(7,x[0])
709
+ assert_equal(8,x[1])
710
+ assert_equal(9,x[2])
711
+ end
712
+
713
+ def test038
714
+ # attr_tester will create a ?-method
715
+ klass = SuperStruct.new(:alpha,:beta,:gamma)
716
+ klass.attr_tester :alpha, :gamma
717
+ x = klass.new(22,33,nil)
718
+ assert(x.alpha?)
719
+ assert_raises(NoMethodError) { x.beta? }
720
+ assert(! x.gamma?)
721
+ end
722
+
723
+ def test039
724
+ # attr_tester works with open() (?-methods not created)
725
+ klass = SuperStruct.open(:alpha,:beta,:gamma)
726
+ klass.attr_tester :alpha, :gamma
727
+ x = klass.new(22,33,nil)
728
+ assert(x.alpha?)
729
+ assert_raises(NoMethodError) { x.beta? } # ?-methods are not automatic
730
+ assert(! x.gamma?)
731
+ end
732
+
733
+ end
734
+
735
+ =end