diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index b6a0b00..2455070 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -14,7 +14,7 @@ jobs: - ubuntu-latest experimental: [false] include: - - ruby-version: head + - ruby: head os: ubuntu-latest experimental: true diff --git a/lib/fluent/plugin/filter_record_modifier.rb b/lib/fluent/plugin/filter_record_modifier.rb index 40e5efa..ceae80f 100644 --- a/lib/fluent/plugin/filter_record_modifier.rb +++ b/lib/fluent/plugin/filter_record_modifier.rb @@ -74,7 +74,7 @@ def configure(conf) conf.elements.select { |element| element.name == 'record' }.each do |element| element.each_pair do |k, v| element.has_key?(k) # to suppress unread configuration warning - @has_tag_parts = true if v.include?('tag_parts') + @has_tag_parts = true if v && v.include?('tag_parts') @map[k] = DynamicExpander.new(k, v, @prepare_value) end end @@ -167,7 +167,7 @@ def convert_encoding(value) class DynamicExpander def initialize(param_key, param_value, prepare_value) - if param_value.include?('${') + if param_value && param_value.include?('${') __str_eval_code__ = parse_parameter(param_value) # Use class_eval with string instead of define_method for performance. diff --git a/lib/fluent/plugin/out_record_modifier.rb b/lib/fluent/plugin/out_record_modifier.rb index c37fa52..b0e4c46 100644 --- a/lib/fluent/plugin/out_record_modifier.rb +++ b/lib/fluent/plugin/out_record_modifier.rb @@ -77,7 +77,7 @@ def configure(conf) conf.elements.select { |element| element.name == 'record' }.each do |element| element.each_pair do |k, v| element.has_key?(k) # to suppress unread configuration warning - @has_tag_parts = true if v.include?('tag_parts') + @has_tag_parts = true if v && v.include?('tag_parts') @map[k] = DynamicExpander.new(k, v, @prepare_value) end end @@ -198,7 +198,7 @@ class DynamicExpander attr_reader :param_value def initialize(param_key, param_value, prepare_value) - if param_value.include?('${') + if param_value && param_value.include?('${') __str_eval_code__ = parse_parameter(param_value) # Use class_eval with string instead of define_method for performance. diff --git a/test/test_filter_record_modifier.rb b/test/test_filter_record_modifier.rb index 7b9d61a..a6879c9 100644 --- a/test/test_filter_record_modifier.rb +++ b/test/test_filter_record_modifier.rb @@ -226,4 +226,23 @@ def test_convert_char_encoding ], d.filtered.map { |e| e.last } end end + + def test_use_nil + require "fluent/version" + if Gem::Version.new(Fluent::VERSION) < Gem::Version.new("1.8.0") + omit "use_nil is only available in Fluentd 1.8.0 and higher" + end + + d = create_driver %q[ + + test_key "#{use_nil}" + + ] + + d.run(default_tag: @tag) do + d.feed("k" => "v") + end + + assert_equal [{"k" => "v", "test_key" => nil}], d.filtered.map(&:last) + end end diff --git a/test/test_out_record_modifier.rb b/test/test_out_record_modifier.rb index f2df2e6..6e7d553 100644 --- a/test/test_out_record_modifier.rb +++ b/test/test_out_record_modifier.rb @@ -1,6 +1,7 @@ +require 'fluent/test' require 'fluent/test/driver/output' require 'fluent/plugin/out_record_modifier' - +require 'test/unit' class RecordModifierOutputTest < Test::Unit::TestCase def setup @@ -139,4 +140,24 @@ def test_remove_non_whitelist_keys assert_equal [{"k1" => 'v', "k2" => 'v', 'foo' => 'bar'}], d.events.map { |e| e.last } end + + def test_use_nil + require "fluent/version" + if Gem::Version.new(Fluent::VERSION) < Gem::Version.new("1.8.0") + omit "use_nil is only available in Fluentd 1.8.0 and higher" + end + + d = create_driver %q[ + tag foo.filtered + + test_key "#{use_nil}" + + ] + + d.run(default_tag: "test_tags") do + d.feed("k" => "v") + end + + assert_equal [{"k" => "v", "test_key" => nil}], d.events.map(&:last) + end end