facets 2.9.3 → 3.0.0

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 (491) hide show
  1. checksums.yaml +7 -0
  2. data/.index +76 -0
  3. data/CONTRIBUTE.md +78 -0
  4. data/HISTORY.md +2459 -0
  5. data/{RUBY.txt → LICENSE.txt} +0 -0
  6. data/README.rdoc +29 -7
  7. data/demo/applique/assertion_framework.rb +1 -0
  8. data/{qed → demo}/applique/file_helpers.rb +0 -0
  9. data/{qed → demo}/core/array/combination.rdoc +0 -0
  10. data/{qed → demo}/core/array/delete.rdoc +0 -0
  11. data/{qed → demo}/core/array/index.rdoc +0 -0
  12. data/{qed → demo}/core/array/merge.rdoc +0 -0
  13. data/{qed → demo}/core/array/only.rdoc +0 -0
  14. data/{qed → demo}/core/array/pad.rdoc +0 -0
  15. data/{qed → demo}/core/array/permutation.rdoc +0 -0
  16. data/{qed → demo}/core/array/product.rdoc +0 -0
  17. data/{qed → demo}/core/array/recursively.rdoc +0 -0
  18. data/{qed → demo}/core/array/rotate.rdoc +0 -0
  19. data/{qed → demo}/core/array/select.rdoc +0 -0
  20. data/{qed → demo}/core/array/uniq_by.rdoc +0 -0
  21. data/{qed → demo}/core/binding/caller.rdoc +0 -0
  22. data/{qed → demo}/core/binding/defined.rdoc +0 -0
  23. data/{qed → demo}/core/binding/eval.rdoc +0 -0
  24. data/{qed → demo}/core/binding/local_variables.rdoc +0 -0
  25. data/{qed → demo}/core/binding/opvars.rdoc +0 -0
  26. data/{qed → demo}/core/binding/self.rdoc +0 -0
  27. data/{qed → demo}/core/class/descendants.rdoc +0 -0
  28. data/{qed → demo}/core/class/to_proc.rdoc +0 -0
  29. data/{qed → demo}/core/comparable/cap.rdoc +0 -0
  30. data/{qed → demo}/core/comparable/clip.rdoc +0 -0
  31. data/{qed → demo}/core/comparable/cmp.rdoc +0 -0
  32. data/{qed → demo}/core/comparable/op_get.rdoc +0 -0
  33. data/{qed → demo}/core/dir/ascend.rdoc +0 -0
  34. data/{qed → demo}/core/dir/descend.rdoc +0 -0
  35. data/{qed → demo}/core/dir/multiglob.rdoc +0 -0
  36. data/{qed → demo}/core/dir/parent.rdoc +0 -0
  37. data/{qed → demo}/core/dir/recurse.rdoc +0 -0
  38. data/{qed → demo}/core/exception/detail.rdoc +0 -0
  39. data/{qed → demo}/core/facets.rdoc +0 -0
  40. data/{qed → demo}/core/filetest/root.rdoc +0 -0
  41. data/{qed → demo}/core/hash/recursively.rdoc +0 -0
  42. data/{qed → demo}/core/indexable.rdoc +0 -0
  43. data/{qed → demo}/core/integer/bitmask.rdoc +0 -0
  44. data/{qed → demo}/core/integer/even.rdoc +0 -0
  45. data/{qed → demo}/core/integer/factorial.rdoc +0 -0
  46. data/{qed → demo}/core/integer/length.rdoc +0 -0
  47. data/{qed → demo}/core/integer/multiple.rdoc +0 -0
  48. data/{qed → demo}/core/integer/odd.rdoc +0 -0
  49. data/{qed → demo}/core/integer/of.rdoc +0 -0
  50. data/{qed → demo}/core/integer/ordinal.rdoc +0 -0
  51. data/{qed → demo}/core/matchdata/match.rdoc +0 -0
  52. data/{qed → demo}/core/matchdata/matchset.rdoc +0 -0
  53. data/{qed → demo}/core/module/cattr.rdoc +0 -0
  54. data/{qed → demo}/core/module/class_extend.rdoc +0 -0
  55. data/{qed → demo}/core/module/class_inheritor.rdoc +0 -0
  56. data/{qed → demo}/core/module/copy_inheritor.rdoc +0 -0
  57. data/{qed → demo}/core/module/method_space.rdoc +0 -0
  58. data/{qed → demo}/core/string/align.rdoc +0 -0
  59. data/{qed → demo}/core/string/bracket.rdoc +0 -0
  60. data/{qed → demo}/core/string/bytes.rdoc +0 -0
  61. data/{qed → demo}/core/string/camelcase.rdoc +0 -0
  62. data/{qed → demo}/core/string/capitalized.rdoc +0 -0
  63. data/{qed → demo}/core/string/characters.rdoc +0 -0
  64. data/{qed → demo}/core/string/cleanlines.rdoc +0 -0
  65. data/{qed → demo}/core/string/cleave.rdoc +0 -0
  66. data/{qed → demo}/core/string/divide.rdoc +0 -0
  67. data/{qed → demo}/core/string/each_char.rdoc +0 -0
  68. data/{qed → demo}/core/string/each_word.rdoc +0 -0
  69. data/{qed → demo}/core/string/end_with.rdoc +0 -0
  70. data/{qed → demo}/core/string/expand_tabs.rdoc +0 -0
  71. data/{qed → demo}/core/string/fold.rdoc +0 -0
  72. data/{qed → demo}/core/string/indent.rdoc +0 -0
  73. data/{qed → demo}/core/string/interpolate.rdoc +0 -0
  74. data/{qed → demo}/core/string/lchomp.rdoc +0 -0
  75. data/{qed → demo}/core/string/line_wrap.rdoc +0 -0
  76. data/{qed → demo}/core/string/lines.rdoc +0 -0
  77. data/{qed → demo}/core/string/margin.rdoc +0 -0
  78. data/{qed → demo}/core/string/methodize.rdoc +0 -0
  79. data/{qed → demo}/core/string/modulize.rdoc +0 -0
  80. data/{qed → demo}/core/string/mscan.rdoc +0 -0
  81. data/{qed → demo}/core/string/natcmp.rdoc +0 -0
  82. data/{qed → demo}/core/string/nchar.rdoc +0 -0
  83. data/{qed → demo}/core/string/newlines.rdoc +0 -0
  84. data/{qed → demo}/core/string/op_sub.rdoc +0 -0
  85. data/{qed → demo}/core/string/pathize.rdoc +0 -0
  86. data/{qed → demo}/core/string/quote.rdoc +0 -0
  87. data/{qed → demo}/core/string/range.rdoc +0 -0
  88. data/{qed → demo}/core/string/rewrite.rdoc +0 -0
  89. data/{qed → demo}/core/string/shatter.rdoc +0 -0
  90. data/{qed → demo}/core/string/snakecase.rdoc +0 -0
  91. data/{qed → demo}/core/string/splice.rdoc +0 -0
  92. data/{qed → demo}/core/string/start_with.rdoc +0 -0
  93. data/{qed → demo}/core/string/subtract.rdoc +0 -0
  94. data/{qed → demo}/core/string/tab.rdoc +0 -0
  95. data/{qed → demo}/core/string/tabto.rdoc +0 -0
  96. data/{qed → demo}/core/string/titlecase.rdoc +0 -0
  97. data/{qed → demo}/core/string/to_re.rdoc +0 -0
  98. data/{qed → demo}/core/string/unfold.rdoc +0 -0
  99. data/{qed → demo}/core/string/unindent.rdoc +0 -0
  100. data/{qed → demo}/core/string/unquote.rdoc +0 -0
  101. data/{qed → demo}/core/string/variablize.rdoc +0 -0
  102. data/{qed → demo}/core/string/word_wrap.rdoc +0 -0
  103. data/{qed → demo}/core/string/words.rdoc +0 -0
  104. data/{qed → demo}/core/string/xor.rdoc +0 -0
  105. data/{qed → demo}/standard/02_cloneable.rdoc +0 -0
  106. data/{qed → demo}/standard/03_enumargs.rdoc +0 -0
  107. data/{qed → demo}/standard/04_equitable.rdoc +0 -0
  108. data/{qed → demo}/standard/05_instantiable.rdoc +0 -0
  109. data/{qed → demo}/standard/basic_object.rdoc +0 -0
  110. data/{qed → demo}/standard/memoizable.rdoc +0 -0
  111. data/{qed → demo}/standard/mulititon.rdoc +0 -0
  112. data/lib/core/facets.rb +1 -2
  113. data/lib/core/facets.yml +61 -42
  114. data/lib/core/facets/array.rb +8 -28
  115. data/lib/core/facets/array/arrange.rb +42 -0
  116. data/lib/core/facets/array/before.rb +2 -0
  117. data/lib/core/facets/array/collapse.rb +2 -0
  118. data/lib/core/facets/array/commonality.rb +24 -12
  119. data/lib/core/facets/array/duplicates.rb +22 -1
  120. data/lib/core/facets/array/each_overlap.rb +25 -0
  121. data/lib/core/facets/array/intersection.rb +25 -0
  122. data/lib/core/facets/array/missing.rb +29 -0
  123. data/lib/core/facets/array/nonuniq.rb +7 -53
  124. data/lib/core/facets/array/occur.rb +38 -0
  125. data/lib/core/facets/array/occurrence.rb +28 -0
  126. data/lib/core/facets/array/only.rb +12 -1
  127. data/lib/core/facets/array/recursively.rb +11 -5
  128. data/lib/core/facets/array/reject_values.rb +21 -0
  129. data/lib/core/facets/array/splice.rb +5 -1
  130. data/lib/core/facets/array/split.rb +5 -2
  131. data/lib/core/facets/array/squeeze.rb +23 -0
  132. data/lib/core/facets/array/step.rb +31 -0
  133. data/lib/core/facets/array/store.rb +4 -0
  134. data/lib/core/facets/array/to_h.rb +22 -0
  135. data/lib/core/facets/array/traverse.rb +11 -5
  136. data/lib/core/facets/array/uniq_by.rb +5 -1
  137. data/lib/core/facets/array/unique_permutation.rb +29 -0
  138. data/lib/core/facets/array/zip.rb +21 -0
  139. data/lib/core/facets/binding.rb +0 -3
  140. data/lib/core/facets/binding/call_stack.rb +1 -1
  141. data/lib/core/facets/binding/caller.rb +1 -3
  142. data/lib/core/facets/binding/callstack.rb +1 -1
  143. data/lib/core/facets/binding/defined.rb +0 -2
  144. data/lib/core/facets/binding/local_variables.rb +0 -2
  145. data/lib/core/facets/binding/op_get.rb +0 -2
  146. data/lib/core/facets/binding/self.rb +1 -3
  147. data/lib/core/facets/cattr.rb +1 -0
  148. data/lib/core/facets/class.rb +0 -2
  149. data/lib/core/facets/class/cattr.rb +1 -0
  150. data/lib/core/facets/class/singleton.rb +1 -13
  151. data/lib/core/facets/class/singleton_class.rb +16 -0
  152. data/lib/core/facets/comparable.rb +0 -2
  153. data/lib/core/facets/dir.rb +0 -2
  154. data/lib/core/facets/dir/ascend.rb +2 -2
  155. data/lib/core/facets/dir/lookup.rb +20 -0
  156. data/lib/core/facets/enumerable.rb +10 -9
  157. data/lib/core/facets/enumerable/accumulate.rb +18 -16
  158. data/lib/core/facets/enumerable/apply.rb +20 -0
  159. data/lib/core/facets/enumerable/associate.rb +6 -0
  160. data/lib/core/facets/enumerable/cluster.rb +24 -0
  161. data/lib/core/facets/enumerable/every.rb +1 -1
  162. data/lib/core/facets/enumerable/ewise.rb +2 -0
  163. data/lib/core/facets/enumerable/graph.rb +0 -3
  164. data/lib/core/facets/enumerable/hashify.rb +222 -19
  165. data/lib/core/facets/enumerable/hinge.rb +18 -0
  166. data/lib/core/facets/enumerable/key_by.rb +27 -0
  167. data/lib/core/facets/enumerable/map_to.rb +13 -0
  168. data/lib/core/facets/enumerable/mash.rb +34 -1
  169. data/lib/core/facets/enumerable/occur.rb +12 -9
  170. data/lib/core/facets/enumerable/only.rb +56 -0
  171. data/lib/core/facets/enumerable/{cluster_by.rb → organize_by.rb} +5 -4
  172. data/lib/core/facets/enumerable/pair.rb +20 -0
  173. data/lib/core/facets/enumerable/per.rb +27 -35
  174. data/lib/core/facets/enumerable/recursively.rb +3 -3
  175. data/lib/core/facets/enumerable/squeeze.rb +36 -0
  176. data/lib/core/facets/enumerable/sum.rb +18 -6
  177. data/lib/core/facets/enumerable/unassociate.rb +23 -0
  178. data/lib/core/facets/enumerable/value_by.rb +25 -0
  179. data/lib/core/facets/enumerator/fx.rb +16 -25
  180. data/lib/core/facets/enumerator/lazy/squeeze.rb +33 -0
  181. data/lib/core/facets/essentials.rb +65 -0
  182. data/lib/core/facets/exception.rb +0 -2
  183. data/lib/core/facets/exception/set_message.rb +10 -0
  184. data/lib/core/facets/file.rb +1 -2
  185. data/lib/core/facets/file/common_path.rb +17 -0
  186. data/lib/core/facets/file/rootname.rb +1 -1
  187. data/lib/core/facets/filetest.rb +0 -2
  188. data/lib/core/facets/filetest/relative.rb +1 -1
  189. data/lib/core/facets/filetest/safe.rb +14 -10
  190. data/lib/core/facets/float.rb +1 -3
  191. data/lib/core/facets/float/round_to.rb +1 -0
  192. data/lib/core/facets/functor.rb +8 -10
  193. data/lib/core/facets/hash.rb +2 -5
  194. data/lib/core/facets/hash/collate.rb +22 -8
  195. data/lib/core/facets/hash/count.rb +8 -4
  196. data/lib/core/facets/hash/data.rb +5 -2
  197. data/lib/core/facets/hash/dearray_values.rb +1 -1
  198. data/lib/core/facets/hash/deep_rekey.rb +54 -0
  199. data/lib/core/facets/hash/each_with_key.rb +12 -0
  200. data/lib/core/facets/hash/fetch_nested.rb +20 -0
  201. data/lib/core/facets/hash/keys.rb +4 -13
  202. data/lib/core/facets/hash/only_keys.rb +1 -0
  203. data/lib/core/facets/hash/op_push.rb +9 -1
  204. data/lib/core/facets/hash/op_sub.rb +1 -1
  205. data/lib/core/facets/hash/recursively.rb +6 -6
  206. data/lib/core/facets/hash/rekey.rb +26 -34
  207. data/lib/core/facets/hash/revalue.rb +61 -0
  208. data/lib/core/facets/hash/slice.rb +16 -3
  209. data/lib/core/facets/hash/subset.rb +11 -8
  210. data/lib/core/facets/hash/update_each.rb +1 -1
  211. data/lib/core/facets/hash/weave.rb +1 -1
  212. data/lib/core/facets/indexable.rb +6 -6
  213. data/lib/core/facets/integer.rb +0 -4
  214. data/lib/core/facets/kernel.rb +4 -7
  215. data/lib/core/facets/kernel/__dir__.rb +2 -0
  216. data/lib/core/facets/kernel/as.rb +2 -1
  217. data/lib/core/facets/kernel/call_stack.rb +1 -56
  218. data/lib/core/facets/kernel/callstack.rb +56 -1
  219. data/lib/core/facets/kernel/constant.rb +2 -0
  220. data/lib/core/facets/kernel/deep_clone.rb +27 -1
  221. data/lib/core/facets/kernel/deep_copy.rb +0 -24
  222. data/lib/core/facets/kernel/eigen.rb +2 -33
  223. data/lib/core/facets/kernel/eigenclass.rb +1 -1
  224. data/lib/core/facets/kernel/ergo.rb +1 -1
  225. data/lib/core/facets/kernel/extend.rb +4 -6
  226. data/lib/core/facets/kernel/instance_assign.rb +8 -6
  227. data/lib/core/facets/kernel/instance_extract.rb +22 -0
  228. data/lib/core/facets/kernel/instance_replace.rb +40 -0
  229. data/lib/core/facets/kernel/{equate.rb → like.rb} +7 -4
  230. data/lib/core/facets/kernel/load_relative.rb +25 -1
  231. data/lib/core/facets/kernel/meta.rb +35 -0
  232. data/lib/core/facets/kernel/meta_def.rb +4 -0
  233. data/lib/core/facets/kernel/object_send.rb +11 -14
  234. data/lib/core/facets/kernel/respond.rb +3 -13
  235. data/lib/core/facets/kernel/tap.rb +27 -39
  236. data/lib/core/facets/load_path.rb +1 -0
  237. data/lib/core/facets/load_path/search.rb +16 -0
  238. data/lib/core/facets/matchdata.rb +0 -2
  239. data/lib/core/facets/method.rb +0 -2
  240. data/lib/core/facets/method/composition.rb +32 -16
  241. data/lib/core/facets/method/curry.rb +13 -0
  242. data/lib/core/facets/method/partial.rb +10 -0
  243. data/lib/core/facets/method/public.rb +33 -0
  244. data/lib/core/facets/module.rb +0 -2
  245. data/lib/core/facets/module/alias_class_method.rb +11 -0
  246. data/lib/core/facets/module/basename.rb +1 -31
  247. data/lib/core/facets/module/cattr.rb +1 -0
  248. data/lib/core/facets/module/lastname.rb +30 -0
  249. data/lib/core/facets/module/mattr.rb +4 -4
  250. data/lib/core/facets/nilclass.rb +0 -3
  251. data/lib/core/facets/numeric.rb +0 -4
  252. data/lib/core/facets/numeric/approx.rb +3 -2
  253. data/lib/core/facets/numeric/range.rb +12 -0
  254. data/lib/core/facets/numeric/round_to.rb +32 -1
  255. data/lib/core/facets/object.rb +2 -3
  256. data/lib/core/facets/object/itself.rb +16 -0
  257. data/lib/core/facets/objectspace.rb +0 -3
  258. data/lib/core/facets/proc.rb +0 -3
  259. data/lib/core/facets/proc/bind_to.rb +3 -3
  260. data/lib/core/facets/proc/wrap.rb +17 -0
  261. data/lib/core/facets/process.rb +0 -2
  262. data/lib/core/facets/range.rb +4 -4
  263. data/lib/core/facets/range/op_add.rb +15 -0
  264. data/lib/core/facets/range/op_sub.rb +45 -0
  265. data/lib/core/facets/range/{to_r.rb → to_rng.rb} +1 -1
  266. data/lib/core/facets/regexp.rb +0 -2
  267. data/lib/core/facets/regexp/to_proc.rb +13 -0
  268. data/lib/core/facets/string.rb +8 -9
  269. data/lib/core/facets/string/ascii_only.rb +52 -0
  270. data/lib/core/facets/string/each_match.rb +1 -0
  271. data/lib/core/facets/string/ends_with.rb +1 -0
  272. data/lib/core/facets/string/file.rb +6 -20
  273. data/lib/core/facets/string/fold.rb +5 -5
  274. data/lib/core/facets/string/indent.rb +37 -20
  275. data/lib/core/facets/string/indexable.rb +7 -0
  276. data/lib/core/facets/string/interpolate.rb +6 -2
  277. data/lib/core/facets/string/linear.rb +19 -0
  278. data/lib/core/facets/string/margin.rb +47 -19
  279. data/lib/core/facets/string/mscan.rb +3 -0
  280. data/lib/core/facets/string/number.rb +14 -0
  281. data/lib/core/facets/string/op_sub.rb +1 -14
  282. data/lib/core/facets/string/random.rb +34 -0
  283. data/lib/core/facets/string/remove.rb +30 -0
  284. data/lib/core/facets/string/rotate.rb +24 -0
  285. data/lib/core/facets/string/similarity.rb +2 -2
  286. data/lib/core/facets/string/starts_with.rb +5 -0
  287. data/lib/core/facets/string/tab.rb +2 -17
  288. data/lib/core/facets/string/tabto.rb +2 -19
  289. data/lib/core/facets/string/to_rx.rb +1 -0
  290. data/lib/core/facets/string/trim.rb +45 -0
  291. data/lib/core/facets/string/unfold.rb +7 -2
  292. data/lib/core/facets/struct.rb +1 -2
  293. data/lib/core/facets/struct/replace.rb +8 -0
  294. data/lib/core/facets/symbol.rb +1 -3
  295. data/lib/core/facets/symbol/as_s.rb +3 -1
  296. data/lib/core/facets/symbol/call.rb +29 -0
  297. data/lib/core/facets/symbol/thrown.rb +9 -5
  298. data/lib/core/facets/time.rb +0 -2
  299. data/lib/core/facets/time/future.rb +6 -4
  300. data/lib/core/facets/unboundmethod.rb +0 -3
  301. data/lib/core/facets/version.rb +5 -5
  302. data/lib/standard/facets/against.rb +53 -0
  303. data/lib/standard/facets/binding/block_exec.rb +44 -0
  304. data/lib/standard/facets/cgi.rb +2 -40
  305. data/lib/standard/facets/cgi/esc.rb +11 -0
  306. data/lib/standard/facets/cgi/escape_html.rb +63 -0
  307. data/lib/standard/facets/cgi/marshal.rb +20 -0
  308. data/lib/standard/facets/cli.rb +54 -0
  309. data/lib/standard/facets/cloneable.rb +12 -9
  310. data/lib/standard/facets/enumargs.rb +159 -168
  311. data/lib/standard/facets/find.rb +1 -15
  312. data/lib/standard/facets/find/select.rb +16 -0
  313. data/lib/standard/facets/gem/search.rb +18 -0
  314. data/lib/standard/facets/gem/specification/current_specs.rb +21 -0
  315. data/lib/standard/facets/gem/specification/find_requireable_file.rb +21 -0
  316. data/lib/standard/facets/hash_builder.rb +46 -0
  317. data/lib/standard/facets/load_monitor.rb +26 -0
  318. data/lib/standard/facets/math.rb +57 -57
  319. data/lib/standard/facets/math/acosec.rb +1 -0
  320. data/lib/standard/facets/math/acsc.rb +6 -1
  321. data/lib/standard/facets/math/beta.rb +8 -3
  322. data/lib/standard/facets/math/cosec.rb +1 -0
  323. data/lib/standard/facets/math/cosech.rb +1 -0
  324. data/lib/standard/facets/math/csc.rb +6 -1
  325. data/lib/standard/facets/math/csch.rb +6 -1
  326. data/lib/standard/facets/math/distance.rb +19 -0
  327. data/lib/standard/facets/math/ec.rb +5 -0
  328. data/lib/standard/facets/math/lgamma.rb +21 -21
  329. data/lib/standard/facets/math/lngamma.rb +18 -0
  330. data/lib/standard/facets/math/pow.rb +6 -1
  331. data/lib/standard/facets/math/root.rb +1 -1
  332. data/lib/standard/facets/math/sign.rb +15 -4
  333. data/lib/standard/facets/math/tau.rb +5 -0
  334. data/lib/standard/facets/math/tgamma.rb +1 -1
  335. data/lib/standard/facets/memoizer.rb +63 -0
  336. data/lib/standard/facets/ostruct.rb +37 -156
  337. data/lib/standard/facets/ostruct/each.rb +11 -0
  338. data/lib/standard/facets/ostruct/initialize.rb +48 -0
  339. data/lib/standard/facets/ostruct/merge.rb +21 -0
  340. data/lib/standard/facets/ostruct/op_fetch.rb +29 -0
  341. data/lib/standard/facets/ostruct/op_store.rb +1 -0
  342. data/lib/standard/facets/ostruct/to_h.rb +10 -0
  343. data/lib/standard/facets/ostruct/to_ostruct.rb +65 -0
  344. data/lib/standard/facets/pathname.rb +18 -215
  345. data/lib/standard/facets/pathname/chdir.rb +15 -0
  346. data/lib/standard/facets/pathname/empty.rb +10 -0
  347. data/lib/standard/facets/pathname/exists.rb +6 -0
  348. data/lib/standard/facets/pathname/glob.rb +57 -0
  349. data/lib/standard/facets/pathname/home.rb +12 -0
  350. data/lib/standard/facets/pathname/null.rb +20 -0
  351. data/lib/standard/facets/pathname/op_div.rb +15 -0
  352. data/lib/standard/facets/pathname/op_fetch.rb +13 -0
  353. data/lib/standard/facets/pathname/outofdate.rb +13 -0
  354. data/lib/standard/facets/pathname/readline.rb +13 -0
  355. data/lib/standard/facets/pathname/root.rb +10 -0
  356. data/lib/standard/facets/pathname/rootname.rb +10 -0
  357. data/lib/standard/facets/pathname/safe.rb +15 -0
  358. data/lib/standard/facets/pathname/split_root.rb +9 -0
  359. data/lib/standard/facets/pathname/to_path.rb +28 -0
  360. data/lib/standard/facets/pathname/to_str.rb +8 -0
  361. data/lib/standard/facets/pathname/uptodate.rb +11 -0
  362. data/lib/standard/facets/pathname/visit.rb +38 -0
  363. data/lib/standard/facets/pathname/work.rb +10 -0
  364. data/lib/standard/facets/platform.rb +2 -2
  365. data/lib/standard/facets/random.rb +32 -2
  366. data/lib/standard/facets/shellwords.rb +5 -2
  367. data/lib/standard/facets/thread.rb +2 -2
  368. data/lib/standard/facets/uri.rb +7 -178
  369. data/lib/standard/facets/uri/cgi_escape.rb +46 -0
  370. data/lib/standard/facets/uri/cgi_parse.rb +1 -0
  371. data/lib/standard/facets/uri/cgi_unescape.rb +1 -0
  372. data/lib/standard/facets/uri/decode.rb +32 -0
  373. data/lib/standard/facets/uri/parameters.rb +63 -0
  374. data/lib/standard/facets/uri/query.rb +148 -0
  375. data/lib/standard/facets/yaml.rb +3 -56
  376. data/lib/standard/facets/yaml/file.rb +41 -0
  377. data/lib/standard/facets/yaml/kernel.rb +29 -0
  378. data/lib/standard/facets/yaml/read.rb +12 -0
  379. data/test/core/array/test_arrange.rb +37 -0
  380. data/test/core/array/test_each_overlap.rb +31 -0
  381. data/test/core/array/test_intersection.rb +19 -0
  382. data/test/core/array/test_missing.rb +12 -0
  383. data/test/core/array/test_occur.rb +52 -0
  384. data/test/core/array/test_occurrence.rb +20 -0
  385. data/test/core/array/test_reject_values.rb +17 -0
  386. data/test/core/array/test_squeeze.rb +22 -0
  387. data/test/core/array/test_step.rb +28 -0
  388. data/test/core/array/test_unique_permutation.rb +23 -0
  389. data/test/core/enumerable/test_key_by.rb +22 -0
  390. data/test/core/enumerable/test_occur.rb +18 -5
  391. data/test/core/enumerable/test_only.rb +40 -0
  392. data/test/core/enumerable/test_squeeze.rb +35 -0
  393. data/test/core/enumerable/test_sum.rb +8 -3
  394. data/test/core/enumerator/lazy/test_squeeze.rb +33 -0
  395. data/test/core/hash/test_count.rb +10 -1
  396. data/test/core/hash/test_deep_rekey.rb +131 -0
  397. data/test/core/hash/test_each_with_key.rb +16 -0
  398. data/test/core/hash/test_fetch_nested.rb +24 -0
  399. data/test/core/hash/test_keys.rb +0 -11
  400. data/test/core/hash/test_rekey.rb +41 -1
  401. data/test/core/hash/test_revalue.rb +98 -0
  402. data/test/core/hash/test_slice.rb +12 -1
  403. data/test/core/kernel/test_deep_clone.rb +31 -0
  404. data/test/core/kernel/test_deep_copy.rb +2 -28
  405. data/test/core/kernel/test_instance_extract.rb +28 -0
  406. data/test/core/method/test_composition.rb +42 -0
  407. data/test/core/range/test_op_add.rb +24 -0
  408. data/test/core/range/test_op_sub.rb +34 -0
  409. data/test/core/string/test_ascii_only.rb +30 -0
  410. data/test/core/string/test_margin.rb +4 -104
  411. data/test/core/string/test_number.rb +44 -0
  412. data/test/core/string/test_remove.rb +36 -0
  413. data/test/core/string/test_rotate.rb +31 -0
  414. data/test/core/string/test_trim.rb +116 -0
  415. data/test/core/symbol/test_thrown.rb +22 -0
  416. data/test/standard/binding/test_block_exec.rb +21 -0
  417. data/test/standard/math/test_acot.rb +23 -0
  418. data/test/standard/math/test_acoth.rb +22 -0
  419. data/test/standard/math/test_beta.rb +19 -0
  420. data/test/standard/math/test_ceil.rb +22 -0
  421. data/test/standard/math/test_cosec.rb +19 -0
  422. data/test/standard/math/test_cosech.rb +19 -0
  423. data/test/standard/math/test_cot.rb +13 -0
  424. data/test/standard/math/test_coth.rb +13 -0
  425. data/test/standard/math/test_distance.rb +16 -0
  426. data/test/standard/math/test_exp10.rb +14 -0
  427. data/test/standard/math/test_exp2.rb +14 -0
  428. data/test/standard/math/test_factorial.rb +13 -0
  429. data/test/standard/math/test_floor.rb +23 -0
  430. data/test/standard/math/test_gcd.rb +18 -0
  431. data/test/standard/math/test_lcm.rb +13 -0
  432. data/test/standard/math/test_pow.rb +30 -0
  433. data/test/standard/math/test_root.rb +15 -0
  434. data/test/standard/math/test_sec.rb +19 -0
  435. data/test/standard/math/test_sech.rb +19 -0
  436. data/test/standard/math/test_sign.rb +6 -0
  437. data/test/standard/math/test_sinc.rb +15 -0
  438. data/test/standard/math/test_srq.rb +20 -0
  439. data/test/standard/pathname/test_chdir.rb +16 -0
  440. data/test/standard/pathname/test_readline.rb +23 -0
  441. data/test/standard/test_enumargs.rb +1 -1
  442. data/test/standard/test_math.rb +3 -0
  443. data/test/standard/test_ostruct.rb +26 -21
  444. data/test/standard/test_uri.rb +9 -0
  445. metadata +802 -183
  446. data/.ruby +0 -54
  447. data/HISTORY.rdoc +0 -2386
  448. data/lib/core/facets/array/combination.rb +0 -43
  449. data/lib/core/facets/array/index.rb +0 -23
  450. data/lib/core/facets/array/occurent.rb +0 -1
  451. data/lib/core/facets/array/permutation.rb +0 -32
  452. data/lib/core/facets/array/product.rb +0 -30
  453. data/lib/core/facets/array/rotate.rb +0 -48
  454. data/lib/core/facets/array/select.rb +0 -20
  455. data/lib/core/facets/binding/eval.rb +0 -14
  456. data/lib/core/facets/enumerable/count.rb +0 -53
  457. data/lib/core/facets/enumerable/each_with_object.rb +0 -38
  458. data/lib/core/facets/enumerable/group_by.rb +0 -33
  459. data/lib/core/facets/enumerable/none.rb +0 -32
  460. data/lib/core/facets/enumerable/one.rb +0 -39
  461. data/lib/core/facets/enumerable/take.rb +0 -16
  462. data/lib/core/facets/float/round.rb +0 -2
  463. data/lib/core/facets/hash/select.rb +0 -17
  464. data/lib/core/facets/hash/to_h.rb +0 -1
  465. data/lib/core/facets/hash/url_params.rb +0 -21
  466. data/lib/core/facets/instance.rb +0 -157
  467. data/lib/core/facets/integer/even.rb +0 -1
  468. data/lib/core/facets/integer/odd.rb +0 -37
  469. data/lib/core/facets/kernel/__callee__.rb +0 -1
  470. data/lib/core/facets/kernel/__method__.rb +0 -48
  471. data/lib/core/facets/kernel/require_relative.rb +0 -52
  472. data/lib/core/facets/kernel/source_location.rb +0 -13
  473. data/lib/core/facets/nilclass/to_f.rb +0 -17
  474. data/lib/core/facets/numeric/round.rb +0 -69
  475. data/lib/core/facets/numeric/round_at.rb +0 -1
  476. data/lib/core/facets/object/replace.rb +0 -43
  477. data/lib/core/facets/objectspace/reflect.rb +0 -62
  478. data/lib/core/facets/proc/curry.rb +0 -32
  479. data/lib/core/facets/string/bytes.rb +0 -21
  480. data/lib/core/facets/string/each_char.rb +0 -31
  481. data/lib/core/facets/string/end_with.rb +0 -1
  482. data/lib/core/facets/string/lines.rb +0 -19
  483. data/lib/core/facets/string/random_binary.rb +0 -10
  484. data/lib/core/facets/string/start_with.rb +0 -60
  485. data/lib/core/facets/symbol/to_proc.rb +0 -33
  486. data/lib/core/facets/to_hash.rb +0 -336
  487. data/lib/core/facets/unboundmethod/name.rb +0 -28
  488. data/lib/standard/facets/math/gamma.rb +0 -12
  489. data/test/core/array/test_occurent.rb +0 -33
  490. data/test/core/kernel/test_source_location.rb +0 -25
  491. data/test/core/string/test_tabto.rb +0 -16
@@ -4,20 +4,23 @@
4
4
  # Cloneable was originally ported from Jim Weirich's Rake.
5
5
  # The current version is the work of Ken Bloom.
6
6
  #
7
+ # DEPRECATED: A better approach is to provide a #deep_dup and and a #deep_clone,
8
+ # then if a class needs these for #dup and #clone they can just alias them.
9
+ #
7
10
  # CREDIT: Ken Bloom
8
11
 
9
12
  module Cloneable
10
13
 
11
14
  def initialize_copy(sibling)
12
- #first duplicate my superclass' state. Note that if it's duplicating
13
- #instance variables, this will be overwritten, but this is important
14
- #because we could be dealing with a C extension with state hidden from
15
- #the Ruby interpreter
15
+ # First duplicate my superclass' state. Note that if it's duplicating
16
+ # instance variables, this will be overwritten, but this is important
17
+ # because we could be dealing with a C extension with state hidden from
18
+ # the Ruby interpreter.
16
19
  super
17
20
 
18
- #we want to know if we're being dup'ed or clone'd, because we want to
19
- #preserve the state of our internals the same way our state is being
20
- #preserved. (If we can't figure it out, we'll just use #dup.)
21
+ # We want to know if we're being dup'ed or clone'd, because we want to
22
+ # preserve the state of our internals the same way our state is being
23
+ # preserved. (If we can't figure it out, we'll just use #dup.)
21
24
  operation = (
22
25
  copy_call = caller.find{|x| x !~ /'initialize_copy'/}
23
26
  copy_match = copy_call.match(/`(dup|clone)'/)
@@ -27,8 +30,8 @@ module Cloneable
27
30
  sibling.instance_variables.each do |ivar|
28
31
  value = sibling.instance_variable_get(ivar)
29
32
 
30
- #set my instance variable to be a #dup or #clone
31
- #or my sibling, depending on what's happening to me right now
33
+ # Set my instance variable to be a #dup or #clone
34
+ # or my sibling, depending on what's happening to me right now.
32
35
  instance_variable_set(ivar, value.send(operation))
33
36
  end
34
37
  end
@@ -1,195 +1,186 @@
1
- # Enumerable::Arguments
2
- #
3
- # Copyright (c) 2004 Thomas Sawyer
4
- #
5
- # LGPL(3) 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
- begin
15
- require 'enumerator'
16
- rescue LoadError
17
- end
18
-
19
- # This is a simple reimplementation of the core Enumerable module
20
- # to allow the methods to take and pass-on arbitrary arguments to the
21
- # underlying #each call. This library uses Enumerator and scans
22
- # Enumerable so it can alwasy stay in sync.
23
- #
24
- # NOTE Any Enumerable method with a negative arity cannot do pass arguments
25
- # due to ambiguity in the argument count. So the methods #inject and #zip
26
- # do NOT work this way, but simply work as they do in Enumerable.
27
- # The method #find (and #detect) though has been made to work by removing
28
- # its rarely used optional parameter and providing instead an optional
29
- # keyword parameter (:ifnone => ...). Please keep these difference in mind.
30
- #
31
- # require 'enumargs'
32
- #
33
- # class T
34
- # include Enumerable::Arguments
35
- # def initialize(arr)
36
- # @arr = arr
37
- # end
38
- # def each(n)
39
- # arr.each{ |e| yield(e+n) }
40
- # end
41
- # end
42
- #
43
- # t = T.new([1,2,3])
44
- # t.collect(4)
45
- # #=> [5,6,7]
46
- #
47
1
  module Enumerable
48
- module Arguments
49
-
50
- def self.wrap_enumerable_method( methodname )
2
+ # This is a simple reimplementation of the core Enumerable module
3
+ # to allow its methods to take and pass-on arbitrary arguments to the
4
+ # underlying #each call. This library uses Enumerator and scans
5
+ # Enumerable so it can alwasy stay in sync.
6
+ #
7
+ # NOTE: Any Enumerable method with a negative arity cannot pass arguments
8
+ # due to ambiguity in the argument count. So the methods #inject and #zip
9
+ # do NOT work this way, but simply work as they do in Enumerable. However,
10
+ # The methods #find and #detect have been made modified to work by removing
11
+ # its rarely used optional parameter and providing instead an optional
12
+ # keyword parameter (:ifnone => ...). Please keep these difference in mind.
13
+ #
14
+ # Example
15
+ # require 'enumargs'
16
+ #
17
+ # class T
18
+ # include Enumerable::Argumentable
19
+ # def initialize(arr)
20
+ # @arr = arr
21
+ # end
22
+ # def each(n)
23
+ # arr.each{ |e| yield(e+n) }
24
+ # end
25
+ # end
26
+ #
27
+ # t = T.new([1,2,3])
28
+ # t.collect(4)
29
+ # #=> [5,6,7]
30
+ #
31
+ module Argumentable
32
+
33
+ # Helper method to wrap Enumerable methods.
34
+ def self.wrap_enumerable_method( methodname )
35
+ m = methodname
36
+ meth = Enumerable.instance_method(m)
37
+ arity = meth.arity
38
+
39
+ case arity <=> 0
40
+ when 0
41
+ class_eval %{
42
+ def #{m}( *args, &yld )
43
+ enum_for(:each, *args).#{m}( &yld )
44
+ end
45
+ }
46
+ when 1
47
+ class_eval %{
48
+ def #{m}( *args, &yld )
49
+ args, each_args = args[0...#{arity}], args[#{arity}..-1]
50
+ enum_for(:each, *each_args).#{m}( *args, &yld )
51
+ end
52
+ }
53
+ else
54
+ class_eval %{
55
+ def #{m}( *args, &yld )
56
+ enum_for(:each).#{m}( *args, &yld )
57
+ end
58
+ }
59
+ end
60
+ end
51
61
 
52
- m = methodname
53
- meth = Enumerable.instance_method(m)
54
- arity = meth.arity
62
+ # Wrap all Enumerable's public instance methods
63
+ Enumerable.instance_methods(false).each do |m|
64
+ wrap_enumerable_method( m )
65
+ end
55
66
 
56
- case arity <=> 0
57
- when 0
58
- class_eval %{
59
- def #{m}( *args, &yld )
60
- enum_for(:each, *args).#{m}( &yld )
61
- end
62
- }
63
- when 1
64
- class_eval %{
65
- def #{m}( *args, &yld )
66
- args, each_args = args[0...#{arity}], args[#{arity}..-1]
67
- enum_for(:each, *each_args).#{m}( *args, &yld )
68
- end
69
- }
70
- else
71
- class_eval %{
72
- def #{m}( *args, &yld )
73
- enum_for(:each).#{m}( *args, &yld )
74
- end
75
- }
67
+ # Support for #to_a.
68
+ #
69
+ def to_a(*args)
70
+ #map(*args){ |x| x }
71
+ enum_for(:each, *args).to_a
76
72
  end
77
- end
78
73
 
79
- Enumerable.instance_methods(false).each do |m|
80
- wrap_enumerable_method( m )
81
- end
74
+ # Make exception for #find (a negative arity method) to accept
75
+ # keyword argument.
76
+ #
77
+ # ObjectSpace.find(Class, :ifnone=>lambda{1}) { |e| ... }
78
+ # ObjectSpace.find(Class, :ifnone=>lambda{1}) { |e| ... }
79
+ #
80
+ def find(*args, &yld) # future use **keys ?
81
+ if Hash === args.last and args.last.key?(:ifnone)
82
+ ifnone = args.last.delete(:ifnone)
83
+ args.pop if args.last.empty?
84
+ enum_for(:each, *args).find( ifnone, &yld )
85
+ else
86
+ enum_for(:each, *args).find( &yld )
87
+ end
88
+ end
82
89
 
83
- #
84
- def to_a(*args)
85
- map(*args){ |x| x }
86
- end
90
+ alias_method :detect, :find
87
91
 
88
- # Make exception for #find (a negative arity method) to accept
89
- # keyword argument.
90
- #
91
- # ObjectSpace.find(Class, :ifnone=>lambda{1}) { |e| ... }
92
- # ObjectSpace.find(Class, :ifnone=>lambda{1}) { |e| ... }
93
- #
94
- def find(*args, &yld) # future use **keys ?
95
- if Hash === args.last and args.last.key?(:ifnone)
96
- ifnone = args.last.delete(:ifnone)
97
- args.pop if args.last.empty?
98
- enum_for(:each, *args).find( ifnone, &yld )
99
- else
100
- enum_for(:each, *args).find( &yld )
101
- end
102
92
  end
103
- alias_method :detect, :find
104
93
 
105
- end
94
+ # DEPRECATED: Module alias for old name.
95
+ Arguments = Argumentable
106
96
  end
107
97
 
108
98
 
109
99
  =begin OLD CODE
110
- module EnumerableArgs
100
+ module EnumerableArgs
111
101
 
112
- def collect(*args) # :yield:
113
- a = []
114
- each(*args){ |n| a << yield(n) }
115
- a
116
- end
117
- alias_method( :map, :collect )
102
+ def collect(*args) # :yield:
103
+ a = []
104
+ each(*args){ |n| a << yield(n) }
105
+ a
106
+ end
107
+ alias_method( :map, :collect )
118
108
 
119
- def detect(*args) # :yield:
120
- each(*args){ |n| return n if yield(n) }
121
- nil
122
- end
123
- alias_method( :find, :detect )
109
+ def detect(*args) # :yield:
110
+ each(*args){ |n| return n if yield(n) }
111
+ nil
112
+ end
113
+ alias_method( :find, :detect )
124
114
 
125
- def each_with_index(*args)
126
- i=0
127
- each(*args){ |*n| n << i; yield(*n); i+=1 }
128
- self
129
- end
115
+ def each_with_index(*args)
116
+ i=0
117
+ each(*args){ |*n| n << i; yield(*n); i+=1 }
118
+ self
119
+ end
130
120
 
131
- def to_a(*args)
132
- a = []
133
- each(*args){ |n| a << n }
134
- a
135
- end
136
- alias_method( :entries, :to_a )
137
-
138
- # An additional method not part of standard Enumerable.
139
- # The regular version of this method can be found in Facets,
140
- # but it is a bit more advanced then this one.
141
- # At some point they need to be put into sync.
142
- def each_slice(*args, &yld)
143
- a = []; s = []
144
- ar = yld.arity.abs
145
- each(*args){ |n|
146
- s << n
147
- if s.length >= ar
148
- yld.call(*s)
149
- s = []
150
- end
151
- }
152
- a
153
- end
154
- alias_method( :each_by, :each_slice )
121
+ def to_a(*args)
122
+ a = []
123
+ each(*args){ |n| a << n }
124
+ a
125
+ end
126
+ alias_method( :entries, :to_a )
127
+
128
+ # An additional method not part of standard Enumerable.
129
+ # The regular version of this method can be found in Facets,
130
+ # but it is a bit more advanced then this one.
131
+ # At some point they need to be put into sync.
132
+ def each_slice(*args, &yld)
133
+ a = []; s = []
134
+ ar = yld.arity.abs
135
+ each(*args){ |n|
136
+ s << n
137
+ if s.length >= ar
138
+ yld.call(*s)
139
+ s = []
140
+ end
141
+ }
142
+ a
143
+ end
144
+ alias_method( :each_by, :each_slice )
155
145
 
156
- def select(*args) # :yield:
157
- a = []
158
- each(*args){ |n| a << n if yield(n) }
159
- a
160
- end
161
- alias_method( :find_all, :select )
146
+ def select(*args) # :yield:
147
+ a = []
148
+ each(*args){ |n| a << n if yield(n) }
149
+ a
150
+ end
151
+ alias_method( :find_all, :select )
162
152
 
163
- def grep(pattern, *args)
164
- a = []
165
- each(*args){ |n| a << (block_given? ? yield(n) : n) if pattern === n }
166
- a
167
- end
153
+ def grep(pattern, *args)
154
+ a = []
155
+ each(*args){ |n| a << (block_given? ? yield(n) : n) if pattern === n }
156
+ a
157
+ end
168
158
 
169
- def include?(anObj, *args)
170
- each(*args){ |n| return true if anObj == n }
171
- false
172
- end
173
- alias_method( :member?, :include? )
159
+ def include?(anObj, *args)
160
+ each(*args){ |n| return true if anObj == n }
161
+ false
162
+ end
163
+ alias_method( :member?, :include? )
174
164
 
175
- def max(*args)
176
- to_a(*args).max
177
- end
165
+ def max(*args)
166
+ to_a(*args).max
167
+ end
178
168
 
179
- def min(*args)
180
- to_a(*args).min
181
- end
169
+ def min(*args)
170
+ to_a(*args).min
171
+ end
182
172
 
183
- def reject(*args)
184
- a = []
185
- each(*args){ |n| a << n if ! yield(n) }
186
- a
187
- end
173
+ def reject(*args)
174
+ a = []
175
+ each(*args){ |n| a << n if ! yield(n) }
176
+ a
177
+ end
188
178
 
189
- def sort(*args)
190
- # TODO
191
- end
179
+ def sort(*args)
180
+ # TODO
181
+ end
192
182
 
193
- end
183
+ end
194
184
  =end
195
185
 
186
+ # Copyright (c) 2004 Rubyworks (BSD-2-Clause)
@@ -1,16 +1,2 @@
1
- require 'facets/enumerator'
2
-
3
- module Find
4
- # Identical to find except select returns the matching files as an array.
5
- # (find returns nil, which is not very useful if you actually wanted an array.)
6
- # Calls the associated block with the name of every file and directory listed
7
- # as arguments, then recursively on their subdirectories, and so on.
8
- # Return a true (non-false) value from the block for every path that
9
- # you want to be returned in the resulting array. You can still use Find.prune.
10
- #
11
- # CREDIT: Tyler Rick
12
- def self.select(*paths, &block)
13
- Enumerator.new(self, :find, *paths).select{|value| yield value}
14
- end
15
- end
1
+ require 'facets/find/select'
16
2
 
@@ -0,0 +1,16 @@
1
+ require 'facets/enumerator'
2
+
3
+ module Find
4
+ # Identical to find except select returns the matching files as an array.
5
+ # (find returns nil, which is not very useful if you actually wanted an array.)
6
+ # Calls the associated block with the name of every file and directory listed
7
+ # as arguments, then recursively on their subdirectories, and so on.
8
+ # Return a true (non-false) value from the block for every path that
9
+ # you want to be returned in the resulting array. You can still use Find.prune.
10
+ #
11
+ # CREDIT: Tyler Rick
12
+ def self.select(*paths, &block)
13
+ Enumerator.new(self, :find, *paths).select{|value| yield value}
14
+ end
15
+ end
16
+
@@ -0,0 +1,18 @@
1
+ require 'facets/gem/specification/current_specs'
2
+
3
+ module Gem
4
+
5
+ # Search RubyGems for matching paths in current gem versions.
6
+ def self.search(match, options={})
7
+ matches = []
8
+ Gem::Specification.current_specs.each do |spec|
9
+ glob = File.join(spec.lib_dirs_glob, match)
10
+ list = Dir[glob] #.map{ |f| f.untaint }
11
+ list = list.map{ |d| d.chomp('/') }
12
+ matches.concat(list)
13
+ end
14
+ matches
15
+ end
16
+
17
+ end
18
+