backports 3.17.2 → 3.20.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +52 -1
  3. data/Gemfile +3 -16
  4. data/README.md +31 -11
  5. data/backports.gemspec +1 -1
  6. data/lib/backports/1.8.7.rb +5 -4
  7. data/lib/backports/1.9.1.rb +6 -1
  8. data/lib/backports/1.9.2.rb +6 -1
  9. data/lib/backports/1.9.3.rb +6 -1
  10. data/lib/backports/2.0.0.rb +7 -2
  11. data/lib/backports/2.1.0.rb +2 -2
  12. data/lib/backports/2.2.0.rb +2 -2
  13. data/lib/backports/2.2.0/string/unicode_normalize.rb +3 -3
  14. data/lib/backports/2.3.0.rb +2 -2
  15. data/lib/backports/2.3.0/queue/close.rb +48 -0
  16. data/lib/backports/2.3.0/string.rb +3 -0
  17. data/lib/backports/2.4.0.rb +2 -2
  18. data/lib/backports/2.4.0/bignum.rb +3 -0
  19. data/lib/backports/2.4.0/bignum/dup.rb +5 -0
  20. data/lib/backports/2.5.0.rb +2 -2
  21. data/lib/backports/2.5.0/hash/transform_keys.rb +10 -3
  22. data/lib/backports/2.5.0/integer/sqrt.rb +1 -1
  23. data/lib/backports/2.5.0/string/undump.rb +2 -2
  24. data/lib/backports/2.5.rb +1 -1
  25. data/lib/backports/2.6.0.rb +3 -3
  26. data/lib/backports/2.6.0/enumerable/chain.rb +2 -0
  27. data/lib/backports/2.6.rb +1 -1
  28. data/lib/backports/2.7.0.rb +3 -3
  29. data/lib/backports/3.0.0.rb +3 -0
  30. data/lib/backports/3.0.0/env.rb +3 -0
  31. data/lib/backports/3.0.0/env/except.rb +10 -0
  32. data/lib/backports/3.0.0/hash.rb +3 -0
  33. data/lib/backports/3.0.0/hash/except.rb +10 -0
  34. data/lib/backports/3.0.0/hash/transform_keys.rb +48 -0
  35. data/lib/backports/3.0.0/ractor.rb +5 -0
  36. data/lib/backports/3.0.0/symbol.rb +3 -0
  37. data/lib/backports/3.0.0/symbol/name.rb +11 -0
  38. data/lib/backports/3.0.rb +1 -0
  39. data/lib/backports/ractor/cloner.rb +91 -0
  40. data/lib/backports/ractor/errors.rb +16 -0
  41. data/lib/backports/ractor/queues.rb +62 -0
  42. data/lib/backports/ractor/ractor.rb +238 -0
  43. data/lib/backports/ractor/sharing.rb +93 -0
  44. data/lib/backports/tools/filtered_queue.rb +202 -0
  45. data/lib/backports/tools/require_relative_dir.rb +6 -1
  46. data/lib/backports/version.rb +1 -1
  47. metadata +27 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 77d77c662b8e40db4b16b6fbb89ae0a74b5ff93d01acfe1f9c574917b02f43c2
4
- data.tar.gz: 8ce23ad7bc6f156fd73cfa64eb35124fbd3917d1f011c205fc92e4dab186b95a
3
+ metadata.gz: b3d95602bc2a5f1d8835d424036e6d51671baa7c8d46f4482c61b6519044d493
4
+ data.tar.gz: '059fa80520c54c368ad38f6477bbb2b9debe734970b0e007ba04be2b37c0138f'
5
5
  SHA512:
6
- metadata.gz: b4814133cc833ff82f446da2b7ee5ced25c026c07cc9701816dec8e3b50a6453e8bf2d2dd8d2c66ffc676f5e2095df9e69f9a8adc23bea0ee1050696d7022a21
7
- data.tar.gz: c0ae89749290bfee6407f74f8527efbcbc5533ce8fa99e16e281aa861d8694540a5effe0f54f171803c9e29ccf98ec323512ed481d489fce0d7b80bd75fb6a9f
6
+ metadata.gz: 0b4031dc752ebb19df160368c272e37b0bf9a939288ccccc9d5043567efed030d157d2da1668ec0787216ab05f730b3ff8d7c23b78a5e2400719cd5183232a69
7
+ data.tar.gz: c92bbe1f69c27f5ed6e18162e8fe96665a9828480bd2c10a13750f1b8190db53a0ef25b2009f2414cb3d193e22c0810b12a259ef84d079bac6f53dde9aafcd96
@@ -6,7 +6,58 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
- Note: [Next major version (X-mas 2020)](https://github.com/marcandre/backports/issues/139) will drop support for Ruby < 2.2.
9
+ Note: [Next major version (X-mas 2021?)](https://github.com/marcandre/backports/issues/139) may drop support for Ruby < 2.2, please comment.
10
+
11
+ ## [3.20.0](https://github.com/marcandre/backports/compare/v3.19.0...v3.20.0) - 2020-12-30
12
+
13
+ ### Added
14
+
15
+ Ractor backport (all methods)
16
+
17
+ ## [3.19.0](https://github.com/marcandre/backports/compare/v3.18.2...v3.19.0) - 2020-12-28
18
+
19
+ ### Added
20
+
21
+ * Ruby 3.0 backports
22
+
23
+ * Env
24
+ * `except`
25
+
26
+ * Hash
27
+ * `except`
28
+ * `transform_keys`, `transform_keys!` (with hash argument)
29
+
30
+ * Symbol
31
+ * `name`
32
+
33
+ * Ruby 2.3 backports
34
+
35
+ * Queue
36
+ * `close`, `closed?` (affects `push`, `pop` and aliases)
37
+
38
+ ## [3.18.2](https://github.com/marcandre/backports/compare/v3.18.0...v3.18.2) - 2020-08-26
39
+
40
+ ### Fixed
41
+
42
+ Require per ruby version now properly requiring 2.3.0 backports for `String` [#152]
43
+
44
+ ## [3.18.1](https://github.com/marcandre/backports/compare/v3.18.1...v3.18.2) - 2020-06-22
45
+
46
+ ### Fixed
47
+
48
+ Fixed Changelog URI in gem manifest
49
+
50
+ ## [3.18.0](https://github.com/marcandre/backports/compare/v3.17.2...v3.18.0) - 2020-06-22
51
+
52
+ ### Changed
53
+
54
+ Require per ruby version / all requires now check `RUBY_VERSION` to be more efficient [#149]
55
+
56
+ ## [3.17.2](https://github.com/marcandre/backports/compare/v3.17.1...v3.17.2) - 2020-04-09
57
+
58
+ ### Fixed
59
+
60
+ Fix Range#cover (Ruby 2.6.0) [#148]
10
61
 
11
62
  ## [3.17.1](https://github.com/marcandre/backports/compare/v3.17.0...v3.17.1) - 2020-04-09
12
63
 
data/Gemfile CHANGED
@@ -1,29 +1,16 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- # Declare your gem's dependencies in backports.gemspec.
4
- # Bundler will treat runtime dependencies like base dependencies, and
5
- # development dependencies will be added by default to the :development group.
6
3
  gemspec
7
4
 
8
- # jquery-rails is used by the dummy application
9
5
  group :test do
10
6
  gem "rake"
11
7
  gem 'mspec'
12
8
  gem 'activesupport', '~>3.2.0'
13
- gem 'minitest', '< 5.0.0', :require => false
14
- gem 'test-unit', '~>2.1.1.0'
9
+ gem 'test-unit'
15
10
  end
16
11
 
17
- if RUBY_VERSION >= '2.3.0'
12
+ if RUBY_VERSION >= '2.4.0'
18
13
  group :development do
19
- gem 'rubocop', '~> 0.80.0'
14
+ gem 'rubocop', '~> 1.6.0'
20
15
  end
21
16
  end
22
-
23
- # Declare any dependencies that are still in development here instead of in
24
- # your gemspec. These might include edge Rails or gems from your path or
25
- # Git. Remember to move these dependencies to your gemspec before releasing
26
- # your gem to rubygems.org.
27
-
28
- # To use debugger
29
- # gem 'ruby-debug19', :require => 'ruby-debug'
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Backports Library [<img src="https://travis-ci.org/marcandre/backports.svg?branch=master">](https://travis-ci.org/marcandre/backports) [<img src="https://badge.fury.io/rb/backports.svg" alt="Gem Version" />](http://badge.fury.io/rb/backports) [![Tidelift](https://tidelift.com/badges/package/rubygems/backports)](https://tidelift.com/subscription/pkg/rubygems-backports?utm_source=rubygems-backports&utm_medium=referral&utm_campaign=readme)
2
2
 
3
- Yearning to use some of the new cool features in Ruby 2.7 while using 2.3.x?
3
+ Yearning to use write a gem using some new cool features in Ruby 3.0 while
4
+ still supporting Ruby 2.5.x?
4
5
  Have some legacy code in Ruby 1.8 but can't live without `flat_map`?
5
6
 
6
7
  This gem is for you!
@@ -9,20 +10,20 @@ The goal of 'backports' is to make it easier to write ruby code that runs
9
10
  across different versions of Ruby.
10
11
 
11
12
  Note: [Next major version (X-mas
12
- 2020)](https://github.com/marcandre/backports/issues/139) will drop support
13
+ 2021?)](https://github.com/marcandre/backports/issues/139) may drop support
13
14
  for Ruby < 2.2.
14
15
 
15
16
  ## Loading backports
16
17
 
17
18
  ### Explicitly (recommended)
18
19
 
19
- For example, if you want to use transform_values and transform_keys, even in
20
+ For example, if you want to use `transform_values` and `transform_keys`, even in
20
21
  Ruby implementations that don't include it:
21
22
 
22
23
  require 'backports/2.4.0/hash/transform_values'
23
24
  require 'backports/2.5.0/hash/transform_keys'
24
25
 
25
- This will enable Hash#transform_values and Hash#transform_keys, using the
26
+ This will enable `Hash#transform_values` and `Hash#transform_keys`, using the
26
27
  native versions if available or otherwise provide a pure Ruby version.
27
28
 
28
29
  ### By Module
@@ -32,19 +33,17 @@ Class:
32
33
 
33
34
  require 'backports/2.3.0/hash'
34
35
 
35
- This will make sure that Hash responds to dig, fetch_values, <, <=, >, >= and
36
- to_proc
36
+ This will make sure that Hash responds to `dig`, `fetch_values`, `to_proc` and comparisons.
37
37
 
38
38
  ### Up to a specific Ruby version (for quick coding)
39
39
 
40
40
  You can load all backports up to a specific version.
41
- For example, to bring any
42
- version of Ruby mostly up to Ruby 2.7.0's standards:
41
+ For example, to bring any version of Ruby mostly up to Ruby 3.0.0's standards:
43
42
 
44
- require 'backports/2.7.0'
43
+ require 'backports/3.0.0'
45
44
 
46
45
  This will bring in all the features of 1.8.7 and many features of Ruby 1.9.x
47
- all the way up to Ruby 2.7.0 (for all versions of Ruby)!
46
+ all the way up to Ruby 3.0.0 (for all versions of Ruby)!
48
47
 
49
48
  You may `require 'backports/latest'` as a
50
49
  shortcut to the latest Ruby version supported.
@@ -109,6 +108,24 @@ itself, JRuby and Rubinius.
109
108
 
110
109
  # Complete List of backports
111
110
 
111
+ ## Ruby 3.0 backports
112
+
113
+ #### Env
114
+ - `except`
115
+
116
+ #### Hash
117
+ - `except`
118
+ - `transform_keys`, `transform_keys!` (with hash argument)
119
+
120
+ #### Ractor
121
+ - All methods, with the caveats:
122
+ - uses Ruby's `Thread` internally
123
+ - will not raise some errors when `Ractor` would (in particular `Ractor::IsolationError`)
124
+ - supported in Ruby 2.0+ only
125
+
126
+ #### Symbol
127
+ - `name`
128
+
112
129
  ## Ruby 2.7 backports
113
130
 
114
131
  #### Array
@@ -206,13 +223,16 @@ itself, JRuby and Rubinius.
206
223
  - `compact`, `compact!`
207
224
  - `transform_values`, `transform_values!`
208
225
 
226
+ #### Queue
227
+ - `close`, `closed?`
228
+
209
229
  #### Regexp
210
230
  - `match?`
211
231
 
212
232
  #### String
213
233
  - `match?`
214
234
 
215
- #### FalseClass, Fixnum, Float, NilClass, TrueClass
235
+ #### FalseClass, Fixnum, Bignum, Float, NilClass, TrueClass
216
236
  - `dup`
217
237
 
218
238
  ## Ruby 2.3 backports
@@ -23,7 +23,7 @@ Gem::Specification.new do |gem|
23
23
  gem.require_paths = ["lib"]
24
24
 
25
25
  if gem.respond_to?(:metadata)
26
- gem.metadata['changelog_uri'] = 'https://github.com/marcandre/backports/blob/master/CHANGELOG.rdoc'
26
+ gem.metadata['changelog_uri'] = 'https://github.com/marcandre/backports/blob/master/CHANGELOG.md'
27
27
  gem.metadata['source_code_uri'] = 'https://github.com/marcandre/backports'
28
28
  gem.metadata['bug_tracker_uri'] = 'https://github.com/marcandre/backports/issues'
29
29
  end
@@ -5,7 +5,8 @@ require "backports/tools/deprecation"
5
5
  Backports.frown_upon :require_version,
6
6
  'Requiring backports/<ruby version> is not recommended in production. Require just the needed backports instead.'
7
7
 
8
- Backports.warned[:require_std_lib] = true
9
- require "backports/std_lib"
10
-
11
- Backports.require_relative_dir
8
+ if RUBY_VERSION < '1.8.7'
9
+ Backports.warned[:require_std_lib] = true
10
+ require "backports/std_lib"
11
+ Backports.require_relative_dir
12
+ end
@@ -1,3 +1,8 @@
1
1
  # require this file to load all the backports up to Ruby 1.9.1 (including all of 1.8.8 and below)
2
2
  require 'backports/1.8'
3
- Backports.require_relative_dir
3
+
4
+ if RUBY_VERSION < '1.9.1'
5
+ Backports.warned[:require_std_lib] = true
6
+ require "backports/std_lib"
7
+ Backports.require_relative_dir
8
+ end
@@ -1,3 +1,8 @@
1
1
  # require this file to load all the backports up to Ruby 1.9.2
2
2
  require 'backports/1.9.1'
3
- Backports.require_relative_dir
3
+
4
+ if RUBY_VERSION < '1.9.2'
5
+ Backports.warned[:require_std_lib] = true
6
+ require "backports/std_lib"
7
+ Backports.require_relative_dir
8
+ end
@@ -1,3 +1,8 @@
1
1
  # require this file to load all the backports up to Ruby 1.9.3
2
2
  require 'backports/1.9.2'
3
- Backports.require_relative_dir
3
+
4
+ if RUBY_VERSION < '1.9.3'
5
+ Backports.warned[:require_std_lib] = true
6
+ require "backports/std_lib"
7
+ Backports.require_relative_dir
8
+ end
@@ -1,3 +1,8 @@
1
1
  # require this file to load all the backports up to Ruby 2.0.0
2
- require 'backports/1.9'
3
- Backports.require_relative_dir
2
+ require 'backports/1.9.3'
3
+
4
+ if RUBY_VERSION < '2.0'
5
+ Backports.warned[:require_std_lib] = true
6
+ require "backports/std_lib"
7
+ Backports.require_relative_dir
8
+ end
@@ -1,3 +1,3 @@
1
1
  # require this file to load all the backports up to Ruby 2.1.0
2
- require 'backports/2.0'
3
- Backports.require_relative_dir
2
+ require 'backports/2.0.0'
3
+ Backports.require_relative_dir if RUBY_VERSION < '2.1'
@@ -1,3 +1,3 @@
1
1
  # require this file to load all the backports up to Ruby 2.2
2
- require 'backports/2.1'
3
- Backports.require_relative_dir
2
+ require 'backports/2.1.0'
3
+ Backports.require_relative_dir if RUBY_VERSION < '2.2'
@@ -4,7 +4,7 @@ unless String.method_defined? :unicode_normalize
4
4
  if (Regexp.compile("[\u{11100}-\u{11102}]") rescue false)
5
5
  class String
6
6
  def unicode_normalize(form = :nfc)
7
- require 'backports/tools/normalize.rb' unless defined? UnicodeNormalize
7
+ require 'backports/tools/normalize' unless defined? UnicodeNormalize
8
8
  ## The following line can be uncommented to avoid repeated checking for
9
9
  ## UnicodeNormalize. However, tests didn't show any noticeable speedup
10
10
  ## when doing this. This comment also applies to the commented out lines
@@ -14,13 +14,13 @@ unless String.method_defined? :unicode_normalize
14
14
  end
15
15
 
16
16
  def unicode_normalize!(form = :nfc)
17
- require 'backports/tools/normalize.rb' unless defined? UnicodeNormalize
17
+ require 'backports/tools/normalize' unless defined? UnicodeNormalize
18
18
  # String.send(:define_method, :unicode_normalize!, ->(form = :nfc) { replace(unicode_normalize(form)) } )
19
19
  replace(unicode_normalize(form))
20
20
  end
21
21
 
22
22
  def unicode_normalized?(form = :nfc)
23
- require 'backports/tools/normalize.rb' unless defined? UnicodeNormalize
23
+ require 'backports/tools/normalize' unless defined? UnicodeNormalize
24
24
  # String.send(:define_method, :unicode_normalized?, ->(form = :nfc) { UnicodeNormalize.normalized?(self, form) } )
25
25
  UnicodeNormalize.normalized?(self, form)
26
26
  end
@@ -1,3 +1,3 @@
1
1
  # require this file to load all the backports up to Ruby 2.3
2
- require 'backports/2.2'
3
- Backports.require_relative_dir
2
+ require 'backports/2.2.0'
3
+ Backports.require_relative_dir if RUBY_VERSION < '2.3'
@@ -0,0 +1,48 @@
1
+ unless Queue.method_defined? :close
2
+ require 'backports/tools/alias_method_chain'
3
+
4
+ class ClosedQueueError < StopIteration
5
+ end
6
+
7
+ class Queue
8
+ CLOSE_MESSAGE = Object.new
9
+
10
+ def push_with_close(arg)
11
+ raise ClosedQueueError, 'queue closed' if closed?
12
+
13
+ push_without_close(arg)
14
+ end
15
+ Backports.alias_method_chain self, :push, :close
16
+ alias_method :<<, :push
17
+ alias_method :enq, :push
18
+
19
+ def pop_with_close(non_block = false)
20
+ begin
21
+ r = pop_without_close(non_block || closed?)
22
+
23
+ r unless CLOSE_MESSAGE == r
24
+ rescue ThreadError
25
+ raise if non_block || !closed?
26
+ end
27
+ end
28
+ Backports.alias_method_chain self, :pop, :close
29
+
30
+ alias_method :shift, :pop
31
+ alias_method :deq, :pop
32
+
33
+ def close
34
+ @closed = true
35
+ 2.times do
36
+ Thread.pass
37
+ num_waiting.times do
38
+ push_without_close CLOSE_MESSAGE
39
+ end
40
+ end
41
+ self
42
+ end
43
+
44
+ def closed?
45
+ !!defined?(@closed)
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,3 @@
1
+ require 'backports/tools/require_relative_dir'
2
+
3
+ Backports.require_relative_dir
@@ -1,3 +1,3 @@
1
1
  # require this file to load all the backports up to Ruby 2.4
2
- require 'backports/2.3'
3
- Backports.require_relative_dir
2
+ require 'backports/2.3.0'
3
+ Backports.require_relative_dir if RUBY_VERSION < '2.4'
@@ -0,0 +1,3 @@
1
+ require 'backports/tools/require_relative_dir'
2
+
3
+ Backports.require_relative_dir
@@ -0,0 +1,5 @@
1
+ class Bignum
2
+ def dup
3
+ self
4
+ end
5
+ end unless ((1 << 64).dup rescue false)
@@ -1,3 +1,3 @@
1
1
  # require this file to load all the backports up to Ruby 2.5
2
- require 'backports/2.4'
3
- Backports.require_relative_dir
2
+ require 'backports/2.4.0'
3
+ Backports.require_relative_dir if RUBY_VERSION < '2.5'
@@ -10,9 +10,16 @@ class Hash
10
10
 
11
11
  def transform_keys!
12
12
  return enum_for(:transform_keys!) { size } unless block_given?
13
- merge!({}) if frozen?
14
- keys.each do |key|
15
- self[yield(key)] = delete(key)
13
+
14
+ self[:trigger_error] = :immediately if frozen?
15
+
16
+ h = {}
17
+ begin
18
+ each do |key, value|
19
+ h[yield key] = value
20
+ end
21
+ ensure
22
+ replace(h)
16
23
  end
17
24
  self
18
25
  end unless method_defined? :transform_keys!
@@ -9,7 +9,7 @@ class Integer
9
9
  bits_shift = n.bit_length / 2 + 1
10
10
  bitn_mask = root = 1 << bits_shift
11
11
  loop do
12
- root ^= bitn_mask if (root * root) > n
12
+ root ^= bitn_mask if (root * root) > n # rubocop:disable Lint/BinaryOperatorWithIdenticalOperands
13
13
  bitn_mask >>= 1
14
14
  return root if bitn_mask == 0
15
15
  root |= bitn_mask
@@ -39,9 +39,9 @@ unless String.method_defined? :undump
39
39
  # * only allowing the first character after the \\ to not be alpha/num/space, so \\\\#@inst_var_access is ignored
40
40
  # To reduce the number of calls to eval a little, we wrap everything in a (...)+ so that consecutive escapes are
41
41
  # handled at the same time.
42
- result = string.gsub(/(\\+(u\{[\w ]+\}|[^cCM][\w]*))+/) do |s|
42
+ result = string.gsub(/(\\+(u\{[\w ]+\}|[^cCM]\w*))+/) do |s|
43
43
  begin
44
- eval("\"#{s}\"")
44
+ eval("\"#{s}\"") # "body"
45
45
  rescue SyntaxError => e
46
46
  raise RuntimeError, e.message, e.backtrace
47
47
  end
@@ -1,2 +1,2 @@
1
- # require this file to load all the backports of Ruby 2.4 and below
1
+ # require this file to load all the backports of Ruby 2.5 and below
2
2
  require 'backports/2.5.0'