backports 3.18.0 → 3.20.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +47 -1
- data/Gemfile +3 -16
- data/README.md +31 -11
- data/backports.gemspec +1 -1
- data/lib/backports/2.0.0.rb +1 -1
- data/lib/backports/2.1.0.rb +1 -1
- data/lib/backports/2.2.0.rb +1 -1
- data/lib/backports/2.2.0/string/unicode_normalize.rb +3 -3
- data/lib/backports/2.3.0.rb +1 -1
- data/lib/backports/2.3.0/queue/close.rb +48 -0
- data/lib/backports/2.3.0/string.rb +3 -0
- data/lib/backports/2.4.0.rb +1 -1
- data/lib/backports/2.4.0/bignum.rb +3 -0
- data/lib/backports/2.4.0/bignum/dup.rb +5 -0
- data/lib/backports/2.5.0.rb +1 -1
- data/lib/backports/2.5.0/hash/transform_keys.rb +10 -3
- data/lib/backports/2.5.0/integer/sqrt.rb +1 -1
- data/lib/backports/2.5.0/string/undump.rb +2 -2
- data/lib/backports/2.5.rb +1 -1
- data/lib/backports/2.6.0.rb +2 -2
- data/lib/backports/2.6.0/enumerable/chain.rb +2 -0
- data/lib/backports/2.6.rb +1 -1
- data/lib/backports/2.7.0.rb +2 -2
- data/lib/backports/3.0.0.rb +3 -0
- data/lib/backports/3.0.0/env.rb +3 -0
- data/lib/backports/3.0.0/env/except.rb +10 -0
- data/lib/backports/3.0.0/hash.rb +3 -0
- data/lib/backports/3.0.0/hash/except.rb +10 -0
- data/lib/backports/3.0.0/hash/transform_keys.rb +48 -0
- data/lib/backports/3.0.0/ractor.rb +5 -0
- data/lib/backports/3.0.0/symbol.rb +3 -0
- data/lib/backports/3.0.0/symbol/name.rb +11 -0
- data/lib/backports/3.0.rb +1 -0
- data/lib/backports/ractor/cloner.rb +91 -0
- data/lib/backports/ractor/errors.rb +16 -0
- data/lib/backports/ractor/queues.rb +62 -0
- data/lib/backports/ractor/ractor.rb +261 -0
- data/lib/backports/ractor/sharing.rb +93 -0
- data/lib/backports/tools/filtered_queue.rb +202 -0
- data/lib/backports/version.rb +1 -1
- metadata +27 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aa5429b607594bcd855bad1a66bbfdc01e3facb1f76be0c338fd549b502ec1c4
|
4
|
+
data.tar.gz: e7e08e840cc7559df5708a0bfa5d1499a3e809fb9bf79b260e4c98e7ca634c60
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e59f88a7ef8c1487cc1c1fb04d28a96d44b26d8cc5379a6ea9f18edfca62d97fe0b84c27a03c600a6137febf9096917f0ec1d7a52574fc536f7c345b2e256af
|
7
|
+
data.tar.gz: 9e732e7626034ae45dd1daf0cd54f20319854f27f041c5624e8c96d287a66ffeee780e8d0c142472e8b88cba597b65ee300b161b811acade9aaa697ff3352ff7
|
data/CHANGELOG.md
CHANGED
@@ -6,7 +6,53 @@ 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
|
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.1](https://github.com/marcandre/backports/compare/v3.20.0...v3.20.1) - 2021-01-03
|
12
|
+
|
13
|
+
### Fixed
|
14
|
+
|
15
|
+
* Added `Ractor.[]` and `[]=` [#161]
|
16
|
+
* `Ractor.current` fixed from threads [#161]
|
17
|
+
|
18
|
+
## [3.20.0](https://github.com/marcandre/backports/compare/v3.19.0...v3.20.0) - 2020-12-30
|
19
|
+
|
20
|
+
### Added
|
21
|
+
|
22
|
+
Ractor backport (all methods)
|
23
|
+
|
24
|
+
## [3.19.0](https://github.com/marcandre/backports/compare/v3.18.2...v3.19.0) - 2020-12-28
|
25
|
+
|
26
|
+
### Added
|
27
|
+
|
28
|
+
* Ruby 3.0 backports
|
29
|
+
|
30
|
+
* Env
|
31
|
+
* `except`
|
32
|
+
|
33
|
+
* Hash
|
34
|
+
* `except`
|
35
|
+
* `transform_keys`, `transform_keys!` (with hash argument)
|
36
|
+
|
37
|
+
* Symbol
|
38
|
+
* `name`
|
39
|
+
|
40
|
+
* Ruby 2.3 backports
|
41
|
+
|
42
|
+
* Queue
|
43
|
+
* `close`, `closed?` (affects `push`, `pop` and aliases)
|
44
|
+
|
45
|
+
## [3.18.2](https://github.com/marcandre/backports/compare/v3.18.0...v3.18.2) - 2020-08-26
|
46
|
+
|
47
|
+
### Fixed
|
48
|
+
|
49
|
+
Require per ruby version now properly requiring 2.3.0 backports for `String` [#152]
|
50
|
+
|
51
|
+
## [3.18.1](https://github.com/marcandre/backports/compare/v3.18.1...v3.18.2) - 2020-06-22
|
52
|
+
|
53
|
+
### Fixed
|
54
|
+
|
55
|
+
Fixed Changelog URI in gem manifest
|
10
56
|
|
11
57
|
## [3.18.0](https://github.com/marcandre/backports/compare/v3.17.2...v3.18.0) - 2020-06-22
|
12
58
|
|
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 '
|
14
|
-
gem 'test-unit', '~>2.1.1.0'
|
9
|
+
gem 'test-unit'
|
15
10
|
end
|
16
11
|
|
17
|
-
if RUBY_VERSION >= '2.
|
12
|
+
if RUBY_VERSION >= '2.4.0'
|
18
13
|
group :development do
|
19
|
-
gem 'rubocop', '~>
|
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) [](https://tidelift.com/subscription/pkg/rubygems-backports?utm_source=rubygems-backports&utm_medium=referral&utm_campaign=readme)
|
2
2
|
|
3
|
-
Yearning to use
|
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
|
-
|
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
|
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
|
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
|
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/
|
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
|
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
|
data/backports.gemspec
CHANGED
@@ -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.
|
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
|
data/lib/backports/2.0.0.rb
CHANGED
data/lib/backports/2.1.0.rb
CHANGED
data/lib/backports/2.2.0.rb
CHANGED
@@ -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
|
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
|
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
|
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
|
data/lib/backports/2.3.0.rb
CHANGED
@@ -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
|
data/lib/backports/2.4.0.rb
CHANGED
data/lib/backports/2.5.0.rb
CHANGED
@@ -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
|
-
|
14
|
-
|
15
|
-
|
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]
|
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
|
data/lib/backports/2.5.rb
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
# require this file to load all the backports of Ruby 2.
|
1
|
+
# require this file to load all the backports of Ruby 2.5 and below
|
2
2
|
require 'backports/2.5.0'
|
data/lib/backports/2.6.0.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
# require this file to load all the backports up to Ruby 2.
|
2
|
-
require 'backports/2.5'
|
1
|
+
# require this file to load all the backports up to Ruby 2.6
|
2
|
+
require 'backports/2.5.0'
|
3
3
|
Backports.require_relative_dir if RUBY_VERSION < '2.6'
|
@@ -8,6 +8,7 @@ unless Enumerable.method_defined? :chain
|
|
8
8
|
Enumerator = Enumerable::Enumerator unless Object.const_defined? :Enumerator # For 1.8.x
|
9
9
|
|
10
10
|
class Enumerator::Chain < Enumerator
|
11
|
+
# rubocop:disable Lint/MissingSuper
|
11
12
|
def initialize(*enums)
|
12
13
|
@enums = enums
|
13
14
|
@rewindable = -1
|
@@ -16,6 +17,7 @@ unless Enumerable.method_defined? :chain
|
|
16
17
|
# ...it checks what call of #initialize on non-initalized object returns
|
17
18
|
self # rubocop:disable Lint/Void
|
18
19
|
end
|
20
|
+
# rubocop:enable Lint/MissingSuper
|
19
21
|
|
20
22
|
def each(*args, &block)
|
21
23
|
@enums.each_with_index do |enum, i|
|
data/lib/backports/2.6.rb
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
# require this file to load all the backports of Ruby 2.
|
1
|
+
# require this file to load all the backports of Ruby 2.6 and below
|
2
2
|
require 'backports/2.6.0'
|
data/lib/backports/2.7.0.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
# require this file to load all the backports up to Ruby 2.
|
2
|
-
require 'backports/2.6'
|
1
|
+
# require this file to load all the backports up to Ruby 2.7
|
2
|
+
require 'backports/2.6.0'
|
3
3
|
Backports.require_relative_dir if RUBY_VERSION < '2.7'
|