backports 3.0.3 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (487) hide show
  1. data/.gitignore +1 -1
  2. data/.gitmodules +3 -0
  3. data/.travis.yml +11 -2
  4. data/CHANGELOG.rdoc +6 -0
  5. data/Gemfile +20 -0
  6. data/Gemfile.lock +24 -0
  7. data/README.rdoc +39 -11
  8. data/Rakefile +98 -1
  9. data/default.mspec +9 -0
  10. data/lib/backports.rb +4 -4
  11. data/lib/backports/1.8.7.rb +2 -3
  12. data/lib/backports/1.8.7/argf.rb +2 -43
  13. data/lib/backports/1.8.7/argf/bytes.rb +1 -0
  14. data/lib/backports/1.8.7/argf/chars.rb +1 -0
  15. data/lib/backports/1.8.7/argf/each.rb +3 -0
  16. data/lib/backports/1.8.7/argf/each_byte.rb +9 -0
  17. data/lib/backports/1.8.7/argf/each_char.rb +35 -0
  18. data/lib/backports/1.8.7/argf/each_line.rb +3 -0
  19. data/lib/backports/1.8.7/argf/getbyte.rb +5 -0
  20. data/lib/backports/1.8.7/argf/lines.rb +5 -0
  21. data/lib/backports/1.8.7/argf/readbyte.rb +5 -0
  22. data/lib/backports/1.8.7/array.rb +2 -207
  23. data/lib/backports/1.8.7/array/collect.rb +3 -0
  24. data/lib/backports/1.8.7/array/combination.rb +24 -0
  25. data/lib/backports/1.8.7/array/cycle.rb +16 -0
  26. data/lib/backports/1.8.7/array/delete_if.rb +3 -0
  27. data/lib/backports/1.8.7/array/each.rb +3 -0
  28. data/lib/backports/1.8.7/array/each_index.rb +3 -0
  29. data/lib/backports/1.8.7/array/find_index.rb +1 -0
  30. data/lib/backports/1.8.7/array/flatten.rb +47 -0
  31. data/lib/backports/1.8.7/array/index.rb +15 -0
  32. data/lib/backports/1.8.7/array/map.rb +3 -0
  33. data/lib/backports/1.8.7/array/permutation.rb +30 -0
  34. data/lib/backports/1.8.7/array/pop.rb +15 -0
  35. data/lib/backports/1.8.7/array/product.rb +32 -0
  36. data/lib/backports/1.8.7/array/reject.rb +3 -0
  37. data/lib/backports/1.8.7/array/reverse_each.rb +3 -0
  38. data/lib/backports/1.8.7/array/rindex.rb +15 -0
  39. data/lib/backports/1.8.7/array/select.rb +3 -0
  40. data/lib/backports/1.8.7/array/shift.rb +13 -0
  41. data/lib/backports/1.8.7/array/shuffle.rb +17 -0
  42. data/lib/backports/1.8.7/binding.rb +3 -6
  43. data/lib/backports/1.8.7/binding/eval.rb +7 -0
  44. data/lib/backports/1.8.7/dir.rb +2 -57
  45. data/lib/backports/1.8.7/dir/each.rb +7 -0
  46. data/lib/backports/1.8.7/dir/foreach.rb +9 -0
  47. data/lib/backports/1.8.7/dir/mktmpdir.rb +44 -0
  48. data/lib/backports/1.8.7/enumerable.rb +2 -240
  49. data/lib/backports/1.8.7/enumerable/count.rb +17 -0
  50. data/lib/backports/1.8.7/enumerable/cycle.rb +24 -0
  51. data/lib/backports/1.8.7/enumerable/detect.rb +3 -0
  52. data/lib/backports/1.8.7/enumerable/drop.rb +13 -0
  53. data/lib/backports/1.8.7/enumerable/drop_while.rb +16 -0
  54. data/lib/backports/1.8.7/enumerable/each_cons.rb +4 -0
  55. data/lib/backports/1.8.7/enumerable/each_slice.rb +4 -0
  56. data/lib/backports/1.8.7/enumerable/each_with_index.rb +3 -0
  57. data/lib/backports/1.8.7/enumerable/entries.rb +11 -0
  58. data/lib/backports/1.8.7/enumerable/find.rb +3 -0
  59. data/lib/backports/1.8.7/enumerable/find_all.rb +3 -0
  60. data/lib/backports/1.8.7/enumerable/find_index.rb +21 -0
  61. data/lib/backports/1.8.7/enumerable/first.rb +21 -0
  62. data/lib/backports/1.8.7/enumerable/group_by.rb +14 -0
  63. data/lib/backports/1.8.7/enumerable/inject.rb +14 -0
  64. data/lib/backports/1.8.7/enumerable/max_by.rb +16 -0
  65. data/lib/backports/1.8.7/enumerable/min_by.rb +16 -0
  66. data/lib/backports/1.8.7/enumerable/minmax.rb +21 -0
  67. data/lib/backports/1.8.7/enumerable/minmax_by.rb +19 -0
  68. data/lib/backports/1.8.7/enumerable/none.rb +7 -0
  69. data/lib/backports/1.8.7/enumerable/one.rb +23 -0
  70. data/lib/backports/1.8.7/enumerable/partition.rb +3 -0
  71. data/lib/backports/1.8.7/enumerable/reduce.rb +1 -0
  72. data/lib/backports/1.8.7/enumerable/reject.rb +3 -0
  73. data/lib/backports/1.8.7/enumerable/reverse_each.rb +12 -0
  74. data/lib/backports/1.8.7/enumerable/select.rb +3 -0
  75. data/lib/backports/1.8.7/enumerable/sort_by.rb +3 -0
  76. data/lib/backports/1.8.7/enumerable/take.rb +9 -0
  77. data/lib/backports/1.8.7/enumerable/take_while.rb +14 -0
  78. data/lib/backports/1.8.7/enumerable/to_a.rb +12 -0
  79. data/lib/backports/1.8.7/enumerator.rb +2 -31
  80. data/lib/backports/1.8.7/enumerator/each.rb +6 -0
  81. data/lib/backports/1.8.7/enumerator/next.rb +15 -0
  82. data/lib/backports/1.8.7/enumerator/rewind.rb +13 -0
  83. data/lib/backports/1.8.7/enumerator/with_index.rb +14 -0
  84. data/lib/backports/1.8.7/env.rb +3 -3
  85. data/lib/backports/1.8.7/env/delete_if.rb +3 -0
  86. data/lib/backports/1.8.7/env/each.rb +3 -0
  87. data/lib/backports/1.8.7/env/each_key.rb +3 -0
  88. data/lib/backports/1.8.7/env/each_pair.rb +3 -0
  89. data/lib/backports/1.8.7/env/each_value.rb +3 -0
  90. data/lib/backports/1.8.7/env/reject.rb +4 -0
  91. data/lib/backports/1.8.7/env/select.rb +3 -0
  92. data/lib/backports/1.8.7/fixnum.rb +2 -10
  93. data/lib/backports/1.8.7/fixnum/div.rb +7 -0
  94. data/lib/backports/1.8.7/fixnum/fdiv.rb +7 -0
  95. data/lib/backports/1.8.7/float.rb +3 -4
  96. data/lib/backports/1.8.7/float/fdiv.rb +3 -0
  97. data/lib/backports/1.8.7/gc.rb +2 -10
  98. data/lib/backports/1.8.7/gc/stress.rb +9 -0
  99. data/lib/backports/1.8.7/hash.rb +2 -41
  100. data/lib/backports/1.8.7/hash/constructor.rb +25 -0
  101. data/lib/backports/1.8.7/hash/delete_if.rb +3 -0
  102. data/lib/backports/1.8.7/hash/each.rb +3 -0
  103. data/lib/backports/1.8.7/hash/each_key.rb +3 -0
  104. data/lib/backports/1.8.7/hash/each_pair.rb +3 -0
  105. data/lib/backports/1.8.7/hash/each_value.rb +3 -0
  106. data/lib/backports/1.8.7/hash/eql.rb +1 -0
  107. data/lib/backports/1.8.7/hash/hash.rb +17 -0
  108. data/lib/backports/1.8.7/hash/key.rb +3 -0
  109. data/lib/backports/1.8.7/hash/reject.rb +3 -0
  110. data/lib/backports/1.8.7/hash/select.rb +3 -0
  111. data/lib/backports/1.8.7/integer.rb +2 -23
  112. data/lib/backports/1.8.7/integer/downto.rb +3 -0
  113. data/lib/backports/1.8.7/integer/even.rb +7 -0
  114. data/lib/backports/1.8.7/integer/odd.rb +7 -0
  115. data/lib/backports/1.8.7/integer/ord.rb +7 -0
  116. data/lib/backports/1.8.7/integer/pred.rb +7 -0
  117. data/lib/backports/1.8.7/integer/times.rb +3 -0
  118. data/lib/backports/1.8.7/integer/upto.rb +3 -0
  119. data/lib/backports/1.8.7/io.rb +2 -42
  120. data/lib/backports/1.8.7/io/bytes.rb +1 -0
  121. data/lib/backports/1.8.7/io/chars.rb +1 -0
  122. data/lib/backports/1.8.7/io/each.rb +3 -0
  123. data/lib/backports/1.8.7/io/each_byte.rb +6 -0
  124. data/lib/backports/1.8.7/io/each_char.rb +34 -0
  125. data/lib/backports/1.8.7/io/each_line.rb +6 -0
  126. data/lib/backports/1.8.7/io/foreach.rb +7 -0
  127. data/lib/backports/1.8.7/io/getbyte.rb +3 -0
  128. data/lib/backports/1.8.7/io/lines.rb +1 -0
  129. data/lib/backports/1.8.7/io/readbyte.rb +3 -0
  130. data/lib/backports/1.8.7/kernel.rb +2 -35
  131. data/lib/backports/1.8.7/kernel/__method__.rb +8 -0
  132. data/lib/backports/1.8.7/kernel/instance_exec.rb +10 -0
  133. data/lib/backports/1.8.7/kernel/tap.rb +8 -0
  134. data/lib/backports/1.8.7/method.rb +2 -46
  135. data/lib/backports/1.8.7/method/name.rb +49 -0
  136. data/lib/backports/1.8.7/module.rb +3 -7
  137. data/lib/backports/1.8.7/module/class_exec.rb +1 -0
  138. data/lib/backports/1.8.7/module/module_exec.rb +11 -0
  139. data/lib/backports/1.8.7/numeric.rb +3 -3
  140. data/lib/backports/1.8.7/numeric/step.rb +3 -0
  141. data/lib/backports/1.8.7/object_space.rb +3 -5
  142. data/lib/backports/1.8.7/object_space/each_object.rb +5 -0
  143. data/lib/backports/1.8.7/proc.rb +3 -4
  144. data/lib/backports/1.8.7/proc/yield.rb +3 -0
  145. data/lib/backports/1.8.7/process.rb +3 -5
  146. data/lib/backports/1.8.7/process/exec.rb +3 -0
  147. data/lib/backports/1.8.7/range.rb +3 -4
  148. data/lib/backports/1.8.7/range/each.rb +3 -0
  149. data/lib/backports/1.8.7/range/step.rb +3 -0
  150. data/lib/backports/1.8.7/regexp.rb +3 -12
  151. data/lib/backports/1.8.7/regexp/union.rb +11 -0
  152. data/lib/backports/1.8.7/stop_iteration.rb +14 -0
  153. data/lib/backports/1.8.7/string.rb +2 -91
  154. data/lib/backports/1.8.7/string/bytes.rb +1 -0
  155. data/lib/backports/1.8.7/string/bytesize.rb +3 -0
  156. data/lib/backports/1.8.7/string/each.rb +3 -0
  157. data/lib/backports/1.8.7/string/each_byte.rb +5 -0
  158. data/lib/backports/1.8.7/string/each_char.rb +13 -0
  159. data/lib/backports/1.8.7/string/each_line.rb +5 -0
  160. data/lib/backports/1.8.7/string/end_with.rb +12 -0
  161. data/lib/backports/1.8.7/string/lines.rb +1 -0
  162. data/lib/backports/1.8.7/string/partition.rb +20 -0
  163. data/lib/backports/1.8.7/string/rpartition.rb +19 -0
  164. data/lib/backports/1.8.7/string/start_with.rb +12 -0
  165. data/lib/backports/1.8.7/string/upto.rb +15 -0
  166. data/lib/backports/1.8.7/struct.rb +3 -3
  167. data/lib/backports/1.8.7/struct/each.rb +3 -0
  168. data/lib/backports/1.8.7/struct/each_pair.rb +3 -0
  169. data/lib/backports/1.8.7/symbol.rb +3 -6
  170. data/lib/backports/1.8.7/symbol/to_proc.rb +8 -0
  171. data/lib/backports/1.8.8.rb +1 -3
  172. data/lib/backports/1.8.rb +1 -3
  173. data/lib/backports/1.9.1.rb +2 -4
  174. data/lib/backports/1.9.1/array.rb +3 -8
  175. data/lib/backports/1.9.1/array/sample.rb +19 -0
  176. data/lib/backports/1.9.1/array/try_convert.rb +7 -0
  177. data/lib/backports/1.9.1/dir.rb +3 -3
  178. data/lib/backports/1.9.1/dir/to_path.rb +3 -0
  179. data/lib/backports/1.9.1/enumerable.rb +2 -18
  180. data/lib/backports/1.9.1/enumerable/each_with_index.rb +14 -0
  181. data/lib/backports/1.9.1/enumerable/each_with_object.rb +9 -0
  182. data/lib/backports/1.9.1/enumerator.rb +2 -40
  183. data/lib/backports/1.9.1/enumerator/new.rb +40 -0
  184. data/lib/backports/1.9.1/enumerator/with_object.rb +6 -0
  185. data/lib/backports/1.9.1/env.rb +3 -3
  186. data/lib/backports/1.9.1/env/key.rb +5 -0
  187. data/lib/backports/1.9.1/file.rb +2 -43
  188. data/lib/backports/1.9.1/file/atime.rb +5 -0
  189. data/lib/backports/1.9.1/file/basename.rb +5 -0
  190. data/lib/backports/1.9.1/file/binary.rb +6 -0
  191. data/lib/backports/1.9.1/file/blockdev.rb +5 -0
  192. data/lib/backports/1.9.1/file/chardev.rb +5 -0
  193. data/lib/backports/1.9.1/file/chmod.rb +5 -0
  194. data/lib/backports/1.9.1/file/chown.rb +5 -0
  195. data/lib/backports/1.9.1/file/ctime.rb +5 -0
  196. data/lib/backports/1.9.1/file/delete.rb +5 -0
  197. data/lib/backports/1.9.1/file/directory.rb +5 -0
  198. data/lib/backports/1.9.1/file/dirname.rb +5 -0
  199. data/lib/backports/1.9.1/file/executable.rb +5 -0
  200. data/lib/backports/1.9.1/file/executable_real.rb +5 -0
  201. data/lib/backports/1.9.1/file/exist.rb +5 -0
  202. data/lib/backports/1.9.1/file/exists.rb +5 -0
  203. data/lib/backports/1.9.1/file/expand_path.rb +14 -0
  204. data/lib/backports/1.9.1/file/extname.rb +5 -0
  205. data/lib/backports/1.9.1/file/file.rb +5 -0
  206. data/lib/backports/1.9.1/file/ftype.rb +5 -0
  207. data/lib/backports/1.9.1/file/grpowned.rb +5 -0
  208. data/lib/backports/1.9.1/file/join.rb +5 -0
  209. data/lib/backports/1.9.1/file/lchmod.rb +5 -0
  210. data/lib/backports/1.9.1/file/lchown.rb +5 -0
  211. data/lib/backports/1.9.1/file/link.rb +5 -0
  212. data/lib/backports/1.9.1/file/lstat.rb +5 -0
  213. data/lib/backports/1.9.1/file/mtime.rb +5 -0
  214. data/lib/backports/1.9.1/file/new.rb +5 -0
  215. data/lib/backports/1.9.1/file/open.rb +23 -0
  216. data/lib/backports/1.9.1/file/owned.rb +5 -0
  217. data/lib/backports/1.9.1/file/pipe.rb +5 -0
  218. data/lib/backports/1.9.1/file/readable.rb +5 -0
  219. data/lib/backports/1.9.1/file/readable_real.rb +5 -0
  220. data/lib/backports/1.9.1/file/readlink.rb +5 -0
  221. data/lib/backports/1.9.1/file/rename.rb +5 -0
  222. data/lib/backports/1.9.1/file/setgid.rb +5 -0
  223. data/lib/backports/1.9.1/file/setuid.rb +5 -0
  224. data/lib/backports/1.9.1/file/size.rb +14 -0
  225. data/lib/backports/1.9.1/file/socket.rb +5 -0
  226. data/lib/backports/1.9.1/file/split.rb +5 -0
  227. data/lib/backports/1.9.1/file/stat.rb +5 -0
  228. data/lib/backports/1.9.1/file/sticky.rb +5 -0
  229. data/lib/backports/1.9.1/file/symlink.rb +6 -0
  230. data/lib/backports/1.9.1/file/to_path.rb +3 -0
  231. data/lib/backports/1.9.1/file/truncate.rb +5 -0
  232. data/lib/backports/1.9.1/file/unlink.rb +5 -0
  233. data/lib/backports/1.9.1/file/writable.rb +5 -0
  234. data/lib/backports/1.9.1/file/writable_real.rb +5 -0
  235. data/lib/backports/1.9.1/file/zero.rb +5 -0
  236. data/lib/backports/1.9.1/float.rb +3 -19
  237. data/lib/backports/1.9.1/float/round.rb +21 -0
  238. data/lib/backports/1.9.1/hash.rb +2 -35
  239. data/lib/backports/1.9.1/hash/assoc.rb +12 -0
  240. data/lib/backports/1.9.1/hash/default_proc.rb +14 -0
  241. data/lib/backports/1.9.1/hash/rassoc.rb +9 -0
  242. data/lib/backports/1.9.1/hash/try_convert.rb +7 -0
  243. data/lib/backports/1.9.1/integer.rb +2 -21
  244. data/lib/backports/1.9.1/integer/magnitude.rb +3 -0
  245. data/lib/backports/1.9.1/integer/round.rb +24 -0
  246. data/lib/backports/1.9.1/io.rb +2 -33
  247. data/lib/backports/1.9.1/io/binread.rb +10 -0
  248. data/lib/backports/1.9.1/io/open.rb +21 -0
  249. data/lib/backports/1.9.1/io/try_convert.rb +7 -0
  250. data/lib/backports/1.9.1/io/ungetbyte.rb +3 -0
  251. data/lib/backports/1.9.1/kernel.rb +2 -39
  252. data/lib/backports/1.9.1/kernel/__callee__.rb +7 -0
  253. data/lib/backports/1.9.1/kernel/define_singleton_method.rb +9 -0
  254. data/lib/backports/1.9.1/kernel/public_method.rb +11 -0
  255. data/lib/backports/1.9.1/kernel/public_send.rb +13 -0
  256. data/lib/backports/1.9.1/kernel/require_relative.rb +14 -0
  257. data/lib/backports/1.9.1/math.rb +2 -24
  258. data/lib/backports/1.9.1/math/log.rb +22 -0
  259. data/lib/backports/1.9.1/math/log2.rb +5 -0
  260. data/lib/backports/1.9.1/numeric.rb +3 -9
  261. data/lib/backports/1.9.1/numeric/round.rb +11 -0
  262. data/lib/backports/1.9.1/proc.rb +2 -53
  263. data/lib/backports/1.9.1/proc/case_compare.rb +6 -0
  264. data/lib/backports/1.9.1/proc/curry.rb +24 -0
  265. data/lib/backports/1.9.1/proc/lambda.rb +40 -0
  266. data/lib/backports/1.9.1/range.rb +3 -3
  267. data/lib/backports/1.9.1/range/cover.rb +3 -0
  268. data/lib/backports/1.9.1/regexp.rb +3 -8
  269. data/lib/backports/1.9.1/regexp/try_convert.rb +7 -0
  270. data/lib/backports/1.9.1/stdlib.rb +1 -1
  271. data/lib/backports/1.9.1/string.rb +2 -44
  272. data/lib/backports/1.9.1/string/ascii_only.rb +7 -0
  273. data/lib/backports/1.9.1/string/chr.rb +7 -0
  274. data/lib/backports/1.9.1/string/clear.rb +8 -0
  275. data/lib/backports/1.9.1/string/codepoints.rb +8 -0
  276. data/lib/backports/1.9.1/string/each_codepoint.rb +3 -0
  277. data/lib/backports/1.9.1/string/getbyte.rb +3 -0
  278. data/lib/backports/1.9.1/string/ord.rb +7 -0
  279. data/lib/backports/1.9.1/string/setbyte.rb +3 -0
  280. data/lib/backports/1.9.1/string/try_convert.rb +7 -0
  281. data/lib/backports/1.9.1/symbol.rb +2 -31
  282. data/lib/backports/1.9.1/symbol/capitalize.rb +7 -0
  283. data/lib/backports/1.9.1/symbol/casecmp.rb +8 -0
  284. data/lib/backports/1.9.1/symbol/comparable.rb +7 -0
  285. data/lib/backports/1.9.1/symbol/comparison.rb +8 -0
  286. data/lib/backports/1.9.1/symbol/downcase.rb +7 -0
  287. data/lib/backports/1.9.1/symbol/element_reference.rb +7 -0
  288. data/lib/backports/1.9.1/symbol/empty.rb +7 -0
  289. data/lib/backports/1.9.1/symbol/length.rb +7 -0
  290. data/lib/backports/1.9.1/symbol/match.rb +9 -0
  291. data/lib/backports/1.9.1/symbol/next.rb +1 -0
  292. data/lib/backports/1.9.1/symbol/size.rb +7 -0
  293. data/lib/backports/1.9.1/symbol/succ.rb +8 -0
  294. data/lib/backports/1.9.1/symbol/swapcase.rb +7 -0
  295. data/lib/backports/1.9.1/symbol/upcase.rb +7 -0
  296. data/lib/backports/1.9.2.rb +2 -4
  297. data/lib/backports/1.9.2/array.rb +2 -109
  298. data/lib/backports/1.9.2/array/keep_if.rb +8 -0
  299. data/lib/backports/1.9.2/array/product.rb +26 -0
  300. data/lib/backports/1.9.2/array/repeated_combination.rb +25 -0
  301. data/lib/backports/1.9.2/array/repeated_permutation.rb +26 -0
  302. data/lib/backports/1.9.2/array/rotate.rb +17 -0
  303. data/lib/backports/1.9.2/array/select.rb +8 -0
  304. data/lib/backports/1.9.2/array/sort_by.rb +9 -0
  305. data/lib/backports/1.9.2/array/uniq.rb +29 -0
  306. data/lib/backports/1.9.2/complex.rb +3 -6
  307. data/lib/backports/1.9.2/complex/to_r.rb +10 -0
  308. data/lib/backports/1.9.2/dir.rb +3 -5
  309. data/lib/backports/1.9.2/dir/home.rb +5 -0
  310. data/lib/backports/1.9.2/enumerable.rb +2 -73
  311. data/lib/backports/1.9.2/enumerable/chunk.rb +39 -0
  312. data/lib/backports/1.9.2/enumerable/collect_concat.rb +1 -0
  313. data/lib/backports/1.9.2/enumerable/each_entry.rb +11 -0
  314. data/lib/backports/1.9.2/enumerable/flat_map.rb +11 -0
  315. data/lib/backports/1.9.2/enumerable/slice_before.rb +30 -0
  316. data/lib/backports/1.9.2/float.rb +3 -4
  317. data/lib/backports/1.9.2/float/infinity.rb +3 -0
  318. data/lib/backports/1.9.2/float/nan.rb +3 -0
  319. data/lib/backports/1.9.2/hash.rb +2 -10
  320. data/lib/backports/1.9.2/hash/keep_if.rb +8 -0
  321. data/lib/backports/1.9.2/hash/select.rb +9 -0
  322. data/lib/backports/1.9.2/kernel.rb +3 -5
  323. data/lib/backports/1.9.2/kernel/singleton_class.rb +7 -0
  324. data/lib/backports/1.9.2/random.rb +1 -1
  325. data/lib/backports/1.9.2/stdlib.rb +1 -1
  326. data/lib/backports/1.9.2/stdlib/matrix.rb +9 -8
  327. data/lib/backports/1.9.2/stdlib/set.rb +1 -1
  328. data/lib/backports/1.9.3.rb +2 -4
  329. data/lib/backports/1.9.3/file.rb +3 -14
  330. data/lib/backports/1.9.3/file/null.rb +16 -0
  331. data/lib/backports/1.9.3/io.rb +2 -31
  332. data/lib/backports/1.9.3/io/advise.rb +24 -0
  333. data/lib/backports/1.9.3/io/binwrite.rb +7 -0
  334. data/lib/backports/1.9.3/io/write.rb +7 -0
  335. data/lib/backports/1.9.3/string.rb +2 -38
  336. data/lib/backports/1.9.3/string/byteslice.rb +36 -0
  337. data/lib/backports/1.9.3/string/prepend.rb +10 -0
  338. data/lib/backports/1.9.rb +1 -3
  339. data/lib/backports/2.0.0.rb +2 -4
  340. data/lib/backports/2.0.0/array.rb +2 -29
  341. data/lib/backports/2.0.0/array/bsearch.rb +32 -0
  342. data/lib/backports/2.0.0/enumerable.rb +2 -11
  343. data/lib/backports/2.0.0/enumerable/lazy.rb +216 -0
  344. data/lib/backports/2.0.0/enumerator.rb +3 -0
  345. data/lib/backports/2.0.0/enumerator/lazy.rb +1 -203
  346. data/lib/backports/2.0.0/env.rb +3 -0
  347. data/lib/backports/2.0.0/env/to_h.rb +5 -0
  348. data/lib/backports/2.0.0/hash.rb +2 -18
  349. data/lib/backports/2.0.0/hash/default_proc.rb +16 -0
  350. data/lib/backports/2.0.0/hash/to_h.rb +7 -0
  351. data/lib/backports/2.0.0/nil.rb +3 -0
  352. data/lib/backports/2.0.0/nil/to_h.rb +7 -0
  353. data/lib/backports/2.0.0/range.rb +2 -48
  354. data/lib/backports/2.0.0/range/bsearch.rb +49 -0
  355. data/lib/backports/2.0.0/stdlib/abbrev.rb +1 -0
  356. data/lib/backports/2.0.0/stdlib/fake_stdlib_lib.rb +1 -0
  357. data/lib/backports/2.0.0/stdlib/ostruct.rb +1 -1
  358. data/lib/backports/2.0.0/struct.rb +3 -7
  359. data/lib/backports/2.0.0/struct/to_h.rb +9 -0
  360. data/lib/backports/2.0.rb +1 -3
  361. data/lib/backports/basic_object.rb +29 -29
  362. data/lib/backports/{1.9.2 → extra}/random/MT19937.rb +2 -2
  363. data/lib/backports/{1.9.2 → extra}/random/bits_and_bytes.rb +1 -1
  364. data/lib/backports/{1.9.2 → extra}/random/implementation.rb +1 -1
  365. data/lib/backports/extra/random/load.rb +17 -0
  366. data/lib/backports/force/array_map.rb +1 -1
  367. data/lib/backports/force/enumerable_map.rb +1 -1
  368. data/lib/backports/force/hash_select.rb +1 -1
  369. data/lib/backports/force/string_size.rb +1 -1
  370. data/lib/backports/rails.rb +2 -2
  371. data/lib/backports/rails/enumerable.rb +1 -1
  372. data/lib/backports/rails/hash.rb +1 -1
  373. data/lib/backports/rails/kernel.rb +1 -1
  374. data/lib/backports/rails/module.rb +1 -1
  375. data/lib/backports/rails/string.rb +6 -6
  376. data/lib/backports/tools.rb +74 -64
  377. data/lib/backports/version.rb +1 -1
  378. data/set_version/1.8.7.rb +1 -0
  379. data/set_version/1.9.1.rb +1 -0
  380. data/set_version/1.9.2.rb +1 -0
  381. data/set_version/1.9.3.rb +1 -0
  382. data/set_version/2.0.0.rb +1 -0
  383. data/set_version/setter.rb +14 -0
  384. data/tags/1.8.6/core/array/rotate_spec.rb +2 -0
  385. data/tags/1.8.6/core/array/uniq_spec.rb +3 -0
  386. data/tags/1.8.6/core/complex/to_r_spec.rb +3 -0
  387. data/tags/1.8.6/core/enumerable/each_entry_spec.rb +1 -0
  388. data/tags/1.8.6/core/enumerator/next_spec.rb +1 -0
  389. data/tags/1.8.6/core/env/to_h_spec.rb +2 -0
  390. data/tags/1.8.6/core/file/join_spec.rb +3 -0
  391. data/tags/1.8.6/core/file/lchmod_spec.rb +2 -0
  392. data/tags/1.8.6/core/file/new_spec.rb +2 -0
  393. data/tags/1.8.6/core/file/open_spec.rb +10 -0
  394. data/tags/1.8.6/core/file/to_path_spec.rb +1 -0
  395. data/tags/1.8.6/core/fixnum/fdiv_spec.rb +1 -0
  396. data/tags/1.8.6/core/gc/stress_spec.rb +2 -0
  397. data/tags/1.8.6/core/hash/assoc_spec.rb +1 -0
  398. data/tags/1.8.6/core/hash/default_proc_spec.rb +2 -0
  399. data/tags/1.8.6/core/hash/eql_spec.rb +3 -0
  400. data/tags/1.8.6/core/hash/hash_spec.rb +3 -0
  401. data/tags/1.8.6/core/hash/keep_if_spec.rb +1 -0
  402. data/tags/1.8.6/core/hash/select_spec.rb +1 -0
  403. data/tags/1.8.6/core/integer/round_spec.rb +1 -0
  404. data/tags/1.8.6/core/io/binread_spec.rb +7 -0
  405. data/tags/1.8.6/core/io/chars_spec.rb +1 -0
  406. data/tags/1.8.6/core/io/each_char_spec.rb +1 -0
  407. data/tags/1.8.6/core/io/lines_spec.rb +1 -0
  408. data/tags/1.8.6/core/io/open_spec.rb +24 -0
  409. data/tags/1.8.6/core/io/ungetbyte_spec.rb +4 -0
  410. data/tags/1.8.6/core/io/write_spec.rb +3 -0
  411. data/tags/1.8.6/core/kernel/__callee___spec.rb +5 -0
  412. data/tags/1.8.6/core/kernel/__method___spec.rb +1 -0
  413. data/tags/1.8.6/core/kernel/define_singleton_method_spec.rb +2 -0
  414. data/tags/1.8.6/core/kernel/public_method_spec.rb +2 -0
  415. data/tags/1.8.6/core/math/log2_spec.rb +4 -0
  416. data/tags/1.8.6/core/math/log_spec.rb +3 -0
  417. data/tags/1.8.6/core/module/class_exec_spec.rb +2 -0
  418. data/tags/1.8.6/core/module/module_exec_spec.rb +2 -0
  419. data/tags/1.8.6/core/numeric/step_spec.rb +12 -0
  420. data/tags/1.8.6/core/proc/curry_spec.rb +4 -0
  421. data/tags/1.8.6/core/range/step_spec.rb +12 -0
  422. data/tags/1.8.6/core/string/getbyte_spec.rb +6 -0
  423. data/tags/1.8.6/core/string/partition_spec.rb +1 -0
  424. data/tags/1.8.6/core/string/prepend_spec.rb +1 -0
  425. data/tags/1.8.6/core/string/rpartition_spec.rb +1 -0
  426. data/tags/1.8.6/core/string/setbyte_spec.rb +5 -0
  427. data/tags/1.8.6/core/string/upto_spec.rb +1 -0
  428. data/tags/1.8.6/core/symbol/capitalize_spec.rb +3 -0
  429. data/tags/1.8.6/core/symbol/comparison_spec.rb +1 -0
  430. data/tags/1.8.6/core/symbol/downcase_spec.rb +2 -0
  431. data/tags/1.8.6/core/symbol/element_reference_spec.rb +2 -0
  432. data/tags/1.8.6/core/symbol/empty_spec.rb +1 -0
  433. data/tags/1.8.6/core/symbol/match_spec.rb +2 -0
  434. data/tags/1.8.6/core/symbol/swapcase_spec.rb +2 -0
  435. data/tags/1.8.6/core/symbol/upcase_spec.rb +1 -0
  436. data/tags/1.8.7/core/array/rotate_spec.rb +2 -0
  437. data/tags/1.8.7/core/array/uniq_spec.rb +3 -0
  438. data/tags/1.8.7/core/complex/to_r_spec.rb +3 -0
  439. data/tags/1.8.7/core/env/to_h_spec.rb +2 -0
  440. data/tags/1.8.7/core/file/lchmod_spec.rb +2 -0
  441. data/tags/1.8.7/core/file/new_spec.rb +1 -0
  442. data/tags/1.8.7/core/file/open_spec.rb +1 -0
  443. data/tags/1.8.7/core/file/readlink_spec.rb +6 -0
  444. data/tags/1.8.7/core/file/to_path_spec.rb +1 -0
  445. data/tags/1.8.7/core/hash/assoc_spec.rb +1 -0
  446. data/tags/1.8.7/core/hash/default_proc_spec.rb +2 -0
  447. data/tags/1.8.7/core/hash/keep_if_spec.rb +1 -0
  448. data/tags/1.8.7/core/hash/rassoc_spec.rb +1 -0
  449. data/tags/1.8.7/core/hash/select_spec.rb +1 -0
  450. data/tags/1.8.7/core/integer/round_spec.rb +1 -0
  451. data/tags/1.8.7/core/io/binread_spec.rb +7 -0
  452. data/tags/1.8.7/core/io/open_spec.rb +25 -0
  453. data/tags/1.8.7/core/io/ungetbyte_spec.rb +4 -0
  454. data/tags/1.8.7/core/io/write_spec.rb +3 -0
  455. data/tags/1.8.7/core/kernel/__callee___spec.rb +5 -0
  456. data/tags/1.8.7/core/kernel/define_singleton_method_spec.rb +2 -0
  457. data/tags/1.8.7/core/kernel/public_method_spec.rb +1 -0
  458. data/tags/1.8.7/core/math/log2_spec.rb +4 -0
  459. data/tags/1.8.7/core/math/log_spec.rb +3 -0
  460. data/tags/1.8.7/core/proc/curry_spec.rb +3 -0
  461. data/tags/1.8.7/core/string/getbyte_spec.rb +5 -0
  462. data/tags/1.8.7/core/string/prepend_spec.rb +1 -0
  463. data/tags/1.8.7/core/string/setbyte_spec.rb +5 -0
  464. data/tags/1.8.7/core/symbol/capitalize_spec.rb +3 -0
  465. data/tags/1.8.7/core/symbol/comparison_spec.rb +1 -0
  466. data/tags/1.8.7/core/symbol/downcase_spec.rb +2 -0
  467. data/tags/1.8.7/core/symbol/element_reference_spec.rb +2 -0
  468. data/tags/1.8.7/core/symbol/empty_spec.rb +1 -0
  469. data/tags/1.8.7/core/symbol/match_spec.rb +2 -0
  470. data/tags/1.8.7/core/symbol/swapcase_spec.rb +2 -0
  471. data/tags/1.8.7/core/symbol/upcase_spec.rb +1 -0
  472. data/tags/1.9.1/core/array/rotate_spec.rb +1 -0
  473. data/tags/1.9.1/core/env/to_h_spec.rb +2 -0
  474. data/tags/1.9.1/core/hash/default_proc_spec.rb +1 -0
  475. data/tags/1.9.1/core/io/write_spec.rb +2 -0
  476. data/tags/1.9.2/core/io/write_spec.rb +2 -0
  477. data/test/README +1 -1
  478. data/test/_backport_guards_test.rb +140 -0
  479. data/test/{test_lazy.rb → lazy_test.rb} +25 -20
  480. data/test/{test_socket_interaction.rb → socket_interaction_test.rb} +3 -3
  481. data/test/test_helper.rb +0 -4
  482. metadata +392 -16
  483. data/lib/backports/1.9.2/match_data.rb +0 -3
  484. data/lib/backports/1.9.2/random/load.rb +0 -16
  485. data/lib/backports/2.0.0/nil_class.rb +0 -5
  486. data/test/std_lib_loading_test.rb +0 -57
  487. data/test/test__me_first.rb +0 -51
@@ -0,0 +1,24 @@
1
+ unless Proc.method_defined? :curry
2
+ require 'backports/1.9.1/proc/lambda'
3
+
4
+ class Proc
5
+ def curry(argc = nil)
6
+ min_argc = arity < 0 ? -arity - 1 : arity
7
+ argc ||= min_argc
8
+ if lambda? and arity < 0 ? argc < min_argc : argc != arity
9
+ raise ArgumentError, "wrong number of arguments (#{argc} for #{min_argc})"
10
+ end
11
+ creator = lambda? ? :lambda : :proc
12
+ block = send(creator) do |*args|
13
+ if args.size >= argc
14
+ call(*args)
15
+ else
16
+ send(creator) do |*more_args|
17
+ args += more_args
18
+ block.call(*args)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,40 @@
1
+ unless Proc.method_defined? :lambda?
2
+ require 'backports/tools'
3
+
4
+ class Proc
5
+ # Standard in Ruby 1.9. See official documentation[http://ruby-doc.org/core-1.9/classes/Proc.html]
6
+ def lambda?
7
+ !!__is_lambda__
8
+ end
9
+
10
+ attr_accessor :__is_lambda__
11
+ private :__is_lambda__
12
+ private :__is_lambda__=
13
+ end
14
+
15
+ class Method
16
+ def to_proc_with_lambda_tracking
17
+ proc = to_proc_without_lambda_tracking
18
+ proc.send :__is_lambda__=, true
19
+ proc
20
+ end
21
+ Backports.alias_method_chain self, :to_proc, :lambda_tracking
22
+ end
23
+
24
+ module Kernel
25
+ def lambda_with_lambda_tracking(&block)
26
+ l = lambda_without_lambda_tracking(&block)
27
+ l.send :__is_lambda__=, true unless block.send(:__is_lambda__) == false
28
+ l
29
+ end
30
+
31
+ def proc_with_lambda_tracking(&block)
32
+ l = proc_without_lambda_tracking(&block)
33
+ l.send :__is_lambda__=, block.send(:__is_lambda__) == true
34
+ l
35
+ end
36
+
37
+ Backports.alias_method_chain self, :lambda, :lambda_tracking
38
+ Backports.alias_method_chain self, :proc, :lambda_tracking
39
+ end
40
+ end
@@ -1,3 +1,3 @@
1
- class Range
2
- Backports.alias_method self, :cover?, :include?
3
- end
1
+ require 'backports/tools'
2
+
3
+ Backports.require_relative_dir
@@ -0,0 +1,3 @@
1
+ require 'backports/tools'
2
+
3
+ Backports.alias_method Range, :cover?, :include?
@@ -1,8 +1,3 @@
1
- class Regexp
2
- # Standard in Ruby 1.8.8. See official documentation[http://ruby-doc.org/core-1.9/classes/Array.html]
3
- class << self
4
- def try_convert(obj)
5
- Backports.try_convert(obj, Regexp, :to_regexp)
6
- end unless method_defined? :try_convert
7
- end
8
- end
1
+ require 'backports/tools'
2
+
3
+ Backports.require_relative_dir
@@ -0,0 +1,7 @@
1
+ unless Regexp.respond_to? :try_convert
2
+ require 'backports/tools'
3
+
4
+ def Regexp.try_convert(obj)
5
+ Backports.try_convert(obj, Regexp, :to_regexp)
6
+ end
7
+ end
@@ -1 +1 @@
1
- Backports::StdLib.extend_relative
1
+ Backports::StdLib.extend_relative
@@ -1,45 +1,3 @@
1
- class String
1
+ require 'backports/tools'
2
2
 
3
- class << self
4
- # Standard in Ruby 1.8.8. See official documentation[http://ruby-doc.org/core-1.9/classes/String.html]
5
- def try_convert(x)
6
- Backports.try_convert(x, String, :to_str)
7
- end unless method_defined? :try_convert
8
- end
9
-
10
- # Standard in Ruby 1.9. See official documentation[http://ruby-doc.org/core-1.9/classes/String.html]
11
- def ascii_only?
12
- !(self =~ /[^\x00-\x7f]/)
13
- end unless method_defined? :ascii_only?
14
-
15
- # Standard in Ruby 1.9. See official documentation[http://ruby-doc.org/core-1.9/classes/String.html]
16
- def chr
17
- chars.first || ""
18
- end unless method_defined? :chr
19
-
20
- # Standard in Ruby 1.9. See official documentation[http://ruby-doc.org/core-1.9/classes/String.html]
21
- def clear
22
- self[0,length] = ""
23
- self
24
- end unless method_defined? :clear
25
-
26
- # Standard in Ruby 1.9. See official documentation[http://ruby-doc.org/core-1.9/classes/String.html]
27
- def codepoints
28
- return to_enum(:codepoints) unless block_given?
29
- unpack("U*").each{|cp| yield cp}
30
- end unless method_defined? :codepoints
31
-
32
- # Standard in Ruby 1.9. See official documentation[http://ruby-doc.org/core-1.9/classes/String.html]
33
- Backports.alias_method self, :each_codepoint, :codepoints
34
-
35
- # Standard in Ruby 1.9. See official documentation[http://ruby-doc.org/core-1.9/classes/String.html]
36
- def ord
37
- codepoints.first or raise ArgumentError, "empty string"
38
- end unless method_defined? :ord
39
-
40
- # Standard in Ruby 1.8.8. See official documentation[http://ruby-doc.org/core-1.9/classes/String.html]
41
- Backports.alias_method self, :getbyte, :[]
42
-
43
- # Standard in Ruby 1.8.8. See official documentation[http://ruby-doc.org/core-1.9/classes/String.html]
44
- Backports.alias_method self, :setbyte, :[]=
45
- end
3
+ Backports.require_relative_dir
@@ -0,0 +1,7 @@
1
+ unless String.method_defined? :ascii_only?
2
+ class String
3
+ def ascii_only?
4
+ !(self =~ /[^\x00-\x7f]/)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ unless String.method_defined? :chr
2
+ class String
3
+ def chr
4
+ chars.first || ""
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ unless String.method_defined? :clear
2
+ class String
3
+ def clear
4
+ self[0,length] = ""
5
+ self
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ unless String.method_defined? :codepoints
2
+ class String
3
+ def codepoints
4
+ return to_enum(:codepoints) unless block_given?
5
+ unpack("U*").each{|cp| yield cp}
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ require 'backports/tools'
2
+
3
+ Backports.alias_method String, :each_codepoint, :codepoints
@@ -0,0 +1,3 @@
1
+ require 'backports/tools'
2
+
3
+ Backports.alias_method String, :getbyte, :[]
@@ -0,0 +1,7 @@
1
+ unless String.method_defined? :ord
2
+ class String
3
+ def ord
4
+ codepoints.first or raise ArgumentError, "empty string"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,3 @@
1
+ require 'backports/tools'
2
+
3
+ Backports.alias_method String, :setbyte, :[]=
@@ -0,0 +1,7 @@
1
+ unless String.respond_to? :try_convert
2
+ require 'backports/tools'
3
+
4
+ def String.try_convert(x)
5
+ Backports.try_convert(x, String, :to_str)
6
+ end
7
+ end
@@ -1,32 +1,3 @@
1
- class Symbol
2
- # Standard in ruby 1.9. See official documentation[http://ruby-doc.org/core-1.9/classes/Symbol.html]
3
- [ [%w(capitalize downcase next succ swapcase upcase), {:after => ".to_sym"}],
4
- [%w(=~ [] empty? length match size), {}]
5
- ].each { |methods, options| methods.each do |method|
6
- module_eval <<-end_eval
7
- def #{method}(*args)
8
- to_s.#{method}(*args)#{options[:after]}
9
- end unless method_defined? :#{method}
10
- end_eval
11
- end }
1
+ require 'backports/tools'
12
2
 
13
- # Standard in ruby 1.9. See official documentation[http://ruby-doc.org/core-1.9/classes/Symbol.html]
14
- def <=>(with)
15
- return nil unless with.is_a? Symbol
16
- to_s <=> with.to_s
17
- end unless method_defined? :"<=>"
18
-
19
- # Standard in ruby 1.9. See official documentation[http://ruby-doc.org/core-1.9/classes/Symbol.html]
20
- def casecmp(with)
21
- return nil unless with.is_a? Symbol
22
- to_s.casecmp(with.to_s)
23
- end unless method_defined? :casecmp
24
-
25
- # Standard in ruby 1.9. See official documentation[http://ruby-doc.org/core-1.9/classes/Symbol.html]
26
- unless ancestors.include? Comparable
27
- alias_method :dont_override_equal_please, :==
28
- include Comparable
29
- alias_method :==, :dont_override_equal_please
30
- end
31
-
32
- end
3
+ Backports.require_relative_dir
@@ -0,0 +1,7 @@
1
+ unless Symbol.method_defined? :capitalize
2
+ class Symbol
3
+ def capitalize
4
+ to_s.capitalize.to_sym
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ unless Symbol.method_defined? :casecmp
2
+ class Symbol
3
+ def casecmp(with)
4
+ return nil unless with.is_a? Symbol
5
+ to_s.casecmp(with.to_s)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ unless Symbol < Comparable
2
+ class Symbol
3
+ alias_method :dont_override_equal_please, :==
4
+ include Comparable
5
+ alias_method :==, :dont_override_equal_please
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ unless Symbol.method_defined? :<=>
2
+ class Symbol
3
+ def <=>(with)
4
+ return nil unless with.is_a? Symbol
5
+ to_s <=> with.to_s
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ unless Symbol.method_defined? :downcase
2
+ class Symbol
3
+ def downcase
4
+ to_s.downcase.to_sym
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ unless Symbol.method_defined? :[]
2
+ class Symbol
3
+ def [](*args)
4
+ to_s[*args]
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ unless Symbol.method_defined? :empty?
2
+ class Symbol
3
+ def empty?
4
+ to_s.empty?
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ unless Symbol.method_defined? :length
2
+ class Symbol
3
+ def length
4
+ to_s.length
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ unless Symbol.method_defined? :match
2
+ class Symbol
3
+ def match(with)
4
+ to_s =~ with
5
+ end
6
+
7
+ alias_method :=~, :match
8
+ end
9
+ end
@@ -0,0 +1 @@
1
+ require 'backports/1.9.1/symbol/succ'
@@ -0,0 +1,7 @@
1
+ unless Symbol.method_defined? :size
2
+ class Symbol
3
+ def size
4
+ to_s.size
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ unless Symbol.method_defined? :succ
2
+ class Symbol
3
+ def succ
4
+ to_s.succ.to_sym
5
+ end
6
+ alias_method :next, :succ
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ unless Symbol.method_defined? :swapcase
2
+ class Symbol
3
+ def swapcase
4
+ to_s.swapcase.to_sym
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ unless Symbol.method_defined? :upcase
2
+ class Symbol
3
+ def upcase
4
+ to_s.upcase.to_sym
5
+ end
6
+ end
7
+ end
@@ -1,5 +1,3 @@
1
1
  # require this file to load all the backports up to Ruby 1.9.2
2
-
3
- require File.expand_path(File.dirname(__FILE__) + "/tools")
4
- Backports.require_relative "1.9.1"
5
- Backports.require_relative_dir "1.9.2"
2
+ require 'backports/1.9.1'
3
+ Backports.require_relative_dir
@@ -1,110 +1,3 @@
1
- class Array
2
- # Standard in Ruby 1.9.2 See official documentation[http://ruby-doc.org/core-1.9/classes/Enumerable.html]
3
- def keep_if
4
- return to_enum(:keep_if) unless block_given?
5
- delete_if{|elem| !yield elem}
6
- end unless method_defined? :keep_if
1
+ require 'backports/tools'
7
2
 
8
- if [1].product([2]){break false}
9
- def product_with_block(*arg, &block)
10
- return product_without_block(*arg) unless block_given?
11
- # Same implementation as 1.8.7, but yielding
12
- arg.map!{|ary| Backports.coerce_to_ary(ary)}
13
- arg.reverse! # to get the results in the same order as in MRI, vary the last argument first
14
- arg.push self
15
-
16
- outer_lambda = arg.inject(block) do |proc, values|
17
- lambda do |partial|
18
- values.each do |val|
19
- proc.call(partial.dup << val)
20
- end
21
- end
22
- end
23
-
24
- outer_lambda.call([])
25
- self
26
- end
27
- Backports.alias_method_chain self, :product, :block
28
- end
29
-
30
- # Note: Combinations are not yielded in the same order as MRI.
31
- # This is not a bug; the spec states that the order is implementation dependent
32
- def repeated_combination(num)
33
- return to_enum(:repeated_combination, num) unless block_given?
34
- num = Backports.coerce_to_int(num)
35
- if num <= 0
36
- yield [] if num == 0
37
- else
38
- indices = Array.new(num, 0)
39
- indices[-1] = size
40
- while dec = indices.find_index(&:nonzero?)
41
- indices[0..dec] = Array.new dec+1, indices[dec]-1
42
- yield values_at(*indices)
43
- end
44
- end
45
- self
46
- end unless method_defined? :repeated_combination
47
-
48
- # Note: Permutations are not yielded in the same order as MRI.
49
- # This is not a bug; the spec states that the order is implementation dependent
50
- def repeated_permutation(num)
51
- return to_enum(:repeated_permutation, num) unless block_given?
52
- num = Backports.coerce_to_int(num)
53
- if num <= 0
54
- yield [] if num == 0
55
- else
56
- indices = Array.new(num, 0)
57
- indices[-1] = size
58
- while dec = indices.find_index(&:nonzero?)
59
- indices[0...dec] = Array.new dec, size-1
60
- indices[dec] -= 1
61
- yield values_at(*indices)
62
- end
63
- end
64
- self
65
- end unless method_defined? :repeated_permutation
66
-
67
- def rotate(n=1)
68
- Array.new(self).rotate!(n)
69
- end unless method_defined? :rotate
70
-
71
- def rotate!(n=1)
72
- n = Backports.coerce_to_int(n) % (empty? ? 1 : size)
73
- concat(shift(n))
74
- end unless method_defined? :rotate!
75
-
76
- def select!
77
- return to_enum(:select!) unless block_given?
78
- reject!{|elem| ! yield elem}
79
- end unless method_defined? :select!
80
-
81
- def sort_by!
82
- return to_enum(:sort_by!) unless block_given?
83
- raise "can't modify frozen array" if frozen?
84
- replace sort_by{|e| yield e}
85
- end unless method_defined? :sort_by!
86
-
87
- unless [1,2].uniq!{}
88
- def uniq_with_block!
89
- return uniq_without_block! unless block_given?
90
- replace self if frozen? # force error
91
- u = uniq{|e| yield e}
92
- replace u unless u.size == size
93
- end
94
- Backports.alias_method_chain self, :uniq!, :block
95
- end
96
-
97
- unless [1,2].uniq{}.size == 1
98
- def uniq_with_block
99
- return uniq_without_block unless block_given?
100
- h = {}
101
- each do |elem|
102
- h[yield(elem)] ||= elem
103
- end
104
- h.values
105
- end
106
- Backports.alias_method_chain self, :uniq, :block
107
- end
108
-
109
- end
110
-
3
+ Backports.require_relative_dir