facets 3.1.0 → 3.2.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 (755) hide show
  1. checksums.yaml +5 -5
  2. data/HISTORY.md +141 -0
  3. data/LICENSE.txt +21 -343
  4. data/README.md +26 -19
  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/binding/caller.rb +8 -2
  21. data/lib/core/facets/binding/op_get.rb +7 -11
  22. data/lib/core/facets/binding/self.rb +4 -10
  23. data/lib/core/facets/boolean.rb +1 -1
  24. data/lib/core/facets/class/descendants.rb +0 -2
  25. data/lib/core/facets/class.rb +2 -2
  26. data/lib/core/facets/comparable/bound.rb +13 -1
  27. data/lib/core/facets/comparable/clip.rb +3 -32
  28. data/lib/core/facets/denumerable.rb +0 -3
  29. data/lib/core/facets/dir/find.rb +20 -0
  30. data/lib/core/facets/dir/recurse.rb +8 -26
  31. data/lib/core/facets/enumerable/compact_map.rb +2 -12
  32. data/lib/core/facets/enumerable/defer.rb +2 -13
  33. data/lib/core/facets/enumerable/each_by.rb +0 -2
  34. data/lib/core/facets/enumerable/frequency.rb +2 -2
  35. data/lib/core/facets/enumerable/hinge.rb +3 -4
  36. data/lib/core/facets/enumerable/map_with_index.rb +3 -6
  37. data/lib/core/facets/enumerable/mash.rb +5 -28
  38. data/lib/core/facets/enumerable/uniq_by.rb +4 -8
  39. data/lib/core/facets/enumerable/with_position.rb +58 -0
  40. data/lib/core/facets/enumerator.rb +2 -75
  41. data/lib/core/facets/exception/error_print.rb +6 -71
  42. data/lib/core/facets/file/null.rb +3 -15
  43. data/lib/core/facets/file/read_binary.rb +3 -12
  44. data/lib/core/facets/hash/except.rb +0 -7
  45. data/lib/core/facets/hash/fetch_nested.rb +8 -9
  46. data/lib/core/facets/hash/graph.rb +1 -1
  47. data/lib/core/facets/hash/rekey.rb +3 -3
  48. data/lib/core/facets/hash/revalue.rb +3 -3
  49. data/lib/core/facets/hash/{to_proc.rb → setter.rb} +8 -9
  50. data/lib/core/facets/hash/slice.rb +0 -26
  51. data/lib/core/facets/hash/update_keys.rb +4 -11
  52. data/lib/core/facets/hash/update_values.rb +4 -10
  53. data/lib/core/facets/indexable.rb +6 -4
  54. data/lib/core/facets/kernel/callstack.rb +5 -24
  55. data/lib/core/facets/kernel/eigenclass.rb +6 -6
  56. data/lib/core/facets/kernel/extension.rb +3 -6
  57. data/lib/core/facets/kernel/functor.rb +16 -0
  58. data/lib/core/facets/kernel/instance_class.rb +4 -20
  59. data/lib/core/facets/kernel/instance_send.rb +5 -3
  60. data/lib/core/facets/kernel/load_relative.rb +8 -20
  61. data/lib/core/facets/kernel/memo.rb +4 -26
  62. data/lib/core/facets/kernel/meta_class.rb +10 -6
  63. data/lib/core/facets/kernel/object_class.rb +5 -6
  64. data/lib/core/facets/kernel/object_send.rb +5 -26
  65. data/lib/core/facets/kernel/qua_class.rb +4 -20
  66. data/lib/core/facets/kernel/require_all.rb +8 -20
  67. data/lib/core/facets/kernel/returning.rb +3 -19
  68. data/lib/core/facets/kernel/tap.rb +3 -36
  69. data/lib/core/facets/kernel/tee.rb +2 -0
  70. data/lib/core/facets/kernel/try.rb +38 -28
  71. data/lib/core/facets/kernel.rb +2 -4
  72. data/lib/core/facets/lazy.rb +1 -1
  73. data/lib/core/facets/module/alias_method_chain.rb +4 -43
  74. data/lib/core/facets/module/attr_setter.rb +3 -2
  75. data/lib/core/facets/module/can.rb +5 -16
  76. data/lib/core/facets/module/class_extend.rb +2 -2
  77. data/lib/core/facets/object/dup.rb +0 -46
  78. data/lib/core/facets/proc/bind.rb +0 -2
  79. data/lib/core/facets/proc/compose.rb +7 -28
  80. data/lib/core/facets/proc/to_method.rb +0 -1
  81. data/lib/core/facets/proc/update.rb +8 -1
  82. data/lib/core/facets/range/intersection.rb +42 -0
  83. data/lib/core/facets/range/nudge.rb +6 -8
  84. data/lib/core/facets/string/ascii_only.rb +2 -2
  85. data/lib/core/facets/string/cleanlines.rb +0 -2
  86. data/lib/core/facets/string/dashcase.rb +21 -0
  87. data/lib/core/facets/string/lchomp.rb +7 -14
  88. data/lib/core/facets/string/newlines.rb +0 -2
  89. data/lib/core/facets/string/snakecase.rb +12 -5
  90. data/lib/core/facets/string/words.rb +13 -1
  91. data/lib/core/facets/string.rb +0 -1
  92. data/lib/core/facets/struct/attributes.rb +2 -3
  93. data/lib/core/facets/time/trunc.rb +12 -5
  94. data/lib/core/facets/unboundmethod/arguments.rb +1 -0
  95. data/lib/core/facets/version.rb +1 -17
  96. data/lib/core/facets.rb +0 -1
  97. data/lib/standard/facets/argvector.rb +1 -1
  98. data/lib/standard/facets/cgi/escape_html.rb +14 -25
  99. data/lib/standard/facets/cloneable.rb +4 -51
  100. data/lib/standard/facets/continuation.rb +2 -56
  101. data/lib/standard/facets/crypt3.rb +126 -0
  102. data/lib/standard/facets/date/cmp.rb +32 -0
  103. data/lib/standard/facets/date.rb +1 -0
  104. data/lib/standard/facets/digest.rb +0 -1
  105. data/lib/standard/facets/fileutils/cp_rx.rb +0 -2
  106. data/lib/standard/facets/fileutils/ln_r.rb +0 -1
  107. data/lib/standard/facets/find/select.rb +0 -2
  108. data/lib/standard/facets/getoptlong.rb +3 -59
  109. data/lib/standard/facets/load_monitor.rb +2 -26
  110. data/lib/standard/facets/math/gini_coefficient.rb +5 -4
  111. data/lib/standard/facets/math/kldivergence.rb +8 -7
  112. data/lib/standard/facets/math/percentile.rb +1 -1
  113. data/lib/standard/facets/multiton.rb +1 -1
  114. data/lib/standard/facets/ostruct/initialize.rb +4 -19
  115. data/lib/standard/facets/ostruct/to_ostruct.rb +2 -1
  116. data/lib/standard/facets/ostruct.rb +0 -88
  117. data/lib/standard/facets/pathname/empty.rb +2 -10
  118. data/lib/standard/facets/pathname/glob.rb +19 -12
  119. data/lib/standard/facets/pathname/null.rb +3 -14
  120. data/lib/standard/facets/random.rb +47 -133
  121. data/lib/standard/facets/tuple.rb +2 -4
  122. data/lib/standard/facets/uri.rb +3 -2
  123. metadata +29 -1172
  124. data/.index +0 -80
  125. data/.yardopts +0 -10
  126. data/NOTICE.rdoc +0 -167
  127. data/demo/applique/assertion_framework.rb +0 -1
  128. data/demo/applique/file_helpers.rb +0 -34
  129. data/demo/core/array/after.md +0 -13
  130. data/demo/core/array/arrange.md +0 -17
  131. data/demo/core/array/before.md +0 -14
  132. data/demo/core/array/collapse.md +0 -15
  133. data/demo/core/array/collisions.md +0 -30
  134. data/demo/core/array/commonality.md +0 -31
  135. data/demo/core/array/conjoin.md +0 -47
  136. data/demo/core/array/contains.md +0 -9
  137. data/demo/core/array/delete_unless.md +0 -13
  138. data/demo/core/array/delete_values.md +0 -10
  139. data/demo/core/array/delete_values_at.md +0 -15
  140. data/demo/core/array/divide.md +0 -14
  141. data/demo/core/array/duplicates.md +0 -14
  142. data/demo/core/array/each_overlap.md +0 -12
  143. data/demo/core/array/each_pair.md +0 -13
  144. data/demo/core/array/each_value.md +0 -12
  145. data/demo/core/array/entropy.md +0 -13
  146. data/demo/core/array/extract_options.md +0 -13
  147. data/demo/core/array/first.md +0 -11
  148. data/demo/core/array/from.md +0 -11
  149. data/demo/core/array/ideal_entropy.md +0 -11
  150. data/demo/core/array/intersection.md +0 -11
  151. data/demo/core/array/last.md +0 -11
  152. data/demo/core/array/median.md +0 -23
  153. data/demo/core/array/merge.md +0 -15
  154. data/demo/core/array/missing.md +0 -10
  155. data/demo/core/array/mode.md +0 -9
  156. data/demo/core/array/nonuniq.md +0 -16
  157. data/demo/core/array/not_empty.md +0 -8
  158. data/demo/core/array/occur.md +0 -18
  159. data/demo/core/array/occurrence.md +0 -13
  160. data/demo/core/array/only.md +0 -9
  161. data/demo/core/array/op_pow.md +0 -10
  162. data/demo/core/array/pad.md +0 -28
  163. data/demo/core/array/peek.md +0 -10
  164. data/demo/core/array/poke.md +0 -15
  165. data/demo/core/array/probability +0 -8
  166. data/demo/core/array/pull.md +0 -10
  167. data/demo/core/array/recurse.md +0 -10
  168. data/demo/core/array/recursively.md +0 -20
  169. data/demo/core/array/reject_values.md +0 -10
  170. data/demo/core/array/splice.md +0 -14
  171. data/demo/core/array/split.md +0 -13
  172. data/demo/core/array/squeeze.md +0 -14
  173. data/demo/core/array/step.md +0 -16
  174. data/demo/core/array/store.md +0 -9
  175. data/demo/core/array/thru.md +0 -12
  176. data/demo/core/array/to_h.md +0 -11
  177. data/demo/core/array/traverse.md +0 -20
  178. data/demo/core/array/uniq_by.md +0 -16
  179. data/demo/core/array/unique_permutation.md +0 -14
  180. data/demo/core/array/zip.md +0 -8
  181. data/demo/core/binding/caller.md +0 -57
  182. data/demo/core/binding/defined.md +0 -10
  183. data/demo/core/binding/opvars.md +0 -16
  184. data/demo/core/binding/self.md +0 -6
  185. data/demo/core/class/descendants.md +0 -13
  186. data/demo/core/class/to_proc.md +0 -11
  187. data/demo/core/comparable/at_least.md +0 -11
  188. data/demo/core/comparable/at_most.md +0 -11
  189. data/demo/core/comparable/bound.md +0 -13
  190. data/demo/core/comparable/cap.md +0 -11
  191. data/demo/core/comparable/clip.md +0 -29
  192. data/demo/core/comparable/cmp.md +0 -18
  193. data/demo/core/comparable/op_get.md +0 -32
  194. data/demo/core/dir/ascend.md +0 -24
  195. data/demo/core/dir/descend.md +0 -16
  196. data/demo/core/dir/multiglob.md +0 -41
  197. data/demo/core/dir/parent.md +0 -6
  198. data/demo/core/dir/recurse.md +0 -41
  199. data/demo/core/exception/detail.md +0 -19
  200. data/demo/core/facets.md +0 -6
  201. data/demo/core/filetest/root.md +0 -13
  202. data/demo/core/hash/recursively.md +0 -21
  203. data/demo/core/indexable.md +0 -95
  204. data/demo/core/integer/bitmask.md +0 -46
  205. data/demo/core/integer/factorial.md +0 -10
  206. data/demo/core/integer/length.md +0 -7
  207. data/demo/core/integer/multiple.md +0 -12
  208. data/demo/core/integer/of.md +0 -11
  209. data/demo/core/integer/ordinal.md +0 -11
  210. data/demo/core/integer/times_collect.md +0 -9
  211. data/demo/core/matchdata/match.md +0 -7
  212. data/demo/core/matchdata/matchset.md +0 -7
  213. data/demo/core/matchdata/matchtree.md +0 -10
  214. data/demo/core/module/cattr.md +0 -43
  215. data/demo/core/module/class_extend.md +0 -64
  216. data/demo/core/module/class_inheritor.md +0 -126
  217. data/demo/core/module/copy_inheritor.md +0 -30
  218. data/demo/core/module/include_as.md +0 -31
  219. data/demo/core/module/method_space.md +0 -24
  220. data/demo/core/string/acronym.md +0 -9
  221. data/demo/core/string/align.md +0 -34
  222. data/demo/core/string/ascii_only.md +0 -37
  223. data/demo/core/string/bracket.md +0 -35
  224. data/demo/core/string/camelcase.md +0 -47
  225. data/demo/core/string/capitalized.md +0 -27
  226. data/demo/core/string/characters.md +0 -11
  227. data/demo/core/string/cleanlines.md +0 -10
  228. data/demo/core/string/cleave.md +0 -49
  229. data/demo/core/string/compress_lines.md +0 -22
  230. data/demo/core/string/crypt.md +0 -15
  231. data/demo/core/string/divide.md +0 -9
  232. data/demo/core/string/each_word.md +0 -11
  233. data/demo/core/string/edit_distance.md +0 -15
  234. data/demo/core/string/exclude.md +0 -15
  235. data/demo/core/string/expand_tabs.md +0 -69
  236. data/demo/core/string/fold.md +0 -14
  237. data/demo/core/string/indent.md +0 -65
  238. data/demo/core/string/index_all.md +0 -14
  239. data/demo/core/string/interpolate.md +0 -8
  240. data/demo/core/string/lchomp.md +0 -14
  241. data/demo/core/string/line_wrap.md +0 -7
  242. data/demo/core/string/lowercase.md +0 -12
  243. data/demo/core/string/methodize.md +0 -22
  244. data/demo/core/string/modulize.md +0 -22
  245. data/demo/core/string/mscan.md +0 -10
  246. data/demo/core/string/natcmp.md +0 -10
  247. data/demo/core/string/nchar.md +0 -9
  248. data/demo/core/string/newlines.md +0 -9
  249. data/demo/core/string/number.md +0 -27
  250. data/demo/core/string/op_div.md +0 -10
  251. data/demo/core/string/op_sub.md +0 -7
  252. data/demo/core/string/pathize.md +0 -22
  253. data/demo/core/string/quote.md +0 -20
  254. data/demo/core/string/random.md +0 -25
  255. data/demo/core/string/range.md +0 -19
  256. data/demo/core/string/remove.md +0 -33
  257. data/demo/core/string/rewrite.md +0 -9
  258. data/demo/core/string/shatter.md +0 -9
  259. data/demo/core/string/similarity.md +0 -12
  260. data/demo/core/string/snakecase.md +0 -14
  261. data/demo/core/string/splice.md +0 -28
  262. data/demo/core/string/squish.md +0 -27
  263. data/demo/core/string/store.md +0 -10
  264. data/demo/core/string/subtract.md +0 -8
  265. data/demo/core/string/titlecase.md +0 -8
  266. data/demo/core/string/to_re.md +0 -22
  267. data/demo/core/string/trim.md +0 -92
  268. data/demo/core/string/unbracket.md +0 -24
  269. data/demo/core/string/underscore.md +0 -17
  270. data/demo/core/string/unfold.md +0 -9
  271. data/demo/core/string/unindent.md +0 -65
  272. data/demo/core/string/unquote.md +0 -6
  273. data/demo/core/string/uppercase.md +0 -15
  274. data/demo/core/string/variablize.md +0 -7
  275. data/demo/core/string/word_wrap.md +0 -54
  276. data/demo/core/string/words.md +0 -13
  277. data/demo/core/string/xor.md +0 -8
  278. data/demo/standard/02_cloneable.rdoc +0 -46
  279. data/demo/standard/03_enumargs.rdoc +0 -75
  280. data/demo/standard/04_equitable.rdoc +0 -35
  281. data/demo/standard/05_instantiable.rdoc +0 -42
  282. data/demo/standard/basic_object.rdoc +0 -22
  283. data/demo/standard/memoizable.rdoc +0 -134
  284. data/demo/standard/mulititon.rdoc +0 -156
  285. data/lib/core/facets/applique/file_helpers.rb +0 -33
  286. data/lib/core/facets/array/intersection.rb +0 -25
  287. data/lib/core/facets/array/op_pow.rb +0 -12
  288. data/lib/core/facets/array/to_h.rb +0 -19
  289. data/lib/core/facets/class/singleton.rb +0 -1
  290. data/lib/core/facets/class/singleton_class.rb +0 -16
  291. data/lib/core/facets/class/subclasses.rb +0 -28
  292. data/lib/core/facets/dir/each_child.rb +0 -16
  293. data/lib/core/facets/enumerable/filter.rb +0 -33
  294. data/lib/core/facets/enumerable/sum.rb +0 -40
  295. data/lib/core/facets/exception/set_message.rb +0 -10
  296. data/lib/core/facets/file/write.rb +0 -24
  297. data/lib/core/facets/fixnum.rb +0 -7
  298. data/lib/core/facets/kernel/__dir__.rb +0 -28
  299. data/lib/core/facets/kernel/constant.rb +0 -22
  300. data/lib/core/facets/kernel/instance_exec.rb +0 -47
  301. data/lib/core/facets/kernel/p.rb +0 -24
  302. data/lib/core/facets/kernel/singleton_class.rb +0 -10
  303. data/lib/core/facets/matchdata/match.rb +0 -15
  304. data/lib/core/facets/method/curry.rb +0 -13
  305. data/lib/core/facets/numeric/negative.rb +0 -1
  306. data/lib/core/facets/numeric/positive.rb +0 -15
  307. data/lib/core/facets/object/itself.rb +0 -16
  308. data/lib/core/facets/object/try_dup.rb +0 -1
  309. data/lib/core/facets/process/daemon.rb +0 -32
  310. data/lib/core/facets/range/overlap.rb +0 -12
  311. data/lib/core/facets/string/characters.rb +0 -13
  312. data/lib/core/facets/string/crypt.rb +0 -22
  313. data/lib/core/facets/symbol/succ.rb +0 -23
  314. data/lib/core/facets.yml +0 -80
  315. data/lib/standard/facets/basicobject.rb +0 -75
  316. data/lib/standard/facets/digest/base64digest.rb +0 -45
  317. data/lib/standard/facets/ostruct/each.rb +0 -11
  318. data/lib/standard/facets/ostruct/merge.rb +0 -21
  319. data/lib/standard/facets/ostruct/op_fetch.rb +0 -29
  320. data/lib/standard/facets/ostruct/op_store.rb +0 -1
  321. data/lib/standard/facets/ostruct/to_h.rb +0 -10
  322. data/test/core/array/test_arrange.rb +0 -37
  323. data/test/core/array/test_average.rb +0 -16
  324. data/test/core/array/test_before.rb +0 -48
  325. data/test/core/array/test_collapse.rb +0 -23
  326. data/test/core/array/test_commonality.rb +0 -35
  327. data/test/core/array/test_conjoin.rb +0 -50
  328. data/test/core/array/test_contains.rb +0 -14
  329. data/test/core/array/test_delete.rb +0 -42
  330. data/test/core/array/test_delete_unless.rb +0 -17
  331. data/test/core/array/test_delete_values.rb +0 -31
  332. data/test/core/array/test_divide.rb +0 -24
  333. data/test/core/array/test_duplicates.rb +0 -29
  334. data/test/core/array/test_each_overlap.rb +0 -31
  335. data/test/core/array/test_each_pair.rb +0 -16
  336. data/test/core/array/test_each_value.rb +0 -16
  337. data/test/core/array/test_entropy.rb +0 -23
  338. data/test/core/array/test_extract_options.rb +0 -28
  339. data/test/core/array/test_first.rb +0 -17
  340. data/test/core/array/test_from.rb +0 -42
  341. data/test/core/array/test_intersection.rb +0 -19
  342. data/test/core/array/test_last.rb +0 -17
  343. data/test/core/array/test_median.rb +0 -27
  344. data/test/core/array/test_merge.rb +0 -27
  345. data/test/core/array/test_missing.rb +0 -12
  346. data/test/core/array/test_mode.rb +0 -17
  347. data/test/core/array/test_nonuniq.rb +0 -25
  348. data/test/core/array/test_not_empty.rb +0 -17
  349. data/test/core/array/test_occur.rb +0 -52
  350. data/test/core/array/test_occurrence.rb +0 -20
  351. data/test/core/array/test_only.rb +0 -17
  352. data/test/core/array/test_op_pow.rb +0 -13
  353. data/test/core/array/test_pad.rb +0 -40
  354. data/test/core/array/test_peek.rb +0 -28
  355. data/test/core/array/test_poke.rb +0 -21
  356. data/test/core/array/test_probability.rb +0 -18
  357. data/test/core/array/test_pull.rb +0 -15
  358. data/test/core/array/test_recurse.rb +0 -40
  359. data/test/core/array/test_recursively.rb +0 -33
  360. data/test/core/array/test_reject_values.rb +0 -17
  361. data/test/core/array/test_splice.rb +0 -21
  362. data/test/core/array/test_split.rb +0 -22
  363. data/test/core/array/test_squeeze.rb +0 -22
  364. data/test/core/array/test_standard_deviation.rb +0 -18
  365. data/test/core/array/test_step.rb +0 -28
  366. data/test/core/array/test_store.rb +0 -22
  367. data/test/core/array/test_to_h.rb +0 -14
  368. data/test/core/array/test_traverse.rb +0 -26
  369. data/test/core/array/test_uniq_by.rb +0 -24
  370. data/test/core/array/test_unique_permutation.rb +0 -23
  371. data/test/core/array/test_variance.rb +0 -17
  372. data/test/core/array/test_zip.rb +0 -13
  373. data/test/core/binding/test_caller.rb +0 -69
  374. data/test/core/binding/test_defined.rb +0 -18
  375. data/test/core/binding/test_op.rb +0 -24
  376. data/test/core/binding/test_self.rb +0 -16
  377. data/test/core/class/test_descendents.rb +0 -19
  378. data/test/core/class/test_preallocate.rb +0 -32
  379. data/test/core/class/test_subclasses.rb +0 -20
  380. data/test/core/class/test_to_proc.rb +0 -16
  381. data/test/core/comparable/test_bound.rb +0 -32
  382. data/test/core/comparable/test_cap.rb +0 -36
  383. data/test/core/comparable/test_clip.rb +0 -31
  384. data/test/core/comparable/test_cmp.rb +0 -16
  385. data/test/core/comparable/test_op_get.rb +0 -61
  386. data/test/core/denumerable_tc.rb +0 -194
  387. data/test/core/dir/test_ascend.rb +0 -40
  388. data/test/core/dir/test_descend.rb +0 -24
  389. data/test/core/dir/test_each_child.rb +0 -22
  390. data/test/core/dir/test_multiglob.rb +0 -25
  391. data/test/core/dir/test_parent.rb +0 -14
  392. data/test/core/dir/test_recurse.rb +0 -26
  393. data/test/core/enumerable/test_accumulate.rb +0 -44
  394. data/test/core/enumerable/test_cluster.rb +0 -36
  395. data/test/core/enumerable/test_compact_map.rb +0 -32
  396. data/test/core/enumerable/test_defer.rb +0 -27
  397. data/test/core/enumerable/test_each_by.rb +0 -49
  398. data/test/core/enumerable/test_every.rb +0 -33
  399. data/test/core/enumerable/test_ewise.rb +0 -30
  400. data/test/core/enumerable/test_exclude.rb +0 -15
  401. data/test/core/enumerable/test_expand.rb +0 -15
  402. data/test/core/enumerable/test_filter.rb +0 -19
  403. data/test/core/enumerable/test_find_yield.rb +0 -96
  404. data/test/core/enumerable/test_frequency.rb +0 -15
  405. data/test/core/enumerable/test_graph.rb +0 -42
  406. data/test/core/enumerable/test_hashify.rb +0 -113
  407. data/test/core/enumerable/test_key_by.rb +0 -22
  408. data/test/core/enumerable/test_map_by.rb +0 -27
  409. data/test/core/enumerable/test_map_send.rb +0 -26
  410. data/test/core/enumerable/test_map_with_index.rb +0 -23
  411. data/test/core/enumerable/test_mash.rb +0 -17
  412. data/test/core/enumerable/test_modulate.rb +0 -17
  413. data/test/core/enumerable/test_occur.rb +0 -40
  414. data/test/core/enumerable/test_only.rb +0 -40
  415. data/test/core/enumerable/test_per.rb +0 -19
  416. data/test/core/enumerable/test_purge.rb +0 -22
  417. data/test/core/enumerable/test_recursively.rb +0 -33
  418. data/test/core/enumerable/test_squeeze.rb +0 -35
  419. data/test/core/enumerable/test_sum.rb +0 -40
  420. data/test/core/enumerable/test_uniq_by.rb +0 -25
  421. data/test/core/enumerable/test_visit.rb +0 -14
  422. data/test/core/enumerator/lazy/test_squeeze.rb +0 -33
  423. data/test/core/enumerator/test_fx.rb +0 -16
  424. data/test/core/enumerator/test_new.rb +0 -21
  425. data/test/core/enumerator_tc.rb +0 -40
  426. data/test/core/exception/test_detail.rb +0 -15
  427. data/test/core/exception/test_raised.rb +0 -15
  428. data/test/core/exception/test_suppress.rb +0 -16
  429. data/test/core/file/test_append.rb +0 -22
  430. data/test/core/file/test_create.rb +0 -17
  431. data/test/core/file/test_ext.rb +0 -31
  432. data/test/core/file/test_null.rb +0 -14
  433. data/test/core/file/test_read_binary.rb +0 -19
  434. data/test/core/file/test_read_list.rb +0 -16
  435. data/test/core/file/test_rewrite.rb +0 -35
  436. data/test/core/file/test_rootname.rb +0 -13
  437. data/test/core/file/test_sanitize.rb +0 -32
  438. data/test/core/file/test_split_all.rb +0 -14
  439. data/test/core/file/test_write.rb +0 -22
  440. data/test/core/file/test_writelines.rb +0 -21
  441. data/test/core/filetest/test_root.rb +0 -14
  442. data/test/core/functor_tc.rb +0 -41
  443. data/test/core/hash/test_alias.rb +0 -25
  444. data/test/core/hash/test_argumentize.rb +0 -23
  445. data/test/core/hash/test_at.rb +0 -16
  446. data/test/core/hash/test_autonew.rb +0 -22
  447. data/test/core/hash/test_collate.rb +0 -61
  448. data/test/core/hash/test_count.rb +0 -23
  449. data/test/core/hash/test_data.rb +0 -35
  450. data/test/core/hash/test_dearray_values.rb +0 -26
  451. data/test/core/hash/test_deep_merge.rb +0 -31
  452. data/test/core/hash/test_deep_rekey.rb +0 -131
  453. data/test/core/hash/test_delete_at.rb +0 -18
  454. data/test/core/hash/test_delete_unless.rb +0 -18
  455. data/test/core/hash/test_delete_values.rb +0 -30
  456. data/test/core/hash/test_diff.rb +0 -16
  457. data/test/core/hash/test_each_with_key.rb +0 -16
  458. data/test/core/hash/test_expect.rb +0 -34
  459. data/test/core/hash/test_fetch_nested.rb +0 -24
  460. data/test/core/hash/test_graph.rb +0 -40
  461. data/test/core/hash/test_insert.rb +0 -20
  462. data/test/core/hash/test_inverse.rb +0 -20
  463. data/test/core/hash/test_join.rb +0 -32
  464. data/test/core/hash/test_keys.rb +0 -41
  465. data/test/core/hash/test_new_with.rb +0 -17
  466. data/test/core/hash/test_op_add.rb +0 -17
  467. data/test/core/hash/test_op_and.rb +0 -31
  468. data/test/core/hash/test_op_mul.rb +0 -17
  469. data/test/core/hash/test_op_or.rb +0 -17
  470. data/test/core/hash/test_op_push.rb +0 -34
  471. data/test/core/hash/test_op_sub.rb +0 -28
  472. data/test/core/hash/test_recurse.rb +0 -39
  473. data/test/core/hash/test_recursively.rb +0 -71
  474. data/test/core/hash/test_rekey.rb +0 -119
  475. data/test/core/hash/test_replace_each.rb +0 -17
  476. data/test/core/hash/test_revalue.rb +0 -98
  477. data/test/core/hash/test_reverse_merge.rb +0 -39
  478. data/test/core/hash/test_slice.rb +0 -36
  479. data/test/core/hash/test_stringify_keys.rb +0 -26
  480. data/test/core/hash/test_swap.rb +0 -15
  481. data/test/core/hash/test_symbolize_keys.rb +0 -26
  482. data/test/core/hash/test_to_mod.rb +0 -24
  483. data/test/core/hash/test_to_proc.rb +0 -23
  484. data/test/core/hash/test_to_struct.rb +0 -22
  485. data/test/core/hash/test_traverse.rb +0 -29
  486. data/test/core/hash/test_update_each.rb +0 -16
  487. data/test/core/hash/test_update_keys.rb +0 -21
  488. data/test/core/hash/test_update_values.rb +0 -15
  489. data/test/core/hash/test_weave.rb +0 -18
  490. data/test/core/hash/test_zip.rb +0 -16
  491. data/test/core/indexable_tc.rb +0 -226
  492. data/test/core/integer/test_bitmask.rb +0 -73
  493. data/test/core/integer/test_factorial.rb +0 -30
  494. data/test/core/integer/test_multiple.rb +0 -16
  495. data/test/core/integer/test_of.rb +0 -36
  496. data/test/core/integer/test_ordinal.rb +0 -27
  497. data/test/core/kernel/test_as.rb +0 -74
  498. data/test/core/kernel/test_ask.rb +0 -9
  499. data/test/core/kernel/test_assign.rb +0 -61
  500. data/test/core/kernel/test_assign_from.rb +0 -48
  501. data/test/core/kernel/test_attr_singleton.rb +0 -51
  502. data/test/core/kernel/test_blank.rb +0 -103
  503. data/test/core/kernel/test_callstack.rb +0 -21
  504. data/test/core/kernel/test_class.rb +0 -14
  505. data/test/core/kernel/test_complete.rb +0 -19
  506. data/test/core/kernel/test_constant.rb +0 -18
  507. data/test/core/kernel/test_d.rb +0 -10
  508. data/test/core/kernel/test_deep_clone.rb +0 -31
  509. data/test/core/kernel/test_deep_copy.rb +0 -15
  510. data/test/core/kernel/test_dir.rb +0 -24
  511. data/test/core/kernel/test_disable_warnings.rb +0 -38
  512. data/test/core/kernel/test_ergo.rb +0 -34
  513. data/test/core/kernel/test_extension.rb +0 -18
  514. data/test/core/kernel/test_get.rb +0 -54
  515. data/test/core/kernel/test_here.rb +0 -13
  516. data/test/core/kernel/test_hierarchical_send.rb +0 -48
  517. data/test/core/kernel/test_in.rb +0 -14
  518. data/test/core/kernel/test_instance_assign.rb +0 -19
  519. data/test/core/kernel/test_instance_class.rb +0 -15
  520. data/test/core/kernel/test_instance_extract.rb +0 -28
  521. data/test/core/kernel/test_instance_replace.rb +0 -47
  522. data/test/core/kernel/test_instance_send.rb +0 -26
  523. data/test/core/kernel/test_maybe.rb +0 -13
  524. data/test/core/kernel/test_meta_alias.rb +0 -18
  525. data/test/core/kernel/test_meta_class.rb +0 -33
  526. data/test/core/kernel/test_meta_def.rb +0 -15
  527. data/test/core/kernel/test_meta_eval.rb +0 -18
  528. data/test/core/kernel/test_method.rb +0 -20
  529. data/test/core/kernel/test_not.rb +0 -51
  530. data/test/core/kernel/test_not_nil.rb +0 -25
  531. data/test/core/kernel/test_object_class.rb +0 -22
  532. data/test/core/kernel/test_object_hexid.rb +0 -20
  533. data/test/core/kernel/test_object_send.rb +0 -25
  534. data/test/core/kernel/test_presence.rb +0 -37
  535. data/test/core/kernel/test_qua_class.rb +0 -25
  536. data/test/core/kernel/test_require_all.rb +0 -11
  537. data/test/core/kernel/test_respond.rb +0 -38
  538. data/test/core/kernel/test_returning.rb +0 -17
  539. data/test/core/kernel/test_silence.rb +0 -24
  540. data/test/core/kernel/test_singleton_class.rb +0 -15
  541. data/test/core/kernel/test_super_method.rb +0 -23
  542. data/test/core/kernel/test_tap.rb +0 -38
  543. data/test/core/kernel/test_temporarily.rb +0 -25
  544. data/test/core/kernel/test_true.rb +0 -31
  545. data/test/core/kernel/test_try.rb +0 -35
  546. data/test/core/kernel/test_val.rb +0 -30
  547. data/test/core/kernel/test_with.rb +0 -18
  548. data/test/core/kernel/test_writers.rb +0 -53
  549. data/test/core/matchdata/test_match.rb +0 -14
  550. data/test/core/matchdata/test_matchset.rb +0 -29
  551. data/test/core/method/test_composition.rb +0 -42
  552. data/test/core/module/test_abstract.rb +0 -24
  553. data/test/core/module/test_alias_accessor.rb +0 -27
  554. data/test/core/module/test_alias_method_chain.rb +0 -34
  555. data/test/core/module/test_alias_module_function.rb +0 -24
  556. data/test/core/module/test_all_instance_methods.rb +0 -27
  557. data/test/core/module/test_ancestor.rb +0 -16
  558. data/test/core/module/test_anonymous.rb +0 -18
  559. data/test/core/module/test_attr_setter.rb +0 -28
  560. data/test/core/module/test_basename.rb +0 -14
  561. data/test/core/module/test_can.rb +0 -22
  562. data/test/core/module/test_class.rb +0 -22
  563. data/test/core/module/test_class_def.rb +0 -22
  564. data/test/core/module/test_class_extend.rb +0 -73
  565. data/test/core/module/test_class_inheritor.rb +0 -135
  566. data/test/core/module/test_copy_inheritor.rb +0 -35
  567. data/test/core/module/test_enclosure.rb +0 -24
  568. data/test/core/module/test_instance_function.rb +0 -30
  569. data/test/core/module/test_instance_method.rb +0 -20
  570. data/test/core/module/test_instance_method_defined.rb +0 -38
  571. data/test/core/module/test_integrate.rb +0 -28
  572. data/test/core/module/test_is.rb +0 -50
  573. data/test/core/module/test_memoize.rb +0 -33
  574. data/test/core/module/test_method_clash.rb +0 -59
  575. data/test/core/module/test_method_space.rb +0 -72
  576. data/test/core/module/test_methodize.rb +0 -26
  577. data/test/core/module/test_modname.rb +0 -13
  578. data/test/core/module/test_module_def.rb +0 -22
  579. data/test/core/module/test_module_load.rb +0 -23
  580. data/test/core/module/test_nodef.rb +0 -19
  581. data/test/core/module/test_op.rb +0 -56
  582. data/test/core/module/test_pathize.rb +0 -25
  583. data/test/core/module/test_preextend.rb +0 -26
  584. data/test/core/module/test_redefine_method.rb +0 -30
  585. data/test/core/module/test_redirect_method.rb +0 -32
  586. data/test/core/module/test_remove.rb +0 -18
  587. data/test/core/module/test_rename_method.rb +0 -34
  588. data/test/core/module/test_revise.rb +0 -61
  589. data/test/core/module/test_set.rb +0 -30
  590. data/test/core/module/test_spacename.rb +0 -15
  591. data/test/core/module/test_to_obj.rb +0 -20
  592. data/test/core/module/test_wrap_method.rb +0 -32
  593. data/test/core/numeric/test_approx.rb +0 -26
  594. data/test/core/numeric/test_delimit.rb +0 -68
  595. data/test/core/numeric/test_distance.rb +0 -16
  596. data/test/core/numeric/test_length.rb +0 -16
  597. data/test/core/numeric/test_round_to.rb +0 -76
  598. data/test/core/numeric/test_spacing.rb +0 -17
  599. data/test/core/object/test_dup.rb +0 -115
  600. data/test/core/object/test_object_state.rb +0 -75
  601. data/test/core/object/test_try_dup.rb +0 -59
  602. data/test/core/proc/test_bind.rb +0 -29
  603. data/test/core/proc/test_bind_to.rb +0 -17
  604. data/test/core/proc/test_compose.rb +0 -27
  605. data/test/core/proc/test_partial.rb +0 -27
  606. data/test/core/proc/test_to_method.rb +0 -43
  607. data/test/core/proc/test_update.rb +0 -15
  608. data/test/core/range/test_combine.rb +0 -32
  609. data/test/core/range/test_nudge.rb +0 -32
  610. data/test/core/range/test_op_add.rb +0 -24
  611. data/test/core/range/test_op_sub.rb +0 -34
  612. data/test/core/range/test_overlap.rb +0 -15
  613. data/test/core/range/test_to_rng.rb +0 -20
  614. data/test/core/range/test_umbrella.rb +0 -32
  615. data/test/core/range/test_within.rb +0 -25
  616. data/test/core/regexp/test_arity.rb +0 -30
  617. data/test/core/regexp/test_multiline.rb +0 -19
  618. data/test/core/regexp/test_op_add.rb +0 -15
  619. data/test/core/regexp/test_op_or.rb +0 -16
  620. data/test/core/regexp/test_to_re.rb +0 -24
  621. data/test/core/string/test_acronym.rb +0 -14
  622. data/test/core/string/test_align.rb +0 -32
  623. data/test/core/string/test_ascii_only.rb +0 -51
  624. data/test/core/string/test_bracket.rb +0 -37
  625. data/test/core/string/test_camelcase.rb +0 -59
  626. data/test/core/string/test_capitalized.rb +0 -36
  627. data/test/core/string/test_characters.rb +0 -13
  628. data/test/core/string/test_cleanlines.rb +0 -12
  629. data/test/core/string/test_cleave.rb +0 -27
  630. data/test/core/string/test_cmp.rb +0 -18
  631. data/test/core/string/test_compress_lines.rb +0 -27
  632. data/test/core/string/test_crypt.rb +0 -17
  633. data/test/core/string/test_divide.rb +0 -17
  634. data/test/core/string/test_each_word.rb +0 -17
  635. data/test/core/string/test_edit_distance.rb +0 -20
  636. data/test/core/string/test_exclude.rb +0 -23
  637. data/test/core/string/test_expand_tabs.rb +0 -83
  638. data/test/core/string/test_file.rb +0 -15
  639. data/test/core/string/test_fold.rb +0 -21
  640. data/test/core/string/test_indent.rb +0 -90
  641. data/test/core/string/test_index_all.rb +0 -22
  642. data/test/core/string/test_interpolate.rb +0 -16
  643. data/test/core/string/test_lchomp.rb +0 -25
  644. data/test/core/string/test_line_wrap.rb +0 -15
  645. data/test/core/string/test_lowercase.rb +0 -18
  646. data/test/core/string/test_margin.rb +0 -16
  647. data/test/core/string/test_methodize.rb +0 -28
  648. data/test/core/string/test_modulize.rb +0 -28
  649. data/test/core/string/test_mscan.rb +0 -18
  650. data/test/core/string/test_natcmp.rb +0 -17
  651. data/test/core/string/test_nchar.rb +0 -17
  652. data/test/core/string/test_newlines.rb +0 -14
  653. data/test/core/string/test_number.rb +0 -44
  654. data/test/core/string/test_op_div.rb +0 -15
  655. data/test/core/string/test_op_sub.rb +0 -15
  656. data/test/core/string/test_pathize.rb +0 -31
  657. data/test/core/string/test_quote.rb +0 -41
  658. data/test/core/string/test_random.rb +0 -25
  659. data/test/core/string/test_range.rb +0 -35
  660. data/test/core/string/test_remove.rb +0 -50
  661. data/test/core/string/test_rewrite.rb +0 -17
  662. data/test/core/string/test_rotate.rb +0 -31
  663. data/test/core/string/test_shatter.rb +0 -17
  664. data/test/core/string/test_similarity.rb +0 -22
  665. data/test/core/string/test_snakecase.rb +0 -22
  666. data/test/core/string/test_splice.rb +0 -37
  667. data/test/core/string/test_squish.rb +0 -31
  668. data/test/core/string/test_store.rb +0 -16
  669. data/test/core/string/test_subtract.rb +0 -16
  670. data/test/core/string/test_titlecase.rb +0 -16
  671. data/test/core/string/test_to_re.rb +0 -35
  672. data/test/core/string/test_trim.rb +0 -116
  673. data/test/core/string/test_unbracket.rb +0 -38
  674. data/test/core/string/test_underscore.rb +0 -21
  675. data/test/core/string/test_unfold.rb +0 -17
  676. data/test/core/string/test_unindent.rb +0 -105
  677. data/test/core/string/test_unquote.rb +0 -13
  678. data/test/core/string/test_uppercase.rb +0 -22
  679. data/test/core/string/test_variablize.rb +0 -15
  680. data/test/core/string/test_word_wrap.rb +0 -80
  681. data/test/core/string/test_words.rb +0 -24
  682. data/test/core/string/test_xor.rb +0 -16
  683. data/test/core/struct/test_replace.rb +0 -18
  684. data/test/core/symbol/test_as_s.rb +0 -15
  685. data/test/core/symbol/test_bang.rb +0 -15
  686. data/test/core/symbol/test_chomp.rb +0 -22
  687. data/test/core/symbol/test_generate.rb +0 -20
  688. data/test/core/symbol/test_not.rb +0 -19
  689. data/test/core/symbol/test_op_div.rb +0 -15
  690. data/test/core/symbol/test_plain.rb +0 -19
  691. data/test/core/symbol/test_query.rb +0 -19
  692. data/test/core/symbol/test_setter.rb +0 -17
  693. data/test/core/symbol/test_succ.rb +0 -16
  694. data/test/core/symbol/test_thrown.rb +0 -22
  695. data/test/core/symbol/test_variablize.rb +0 -14
  696. data/test/core/time/test_ago.rb +0 -18
  697. data/test/core/time/test_change.rb +0 -17
  698. data/test/core/time/test_dst_adjustment.rb +0 -19
  699. data/test/core/time/test_elapse.rb +0 -15
  700. data/test/core/time/test_future.rb +0 -32
  701. data/test/core/time/test_hence.rb +0 -18
  702. data/test/core/time/test_in.rb +0 -18
  703. data/test/core/time/test_less.rb +0 -139
  704. data/test/core/time/test_past.rb +0 -32
  705. data/test/core/time/test_round_to.rb +0 -34
  706. data/test/core/time/test_set.rb +0 -43
  707. data/test/core/time/test_shift.rb +0 -135
  708. data/test/core/time/test_stamp.rb +0 -42
  709. data/test/core/time/test_to_time.rb +0 -15
  710. data/test/core/time/test_trunc.rb +0 -34
  711. data/test/core/unboundmethod/test_arguments.rb +0 -25
  712. data/test/standard/binding/test_block_exec.rb +0 -21
  713. data/test/standard/math/test_abs.rb +0 -13
  714. data/test/standard/math/test_acot.rb +0 -23
  715. data/test/standard/math/test_acoth.rb +0 -22
  716. data/test/standard/math/test_beta.rb +0 -19
  717. data/test/standard/math/test_ceil.rb +0 -22
  718. data/test/standard/math/test_cosec.rb +0 -19
  719. data/test/standard/math/test_cosech.rb +0 -19
  720. data/test/standard/math/test_cot.rb +0 -13
  721. data/test/standard/math/test_coth.rb +0 -13
  722. data/test/standard/math/test_distance.rb +0 -16
  723. data/test/standard/math/test_exp10.rb +0 -14
  724. data/test/standard/math/test_exp2.rb +0 -14
  725. data/test/standard/math/test_factorial.rb +0 -13
  726. data/test/standard/math/test_floor.rb +0 -23
  727. data/test/standard/math/test_gcd.rb +0 -18
  728. data/test/standard/math/test_lcm.rb +0 -13
  729. data/test/standard/math/test_median.rb +0 -17
  730. data/test/standard/math/test_percentile.rb +0 -13
  731. data/test/standard/math/test_pow.rb +0 -30
  732. data/test/standard/math/test_root.rb +0 -15
  733. data/test/standard/math/test_sec.rb +0 -19
  734. data/test/standard/math/test_sech.rb +0 -19
  735. data/test/standard/math/test_sign.rb +0 -20
  736. data/test/standard/math/test_sinc.rb +0 -15
  737. data/test/standard/math/test_srq.rb +0 -20
  738. data/test/standard/pathname/test_chdir.rb +0 -16
  739. data/test/standard/pathname/test_readline.rb +0 -23
  740. data/test/standard/test_argvector.rb +0 -64
  741. data/test/standard/test_cloneable.rb +0 -60
  742. data/test/standard/test_date.rb +0 -82
  743. data/test/standard/test_enumargs.rb +0 -105
  744. data/test/standard/test_equitable.rb +0 -46
  745. data/test/standard/test_instantiable.rb +0 -40
  746. data/test/standard/test_math.rb +0 -3
  747. data/test/standard/test_memoizable.rb +0 -42
  748. data/test/standard/test_multipliers.rb +0 -141
  749. data/test/standard/test_ostruct.rb +0 -191
  750. data/test/standard/test_random.rb +0 -241
  751. data/test/standard/test_shellwords.rb +0 -74
  752. data/test/standard/test_thread.rb +0 -24
  753. data/test/standard/test_timer.rb +0 -62
  754. data/test/standard/test_tuple.rb +0 -68
  755. data/test/standard/test_uri.rb +0 -50
@@ -7,7 +7,6 @@ class Array
7
7
  # [].average #=> nil
8
8
  # [1, 2, 3].average #=> 2
9
9
  # [3, 12, 57, 85, 15, 89, 33, 7, 22, 54].average #=> 37.7
10
- # [1,[2,nil,[3]],nil,4].collapse #=> [1,2,3,4]
11
10
  #
12
11
  def average
13
12
  return nil if empty?
@@ -19,7 +19,7 @@ class Array
19
19
  self[(index(value).to_i - 1) % length]
20
20
  end
21
21
 
22
- # Returns the value after the given value. The value before the last
22
+ # Returns the value next to the given value. The value next to the last
23
23
  # is the first. Returns nil if the given value is not in the array.
24
24
  #
25
25
  # Examples
@@ -0,0 +1,21 @@
1
+ class Array
2
+ # Deletes first item from +self+ that is equal to +obj+.
3
+ #
4
+ # Returns the deleted item, or +nil+ if no matching item is found.
5
+ #
6
+ # If the optional code block is given, the result of the block is returned if
7
+ # the item is not found.
8
+ #
9
+ # a = [ "a", "b", "b", "b", "c" ]
10
+ # a.delete_first("b") #=> "b"
11
+ # a #=> ["a", "c"]
12
+ # a.delete("z") #=> nil
13
+ # a.delete("z") {"not found"} #=> "not found"
14
+ def delete_first(el)
15
+ i = index(el)
16
+ if i
17
+ delete_at(i)
18
+ end
19
+ end
20
+ end
21
+
@@ -21,4 +21,17 @@ class Array
21
21
  h.delete_if{|_,v| v < min}.keys
22
22
  end
23
23
 
24
+ # In-place version of #duplicates. Replaces the array with
25
+ # only its duplicate elements.
26
+ #
27
+ # Examples:
28
+ #
29
+ # a = [1,1,2,3,2]
30
+ # a.duplicates! #=> [1,2]
31
+ # a #=> [1,2]
32
+ #
33
+ def duplicates!(min=2)
34
+ replace(duplicates(min))
35
+ end
36
+
24
37
  end
@@ -0,0 +1,113 @@
1
+ class Array
2
+ # Returns an array of _indexes_ of all objects in receiver such that the object is == to obj.
3
+ #
4
+ # If a block is given instead of an argument, returns the _indexes_ of all objects for which the
5
+ # block returns true.
6
+ #
7
+ # If neither a block nor argument is given, an Enumerator for _all_ indexes (each_index) is returned.
8
+ #
9
+ # Returns [] if no match is found.
10
+ #
11
+ # a = [ "a", "b", "c" ]
12
+ # a.indexes("b").to_a #=> [1]
13
+ # a.indexes("z").to_a #=> []
14
+ # a.indexes { |x| x == "b" }.to_a #=> [1]
15
+ #
16
+ # Like Array#index/rindex and Enumerable#find_index but returns _all_ indexes instead of just the
17
+ # first/last.
18
+ #
19
+ # See also: proposal to add Array#indexes to Ruby language: https://bugs.ruby-lang.org/issues/6596
20
+ #
21
+ # @author Tyler Rick
22
+ def indexes(*args)
23
+ case args.length
24
+ when 0
25
+ if block_given?
26
+ each_index.select {|i| yield(self[i]) }
27
+ else
28
+ each_index
29
+ end
30
+ when 1
31
+ other = args.first
32
+ each_index.select {|i| self[i] == other }
33
+ else
34
+ raise ArgumentError, "wrong number of arguments (given #{args.length}, expected 0..1)"
35
+ end
36
+ end
37
+ alias_method :index_all, :indexes
38
+ end
39
+
40
+ module Enumerable
41
+ # Returns an enumerator of _indexes_ of all objects in receiver such that the object is == to obj.
42
+ #
43
+ # If a block is given instead of an argument, returns the _indexes_ of all objects for which the
44
+ # block returns true.
45
+ #
46
+ # If neither a block nor argument is given, an Enumerator for _all_ indexes is returned.
47
+ #
48
+ # Returns [] if no match is found.
49
+ #
50
+ # a = ("a".."c")
51
+ # a.indexes("b").to_a #=> [1]
52
+ # a.indexes("z").to_a #=> []
53
+ # a.indexes { |x| x == "b" }.to_a #=> [1]
54
+ #
55
+ # Like Array#index/rindex and Enumerable#find_index but returns _all_ indexes instead of just the
56
+ # first/last.
57
+ #
58
+ # See also: proposal to add Array#indexes to Ruby language: https://bugs.ruby-lang.org/issues/6596
59
+ #
60
+ # @author Tyler Rick
61
+ #
62
+ def indexes(*args)
63
+ # Enumerable doesn't have each_index like Array has, so this uses each_with_index instead.
64
+ case args.length
65
+ when 0
66
+ if block_given?
67
+ each_with_index.select {|el, i| yield(el) }.map {|el, i| i }
68
+ else
69
+ each_with_index. map {|el, i| i }.to_enum
70
+ end
71
+ when 1
72
+ other = args.first
73
+ each_with_index. select {|el, i| el == other }.map {|el, i| i }
74
+ else
75
+ raise ArgumentError, "wrong number of arguments (given #{args.length}, expected 0..1)"
76
+ end
77
+ end
78
+ alias_method :index_all, :indexes
79
+ end
80
+
81
+ class Enumerator::Lazy
82
+ # Returns an enumerator of _indexes_ of all object in receiver such that the object is == to obj.
83
+ #
84
+ # If a block is given instead of an argument, returns the _indexes_ of all objects for which the
85
+ # block returns true.
86
+ #
87
+ # If neither a block nor argument is given, an Enumerator for _all_ indexes is returned.
88
+ #
89
+ # enum = (42 .. Float::INFINITY).lazy.indexes
90
+ # #=> #<Enumerator::Lazy: ...>
91
+ # enum.next #=> 0
92
+ # enum.next #=> 1
93
+ # enum.first(5) #=> [0, 1, 2, 3, 4]
94
+ #
95
+ # @author Tyler Rick
96
+ #
97
+ def indexes(*args)
98
+ case args.length
99
+ when 0
100
+ if block_given?
101
+ each_with_index.lazy.select {|el, i| yield(el) }.map {|el, i| i }
102
+ else
103
+ each_with_index.lazy. map {|el, i| i }.to_enum
104
+ end
105
+ when 1
106
+ other = args.first
107
+ each_with_index.lazy. select {|el, i| el == other }.map {|el, i| i }
108
+ else
109
+ raise ArgumentError, "wrong number of arguments (given #{args.length}, expected 0..1)"
110
+ end
111
+ end
112
+ alias_method :index_all, :indexes
113
+ end
@@ -1,3 +1,5 @@
1
+ require 'facets/array/duplicates'
2
+
1
3
  class Array
2
4
 
3
5
  # Returns a list of non-unique elements.
@@ -9,19 +11,15 @@ class Array
9
11
  # CREDIT: Martin DeMello
10
12
 
11
13
  def nonuniq
12
- h1 = {}
13
- h2 = {}
14
- each {|i|
15
- h2[i] = true if h1[i]
16
- h1[i] = true
17
- }
18
- h2.keys
14
+ warn "Array#nonuniq is deprecated. Use Array#duplicates instead.", uplevel: 1
15
+ duplicates
19
16
  end
20
17
 
21
18
  # Same as `#nonuniq` but acts in place.
22
19
 
23
20
  def nonuniq!
24
- self.replace(self.nonuniq)
21
+ warn "Array#nonuniq! is deprecated. Use Array#duplicates instead.", uplevel: 1
22
+ self.replace(duplicates)
25
23
  end
26
24
 
27
25
  end
@@ -11,6 +11,10 @@ class Array
11
11
  # [2,2,3,4,4,4].occurrence{|i| i % 2}
12
12
  # #=> { 0 => 5, 1 => 1 }
13
13
  #
14
+ # Without a block, this is equivalent to Ruby's #tally.
15
+ # With a block, the block transforms the key before counting,
16
+ # which #tally does not support.
17
+ #
14
18
  def occurrence
15
19
  h = Hash.new(0)
16
20
  if block_given?
@@ -26,4 +30,3 @@ class Array
26
30
  end
27
31
 
28
32
  end
29
-
@@ -0,0 +1,39 @@
1
+ class Array
2
+ # Returns a new array that is a copy of the original array, removing the first occurrence of any
3
+ # item that also appears in +other_ary+. The order is preserved from the original array.
4
+ #
5
+ # If there are multiple occurrences of an item in +other_ary+, this removes that many occurrences
6
+ # from self.
7
+ #
8
+ # This is similar to `Array#-` and `Array#difference`, except that instead of removing _all_
9
+ # matches, it only removes as many occurrences as there are in the +other_ary+:
10
+ #
11
+ # > [1, 1, 2].remove [1]
12
+ # => [1, 2]
13
+ #
14
+ # > [1, 1, 2].remove [1, 1, 1]
15
+ # => [2]
16
+ #
17
+ # > [1, 1, 2] - [1]
18
+ # => [2]
19
+ #
20
+ # > [1, 1, 2].difference [1]
21
+ # => [2]
22
+ #
23
+ def remove(other_ary)
24
+ dup.remove!(other_ary)
25
+ end
26
+
27
+ # For each element of `other_ary`, deletes the _first_ element from self that is equal to that element
28
+ # (using `delete_at`, not `delete`).
29
+ #
30
+ # This is the in-place version of remove.
31
+ #
32
+ def remove!(other_ary)
33
+ other_ary.each do |el|
34
+ i = index(el)
35
+ delete_at(i) if i
36
+ end
37
+ self
38
+ end
39
+ end
@@ -0,0 +1,29 @@
1
+ class Array
2
+ # Public: Split an array in two using a predicate
3
+ #
4
+ # Yields each element of the array.
5
+ #
6
+ # Examples
7
+ #
8
+ # %w(The quick brown fox).span { |word| word.length < 4 }
9
+ # #=> [['The'], ['quick', 'brown', 'fox']]
10
+ #
11
+ # [1, 1, 2, 3, 5, 8, 13, 21, 34].span(&:odd?)
12
+ # #=> [[1, 1], [2, 3, 5, 8, 13, 21, 34]]
13
+ #
14
+ # Returns a 2-tuple of arrays, the first element being the longest prefix for
15
+ # which the block evaluates to true, the second element being the rest of the
16
+ # array.
17
+ #
18
+ # TODO: This is based on Haskell's `span`, but the name is not intuitive
19
+ # for Ruby. Consider a more descriptive name (e.g. `split_while`).
20
+ # Also consider adding the inverse (Haskell's `break`), which splits
21
+ # where the predicate first becomes true.
22
+ def span
23
+ # This implementation is another way of saying
24
+ # `[take_while(&:block), drop_while(&:block)]`
25
+ index = find_index { |e| !yield e }
26
+ return [dup, []] if index.nil?
27
+ [take(index), drop(index)]
28
+ end
29
+ end
@@ -0,0 +1,25 @@
1
+ class Array
2
+
3
+ # Split on matching pattern. Breaks the array into [before, middle, after]
4
+ # segments. Uses Array#index to find the middle element.
5
+ #
6
+ # Examples
7
+ #
8
+ # ['a1','a2','b1','a3','b2','a4'].split('b1')
9
+ # #=> [['a1','a2'],b1,['a3','b2','a4']]
10
+ #
11
+ # ['a1','a2','b1','a3','b2','a4'].split('foo')
12
+ # #=> [[],nil,[]]
13
+ #
14
+ # Returns list of split-up arrays. [Tuple<Array,Object,Array>]
15
+
16
+ def split_at(*args, &block)
17
+ if middle = index(*args, &block)
18
+ [self[0...middle], self[middle], self[middle+1..-1]]
19
+ else
20
+ [[], nil, []]
21
+ end
22
+ end
23
+
24
+ end
25
+
@@ -12,12 +12,17 @@ class Array
12
12
  # [36, -67, -17, 85, -46, -64, -23, -13, 89, -47].standard_deviation #=> 54.67183918618432
13
13
  # [60.7829, 31.2622, 20.626, 78.8907, 61.5328].standard_deviation #=> 21.428815505053002
14
14
  #
15
- def standard_deviation
15
+ def stddev
16
16
  return nil if empty?
17
17
  Math.sqrt(variance)
18
18
  end
19
19
 
20
- alias sd standard_deviation
20
+ alias sd stddev
21
+
22
+ def standard_deviation
23
+ warn "Array#standard_deviation is deprecated. Use Array#stddev or Array#sd instead.", uplevel: 1
24
+ stddev
25
+ end
21
26
  end
22
27
 
23
28
 
@@ -2,30 +2,28 @@ class Array
2
2
 
3
3
  # Iterate over every nth element of an array.
4
4
  #
5
+ # An optional offset can be given to start from a
6
+ # specific index (default is 0).
7
+ #
8
+ # [:a, :b, :c, :d, :e, :f].step(2).to_a #=> [:a, :c, :e]
9
+ # [:a, :b, :c, :d, :e, :f].step(2, 1).to_a #=> [:b, :d, :f]
10
+ # [:a, :b, :c, :d, :e, :f].step(3).to_a #=> [:a, :d]
11
+ #
5
12
  # r = []
6
13
  # [:a, :b, :c, :d].step(2) { |x| r << x }
7
- # r #=> [:b, :d]
8
- #
9
- # Without a block it returns an Enumerator.
10
- #
11
- # [:a, :b, :c, :d].step(1).to_a #=> [:a, :b, :c, :d]
12
- # [:a, :b, :c, :d].step(2).to_a #=> [:b, :d]
13
- # [:a, :b, :c, :d].step(3).to_a #=> [:c]
14
- # [:a, :b, :c, :d].step(5).to_a #=> []
14
+ # r #=> [:a, :c]
15
15
  #
16
16
  # CREDIT: Ryan Duryea
17
17
 
18
- def step(n) #:yield:
18
+ def step(n, offset=0) #:yield:
19
19
  if block_given?
20
- ((n - 1)...size).step(n).each do |i|
20
+ (offset...size).step(n).each do |i|
21
21
  yield(fetch(i))
22
22
  end
23
23
  else
24
- Enumerator.new(size / n) do |y|
25
- ((n - 1)...self.size).step(n).each { |i| y << fetch(i) }
24
+ Enumerator.new do |y|
25
+ (offset...size).step(n).each { |i| y << fetch(i) }
26
26
  end
27
27
  end
28
28
  end
29
29
  end
30
-
31
-
@@ -0,0 +1,48 @@
1
+ class Array
2
+
3
+ # Produces an array of ranges from the values in the array.
4
+ # Contiguous values and overlapping ranges are merged.
5
+ # Single values are returned as single-element ranges (e.g. 1..1).
6
+ #
7
+ # Examples
8
+ #
9
+ # [1,2,3,6,7,8].to_ranges #=> [1..3, 6..8]
10
+ #
11
+ # [3,4,5,1,6,9,8].to_ranges #=> [1..1, 3..6, 8..9]
12
+ #
13
+ # [10..15, 16..20, 21, 22].to_ranges #=> [10..22]
14
+ #
15
+ # Assumes inclusive ranges (i.e. 1..4) and range.first <= range.last.
16
+ #
17
+ # Works with integers, dates and strings. However, all the objects
18
+ # in the array must be of the same class.
19
+ #
20
+ # CREDIT: monocle, Ryan Duryea
21
+
22
+ def to_ranges
23
+ array = compact.uniq.sort_by { |e| Range === e ? e.first : e }
24
+ result = array.inject([]) do |c, value|
25
+ unless c.empty?
26
+ last = c.last
27
+ last_value = (Range === last ? last.last : last)
28
+ current_value = (Range === value ? value.first : value)
29
+ if (last_value.succ <=> current_value) == -1
30
+ c << value
31
+ else
32
+ first = (Range === last ? last.first : last)
33
+ second = [Range === last ? last.last : last, Range === value ? value.last : value].max
34
+ c[-1] = [first..second]
35
+ c.flatten!
36
+ end
37
+ else
38
+ c << value
39
+ end
40
+ end
41
+ # Ensure all elements are ranges
42
+ result.map { |e| Range === e ? e : e..e }
43
+ end
44
+
45
+ alias arrange to_ranges
46
+ alias rangify to_ranges
47
+
48
+ end
@@ -15,9 +15,9 @@ class Array
15
15
  #
16
16
  # Returns [Array] of unique elements.
17
17
  #
18
- def uniq_by! #:yield:
19
- h = {}
20
- replace( inject([]){|a,x| h[yield(x)] ||= a << x} )
18
+ def uniq_by!(&block) #:yield:
19
+ warn "Array#uniq_by! is deprecated. Use Array#uniq!(&block) instead.", uplevel: 1
20
+ uniq!(&block)
21
21
  end
22
22
 
23
23
  end
@@ -8,16 +8,22 @@ class Binding
8
8
  eval("caller(#{skip})")
9
9
  end
10
10
 
11
+ # Returns the call stack, same format as Kernel#caller_locations()
12
+ #
13
+ def caller_locations( skip=0 )
14
+ eval("caller_locations(#{skip})")
15
+ end
16
+
11
17
  # Return the line number on which the binding was created.
12
18
  #
13
19
  def __LINE__
14
- Kernel.eval("__LINE__", self)
20
+ self.source_location[1]
15
21
  end
16
22
 
17
23
  # Returns file name in which the binding was created.
18
24
  #
19
25
  def __FILE__
20
- Kernel.eval("__FILE__", self)
26
+ self.source_location[0]
21
27
  end
22
28
 
23
29
  # Return the directory of the file in which the binding was created.
@@ -1,25 +1,21 @@
1
1
  class Binding
2
2
 
3
- # Returns the value of some variable.
3
+ # Returns the value of a local variable.
4
4
  #
5
5
  # a = 2
6
- # binding["a"] #=> 2
6
+ # binding[:a] #=> 2
7
7
  #
8
- def []( x )
9
- eval( x.to_s )
8
+ def [](name)
9
+ local_variable_get(name.to_sym)
10
10
  end
11
11
 
12
12
  # Set the value of a local variable.
13
13
  #
14
- # binding["a"] = 4
14
+ # binding[:a] = 4
15
15
  # a #=> 4
16
16
  #
17
- # @deprecated No longer wortks in Ruby 1.9+.
18
- #
19
- # @see Binding#with for an alternative.
20
- def []=( l, v )
21
- eval( "lambda {|v| #{l} = v}").call( v )
17
+ def []=(name, value)
18
+ local_variable_set(name.to_sym, value)
22
19
  end
23
20
 
24
21
  end
25
-
@@ -1,15 +1,9 @@
1
1
  class Binding
2
2
 
3
- # This is already defined by Rubinius:
4
- # Kernel.eval('Rubinius::VariableScope.current.self', self)
5
- unless method_defined?(:self)
6
-
7
- # Returns self of the binding's context.
8
- def self
9
- eval('self')
10
- end
11
-
3
+ # @deprecated Use Binding#receiver instead (built-in since Ruby 2.6).
4
+ def self
5
+ warn "Binding#self is deprecated. Use Binding#receiver instead.", uplevel: 1
6
+ receiver
12
7
  end
13
8
 
14
9
  end
15
-
@@ -86,7 +86,7 @@ class String
86
86
  #
87
87
  # All other strings return false.
88
88
  #
89
- # Here are some exmamples.
89
+ # Here are some examples.
90
90
  #
91
91
  # "true".to_b #=> true
92
92
  # "yes".to_b #=> true
@@ -1,5 +1,3 @@
1
- require 'facets/class/subclasses'
2
-
3
1
  class Class
4
2
 
5
3
  # List all descedents of this class.
@@ -3,7 +3,7 @@ require_relative 'class/descendants.rb'
3
3
  require_relative 'class/methodize.rb'
4
4
  require_relative 'class/pathize.rb'
5
5
  #require_relative 'class/preallocate.rb' # uncommon
6
- #require_relative 'class/singleton.rb' # uncommon
7
- require_relative 'class/subclasses.rb'
6
+ #require_relative 'class/singleton.rb' # removed, use Ruby's singleton_class
7
+ #require_relative 'class/subclasses.rb' # removed, use Ruby's subclasses
8
8
  require_relative 'class/to_proc.rb'
9
9
 
@@ -1 +1,13 @@
1
- require 'facets/comparable/clip'
1
+ module Comparable
2
+
3
+ # Alias for Comparable#clamp. Reads more naturally in some contexts.
4
+ #
5
+ # 4.bound(2, 7) #=> 4
6
+ # 9.bound(2, 7) #=> 7
7
+ # 1.bound(2, 7) #=> 2
8
+ #
9
+ def bound(lower, upper=nil)
10
+ upper ? clamp(lower, upper) : clamp(lower..)
11
+ end
12
+
13
+ end
@@ -1,38 +1,9 @@
1
1
  module Comparable
2
2
 
3
- # Returns self if above the given lower bound, or
4
- # within the given lower and upper bounds,
5
- # otherwise returns the the bound of which the
6
- # value falls outside.
7
- #
8
- # 4.clip(3) #=> 4
9
- # 4.clip(5) #=> 5
10
- # 4.clip(2,7) #=> 4
11
- # 9.clip(2,7) #=> 7
12
- # 1.clip(2,7) #=> 2
13
- #
14
- # CREDIT Florian Gross, Trans
15
-
3
+ # @deprecated Use Comparable#clamp instead (built-in since Ruby 2.4).
16
4
  def clip(lower, upper=nil)
17
- return lower if self < lower
18
- return self unless upper
19
- return upper if self > upper
20
- return self
5
+ warn "Comparable#clip is deprecated. Use Comparable#clamp instead.", uplevel: 1
6
+ upper ? clamp(lower, upper) : clamp(lower..)
21
7
  end
22
8
 
23
- # Returns self if above the given lower bound, or
24
- # within the given lower and upper bounds,
25
- # otherwise returns the the bound of which the
26
- # value falls outside.
27
- #
28
- # 4.bound(3) #=> 4
29
- # 4.bound(5) #=> 5
30
- # 4.bound(2,7) #=> 4
31
- # 9.bound(2,7) #=> 7
32
- # 1.bound(2,7) #=> 2
33
- #
34
- # CREDIT: Florian Gross
35
-
36
- alias_method :bound, :clip
37
-
38
9
  end
@@ -1,6 +1,3 @@
1
- require 'facets/enumerator'
2
- #require 'facets/enumerable/take'
3
-
4
1
  # Classes which include Denumerable will get versions of map,
5
2
  # select, and so on, which return a Denumerator, so that they
6
3
  # work horizontally without creating intermediate arrays.
@@ -0,0 +1,20 @@
1
+ require 'find'
2
+
3
+ class Dir
4
+
5
+ # Recursively traverse a directory, yielding each file and directory path.
6
+ # Supports Find.prune to skip subtrees.
7
+ #
8
+ # Dir.find('.') do |path|
9
+ # puts path
10
+ # end
11
+ #
12
+ # Returns an enumerator if no block is given.
13
+ #
14
+ # This is a convenience wrapper around Ruby's Find.find.
15
+
16
+ def self.find(*paths, ignore_error: true, &block)
17
+ Find.find(*paths, ignore_error: ignore_error, &block)
18
+ end
19
+
20
+ end