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
@@ -1,5 +1,2 @@
1
- require 'facets/kernel/require_relative'
2
-
3
1
  require_relative 'nilclass/ergo.rb'
4
- require_relative 'nilclass/to_f.rb'
5
2
 
@@ -1,12 +1,8 @@
1
- require 'facets/kernel/require_relative'
2
-
3
1
  require_relative 'numeric/approx.rb'
4
2
  require_relative 'numeric/distance.rb'
5
3
  require_relative 'numeric/length.rb'
6
4
  require_relative 'numeric/negative.rb'
7
5
  require_relative 'numeric/positive.rb'
8
- require_relative 'numeric/round.rb'
9
- require_relative 'numeric/round_at.rb'
10
6
  require_relative 'numeric/round_to.rb'
11
7
  require_relative 'numeric/spacing.rb'
12
8
 
@@ -17,7 +17,8 @@ class Numeric
17
17
  # Determines if another number is approximately equal
18
18
  # within a given +epsilon+.
19
19
  #
20
- # This is the same a {#approx?} but has a different defualt.
20
+ # This is the same a {#approx?} but has a different default.
21
+ # In this case it is 1/100th.
21
22
  #
22
23
  # @author Gavin Sinclair
23
24
  def close?(number, epsilon=0.01)
@@ -26,7 +27,7 @@ class Numeric
26
27
  a, b = self.to_f, number.to_f
27
28
  if a.zero? or b.zero?
28
29
  ## There's no scale, so we can only go on difference.
29
- (a - b).abs < @epsilon
30
+ (a - b).abs < epsilon
30
31
  else
31
32
  ## We go by ratio. The ratio of two equal numbers is one, so the ratio
32
33
  ## of two practically-equal floats will be very nearly one.
@@ -0,0 +1,12 @@
1
+ class Numeric
2
+
3
+ # Create a range from the number plus-or-minus a given value.
4
+ #
5
+ # Return [Range]
6
+ def range(value)
7
+ Range.new(self - value, self + value)
8
+ end
9
+
10
+ alias :plus_or_minus :range
11
+
12
+ end
@@ -1 +1,32 @@
1
- require 'facets/numeric/round'
1
+ class Numeric
2
+
3
+ # Conceptually, rounding is expected to apply to floating point numbers.
4
+ # However it can actually be applied to pretty much any Numeric object.
5
+ # For example, one could round an Integer to the nearest kilo.
6
+ #
7
+ # See Float#round_to.
8
+
9
+ def round_to(*args)
10
+ to_f.round_to(*args)
11
+ end
12
+
13
+ end
14
+
15
+ class Float
16
+
17
+ # Rounds to the nearest _n_th degree.
18
+ #
19
+ # 4.555.round_to(1) #=> 5.0
20
+ # 4.555.round_to(0.1) #=> 4.6
21
+ # 4.555.round_to(0.01) #=> 4.56
22
+ # 4.555.round_to(0) #=> 4.555
23
+ #
24
+ # CREDIT: Trans
25
+
26
+ def round_to( n ) #n=1
27
+ return self if n == 0
28
+ (self * (1.0 / n)).round.to_f / (1.0 / n)
29
+ end
30
+
31
+ end
32
+
@@ -1,8 +1,7 @@
1
- require 'facets/kernel/require_relative'
2
-
1
+ # TODO: Is there a good reason for these to be here instead of in Kernel module?
3
2
  require_relative 'object/clone.rb'
4
3
  require_relative 'object/dup.rb'
4
+ require_relative 'object/itself.rb'
5
5
  require_relative 'object/object_state.rb'
6
- require_relative 'object/replace.rb'
7
6
  require_relative 'object/try_dup.rb'
8
7
 
@@ -0,0 +1,16 @@
1
+ class Object
2
+
3
+ # An identity method that provides access to an object's 'self'.
4
+ #
5
+ # Example
6
+ #
7
+ # [1,2,3,4,5,1,2,2,3].group_by(&:itself)
8
+ # #=> {1=>[1, 1], 2=>[2, 2, 2], 3=>[3, 3], 4=>[4], 5=>[5]}
9
+ #
10
+ # CREDIT: Michael Kohl
11
+
12
+ def itself
13
+ self
14
+ end
15
+
16
+ end
@@ -1,6 +1,3 @@
1
- require 'facets/kernel/require_relative'
2
-
3
1
  require_relative 'objectspace/classes.rb'
4
2
  require_relative 'objectspace/op_fetch.rb'
5
- require_relative 'objectspace/reflect.rb'
6
3
 
@@ -1,9 +1,6 @@
1
- require 'facets/kernel/require_relative'
2
-
3
1
  require_relative 'proc/bind.rb'
4
2
  require_relative 'proc/bind_to.rb'
5
3
  require_relative 'proc/compose.rb'
6
- require_relative 'proc/curry.rb'
7
4
  require_relative 'proc/partial.rb'
8
5
  require_relative 'proc/to_method.rb'
9
6
  require_relative 'proc/update.rb'
@@ -1,8 +1,8 @@
1
1
  class Proc
2
2
 
3
- # Bind a procedure to an object. This works
4
- # wrapping instance_eval on the Proc object
5
- # and then wrapping this in a new Proc.
3
+ # Bind a procedure to an object. This works by
4
+ # wrapping instance_eval on the Proc object and
5
+ # then wrapping this in a new Proc.
6
6
  #
7
7
  # a = [1,2,3]
8
8
  # p1 = Proc.new{ join(' ') }
@@ -0,0 +1,17 @@
1
+ class Proc
2
+
3
+ # Wrap the argument in a proc. Simply returns the argument if it is
4
+ # already a Proc object.
5
+ #
6
+ # TODO: Would this make more sense as `Kernel#Proc()` method,
7
+ # akin to `Integer()` and the like?
8
+ #
9
+ # Returns [Proc]
10
+ #
11
+ # Credit: Sean Mackesey
12
+
13
+ def self.wrap(arg)
14
+ Proc === arg ? arg : Proc.new{ arg }
15
+ end
16
+
17
+ end
@@ -1,4 +1,2 @@
1
- require 'facets/kernel/require_relative'
2
-
3
1
  require_relative 'process/daemon.rb'
4
2
 
@@ -1,9 +1,9 @@
1
- require 'facets/kernel/require_relative'
2
-
3
1
  require_relative 'range/combine.rb'
4
2
  require_relative 'range/overlap.rb'
5
- #require_relative 'range/quantile.rb' # uncommon
6
- require_relative 'range/to_r.rb'
3
+ #require_relative 'range/quantile.rb' # uncommon
4
+ #require_relative 'range/op_add.rb' # too new
5
+ #require_relative 'range/op_sub.rb' # too new
6
+ require_relative 'range/to_rng.rb'
7
7
  require_relative 'range/umbrella.rb'
8
8
  require_relative 'range/within.rb'
9
9
 
@@ -0,0 +1,15 @@
1
+ require 'facets/array/arrange'
2
+
3
+ class Range
4
+
5
+ # Add two ranges to create a range array.
6
+ #
7
+ # Returns [Array]
8
+ #
9
+ # CREDIT: monocle
10
+
11
+ def +(value)
12
+ [self, value].arrange
13
+ end
14
+
15
+ end
@@ -0,0 +1,45 @@
1
+ class Range
2
+
3
+ # Subtract one range from another producing a range array.
4
+ #
5
+ # Examples
6
+ #
7
+ # (1..10) - (4..6) => [1..3, 7..10]
8
+ #
9
+ # (1..10) - (9..12) => [1..8]
10
+ #
11
+ # Returns [Array]
12
+ #
13
+ # CREDIT: monocle
14
+
15
+ def -(value)
16
+ if value.class == first.class
17
+ minus_obj(value)
18
+ else
19
+ [minus_obj(value.first)[0], minus_obj(value.last)[1]].compact
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ # TODO: Better name? Maybe make public?
26
+ def minus_obj(value)
27
+ f = case value <=> first.succ
28
+ when -1 then nil
29
+ when 0 then first
30
+ else
31
+ #value < last.succ ? first...value : self
32
+ value < last.succ ? first..(value.pred) : self
33
+ end
34
+
35
+ s = case last <=> value.succ
36
+ when -1 then nil
37
+ when 0 then last
38
+ else
39
+ value.succ > first ? (value.succ)..last : self
40
+ end
41
+
42
+ [f, s]
43
+ end
44
+
45
+ end
@@ -5,7 +5,7 @@ class Range
5
5
  #
6
6
  # CREDIT: Trans
7
7
 
8
- def to_r
8
+ def to_rng
9
9
  self
10
10
  end
11
11
 
@@ -1,5 +1,3 @@
1
- require 'facets/kernel/require_relative'
2
-
3
1
  require_relative 'regexp/arity.rb'
4
2
  require_relative 'regexp/multiline.rb'
5
3
  require_relative 'regexp/op_add.rb'
@@ -0,0 +1,13 @@
1
+ class Regexp
2
+
3
+ # Useful to pass a Regexp as a block that will match elements
4
+ #
5
+ # %w[ joe_the_dog mary_the_cat ].index &/cat/ #=> 1
6
+ #
7
+ # Returns [Proc] which passes it's argument to Regexp#match method.
8
+
9
+ def to_proc
10
+ proc { |x| match(x) }
11
+ end
12
+
13
+ end
@@ -1,9 +1,6 @@
1
- require 'facets/kernel/require_relative'
2
-
3
1
  require_relative 'string/acronym.rb'
4
2
  require_relative 'string/align.rb'
5
3
  require_relative 'string/bracket.rb'
6
- require_relative 'string/bytes.rb'
7
4
  require_relative 'string/camelcase.rb'
8
5
  require_relative 'string/capitalized.rb'
9
6
  require_relative 'string/characters.rb'
@@ -13,10 +10,9 @@ require_relative 'string/cmp.rb'
13
10
  require_relative 'string/compress_lines.rb'
14
11
  #require_relative 'string/crypt.rb' # uncommon
15
12
  require_relative 'string/divide.rb'
16
- require_relative 'string/each_char.rb'
17
13
  require_relative 'string/each_word.rb'
18
14
  require_relative 'string/edit_distance.rb'
19
- require_relative 'string/end_with.rb'
15
+ require_relative 'string/ends_with.rb'
20
16
  require_relative 'string/exclude.rb'
21
17
  require_relative 'string/expand_tab.rb'
22
18
  require_relative 'string/file.rb'
@@ -25,8 +21,8 @@ require_relative 'string/indent.rb'
25
21
  require_relative 'string/index_all.rb'
26
22
  require_relative 'string/interpolate.rb'
27
23
  require_relative 'string/lchomp.rb'
28
- require_relative 'string/lines.rb'
29
24
  require_relative 'string/line_wrap.rb'
25
+ require_relative 'string/linear.rb'
30
26
  require_relative 'string/lowercase.rb'
31
27
  require_relative 'string/margin.rb'
32
28
  require_relative 'string/methodize.rb'
@@ -35,23 +31,26 @@ require_relative 'string/mscan.rb'
35
31
  require_relative 'string/natcmp.rb'
36
32
  require_relative 'string/nchar.rb'
37
33
  require_relative 'string/newlines.rb'
34
+ require_relative 'string/number.rb'
38
35
  require_relative 'string/op_div.rb'
39
- require_relative 'string/op_sub.rb'
36
+ require_relative 'string/op_sub.rb' # included in `remove`.
40
37
  require_relative 'string/outdent.rb'
41
38
  require_relative 'string/pathize.rb'
42
39
  require_relative 'string/quote.rb'
43
- require_relative 'string/random_binary.rb'
40
+ require_relative 'string/random.rb'
44
41
  require_relative 'string/range.rb'
45
42
  require_relative 'string/range_all.rb'
46
43
  require_relative 'string/range_of_line.rb'
44
+ require_relative 'string/remove.rb'
47
45
  require_relative 'string/rewrite.rb'
48
46
  #require_relative 'integer/roman.rb' # uncommon
47
+ require_relative 'string/rotate.rb'
49
48
  require_relative 'string/shatter.rb'
50
49
  require_relative 'string/similarity.rb'
51
50
  require_relative 'string/snakecase.rb'
52
51
  require_relative 'string/splice.rb'
53
52
  require_relative 'string/squish.rb'
54
- require_relative 'string/start_with.rb'
53
+ require_relative 'string/starts_with.rb'
55
54
  require_relative 'string/store.rb'
56
55
  require_relative 'string/subtract.rb'
57
56
  require_relative 'string/tab.rb'
@@ -0,0 +1,52 @@
1
+ class String
2
+ # Get a new string with non-ASCII characters removed.
3
+ #
4
+ # alt - String to replace non-ASCII characters with.
5
+ # Defaults to a blank string (`''`).
6
+ #
7
+ # Examples
8
+ #
9
+ # 'abc'.ascii_only #=> 'abc'
10
+ # '中文123'.ascii_only #=> '123'
11
+ #
12
+ # Returns a copy of [String] with ASCII characters only.
13
+ #
14
+ # CREDIT: Nathan Long
15
+ #
16
+ # SEE: http://stackoverflow.com/questions/1268289
17
+ def ascii_only(alt='')
18
+ encoding_options = {
19
+ :invalid => :replace, # Replace invalid byte sequences
20
+ :undef => :replace, # Replace anything not defined in ASCII
21
+ :replace => alt, # Use a blank for those replacements
22
+ :UNIVERSAL_NEWLINE_DECORATOR => true # Always break lines with \n
23
+ }
24
+ self.encode(Encoding.find('ASCII'), encoding_options)
25
+ end
26
+
27
+ # Modify string keeping only ASCII characters.
28
+ #
29
+ # alt - String to replace non-ASCII characters with.
30
+ # Defaults to a blank string (`''`).
31
+ #
32
+ # Examples
33
+ #
34
+ # 'abc'.ascii_only! #=> 'abc'
35
+ # '中文123'.ascii_only! #=> '123'
36
+ #
37
+ # Returns [String]
38
+ #
39
+ # CREDIT: Nathan Long
40
+ #
41
+ # SEE: http://stackoverflow.com/questions/1268289
42
+ def ascii_only!(alt='')
43
+ encoding_options = {
44
+ :invalid => :replace, # Replace invalid byte sequences
45
+ :undef => :replace, # Replace anything not defined in ASCII
46
+ :replace => alt, # Use a blank for those replacements
47
+ :UNIVERSAL_NEWLINE_DECORATOR => true # Always break lines with \n
48
+ }
49
+ self.encode!(Encoding.find('ASCII'), encoding_options)
50
+ end
51
+
52
+ end
@@ -0,0 +1 @@
1
+ require 'facets/string/mscan'
@@ -0,0 +1 @@
1
+ require 'facets/string/starts_with'
@@ -2,6 +2,8 @@ require 'facets/functor'
2
2
 
3
3
  class String
4
4
 
5
+ # TODO: Should String#file be moved to functor gem?"
6
+
5
7
  # Use fluent notation for making file directives.
6
8
  #
7
9
  # For instance, if we had a file 'foo.txt',
@@ -9,27 +11,11 @@ class String
9
11
  # 'foo.txt'.file.mtime
10
12
  #
11
13
  def file
12
- Functor.new(&method(:file_send).to_proc)
14
+ f = self
15
+ Functor.new do |op, *a, &b|
16
+ File.send(op, f, *a, &b)
17
+ end
13
18
  end
14
19
 
15
- private
16
-
17
- def file_send(op, *a, &b)
18
- File.send(op, self, *a, &b)
19
- end
20
-
21
- ## TODO: When no longer needing to support 1.8.6 we can use:
22
- ##
23
- ## # Use fluent notation for making file directives.
24
- ## #
25
- ## # 'README.rdoc'.file.mtime
26
- ## #
27
- ## def file
28
- ## f = self
29
- ## Functor.new do |op, *a, &b|
30
- ## File.send(op, f, *a, &b)
31
- ## end
32
- ## end
33
-
34
20
  end
35
21
 
@@ -3,14 +3,14 @@ class String
3
3
  # Returns a new string with all new lines removed from
4
4
  # adjacent lines of text.
5
5
  #
6
- # s = "This is\na test.\n\nIt clumps\nlines of text."
7
- # s.fold
6
+ # s = "This is\na test.\n\nIt clumps\nlines of text."
7
+ # s.fold
8
8
  #
9
9
  # _produces_
10
10
  #
11
- # "This is a test.\n\nIt clumps lines of text. "
11
+ # "This is a test.\n\nIt clumps lines of text. "
12
12
  #
13
- # One arguable flaw with this, that might need a fix:
13
+ # TODO: One arguable flaw with this that might need a fix:
14
14
  # if the given string ends in a newline, it is replaced with
15
15
  # a single space.
16
16
  #
@@ -19,7 +19,7 @@ class String
19
19
  def fold(ignore_indented=false)
20
20
  ns = ''
21
21
  i = 0
22
- br = self.scan(/(\n\s*\n|\Z)/m) do |m|
22
+ self.scan(/(\n\s*\n|\Z)/m) do |m|
23
23
  b = $~.begin(1)
24
24
  e = $~.end(1)
25
25
  nl = $&