backports 3.6.0 → 3.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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