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,9 +1,15 @@
1
1
  class String
2
2
 
3
- # Indent left or right by n spaces.
4
- # (This used to be called #tab and aliased as #indent.)
3
+ # Indent left or right by `n` spaces, or `n` number of `c` string.
5
4
  #
6
- # CREDIT: Gavin Sinclair, Trans, Tyler Rick
5
+ # n - The number of spaces to indent. [Integer]
6
+ # c - Character to use, if other then space. [String]
7
+ #
8
+ # Returns a new string with the indention. [String]
9
+ #
10
+ # Credit: Gavin Sinclair
11
+ # Credit: Trans
12
+ # Credit: Tyler Rick
7
13
 
8
14
  def indent(n, c=' ')
9
15
  if n >= 0
@@ -14,30 +20,33 @@ class String
14
20
  end
15
21
 
16
22
  # Equivalent to String#indent, but modifies the receiver in place.
23
+ #
24
+ # n - The number of spaces to indent. [Integer]
25
+ # c - Character to use, if other then space. [String]
26
+ #
27
+ # Returns this string with the indention. [String]
17
28
 
18
29
  def indent!(n, c=' ')
19
30
  replace(indent(n,c))
20
31
  end
21
32
 
22
- # Remove excessive indentation. Useful for multi-line strings embeded in
23
- # already indented code.
24
- #
25
- # <<-END.unindent
26
- # ohaie
27
- # wurld
28
- # END
33
+ # Remove excessive indentation. Useful for multi-line strings
34
+ # embeded in already indented code.
29
35
  #
30
- # Outputs ...
36
+ # size - The number of spaces to indent. [Integer]
31
37
  #
32
- # ohaie
33
- # wurld
38
+ # Examples
34
39
  #
35
- # Instead of ...
40
+ # <<-END.unindent
41
+ # ohaie
42
+ # wurld
43
+ # END
44
+ # #=> "ohaie\n wurld"
36
45
  #
37
- # ohaie
38
- # wurld
46
+ # Returns a new unindented string. [String]
39
47
  #
40
- # CREDIT: Noah Gibbs, mynyml
48
+ # Credit: Noah Gibbs
49
+ # Credit: mynyml
41
50
 
42
51
  def unindent(size=nil)
43
52
  if size
@@ -57,11 +66,19 @@ class String
57
66
 
58
67
  # Equivalent to String#unindent, but modifies the receiver in place.
59
68
  #
60
- # CREDIT: mynyml
69
+ # Returns this string unindented. [String]
70
+ #
71
+ # Credit: mynyml
61
72
 
62
73
  def unindent!
63
- self.replace(self.unindent)
74
+ replace(unindent)
64
75
  end
65
76
 
66
- end
77
+ # DEPRECATED: Use String#indent instead.
78
+ alias :tab :indent
79
+ alias :tab! :indent!
67
80
 
81
+ #alias :backtab :unindent
82
+ #alias :backtab! :unindent!
83
+
84
+ end
@@ -0,0 +1,7 @@
1
+ require 'facets/indexable'
2
+ require 'facets/string/splice'
3
+
4
+ class String
5
+ include Indexable
6
+ end
7
+
@@ -1,13 +1,17 @@
1
1
  class String
2
2
 
3
- # Interpolate. Provides a means of extenally using Ruby string
3
+ # Interpolate provides a means of externally using Ruby string
4
4
  # interpolation mechinism.
5
5
  #
6
6
  # try = "hello"
7
7
  # str = "\#{try}!!!"
8
8
  # String.interpolate{ str } #=> "hello!!!"
9
9
  #
10
- # NOTE: The block neccessary in order to get then binding of the caller.
10
+ # Note this uses #eval under the hood. We do not recommend that
11
+ # it serve in place of a good templating system. But, it can be
12
+ # useful for simple cases.
13
+ #
14
+ # The block is neccessary in order to get then binding of the caller.
11
15
  #
12
16
  # CREDIT: Trans
13
17
 
@@ -0,0 +1,19 @@
1
+ require 'facets/functor'
2
+
3
+ class String
4
+
5
+ # TODO: Should String#linear be moved to separate functor gem?
6
+
7
+ # Like `#newlines` but returns a Functor instead.
8
+ #
9
+ # "a \n b \n c".linear.strip #=> "a\nb\nc"
10
+ #
11
+ def linear
12
+ Functor.new do |op, *a, &b|
13
+ lines.map { |line|
14
+ line.chomp.public_send(op, *a, &b)
15
+ }.join("\n")
16
+ end
17
+ end
18
+
19
+ end
@@ -1,31 +1,59 @@
1
+ require 'facets/string/indent'
2
+
1
3
  class String
2
4
 
3
- # Provides a margin controlled string.
5
+ # Preserve relative tabbing such that the line with the least amount
6
+ # of white space ends up with the given number of spaces before non-space
7
+ # and all other lines move relative to it.
8
+ #
9
+ # Because of the nature of this method, leading tab characters (`\t`) must
10
+ # be converted to spaces. The size of a tab can be set via the `:tab` option.
11
+ # The default size is 2.
12
+ #
13
+ # If the `:lead` option is set, then the relative margin is determined
14
+ # by the first non-blank line, instead of the minimum white-space for all
15
+ # lines.
16
+ #
17
+ # Arguments
18
+ #
19
+ # num - The size of the desired margin. [Integer]
20
+ # opts - Margin options. [Hash]
4
21
  #
5
- # x = %Q{
6
- # | This
7
- # | is
8
- # | margin controlled!
9
- # }.margin
22
+ # Options
10
23
  #
11
- # NOTE: This may still need a bit of tweaking.
24
+ # :tab - Size of tab character in spaces. [Integer]
25
+ # :lead - Use first non-blank line as relative marker. [Boolean]
12
26
  #
13
- # TODO: describe its limits and caveats and edge cases
27
+ # Returns a new String with adjusted margin. [String]
14
28
  #
15
- # CREDIT: Trans
29
+ # Author: Gavin Sinclair
30
+ # Author: Trans
16
31
 
17
- def margin(n=0)
18
- #d = /\A.*\n\s*(.)/.match( self )[1]
19
- #d = /\A\s*(.)/.match( self)[1] unless d
20
- d = ((/\A.*\n\s*(.)/.match(self)) ||
21
- (/\A\s*(.)/.match(self)))[1]
22
- return '' unless d
23
- if n == 0
24
- gsub(/\n\s*\Z/,'').gsub(/^\s*[#{d}]/, '')
32
+ def margin(num=nil, opts={})
33
+ # TODO: temporary to help people transition
34
+ raise ArgumentError, "String#margin has been renamed to #trim." unless num
35
+
36
+ tab = opts[:tab] || 2
37
+ str = gsub("\t", " " * tab) # TODO: only leading tabs ?
38
+
39
+ if opts[:lead]
40
+ if self =~ /^( *)\S/
41
+ indent(num - $1.length)
42
+ else
43
+ self
44
+ end
25
45
  else
26
- gsub(/\n\s*\Z/,'').gsub(/^\s*[#{d}]/, ' ' * n)
46
+ min = []
47
+ str.each_line do |line|
48
+ next if line.strip.empty?
49
+ min << line.index(/\S/)
50
+ end
51
+ min = min.min
52
+ str.indent(num - min)
27
53
  end
28
54
  end
29
55
 
30
- end
56
+ # Original name of #margin.
57
+ alias :tabto :margin
31
58
 
59
+ end
@@ -15,5 +15,8 @@ class String
15
15
  end
16
16
  end
17
17
 
18
+ # Alias for #mscan.
19
+ alias each_match mscan
20
+
18
21
  end
19
22
 
@@ -0,0 +1,14 @@
1
+ class String
2
+
3
+ # Returns true if it's a decimal digits.
4
+ #
5
+ # "123_456_789_123_456_789.123_456_000_111".number? # => true
6
+ # "1.23".number? # => true
7
+ # "1.23a".number? # => false
8
+ #
9
+ # CREDIT: u2
10
+
11
+ def number?
12
+ !!self.match(/\A[+-]?\d+?(_?\d+?)*?(\.\d+(_?\d+?)*?)?\Z/)
13
+ end
14
+ end
@@ -1,14 +1 @@
1
- class String
2
-
3
- # Removes occurances of a string or regexp.
4
- #
5
- # ("HELLO HELLO" - "LL") #=> "HEO HEO"
6
- #
7
- # CREDIT: Benjamin David Oakes
8
-
9
- def -(pattern)
10
- self.gsub(pattern, '')
11
- end
12
-
13
- end
14
-
1
+ require_relative 'remove'
@@ -0,0 +1,34 @@
1
+ class String
2
+
3
+ # Create a random String of given length, using given character set
4
+ #
5
+ # Examples
6
+ #
7
+ # String.random
8
+ # => "D9DxFIaqR3dr8Ct1AfmFxHxqGsmA4Oz3"
9
+ #
10
+ # String.random(10)
11
+ # => "t8BIna341S"
12
+ #
13
+ # String.random(10, ['a'..'z'])
14
+ # => "nstpvixfri"
15
+ #
16
+ # String.random(10, ['0'..'9'] )
17
+ # => "0982541042"
18
+ #
19
+ # String.random(10, ['0'..'9','A'..'F'] )
20
+ # => "3EBF48AD3D"
21
+ #
22
+ # CREDIT: Tilo Sloboda
23
+ #
24
+ # SEE: https://gist.github.com/tilo/3ee8d94871d30416feba
25
+ #
26
+ # TODO: Move to random.rb in standard library?
27
+
28
+ def self.random(len=32, character_set = ["A".."Z", "a".."z", "0".."9"])
29
+ characters = character_set.map { |i| i.to_a }.flatten
30
+ characters_len = characters.length
31
+ (0...len).map{ characters[rand(characters_len)] }.join
32
+ end
33
+
34
+ end
@@ -0,0 +1,30 @@
1
+ class String
2
+
3
+ # Removes all occurrences of a pattern in a string.
4
+ #
5
+ # Returns a new [String] with all occurrences of the pattern removed.
6
+ def remove(pattern)
7
+ gsub(pattern, '')
8
+ end
9
+
10
+ # Removes all occurrences of a pattern in a string.
11
+ #
12
+ # Returns the [String] with all occurrences of the pattern removed.
13
+ def remove!(pattern)
14
+ gsub!(pattern, '')
15
+ end
16
+
17
+ # Removes occurances of a string or regexp. This is an operator
18
+ # form for the #remove method.
19
+ #
20
+ # ("HELLO HELLO" - "LL") #=> "HEO HEO"
21
+ # ("HELLO PERL" - /L\S/) #=> "HEO PERL"
22
+ #
23
+ # Returns a new [String] with all pattern matches removed.
24
+ #
25
+ # CREDIT: Benjamin David Oakes
26
+ def -(pattern)
27
+ gsub(pattern, '')
28
+ end
29
+
30
+ end
@@ -0,0 +1,24 @@
1
+ class String
2
+
3
+ # Rotate string to the left with count.
4
+ # Specifying negative number indicates rotation to the right.
5
+ #
6
+ # 'abcdefgh'.rotate(2) #=> 'cdefghab'
7
+ # 'abcdefgh'.rotate(-2) #=> 'ghabcdef'
8
+ #
9
+ # CREDIT: T. Yamada
10
+ def rotate(count=1)
11
+ count+=self.length if count<0
12
+ self.slice(count,self.length-count)+self.slice(0,count)
13
+ end
14
+
15
+ # Destructive version of String#rotate
16
+ #
17
+ # s='abcdefgh'
18
+ # s.rotate!(2)
19
+ # s.should eq 'cdefghab'
20
+ #
21
+ # CREDIT: T. Yamada
22
+ def rotate!(count=1) replace(rotate(count)) end
23
+
24
+ end
@@ -36,7 +36,7 @@ class String
36
36
  # -- "graph" self
37
37
  last = self.length
38
38
  (0..last).each do |ff|
39
- loc = self.length
39
+ #loc = self.length
40
40
  break if ff == last - 1
41
41
  wordB = (1..(last-1)).to_a.reverse!
42
42
  if (wordB != nil)
@@ -50,7 +50,7 @@ class String
50
50
  # -- "graph" input string
51
51
  last = str_in.length
52
52
  (0..last).each{ |ff|
53
- loc = str_in.length
53
+ #loc = str_in.length
54
54
  break if ff == last - 1
55
55
  wordB = (1..(last-1)).to_a.reverse!
56
56
  wordB.each do |ss|
@@ -0,0 +1,5 @@
1
+ class String
2
+ alias starts_with? start_with?
3
+ alias ends_with? end_with?
4
+ end
5
+
@@ -1,17 +1,2 @@
1
- require 'facets/string/tabto'
2
-
3
- class String
4
-
5
- # Aligns each line n spaces.
6
- #
7
- # CREDIT: Gavin Sinclair
8
- #
9
- def tab(n)
10
- gsub(/^ */, ' ' * n)
11
- end
12
-
13
- # NOTE: Deprecated #taballto which was an alias for #tab.
14
- #alias_method :taballto, :tab
15
-
16
- end
17
-
1
+ # DEPRECATED
2
+ require 'facets/string/indent'
@@ -1,19 +1,2 @@
1
- require 'facets/string/indent'
2
-
3
- class String
4
-
5
- # Preserves relative tabbing.
6
- # The first non-empty line ends up with n spaces before nonspace.
7
- #
8
- # CREDIT: Gavin Sinclair
9
-
10
- def tabto(n)
11
- if self =~ /^( *)\S/
12
- indent(n - $1.length)
13
- else
14
- self
15
- end
16
- end
17
-
18
- end
19
-
1
+ # DEPRECATED
2
+ require 'facets/string/margin'
@@ -0,0 +1 @@
1
+ require_relative 'to_re'
@@ -0,0 +1,45 @@
1
+ class String
2
+
3
+ # Control the margin of a string using a trim character.
4
+ #
5
+ # The first character of the second line of the string
6
+ # is used as the trim character. This method is useful
7
+ # when literal multi-line strings are needed in code.
8
+ #
9
+ # num - Number of extra spaces with which to replace the
10
+ # trim character. [Integer]
11
+ #
12
+ # Examples
13
+ #
14
+ # x = %Q{
15
+ # | This
16
+ # | is
17
+ # | trim!
18
+ # }.trim
19
+ #
20
+ # Returns string with the margin trimed-off.
21
+ #
22
+ # Note: This this method used to be called `margin` prior to Facets 3.0.
23
+ #
24
+ # Since: 3.0.0
25
+ # Author: Trans
26
+
27
+ def trim(num=0)
28
+ #d = /\A.*\n\s*(.)/.match( self )[1]
29
+ #d = /\A\s*(.)/.match( self)[1] unless d
30
+
31
+ md = /\A.*\n\s*(.)/.match(self) || /\A\s*(.)/.match(self)
32
+
33
+ d = md[1]
34
+
35
+ return '' unless d
36
+
37
+ if num == 0
38
+ gsub(/\n\s*\Z/,'').gsub(/^\s*[#{d}]/, '')
39
+ else
40
+ gsub(/\n\s*\Z/,'').gsub(/^\s*[#{d}]/, ' ' * num)
41
+ end
42
+ end
43
+
44
+ end
45
+