backports 3.6.0 → 3.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (275) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +1 -0
  3. data/Gemfile.lock +3 -1
  4. data/README.rdoc +6 -2
  5. data/backports.gemspec +1 -1
  6. data/lib/backports/1.8.7.rb +1 -0
  7. data/lib/backports/1.8.7/argf.rb +1 -1
  8. data/lib/backports/1.8.7/argf/each.rb +1 -1
  9. data/lib/backports/1.8.7/argf/each_byte.rb +1 -1
  10. data/lib/backports/1.8.7/argf/each_char.rb +1 -1
  11. data/lib/backports/1.8.7/argf/each_line.rb +1 -1
  12. data/lib/backports/1.8.7/argf/getbyte.rb +1 -1
  13. data/lib/backports/1.8.7/argf/readbyte.rb +1 -1
  14. data/lib/backports/1.8.7/array.rb +1 -1
  15. data/lib/backports/1.8.7/array/collect.rb +1 -1
  16. data/lib/backports/1.8.7/array/combination.rb +1 -1
  17. data/lib/backports/1.8.7/array/cycle.rb +1 -1
  18. data/lib/backports/1.8.7/array/delete_if.rb +1 -1
  19. data/lib/backports/1.8.7/array/each.rb +1 -1
  20. data/lib/backports/1.8.7/array/each_index.rb +1 -1
  21. data/lib/backports/1.8.7/array/flatten.rb +2 -1
  22. data/lib/backports/1.8.7/array/index.rb +1 -1
  23. data/lib/backports/1.8.7/array/map.rb +1 -1
  24. data/lib/backports/1.8.7/array/permutation.rb +1 -1
  25. data/lib/backports/1.8.7/array/pop.rb +2 -1
  26. data/lib/backports/1.8.7/array/product.rb +1 -1
  27. data/lib/backports/1.8.7/array/reject.rb +1 -1
  28. data/lib/backports/1.8.7/array/reverse_each.rb +1 -1
  29. data/lib/backports/1.8.7/array/rindex.rb +1 -1
  30. data/lib/backports/1.8.7/array/select.rb +1 -1
  31. data/lib/backports/1.8.7/array/shift.rb +2 -1
  32. data/lib/backports/1.8.7/binding.rb +1 -1
  33. data/lib/backports/1.8.7/dir.rb +1 -1
  34. data/lib/backports/1.8.7/dir/each.rb +1 -1
  35. data/lib/backports/1.8.7/enumerable.rb +1 -1
  36. data/lib/backports/1.8.7/enumerable/count.rb +1 -1
  37. data/lib/backports/1.8.7/enumerable/cycle.rb +1 -1
  38. data/lib/backports/1.8.7/enumerable/detect.rb +1 -1
  39. data/lib/backports/1.8.7/enumerable/drop.rb +1 -1
  40. data/lib/backports/1.8.7/enumerable/each_cons.rb +1 -1
  41. data/lib/backports/1.8.7/enumerable/each_slice.rb +1 -1
  42. data/lib/backports/1.8.7/enumerable/each_with_index.rb +1 -1
  43. data/lib/backports/1.8.7/enumerable/entries.rb +1 -1
  44. data/lib/backports/1.8.7/enumerable/find.rb +1 -1
  45. data/lib/backports/1.8.7/enumerable/find_all.rb +1 -1
  46. data/lib/backports/1.8.7/enumerable/find_index.rb +1 -1
  47. data/lib/backports/1.8.7/enumerable/first.rb +1 -1
  48. data/lib/backports/1.8.7/enumerable/inject.rb +2 -1
  49. data/lib/backports/1.8.7/enumerable/max_by.rb +1 -1
  50. data/lib/backports/1.8.7/enumerable/min_by.rb +1 -1
  51. data/lib/backports/1.8.7/enumerable/minmax.rb +1 -1
  52. data/lib/backports/1.8.7/enumerable/minmax_by.rb +1 -1
  53. data/lib/backports/1.8.7/enumerable/partition.rb +1 -1
  54. data/lib/backports/1.8.7/enumerable/reject.rb +1 -1
  55. data/lib/backports/1.8.7/enumerable/select.rb +1 -1
  56. data/lib/backports/1.8.7/enumerable/sort_by.rb +1 -1
  57. data/lib/backports/1.8.7/enumerable/to_a.rb +1 -1
  58. data/lib/backports/1.8.7/enumerator.rb +1 -1
  59. data/lib/backports/1.8.7/enumerator/each.rb +1 -1
  60. data/lib/backports/1.8.7/env.rb +1 -1
  61. data/lib/backports/1.8.7/env/delete_if.rb +1 -1
  62. data/lib/backports/1.8.7/env/each.rb +1 -1
  63. data/lib/backports/1.8.7/env/each_key.rb +1 -1
  64. data/lib/backports/1.8.7/env/each_pair.rb +1 -1
  65. data/lib/backports/1.8.7/env/each_value.rb +1 -1
  66. data/lib/backports/1.8.7/env/reject.rb +1 -1
  67. data/lib/backports/1.8.7/env/select.rb +1 -1
  68. data/lib/backports/1.8.7/fixnum.rb +1 -1
  69. data/lib/backports/1.8.7/float.rb +1 -1
  70. data/lib/backports/1.8.7/gc.rb +1 -1
  71. data/lib/backports/1.8.7/hash.rb +1 -1
  72. data/lib/backports/1.8.7/hash/constructor.rb +1 -1
  73. data/lib/backports/1.8.7/hash/delete_if.rb +1 -1
  74. data/lib/backports/1.8.7/hash/each.rb +1 -1
  75. data/lib/backports/1.8.7/hash/each_key.rb +1 -1
  76. data/lib/backports/1.8.7/hash/each_pair.rb +1 -1
  77. data/lib/backports/1.8.7/hash/each_value.rb +1 -1
  78. data/lib/backports/1.8.7/hash/reject.rb +1 -1
  79. data/lib/backports/1.8.7/hash/select.rb +1 -1
  80. data/lib/backports/1.8.7/integer.rb +1 -1
  81. data/lib/backports/1.8.7/integer/downto.rb +1 -1
  82. data/lib/backports/1.8.7/integer/times.rb +1 -1
  83. data/lib/backports/1.8.7/integer/upto.rb +1 -1
  84. data/lib/backports/1.8.7/io.rb +1 -1
  85. data/lib/backports/1.8.7/io/each.rb +1 -1
  86. data/lib/backports/1.8.7/io/each_byte.rb +1 -1
  87. data/lib/backports/1.8.7/io/each_line.rb +1 -1
  88. data/lib/backports/1.8.7/io/foreach.rb +1 -1
  89. data/lib/backports/1.8.7/io/getbyte.rb +1 -1
  90. data/lib/backports/1.8.7/io/readbyte.rb +1 -1
  91. data/lib/backports/1.8.7/kernel.rb +1 -1
  92. data/lib/backports/1.8.7/method.rb +1 -1
  93. data/lib/backports/1.8.7/method/name.rb +1 -1
  94. data/lib/backports/1.8.7/module.rb +1 -1
  95. data/lib/backports/1.8.7/module/module_exec.rb +1 -1
  96. data/lib/backports/1.8.7/numeric.rb +1 -1
  97. data/lib/backports/1.8.7/numeric/step.rb +1 -1
  98. data/lib/backports/1.8.7/object_space.rb +1 -1
  99. data/lib/backports/1.8.7/object_space/each_object.rb +1 -1
  100. data/lib/backports/1.8.7/process.rb +1 -1
  101. data/lib/backports/1.8.7/range.rb +1 -1
  102. data/lib/backports/1.8.7/range/each.rb +1 -1
  103. data/lib/backports/1.8.7/range/step.rb +1 -1
  104. data/lib/backports/1.8.7/regexp.rb +1 -1
  105. data/lib/backports/1.8.7/regexp/union.rb +1 -1
  106. data/lib/backports/1.8.7/stop_iteration.rb +2 -2
  107. data/lib/backports/1.8.7/string.rb +1 -1
  108. data/lib/backports/1.8.7/string/bytesize.rb +1 -1
  109. data/lib/backports/1.8.7/string/each.rb +1 -1
  110. data/lib/backports/1.8.7/string/each_byte.rb +1 -1
  111. data/lib/backports/1.8.7/string/each_char.rb +1 -1
  112. data/lib/backports/1.8.7/string/each_line.rb +1 -1
  113. data/lib/backports/1.8.7/string/partition.rb +2 -1
  114. data/lib/backports/1.8.7/string/rpartition.rb +1 -1
  115. data/lib/backports/1.8.7/string/upto.rb +1 -1
  116. data/lib/backports/1.8.7/struct.rb +1 -1
  117. data/lib/backports/1.8.7/struct/each.rb +1 -1
  118. data/lib/backports/1.8.7/struct/each_pair.rb +1 -1
  119. data/lib/backports/1.8.7/symbol.rb +1 -1
  120. data/lib/backports/1.9.1/array.rb +1 -1
  121. data/lib/backports/1.9.1/array/sample.rb +1 -1
  122. data/lib/backports/1.9.1/array/try_convert.rb +1 -1
  123. data/lib/backports/1.9.1/dir.rb +1 -1
  124. data/lib/backports/1.9.1/dir/to_path.rb +1 -1
  125. data/lib/backports/1.9.1/enumerable.rb +1 -1
  126. data/lib/backports/1.9.1/enumerable/each_with_index.rb +1 -1
  127. data/lib/backports/1.9.1/enumerator.rb +1 -1
  128. data/lib/backports/1.9.1/enumerator/new.rb +1 -1
  129. data/lib/backports/1.9.1/enumerator/with_object.rb +1 -1
  130. data/lib/backports/1.9.1/env.rb +1 -1
  131. data/lib/backports/1.9.1/env/key.rb +1 -1
  132. data/lib/backports/1.9.1/file.rb +1 -1
  133. data/lib/backports/1.9.1/file/atime.rb +1 -1
  134. data/lib/backports/1.9.1/file/basename.rb +1 -1
  135. data/lib/backports/1.9.1/file/blockdev.rb +1 -1
  136. data/lib/backports/1.9.1/file/chardev.rb +1 -1
  137. data/lib/backports/1.9.1/file/chmod.rb +1 -1
  138. data/lib/backports/1.9.1/file/chown.rb +1 -1
  139. data/lib/backports/1.9.1/file/ctime.rb +1 -1
  140. data/lib/backports/1.9.1/file/delete.rb +1 -1
  141. data/lib/backports/1.9.1/file/directory.rb +1 -1
  142. data/lib/backports/1.9.1/file/dirname.rb +1 -1
  143. data/lib/backports/1.9.1/file/executable.rb +1 -1
  144. data/lib/backports/1.9.1/file/executable_real.rb +1 -1
  145. data/lib/backports/1.9.1/file/exist.rb +1 -1
  146. data/lib/backports/1.9.1/file/exists.rb +1 -1
  147. data/lib/backports/1.9.1/file/expand_path.rb +1 -1
  148. data/lib/backports/1.9.1/file/extname.rb +1 -1
  149. data/lib/backports/1.9.1/file/file.rb +1 -1
  150. data/lib/backports/1.9.1/file/ftype.rb +1 -1
  151. data/lib/backports/1.9.1/file/grpowned.rb +1 -1
  152. data/lib/backports/1.9.1/file/join.rb +1 -1
  153. data/lib/backports/1.9.1/file/lchmod.rb +1 -1
  154. data/lib/backports/1.9.1/file/lchown.rb +1 -1
  155. data/lib/backports/1.9.1/file/link.rb +1 -1
  156. data/lib/backports/1.9.1/file/lstat.rb +1 -1
  157. data/lib/backports/1.9.1/file/mtime.rb +1 -1
  158. data/lib/backports/1.9.1/file/new.rb +1 -1
  159. data/lib/backports/1.9.1/file/open.rb +3 -2
  160. data/lib/backports/1.9.1/file/owned.rb +1 -1
  161. data/lib/backports/1.9.1/file/pipe.rb +1 -1
  162. data/lib/backports/1.9.1/file/readable.rb +1 -1
  163. data/lib/backports/1.9.1/file/readable_real.rb +1 -1
  164. data/lib/backports/1.9.1/file/readlink.rb +1 -1
  165. data/lib/backports/1.9.1/file/rename.rb +1 -1
  166. data/lib/backports/1.9.1/file/setgid.rb +1 -1
  167. data/lib/backports/1.9.1/file/setuid.rb +1 -1
  168. data/lib/backports/1.9.1/file/size.rb +1 -1
  169. data/lib/backports/1.9.1/file/socket.rb +1 -1
  170. data/lib/backports/1.9.1/file/split.rb +1 -1
  171. data/lib/backports/1.9.1/file/stat.rb +1 -1
  172. data/lib/backports/1.9.1/file/sticky.rb +1 -1
  173. data/lib/backports/1.9.1/file/symlink.rb +1 -1
  174. data/lib/backports/1.9.1/file/to_path.rb +1 -1
  175. data/lib/backports/1.9.1/file/truncate.rb +1 -1
  176. data/lib/backports/1.9.1/file/unlink.rb +1 -1
  177. data/lib/backports/1.9.1/file/writable.rb +1 -1
  178. data/lib/backports/1.9.1/file/writable_real.rb +1 -1
  179. data/lib/backports/1.9.1/file/zero.rb +1 -1
  180. data/lib/backports/1.9.1/float.rb +1 -1
  181. data/lib/backports/1.9.1/float/round.rb +2 -1
  182. data/lib/backports/1.9.1/hash.rb +1 -1
  183. data/lib/backports/1.9.1/hash/default_proc.rb +1 -1
  184. data/lib/backports/1.9.1/hash/key.rb +1 -1
  185. data/lib/backports/1.9.1/hash/try_convert.rb +1 -1
  186. data/lib/backports/1.9.1/integer.rb +1 -1
  187. data/lib/backports/1.9.1/integer/magnitude.rb +1 -1
  188. data/lib/backports/1.9.1/integer/round.rb +2 -1
  189. data/lib/backports/1.9.1/io.rb +1 -1
  190. data/lib/backports/1.9.1/io/binread.rb +1 -1
  191. data/lib/backports/1.9.1/io/open.rb +4 -2
  192. data/lib/backports/1.9.1/io/try_convert.rb +1 -1
  193. data/lib/backports/1.9.1/io/ungetbyte.rb +1 -1
  194. data/lib/backports/1.9.1/kernel.rb +1 -1
  195. data/lib/backports/1.9.1/kernel/require_relative.rb +1 -1
  196. data/lib/backports/1.9.1/math.rb +1 -1
  197. data/lib/backports/1.9.1/math/log.rb +2 -1
  198. data/lib/backports/1.9.1/numeric.rb +1 -1
  199. data/lib/backports/1.9.1/numeric/round.rb +2 -1
  200. data/lib/backports/1.9.1/proc.rb +1 -1
  201. data/lib/backports/1.9.1/proc/lambda.rb +1 -1
  202. data/lib/backports/1.9.1/proc/yield.rb +1 -1
  203. data/lib/backports/1.9.1/range.rb +1 -1
  204. data/lib/backports/1.9.1/range/cover.rb +1 -1
  205. data/lib/backports/1.9.1/regexp.rb +1 -1
  206. data/lib/backports/1.9.1/regexp/try_convert.rb +1 -1
  207. data/lib/backports/1.9.1/string.rb +1 -1
  208. data/lib/backports/1.9.1/string/each_codepoint.rb +1 -1
  209. data/lib/backports/1.9.1/string/getbyte.rb +1 -1
  210. data/lib/backports/1.9.1/string/setbyte.rb +1 -1
  211. data/lib/backports/1.9.1/string/try_convert.rb +1 -1
  212. data/lib/backports/1.9.1/symbol.rb +1 -1
  213. data/lib/backports/1.9.2/array.rb +1 -1
  214. data/lib/backports/1.9.2/array/product.rb +2 -1
  215. data/lib/backports/1.9.2/array/repeated_combination.rb +1 -1
  216. data/lib/backports/1.9.2/array/repeated_permutation.rb +1 -1
  217. data/lib/backports/1.9.2/array/rotate.rb +1 -1
  218. data/lib/backports/1.9.2/array/uniq.rb +2 -2
  219. data/lib/backports/1.9.2/complex.rb +1 -1
  220. data/lib/backports/1.9.2/dir.rb +1 -1
  221. data/lib/backports/1.9.2/enumerable.rb +1 -1
  222. data/lib/backports/1.9.2/enumerable/slice_before.rb +1 -1
  223. data/lib/backports/1.9.2/float.rb +1 -1
  224. data/lib/backports/1.9.2/hash.rb +1 -1
  225. data/lib/backports/1.9.2/kernel.rb +1 -1
  226. data/lib/backports/1.9.2/random.rb +1 -1
  227. data/lib/backports/1.9.3/file.rb +1 -1
  228. data/lib/backports/1.9.3/io.rb +1 -1
  229. data/lib/backports/1.9.3/io/advise.rb +1 -1
  230. data/lib/backports/1.9.3/io/binwrite.rb +1 -1
  231. data/lib/backports/1.9.3/io/write.rb +1 -1
  232. data/lib/backports/1.9.3/string.rb +1 -1
  233. data/lib/backports/1.9.3/string/byteslice.rb +1 -1
  234. data/lib/backports/1.9.3/string/prepend.rb +1 -1
  235. data/lib/backports/2.0.0/array.rb +1 -1
  236. data/lib/backports/2.0.0/enumerable.rb +1 -1
  237. data/lib/backports/2.0.0/enumerable/lazy.rb +1 -1
  238. data/lib/backports/2.0.0/enumerator.rb +1 -1
  239. data/lib/backports/2.0.0/env.rb +1 -1
  240. data/lib/backports/2.0.0/hash.rb +1 -1
  241. data/lib/backports/2.0.0/hash/default_proc.rb +1 -1
  242. data/lib/backports/2.0.0/nil.rb +1 -1
  243. data/lib/backports/2.0.0/range.rb +1 -1
  244. data/lib/backports/2.0.0/struct.rb +1 -1
  245. data/lib/backports/2.1.0/array.rb +1 -1
  246. data/lib/backports/2.1.0/bignum.rb +1 -1
  247. data/lib/backports/2.1.0/enumerable.rb +1 -1
  248. data/lib/backports/2.1.0/enumerable/to_h.rb +1 -1
  249. data/lib/backports/2.1.0/fixnum.rb +1 -1
  250. data/lib/backports/2.1.0/module.rb +1 -1
  251. data/lib/backports/force/enumerable_map.rb +1 -0
  252. data/lib/backports/force/hash_select.rb +1 -0
  253. data/lib/backports/random/MT19937.rb +78 -0
  254. data/lib/backports/random/bits_and_bytes.rb +93 -0
  255. data/lib/backports/random/implementation.rb +94 -0
  256. data/lib/backports/random/load.rb +17 -0
  257. data/lib/backports/std_lib.rb +24 -0
  258. data/lib/backports/tools.rb +2 -357
  259. data/lib/backports/tools/alias_method.rb +8 -0
  260. data/lib/backports/tools/alias_method_chain.rb +26 -0
  261. data/lib/backports/tools/arguments.rb +69 -0
  262. data/lib/backports/tools/extreme_object.rb +12 -0
  263. data/lib/backports/tools/io.rb +57 -0
  264. data/lib/backports/tools/make_block_optional.rb +43 -0
  265. data/lib/backports/tools/path.rb +55 -0
  266. data/lib/backports/tools/require_relative_dir.rb +13 -0
  267. data/lib/backports/tools/std_lib.rb +59 -0
  268. data/lib/backports/tools/suppress_verbose_warnings.rb +9 -0
  269. data/lib/backports/version.rb +1 -1
  270. data/spec/tags/1.8.7/core/module/include_spec.rb +3 -0
  271. metadata +45 -52
  272. data/lib/backports/extra/random/MT19937.rb +0 -76
  273. data/lib/backports/extra/random/bits_and_bytes.rb +0 -91
  274. data/lib/backports/extra/random/implementation.rb +0 -93
  275. data/lib/backports/extra/random/load.rb +0 -17
@@ -0,0 +1,8 @@
1
+ module Backports
2
+ # Safe alias_method that will only alias if the source exists and destination doesn't
3
+ def self.alias_method(mod, new_name, old_name)
4
+ mod.instance_eval do
5
+ alias_method new_name, old_name
6
+ end if mod.method_defined?(old_name) && !mod.method_defined?(new_name)
7
+ end
8
+ end
@@ -0,0 +1,26 @@
1
+ module Backports
2
+ # Modified to avoid polluting Module if so desired
3
+ # (from Rails)
4
+ def self.alias_method_chain(mod, target, feature)
5
+ mod.class_eval do
6
+ # Strip out punctuation on predicates or bang methods since
7
+ # e.g. target?_without_feature is not a valid method name.
8
+ aliased_target, punctuation = target.to_s.sub(/([?!=])$/, ''), $1
9
+ yield(aliased_target, punctuation) if block_given?
10
+
11
+ with_method, without_method = "#{aliased_target}_with_#{feature}#{punctuation}", "#{aliased_target}_without_#{feature}#{punctuation}"
12
+
13
+ alias_method without_method, target
14
+ alias_method target, with_method
15
+
16
+ case
17
+ when public_method_defined?(without_method)
18
+ public target
19
+ when protected_method_defined?(without_method)
20
+ protected target
21
+ when private_method_defined?(without_method)
22
+ private target
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,69 @@
1
+ module Backports
2
+ # Helper method to coerce a value into a specific class.
3
+ # Raises a TypeError if the coercion fails or the returned value
4
+ # is not of the right class.
5
+ # (from Rubinius)
6
+ def self.coerce_to(obj, cls, meth)
7
+ return obj if obj.kind_of?(cls)
8
+
9
+ begin
10
+ ret = obj.__send__(meth)
11
+ rescue Exception => e
12
+ raise TypeError, "Coercion error: #{obj.inspect}.#{meth} => #{cls} failed:\n" \
13
+ "(#{e.message})"
14
+ end
15
+ raise TypeError, "Coercion error: obj.#{meth} did NOT return a #{cls} (was #{ret.class})" unless ret.kind_of? cls
16
+ ret
17
+ end
18
+
19
+ def self.coerce_to_int(obj)
20
+ coerce_to(obj, Integer, :to_int)
21
+ end
22
+
23
+ def self.coerce_to_ary(obj)
24
+ coerce_to(obj, Array, :to_ary)
25
+ end
26
+
27
+ def self.coerce_to_str(obj)
28
+ coerce_to(obj, String, :to_str)
29
+ end
30
+
31
+ def self.coerce_to_hash(obj)
32
+ coerce_to(obj, Hash, :to_hash)
33
+ end
34
+
35
+ def self.coerce_to_options(obj, *options)
36
+ hash = coerce_to_hash(obj)
37
+ hash.values_at(*options)
38
+ end
39
+
40
+ def self.coerce_to_option(obj, option)
41
+ coerce_to_options(obj, option)[0]
42
+ end
43
+
44
+ def self.is_array?(obj)
45
+ coerce_to(obj, Array, :to_ary) if obj.respond_to? :to_ary
46
+ end
47
+
48
+ def self.try_convert(obj, cls, meth)
49
+ return obj if obj.kind_of?(cls)
50
+ return nil unless obj.respond_to?(meth)
51
+ ret = obj.__send__(meth)
52
+ raise TypeError, "Coercion error: obj.#{meth} did NOT return a #{cls} (was #{ret.class})" unless ret.nil? || ret.kind_of?(cls)
53
+ ret
54
+ end
55
+
56
+ # Checks for a failed comparison (in which case it throws an ArgumentError)
57
+ # Additionally, it maps any negative value to -1 and any positive value to +1
58
+ # (from Rubinius)
59
+ def self.coerce_to_comparison(a, b, cmp = (a <=> b))
60
+ raise ArgumentError, "comparison of #{a} with #{b} failed" if cmp.nil?
61
+ return 1 if cmp > 0
62
+ return -1 if cmp < 0
63
+ 0
64
+ end
65
+
66
+ # Used internally to make it easy to deal with optional arguments
67
+ # (from Rubinius)
68
+ Undefined = Object.new
69
+ end
@@ -0,0 +1,12 @@
1
+ module Backports
2
+ MOST_EXTREME_OBJECT_EVER = Object.new # :nodoc:
3
+ class << MOST_EXTREME_OBJECT_EVER
4
+ def < (whatever)
5
+ true
6
+ end
7
+
8
+ def > (whatever)
9
+ true
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,57 @@
1
+ require 'backports/tools/arguments'
2
+ module Backports
3
+ # Used internally to combine {IO|File} options hash into mode (String or Integer)
4
+ def self.combine_mode_and_option(mode = nil, options = Backports::Undefined)
5
+ # Can't backport autoclose, {internal|external|}encoding
6
+ mode, options = nil, mode if mode.respond_to?(:to_hash) && options == Backports::Undefined
7
+ options = {} if options == nil || options == Backports::Undefined
8
+ options = coerce_to_hash(options)
9
+ if mode && options[:mode]
10
+ raise ArgumentError, "mode specified twice"
11
+ end
12
+ mode ||= options[:mode] || "r"
13
+ mode = try_convert(mode, String, :to_str) || try_convert(mode, Integer, :to_int) || mode
14
+ if options[:textmode] || options[:binmode]
15
+ text = options[:textmode] || (mode.is_a?(String) && mode =~ /t/)
16
+ bin = options[:binmode] || (mode.is_a?(String) ? mode =~ /b/ : mode & File::Constants::BINARY != 0)
17
+ if text && bin
18
+ raise ArgumentError, "both textmode and binmode specified"
19
+ end
20
+ case
21
+ when !options[:binmode]
22
+ when mode.is_a?(String)
23
+ mode.insert(1, "b")
24
+ else
25
+ mode |= File::Constants::BINARY
26
+ end
27
+ end
28
+ mode
29
+ end
30
+
31
+ # Used internally to combine {IO|File} options hash into mode (String or Integer) and perm
32
+ def self.combine_mode_perm_and_option(mode = nil, perm = Backports::Undefined, options = Backports::Undefined)
33
+ mode, options = nil, mode if mode.respond_to?(:to_hash) && perm == Backports::Undefined
34
+ perm, options = nil, perm if perm.respond_to?(:to_hash) && options == Backports::Undefined
35
+ perm = nil if perm == Backports::Undefined
36
+ options = {} if options == Backports::Undefined
37
+ options = coerce_to_hash(options)
38
+ if perm && options[:perm]
39
+ raise ArgumentError, "perm specified twice"
40
+ end
41
+ [combine_mode_and_option(mode, options), perm || options[:perm]]
42
+ end
43
+
44
+ def self.write(binary, filename, string, offset, options)
45
+ offset, options = nil, offset if offset.respond_to?(:to_hash) && options == Backports::Undefined
46
+ options = {} if options == Backports::Undefined
47
+ options = coerce_to_hash(options)
48
+ File.open(filename, 'a+'){} if offset # insure existence
49
+ options = {:mode => offset.nil? ? "w" : "r+"}.merge(options)
50
+ args = options[:open_args] || [options]
51
+ File.open(filename, *Backports.combine_mode_perm_and_option(*args)) do |f|
52
+ f.binmode if binary && f.respond_to?(:binmode)
53
+ f.seek(offset) unless offset.nil?
54
+ f.write(string)
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,43 @@
1
+ require 'backports/tools/alias_method_chain'
2
+
3
+ module Backports
4
+ # Metaprogramming utility to make block optional.
5
+ # Tests first if block is already optional when given options
6
+ def self.make_block_optional(mod, *methods)
7
+ mod = class << mod; self; end unless mod.is_a? Module
8
+ options = methods.last.is_a?(Hash) ? methods.pop : {}
9
+ methods.each do |selector|
10
+ unless mod.method_defined? selector
11
+ warn "#{mod}##{selector} is not defined, so block can't be made optional"
12
+ next
13
+ end
14
+ unless options[:force]
15
+ # Check if needed
16
+ test_on = options.fetch(:test_on)
17
+ result = begin
18
+ test_on.send(selector, *options.fetch(:arg, []))
19
+ rescue LocalJumpError
20
+ false
21
+ end
22
+ next if result.class.name =~ /Enumerator$/
23
+ end
24
+ require 'enumerator'
25
+ arity = mod.instance_method(selector).arity
26
+ last_arg = []
27
+ if arity < 0
28
+ last_arg = ["*rest"]
29
+ arity = -1-arity
30
+ end
31
+ arg_sequence = ((0...arity).map{|i| "arg_#{i}"} + last_arg + ["&block"]).join(", ")
32
+
33
+ alias_method_chain(mod, selector, :optional_block) do |aliased_target, punctuation|
34
+ mod.module_eval <<-end_eval, __FILE__, __LINE__ + 1
35
+ def #{aliased_target}_with_optional_block#{punctuation}(#{arg_sequence})
36
+ return to_enum(:#{aliased_target}_without_optional_block#{punctuation}, #{arg_sequence}) unless block_given?
37
+ #{aliased_target}_without_optional_block#{punctuation}(#{arg_sequence})
38
+ end
39
+ end_eval
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,55 @@
1
+ require 'backports/tools/alias_method_chain'
2
+ require 'backports/tools/arguments'
3
+
4
+ module Backports
5
+ # Metaprogramming utility to convert the first file argument to path
6
+ def self.convert_first_argument_to_path(klass, selector)
7
+ mod = class << klass; self; end
8
+ unless mod.method_defined? selector
9
+ warn "#{mod}##{selector} is not defined, so argument can't converted to path"
10
+ return
11
+ end
12
+ arity = mod.instance_method(selector).arity
13
+ last_arg = []
14
+ if arity < 0
15
+ last_arg = ["*rest"]
16
+ arity = -1-arity
17
+ end
18
+ arg_sequence = (["file"] + (1...arity).map{|i| "arg_#{i}"} + last_arg + ["&block"]).join(", ")
19
+
20
+ alias_method_chain(mod, selector, :potential_path_argument) do |aliased_target, punctuation|
21
+ mod.module_eval <<-end_eval, __FILE__, __LINE__ + 1
22
+ def #{aliased_target}_with_potential_path_argument#{punctuation}(#{arg_sequence})
23
+ file = Backports.convert_path(file)
24
+ #{aliased_target}_without_potential_path_argument#{punctuation}(#{arg_sequence})
25
+ end
26
+ end_eval
27
+ end
28
+ end
29
+
30
+ # Metaprogramming utility to convert all file arguments to paths
31
+ def self.convert_all_arguments_to_path(klass, selector, skip)
32
+ mod = class << klass; self; end
33
+ unless mod.method_defined? selector
34
+ warn "#{mod}##{selector} is not defined, so arguments can't converted to path"
35
+ return
36
+ end
37
+ first_args = (1..skip).map{|i| "arg_#{i}"}.join(",") + (skip > 0 ? "," : "")
38
+ alias_method_chain(mod, selector, :potential_path_arguments) do |aliased_target, punctuation|
39
+ mod.module_eval <<-end_eval, __FILE__, __LINE__ + 1
40
+ def #{aliased_target}_with_potential_path_arguments#{punctuation}(#{first_args}*files, &block)
41
+ files = files.map{|f| Backports.convert_path(f) }
42
+ #{aliased_target}_without_potential_path_arguments#{punctuation}(#{first_args}*files, &block)
43
+ end
44
+ end_eval
45
+ end
46
+ end
47
+
48
+ def self.convert_path(path)
49
+ try_convert(path, IO, :to_io) ||
50
+ begin
51
+ path = path.to_path if path.respond_to?(:to_path)
52
+ try_convert(path, String, :to_str) || path
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,13 @@
1
+ module Backports
2
+ def self.require_relative_dir
3
+ dir = caller.first.split(/\.rb:\d/,2).first
4
+ short_path = dir[/.*(backports\/.*)/, 1] << '/'
5
+ Dir.entries(dir).
6
+ map{|f| Regexp.last_match(1) if /^(.*)\.rb$/ =~ f}.
7
+ compact.
8
+ sort.
9
+ each do |f|
10
+ require short_path + f
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,59 @@
1
+ module Backports
2
+ module StdLib
3
+ class LoadedFeatures
4
+ if RUBY_VERSION >= "1.9"
5
+ # Full paths are recorded in $LOADED_FEATURES.
6
+ @@our_loads = {}
7
+ # Check loaded features for one that matches "#{any of the load path}/#{feature}"
8
+ def include?(feature)
9
+ return true if @@our_loads[feature]
10
+ # Assume backported features are Ruby libraries (i.e. not C)
11
+ @loaded ||= $LOADED_FEATURES.group_by{|p| File.basename(p, ".rb")}
12
+ if fullpaths = @loaded[File.basename(feature, ".rb")]
13
+ fullpaths.any?{|fullpath|
14
+ base_dir, = fullpath.partition("/#{feature}")
15
+ $LOAD_PATH.include?(base_dir)
16
+ }
17
+ end
18
+ end
19
+
20
+ def self.mark_as_loaded(feature)
21
+ @@our_loads[feature] = true
22
+ # Nothing to do, the full path will be OK
23
+ end
24
+
25
+ else
26
+ # Requested features are recorded in $LOADED_FEATURES
27
+ def include?(feature)
28
+ # Assume backported features are Ruby libraries (i.e. not C)
29
+ $LOADED_FEATURES.include?("#{File.basename(feature, '.rb')}.rb")
30
+ end
31
+
32
+ def self.mark_as_loaded(feature)
33
+ $LOADED_FEATURES << "#{File.basename(feature, '.rb')}.rb"
34
+ end
35
+ end
36
+ end
37
+
38
+ class << self
39
+ attr_accessor :extended_lib
40
+
41
+ def extend_relative relative_dir="stdlib"
42
+ loaded = Backports::StdLib::LoadedFeatures.new
43
+ dir = File.expand_path(relative_dir, File.dirname(caller.first.split(/:\d/,2).first))
44
+ Dir.entries(dir).
45
+ map{|f| Regexp.last_match(1) if /^(.*)\.rb$/ =~ f}.
46
+ compact.
47
+ each do |f|
48
+ path = File.expand_path(f, dir)
49
+ if loaded.include?(f)
50
+ require path
51
+ else
52
+ @extended_lib[f] << path
53
+ end
54
+ end
55
+ end
56
+ end
57
+ self.extended_lib ||= Hash.new{|h, k| h[k] = []}
58
+ end
59
+ end
@@ -0,0 +1,9 @@
1
+ module Backports
2
+ def self.suppress_verbose_warnings
3
+ before = $VERBOSE
4
+ $VERBOSE = false if $VERBOSE # Set to false (default warning) but not nil (no warnings)
5
+ yield
6
+ ensure
7
+ $VERBOSE = before
8
+ end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module Backports
2
- VERSION = "3.6.0" unless const_defined? :VERSION # the guard is against a redefinition warning that happens on Travis
2
+ VERSION = "3.6.1" unless const_defined? :VERSION # the guard is against a redefinition warning that happens on Travis
3
3
  end
@@ -0,0 +1,3 @@
1
+ fails:Module#include imports constants to modules and classes
2
+ fails:Module#include imports instance methods to modules and classes
3
+ fails:Module#include does not import methods to modules and classes
metadata CHANGED
@@ -1,38 +1,28 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: backports
3
- version: !ruby/object:Gem::Version
4
- hash: 31
5
- prerelease:
6
- segments:
7
- - 3
8
- - 6
9
- - 0
10
- version: 3.6.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.6.1
11
5
  platform: ruby
12
- authors:
13
- - "Marc-Andr\xC3\xA9 Lafortune"
6
+ authors:
7
+ - Marc-André Lafortune
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2014-02-15 00:00:00 Z
11
+ date: 2014-09-20 00:00:00.000000000 Z
19
12
  dependencies: []
20
-
21
- description: Essential backports that enable many of the nice features of Ruby 1.8.7 up to 2.0.0 for earlier versions.
22
- email:
13
+ description: Essential backports that enable many of the nice features of Ruby 1.8.7
14
+ up to 2.1.0 for earlier versions.
15
+ email:
23
16
  - github@marc-andre.ca
24
17
  executables: []
25
-
26
18
  extensions: []
27
-
28
19
  extra_rdoc_files: []
29
-
30
- files:
31
- - .document
32
- - .gitignore
33
- - .gitmodules
34
- - .irbrc
35
- - .travis.yml
20
+ files:
21
+ - ".document"
22
+ - ".gitignore"
23
+ - ".gitmodules"
24
+ - ".irbrc"
25
+ - ".travis.yml"
36
26
  - CHANGELOG.rdoc
37
27
  - Gemfile
38
28
  - Gemfile.lock
@@ -410,10 +400,6 @@ files:
410
400
  - lib/backports/2.1.0/module/include.rb
411
401
  - lib/backports/2.1.rb
412
402
  - lib/backports/basic_object.rb
413
- - lib/backports/extra/random/MT19937.rb
414
- - lib/backports/extra/random/bits_and_bytes.rb
415
- - lib/backports/extra/random/implementation.rb
416
- - lib/backports/extra/random/load.rb
417
403
  - lib/backports/force/array_map.rb
418
404
  - lib/backports/force/enumerable_map.rb
419
405
  - lib/backports/force/hash_select.rb
@@ -426,7 +412,22 @@ files:
426
412
  - lib/backports/rails/kernel.rb
427
413
  - lib/backports/rails/module.rb
428
414
  - lib/backports/rails/string.rb
415
+ - lib/backports/random/MT19937.rb
416
+ - lib/backports/random/bits_and_bytes.rb
417
+ - lib/backports/random/implementation.rb
418
+ - lib/backports/random/load.rb
419
+ - lib/backports/std_lib.rb
429
420
  - lib/backports/tools.rb
421
+ - lib/backports/tools/alias_method.rb
422
+ - lib/backports/tools/alias_method_chain.rb
423
+ - lib/backports/tools/arguments.rb
424
+ - lib/backports/tools/extreme_object.rb
425
+ - lib/backports/tools/io.rb
426
+ - lib/backports/tools/make_block_optional.rb
427
+ - lib/backports/tools/path.rb
428
+ - lib/backports/tools/require_relative_dir.rb
429
+ - lib/backports/tools/std_lib.rb
430
+ - lib/backports/tools/suppress_verbose_warnings.rb
430
431
  - lib/backports/version.rb
431
432
  - set_version/1.8.7.rb
432
433
  - set_version/1.9.1.rb
@@ -525,6 +526,7 @@ files:
525
526
  - spec/tags/1.8.7/core/kernel/require_relative_spec.rb
526
527
  - spec/tags/1.8.7/core/math/log2_spec.rb
527
528
  - spec/tags/1.8.7/core/math/log_spec.rb
529
+ - spec/tags/1.8.7/core/module/include_spec.rb
528
530
  - spec/tags/1.8.7/core/proc/curry_spec.rb
529
531
  - spec/tags/1.8.7/core/proc/yield_spec.rb
530
532
  - spec/tags/1.8.7/core/range/size_spec.rb
@@ -551,38 +553,28 @@ files:
551
553
  - test/test_helper.rb
552
554
  homepage: http://github.com/marcandre/backports
553
555
  licenses: []
554
-
556
+ metadata: {}
555
557
  post_install_message:
556
558
  rdoc_options: []
557
-
558
- require_paths:
559
+ require_paths:
559
560
  - lib
560
- required_ruby_version: !ruby/object:Gem::Requirement
561
- none: false
562
- requirements:
561
+ required_ruby_version: !ruby/object:Gem::Requirement
562
+ requirements:
563
563
  - - ">="
564
- - !ruby/object:Gem::Version
565
- hash: 3
566
- segments:
567
- - 0
568
- version: "0"
569
- required_rubygems_version: !ruby/object:Gem::Requirement
570
- none: false
571
- requirements:
564
+ - !ruby/object:Gem::Version
565
+ version: '0'
566
+ required_rubygems_version: !ruby/object:Gem::Requirement
567
+ requirements:
572
568
  - - ">="
573
- - !ruby/object:Gem::Version
574
- hash: 3
575
- segments:
576
- - 0
577
- version: "0"
569
+ - !ruby/object:Gem::Version
570
+ version: '0'
578
571
  requirements: []
579
-
580
572
  rubyforge_project:
581
- rubygems_version: 1.8.25
573
+ rubygems_version: 2.2.2
582
574
  signing_key:
583
- specification_version: 3
575
+ specification_version: 4
584
576
  summary: Backports of Ruby features for older Ruby.
585
- test_files:
577
+ test_files:
586
578
  - spec/tags/1.8.6/core/argf/each_line_spec.rb
587
579
  - spec/tags/1.8.6/core/argf/each_spec.rb
588
580
  - spec/tags/1.8.6/core/argf/lines_spec.rb
@@ -673,6 +665,7 @@ test_files:
673
665
  - spec/tags/1.8.7/core/kernel/require_relative_spec.rb
674
666
  - spec/tags/1.8.7/core/math/log2_spec.rb
675
667
  - spec/tags/1.8.7/core/math/log_spec.rb
668
+ - spec/tags/1.8.7/core/module/include_spec.rb
676
669
  - spec/tags/1.8.7/core/proc/curry_spec.rb
677
670
  - spec/tags/1.8.7/core/proc/yield_spec.rb
678
671
  - spec/tags/1.8.7/core/range/size_spec.rb