ruby3-backward-compatibility 1.2.0 → 1.4.0
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 +8 -0
- data/Gemfile.lock +1 -1
- data/README.md +14 -1
- data/lib/ruby3_backward_compatibility/compatibility/all.rb +1 -0
- data/lib/ruby3_backward_compatibility/compatibility/object.rb +8 -0
- data/lib/ruby3_backward_compatibility/compatibility/regexp.rb +51 -0
- data/lib/ruby3_backward_compatibility/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '09b06d532203cd4e5f4f81dbf7b664fafc62b02700594adc99f6dce8d4fe9449'
|
4
|
+
data.tar.gz: f691d1e175588417c95978937bf16d7f8bd2ab42ddfa7b9a14ed5b7ad270e1e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8863c4305734ac08069902668e536cf165e2e2bbd9dad261ebbc3cdad46d1d73cb366d1e8452578efd82b32efd6e645d5f46dff5f466500f9ac58747cbeaa7f
|
7
|
+
data.tar.gz: 614dbb8dedf50e9999e930576c2874bf11d5691bab6ca50fa63bbf83843f6ca11609b646dd34190242a52294bf4b59b2807faf2e4c378d6fc3729a4f46229cea
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [1.4.0] - 2024-05-02
|
4
|
+
|
5
|
+
- Ruby 3.2+: Add back `Object#=~`
|
6
|
+
|
7
|
+
## [1.3.0] - 2024-04-16
|
8
|
+
|
9
|
+
- Ruby 3.2+: Add back third argument to Regexp.new, to allow passing "n" to set `Regexp::NOENCODING`.
|
10
|
+
|
3
11
|
## [1.2.0] - 2024-04-10
|
4
12
|
|
5
13
|
- First release with dedicated suport to Ruby 3.3.
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -136,12 +136,25 @@ require 'ruby3_backward_compatibility/compatibility/i18n'
|
|
136
136
|
|
137
137
|
The methods `Object#taint` and `Object#untaint` were no-ops for a while but started to raise deprecation warnings.
|
138
138
|
|
139
|
-
|
139
|
+
The method `Object#=~` always returned `nil` if called on anything else than a String. It was removed in Ruby 3.2.
|
140
|
+
|
141
|
+
To add back `Object#taint` and `Object#untaint` as no-ops and `Object#=~` on arbitrary receivers, use
|
140
142
|
|
141
143
|
```
|
142
144
|
require 'ruby3_backward_compatibility/compatibility/object'
|
143
145
|
```
|
144
146
|
|
147
|
+
### Regexp (Ruby 3.2+)
|
148
|
+
|
149
|
+
It was possible to instantiate a Regexp with `Regexp.new('foo', Regexp::IGNORECASE, 'n')`. The last argument used to indicate the encoding in Ruby 1.8. Up to Ruby 3.2 an argument of "n" or "N" indicated a regexp that ignores encoding (same as the Regexp::NOENCODING flag).
|
150
|
+
|
151
|
+
In Ruby 3 this raises an `ArgumentError`.
|
152
|
+
|
153
|
+
To bring back the old behavior, use
|
154
|
+
|
155
|
+
```
|
156
|
+
require 'ruby3_backward_compatibility/compatibility/regexp'
|
157
|
+
```
|
145
158
|
|
146
159
|
### YAML (Psych)
|
147
160
|
|
@@ -7,5 +7,6 @@ require 'ruby3_backward_compatibility/compatibility/fixnum'
|
|
7
7
|
require 'ruby3_backward_compatibility/compatibility/i18n' if defined?(I18n)
|
8
8
|
require 'ruby3_backward_compatibility/compatibility/object'
|
9
9
|
require 'ruby3_backward_compatibility/compatibility/psych' if defined?(Psych)
|
10
|
+
require 'ruby3_backward_compatibility/compatibility/regexp'
|
10
11
|
require 'ruby3_backward_compatibility/compatibility/string'
|
11
12
|
require 'ruby3_backward_compatibility/compatibility/uri' if defined?(URI)
|
@@ -8,6 +8,14 @@ module Ruby3BackwardCompatibility
|
|
8
8
|
def untaint
|
9
9
|
self
|
10
10
|
end
|
11
|
+
|
12
|
+
# Make the match operator work on arbitrary receivers again.
|
13
|
+
def =~(regexp)
|
14
|
+
if Warning[:deprecated]
|
15
|
+
Warning.warn("deprecated Object#=~ is called on #{self.class}; it always returns nil")
|
16
|
+
end
|
17
|
+
nil
|
18
|
+
end
|
11
19
|
end
|
12
20
|
end
|
13
21
|
|
@@ -0,0 +1,51 @@
|
|
1
|
+
if RUBY_VERSION >= '3.2'
|
2
|
+
# on 3.2 exactly, we get deprecation errors
|
3
|
+
# however, this is somewhat hard to fix, since 3.2 added some different ways to pass "options" that we do not want to rebuild
|
4
|
+
|
5
|
+
module Ruby3BackwardCompatibility
|
6
|
+
module RegexpCompatibility
|
7
|
+
LEGITIMATE_FLAGS = /\A[mix]+\z/
|
8
|
+
|
9
|
+
def self.prepended(by)
|
10
|
+
by.singleton_class.prepend ClassMethods
|
11
|
+
end
|
12
|
+
|
13
|
+
module ClassMethods
|
14
|
+
def new(regexp_or_string, options = NOT_GIVEN, n_flag = NOT_GIVEN, **kwargs)
|
15
|
+
if options == NOT_GIVEN
|
16
|
+
super(regexp_or_string, **kwargs)
|
17
|
+
elsif n_flag == 'n' || n_flag == 'N'
|
18
|
+
unless options.is_a?(Integer)
|
19
|
+
if RUBY_VERSION < '3.3' && options.is_a?(String) && options =~ LEGITIMATE_FLAGS
|
20
|
+
# on Ruby 3.2 we can legitimately have options "mix" treated as flags, so parse them
|
21
|
+
# on Ruby 3.3 this would never have been legitimate, since a third argument would not have been allowed
|
22
|
+
new_options = 0
|
23
|
+
new_options |= Regexp::MULTILINE if options.include?('m')
|
24
|
+
new_options |= Regexp::IGNORECASE if options.include?('i')
|
25
|
+
new_options |= Regexp::EXTENDED if options.include?('x')
|
26
|
+
options = new_options
|
27
|
+
else
|
28
|
+
# on all other Ruby, truish is IGNORECASE
|
29
|
+
options = options ? Regexp::IGNORECASE : 0
|
30
|
+
end
|
31
|
+
end
|
32
|
+
super(regexp_or_string, options | Regexp::NOENCODING, **kwargs)
|
33
|
+
elsif options.is_a?(String)
|
34
|
+
if options =~ LEGITIMATE_FLAGS && n_flag == NOT_GIVEN
|
35
|
+
# this (like any trueish value) would have been "ignore case" in Ruby < 3.2, but now is not
|
36
|
+
# we have to assume this is Ruby 3.2 syntax
|
37
|
+
super(regexp_or_string, options, **kwargs)
|
38
|
+
else
|
39
|
+
# this crashes on Ruby 3.2, so assume it is < 3.2 syntax
|
40
|
+
super(regexp_or_string, true, **kwargs)
|
41
|
+
end
|
42
|
+
else
|
43
|
+
super(regexp_or_string, options, **kwargs)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
Regexp.prepend Ruby3BackwardCompatibility::RegexpCompatibility
|
51
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby3-backward-compatibility
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tobias Kraze
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-05-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: byebug
|
@@ -52,6 +52,7 @@ files:
|
|
52
52
|
- lib/ruby3_backward_compatibility/compatibility/i18n.rb
|
53
53
|
- lib/ruby3_backward_compatibility/compatibility/object.rb
|
54
54
|
- lib/ruby3_backward_compatibility/compatibility/psych.rb
|
55
|
+
- lib/ruby3_backward_compatibility/compatibility/regexp.rb
|
55
56
|
- lib/ruby3_backward_compatibility/compatibility/string.rb
|
56
57
|
- lib/ruby3_backward_compatibility/compatibility/uri.rb
|
57
58
|
- lib/ruby3_backward_compatibility/version.rb
|