On Thu, Jan 26, 2023 at 02:03:39AM +0100, Daniel Leidert wrote: > Hi, > > some packages are scheduled for autoremoval due to ruby-faraday-middleware > FTBFS. The FTBFS was easy to fix, unfortunately it introduces a dependency on > ruby-safe-yaml. That is suboptimal because I don't think that we can fix ruby- > safe-yaml. > > I was playing around with replacing SafeYAML.load() by YAML.safe_load(). That > leaves only the below test issues. > > What do you think? Any better idea? > > > Failures: > > > > 1) FaradayMiddleware::ParseYaml SafeYAML options passes relevant options > > to SafeYAML load > > Failure/Error: > > expect(::SafeYAML).to receive(:load) > > .with(body, nil, options[:parser_options]) > > .and_return(result) > > > > NameError: > > uninitialized constant SafeYAML > > > > expect(::SafeYAML).to receive(:load) > > ^^^^^^^^^^ > > # ./spec/unit/parse_yaml_spec.rb:65:in `block (3 levels) in <top > > (required)>' > > # > > /usr/share/rubygems-integration/all/gems/webmock-3.18.1/lib/webmock/rspec.rb:37:in > > `block (2 levels) in <top (required)>'
Should work if you change that to expect(::YAML).to receive(:safe_load) or something like that > > 2) FaradayMiddleware::ParseYaml no type matching returns false for empty > > body > > Failure/Error: expect(process('').body).to be false > > > > expected false > > got nil > > # ./spec/unit/parse_yaml_spec.rb:10:in `block (3 levels) in <top > > (required)>' > > # > > /usr/share/rubygems-integration/all/gems/webmock-3.18.1/lib/webmock/rspec.rb:37:in > > `block (2 levels) in <top (required)>' This is due to the difference in how Psych (YAML) and SafeYAML handle an empty string: $ irb -ryaml -rsafe_yaml/load >> YAML.safe_load('') => nil >> SafeYAML.load('', nil, {}) => false Depending on what exactly uses this you might 1) just fix the test or 2) change the YAML.safe_load call to something like YAML.safe_load(body) || false The following changes make all the tests pass for me here: diff --git a/lib/faraday_middleware/response/parse_yaml.rb b/lib/faraday_middleware/response/parse_yaml.rb index bf8873b..eb0f751 100644 --- a/lib/faraday_middleware/response/parse_yaml.rb +++ b/lib/faraday_middleware/response/parse_yaml.rb @ -27,10 +27,10 @@ module FaradayMiddleware # ... # end class ParseYaml < ResponseMiddleware - dependency 'safe_yaml/load' + dependency 'yaml' define_parser do |body, parser_options| - SafeYAML.load(body, nil, parser_options || {}) + YAML.safe_load(body, **(parser_options || {})) || false end end end diff --git a/spec/unit/parse_yaml_spec.rb b/spec/unit/parse_yaml_spec.rb index 33c0312..5afd303 100644 --- a/spec/unit/parse_yaml_spec.rb +++ b/spec/unit/parse_yaml_spec.rb @@ -50,7 +50,7 @@ RSpec.describe FaradayMiddleware::ParseYaml, type: :response do expect { process('{!') }.to raise_error(Faraday::ParsingError) end - context 'SafeYAML options' do + context 'YAML options' do let(:body) { 'a: 1' } let(:result) { { a: 1 } } let(:options) do @@ -61,9 +61,9 @@ RSpec.describe FaradayMiddleware::ParseYaml, type: :response do } end - it 'passes relevant options to SafeYAML load' do - expect(::SafeYAML).to receive(:load) - .with(body, nil, options[:parser_options]) + it 'passes relevant options to YAML safe_load' do + expect(::YAML).to receive(:safe_load) + .with(body, options[:parser_options]) .and_return(result) response = process(body)
signature.asc
Description: PGP signature