From c36d64405bf70bb4e9626c412a2bde37f32cdbbd Mon Sep 17 00:00:00 2001 From: Kazuki Nishikawa Date: Thu, 27 Jan 2022 23:16:01 +0900 Subject: [PATCH] Fix `Puma::StateFile#load` returns empty string instead of nil (#2810) Bug introduced in 2b6968f9d4 #2784 Until 5.5.2, empty values were read as `nil`. Since 5.6.0, empty values are read as `""`. --- lib/puma/state_file.rb | 1 + test/test_state_file.rb | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 test/test_state_file.rb diff --git a/lib/puma/state_file.rb b/lib/puma/state_file.rb index dd6362880f..c2e89211d4 100644 --- a/lib/puma/state_file.rb +++ b/lib/puma/state_file.rb @@ -50,6 +50,7 @@ def load(path) v = v.strip @options[k] = case v + when '' then nil when /\A\d+\z/ then v.to_i when /\A\d+\.\d+\z/ then v.to_f else v.gsub(/\A"|"\z/, '') diff --git a/test/test_state_file.rb b/test/test_state_file.rb new file mode 100644 index 0000000000..fb16b809a1 --- /dev/null +++ b/test/test_state_file.rb @@ -0,0 +1,27 @@ +require_relative "helper" +require_relative "helpers/tmp_path" + +require 'puma/state_file' + +class TestStateFile < Minitest::Test + include TmpPath + + def test_load_empty_value_as_nil + state_path = tmp_path('.state') + File.write state_path, <<-STATE +--- +pid: 123456 +control_url: +control_auth_token: +running_from: "/path/to/app" + STATE + + sf = Puma::StateFile.new + sf.load(state_path) + assert_equal 123456, sf.pid + assert_equal '/path/to/app', sf.running_from + assert_nil sf.control_url + assert_nil sf.control_auth_token + + end +end