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