ruby3-backward-compatibility 0.2.2 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f41ca19f2c12e6f2d275f62bf3079587ffcbd70f455f7b12761cd3ed91a8cf6e
4
- data.tar.gz: 9c3d76a042555bcadb4452486bcd4948a1702f3a7920fcb600cbe4976497aa46
3
+ metadata.gz: ced5ff7ed2f076e330be4b444f418d6ea102ba732bedf7540a6594c1bd4703b4
4
+ data.tar.gz: 36314617ae1e2e10e04e6b7db71a93a70226bacceec9ef1591f4ede1925d7f26
5
5
  SHA512:
6
- metadata.gz: f76bec36e842805432da6e44f3eef1c5bc6ebc4671fd73c849f4af770b8e0a8ba0643e696c3cf1b473c3154ea5f3b20bc67320903c283206929cac03bbdca268
7
- data.tar.gz: 57880ff6f4dab6bdcf19979dc7fd4faf4500f6103fa0eb5f38dfc2f1d10aaadd53b65d4baf81028ae05c86da2a370b5128a6b8a5f96fef103ef808e92297d490
6
+ metadata.gz: 238d11616add2f0cb7253a52f781735244d5ad0009033710319382e9c10f76109b7d48a6b90bc089937d9f597e86d900479815eb93dda1f2ffa3f88f05599b90
7
+ data.tar.gz: b9707b24ece18a5da64d85cff697102d4491ddf34a828395d50882f2a84f77a6c97dff28eabd4c44ce50b97624f8a0aa369b40b32ba417e3df4213f656424914
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.3.0] - 2022-11-22
4
+
5
+ - Security fix: `ruby3_backward_compatibility/compatibility/psych` no longer aliases YAML.load to YAML.safe_load.
6
+
7
+ ## [0.2.3] - 2022-11-22
8
+
9
+ - Add `ignore_missing: true` option for `ruby3_keywords` to not crash on missing methods.
10
+ - Fix `ruby3_backward_compatibility/compatibility/i18n` to not crash when used with older I18n versions.
11
+
3
12
  ## [0.2.2] - 2022-11-10
4
13
 
5
14
  - Fix `ruby3_keywords` to pass blocks.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ruby3-backward-compatibility (0.2.2)
4
+ ruby3-backward-compatibility (0.3.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -3,5 +3,5 @@ require 'i18n'
3
3
  module I18n::Base
4
4
  extend Ruby3BackwardCompatibility::Ruby3Keywords
5
5
 
6
- ruby3_keywords :translate, :translate!, :localize, :t, :l, :transliterate
6
+ ruby3_keywords :translate, :translate!, :localize, :t, :l, :transliterate, ignore_missing: true
7
7
  end
@@ -8,12 +8,6 @@ module Ruby3BackwardCompatibility
8
8
  end
9
9
 
10
10
  module ClassMethods
11
- if Psych::VERSION >= '4'
12
- def load(...)
13
- unsafe_load(...)
14
- end
15
- end
16
-
17
11
  def safe_load(yaml, legacy_permitted_classes = NOT_GIVEN, legacy_permitted_symbols = NOT_GIVEN, legacy_aliases = NOT_GIVEN, legacy_filename = NOT_GIVEN, permitted_classes: [], permitted_symbols: [], aliases: false, filename: nil, **args)
18
12
  if legacy_permitted_classes != NOT_GIVEN
19
13
  permitted_classes = legacy_permitted_classes
@@ -1,7 +1,12 @@
1
1
  module Ruby3BackwardCompatibility
2
2
  module Ruby3Keywords
3
- def self.find_owned_instance_method(mod, method_name)
4
- method = mod.send(:instance_method, method_name)
3
+ def self.find_owned_instance_method(mod, method_name, ignore_missing: false)
4
+ method = begin
5
+ mod.send(:instance_method, method_name)
6
+ rescue NameError
7
+ return if ignore_missing
8
+ raise NameError, "method '#{method_name}' is not defined"
9
+ end
5
10
  while method.owner > mod
6
11
  # we found the method in a prepended module
7
12
  super_method = method.super_method
@@ -21,12 +26,15 @@ module Ruby3BackwardCompatibility
21
26
  by.send(:_ruby3_keywords_module)
22
27
  end
23
28
 
24
- def ruby3_keywords(*method_names)
29
+ def ruby3_keywords(*method_names, ignore_missing: false)
25
30
  method_names.each do |method_name|
26
31
  method_is_private = private_instance_methods.include?(method_name)
27
32
  method_is_protected = protected_instance_methods.include?(method_name)
28
33
 
29
- required_param_count = Ruby3Keywords.find_owned_instance_method(self, method_name).parameters.sum { |(kind, _name)| kind == :req ? 1 : 0 }
34
+ method = Ruby3Keywords.find_owned_instance_method(self, method_name, ignore_missing: ignore_missing)
35
+ next unless method
36
+
37
+ required_param_count = method.parameters.sum { |(kind, _name)| kind == :req ? 1 : 0 }
30
38
  _ruby3_keywords_module.define_method(method_name) do |*args, &block|
31
39
  if args.last.respond_to?(:to_hash) && args.size > required_param_count
32
40
  keyword_args = args.pop
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ruby3BackwardCompatibility
4
- VERSION = '0.2.2'
4
+ VERSION = '0.3.0'
5
5
  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: 0.2.2
4
+ version: 0.3.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: 2022-11-10 00:00:00.000000000 Z
11
+ date: 2022-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug