backports 3.20.2 → 3.23.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +401 -304
- data/Gemfile +1 -1
- data/README.md +288 -158
- data/lib/backports/2.1.0/module/singleton_class.rb +8 -0
- data/lib/backports/2.3.0/struct/dig.rb +2 -0
- data/lib/backports/2.4.0/string/unpack1.rb +7 -0
- data/lib/backports/2.5.0/dir/children.rb +4 -0
- data/lib/backports/2.5.0/dir/each_child.rb +7 -0
- data/lib/backports/2.7.0/complex/{comparision.rb → comparison.rb} +0 -0
- data/lib/backports/2.7.0/enumerable/tally.rb +4 -3
- data/lib/backports/2.7.0/symbol/end_with.rb +9 -0
- data/lib/backports/2.7.0/symbol.rb +3 -0
- data/lib/backports/3.0.0/symbol/name.rb +16 -6
- data/lib/backports/3.1.0/array/intersect.rb +16 -0
- data/lib/backports/3.1.0/array.rb +3 -0
- data/lib/backports/3.1.0/class/descendants.rb +11 -0
- data/lib/backports/3.1.0/class/subclasses.rb +11 -0
- data/lib/backports/3.1.0/class.rb +3 -0
- data/lib/backports/3.1.0/enumerable/compact.rb +5 -0
- data/lib/backports/3.1.0/enumerable/tally.rb +18 -0
- data/lib/backports/3.1.0/enumerable.rb +3 -0
- data/lib/backports/3.1.0/file/dirname.rb +16 -0
- data/lib/backports/3.1.0/file.rb +3 -0
- data/lib/backports/3.1.0/integer/try_convert.rb +7 -0
- data/lib/backports/3.1.0/integer.rb +3 -0
- data/lib/backports/3.1.0/match_data/match.rb +5 -0
- data/lib/backports/3.1.0/match_data/match_length.rb +6 -0
- data/lib/backports/3.1.0/match_data.rb +3 -0
- data/lib/backports/3.1.0/struct/keyword_init.rb +5 -0
- data/lib/backports/3.1.0/struct.rb +3 -0
- data/lib/backports/3.1.0.rb +3 -0
- data/lib/backports/3.1.rb +1 -0
- data/lib/backports/latest.rb +1 -1
- data/lib/backports/ractor/cloner.rb +13 -4
- data/lib/backports/version.rb +1 -1
- metadata +27 -4
@@ -4,4 +4,11 @@ class Dir
|
|
4
4
|
return to_enum(__method__, *args) unless block_given?
|
5
5
|
foreach(*args) { |f| yield f unless Backports::EXCLUDED_CHILDREN.include? f }
|
6
6
|
end
|
7
|
+
|
8
|
+
def each_child(&block)
|
9
|
+
return to_enum(__method__) unless block_given?
|
10
|
+
|
11
|
+
Dir.each_child(path, &block)
|
12
|
+
self
|
13
|
+
end
|
7
14
|
end unless Dir.respond_to? :each_child
|
File without changes
|
@@ -1,10 +1,11 @@
|
|
1
|
-
require 'backports/1.9.1/enumerable/each_with_object' unless Enumerable.method_defined? :each_with_object
|
2
|
-
|
3
1
|
unless Enumerable.method_defined? :tally
|
4
2
|
module Enumerable
|
5
3
|
def tally
|
4
|
+
h = {}
|
6
5
|
# NB: By spec, tally should return default-less hash
|
7
|
-
|
6
|
+
each_entry { |item| h[item] = h.fetch(item, 0) + 1 }
|
7
|
+
|
8
|
+
h
|
8
9
|
end
|
9
10
|
end
|
10
11
|
end
|
@@ -1,11 +1,21 @@
|
|
1
1
|
unless Symbol.method_defined? :name
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
if ((ObjectSpace::WeakMap.new[:test] = :test) rescue false)
|
3
|
+
# WeakMaps accept symbols only in Ruby 2.7+
|
4
|
+
def Backports.symbol_names
|
5
|
+
@symbol_names ||= ObjectSpace::WeakMap.new
|
6
|
+
end
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
-
|
8
|
+
class Symbol
|
9
|
+
def name
|
10
|
+
Backports.symbol_names[self] ||= to_s.freeze
|
11
|
+
end
|
12
|
+
end
|
13
|
+
else
|
14
|
+
# For earlier Rubies, we can't pool their strings
|
15
|
+
class Symbol
|
16
|
+
def name
|
17
|
+
to_s.freeze
|
18
|
+
end
|
9
19
|
end
|
10
20
|
end
|
11
21
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
unless Array.method_defined? :intersect?
|
2
|
+
require 'backports/tools/arguments'
|
3
|
+
|
4
|
+
class Array
|
5
|
+
def intersect?(array)
|
6
|
+
array = Backports.coerce_to_ary(array)
|
7
|
+
|
8
|
+
if size < array.size
|
9
|
+
smaller = self
|
10
|
+
else
|
11
|
+
smaller, array = array, self
|
12
|
+
end
|
13
|
+
(array & smaller).size > 0
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
unless Class.method_defined? :subclasses
|
2
|
+
require 'backports/2.1.0/module/singleton_class'
|
3
|
+
|
4
|
+
class Class
|
5
|
+
def subclasses
|
6
|
+
ObjectSpace.each_object(singleton_class).reject do |klass|
|
7
|
+
klass.superclass != self || klass.singleton_class?
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
unless ([].tally({}) rescue false)
|
2
|
+
require 'backports/tools/arguments'
|
3
|
+
require 'backports/2.7.0/enumerable/tally'
|
4
|
+
require 'backports/tools/alias_method_chain'
|
5
|
+
|
6
|
+
module Enumerable
|
7
|
+
def tally_with_hash_argument(h = ::Backports::Undefined)
|
8
|
+
return tally_without_hash_argument if h.equal? ::Backports::Undefined
|
9
|
+
|
10
|
+
h = ::Backports.coerce_to_hash(h)
|
11
|
+
|
12
|
+
each_entry { |item| h[item] = h.fetch(item, 0) + 1 }
|
13
|
+
|
14
|
+
h
|
15
|
+
end
|
16
|
+
::Backports.alias_method_chain self, :tally, :hash_argument
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
unless (File.dirname("", 0) rescue false)
|
2
|
+
require 'backports/tools/alias_method_chain'
|
3
|
+
|
4
|
+
class File
|
5
|
+
def self.dirname_with_depth(path, depth = 1)
|
6
|
+
return dirname_without_depth(path) if depth == 1
|
7
|
+
|
8
|
+
raise ArgumentError, "negative depth #{depth}" if depth < 0
|
9
|
+
|
10
|
+
depth.times { path = dirname_without_depth(path) }
|
11
|
+
|
12
|
+
path
|
13
|
+
end
|
14
|
+
Backports.alias_method_chain singleton_class, :dirname, :depth
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'backports/3.1.0'
|
data/lib/backports/latest.rb
CHANGED
@@ -4,14 +4,23 @@ using ::RubyNext if defined?(::RubyNext)
|
|
4
4
|
|
5
5
|
module Backports
|
6
6
|
class Ractor
|
7
|
-
|
8
|
-
|
7
|
+
class Cloner
|
8
|
+
class << self
|
9
|
+
def deep_clone(obj)
|
10
|
+
return obj if Ractor.ractor_shareable_self?(obj, false) { false }
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
+
new.deep_clone(obj)
|
13
|
+
end
|
14
|
+
|
15
|
+
private :new
|
16
|
+
end
|
12
17
|
|
18
|
+
def initialize
|
13
19
|
@processed = {}.compare_by_identity
|
14
20
|
@changed = nil
|
21
|
+
end
|
22
|
+
|
23
|
+
def deep_clone(obj)
|
15
24
|
result = process(obj) do |r|
|
16
25
|
copy_contents(r)
|
17
26
|
end
|
data/lib/backports/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module Backports
|
2
|
-
VERSION = "3.
|
2
|
+
VERSION = "3.23.0" unless Backports.constants.include? :VERSION # the guard is against a redefinition warning that happens on Travis
|
3
3
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: backports
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.23.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marc-André Lafortune
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-28 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Essential backports that enable many of the nice features of Ruby for
|
14
14
|
earlier versions.
|
@@ -391,6 +391,7 @@ files:
|
|
391
391
|
- lib/backports/2.1.0/fixnum/bit_length.rb
|
392
392
|
- lib/backports/2.1.0/module.rb
|
393
393
|
- lib/backports/2.1.0/module/include.rb
|
394
|
+
- lib/backports/2.1.0/module/singleton_class.rb
|
394
395
|
- lib/backports/2.1.rb
|
395
396
|
- lib/backports/2.2.0.rb
|
396
397
|
- lib/backports/2.2.0/enumerable.rb
|
@@ -455,6 +456,7 @@ files:
|
|
455
456
|
- lib/backports/2.4.0/regexp/match.rb
|
456
457
|
- lib/backports/2.4.0/string.rb
|
457
458
|
- lib/backports/2.4.0/string/match.rb
|
459
|
+
- lib/backports/2.4.0/string/unpack1.rb
|
458
460
|
- lib/backports/2.4.0/true_class.rb
|
459
461
|
- lib/backports/2.4.0/true_class/dup.rb
|
460
462
|
- lib/backports/2.4.rb
|
@@ -523,12 +525,14 @@ files:
|
|
523
525
|
- lib/backports/2.7.0/comparable.rb
|
524
526
|
- lib/backports/2.7.0/comparable/clamp.rb
|
525
527
|
- lib/backports/2.7.0/complex.rb
|
526
|
-
- lib/backports/2.7.0/complex/
|
528
|
+
- lib/backports/2.7.0/complex/comparison.rb
|
527
529
|
- lib/backports/2.7.0/enumerable.rb
|
528
530
|
- lib/backports/2.7.0/enumerable/filter_map.rb
|
529
531
|
- lib/backports/2.7.0/enumerable/tally.rb
|
530
532
|
- lib/backports/2.7.0/enumerator.rb
|
531
533
|
- lib/backports/2.7.0/enumerator/produce.rb
|
534
|
+
- lib/backports/2.7.0/symbol.rb
|
535
|
+
- lib/backports/2.7.0/symbol/end_with.rb
|
532
536
|
- lib/backports/2.7.0/time/ceil.rb
|
533
537
|
- lib/backports/2.7.0/time/floor.rb
|
534
538
|
- lib/backports/2.7.rb
|
@@ -542,6 +546,25 @@ files:
|
|
542
546
|
- lib/backports/3.0.0/symbol.rb
|
543
547
|
- lib/backports/3.0.0/symbol/name.rb
|
544
548
|
- lib/backports/3.0.rb
|
549
|
+
- lib/backports/3.1.0.rb
|
550
|
+
- lib/backports/3.1.0/array.rb
|
551
|
+
- lib/backports/3.1.0/array/intersect.rb
|
552
|
+
- lib/backports/3.1.0/class.rb
|
553
|
+
- lib/backports/3.1.0/class/descendants.rb
|
554
|
+
- lib/backports/3.1.0/class/subclasses.rb
|
555
|
+
- lib/backports/3.1.0/enumerable.rb
|
556
|
+
- lib/backports/3.1.0/enumerable/compact.rb
|
557
|
+
- lib/backports/3.1.0/enumerable/tally.rb
|
558
|
+
- lib/backports/3.1.0/file.rb
|
559
|
+
- lib/backports/3.1.0/file/dirname.rb
|
560
|
+
- lib/backports/3.1.0/integer.rb
|
561
|
+
- lib/backports/3.1.0/integer/try_convert.rb
|
562
|
+
- lib/backports/3.1.0/match_data.rb
|
563
|
+
- lib/backports/3.1.0/match_data/match.rb
|
564
|
+
- lib/backports/3.1.0/match_data/match_length.rb
|
565
|
+
- lib/backports/3.1.0/struct.rb
|
566
|
+
- lib/backports/3.1.0/struct/keyword_init.rb
|
567
|
+
- lib/backports/3.1.rb
|
545
568
|
- lib/backports/basic_object.rb
|
546
569
|
- lib/backports/force/array_map.rb
|
547
570
|
- lib/backports/force/enumerable_map.rb
|
@@ -604,7 +627,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
604
627
|
- !ruby/object:Gem::Version
|
605
628
|
version: '0'
|
606
629
|
requirements: []
|
607
|
-
rubygems_version: 3.
|
630
|
+
rubygems_version: 3.3.3
|
608
631
|
signing_key:
|
609
632
|
specification_version: 4
|
610
633
|
summary: Backports of Ruby features for older Ruby.
|