facets 3.1.0 → 3.2.1

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 (770) hide show
  1. checksums.yaml +5 -5
  2. data/HISTORY.md +177 -0
  3. data/LICENSE.txt +21 -343
  4. data/README.md +34 -41
  5. data/lib/core/facets/array/arrange.rb +1 -42
  6. data/lib/core/facets/array/average.rb +0 -1
  7. data/lib/core/facets/array/before.rb +1 -1
  8. data/lib/core/facets/array/delete_first.rb +21 -0
  9. data/lib/core/facets/array/duplicates.rb +13 -0
  10. data/lib/core/facets/array/indexes.rb +113 -0
  11. data/lib/core/facets/array/nonuniq.rb +6 -8
  12. data/lib/core/facets/array/occurrence.rb +4 -1
  13. data/lib/core/facets/array/remove.rb +39 -0
  14. data/lib/core/facets/array/span.rb +29 -0
  15. data/lib/core/facets/array/split_at.rb +25 -0
  16. data/lib/core/facets/array/standard_deviation.rb +7 -2
  17. data/lib/core/facets/array/step.rb +12 -14
  18. data/lib/core/facets/array/to_ranges.rb +48 -0
  19. data/lib/core/facets/array/uniq_by.rb +3 -3
  20. data/lib/core/facets/array.rb +1 -1
  21. data/lib/core/facets/binding/caller.rb +8 -2
  22. data/lib/core/facets/binding/op_get.rb +7 -11
  23. data/lib/core/facets/binding/self.rb +4 -10
  24. data/lib/core/facets/boolean.rb +1 -1
  25. data/lib/core/facets/class/descendants.rb +0 -2
  26. data/lib/core/facets/class.rb +2 -2
  27. data/lib/core/facets/comparable/bound.rb +13 -1
  28. data/lib/core/facets/comparable/clip.rb +3 -32
  29. data/lib/core/facets/denumerable.rb +0 -3
  30. data/lib/core/facets/dir/find.rb +20 -0
  31. data/lib/core/facets/dir/recurse.rb +8 -26
  32. data/lib/core/facets/dir.rb +1 -1
  33. data/lib/core/facets/enumerable/compact_map.rb +2 -12
  34. data/lib/core/facets/enumerable/defer.rb +2 -13
  35. data/lib/core/facets/enumerable/each_by.rb +0 -2
  36. data/lib/core/facets/enumerable/frequency.rb +2 -2
  37. data/lib/core/facets/enumerable/hinge.rb +3 -4
  38. data/lib/core/facets/enumerable/map_with_index.rb +3 -6
  39. data/lib/core/facets/enumerable/mash.rb +5 -28
  40. data/lib/core/facets/enumerable/uniq_by.rb +4 -8
  41. data/lib/core/facets/enumerable/with_position.rb +58 -0
  42. data/lib/core/facets/enumerable.rb +2 -2
  43. data/lib/core/facets/enumerator.rb +2 -75
  44. data/lib/core/facets/essentials.rb +3 -3
  45. data/lib/core/facets/exception/error_print.rb +6 -71
  46. data/lib/core/facets/file/null.rb +3 -15
  47. data/lib/core/facets/file/read_binary.rb +3 -12
  48. data/lib/core/facets/file.rb +1 -1
  49. data/lib/core/facets/hash/except.rb +0 -7
  50. data/lib/core/facets/hash/fetch_nested.rb +8 -9
  51. data/lib/core/facets/hash/graph.rb +1 -1
  52. data/lib/core/facets/hash/rekey.rb +3 -3
  53. data/lib/core/facets/hash/revalue.rb +3 -3
  54. data/lib/core/facets/hash/{to_proc.rb → setter.rb} +8 -9
  55. data/lib/core/facets/hash/slice.rb +0 -26
  56. data/lib/core/facets/hash/update_keys.rb +4 -11
  57. data/lib/core/facets/hash/update_values.rb +4 -10
  58. data/lib/core/facets/hash.rb +1 -1
  59. data/lib/core/facets/indexable.rb +6 -4
  60. data/lib/core/facets/kernel/as.rb +2 -2
  61. data/lib/core/facets/kernel/callstack.rb +5 -24
  62. data/lib/core/facets/kernel/eigenclass.rb +6 -6
  63. data/lib/core/facets/kernel/extension.rb +3 -6
  64. data/lib/core/facets/kernel/functor.rb +16 -0
  65. data/lib/core/facets/kernel/instance_class.rb +4 -20
  66. data/lib/core/facets/kernel/instance_send.rb +5 -3
  67. data/lib/core/facets/kernel/load_relative.rb +8 -20
  68. data/lib/core/facets/kernel/memo.rb +4 -26
  69. data/lib/core/facets/kernel/meta_class.rb +10 -6
  70. data/lib/core/facets/kernel/object_class.rb +5 -6
  71. data/lib/core/facets/kernel/object_send.rb +5 -26
  72. data/lib/core/facets/kernel/qua_class.rb +4 -20
  73. data/lib/core/facets/kernel/require_all.rb +8 -20
  74. data/lib/core/facets/kernel/returning.rb +3 -19
  75. data/lib/core/facets/kernel/tap.rb +3 -36
  76. data/lib/core/facets/kernel/tee.rb +2 -0
  77. data/lib/core/facets/kernel/try.rb +38 -28
  78. data/lib/core/facets/kernel.rb +2 -4
  79. data/lib/core/facets/lazy.rb +1 -1
  80. data/lib/core/facets/matchdata.rb +1 -1
  81. data/lib/core/facets/module/alias_method_chain.rb +4 -43
  82. data/lib/core/facets/module/attr_setter.rb +3 -2
  83. data/lib/core/facets/module/can.rb +5 -16
  84. data/lib/core/facets/module/class_extend.rb +2 -2
  85. data/lib/core/facets/numeric.rb +2 -2
  86. data/lib/core/facets/object/dup.rb +0 -46
  87. data/lib/core/facets/object.rb +2 -2
  88. data/lib/core/facets/proc/bind.rb +0 -2
  89. data/lib/core/facets/proc/compose.rb +7 -28
  90. data/lib/core/facets/proc/to_method.rb +0 -1
  91. data/lib/core/facets/proc/update.rb +8 -1
  92. data/lib/core/facets/process.rb +1 -1
  93. data/lib/core/facets/range/intersection.rb +42 -0
  94. data/lib/core/facets/range/nudge.rb +6 -8
  95. data/lib/core/facets/range.rb +1 -1
  96. data/lib/core/facets/string/ascii_only.rb +2 -2
  97. data/lib/core/facets/string/cleanlines.rb +0 -2
  98. data/lib/core/facets/string/dashcase.rb +21 -0
  99. data/lib/core/facets/string/lchomp.rb +7 -14
  100. data/lib/core/facets/string/newlines.rb +0 -2
  101. data/lib/core/facets/string/snakecase.rb +12 -5
  102. data/lib/core/facets/string/words.rb +13 -1
  103. data/lib/core/facets/string.rb +0 -1
  104. data/lib/core/facets/struct/attributes.rb +2 -3
  105. data/lib/core/facets/symbol.rb +1 -1
  106. data/lib/core/facets/time/trunc.rb +12 -5
  107. data/lib/core/facets/unboundmethod/arguments.rb +1 -0
  108. data/lib/core/facets/version.rb +1 -17
  109. data/lib/core/facets.rb +0 -1
  110. data/lib/standard/facets/argvector.rb +1 -1
  111. data/lib/standard/facets/cgi/escape_html.rb +14 -25
  112. data/lib/standard/facets/cloneable.rb +4 -51
  113. data/lib/standard/facets/continuation.rb +2 -56
  114. data/lib/standard/facets/crypt3.rb +126 -0
  115. data/lib/standard/facets/date/cmp.rb +32 -0
  116. data/lib/standard/facets/date.rb +1 -0
  117. data/lib/standard/facets/digest.rb +0 -1
  118. data/lib/standard/facets/fileutils/cp_rx.rb +0 -2
  119. data/lib/standard/facets/fileutils/ln_r.rb +0 -1
  120. data/lib/standard/facets/find/select.rb +0 -2
  121. data/lib/standard/facets/getoptlong.rb +3 -59
  122. data/lib/standard/facets/load_monitor.rb +2 -26
  123. data/lib/standard/facets/math/gini_coefficient.rb +5 -4
  124. data/lib/standard/facets/math/kldivergence.rb +8 -7
  125. data/lib/standard/facets/math/percentile.rb +1 -1
  126. data/lib/standard/facets/multiton.rb +1 -1
  127. data/lib/standard/facets/opendsl.rb +33 -0
  128. data/lib/standard/facets/ostruct/initialize.rb +4 -19
  129. data/lib/standard/facets/ostruct/to_ostruct.rb +2 -1
  130. data/lib/standard/facets/ostruct.rb +0 -88
  131. data/lib/standard/facets/pathname/empty.rb +2 -10
  132. data/lib/standard/facets/pathname/glob.rb +19 -12
  133. data/lib/standard/facets/pathname/null.rb +3 -14
  134. data/lib/standard/facets/pic.rb +173 -0
  135. data/lib/standard/facets/random.rb +47 -133
  136. data/lib/standard/facets/tuple.rb +2 -4
  137. data/lib/standard/facets/uri.rb +3 -2
  138. metadata +31 -1172
  139. data/.index +0 -80
  140. data/.yardopts +0 -10
  141. data/NOTICE.rdoc +0 -167
  142. data/demo/applique/assertion_framework.rb +0 -1
  143. data/demo/applique/file_helpers.rb +0 -34
  144. data/demo/core/array/after.md +0 -13
  145. data/demo/core/array/arrange.md +0 -17
  146. data/demo/core/array/before.md +0 -14
  147. data/demo/core/array/collapse.md +0 -15
  148. data/demo/core/array/collisions.md +0 -30
  149. data/demo/core/array/commonality.md +0 -31
  150. data/demo/core/array/conjoin.md +0 -47
  151. data/demo/core/array/contains.md +0 -9
  152. data/demo/core/array/delete_unless.md +0 -13
  153. data/demo/core/array/delete_values.md +0 -10
  154. data/demo/core/array/delete_values_at.md +0 -15
  155. data/demo/core/array/divide.md +0 -14
  156. data/demo/core/array/duplicates.md +0 -14
  157. data/demo/core/array/each_overlap.md +0 -12
  158. data/demo/core/array/each_pair.md +0 -13
  159. data/demo/core/array/each_value.md +0 -12
  160. data/demo/core/array/entropy.md +0 -13
  161. data/demo/core/array/extract_options.md +0 -13
  162. data/demo/core/array/first.md +0 -11
  163. data/demo/core/array/from.md +0 -11
  164. data/demo/core/array/ideal_entropy.md +0 -11
  165. data/demo/core/array/intersection.md +0 -11
  166. data/demo/core/array/last.md +0 -11
  167. data/demo/core/array/median.md +0 -23
  168. data/demo/core/array/merge.md +0 -15
  169. data/demo/core/array/missing.md +0 -10
  170. data/demo/core/array/mode.md +0 -9
  171. data/demo/core/array/nonuniq.md +0 -16
  172. data/demo/core/array/not_empty.md +0 -8
  173. data/demo/core/array/occur.md +0 -18
  174. data/demo/core/array/occurrence.md +0 -13
  175. data/demo/core/array/only.md +0 -9
  176. data/demo/core/array/op_pow.md +0 -10
  177. data/demo/core/array/pad.md +0 -28
  178. data/demo/core/array/peek.md +0 -10
  179. data/demo/core/array/poke.md +0 -15
  180. data/demo/core/array/probability +0 -8
  181. data/demo/core/array/pull.md +0 -10
  182. data/demo/core/array/recurse.md +0 -10
  183. data/demo/core/array/recursively.md +0 -20
  184. data/demo/core/array/reject_values.md +0 -10
  185. data/demo/core/array/splice.md +0 -14
  186. data/demo/core/array/split.md +0 -13
  187. data/demo/core/array/squeeze.md +0 -14
  188. data/demo/core/array/step.md +0 -16
  189. data/demo/core/array/store.md +0 -9
  190. data/demo/core/array/thru.md +0 -12
  191. data/demo/core/array/to_h.md +0 -11
  192. data/demo/core/array/traverse.md +0 -20
  193. data/demo/core/array/uniq_by.md +0 -16
  194. data/demo/core/array/unique_permutation.md +0 -14
  195. data/demo/core/array/zip.md +0 -8
  196. data/demo/core/binding/caller.md +0 -57
  197. data/demo/core/binding/defined.md +0 -10
  198. data/demo/core/binding/opvars.md +0 -16
  199. data/demo/core/binding/self.md +0 -6
  200. data/demo/core/class/descendants.md +0 -13
  201. data/demo/core/class/to_proc.md +0 -11
  202. data/demo/core/comparable/at_least.md +0 -11
  203. data/demo/core/comparable/at_most.md +0 -11
  204. data/demo/core/comparable/bound.md +0 -13
  205. data/demo/core/comparable/cap.md +0 -11
  206. data/demo/core/comparable/clip.md +0 -29
  207. data/demo/core/comparable/cmp.md +0 -18
  208. data/demo/core/comparable/op_get.md +0 -32
  209. data/demo/core/dir/ascend.md +0 -24
  210. data/demo/core/dir/descend.md +0 -16
  211. data/demo/core/dir/multiglob.md +0 -41
  212. data/demo/core/dir/parent.md +0 -6
  213. data/demo/core/dir/recurse.md +0 -41
  214. data/demo/core/exception/detail.md +0 -19
  215. data/demo/core/facets.md +0 -6
  216. data/demo/core/filetest/root.md +0 -13
  217. data/demo/core/hash/recursively.md +0 -21
  218. data/demo/core/indexable.md +0 -95
  219. data/demo/core/integer/bitmask.md +0 -46
  220. data/demo/core/integer/factorial.md +0 -10
  221. data/demo/core/integer/length.md +0 -7
  222. data/demo/core/integer/multiple.md +0 -12
  223. data/demo/core/integer/of.md +0 -11
  224. data/demo/core/integer/ordinal.md +0 -11
  225. data/demo/core/integer/times_collect.md +0 -9
  226. data/demo/core/matchdata/match.md +0 -7
  227. data/demo/core/matchdata/matchset.md +0 -7
  228. data/demo/core/matchdata/matchtree.md +0 -10
  229. data/demo/core/module/cattr.md +0 -43
  230. data/demo/core/module/class_extend.md +0 -64
  231. data/demo/core/module/class_inheritor.md +0 -126
  232. data/demo/core/module/copy_inheritor.md +0 -30
  233. data/demo/core/module/include_as.md +0 -31
  234. data/demo/core/module/method_space.md +0 -24
  235. data/demo/core/string/acronym.md +0 -9
  236. data/demo/core/string/align.md +0 -34
  237. data/demo/core/string/ascii_only.md +0 -37
  238. data/demo/core/string/bracket.md +0 -35
  239. data/demo/core/string/camelcase.md +0 -47
  240. data/demo/core/string/capitalized.md +0 -27
  241. data/demo/core/string/characters.md +0 -11
  242. data/demo/core/string/cleanlines.md +0 -10
  243. data/demo/core/string/cleave.md +0 -49
  244. data/demo/core/string/compress_lines.md +0 -22
  245. data/demo/core/string/crypt.md +0 -15
  246. data/demo/core/string/divide.md +0 -9
  247. data/demo/core/string/each_word.md +0 -11
  248. data/demo/core/string/edit_distance.md +0 -15
  249. data/demo/core/string/exclude.md +0 -15
  250. data/demo/core/string/expand_tabs.md +0 -69
  251. data/demo/core/string/fold.md +0 -14
  252. data/demo/core/string/indent.md +0 -65
  253. data/demo/core/string/index_all.md +0 -14
  254. data/demo/core/string/interpolate.md +0 -8
  255. data/demo/core/string/lchomp.md +0 -14
  256. data/demo/core/string/line_wrap.md +0 -7
  257. data/demo/core/string/lowercase.md +0 -12
  258. data/demo/core/string/methodize.md +0 -22
  259. data/demo/core/string/modulize.md +0 -22
  260. data/demo/core/string/mscan.md +0 -10
  261. data/demo/core/string/natcmp.md +0 -10
  262. data/demo/core/string/nchar.md +0 -9
  263. data/demo/core/string/newlines.md +0 -9
  264. data/demo/core/string/number.md +0 -27
  265. data/demo/core/string/op_div.md +0 -10
  266. data/demo/core/string/op_sub.md +0 -7
  267. data/demo/core/string/pathize.md +0 -22
  268. data/demo/core/string/quote.md +0 -20
  269. data/demo/core/string/random.md +0 -25
  270. data/demo/core/string/range.md +0 -19
  271. data/demo/core/string/remove.md +0 -33
  272. data/demo/core/string/rewrite.md +0 -9
  273. data/demo/core/string/shatter.md +0 -9
  274. data/demo/core/string/similarity.md +0 -12
  275. data/demo/core/string/snakecase.md +0 -14
  276. data/demo/core/string/splice.md +0 -28
  277. data/demo/core/string/squish.md +0 -27
  278. data/demo/core/string/store.md +0 -10
  279. data/demo/core/string/subtract.md +0 -8
  280. data/demo/core/string/titlecase.md +0 -8
  281. data/demo/core/string/to_re.md +0 -22
  282. data/demo/core/string/trim.md +0 -92
  283. data/demo/core/string/unbracket.md +0 -24
  284. data/demo/core/string/underscore.md +0 -17
  285. data/demo/core/string/unfold.md +0 -9
  286. data/demo/core/string/unindent.md +0 -65
  287. data/demo/core/string/unquote.md +0 -6
  288. data/demo/core/string/uppercase.md +0 -15
  289. data/demo/core/string/variablize.md +0 -7
  290. data/demo/core/string/word_wrap.md +0 -54
  291. data/demo/core/string/words.md +0 -13
  292. data/demo/core/string/xor.md +0 -8
  293. data/demo/standard/02_cloneable.rdoc +0 -46
  294. data/demo/standard/03_enumargs.rdoc +0 -75
  295. data/demo/standard/04_equitable.rdoc +0 -35
  296. data/demo/standard/05_instantiable.rdoc +0 -42
  297. data/demo/standard/basic_object.rdoc +0 -22
  298. data/demo/standard/memoizable.rdoc +0 -134
  299. data/demo/standard/mulititon.rdoc +0 -156
  300. data/lib/core/facets/applique/file_helpers.rb +0 -33
  301. data/lib/core/facets/array/intersection.rb +0 -25
  302. data/lib/core/facets/array/op_pow.rb +0 -12
  303. data/lib/core/facets/array/to_h.rb +0 -19
  304. data/lib/core/facets/class/singleton.rb +0 -1
  305. data/lib/core/facets/class/singleton_class.rb +0 -16
  306. data/lib/core/facets/class/subclasses.rb +0 -28
  307. data/lib/core/facets/dir/each_child.rb +0 -16
  308. data/lib/core/facets/enumerable/filter.rb +0 -33
  309. data/lib/core/facets/enumerable/sum.rb +0 -40
  310. data/lib/core/facets/exception/set_message.rb +0 -10
  311. data/lib/core/facets/file/write.rb +0 -24
  312. data/lib/core/facets/fixnum.rb +0 -7
  313. data/lib/core/facets/kernel/__dir__.rb +0 -28
  314. data/lib/core/facets/kernel/constant.rb +0 -22
  315. data/lib/core/facets/kernel/instance_exec.rb +0 -47
  316. data/lib/core/facets/kernel/p.rb +0 -24
  317. data/lib/core/facets/kernel/singleton_class.rb +0 -10
  318. data/lib/core/facets/matchdata/match.rb +0 -15
  319. data/lib/core/facets/method/curry.rb +0 -13
  320. data/lib/core/facets/numeric/negative.rb +0 -1
  321. data/lib/core/facets/numeric/positive.rb +0 -15
  322. data/lib/core/facets/object/itself.rb +0 -16
  323. data/lib/core/facets/object/try_dup.rb +0 -1
  324. data/lib/core/facets/process/daemon.rb +0 -32
  325. data/lib/core/facets/range/overlap.rb +0 -12
  326. data/lib/core/facets/string/characters.rb +0 -13
  327. data/lib/core/facets/string/crypt.rb +0 -22
  328. data/lib/core/facets/symbol/succ.rb +0 -23
  329. data/lib/core/facets.yml +0 -80
  330. data/lib/standard/facets/basicobject.rb +0 -75
  331. data/lib/standard/facets/digest/base64digest.rb +0 -45
  332. data/lib/standard/facets/ostruct/each.rb +0 -11
  333. data/lib/standard/facets/ostruct/merge.rb +0 -21
  334. data/lib/standard/facets/ostruct/op_fetch.rb +0 -29
  335. data/lib/standard/facets/ostruct/op_store.rb +0 -1
  336. data/lib/standard/facets/ostruct/to_h.rb +0 -10
  337. data/test/core/array/test_arrange.rb +0 -37
  338. data/test/core/array/test_average.rb +0 -16
  339. data/test/core/array/test_before.rb +0 -48
  340. data/test/core/array/test_collapse.rb +0 -23
  341. data/test/core/array/test_commonality.rb +0 -35
  342. data/test/core/array/test_conjoin.rb +0 -50
  343. data/test/core/array/test_contains.rb +0 -14
  344. data/test/core/array/test_delete.rb +0 -42
  345. data/test/core/array/test_delete_unless.rb +0 -17
  346. data/test/core/array/test_delete_values.rb +0 -31
  347. data/test/core/array/test_divide.rb +0 -24
  348. data/test/core/array/test_duplicates.rb +0 -29
  349. data/test/core/array/test_each_overlap.rb +0 -31
  350. data/test/core/array/test_each_pair.rb +0 -16
  351. data/test/core/array/test_each_value.rb +0 -16
  352. data/test/core/array/test_entropy.rb +0 -23
  353. data/test/core/array/test_extract_options.rb +0 -28
  354. data/test/core/array/test_first.rb +0 -17
  355. data/test/core/array/test_from.rb +0 -42
  356. data/test/core/array/test_intersection.rb +0 -19
  357. data/test/core/array/test_last.rb +0 -17
  358. data/test/core/array/test_median.rb +0 -27
  359. data/test/core/array/test_merge.rb +0 -27
  360. data/test/core/array/test_missing.rb +0 -12
  361. data/test/core/array/test_mode.rb +0 -17
  362. data/test/core/array/test_nonuniq.rb +0 -25
  363. data/test/core/array/test_not_empty.rb +0 -17
  364. data/test/core/array/test_occur.rb +0 -52
  365. data/test/core/array/test_occurrence.rb +0 -20
  366. data/test/core/array/test_only.rb +0 -17
  367. data/test/core/array/test_op_pow.rb +0 -13
  368. data/test/core/array/test_pad.rb +0 -40
  369. data/test/core/array/test_peek.rb +0 -28
  370. data/test/core/array/test_poke.rb +0 -21
  371. data/test/core/array/test_probability.rb +0 -18
  372. data/test/core/array/test_pull.rb +0 -15
  373. data/test/core/array/test_recurse.rb +0 -40
  374. data/test/core/array/test_recursively.rb +0 -33
  375. data/test/core/array/test_reject_values.rb +0 -17
  376. data/test/core/array/test_splice.rb +0 -21
  377. data/test/core/array/test_split.rb +0 -22
  378. data/test/core/array/test_squeeze.rb +0 -22
  379. data/test/core/array/test_standard_deviation.rb +0 -18
  380. data/test/core/array/test_step.rb +0 -28
  381. data/test/core/array/test_store.rb +0 -22
  382. data/test/core/array/test_to_h.rb +0 -14
  383. data/test/core/array/test_traverse.rb +0 -26
  384. data/test/core/array/test_uniq_by.rb +0 -24
  385. data/test/core/array/test_unique_permutation.rb +0 -23
  386. data/test/core/array/test_variance.rb +0 -17
  387. data/test/core/array/test_zip.rb +0 -13
  388. data/test/core/binding/test_caller.rb +0 -69
  389. data/test/core/binding/test_defined.rb +0 -18
  390. data/test/core/binding/test_op.rb +0 -24
  391. data/test/core/binding/test_self.rb +0 -16
  392. data/test/core/class/test_descendents.rb +0 -19
  393. data/test/core/class/test_preallocate.rb +0 -32
  394. data/test/core/class/test_subclasses.rb +0 -20
  395. data/test/core/class/test_to_proc.rb +0 -16
  396. data/test/core/comparable/test_bound.rb +0 -32
  397. data/test/core/comparable/test_cap.rb +0 -36
  398. data/test/core/comparable/test_clip.rb +0 -31
  399. data/test/core/comparable/test_cmp.rb +0 -16
  400. data/test/core/comparable/test_op_get.rb +0 -61
  401. data/test/core/denumerable_tc.rb +0 -194
  402. data/test/core/dir/test_ascend.rb +0 -40
  403. data/test/core/dir/test_descend.rb +0 -24
  404. data/test/core/dir/test_each_child.rb +0 -22
  405. data/test/core/dir/test_multiglob.rb +0 -25
  406. data/test/core/dir/test_parent.rb +0 -14
  407. data/test/core/dir/test_recurse.rb +0 -26
  408. data/test/core/enumerable/test_accumulate.rb +0 -44
  409. data/test/core/enumerable/test_cluster.rb +0 -36
  410. data/test/core/enumerable/test_compact_map.rb +0 -32
  411. data/test/core/enumerable/test_defer.rb +0 -27
  412. data/test/core/enumerable/test_each_by.rb +0 -49
  413. data/test/core/enumerable/test_every.rb +0 -33
  414. data/test/core/enumerable/test_ewise.rb +0 -30
  415. data/test/core/enumerable/test_exclude.rb +0 -15
  416. data/test/core/enumerable/test_expand.rb +0 -15
  417. data/test/core/enumerable/test_filter.rb +0 -19
  418. data/test/core/enumerable/test_find_yield.rb +0 -96
  419. data/test/core/enumerable/test_frequency.rb +0 -15
  420. data/test/core/enumerable/test_graph.rb +0 -42
  421. data/test/core/enumerable/test_hashify.rb +0 -113
  422. data/test/core/enumerable/test_key_by.rb +0 -22
  423. data/test/core/enumerable/test_map_by.rb +0 -27
  424. data/test/core/enumerable/test_map_send.rb +0 -26
  425. data/test/core/enumerable/test_map_with_index.rb +0 -23
  426. data/test/core/enumerable/test_mash.rb +0 -17
  427. data/test/core/enumerable/test_modulate.rb +0 -17
  428. data/test/core/enumerable/test_occur.rb +0 -40
  429. data/test/core/enumerable/test_only.rb +0 -40
  430. data/test/core/enumerable/test_per.rb +0 -19
  431. data/test/core/enumerable/test_purge.rb +0 -22
  432. data/test/core/enumerable/test_recursively.rb +0 -33
  433. data/test/core/enumerable/test_squeeze.rb +0 -35
  434. data/test/core/enumerable/test_sum.rb +0 -40
  435. data/test/core/enumerable/test_uniq_by.rb +0 -25
  436. data/test/core/enumerable/test_visit.rb +0 -14
  437. data/test/core/enumerator/lazy/test_squeeze.rb +0 -33
  438. data/test/core/enumerator/test_fx.rb +0 -16
  439. data/test/core/enumerator/test_new.rb +0 -21
  440. data/test/core/enumerator_tc.rb +0 -40
  441. data/test/core/exception/test_detail.rb +0 -15
  442. data/test/core/exception/test_raised.rb +0 -15
  443. data/test/core/exception/test_suppress.rb +0 -16
  444. data/test/core/file/test_append.rb +0 -22
  445. data/test/core/file/test_create.rb +0 -17
  446. data/test/core/file/test_ext.rb +0 -31
  447. data/test/core/file/test_null.rb +0 -14
  448. data/test/core/file/test_read_binary.rb +0 -19
  449. data/test/core/file/test_read_list.rb +0 -16
  450. data/test/core/file/test_rewrite.rb +0 -35
  451. data/test/core/file/test_rootname.rb +0 -13
  452. data/test/core/file/test_sanitize.rb +0 -32
  453. data/test/core/file/test_split_all.rb +0 -14
  454. data/test/core/file/test_write.rb +0 -22
  455. data/test/core/file/test_writelines.rb +0 -21
  456. data/test/core/filetest/test_root.rb +0 -14
  457. data/test/core/functor_tc.rb +0 -41
  458. data/test/core/hash/test_alias.rb +0 -25
  459. data/test/core/hash/test_argumentize.rb +0 -23
  460. data/test/core/hash/test_at.rb +0 -16
  461. data/test/core/hash/test_autonew.rb +0 -22
  462. data/test/core/hash/test_collate.rb +0 -61
  463. data/test/core/hash/test_count.rb +0 -23
  464. data/test/core/hash/test_data.rb +0 -35
  465. data/test/core/hash/test_dearray_values.rb +0 -26
  466. data/test/core/hash/test_deep_merge.rb +0 -31
  467. data/test/core/hash/test_deep_rekey.rb +0 -131
  468. data/test/core/hash/test_delete_at.rb +0 -18
  469. data/test/core/hash/test_delete_unless.rb +0 -18
  470. data/test/core/hash/test_delete_values.rb +0 -30
  471. data/test/core/hash/test_diff.rb +0 -16
  472. data/test/core/hash/test_each_with_key.rb +0 -16
  473. data/test/core/hash/test_expect.rb +0 -34
  474. data/test/core/hash/test_fetch_nested.rb +0 -24
  475. data/test/core/hash/test_graph.rb +0 -40
  476. data/test/core/hash/test_insert.rb +0 -20
  477. data/test/core/hash/test_inverse.rb +0 -20
  478. data/test/core/hash/test_join.rb +0 -32
  479. data/test/core/hash/test_keys.rb +0 -41
  480. data/test/core/hash/test_new_with.rb +0 -17
  481. data/test/core/hash/test_op_add.rb +0 -17
  482. data/test/core/hash/test_op_and.rb +0 -31
  483. data/test/core/hash/test_op_mul.rb +0 -17
  484. data/test/core/hash/test_op_or.rb +0 -17
  485. data/test/core/hash/test_op_push.rb +0 -34
  486. data/test/core/hash/test_op_sub.rb +0 -28
  487. data/test/core/hash/test_recurse.rb +0 -39
  488. data/test/core/hash/test_recursively.rb +0 -71
  489. data/test/core/hash/test_rekey.rb +0 -119
  490. data/test/core/hash/test_replace_each.rb +0 -17
  491. data/test/core/hash/test_revalue.rb +0 -98
  492. data/test/core/hash/test_reverse_merge.rb +0 -39
  493. data/test/core/hash/test_slice.rb +0 -36
  494. data/test/core/hash/test_stringify_keys.rb +0 -26
  495. data/test/core/hash/test_swap.rb +0 -15
  496. data/test/core/hash/test_symbolize_keys.rb +0 -26
  497. data/test/core/hash/test_to_mod.rb +0 -24
  498. data/test/core/hash/test_to_proc.rb +0 -23
  499. data/test/core/hash/test_to_struct.rb +0 -22
  500. data/test/core/hash/test_traverse.rb +0 -29
  501. data/test/core/hash/test_update_each.rb +0 -16
  502. data/test/core/hash/test_update_keys.rb +0 -21
  503. data/test/core/hash/test_update_values.rb +0 -15
  504. data/test/core/hash/test_weave.rb +0 -18
  505. data/test/core/hash/test_zip.rb +0 -16
  506. data/test/core/indexable_tc.rb +0 -226
  507. data/test/core/integer/test_bitmask.rb +0 -73
  508. data/test/core/integer/test_factorial.rb +0 -30
  509. data/test/core/integer/test_multiple.rb +0 -16
  510. data/test/core/integer/test_of.rb +0 -36
  511. data/test/core/integer/test_ordinal.rb +0 -27
  512. data/test/core/kernel/test_as.rb +0 -74
  513. data/test/core/kernel/test_ask.rb +0 -9
  514. data/test/core/kernel/test_assign.rb +0 -61
  515. data/test/core/kernel/test_assign_from.rb +0 -48
  516. data/test/core/kernel/test_attr_singleton.rb +0 -51
  517. data/test/core/kernel/test_blank.rb +0 -103
  518. data/test/core/kernel/test_callstack.rb +0 -21
  519. data/test/core/kernel/test_class.rb +0 -14
  520. data/test/core/kernel/test_complete.rb +0 -19
  521. data/test/core/kernel/test_constant.rb +0 -18
  522. data/test/core/kernel/test_d.rb +0 -10
  523. data/test/core/kernel/test_deep_clone.rb +0 -31
  524. data/test/core/kernel/test_deep_copy.rb +0 -15
  525. data/test/core/kernel/test_dir.rb +0 -24
  526. data/test/core/kernel/test_disable_warnings.rb +0 -38
  527. data/test/core/kernel/test_ergo.rb +0 -34
  528. data/test/core/kernel/test_extension.rb +0 -18
  529. data/test/core/kernel/test_get.rb +0 -54
  530. data/test/core/kernel/test_here.rb +0 -13
  531. data/test/core/kernel/test_hierarchical_send.rb +0 -48
  532. data/test/core/kernel/test_in.rb +0 -14
  533. data/test/core/kernel/test_instance_assign.rb +0 -19
  534. data/test/core/kernel/test_instance_class.rb +0 -15
  535. data/test/core/kernel/test_instance_extract.rb +0 -28
  536. data/test/core/kernel/test_instance_replace.rb +0 -47
  537. data/test/core/kernel/test_instance_send.rb +0 -26
  538. data/test/core/kernel/test_maybe.rb +0 -13
  539. data/test/core/kernel/test_meta_alias.rb +0 -18
  540. data/test/core/kernel/test_meta_class.rb +0 -33
  541. data/test/core/kernel/test_meta_def.rb +0 -15
  542. data/test/core/kernel/test_meta_eval.rb +0 -18
  543. data/test/core/kernel/test_method.rb +0 -20
  544. data/test/core/kernel/test_not.rb +0 -51
  545. data/test/core/kernel/test_not_nil.rb +0 -25
  546. data/test/core/kernel/test_object_class.rb +0 -22
  547. data/test/core/kernel/test_object_hexid.rb +0 -20
  548. data/test/core/kernel/test_object_send.rb +0 -25
  549. data/test/core/kernel/test_presence.rb +0 -37
  550. data/test/core/kernel/test_qua_class.rb +0 -25
  551. data/test/core/kernel/test_require_all.rb +0 -11
  552. data/test/core/kernel/test_respond.rb +0 -38
  553. data/test/core/kernel/test_returning.rb +0 -17
  554. data/test/core/kernel/test_silence.rb +0 -24
  555. data/test/core/kernel/test_singleton_class.rb +0 -15
  556. data/test/core/kernel/test_super_method.rb +0 -23
  557. data/test/core/kernel/test_tap.rb +0 -38
  558. data/test/core/kernel/test_temporarily.rb +0 -25
  559. data/test/core/kernel/test_true.rb +0 -31
  560. data/test/core/kernel/test_try.rb +0 -35
  561. data/test/core/kernel/test_val.rb +0 -30
  562. data/test/core/kernel/test_with.rb +0 -18
  563. data/test/core/kernel/test_writers.rb +0 -53
  564. data/test/core/matchdata/test_match.rb +0 -14
  565. data/test/core/matchdata/test_matchset.rb +0 -29
  566. data/test/core/method/test_composition.rb +0 -42
  567. data/test/core/module/test_abstract.rb +0 -24
  568. data/test/core/module/test_alias_accessor.rb +0 -27
  569. data/test/core/module/test_alias_method_chain.rb +0 -34
  570. data/test/core/module/test_alias_module_function.rb +0 -24
  571. data/test/core/module/test_all_instance_methods.rb +0 -27
  572. data/test/core/module/test_ancestor.rb +0 -16
  573. data/test/core/module/test_anonymous.rb +0 -18
  574. data/test/core/module/test_attr_setter.rb +0 -28
  575. data/test/core/module/test_basename.rb +0 -14
  576. data/test/core/module/test_can.rb +0 -22
  577. data/test/core/module/test_class.rb +0 -22
  578. data/test/core/module/test_class_def.rb +0 -22
  579. data/test/core/module/test_class_extend.rb +0 -73
  580. data/test/core/module/test_class_inheritor.rb +0 -135
  581. data/test/core/module/test_copy_inheritor.rb +0 -35
  582. data/test/core/module/test_enclosure.rb +0 -24
  583. data/test/core/module/test_instance_function.rb +0 -30
  584. data/test/core/module/test_instance_method.rb +0 -20
  585. data/test/core/module/test_instance_method_defined.rb +0 -38
  586. data/test/core/module/test_integrate.rb +0 -28
  587. data/test/core/module/test_is.rb +0 -50
  588. data/test/core/module/test_memoize.rb +0 -33
  589. data/test/core/module/test_method_clash.rb +0 -59
  590. data/test/core/module/test_method_space.rb +0 -72
  591. data/test/core/module/test_methodize.rb +0 -26
  592. data/test/core/module/test_modname.rb +0 -13
  593. data/test/core/module/test_module_def.rb +0 -22
  594. data/test/core/module/test_module_load.rb +0 -23
  595. data/test/core/module/test_nodef.rb +0 -19
  596. data/test/core/module/test_op.rb +0 -56
  597. data/test/core/module/test_pathize.rb +0 -25
  598. data/test/core/module/test_preextend.rb +0 -26
  599. data/test/core/module/test_redefine_method.rb +0 -30
  600. data/test/core/module/test_redirect_method.rb +0 -32
  601. data/test/core/module/test_remove.rb +0 -18
  602. data/test/core/module/test_rename_method.rb +0 -34
  603. data/test/core/module/test_revise.rb +0 -61
  604. data/test/core/module/test_set.rb +0 -30
  605. data/test/core/module/test_spacename.rb +0 -15
  606. data/test/core/module/test_to_obj.rb +0 -20
  607. data/test/core/module/test_wrap_method.rb +0 -32
  608. data/test/core/numeric/test_approx.rb +0 -26
  609. data/test/core/numeric/test_delimit.rb +0 -68
  610. data/test/core/numeric/test_distance.rb +0 -16
  611. data/test/core/numeric/test_length.rb +0 -16
  612. data/test/core/numeric/test_round_to.rb +0 -76
  613. data/test/core/numeric/test_spacing.rb +0 -17
  614. data/test/core/object/test_dup.rb +0 -115
  615. data/test/core/object/test_object_state.rb +0 -75
  616. data/test/core/object/test_try_dup.rb +0 -59
  617. data/test/core/proc/test_bind.rb +0 -29
  618. data/test/core/proc/test_bind_to.rb +0 -17
  619. data/test/core/proc/test_compose.rb +0 -27
  620. data/test/core/proc/test_partial.rb +0 -27
  621. data/test/core/proc/test_to_method.rb +0 -43
  622. data/test/core/proc/test_update.rb +0 -15
  623. data/test/core/range/test_combine.rb +0 -32
  624. data/test/core/range/test_nudge.rb +0 -32
  625. data/test/core/range/test_op_add.rb +0 -24
  626. data/test/core/range/test_op_sub.rb +0 -34
  627. data/test/core/range/test_overlap.rb +0 -15
  628. data/test/core/range/test_to_rng.rb +0 -20
  629. data/test/core/range/test_umbrella.rb +0 -32
  630. data/test/core/range/test_within.rb +0 -25
  631. data/test/core/regexp/test_arity.rb +0 -30
  632. data/test/core/regexp/test_multiline.rb +0 -19
  633. data/test/core/regexp/test_op_add.rb +0 -15
  634. data/test/core/regexp/test_op_or.rb +0 -16
  635. data/test/core/regexp/test_to_re.rb +0 -24
  636. data/test/core/string/test_acronym.rb +0 -14
  637. data/test/core/string/test_align.rb +0 -32
  638. data/test/core/string/test_ascii_only.rb +0 -51
  639. data/test/core/string/test_bracket.rb +0 -37
  640. data/test/core/string/test_camelcase.rb +0 -59
  641. data/test/core/string/test_capitalized.rb +0 -36
  642. data/test/core/string/test_characters.rb +0 -13
  643. data/test/core/string/test_cleanlines.rb +0 -12
  644. data/test/core/string/test_cleave.rb +0 -27
  645. data/test/core/string/test_cmp.rb +0 -18
  646. data/test/core/string/test_compress_lines.rb +0 -27
  647. data/test/core/string/test_crypt.rb +0 -17
  648. data/test/core/string/test_divide.rb +0 -17
  649. data/test/core/string/test_each_word.rb +0 -17
  650. data/test/core/string/test_edit_distance.rb +0 -20
  651. data/test/core/string/test_exclude.rb +0 -23
  652. data/test/core/string/test_expand_tabs.rb +0 -83
  653. data/test/core/string/test_file.rb +0 -15
  654. data/test/core/string/test_fold.rb +0 -21
  655. data/test/core/string/test_indent.rb +0 -90
  656. data/test/core/string/test_index_all.rb +0 -22
  657. data/test/core/string/test_interpolate.rb +0 -16
  658. data/test/core/string/test_lchomp.rb +0 -25
  659. data/test/core/string/test_line_wrap.rb +0 -15
  660. data/test/core/string/test_lowercase.rb +0 -18
  661. data/test/core/string/test_margin.rb +0 -16
  662. data/test/core/string/test_methodize.rb +0 -28
  663. data/test/core/string/test_modulize.rb +0 -28
  664. data/test/core/string/test_mscan.rb +0 -18
  665. data/test/core/string/test_natcmp.rb +0 -17
  666. data/test/core/string/test_nchar.rb +0 -17
  667. data/test/core/string/test_newlines.rb +0 -14
  668. data/test/core/string/test_number.rb +0 -44
  669. data/test/core/string/test_op_div.rb +0 -15
  670. data/test/core/string/test_op_sub.rb +0 -15
  671. data/test/core/string/test_pathize.rb +0 -31
  672. data/test/core/string/test_quote.rb +0 -41
  673. data/test/core/string/test_random.rb +0 -25
  674. data/test/core/string/test_range.rb +0 -35
  675. data/test/core/string/test_remove.rb +0 -50
  676. data/test/core/string/test_rewrite.rb +0 -17
  677. data/test/core/string/test_rotate.rb +0 -31
  678. data/test/core/string/test_shatter.rb +0 -17
  679. data/test/core/string/test_similarity.rb +0 -22
  680. data/test/core/string/test_snakecase.rb +0 -22
  681. data/test/core/string/test_splice.rb +0 -37
  682. data/test/core/string/test_squish.rb +0 -31
  683. data/test/core/string/test_store.rb +0 -16
  684. data/test/core/string/test_subtract.rb +0 -16
  685. data/test/core/string/test_titlecase.rb +0 -16
  686. data/test/core/string/test_to_re.rb +0 -35
  687. data/test/core/string/test_trim.rb +0 -116
  688. data/test/core/string/test_unbracket.rb +0 -38
  689. data/test/core/string/test_underscore.rb +0 -21
  690. data/test/core/string/test_unfold.rb +0 -17
  691. data/test/core/string/test_unindent.rb +0 -105
  692. data/test/core/string/test_unquote.rb +0 -13
  693. data/test/core/string/test_uppercase.rb +0 -22
  694. data/test/core/string/test_variablize.rb +0 -15
  695. data/test/core/string/test_word_wrap.rb +0 -80
  696. data/test/core/string/test_words.rb +0 -24
  697. data/test/core/string/test_xor.rb +0 -16
  698. data/test/core/struct/test_replace.rb +0 -18
  699. data/test/core/symbol/test_as_s.rb +0 -15
  700. data/test/core/symbol/test_bang.rb +0 -15
  701. data/test/core/symbol/test_chomp.rb +0 -22
  702. data/test/core/symbol/test_generate.rb +0 -20
  703. data/test/core/symbol/test_not.rb +0 -19
  704. data/test/core/symbol/test_op_div.rb +0 -15
  705. data/test/core/symbol/test_plain.rb +0 -19
  706. data/test/core/symbol/test_query.rb +0 -19
  707. data/test/core/symbol/test_setter.rb +0 -17
  708. data/test/core/symbol/test_succ.rb +0 -16
  709. data/test/core/symbol/test_thrown.rb +0 -22
  710. data/test/core/symbol/test_variablize.rb +0 -14
  711. data/test/core/time/test_ago.rb +0 -18
  712. data/test/core/time/test_change.rb +0 -17
  713. data/test/core/time/test_dst_adjustment.rb +0 -19
  714. data/test/core/time/test_elapse.rb +0 -15
  715. data/test/core/time/test_future.rb +0 -32
  716. data/test/core/time/test_hence.rb +0 -18
  717. data/test/core/time/test_in.rb +0 -18
  718. data/test/core/time/test_less.rb +0 -139
  719. data/test/core/time/test_past.rb +0 -32
  720. data/test/core/time/test_round_to.rb +0 -34
  721. data/test/core/time/test_set.rb +0 -43
  722. data/test/core/time/test_shift.rb +0 -135
  723. data/test/core/time/test_stamp.rb +0 -42
  724. data/test/core/time/test_to_time.rb +0 -15
  725. data/test/core/time/test_trunc.rb +0 -34
  726. data/test/core/unboundmethod/test_arguments.rb +0 -25
  727. data/test/standard/binding/test_block_exec.rb +0 -21
  728. data/test/standard/math/test_abs.rb +0 -13
  729. data/test/standard/math/test_acot.rb +0 -23
  730. data/test/standard/math/test_acoth.rb +0 -22
  731. data/test/standard/math/test_beta.rb +0 -19
  732. data/test/standard/math/test_ceil.rb +0 -22
  733. data/test/standard/math/test_cosec.rb +0 -19
  734. data/test/standard/math/test_cosech.rb +0 -19
  735. data/test/standard/math/test_cot.rb +0 -13
  736. data/test/standard/math/test_coth.rb +0 -13
  737. data/test/standard/math/test_distance.rb +0 -16
  738. data/test/standard/math/test_exp10.rb +0 -14
  739. data/test/standard/math/test_exp2.rb +0 -14
  740. data/test/standard/math/test_factorial.rb +0 -13
  741. data/test/standard/math/test_floor.rb +0 -23
  742. data/test/standard/math/test_gcd.rb +0 -18
  743. data/test/standard/math/test_lcm.rb +0 -13
  744. data/test/standard/math/test_median.rb +0 -17
  745. data/test/standard/math/test_percentile.rb +0 -13
  746. data/test/standard/math/test_pow.rb +0 -30
  747. data/test/standard/math/test_root.rb +0 -15
  748. data/test/standard/math/test_sec.rb +0 -19
  749. data/test/standard/math/test_sech.rb +0 -19
  750. data/test/standard/math/test_sign.rb +0 -20
  751. data/test/standard/math/test_sinc.rb +0 -15
  752. data/test/standard/math/test_srq.rb +0 -20
  753. data/test/standard/pathname/test_chdir.rb +0 -16
  754. data/test/standard/pathname/test_readline.rb +0 -23
  755. data/test/standard/test_argvector.rb +0 -64
  756. data/test/standard/test_cloneable.rb +0 -60
  757. data/test/standard/test_date.rb +0 -82
  758. data/test/standard/test_enumargs.rb +0 -105
  759. data/test/standard/test_equitable.rb +0 -46
  760. data/test/standard/test_instantiable.rb +0 -40
  761. data/test/standard/test_math.rb +0 -3
  762. data/test/standard/test_memoizable.rb +0 -42
  763. data/test/standard/test_multipliers.rb +0 -141
  764. data/test/standard/test_ostruct.rb +0 -191
  765. data/test/standard/test_random.rb +0 -241
  766. data/test/standard/test_shellwords.rb +0 -74
  767. data/test/standard/test_thread.rb +0 -24
  768. data/test/standard/test_timer.rb +0 -62
  769. data/test/standard/test_tuple.rb +0 -68
  770. data/test/standard/test_uri.rb +0 -50
@@ -1,5 +1,3 @@
1
- require "facets/enumerator"
2
-
3
1
  class String
4
2
 
5
3
  # Returns an Enumerator for iterating over each
@@ -0,0 +1,21 @@
1
+ class String
2
+
3
+ # Dashcase a string such that camelcase, underscores and spaces are
4
+ # replaced by dashes. This is similar to {#underscore},
5
+ # but with dashes instead of underscores.
6
+ #
7
+ # "DashCase".dashcase #=> "dash-case"
8
+ # "Dash-Case".dashcase #=> "dash-case"
9
+ # "Dash Case".dashcase #=> "dash-case"
10
+ # "Dash - Case".dashcase #=> "dash-case"
11
+
12
+ def dashcase
13
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
14
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
15
+ tr('_', '-').
16
+ gsub(/\s/, '-').
17
+ gsub(/__+/, '-').
18
+ downcase
19
+ end
20
+
21
+ end
@@ -1,6 +1,6 @@
1
1
  class String
2
2
 
3
- # Left chomp.
3
+ # Left chomp. Alias for #delete_prefix.
4
4
  #
5
5
  # "help".lchomp("h") #=> "elp"
6
6
  # "help".lchomp("k") #=> "help"
@@ -8,26 +8,19 @@ class String
8
8
  # CREDIT: Trans
9
9
 
10
10
  def lchomp(match)
11
- if index(match) == 0
12
- self[match.size..-1]
13
- else
14
- self.dup
15
- end
11
+ delete_prefix(match)
16
12
  end
17
13
 
18
- # In-place left chomp.
14
+ # In-place left chomp. Alias for #delete_prefix!.
19
15
  #
20
- # "help".lchomp("h") #=> "elp"
21
- # "help".lchomp("k") #=> "help"
16
+ # s = "help"
17
+ # s.lchomp!("h") #=> "elp"
18
+ # s #=> "elp"
22
19
  #
23
20
  # CREDIT: Trans
24
21
 
25
22
  def lchomp!(match)
26
- if index(match) == 0
27
- self[0...match.size] = ''
28
- self
29
- end
23
+ delete_prefix!(match)
30
24
  end
31
25
 
32
26
  end
33
-
@@ -1,5 +1,3 @@
1
- require "facets/enumerator"
2
-
3
1
  class String
4
2
 
5
3
  # Returns an Enumerator for iterating over each
@@ -9,11 +9,11 @@ class String
9
9
  # "Snake Case".snakecase #=> "snake_case"
10
10
  # "Snake - Case".snakecase #=> "snake_case"
11
11
  #
12
- # Note, this method no longer converts `::` to `/`, in that case
13
- # use the {#pathize} method instead.
12
+ # Note, unlike #underscore this does not convert `::` to `/`.
13
+ # Use {#pathize} for that, or use {#underscore} for ActiveSupport
14
+ # compatible behavior.
14
15
 
15
16
  def snakecase
16
- #gsub(/::/, '/').
17
17
  gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
18
18
  gsub(/([a-z\d])([A-Z])/,'\1_\2').
19
19
  tr('-', '_').
@@ -22,10 +22,17 @@ class String
22
22
  downcase
23
23
  end
24
24
 
25
+ # Like #snakecase but also converts '::' to '/' for
26
+ # namespace-to-path conversion. This is compatible with
27
+ # ActiveSupport's #underscore.
25
28
  #
26
- alias_method :underscore, :snakecase
29
+ # "SnakeCase".underscore #=> "snake_case"
30
+ # "Foo::Bar".underscore #=> "foo/bar"
31
+ #
32
+ def underscore
33
+ gsub(/::/, '/').snakecase
34
+ end
27
35
 
28
36
  # TODO: Add *separators to #snakecase, like camelcase.
29
37
 
30
38
  end
31
-
@@ -7,6 +7,18 @@ class String
7
7
  def words
8
8
  self.split(/\s+/)
9
9
  end
10
-
10
+
11
+ # Returns an array of words in the commonly-understood sense (not including punctuation).
12
+ # This takes into account international punctuation characters as well as English ones.
13
+ #
14
+ # 'Slowly, grudgingly he said: "This has to stop."'.words
15
+ # => ["Slowly", "grudgingly", "he", "said", "This", "has", "to", "stop"]
16
+ def words_without_punctuation
17
+ s = self.dup
18
+ s.gsub!(/[.?¿¡…!,::;—"。?!、‘“”„«»〈〉《》,\/\[\]]/, ' ')
19
+ s.gsub!('- ', ' ')
20
+ s.squeeze!(" ")
21
+ s.strip.split(" ")
22
+ end
11
23
  end
12
24
 
@@ -3,7 +3,6 @@ require_relative 'string/align.rb'
3
3
  require_relative 'string/bracket.rb'
4
4
  require_relative 'string/camelcase.rb'
5
5
  require_relative 'string/capitalized.rb'
6
- require_relative 'string/characters.rb'
7
6
  require_relative 'string/cleanlines.rb'
8
7
  require_relative 'string/cleave.rb'
9
8
  require_relative 'string/cmp.rb'
@@ -6,9 +6,8 @@ class Struct
6
6
  # This will eventually be deprecated in favor of #to_h.
7
7
 
8
8
  def attributes
9
- h = {}
10
- each_pair { |k,v| h[k] = v }
11
- h
9
+ warn "Struct#attributes is deprecated. Use Struct#to_h instead.", uplevel: 1
10
+ to_h
12
11
  end
13
12
 
14
13
  end
@@ -8,7 +8,7 @@ require_relative 'symbol/op_div.rb'
8
8
  require_relative 'symbol/plain.rb'
9
9
  require_relative 'symbol/query.rb'
10
10
  require_relative 'symbol/setter.rb'
11
- require_relative 'symbol/succ.rb'
11
+ #require_relative 'symbol/succ.rb' # removed: now provided by Ruby
12
12
  require_relative 'symbol/thrown.rb'
13
13
  require_relative 'symbol/variablize.rb'
14
14
 
@@ -1,15 +1,22 @@
1
1
  class Time
2
2
 
3
- # Truncate time at give range (in seconds).
3
+ # Truncate time to a given interval in seconds.
4
+ # Unlike Ruby's Time#floor which takes sub-second digit precision,
5
+ # this takes an interval in seconds.
4
6
  #
5
7
  # t = Time.now
6
- # t = t.trunc(60*60)
8
+ # t = t.floor_to(60*60)
7
9
  # t.min #=> 0
8
10
  # t.sec #=> 0
9
11
  #
10
- def trunc(amount)
11
- self - (self.to_i % amount)
12
+ def floor_to(seconds)
13
+ self - (self.to_i % seconds)
12
14
  end
13
15
 
14
- end
16
+ # @deprecated Use Time#floor_to instead.
17
+ def trunc(seconds)
18
+ warn "Time#trunc is deprecated. Use Time#floor_to instead.", uplevel: 1
19
+ floor_to(seconds)
20
+ end
15
21
 
22
+ end
@@ -19,6 +19,7 @@ class UnboundMethod
19
19
  # CREDIT: Trans
20
20
 
21
21
  def arguments
22
+ warn "UnboundMethod#arguments is deprecated. Use UnboundMethod#parameters instead.", uplevel: 1
22
23
  ar = arity
23
24
  case ar <=> 0
24
25
  when 1
@@ -1,19 +1,3 @@
1
1
  module Facets
2
- #
3
- def self.index
4
- @index ||= (
5
- require 'yaml'
6
- YAML.load(File.new(File.dirname(__FILE__) + '/facets.yml'))
7
- )
8
- end
9
-
10
- #
11
- def self.const_missing(name)
12
- key = name.to_s.downcase
13
- index[key] || super(name)
14
- end
15
-
16
- # deprecate
17
- VERSION = '3.0.0'
2
+ VERSION = '3.2.1'
18
3
  end
19
-
data/lib/core/facets.rb CHANGED
@@ -8,7 +8,6 @@ require 'facets/comparable.rb'
8
8
  require 'facets/denumerable.rb'
9
9
  require 'facets/dir.rb'
10
10
  require 'facets/enumerable.rb'
11
- require 'facets/enumerator.rb'
12
11
  require 'facets/exception.rb'
13
12
  require 'facets/file.rb'
14
13
  require 'facets/filetest.rb'
@@ -29,7 +29,7 @@
29
29
  #
30
30
  # Copyright (c) 2006 Thomas Sawyer
31
31
  #
32
- # Ruby License
32
+ # Ruby License / BSD-2 License
33
33
  #
34
34
  # This module is free software. You may use, modify, and/or
35
35
  # redistribute this software under the same terms as Ruby.
@@ -2,26 +2,25 @@ require 'cgi'
2
2
 
3
3
  class CGI
4
4
 
5
- # Extends `#escape_html` to support escape modes. By default all strings
6
- # are escaped on `&`, `>` and `<`. Add the `:nonstandard` mode to omit
7
- # this conversion.
5
+ # Extended HTML/XHTML escaping with mode support. Unlike Ruby's built-in
6
+ # `CGI.escape_html`, this supports additional escape modes.
8
7
  #
9
- # If no mode is given then the `:default` mode is used.
10
- #
11
- # Available modes include:
8
+ # Available modes:
12
9
  # * `:quote` - escapes single and double quotes
13
10
  # * `:newlines` - escapes newline characters (\r and \n)
14
11
  # * `:ampersand` - escapes the ampersand sign
15
12
  # * `:brackets` - escapes less-than and greater-than signs
16
13
  # * `:default` - escapes double quotes
17
14
  #
15
+ # By default all strings are escaped on `&`, `>`, `<` and `"`.
16
+ #
18
17
  # @example
19
- # escape_html("<tag>") #=> "&lt;tag&gt;"
20
- # escape_html("Example\nString", :newlines) #=> "Example&#13;&#10;String"
21
- # escape_html("\"QUOTE\"", false) #=> "\"QUOTE\""
18
+ # CGI.escape_xhtml("<tag>") #=> "&lt;tag&gt;"
19
+ # CGI.escape_xhtml("Example\nString", :newlines) #=> "Example&#13;&#10;String"
20
+ # CGI.escape_xhtml("\"QUOTE\"", false) #=> "\"QUOTE\""
22
21
  #
23
- def self.escape_html(string, *modes)
24
- modes << :defualt if modes.empty?
22
+ def self.escape_xhtml(string, *modes)
23
+ modes << :default if modes.empty?
25
24
 
26
25
  unless modes.include?(:nonstandard)
27
26
  string = string.gsub(/&/, '&amp;').gsub(/>/, '&gt;').gsub(/</, '&lt;')
@@ -32,7 +31,7 @@ class CGI
32
31
  case mode
33
32
  when :quote, :quotes
34
33
  string.gsub(%r|"|,'&quot;').gsub(%r|'|,'&#39;')
35
- when :newlines, :newlines
34
+ when :newlines
36
35
  string.gsub(/[\r\n]+/,'&#13;&#10;')
37
36
  when :ampersand
38
37
  string.gsub(/&/, '&amp;')
@@ -41,23 +40,13 @@ class CGI
41
40
  when :default, true
42
41
  string.gsub(/\"/, '&quot;')
43
42
  when false
43
+ string
44
44
  else
45
- raise ArgumentError, "unrecognized HTML escape mode -- #{node}"
45
+ raise ArgumentError, "unrecognized HTML escape mode -- #{mode}"
46
46
  end
47
47
  end
48
- end
49
48
 
50
- class << self
51
- # @deprecated
52
- alias :escapeHTML :escape_html
53
- end
54
-
55
- if RUBY_VERSION < '1.9'
56
- class << self
57
- alias :unescape_html :unescapeHTML
58
- alias :escape_element :escapeElement
59
- alias :unescape_element :unescapeElement
60
- end
49
+ string
61
50
  end
62
51
 
63
52
  end
@@ -1,67 +1,20 @@
1
- # Clonable provides a standard basis for adding deep cloneablity to a class
2
- # via the standard #dup and #clone methods.
3
- #
4
- # Cloneable was originally ported from Jim Weirich's Rake.
5
- # The current version is the work of Ken Bloom.
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
- #
10
- # CREDIT: Ken Bloom
1
+ # @deprecated Use deep_dup/deep_clone instead, or define your own
2
+ # initialize_copy method.
3
+ warn "facets/cloneable is deprecated. Use deep_dup/deep_clone instead.", uplevel: 1
11
4
 
12
5
  module Cloneable
13
6
 
14
7
  def initialize_copy(sibling)
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.
19
8
  super
20
-
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.)
24
9
  operation = (
25
10
  copy_call = caller.find{|x| x !~ /'initialize_copy'/}
26
11
  copy_match = copy_call.match(/`(dup|clone)'/)
27
12
  copy_match ? copy_match[1] : :dup
28
13
  )
29
-
30
14
  sibling.instance_variables.each do |ivar|
31
15
  value = sibling.instance_variable_get(ivar)
32
-
33
- # Set my instance variable to be a #dup or #clone
34
- # or my sibling, depending on what's happening to me right now.
35
16
  instance_variable_set(ivar, value.send(operation))
36
17
  end
37
18
  end
38
19
 
39
- # TODO: Is there a more robust means of determining if clone or dup is used?
40
- #def clone
41
- # @_copy_operation = :clone
42
- # super
43
- #end
44
- #
45
- #def dup
46
- # @_copy_operation = :dup
47
- # super
48
- #end
49
-
50
- end
51
-
52
-
53
-
54
- # OLD VERSION
55
-
56
- #module Cloneable
57
- # def clone
58
- # sibling = self.class.new
59
- # instance_variables.each do |ivar|
60
- # value = self.instance_variable_get(ivar)
61
- # sibling.instance_variable_set(ivar, value.dup) #rake_dup)
62
- # end
63
- # sibling
64
- # end
65
- # alias_method :dup, :clone
66
- #end
67
-
20
+ end
@@ -1,56 +1,2 @@
1
- if defined?(Continuation)
2
-
3
- # = Continuation Extension
4
- #
5
- # Creates a continuation in a way that is easier to use than callcc.
6
- # On the initial call this will return the created Continuation and
7
- # the arguments you gave to Continuation.create in an Array. If you
8
- # then issue .call() on the Continuation execution will jump back to
9
- # the point of time where you initially invoked Continuation.create,
10
- # but this time it will return the Continuation and the arguments
11
- # you supplied in an Array.
12
- #
13
- # You can supply a block instead of default arguments which will
14
- # cause that block to be executed once and its result to be returned
15
- # along side the created Continuation, but this form is confusing
16
- # and does only rarely make sense.
17
- #
18
- # # Count from 0 to 10
19
- # cc, counter = Continuation.create(0)
20
- # counter #~> 0..10
21
- # cc.call(counter + 1) if counter < 10
22
- #
23
- # # Implement something similar to Array#inject using Continuations.
24
- # # For simplicity's sake, this is not fully compatible with the real
25
- # # inject. Make sure that you understand Array#inject before you try
26
- # # to understand this.
27
- # class ::Array
28
- # def cc_inject(value = nil)
29
- # copy = self.clone
30
- # cc, result, item = Continuation.create(value, nil)
31
- # next_item = copy.shift
32
- # if result and item
33
- # # Aggregate the result using the block.
34
- # cc.call(yield(result, item), next_item)
35
- # elsif next_item
36
- # # item not yet set and Array is not empty:
37
- # # This means we did not get a value and thus need to use the
38
- # # first item from the Array before we can start using the
39
- # # block to aggregate the result.
40
- # cc.call(next_item, result)
41
- # end
42
- #
43
- # return result
44
- # end
45
- # end
46
- # [1,2,3,4,5].cc_inject { |acc, n| acc + n } # => 15
47
- #
48
- def Continuation.create(*args, &block)
49
- args = [args] if not args.nil? and not args.is_a? Array # 1.6.8 compatibility
50
- cc = nil; result = callcc {|c| cc = c; block.call(cc) if block and args.empty?}
51
- result ||= args
52
- return *[cc, *result]
53
- end
54
-
55
- end
56
-
1
+ # @deprecated callcc is obsolete in Ruby. Use Fiber instead.
2
+ warn "facets/continuation is deprecated. callcc is obsolete; use Fiber instead.", uplevel: 1
@@ -0,0 +1,126 @@
1
+ # Crypt3 is a pure Ruby version of crypt(3), a salted one-way hashing
2
+ # of a password.
3
+ #
4
+ # Supported hashing algorithms are: md5, sha1, sha256, sha384, sha512, rmd160.
5
+ #
6
+ # Only the md5 hashing algorithm is standard and compatible with crypt(3),
7
+ # the others are not standard.
8
+ #
9
+ # Originally written by Poul-Henning Kamp (Beer-Ware License).
10
+ # Adapted by guillaume.pierronnet based on FreeBSD src/lib/libcrypt/crypt.c
11
+ #
12
+ # Copyright (c) 2002 Poul-Henning Kamp
13
+ # License: BSD-2-Clause
14
+
15
+ module Crypt3
16
+
17
+ VERSION = '1.2.0'
18
+
19
+ # Base 64 character set.
20
+ ITOA64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
21
+
22
+ # A pure ruby version of crypt(3), a salted one-way hashing of a password.
23
+ #
24
+ # Automatically generates an 8-byte salt if none given.
25
+ #
26
+ # Crypt3.crypt('password') #=> "$1$xxxxxxxx$hash..."
27
+ # Crypt3.crypt('password', :sha256) #=> "$1$xxxxxxxx$hash..."
28
+ #
29
+ # password - The phrase to encrypt. [String]
30
+ # algo - The algorithm to use. [Symbol]
31
+ # salt - Cryptographic salt, random if nil. [String]
32
+ # magic - The magic prefix. [String]
33
+ #
34
+ # Returns the cryptographic hash. [String]
35
+ def self.crypt(password, algo = :md5, salt = nil, magic = '$1$')
36
+ salt ||= generate_salt(8)
37
+
38
+ case algo
39
+ when :md5
40
+ require "digest/md5"
41
+ when :sha1
42
+ require "digest/sha1"
43
+ when :rmd160
44
+ require "digest/rmd160"
45
+ when :sha256, :sha384, :sha512
46
+ require "digest/sha2"
47
+ else
48
+ raise(ArgumentError, "unknown algorithm: #{algo}")
49
+ end
50
+
51
+ digest_class = Digest.const_get(algo.to_s.upcase)
52
+
53
+ m = digest_class.new
54
+ m.update(password + magic + salt)
55
+
56
+ mixin = digest_class.new.update(password + salt + password).digest
57
+ password.length.times do |i|
58
+ m.update(mixin[i % 16].chr)
59
+ end
60
+
61
+ i = password.length
62
+ while i != 0
63
+ if (i & 1) != 0
64
+ m.update("\x00")
65
+ else
66
+ m.update(password[0].chr)
67
+ end
68
+ i >>= 1
69
+ end
70
+
71
+ final = m.digest
72
+
73
+ 1000.times do |i|
74
+ m2 = digest_class.new
75
+ m2.update((i & 1) != 0 ? password : final)
76
+ m2.update(salt) if (i % 3) != 0
77
+ m2.update(password) if (i % 7) != 0
78
+ m2.update((i & 1) != 0 ? final : password)
79
+ final = m2.digest
80
+ end
81
+
82
+ rearranged = ""
83
+ [[0, 6, 12], [1, 7, 13], [2, 8, 14], [3, 9, 15], [4, 10, 5]].each do |a, b, c|
84
+ v = final.getbyte(a) << 16 | final.getbyte(b) << 8 | final.getbyte(c)
85
+ 4.times do
86
+ rearranged += ITOA64[v & 0x3f]
87
+ v >>= 6
88
+ end
89
+ end
90
+
91
+ v = final.getbyte(11)
92
+ 2.times do
93
+ rearranged += ITOA64[v & 0x3f]
94
+ v >>= 6
95
+ end
96
+
97
+ magic + salt + '$' + rearranged
98
+ end
99
+
100
+ # Check the validity of a password against a hashed string.
101
+ #
102
+ # Crypt3.check('password', '$1$xxxxxxxx$hash...') #=> true
103
+ #
104
+ # password - The phrase that was encrypted. [String]
105
+ # hash - The cryptographic hash. [String]
106
+ # algo - The algorithm used. [Symbol]
107
+ #
108
+ # Returns true if valid. [Boolean]
109
+ def self.check(password, hash, algo = :md5)
110
+ magic, salt = hash.split('$')[1, 2]
111
+ magic = '$' + magic + '$'
112
+ self.crypt(password, algo, salt, magic) == hash
113
+ end
114
+
115
+ # Generate a random salt of the given size.
116
+ #
117
+ # Crypt3.generate_salt(8) #=> "xK3d9Wq2"
118
+ #
119
+ # size - The size of the salt. [Integer]
120
+ #
121
+ # Returns random salt. [String]
122
+ def self.generate_salt(size)
123
+ (1..size).map { ITOA64[rand(ITOA64.size)] }.join
124
+ end
125
+
126
+ end
@@ -0,0 +1,32 @@
1
+
2
+ require 'date'
3
+
4
+ class Time
5
+ alias_method :old_compare, :<=>
6
+ private :old_compare
7
+
8
+ # Allow for Date <=> DateTime <=> Time, to work as expected.
9
+
10
+ def <=>(other)
11
+ if Date === other or DateTime === other
12
+ self.to_datetime <=> other
13
+ else
14
+ old_compare(other)
15
+ end
16
+ end
17
+ end
18
+
19
+ class Date
20
+ alias_method :old_compare, :<=>
21
+ private :old_compare
22
+
23
+ # Allow for Date <=> DateTime <=> Time, to work as expected.
24
+
25
+ def <=>(other)
26
+ if Time === other
27
+ self.to_datetime <=> other.to_datetime
28
+ else
29
+ old_compare(other)
30
+ end
31
+ end
32
+ end
@@ -1,5 +1,6 @@
1
1
  require 'date'
2
2
  require 'facets/time/stamp'
3
+ require 'facets/date/cmp'
3
4
 
4
5
  # = Date
5
6
  #
@@ -1,2 +1 @@
1
- require 'facets/digest/base64digest'
2
1
  require 'facets/digest/salted_digest'
@@ -14,7 +14,6 @@ module FileUtils
14
14
  # subdirectory is automatically skipped as well.
15
15
 
16
16
  def cp_rx(src, dest, options = {}, &filter)
17
- fu_check_options(options, OPT_TABLE['cp_r'])
18
17
  if options[:verbose]
19
18
  fu_output_message("cp -r#{options[:preserve] ? 'p' : ''}#{options[:remove_destination] ? ' --remove-destination' : ''} #{[src,dest].flatten.join ' '}")
20
19
  end
@@ -41,4 +40,3 @@ module FileUtils
41
40
  end
42
41
 
43
42
  end
44
-
@@ -27,7 +27,6 @@ module FileUtils
27
27
  #
28
28
  # TODO: Why --remove-destination and not just --force?
29
29
  def ln_r(src, dest, options = {})
30
- fu_check_options options, OPT_TABLE['ln_r']
31
30
  fu_output_message "ln -r#{options[:remove_destination] ? ' --remove-destination' : ''} #{[src,dest].flatten.join ' '}" if options[:verbose]
32
31
  return if options[:noop]
33
32
  options = options.dup
@@ -1,5 +1,3 @@
1
- require 'facets/enumerator'
2
-
3
1
  module Find
4
2
  # Identical to find except select returns the matching files as an array.
5
3
  # (find returns nil, which is not very useful if you actually wanted an array.)