facets 3.0.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 (748) hide show
  1. checksums.yaml +5 -5
  2. data/CONTRIBUTING.md +112 -0
  3. data/HISTORY.md +179 -0
  4. data/LICENSE.txt +21 -343
  5. data/{README.rdoc → README.md} +74 -67
  6. data/lib/core/facets/array/arrange.rb +1 -42
  7. data/lib/core/facets/array/average.rb +15 -0
  8. data/lib/core/facets/array/before.rb +1 -1
  9. data/lib/core/facets/array/collapse.rb +4 -0
  10. data/lib/core/facets/array/delete_first.rb +21 -0
  11. data/lib/core/facets/array/delete_values_at.rb +1 -0
  12. data/lib/core/facets/array/divide.rb +7 -0
  13. data/lib/core/facets/array/duplicates.rb +15 -0
  14. data/lib/core/facets/array/each_pair.rb +1 -4
  15. data/lib/core/facets/array/first.rb +1 -0
  16. data/lib/core/facets/array/from.rb +11 -16
  17. data/lib/core/facets/array/indexes.rb +113 -0
  18. data/lib/core/facets/array/last.rb +1 -0
  19. data/lib/core/facets/array/mode.rb +2 -2
  20. data/lib/core/facets/array/nonuniq.rb +6 -8
  21. data/lib/core/facets/array/occurrence.rb +8 -4
  22. data/lib/core/facets/array/probability.rb +1 -1
  23. data/lib/core/facets/array/recursively.rb +2 -2
  24. data/lib/core/facets/array/remove.rb +39 -0
  25. data/lib/core/facets/array/span.rb +29 -0
  26. data/lib/core/facets/array/splice.rb +1 -1
  27. data/lib/core/facets/array/split_at.rb +25 -0
  28. data/lib/core/facets/array/standard_deviation.rb +28 -0
  29. data/lib/core/facets/array/step.rb +12 -14
  30. data/lib/core/facets/array/to_ranges.rb +48 -0
  31. data/lib/core/facets/array/uniq_by.rb +7 -3
  32. data/lib/core/facets/array/variance.rb +20 -0
  33. data/lib/core/facets/array.rb +1 -0
  34. data/lib/core/facets/binding/caller.rb +8 -2
  35. data/lib/core/facets/binding/op_get.rb +7 -11
  36. data/lib/core/facets/binding/self.rb +4 -10
  37. data/lib/core/facets/binding.rb +0 -1
  38. data/lib/core/facets/boolean.rb +1 -1
  39. data/lib/core/facets/class/descendants.rb +0 -2
  40. data/lib/core/facets/class.rb +2 -2
  41. data/lib/core/facets/comparable/bound.rb +13 -1
  42. data/lib/core/facets/comparable/clip.rb +3 -32
  43. data/lib/core/facets/denumerable.rb +0 -3
  44. data/lib/core/facets/dir/find.rb +20 -0
  45. data/lib/core/facets/dir/recurse.rb +8 -26
  46. data/lib/core/facets/enumerable/cluster.rb +6 -4
  47. data/lib/core/facets/enumerable/compact_map.rb +2 -12
  48. data/lib/core/facets/enumerable/defer.rb +2 -13
  49. data/lib/core/facets/enumerable/each_by.rb +0 -2
  50. data/lib/core/facets/enumerable/frequency.rb +2 -2
  51. data/lib/core/facets/enumerable/hashify.rb +27 -31
  52. data/lib/core/facets/enumerable/hinge.rb +3 -4
  53. data/lib/core/facets/enumerable/map_with_index.rb +3 -6
  54. data/lib/core/facets/enumerable/mash.rb +5 -28
  55. data/lib/core/facets/enumerable/uniq_by.rb +4 -8
  56. data/lib/core/facets/enumerable/with_position.rb +58 -0
  57. data/lib/core/facets/enumerator.rb +2 -75
  58. data/lib/core/facets/exception/error_print.rb +6 -71
  59. data/lib/core/facets/file/atomic_open.rb +1 -1
  60. data/lib/core/facets/file/null.rb +3 -15
  61. data/lib/core/facets/file/read_binary.rb +3 -12
  62. data/lib/core/facets/hash/except.rb +11 -6
  63. data/lib/core/facets/hash/fetch_nested.rb +8 -9
  64. data/lib/core/facets/hash/graph.rb +1 -1
  65. data/lib/core/facets/hash/rekey.rb +3 -3
  66. data/lib/core/facets/hash/revalue.rb +3 -3
  67. data/lib/core/facets/hash/{to_proc.rb → setter.rb} +8 -9
  68. data/lib/core/facets/hash/slice.rb +0 -26
  69. data/lib/core/facets/hash/update_keys.rb +4 -11
  70. data/lib/core/facets/hash/update_values.rb +4 -10
  71. data/lib/core/facets/indexable.rb +7 -5
  72. data/lib/core/facets/kernel/callstack.rb +5 -24
  73. data/lib/core/facets/kernel/eigenclass.rb +6 -6
  74. data/lib/core/facets/kernel/ergo.rb +3 -3
  75. data/lib/core/facets/kernel/extension.rb +3 -6
  76. data/lib/core/facets/kernel/functor.rb +16 -0
  77. data/lib/core/facets/kernel/instance_class.rb +4 -20
  78. data/lib/core/facets/kernel/instance_send.rb +5 -3
  79. data/lib/core/facets/kernel/like.rb +1 -1
  80. data/lib/core/facets/kernel/load_relative.rb +8 -20
  81. data/lib/core/facets/kernel/memo.rb +4 -26
  82. data/lib/core/facets/kernel/meta_class.rb +10 -6
  83. data/lib/core/facets/kernel/object_class.rb +5 -6
  84. data/lib/core/facets/kernel/object_send.rb +5 -26
  85. data/lib/core/facets/kernel/qua_class.rb +4 -20
  86. data/lib/core/facets/kernel/require_all.rb +8 -20
  87. data/lib/core/facets/kernel/returning.rb +3 -19
  88. data/lib/core/facets/kernel/tap.rb +3 -36
  89. data/lib/core/facets/kernel/tee.rb +2 -0
  90. data/lib/core/facets/kernel/try.rb +38 -28
  91. data/lib/core/facets/kernel.rb +2 -4
  92. data/lib/core/facets/lazy.rb +1 -1
  93. data/lib/core/facets/matchdata/matchtree.rb +2 -0
  94. data/lib/core/facets/module/alias_method_chain.rb +4 -43
  95. data/lib/core/facets/module/attr_setter.rb +3 -2
  96. data/lib/core/facets/module/can.rb +5 -16
  97. data/lib/core/facets/module/class_extend.rb +2 -2
  98. data/lib/core/facets/numeric/delimit.rb +20 -0
  99. data/lib/core/facets/object/dup.rb +0 -46
  100. data/lib/core/facets/proc/bind.rb +0 -2
  101. data/lib/core/facets/proc/compose.rb +7 -28
  102. data/lib/core/facets/proc/to_method.rb +0 -1
  103. data/lib/core/facets/proc/update.rb +8 -1
  104. data/lib/core/facets/range/intersection.rb +42 -0
  105. data/lib/core/facets/range/nudge.rb +27 -0
  106. data/lib/core/facets/string/ascii_only.rb +2 -2
  107. data/lib/core/facets/string/cleanlines.rb +0 -2
  108. data/lib/core/facets/string/dashcase.rb +21 -0
  109. data/lib/core/facets/string/indent.rb +0 -8
  110. data/lib/core/facets/string/lchomp.rb +7 -14
  111. data/lib/core/facets/string/margin.rb +0 -4
  112. data/lib/core/facets/string/newlines.rb +0 -2
  113. data/lib/core/facets/string/random.rb +13 -3
  114. data/lib/core/facets/string/similarity.rb +7 -6
  115. data/lib/core/facets/string/snakecase.rb +12 -5
  116. data/lib/core/facets/string/words.rb +13 -1
  117. data/lib/core/facets/string.rb +0 -3
  118. data/lib/core/facets/struct/attributes.rb +2 -3
  119. data/lib/core/facets/time/trunc.rb +12 -5
  120. data/lib/core/facets/unboundmethod/arguments.rb +1 -0
  121. data/lib/core/facets/version.rb +1 -17
  122. data/lib/core/facets.rb +0 -1
  123. data/lib/standard/facets/argvector.rb +1 -1
  124. data/lib/standard/facets/cgi/escape_html.rb +14 -25
  125. data/lib/standard/facets/cloneable.rb +4 -51
  126. data/lib/standard/facets/continuation.rb +2 -56
  127. data/lib/standard/facets/crypt3.rb +126 -0
  128. data/lib/standard/facets/date/cmp.rb +32 -0
  129. data/lib/standard/facets/date.rb +1 -0
  130. data/lib/standard/facets/digest.rb +0 -1
  131. data/lib/standard/facets/enumargs.rb +5 -0
  132. data/lib/standard/facets/fileutils/cp_rx.rb +0 -2
  133. data/lib/standard/facets/fileutils/ln_r.rb +0 -1
  134. data/lib/standard/facets/find/select.rb +0 -2
  135. data/lib/standard/facets/getoptlong.rb +3 -59
  136. data/lib/standard/facets/load_monitor.rb +2 -26
  137. data/lib/standard/facets/math/gini_coefficient.rb +5 -4
  138. data/lib/standard/facets/math/kldivergence.rb +8 -7
  139. data/lib/standard/facets/math/percentile.rb +2 -2
  140. data/lib/standard/facets/multiton.rb +1 -1
  141. data/lib/standard/facets/net/http.rb +33 -14
  142. data/lib/standard/facets/ostruct/initialize.rb +4 -19
  143. data/lib/standard/facets/ostruct/to_ostruct.rb +2 -1
  144. data/lib/standard/facets/ostruct.rb +0 -88
  145. data/lib/standard/facets/pathname/empty.rb +2 -10
  146. data/lib/standard/facets/pathname/glob.rb +19 -12
  147. data/lib/standard/facets/pathname/null.rb +3 -14
  148. data/lib/standard/facets/random.rb +47 -133
  149. data/lib/standard/facets/timer.rb +3 -3
  150. data/lib/standard/facets/tuple.rb +2 -4
  151. data/lib/standard/facets/uri.rb +3 -2
  152. metadata +84 -1181
  153. data/.index +0 -76
  154. data/.yardopts +0 -10
  155. data/CONTRIBUTE.md +0 -78
  156. data/NOTICE.rdoc +0 -167
  157. data/demo/applique/assertion_framework.rb +0 -1
  158. data/demo/applique/file_helpers.rb +0 -34
  159. data/demo/core/array/combination.rdoc +0 -19
  160. data/demo/core/array/delete.rdoc +0 -23
  161. data/demo/core/array/index.rdoc +0 -14
  162. data/demo/core/array/merge.rdoc +0 -15
  163. data/demo/core/array/only.rdoc +0 -9
  164. data/demo/core/array/pad.rdoc +0 -28
  165. data/demo/core/array/permutation.rdoc +0 -10
  166. data/demo/core/array/product.rdoc +0 -26
  167. data/demo/core/array/recursively.rdoc +0 -16
  168. data/demo/core/array/rotate.rdoc +0 -30
  169. data/demo/core/array/select.rdoc +0 -8
  170. data/demo/core/array/uniq_by.rdoc +0 -9
  171. data/demo/core/binding/caller.rdoc +0 -57
  172. data/demo/core/binding/defined.rdoc +0 -10
  173. data/demo/core/binding/eval.rdoc +0 -8
  174. data/demo/core/binding/local_variables.rdoc +0 -26
  175. data/demo/core/binding/opvars.rdoc +0 -16
  176. data/demo/core/binding/self.rdoc +0 -6
  177. data/demo/core/class/descendants.rdoc +0 -10
  178. data/demo/core/class/to_proc.rdoc +0 -8
  179. data/demo/core/comparable/cap.rdoc +0 -20
  180. data/demo/core/comparable/clip.rdoc +0 -37
  181. data/demo/core/comparable/cmp.rdoc +0 -18
  182. data/demo/core/comparable/op_get.rdoc +0 -29
  183. data/demo/core/dir/ascend.rdoc +0 -24
  184. data/demo/core/dir/descend.rdoc +0 -14
  185. data/demo/core/dir/multiglob.rdoc +0 -41
  186. data/demo/core/dir/parent.rdoc +0 -6
  187. data/demo/core/dir/recurse.rdoc +0 -41
  188. data/demo/core/exception/detail.rdoc +0 -12
  189. data/demo/core/facets.rdoc +0 -6
  190. data/demo/core/filetest/root.rdoc +0 -6
  191. data/demo/core/hash/recursively.rdoc +0 -21
  192. data/demo/core/indexable.rdoc +0 -95
  193. data/demo/core/integer/bitmask.rdoc +0 -46
  194. data/demo/core/integer/even.rdoc +0 -12
  195. data/demo/core/integer/factorial.rdoc +0 -10
  196. data/demo/core/integer/length.rdoc +0 -7
  197. data/demo/core/integer/multiple.rdoc +0 -10
  198. data/demo/core/integer/odd.rdoc +0 -12
  199. data/demo/core/integer/of.rdoc +0 -14
  200. data/demo/core/integer/ordinal.rdoc +0 -9
  201. data/demo/core/matchdata/match.rdoc +0 -7
  202. data/demo/core/matchdata/matchset.rdoc +0 -15
  203. data/demo/core/module/cattr.rdoc +0 -43
  204. data/demo/core/module/class_extend.rdoc +0 -64
  205. data/demo/core/module/class_inheritor.rdoc +0 -126
  206. data/demo/core/module/copy_inheritor.rdoc +0 -30
  207. data/demo/core/module/method_space.rdoc +0 -55
  208. data/demo/core/string/align.rdoc +0 -34
  209. data/demo/core/string/bracket.rdoc +0 -35
  210. data/demo/core/string/bytes.rdoc +0 -8
  211. data/demo/core/string/camelcase.rdoc +0 -47
  212. data/demo/core/string/capitalized.rdoc +0 -27
  213. data/demo/core/string/characters.rdoc +0 -11
  214. data/demo/core/string/cleanlines.rdoc +0 -10
  215. data/demo/core/string/cleave.rdoc +0 -49
  216. data/demo/core/string/divide.rdoc +0 -9
  217. data/demo/core/string/each_char.rdoc +0 -9
  218. data/demo/core/string/each_word.rdoc +0 -9
  219. data/demo/core/string/end_with.rdoc +0 -6
  220. data/demo/core/string/expand_tabs.rdoc +0 -69
  221. data/demo/core/string/fold.rdoc +0 -14
  222. data/demo/core/string/indent.rdoc +0 -65
  223. data/demo/core/string/interpolate.rdoc +0 -7
  224. data/demo/core/string/lchomp.rdoc +0 -14
  225. data/demo/core/string/line_wrap.rdoc +0 -7
  226. data/demo/core/string/lines.rdoc +0 -8
  227. data/demo/core/string/margin.rdoc +0 -92
  228. data/demo/core/string/methodize.rdoc +0 -22
  229. data/demo/core/string/modulize.rdoc +0 -22
  230. data/demo/core/string/mscan.rdoc +0 -10
  231. data/demo/core/string/natcmp.rdoc +0 -10
  232. data/demo/core/string/nchar.rdoc +0 -9
  233. data/demo/core/string/newlines.rdoc +0 -9
  234. data/demo/core/string/op_sub.rdoc +0 -7
  235. data/demo/core/string/pathize.rdoc +0 -22
  236. data/demo/core/string/quote.rdoc +0 -20
  237. data/demo/core/string/range.rdoc +0 -19
  238. data/demo/core/string/rewrite.rdoc +0 -9
  239. data/demo/core/string/shatter.rdoc +0 -9
  240. data/demo/core/string/snakecase.rdoc +0 -10
  241. data/demo/core/string/splice.rdoc +0 -28
  242. data/demo/core/string/start_with.rdoc +0 -7
  243. data/demo/core/string/subtract.rdoc +0 -8
  244. data/demo/core/string/tab.rdoc +0 -16
  245. data/demo/core/string/tabto.rdoc +0 -29
  246. data/demo/core/string/titlecase.rdoc +0 -8
  247. data/demo/core/string/to_re.rdoc +0 -22
  248. data/demo/core/string/unfold.rdoc +0 -9
  249. data/demo/core/string/unindent.rdoc +0 -65
  250. data/demo/core/string/unquote.rdoc +0 -6
  251. data/demo/core/string/variablize.rdoc +0 -7
  252. data/demo/core/string/word_wrap.rdoc +0 -54
  253. data/demo/core/string/words.rdoc +0 -13
  254. data/demo/core/string/xor.rdoc +0 -8
  255. data/demo/standard/02_cloneable.rdoc +0 -46
  256. data/demo/standard/03_enumargs.rdoc +0 -75
  257. data/demo/standard/04_equitable.rdoc +0 -35
  258. data/demo/standard/05_instantiable.rdoc +0 -42
  259. data/demo/standard/basic_object.rdoc +0 -22
  260. data/demo/standard/memoizable.rdoc +0 -134
  261. data/demo/standard/mulititon.rdoc +0 -156
  262. data/lib/core/facets/applique/file_helpers.rb +0 -33
  263. data/lib/core/facets/array/intersection.rb +0 -25
  264. data/lib/core/facets/array/op_pow.rb +0 -14
  265. data/lib/core/facets/array/to_h.rb +0 -22
  266. data/lib/core/facets/binding/local_variables.rb +0 -16
  267. data/lib/core/facets/class/singleton.rb +0 -1
  268. data/lib/core/facets/class/singleton_class.rb +0 -16
  269. data/lib/core/facets/class/subclasses.rb +0 -28
  270. data/lib/core/facets/dir/each_child.rb +0 -16
  271. data/lib/core/facets/enumerable/filter.rb +0 -33
  272. data/lib/core/facets/enumerable/sum.rb +0 -30
  273. data/lib/core/facets/exception/set_message.rb +0 -10
  274. data/lib/core/facets/file/write.rb +0 -24
  275. data/lib/core/facets/fixnum.rb +0 -7
  276. data/lib/core/facets/kernel/__dir__.rb +0 -28
  277. data/lib/core/facets/kernel/constant.rb +0 -22
  278. data/lib/core/facets/kernel/instance_exec.rb +0 -47
  279. data/lib/core/facets/kernel/p.rb +0 -24
  280. data/lib/core/facets/kernel/singleton_class.rb +0 -10
  281. data/lib/core/facets/matchdata/match.rb +0 -15
  282. data/lib/core/facets/method/curry.rb +0 -13
  283. data/lib/core/facets/numeric/negative.rb +0 -1
  284. data/lib/core/facets/numeric/positive.rb +0 -15
  285. data/lib/core/facets/object/itself.rb +0 -16
  286. data/lib/core/facets/object/try_dup.rb +0 -1
  287. data/lib/core/facets/process/daemon.rb +0 -32
  288. data/lib/core/facets/range/overlap.rb +0 -12
  289. data/lib/core/facets/string/characters.rb +0 -13
  290. data/lib/core/facets/string/crypt.rb +0 -22
  291. data/lib/core/facets/string/tab.rb +0 -2
  292. data/lib/core/facets/string/tabto.rb +0 -2
  293. data/lib/core/facets/symbol/succ.rb +0 -23
  294. data/lib/core/facets.yml +0 -76
  295. data/lib/standard/facets/basicobject.rb +0 -75
  296. data/lib/standard/facets/digest/base64digest.rb +0 -45
  297. data/lib/standard/facets/ostruct/each.rb +0 -11
  298. data/lib/standard/facets/ostruct/merge.rb +0 -21
  299. data/lib/standard/facets/ostruct/op_fetch.rb +0 -29
  300. data/lib/standard/facets/ostruct/op_store.rb +0 -1
  301. data/lib/standard/facets/ostruct/to_h.rb +0 -10
  302. data/test/core/array/test_after.rb +0 -27
  303. data/test/core/array/test_arrange.rb +0 -37
  304. data/test/core/array/test_before.rb +0 -27
  305. data/test/core/array/test_collapse.rb +0 -14
  306. data/test/core/array/test_combination.rb +0 -25
  307. data/test/core/array/test_commonality.rb +0 -35
  308. data/test/core/array/test_conjoin.rb +0 -50
  309. data/test/core/array/test_contains.rb +0 -14
  310. data/test/core/array/test_delete.rb +0 -42
  311. data/test/core/array/test_divide.rb +0 -14
  312. data/test/core/array/test_duplicates.rb +0 -29
  313. data/test/core/array/test_each_overlap.rb +0 -31
  314. data/test/core/array/test_entropy.rb +0 -23
  315. data/test/core/array/test_extract_options.rb +0 -28
  316. data/test/core/array/test_first.rb +0 -17
  317. data/test/core/array/test_index.rb +0 -20
  318. data/test/core/array/test_intersection.rb +0 -19
  319. data/test/core/array/test_last.rb +0 -17
  320. data/test/core/array/test_median.rb +0 -27
  321. data/test/core/array/test_merge.rb +0 -27
  322. data/test/core/array/test_missing.rb +0 -12
  323. data/test/core/array/test_mode.rb +0 -17
  324. data/test/core/array/test_nonuniq.rb +0 -25
  325. data/test/core/array/test_not_empty.rb +0 -17
  326. data/test/core/array/test_occur.rb +0 -52
  327. data/test/core/array/test_occurrence.rb +0 -20
  328. data/test/core/array/test_only.rb +0 -17
  329. data/test/core/array/test_pad.rb +0 -40
  330. data/test/core/array/test_peek.rb +0 -28
  331. data/test/core/array/test_permutation.rb +0 -20
  332. data/test/core/array/test_poke.rb +0 -21
  333. data/test/core/array/test_probability.rb +0 -18
  334. data/test/core/array/test_product.rb +0 -64
  335. data/test/core/array/test_pull.rb +0 -15
  336. data/test/core/array/test_recurse.rb +0 -40
  337. data/test/core/array/test_recursively.rb +0 -33
  338. data/test/core/array/test_reject_values.rb +0 -17
  339. data/test/core/array/test_rotate.rb +0 -38
  340. data/test/core/array/test_select.rb +0 -16
  341. data/test/core/array/test_splice.rb +0 -21
  342. data/test/core/array/test_split.rb +0 -22
  343. data/test/core/array/test_squeeze.rb +0 -22
  344. data/test/core/array/test_step.rb +0 -28
  345. data/test/core/array/test_store.rb +0 -22
  346. data/test/core/array/test_traverse.rb +0 -26
  347. data/test/core/array/test_uniq_by.rb +0 -17
  348. data/test/core/array/test_unique_permutation.rb +0 -23
  349. data/test/core/binding/test_caller.rb +0 -69
  350. data/test/core/binding/test_defined.rb +0 -18
  351. data/test/core/binding/test_eval.rb +0 -15
  352. data/test/core/binding/test_local_variables.rb +0 -36
  353. data/test/core/binding/test_op.rb +0 -24
  354. data/test/core/binding/test_self.rb +0 -16
  355. data/test/core/class/test_descendents.rb +0 -19
  356. data/test/core/class/test_preallocate.rb +0 -32
  357. data/test/core/class/test_subclasses.rb +0 -20
  358. data/test/core/class/test_to_proc.rb +0 -16
  359. data/test/core/comparable/test_bound.rb +0 -32
  360. data/test/core/comparable/test_cap.rb +0 -36
  361. data/test/core/comparable/test_clip.rb +0 -31
  362. data/test/core/comparable/test_cmp.rb +0 -16
  363. data/test/core/comparable/test_op_get.rb +0 -61
  364. data/test/core/denumerable_tc.rb +0 -194
  365. data/test/core/dir/test_ascend.rb +0 -40
  366. data/test/core/dir/test_descend.rb +0 -24
  367. data/test/core/dir/test_each_child.rb +0 -22
  368. data/test/core/dir/test_multiglob.rb +0 -25
  369. data/test/core/dir/test_parent.rb +0 -14
  370. data/test/core/dir/test_recurse.rb +0 -26
  371. data/test/core/enumerable/test_accumulate.rb +0 -44
  372. data/test/core/enumerable/test_cluster_by.rb +0 -30
  373. data/test/core/enumerable/test_compact_map.rb +0 -32
  374. data/test/core/enumerable/test_count.rb +0 -32
  375. data/test/core/enumerable/test_defer.rb +0 -27
  376. data/test/core/enumerable/test_each_by.rb +0 -49
  377. data/test/core/enumerable/test_each_with_object.rb +0 -18
  378. data/test/core/enumerable/test_every.rb +0 -33
  379. data/test/core/enumerable/test_ewise.rb +0 -30
  380. data/test/core/enumerable/test_exclude.rb +0 -15
  381. data/test/core/enumerable/test_expand.rb +0 -15
  382. data/test/core/enumerable/test_filter.rb +0 -19
  383. data/test/core/enumerable/test_find_yield.rb +0 -96
  384. data/test/core/enumerable/test_frequency.rb +0 -15
  385. data/test/core/enumerable/test_graph.rb +0 -42
  386. data/test/core/enumerable/test_group_by.rb +0 -36
  387. data/test/core/enumerable/test_key_by.rb +0 -22
  388. data/test/core/enumerable/test_map_by.rb +0 -27
  389. data/test/core/enumerable/test_map_send.rb +0 -26
  390. data/test/core/enumerable/test_map_with_index.rb +0 -23
  391. data/test/core/enumerable/test_mash.rb +0 -17
  392. data/test/core/enumerable/test_modulate.rb +0 -17
  393. data/test/core/enumerable/test_none.rb +0 -29
  394. data/test/core/enumerable/test_occur.rb +0 -40
  395. data/test/core/enumerable/test_one.rb +0 -34
  396. data/test/core/enumerable/test_only.rb +0 -40
  397. data/test/core/enumerable/test_per.rb +0 -19
  398. data/test/core/enumerable/test_purge.rb +0 -22
  399. data/test/core/enumerable/test_recursively.rb +0 -33
  400. data/test/core/enumerable/test_squeeze.rb +0 -35
  401. data/test/core/enumerable/test_sum.rb +0 -40
  402. data/test/core/enumerable/test_take.rb +0 -15
  403. data/test/core/enumerable/test_uniq_by.rb +0 -25
  404. data/test/core/enumerable/test_visit.rb +0 -14
  405. data/test/core/enumerator/lazy/test_squeeze.rb +0 -33
  406. data/test/core/enumerator/test_fx.rb +0 -16
  407. data/test/core/enumerator/test_new.rb +0 -21
  408. data/test/core/enumerator_tc.rb +0 -40
  409. data/test/core/exception/test_detail.rb +0 -15
  410. data/test/core/exception/test_raised.rb +0 -15
  411. data/test/core/exception/test_suppress.rb +0 -16
  412. data/test/core/file/test_append.rb +0 -22
  413. data/test/core/file/test_create.rb +0 -17
  414. data/test/core/file/test_ext.rb +0 -31
  415. data/test/core/file/test_null.rb +0 -14
  416. data/test/core/file/test_read_binary.rb +0 -19
  417. data/test/core/file/test_read_list.rb +0 -16
  418. data/test/core/file/test_rewrite.rb +0 -35
  419. data/test/core/file/test_rootname.rb +0 -13
  420. data/test/core/file/test_sanitize.rb +0 -32
  421. data/test/core/file/test_split_all.rb +0 -14
  422. data/test/core/file/test_write.rb +0 -22
  423. data/test/core/file/test_writelines.rb +0 -21
  424. data/test/core/filetest/test_root.rb +0 -14
  425. data/test/core/functor_tc.rb +0 -41
  426. data/test/core/hash/test_alias.rb +0 -25
  427. data/test/core/hash/test_argumentize.rb +0 -23
  428. data/test/core/hash/test_at.rb +0 -16
  429. data/test/core/hash/test_autonew.rb +0 -22
  430. data/test/core/hash/test_collate.rb +0 -61
  431. data/test/core/hash/test_count.rb +0 -23
  432. data/test/core/hash/test_data.rb +0 -35
  433. data/test/core/hash/test_dearray_values.rb +0 -26
  434. data/test/core/hash/test_deep_merge.rb +0 -31
  435. data/test/core/hash/test_deep_rekey.rb +0 -131
  436. data/test/core/hash/test_delete_at.rb +0 -18
  437. data/test/core/hash/test_delete_unless.rb +0 -18
  438. data/test/core/hash/test_delete_values.rb +0 -30
  439. data/test/core/hash/test_diff.rb +0 -16
  440. data/test/core/hash/test_each_with_key.rb +0 -16
  441. data/test/core/hash/test_expect.rb +0 -24
  442. data/test/core/hash/test_fetch_nested.rb +0 -24
  443. data/test/core/hash/test_graph.rb +0 -40
  444. data/test/core/hash/test_insert.rb +0 -20
  445. data/test/core/hash/test_inverse.rb +0 -20
  446. data/test/core/hash/test_join.rb +0 -32
  447. data/test/core/hash/test_keys.rb +0 -41
  448. data/test/core/hash/test_new_with.rb +0 -17
  449. data/test/core/hash/test_op_add.rb +0 -17
  450. data/test/core/hash/test_op_and.rb +0 -31
  451. data/test/core/hash/test_op_mul.rb +0 -17
  452. data/test/core/hash/test_op_or.rb +0 -17
  453. data/test/core/hash/test_op_push.rb +0 -34
  454. data/test/core/hash/test_op_sub.rb +0 -28
  455. data/test/core/hash/test_recurse.rb +0 -39
  456. data/test/core/hash/test_recursively.rb +0 -71
  457. data/test/core/hash/test_rekey.rb +0 -119
  458. data/test/core/hash/test_replace_each.rb +0 -17
  459. data/test/core/hash/test_revalue.rb +0 -98
  460. data/test/core/hash/test_reverse_merge.rb +0 -39
  461. data/test/core/hash/test_select.rb +0 -44
  462. data/test/core/hash/test_slice.rb +0 -36
  463. data/test/core/hash/test_stringify_keys.rb +0 -26
  464. data/test/core/hash/test_swap.rb +0 -15
  465. data/test/core/hash/test_symbolize_keys.rb +0 -26
  466. data/test/core/hash/test_to_mod.rb +0 -24
  467. data/test/core/hash/test_to_proc.rb +0 -23
  468. data/test/core/hash/test_to_struct.rb +0 -22
  469. data/test/core/hash/test_traverse.rb +0 -29
  470. data/test/core/hash/test_update_each.rb +0 -16
  471. data/test/core/hash/test_update_keys.rb +0 -21
  472. data/test/core/hash/test_update_values.rb +0 -15
  473. data/test/core/hash/test_url_params.rb +0 -26
  474. data/test/core/hash/test_weave.rb +0 -18
  475. data/test/core/hash/test_zip.rb +0 -16
  476. data/test/core/indexable_tc.rb +0 -226
  477. data/test/core/integer/test_bitmask.rb +0 -73
  478. data/test/core/integer/test_even.rb +0 -24
  479. data/test/core/integer/test_factorial.rb +0 -30
  480. data/test/core/integer/test_multiple.rb +0 -16
  481. data/test/core/integer/test_odd.rb +0 -24
  482. data/test/core/integer/test_of.rb +0 -36
  483. data/test/core/integer/test_ordinal.rb +0 -27
  484. data/test/core/kernel/test_as.rb +0 -74
  485. data/test/core/kernel/test_ask.rb +0 -9
  486. data/test/core/kernel/test_assign.rb +0 -61
  487. data/test/core/kernel/test_assign_from.rb +0 -48
  488. data/test/core/kernel/test_attr_singleton.rb +0 -51
  489. data/test/core/kernel/test_blank.rb +0 -103
  490. data/test/core/kernel/test_callstack.rb +0 -21
  491. data/test/core/kernel/test_class.rb +0 -14
  492. data/test/core/kernel/test_complete.rb +0 -19
  493. data/test/core/kernel/test_constant.rb +0 -18
  494. data/test/core/kernel/test_d.rb +0 -10
  495. data/test/core/kernel/test_deep_clone.rb +0 -31
  496. data/test/core/kernel/test_deep_copy.rb +0 -15
  497. data/test/core/kernel/test_dir.rb +0 -24
  498. data/test/core/kernel/test_disable_warnings.rb +0 -38
  499. data/test/core/kernel/test_ergo.rb +0 -32
  500. data/test/core/kernel/test_extension.rb +0 -18
  501. data/test/core/kernel/test_get.rb +0 -54
  502. data/test/core/kernel/test_here.rb +0 -13
  503. data/test/core/kernel/test_hierarchical_send.rb +0 -48
  504. data/test/core/kernel/test_in.rb +0 -14
  505. data/test/core/kernel/test_instance_assign.rb +0 -19
  506. data/test/core/kernel/test_instance_class.rb +0 -15
  507. data/test/core/kernel/test_instance_extract.rb +0 -28
  508. data/test/core/kernel/test_instance_send.rb +0 -26
  509. data/test/core/kernel/test_maybe.rb +0 -13
  510. data/test/core/kernel/test_meta_alias.rb +0 -18
  511. data/test/core/kernel/test_meta_class.rb +0 -33
  512. data/test/core/kernel/test_meta_def.rb +0 -15
  513. data/test/core/kernel/test_meta_eval.rb +0 -18
  514. data/test/core/kernel/test_method.rb +0 -20
  515. data/test/core/kernel/test_not.rb +0 -51
  516. data/test/core/kernel/test_not_nil.rb +0 -25
  517. data/test/core/kernel/test_object_class.rb +0 -22
  518. data/test/core/kernel/test_object_hexid.rb +0 -20
  519. data/test/core/kernel/test_object_send.rb +0 -25
  520. data/test/core/kernel/test_presence.rb +0 -37
  521. data/test/core/kernel/test_qua_class.rb +0 -25
  522. data/test/core/kernel/test_require_all.rb +0 -11
  523. data/test/core/kernel/test_require_relative.rb +0 -12
  524. data/test/core/kernel/test_respond.rb +0 -38
  525. data/test/core/kernel/test_returning.rb +0 -17
  526. data/test/core/kernel/test_silence.rb +0 -24
  527. data/test/core/kernel/test_singleton_class.rb +0 -15
  528. data/test/core/kernel/test_super_method.rb +0 -23
  529. data/test/core/kernel/test_tap.rb +0 -38
  530. data/test/core/kernel/test_temporarily.rb +0 -25
  531. data/test/core/kernel/test_true.rb +0 -31
  532. data/test/core/kernel/test_try.rb +0 -35
  533. data/test/core/kernel/test_val.rb +0 -30
  534. data/test/core/kernel/test_with.rb +0 -18
  535. data/test/core/kernel/test_writers.rb +0 -53
  536. data/test/core/matchdata/test_match.rb +0 -14
  537. data/test/core/matchdata/test_matchset.rb +0 -29
  538. data/test/core/method/test_composition.rb +0 -42
  539. data/test/core/module/test_abstract.rb +0 -24
  540. data/test/core/module/test_alias_accessor.rb +0 -27
  541. data/test/core/module/test_alias_method_chain.rb +0 -34
  542. data/test/core/module/test_alias_module_function.rb +0 -24
  543. data/test/core/module/test_all_instance_methods.rb +0 -27
  544. data/test/core/module/test_ancestor.rb +0 -16
  545. data/test/core/module/test_anonymous.rb +0 -18
  546. data/test/core/module/test_attr_setter.rb +0 -28
  547. data/test/core/module/test_basename.rb +0 -14
  548. data/test/core/module/test_can.rb +0 -22
  549. data/test/core/module/test_class.rb +0 -22
  550. data/test/core/module/test_class_def.rb +0 -22
  551. data/test/core/module/test_class_extend.rb +0 -73
  552. data/test/core/module/test_class_inheritor.rb +0 -135
  553. data/test/core/module/test_copy_inheritor.rb +0 -35
  554. data/test/core/module/test_enclosure.rb +0 -24
  555. data/test/core/module/test_instance_function.rb +0 -30
  556. data/test/core/module/test_instance_method.rb +0 -20
  557. data/test/core/module/test_instance_method_defined.rb +0 -38
  558. data/test/core/module/test_integrate.rb +0 -28
  559. data/test/core/module/test_is.rb +0 -50
  560. data/test/core/module/test_memoize.rb +0 -33
  561. data/test/core/module/test_method_clash.rb +0 -59
  562. data/test/core/module/test_method_space.rb +0 -72
  563. data/test/core/module/test_methodize.rb +0 -26
  564. data/test/core/module/test_modname.rb +0 -13
  565. data/test/core/module/test_module_def.rb +0 -22
  566. data/test/core/module/test_module_load.rb +0 -23
  567. data/test/core/module/test_nodef.rb +0 -19
  568. data/test/core/module/test_op.rb +0 -56
  569. data/test/core/module/test_pathize.rb +0 -25
  570. data/test/core/module/test_preextend.rb +0 -26
  571. data/test/core/module/test_redefine_method.rb +0 -30
  572. data/test/core/module/test_redirect_method.rb +0 -32
  573. data/test/core/module/test_remove.rb +0 -18
  574. data/test/core/module/test_rename_method.rb +0 -34
  575. data/test/core/module/test_revise.rb +0 -61
  576. data/test/core/module/test_set.rb +0 -30
  577. data/test/core/module/test_spacename.rb +0 -15
  578. data/test/core/module/test_to_obj.rb +0 -20
  579. data/test/core/module/test_wrap_method.rb +0 -32
  580. data/test/core/nilclass/test_to_f.rb +0 -13
  581. data/test/core/numeric/test_approx.rb +0 -26
  582. data/test/core/numeric/test_distance.rb +0 -16
  583. data/test/core/numeric/test_length.rb +0 -16
  584. data/test/core/numeric/test_round.rb +0 -76
  585. data/test/core/numeric/test_spacing.rb +0 -17
  586. data/test/core/object/test_dup.rb +0 -115
  587. data/test/core/object/test_object_state.rb +0 -75
  588. data/test/core/object/test_replace.rb +0 -69
  589. data/test/core/object/test_try_dup.rb +0 -59
  590. data/test/core/proc/test_bind.rb +0 -29
  591. data/test/core/proc/test_bind_to.rb +0 -17
  592. data/test/core/proc/test_compose.rb +0 -27
  593. data/test/core/proc/test_curry.rb +0 -38
  594. data/test/core/proc/test_partial.rb +0 -27
  595. data/test/core/proc/test_to_method.rb +0 -43
  596. data/test/core/proc/test_update.rb +0 -15
  597. data/test/core/range/test_combine.rb +0 -32
  598. data/test/core/range/test_op_add.rb +0 -24
  599. data/test/core/range/test_op_sub.rb +0 -34
  600. data/test/core/range/test_overlap.rb +0 -15
  601. data/test/core/range/test_to_r.rb +0 -20
  602. data/test/core/range/test_umbrella.rb +0 -32
  603. data/test/core/range/test_within.rb +0 -25
  604. data/test/core/regexp/test_arity.rb +0 -30
  605. data/test/core/regexp/test_multiline.rb +0 -19
  606. data/test/core/regexp/test_op_add.rb +0 -15
  607. data/test/core/regexp/test_op_or.rb +0 -16
  608. data/test/core/regexp/test_to_re.rb +0 -24
  609. data/test/core/string/test_align.rb +0 -32
  610. data/test/core/string/test_ascii_only.rb +0 -30
  611. data/test/core/string/test_bracket.rb +0 -37
  612. data/test/core/string/test_bytes.rb +0 -13
  613. data/test/core/string/test_camelcase.rb +0 -59
  614. data/test/core/string/test_capitalized.rb +0 -36
  615. data/test/core/string/test_characters.rb +0 -13
  616. data/test/core/string/test_cleanlines.rb +0 -12
  617. data/test/core/string/test_cleave.rb +0 -27
  618. data/test/core/string/test_cmp.rb +0 -18
  619. data/test/core/string/test_compress_lines.rb +0 -18
  620. data/test/core/string/test_divide.rb +0 -17
  621. data/test/core/string/test_each_char.rb +0 -17
  622. data/test/core/string/test_each_word.rb +0 -17
  623. data/test/core/string/test_edit_distance.rb +0 -20
  624. data/test/core/string/test_end_with.rb +0 -24
  625. data/test/core/string/test_exclude.rb +0 -23
  626. data/test/core/string/test_expand_tabs.rb +0 -83
  627. data/test/core/string/test_file.rb +0 -15
  628. data/test/core/string/test_fold.rb +0 -21
  629. data/test/core/string/test_indent.rb +0 -90
  630. data/test/core/string/test_index_all.rb +0 -18
  631. data/test/core/string/test_interpolate.rb +0 -16
  632. data/test/core/string/test_lchomp.rb +0 -25
  633. data/test/core/string/test_line_wrap.rb +0 -15
  634. data/test/core/string/test_lines.rb +0 -15
  635. data/test/core/string/test_lowercase.rb +0 -18
  636. data/test/core/string/test_margin.rb +0 -16
  637. data/test/core/string/test_methodize.rb +0 -28
  638. data/test/core/string/test_modulize.rb +0 -28
  639. data/test/core/string/test_mscan.rb +0 -18
  640. data/test/core/string/test_natcmp.rb +0 -17
  641. data/test/core/string/test_nchar.rb +0 -17
  642. data/test/core/string/test_newlines.rb +0 -14
  643. data/test/core/string/test_number.rb +0 -44
  644. data/test/core/string/test_op_div.rb +0 -15
  645. data/test/core/string/test_op_sub.rb +0 -15
  646. data/test/core/string/test_pathize.rb +0 -31
  647. data/test/core/string/test_quote.rb +0 -41
  648. data/test/core/string/test_range.rb +0 -35
  649. data/test/core/string/test_remove.rb +0 -36
  650. data/test/core/string/test_rewrite.rb +0 -17
  651. data/test/core/string/test_rotate.rb +0 -31
  652. data/test/core/string/test_shatter.rb +0 -17
  653. data/test/core/string/test_similarity.rb +0 -14
  654. data/test/core/string/test_snakecase.rb +0 -22
  655. data/test/core/string/test_splice.rb +0 -37
  656. data/test/core/string/test_squish.rb +0 -31
  657. data/test/core/string/test_start_with.rb +0 -24
  658. data/test/core/string/test_store.rb +0 -16
  659. data/test/core/string/test_subtract.rb +0 -16
  660. data/test/core/string/test_tab.rb +0 -16
  661. data/test/core/string/test_titlecase.rb +0 -16
  662. data/test/core/string/test_to_re.rb +0 -35
  663. data/test/core/string/test_trim.rb +0 -116
  664. data/test/core/string/test_unbracket.rb +0 -38
  665. data/test/core/string/test_underscore.rb +0 -21
  666. data/test/core/string/test_unfold.rb +0 -17
  667. data/test/core/string/test_unindent.rb +0 -105
  668. data/test/core/string/test_unquote.rb +0 -13
  669. data/test/core/string/test_uppercase.rb +0 -22
  670. data/test/core/string/test_variablize.rb +0 -15
  671. data/test/core/string/test_word_wrap.rb +0 -80
  672. data/test/core/string/test_words.rb +0 -24
  673. data/test/core/string/test_xor.rb +0 -16
  674. data/test/core/symbol/test_as_s.rb +0 -15
  675. data/test/core/symbol/test_bang.rb +0 -15
  676. data/test/core/symbol/test_chomp.rb +0 -22
  677. data/test/core/symbol/test_generate.rb +0 -20
  678. data/test/core/symbol/test_not.rb +0 -19
  679. data/test/core/symbol/test_op_div.rb +0 -15
  680. data/test/core/symbol/test_plain.rb +0 -19
  681. data/test/core/symbol/test_query.rb +0 -19
  682. data/test/core/symbol/test_setter.rb +0 -17
  683. data/test/core/symbol/test_succ.rb +0 -16
  684. data/test/core/symbol/test_thrown.rb +0 -22
  685. data/test/core/symbol/test_to_proc.rb +0 -35
  686. data/test/core/symbol/test_variablize.rb +0 -14
  687. data/test/core/time/test_ago.rb +0 -18
  688. data/test/core/time/test_change.rb +0 -17
  689. data/test/core/time/test_dst_adjustment.rb +0 -19
  690. data/test/core/time/test_elapse.rb +0 -15
  691. data/test/core/time/test_future.rb +0 -32
  692. data/test/core/time/test_hence.rb +0 -18
  693. data/test/core/time/test_in.rb +0 -18
  694. data/test/core/time/test_less.rb +0 -139
  695. data/test/core/time/test_past.rb +0 -32
  696. data/test/core/time/test_round_to.rb +0 -34
  697. data/test/core/time/test_set.rb +0 -43
  698. data/test/core/time/test_shift.rb +0 -135
  699. data/test/core/time/test_stamp.rb +0 -42
  700. data/test/core/time/test_to_time.rb +0 -15
  701. data/test/core/time/test_trunc.rb +0 -34
  702. data/test/core/to_hash_tc.rb +0 -210
  703. data/test/core/unboundmethod/test_arguments.rb +0 -25
  704. data/test/core/unboundmethod/test_name.rb +0 -19
  705. data/test/standard/binding/test_block_exec.rb +0 -21
  706. data/test/standard/math/test_abs.rb +0 -13
  707. data/test/standard/math/test_acot.rb +0 -23
  708. data/test/standard/math/test_acoth.rb +0 -22
  709. data/test/standard/math/test_beta.rb +0 -19
  710. data/test/standard/math/test_ceil.rb +0 -22
  711. data/test/standard/math/test_cosec.rb +0 -19
  712. data/test/standard/math/test_cosech.rb +0 -19
  713. data/test/standard/math/test_cot.rb +0 -13
  714. data/test/standard/math/test_coth.rb +0 -13
  715. data/test/standard/math/test_distance.rb +0 -16
  716. data/test/standard/math/test_exp10.rb +0 -14
  717. data/test/standard/math/test_exp2.rb +0 -14
  718. data/test/standard/math/test_factorial.rb +0 -13
  719. data/test/standard/math/test_floor.rb +0 -23
  720. data/test/standard/math/test_gcd.rb +0 -18
  721. data/test/standard/math/test_lcm.rb +0 -13
  722. data/test/standard/math/test_median.rb +0 -17
  723. data/test/standard/math/test_percentile.rb +0 -13
  724. data/test/standard/math/test_pow.rb +0 -30
  725. data/test/standard/math/test_root.rb +0 -15
  726. data/test/standard/math/test_sec.rb +0 -19
  727. data/test/standard/math/test_sech.rb +0 -19
  728. data/test/standard/math/test_sign.rb +0 -20
  729. data/test/standard/math/test_sinc.rb +0 -15
  730. data/test/standard/math/test_srq.rb +0 -20
  731. data/test/standard/pathname/test_chdir.rb +0 -16
  732. data/test/standard/pathname/test_readline.rb +0 -23
  733. data/test/standard/test_argvector.rb +0 -64
  734. data/test/standard/test_cloneable.rb +0 -60
  735. data/test/standard/test_date.rb +0 -82
  736. data/test/standard/test_enumargs.rb +0 -89
  737. data/test/standard/test_equitable.rb +0 -46
  738. data/test/standard/test_instantiable.rb +0 -40
  739. data/test/standard/test_math.rb +0 -3
  740. data/test/standard/test_memoizable.rb +0 -42
  741. data/test/standard/test_multipliers.rb +0 -141
  742. data/test/standard/test_ostruct.rb +0 -191
  743. data/test/standard/test_random.rb +0 -241
  744. data/test/standard/test_shellwords.rb +0 -74
  745. data/test/standard/test_thread.rb +0 -24
  746. data/test/standard/test_timer.rb +0 -62
  747. data/test/standard/test_tuple.rb +0 -68
  748. data/test/standard/test_uri.rb +0 -50
@@ -0,0 +1,58 @@
1
+
2
+ module Enumerable
3
+ class Position
4
+ def initialize
5
+ @first = true
6
+ @last = false
7
+ end
8
+
9
+ def after_first!
10
+ @first = false
11
+ end
12
+
13
+ def at_end!
14
+ @last = true
15
+ end
16
+
17
+ def first?
18
+ @first
19
+ end
20
+
21
+ def middle?
22
+ not (@first or @last)
23
+ end
24
+
25
+ def last?
26
+ @last
27
+ end
28
+ end
29
+
30
+ # Allows one to know the position of the enumeration easily.
31
+ #
32
+ # 5.times.collect.with_position do |i, position|
33
+ # $stdout.write "#{i}#{position.middle? ? ',' : ''}"
34
+ # end
35
+ #
36
+ # Where this becomes more useful, is when it's easy to determine the position of elements, e.g.
37
+ #
38
+ # 10.times.select(&:odd?).with_position{|n,p| ... }
39
+ #
40
+ def with_position
41
+ return to_enum(:with_position) unless block_given?
42
+
43
+ position = Position.new
44
+
45
+ while item = self.next
46
+ begin
47
+ self.peek
48
+ rescue StopIteration
49
+ position.at_end!
50
+ end
51
+
52
+ yield item, position.dup
53
+
54
+ position.after_first!
55
+ end
56
+ rescue StopIteration
57
+ end
58
+ end
@@ -1,75 +1,2 @@
1
- if RUBY_VERSION < '1.9'
2
-
3
- require 'enumerator'
4
-
5
- # for Ruby 1.8 -> 1.9 transition
6
- Enumerator = Enumerable::Enumerator unless defined?(::Enumerator)
7
-
8
- class Enumerator
9
-
10
- private
11
-
12
- alias :old_initialize :initialize
13
-
14
- # Provides the ruby-1.9 block form of Enumerator, where you can write:
15
- #
16
- # obj = Enumerator.new do |yielder|
17
- # # ...
18
- # yielder.yield(data) # or: yielder << data
19
- # # ...
20
- # end
21
- #
22
- # When obj.each is called, the block is run once. It should call
23
- # yielder.yield with each item it wishes to generate.
24
- #
25
- # Example:
26
- #
27
- # fib = Enumerator.new { |y|
28
- # a = b = 1
29
- # loop {
30
- # y << a
31
- # a, b = b, a + b
32
- # }
33
- # }
34
- #
35
- # fib.take(10) #=> [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
36
- #
37
- def initialize(*args, &block)
38
- if block
39
- @body = block
40
- old_initialize(self, :_start)
41
- else
42
- old_initialize(*args)
43
- end
44
- end
45
-
46
- def _start(*args,&receiver) #:nodoc:
47
- @body.call(Yielder.new(&receiver), *args)
48
- end
49
-
50
- # Wrapper to allow yielder.yield(output) or yielder << output
51
- # in the same way as ruby-1.9
52
- #
53
- # TODO: Why can't Yielder take a block instead of a proc argument?
54
-
55
- class Yielder #:nodoc:
56
- def initialize(&proc)
57
- @proc = proc
58
- end
59
- def yield(*args)
60
- @proc[*args]
61
- end
62
- alias :<< :yield
63
- end
64
-
65
- end
66
-
67
- end
68
-
69
- path = __FILE__.chomp('.rb')
70
- base = File.basename(path)
71
- Dir[File.join(path, '*.rb')].each do |lib|
72
- #require lib # why is this so much slower?
73
- require "facets/#{base}/#{File.basename(lib)}"
74
- end
75
-
1
+ require_relative 'enumerator/fx'
2
+ require_relative 'enumerator/lazy/squeeze'
@@ -1,80 +1,15 @@
1
1
  class Exception
2
2
 
3
- # Formats the Exception so that it looks *familiar*,
4
- # i.e. exactly like your interpreter does it.
5
- #
6
- # Port of MRI native `error_print` function.
7
- #
8
- # @author Evgeniy Dolzhenko
9
-
3
+ # @deprecated Use Exception#full_message instead (built-in since Ruby 2.5).
10
4
  def self.error_print(e)
11
- warn_print = ""
12
- backtrace = e.backtrace
13
- backtrace = [ backtrace ] if backtrace.is_a?(String) # 1.9 returns single String for SystemStackError
14
-
15
- warn_print << backtrace[0]
16
- if e.is_a?(RuntimeError) && e.message.empty?
17
- warn_print << ": unhandled exception\n"
18
- else
19
- if e.message.empty?
20
- warn_print << ": #{ e.class.name }\n"
21
- else
22
- split_message = e.message.split("\n")
23
- warn_print << ": "
24
- if split_message.size == 1
25
- warn_print << "#{ e.message } (#{ e.class.name })\n"
26
- else
27
- warn_print << split_message[0]
28
- warn_print << " (#{ e.class.name })\n"
29
- warn_print << split_message[1..-1].join("\n").chomp << "\n"
30
- end
31
- end
32
- end
33
-
34
- len = backtrace.size
35
-
36
- ## int skip = eclass == rb_eSysStackError;
37
- skip = e.is_a?(SystemStackError)
38
-
39
- ## #define TRACE_MAX (TRACE_HEAD+TRACE_TAIL+5)
40
- ## #define TRACE_HEAD 8
41
- ## #define TRACE_TAIL 5
42
- trace_head = 8
43
- trace_tail = 5
44
- trace_max = (trace_head + trace_tail + 5)
45
- ##
46
- ## for (i = 1; i < len; i++) {
47
- i = 1
48
- while i < len
49
- ## if (TYPE(ptr[i]) == T_STRING) {
50
- ## warn_printf("\tfrom %s\n", RSTRING_PTR(ptr[i]));
51
- ## }
52
- warn_print << "\tfrom %s\n" % e.backtrace[i]
53
-
54
- ## if (skip && i == TRACE_HEAD && len > TRACE_MAX) {
55
- if skip && i == trace_head && len > trace_max
56
- ## warn_printf("\t ... %ld levels...\n",
57
- ## len - TRACE_HEAD - TRACE_TAIL);
58
- warn_print << "\t ... %d levels...\n" % (len - trace_head - trace_tail)
59
- ## i = len - TRACE_TAIL;
60
- i = len - trace_tail
61
- ## }
62
- end
63
- ## }
64
- i += 1
65
- end
66
- warn_print
5
+ warn "Exception.error_print is deprecated. Use Exception#full_message instead.", uplevel: 1
6
+ e.full_message
67
7
  end
68
8
 
69
- # Formats the Exception so that it looks *familiar*,
70
- # i.e. exactly like your interpreter does it.
71
- #
72
- # @author Evgeniy Dolzhenko
73
- #
74
- # @todo Anyone have a better name for this method?
9
+ # @deprecated Use Exception#full_message instead (built-in since Ruby 2.5).
75
10
  def error_print
76
- Exception.error_print(self)
11
+ warn "Exception#error_print is deprecated. Use Exception#full_message instead.", uplevel: 1
12
+ full_message
77
13
  end
78
14
 
79
15
  end
80
-
@@ -12,7 +12,7 @@ class File
12
12
  #
13
13
  def self.atomic_open(file_name, mode="r", temp_dir=nil, &block)
14
14
  temp_dir = temp_dir || Dir.tmpdir
15
- temp_file = Tempfile.new("#{aomtic_id}-" + basename(file_name), temp_dir)
15
+ temp_file = Tempfile.new("#{atomic_id}-" + basename(file_name), temp_dir)
16
16
 
17
17
  if File.exist?(file_name)
18
18
  FileUtils.cp(file_name, temp_file)
@@ -1,21 +1,9 @@
1
1
  class File
2
2
 
3
- # Platform dependent null device.
4
- #
5
- # CREDIT: Daniel Burger
6
-
3
+ # @deprecated Use File::NULL constant instead (built-in since Ruby 1.9.3).
7
4
  def self.null
8
- case RUBY_PLATFORM
9
- when /mswin/i
10
- 'NUL'
11
- when /amiga/i
12
- 'NIL:'
13
- when /openvms/i
14
- 'NL:'
15
- else
16
- '/dev/null'
17
- end
5
+ warn "File.null is deprecated. Use File::NULL instead.", uplevel: 1
6
+ File::NULL
18
7
  end
19
8
 
20
9
  end
21
-
@@ -1,18 +1,9 @@
1
1
  class File
2
2
 
3
- # Read in a file as binary data.
4
- #
5
- # Assuming we had a binary file 'binary.dat'.
6
- #
7
- # File.read_binary('binary.dat')
8
- #
9
- # CREDIT: George Moschovitis
10
-
3
+ # @deprecated Use File.binread instead (built-in since Ruby 1.9.3).
11
4
  def self.read_binary(fname)
12
- open(fname, 'rb') do |f|
13
- return f.read
14
- end
5
+ warn "File.read_binary is deprecated. Use File.binread instead.", uplevel: 1
6
+ binread(fname)
15
7
  end
16
8
 
17
9
  end
18
-
@@ -1,10 +1,15 @@
1
1
  class Hash
2
2
 
3
- # Returns a new hash less the given keys.
4
- def except(*less_keys)
5
- hash = dup
6
- less_keys.each{ |k| hash.delete(k) }
7
- hash
3
+ # Replaces hash with new hash less the given keys.
4
+ #
5
+ # h = {:a=>1, :b=>2, :c=>3}
6
+ # h.except!(:a) #=> {:b=>2,:c=>3}
7
+ # h #=> {:b=>2,:c=>3}
8
+ #
9
+ # Returns the hash.
10
+ def except!(*rejected)
11
+ rejected.each{ |k| delete(k) }
12
+ self
8
13
  end
9
14
 
10
15
  # Replaces hash with new hash less the given keys.
@@ -15,7 +20,7 @@ class Hash
15
20
  # h #=> {:b=>2,:c=>3}
16
21
  #
17
22
  # Returns a Hash of the removed pairs.
18
- def except!(*rejected)
23
+ def remove!(*rejected)
19
24
  removed = {}
20
25
  rejected.each{ |k| removed[k] = delete(k) }
21
26
  removed
@@ -1,18 +1,17 @@
1
1
  class Hash
2
2
 
3
- # Similar to Hash#fetch but supports nested lookup and is `nil` safe.
3
+ # @deprecated Use Hash#dig instead (built-in since Ruby 2.3).
4
4
  #
5
- # {}.fetch_nested('anything','at','all') #=> nil
5
+ # Similar to Hash#dig but supports a block for missing keys,
6
+ # like Hash#fetch does. Ruby's #dig does not support a block.
6
7
  #
7
- # h = {'hello'=>{'world'=>42}}
8
- # h.fetch_nested(*['hello','world']) #=> 42
8
+ # TODO: Consider proposing block support for Hash#dig to Ruby core.
9
9
  #
10
- # CREDIT: T. Yamada and Sean Mackesey
11
-
12
- def fetch_nested(*keys)
10
+ def fetch_nested(*keys, &block)
11
+ warn "Hash#fetch_nested is deprecated. Use Hash#dig instead.", uplevel: 1
13
12
  begin
14
- keys.reduce(self){|accum, k| accum.fetch(k)}
15
- rescue (RUBY_VERSION<'1.9' ? IndexError : KeyError)
13
+ keys.reduce(self) { |accum, k| accum.fetch(k) }
14
+ rescue KeyError
16
15
  block_given? ? yield(*keys) : nil
17
16
  end
18
17
  end
@@ -1,4 +1,4 @@
1
- require 'facets/enumerable/mash'
1
+ require 'facets/enumerable/graph'
2
2
 
3
3
  class Hash
4
4
 
@@ -40,13 +40,13 @@ class Hash
40
40
 
41
41
  if block
42
42
  hash = dup.clear
43
- if block.arity.abs == 1
43
+ if block.arity == 2
44
44
  each_pair do |k, v|
45
- hash[block[k]] = v #hash[block[k] || k] = v
45
+ hash[block[k,v]] = v
46
46
  end
47
47
  else
48
48
  each_pair do |k, v|
49
- hash[block[k,v]] = v #hash[block[k,v] || k] = v
49
+ hash[block[k]] = v
50
50
  end
51
51
  end
52
52
  else
@@ -21,13 +21,13 @@ class Hash
21
21
 
22
22
  if block
23
23
  hash = dup.clear # to keep default_proc
24
- if block.arity.abs == 1
24
+ if block.arity == 2
25
25
  each_pair do |k, v|
26
- hash[k] = block[v] #hash[k] = block[v] || v
26
+ hash[k] = block[k,v]
27
27
  end
28
28
  else
29
29
  each_pair do |k, v|
30
- hash[k] = block[k,v] #hash[k] = block[k,v] || v
30
+ hash[k] = block[v]
31
31
  end
32
32
  end
33
33
  else
@@ -1,7 +1,7 @@
1
1
  class Hash
2
2
 
3
- # Constructs a Proc object from a hash such that the parameter
4
- # of the Proc is assigned the hash keys as attributes.
3
+ # Constructs a Proc that assigns the hash's key-value pairs as
4
+ # attributes on a given object.
5
5
  #
6
6
  # c = Class.new do
7
7
  # attr_accessor :a
@@ -9,20 +9,20 @@ class Hash
9
9
  #
10
10
  # h = {:a => 1}
11
11
  # o = c.new
12
- # h.to_proc.call(o)
12
+ # h.setter.call(o)
13
13
  # o.a #=> 1
14
14
  #
15
- # If +response+ is set to +true+, then assignment will only occur
16
- # if receiver responds_to? the writer method.
15
+ # If +safe+ is set to +true+, then assignment will only occur
16
+ # if the receiver responds_to? the writer method.
17
17
  #
18
18
  # CREDIT: Trans
19
19
 
20
- def to_proc(response=false)
21
- if response
20
+ def setter(safe=false)
21
+ if safe
22
22
  lambda do |o|
23
23
  self.each do |k,v|
24
24
  ke = "#{k}="
25
- o.__send__(ke, v) if respond_to?(ke)
25
+ o.__send__(ke, v) if o.respond_to?(ke)
26
26
  end
27
27
  end
28
28
  else
@@ -36,4 +36,3 @@ class Hash
36
36
  end
37
37
 
38
38
  end
39
-
@@ -1,25 +1,5 @@
1
1
  class Hash
2
2
 
3
- # Returns a new hash with only the given keys.
4
- #
5
- # h = {:a=>1, :b=>2, :c=>3}
6
- # h.slice(:a, :c) #=> {:a=>1, :c=>3}
7
- # h.slice(:a, :d) #=> {:a=>1}
8
- #
9
- def slice(*keep_keys)
10
- if block_given?
11
- each do |k, v|
12
- keep_keys << k if yield(k, v)
13
- end
14
- end
15
-
16
- hash = {}
17
- keep_keys.each do |key|
18
- hash[key] = fetch(key) if key?(key)
19
- end
20
- hash
21
- end
22
-
23
3
  # Replaces hash with a new hash having only the given keys.
24
4
  # This return the hash of keys removed.
25
5
  #
@@ -29,12 +9,6 @@ class Hash
29
9
  #
30
10
  # Returns a Hash of the removed pairs.
31
11
  def slice!(*keep_keys)
32
- if block_given?
33
- each do |k, v|
34
- keep_keys << k if yield(k, v)
35
- end
36
- end
37
-
38
12
  rejected = keys - keep_keys
39
13
  removed = {}
40
14
  rejected.each{ |k| removed[k] = delete(k) }
@@ -1,21 +1,14 @@
1
1
  class Hash
2
2
 
3
- # Iterate over hash updating just the keys.
3
+ # @deprecated Use Hash#transform_keys! (Ruby 2.5+) or Hash#rekey! instead.
4
4
  #
5
- # h = {:a=>1, :b=>2}
6
- # h.update_keys{ |k| "#{k}!" }
7
- # h #=> { "a!"=>1, "b!"=>2 }
8
- #
9
- # @author Trans
10
- # @author Evgeniy Dolzhenko (bug fix)
11
-
12
- def update_keys #:yield:
5
+ def update_keys(&block)
6
+ warn "Hash#update_keys is deprecated. Use Hash#transform_keys! or Hash#rekey! instead.", uplevel: 1
13
7
  if block_given?
14
- keys.each { |old_key| store(yield(old_key), delete(old_key)) }
8
+ transform_keys!(&block)
15
9
  else
16
10
  to_enum(:update_keys)
17
11
  end
18
12
  end
19
13
 
20
14
  end
21
-
@@ -1,20 +1,14 @@
1
1
  class Hash
2
2
 
3
- # Iterate over hash updating just the values.
3
+ # @deprecated Use Hash#transform_values! (Ruby 2.4+) or Hash#revalue! instead.
4
4
  #
5
- # h = {:a=>1, :b=>2}
6
- # h.update_values{ |v| v + 1 }
7
- # h #=> { :a=>2, :b=>3 }
8
- #
9
- # CREDIT: Trans
10
-
11
- def update_values #:yield:
5
+ def update_values(&block)
6
+ warn "Hash#update_values is deprecated. Use Hash#transform_values! or Hash#revalue! instead.", uplevel: 1
12
7
  if block_given?
13
- each{ |k,v| store(k, yield(v)) }
8
+ transform_values!(&block)
14
9
  else
15
10
  to_enum(:update_values)
16
11
  end
17
12
  end
18
13
 
19
14
  end
20
-
@@ -128,7 +128,7 @@ module Indexable
128
128
  # %w{W o r l d}.from(3) #=> %w{l d}
129
129
  #
130
130
  def from(i)
131
- return self if i >= size
131
+ return [] if i >= size
132
132
  slice(i, size - i) #slice(-n..-1)
133
133
  end
134
134
 
@@ -199,19 +199,21 @@ module Indexable
199
199
  splice(-1)
200
200
  end
201
201
 
202
- # A shorting of "ends at", returns the
203
- # last index of the indexable object.
204
- # Returns nil if there are no elements.
202
+ # A shortening of "ends at". Returns the
203
+ # last index of the indexable object,
204
+ # or nil if there are no elements.
205
205
  #
206
206
  # [1,2,3,4,5].ends #=> 4
207
207
  #
208
- # This nearly equivalent to +size - 1+.
208
+ # This is nearly equivalent to +size - 1+.
209
209
  #
210
210
  def ends
211
211
  return nil if size == 0
212
212
  size - 1
213
213
  end
214
214
 
215
+ alias_method :last_index, :ends
216
+
215
217
  # Returns the positive ordinal index given
216
218
  # a cardinal position, 1 to n or -n to -1.
217
219
  #
@@ -3,12 +3,7 @@ module Kernel
3
3
  alias_method :pp_callstack, :caller
4
4
  alias_method :pp_call_stack, :caller
5
5
 
6
- # Parse a caller string and break it into its components,
7
- # returning an array composed of:
8
- #
9
- # * file (String)
10
- # * lineno (Integer)
11
- # * method (Symbol)
6
+ # Returns the call stack as an array of [file, lineno, method] entries.
12
7
  #
13
8
  # For example, from irb
14
9
  #
@@ -16,27 +11,14 @@ module Kernel
16
11
  #
17
12
  # _produces_ ...
18
13
  #
19
- # [["(irb)", 2, :irb_binding],
20
- # ["/usr/lib/ruby/1.8/irb/workspace.rb", 52, :irb_binding],
21
- # ["/usr/lib/ruby/1.8/irb/workspace.rb", 52, nil]]
22
- #
23
- # Note: If the user decides to redefine caller() to output data
24
- # in a different format, _prior_ to requiring this, then the
25
- # results will be indeterminate.
14
+ # [["(irb)", 2, :irb_binding], ...]
26
15
  #
27
16
  # CREDIT: Trans
28
17
 
29
18
  def callstack(level = 1)
30
- call_str_array = pp_callstack(level)
31
- stack = []
32
- call_str_array.each{ |call_str|
33
- file, lineno, method = call_str.split(':')
34
- if method =~ /in `(.*)'/ then
35
- method = $1.intern()
36
- end
37
- stack << [file, lineno.to_i, method]
38
- }
39
- stack
19
+ caller_locations(level).map do |loc|
20
+ [loc.path, loc.lineno, loc.label&.to_sym]
21
+ end
40
22
  end
41
23
 
42
24
  alias_method :call_stack, :callstack
@@ -53,4 +35,3 @@ class Binding
53
35
 
54
36
  alias_method :call_stack, :callstack
55
37
  end
56
-
@@ -3,13 +3,13 @@ module Kernel
3
3
  # During this trying time when no one can get their
4
4
  # techie catchwords to stick to the refrigerator no
5
5
  # matter how hard they slap it with the enchanted
6
- # magnetic spatula, its good to know that the
6
+ # magnetic spatula, it's good to know that the
7
7
  # contrived phrases really do fly, graceful and
8
8
  # unclasped and bearing north toward chilled shrimp.
9
- # I know what my Halloween pumpkin is going to say.
9
+ # I know what my Hallowe'en pumpkin is going to say.
10
10
  #
11
- # NOTE: This method is not a common core extension and is not
12
- # loaded automatically when using `require 'facets'`.
11
+ # @deprecated Use singleton_class or meta_class instead.
12
+ # Kept in tribute to WhyTheLuckyStiff who coined the term.
13
13
  #
14
14
  # CREDIT: WhyTheLuckyStiff
15
15
  #
@@ -17,8 +17,8 @@ module Kernel
17
17
  # require 'facets/kernel/eigenclass'
18
18
  #
19
19
  def eigenclass
20
- (class << self; self; end)
20
+ warn "Kernel#eigenclass is deprecated. Use singleton_class or meta_class instead.", uplevel: 1
21
+ singleton_class
21
22
  end
22
23
 
23
24
  end
24
-
@@ -26,7 +26,8 @@ module Kernel
26
26
  end
27
27
 
28
28
  class NilClass
29
-
29
+ FUNCTOR = Functor.new{ nil }
30
+
30
31
  # Compliments Kernel#ergo.
31
32
  #
32
33
  # "a".ergo{ |o| o.upcase } #=> "A"
@@ -35,8 +36,7 @@ class NilClass
35
36
  # CREDIT: Daniel DeLorme
36
37
 
37
38
  def ergo
38
- @_ergo ||= Functor.new{ nil }
39
- @_ergo unless block_given?
39
+ FUNCTOR unless block_given?
40
40
  end
41
41
 
42
42
  end
@@ -1,12 +1,9 @@
1
1
  module Kernel
2
2
 
3
- # TODO: Must reduce the number of singleton method methods.
4
-
5
- # Don't say it!
6
- #
3
+ # @deprecated Use singleton_class or meta_class instead.
7
4
  def extension
8
- class << self; self; end
5
+ warn "Kernel#extension is deprecated. Use singleton_class or meta_class instead.", uplevel: 1
6
+ singleton_class
9
7
  end
10
8
 
11
9
  end
12
-