Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
- ubuntu-latest
experimental: [false]
include:
- ruby-version: head
- ruby: head
os: ubuntu-latest
experimental: true

Expand Down
4 changes: 2 additions & 2 deletions lib/fluent/plugin/filter_record_modifier.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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.
Expand Down
4 changes: 2 additions & 2 deletions lib/fluent/plugin/out_record_modifier.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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.
Expand Down
19 changes: 19 additions & 0 deletions test/test_filter_record_modifier.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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[
<record>
test_key "#{use_nil}"
</record>
]

d.run(default_tag: @tag) do
d.feed("k" => "v")
end

assert_equal [{"k" => "v", "test_key" => nil}], d.filtered.map(&:last)
end
end
23 changes: 22 additions & 1 deletion test/test_out_record_modifier.rb
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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
<record>
test_key "#{use_nil}"
</record>
]

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