fluent-plugin-rename-key 0.3.4 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 385eb9972a3cac29dcee7801c0d64f8795347375
4
- data.tar.gz: 4a57d056182bf5255a7cf67fad5069d0a8deff3d
3
+ metadata.gz: 74812e01d25afb405399759e5a33239c1c276965
4
+ data.tar.gz: e50fd65298761ece7e1b1ec7986b98a859e2fcac
5
5
  SHA512:
6
- metadata.gz: efe4bbaa5cec4cb12f2df3375ca26a2d0112236ab597755e73c7aaf57a59239ecb960f542e61ad0bf4bb8950bf5f04fd4de2a7e9759029b954de9e9d06317d41
7
- data.tar.gz: 7089ebf738857551dd5d713bca98da516d483467d9ebdf7a68aedc298aeac93deb1b8801614a6cef23f4cc7bd906ad5e675e50dfbe054878f6063fabf00fa01f
6
+ metadata.gz: 8dd4ac45f8169acb9a340cf7dd1677f7926b77e411404c8e19bef4d682a4936c65ca8c06470ff12c179d6e4dc87936d4dfced5cdb7a8eeac85369c344cb4270a
7
+ data.tar.gz: 0b566176c5d2c450e79a712087b16ed5bb9c1dbd9fb95a81f6cf3cb0954c9097bb57b521a005221f818bea5f4d819656d590d8f9c2c29e8fc7d2169c8446267d
data/.travis.yml CHANGED
@@ -1,8 +1,9 @@
1
1
  language: ruby
2
2
 
3
3
  rvm:
4
- - 2.3.0
4
+ - 2.3
5
5
  - 2.2
6
+ - 2.1
6
7
 
7
8
  # to avoid travis-ci issue since 2015-12-25
8
9
  before_install:
data/README.md CHANGED
@@ -7,89 +7,83 @@
7
7
 
8
8
  ## Overview
9
9
 
10
- Fluentd output plugin. Renames keys matching the given regular expressions, assign new tags, and re-emits. This plugin resembles the implementation of [fluent-plugin-rewrite-tag-filter](https://github.com/y-ken/fluent-plugin-rewrite-tag-filter).
10
+ This manual is for `~> 0.4.0`, which uses fluentd v0.14 API. For earlier version please see [here](https://github.com/shunwen/fluent-plugin-rename-key/tree/fluentd-v0.12).
11
11
 
12
- This plugin is created to resolve the invalid record problem while converting to BSON document before inserting to MongoDB, see [Restrictions on Field Names](http://docs.mongodb.org/manual/reference/limits/#Restrictions on Field Names) and [MongoDB Document Types](http://docs.mongodb.org/meta-driver/latest/legacy/bson/#mongodb-document-types) for more information.
12
+ This plugin renames or replace portion of keys by regular expressions, assign new tags, and re-emits.
13
13
 
14
- ## Installation
15
-
16
- Install with gem or fluent-gem command as:
14
+ It was created to work around the [field name restrictions](http://docs.mongodb.org/manual/reference/limits/#Restrictions on Field Names) of MongoDB BSON document. Also see [MongoDB Document Types](http://docs.mongodb.org/meta-driver/latest/legacy/bson/#mongodb-document-types) for more information.
17
15
 
18
- ```
19
- # for fluentd
20
- $ gem install fluent-plugin-rename-key
16
+ ## Requirements
21
17
 
22
- # for td-agent OSX (Homebrew)
23
- $ /usr/local/Cellar/td-agent/1.1.17/bin/fluent-gem install fluent-plugin-rename-key
18
+ For Fluentd earlier than v0.14.0, please use the earlier version 0.3.4.
24
19
 
25
- # for td-agent
26
- $ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-rename-key
27
- ```
20
+ | fluent-plugin-rename-key | Fluentd | ruby |
21
+ |---------------------------|------------|--------|
22
+ | ~> 0.3.4 | >= v0.12.0 | >= 1.9 |
23
+ | ~> 0.4.0 | >= v0.14.0 | >= 2.1 |
28
24
 
29
- ## Configuration
25
+ ## Installation
30
26
 
31
- ### Notice
27
+ See [Fluentd Installation Guide] (http://docs.fluentd.org/v0.12/categories/installation)
32
28
 
33
- v0.12's filter plugin does not have a functionality to modify tag and time. If you want to modify time in filter plugin, we recommends to migrate to depends on v0.14 Filter Plugin API.
34
- v0.14's filter API has `#filter_with_time` method.
29
+ ## Configuration
35
30
 
36
31
  ### Syntax
37
32
 
38
33
  ```
39
- # <num> is an integer, used to sort and apply the rules
40
- # <key_regexp> is the regular expression used to match the keys, whitespace is not allowed, use "\s" instead
41
- # <new_key> is the string with MatchData placeholder for creating the new key name, whitespace is allowed
34
+ # <num> is an integer for ordering rules, rules are checked in ascending order. Only the first match is applied.
35
+ # <key_regexp> is the regular expression to match keys, ' '(whitespace) is not allowed, use '\s' instead.
36
+ # <new_key> is the new key name pattern, MatchData placeholder '${md[1]}' and whitespace are allowed.
42
37
  rename_rule<num> <key_regexp> <new_key>
43
38
 
44
- # <num> is an integer, used to sort and apply the rules
45
- # <key_regexp> is the regular expression used to match the keys, whitespace is not allowed, use "\s" instead
46
- # <new_key> is the string to replace the matches with, with MatchData placeholder for creating the new key name, whitespace is allowed. Optional, if missing then the matches are removed
39
+ # <num> is an integer for ordering rules, rules are checked in ascending order. Only the first match is applied.
40
+ # <key_regexp> is the regular expression to match keys, ' '(whitespace) is not allowed, use '\s' instead.
41
+ # <new_key> is the pattern to replace the matches with, MatchData placeholder '${md[1]}' and whitespace are allowed.
42
+ # This field is optional, if missing the matches will be replaced with ''(empty string).
47
43
  replace_rule<num> <key_regexp> <new_key>
48
44
 
49
- # Optional: remove tag prefix
45
+ # Optional: dig into the hash structure and rename every matched key, or stop at the first level,
46
+ # default is "true"
47
+ deep_rename <bool>
48
+
49
+ # Optional: remove tag prefix. This is only for <match>
50
50
  remove_tag_prefix <string>
51
51
 
52
- # Optional: append additional name to the original tag, default is "key_renamed"
52
+ # Optional: append additional name to the original tag, default is 'key_renamed'. This is only for <match>
53
53
  append_tag <string>
54
-
55
- # Optional: dig into the hash structure and rename every matched key, or rename only keys at the first level,
56
- # default is "true"
57
- deep_rename <bool>
58
54
  ```
59
55
 
60
56
  ### Example
61
57
 
62
58
  Take this record as example: `'$url' => 'www.google.com', 'level2' => {'$1' => 'option1'}`.
63
- To successfully save it into MongoDB, we can use the following config to replace the keys starting with dollar sign.
59
+ To save it to MongoDB, we can use the following config to replace the keys starting with dollar sign.
60
+
61
+ For Fluentd v0.14 or later, use `rename_key` filter:
64
62
 
65
63
  ```
66
64
  # At rename_rule1, it matches the key starting the '$', say '$url',
67
65
  # and puts the following characters into match group 1.
68
66
  # Then uses the content in match group 1, ${md[1]} = 'url', to generate the new key name 'x$url'.
69
67
 
70
- <match input.test>
71
- type rename_key
72
- remove_tag_prefix input.test
73
- append_tag renamed
68
+ <filter input.test>
69
+ @type rename_key
74
70
  rename_rule1 ^\$(.+) x$${md[1]}
75
71
  rename_rule2 ^l(.{3})l(\d+) ${md[1]}_${md[2]}
76
72
  </match>
77
73
  ```
78
74
 
79
- The resulting record is `'x$url' => 'www.google.com', 'eve_2' => {'x$1' => 'option1'}` with new tag `renamed`.
75
+ The result is `'x$url' => 'www.google.com', 'eve_2' => {'x$1' => 'option1'}`.
80
76
 
81
77
  ### MatchData placeholder
82
78
 
83
- This plugin uses Ruby's `String#match` to match the key to be replaced, and it is possible to refer to the contents of the resulting `MatchData` to create the new key name. `${md[0]}` refers to the matched string and `${md[1]}` refers to match group 1, and so on.
79
+ This plugin uses `String#match` to match keys to be replaced. It is possible to reference the resulting `MatchData` in new key names. For example, `${md[0]}` is the matched string, `${md[1]}` is match group 1, and so on.
84
80
 
85
- **Note:** Range expression `${md[0..2]}` is not supported.
81
+ **Note:** This is done by matching `${md[0]}` string pattern, so array operations such as range `${md[0..2]}` is not supported.
86
82
 
87
- ## TODO
88
-
89
- Pull requests are very welcome!!
83
+ ## Inspired by
84
+ This plugin initially resembled the implementation of [fluent-plugin-rewrite-tag-filter](https://github.com/y-ken/fluent-plugin-rewrite-tag-filter).
90
85
 
91
86
  ## Copyright
92
87
 
93
88
  Copyright : Copyright (c) 2013- Shunwen Hsiao (@hswtw)
94
89
  License : Apache License, Version 2.0
95
-
@@ -3,20 +3,20 @@ $:.push File.expand_path('../lib', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = 'fluent-plugin-rename-key'
6
- s.version = '0.3.4'
7
- s.date = '2016-11-29'
6
+ s.version = '0.4.0'
7
+ s.date = '2017-02-27'
8
8
  s.license = 'Apache-2.0'
9
9
  s.authors = ['Shunwen Hsiao', 'Julian Grinblat', 'Hiroshi Hatake']
10
10
  s.email = ['hsiaoshunwen@gmail.com']
11
11
  s.homepage = 'https://github.com/shunwen/fluent-plugin-rename-key'
12
12
  s.summary = %q[Fluentd output plugin. Rename keys which match given regular expressions, assign new tags and re-emit the records.]
13
13
 
14
- s.required_ruby_version = '>= 1.9.3'
14
+ s.required_ruby_version = '>= 2.1.0'
15
15
  s.files = `git ls-files`.split("\n")
16
16
  s.test_files = `git ls-files -- {test}/*`.split("\n")
17
17
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
18
  s.require_paths = ['lib']
19
- s.add_runtime_dependency 'fluentd', ">= 0.12.0", "< 2"
19
+ s.add_runtime_dependency 'fluentd', ">= 0.14.0", "< 2"
20
20
  s.add_development_dependency 'test-unit', '~> 3.2'
21
21
  s.add_development_dependency 'rake', '~> 11.3'
22
22
  s.add_development_dependency 'coveralls', '~> 0.8'
@@ -1,9 +1,10 @@
1
+ require 'fluent/plugin/filter'
1
2
  require 'fluent/plugin/rename_key_util'
2
3
 
3
- class Fluent::RenameKeyFilter < Fluent::Filter
4
+ class Fluent::Plugin::RenameKeyFilter < Fluent::Plugin::Filter
4
5
  Fluent::Plugin.register_filter 'rename_key', self
5
6
 
6
- include Fluent::RenameKeyUtil
7
+ include Fluent::Plugin::RenameKeyUtil
7
8
 
8
9
  desc 'Deep rename/replace operation.'
9
10
  config_param :deep_rename, :bool, default: true
@@ -14,12 +15,12 @@ class Fluent::RenameKeyFilter < Fluent::Filter
14
15
  create_rename_rules(conf)
15
16
  create_replace_rules(conf)
16
17
 
17
- raise Fluent::ConfigError, "No rename or replace rules are given" if @rename_rules.empty? && @replace_rules.empty?
18
+ if @rename_rules.empty? && @replace_rules.empty?
19
+ raise Fluent::ConfigError, 'No rename nor replace rule given'
20
+ end
18
21
  end
19
22
 
20
- def filter tag, time, record
21
- new_record = rename_key record
22
- new_record = replace_key new_record
23
- new_record
23
+ def filter _tag, _time, record
24
+ replace_key(rename_key(record))
24
25
  end
25
- end if defined?(Fluent::Filter)
26
+ end
@@ -1,27 +1,12 @@
1
+ require 'fluent/plugin/output'
1
2
  require 'fluent/plugin/rename_key_util'
2
3
 
3
- class Fluent::RenameKeyOutput < Fluent::Output
4
+ class Fluent::Plugin::RenameKeyOutput < Fluent::Plugin::Output
4
5
  Fluent::Plugin.register_output 'rename_key', self
5
6
 
6
- include Fluent::RenameKeyUtil
7
+ helpers :event_emitter
7
8
 
8
- # To support Fluentd v0.10.57 or earlier
9
- unless method_defined?(:router)
10
- define_method("router") { Fluent::Engine }
11
- end
12
-
13
- # Define `log` method for v0.10.42 or earlier
14
- unless method_defined?(:log)
15
- define_method("log") { $log }
16
- end
17
-
18
- # For fluentd v0.12.16 or earlier
19
- class << self
20
- unless method_defined?(:desc)
21
- def desc(description)
22
- end
23
- end
24
- end
9
+ include Fluent::Plugin::RenameKeyUtil
25
10
 
26
11
  DEFAULT_APPEND_TAG = 'key_renamed'
27
12
 
@@ -38,12 +23,12 @@ class Fluent::RenameKeyOutput < Fluent::Output
38
23
  create_rename_rules(conf)
39
24
  create_replace_rules(conf)
40
25
 
41
- raise Fluent::ConfigError, "No rename or replace rules are given" if @rename_rules.empty? && @replace_rules.empty?
26
+ raise Fluent::ConfigError, 'No rename nor replace rules are given' if @rename_rules.empty? && @replace_rules.empty?
42
27
 
43
28
  @remove_tag_prefix = /^#{Regexp.escape @remove_tag_prefix}\.?/ if @remove_tag_prefix
44
29
  end
45
30
 
46
- def emit tag, es, chain
31
+ def process tag, es
47
32
  es.each do |time, record|
48
33
  new_tag = @remove_tag_prefix ? tag.sub(@remove_tag_prefix, '') : tag
49
34
  new_tag = "#{new_tag}.#{@append_tag}".sub(/^\./, '')
@@ -51,7 +36,5 @@ class Fluent::RenameKeyOutput < Fluent::Output
51
36
  new_record = replace_key new_record
52
37
  router.emit new_tag, time, new_record
53
38
  end
54
-
55
- chain.next
56
39
  end
57
40
  end
@@ -1,55 +1,42 @@
1
- module Fluent
1
+ module Fluent::Plugin
2
2
  module RenameKeyUtil
3
+ CONF_RENAME = 'rename_rule'
4
+ CONF_REPLACE = 'replace_rule'
5
+
3
6
  def create_rename_rules(conf)
4
7
  @rename_rules = []
5
- conf_rename_rules = conf.keys.select { |k| k =~ /^rename_rule(\d+)$/ }
6
- conf_rename_rules.sort_by { |r| r.sub('rename_rule', '').to_i }.each do |r|
7
- key_regexp, new_key = parse_rename_rule conf[r]
8
+ rule_keys = conf.keys.select { |k| k.strip.start_with? CONF_RENAME }.
9
+ sort_by { |k| k.sub(CONF_RENAME, '').to_i }
8
10
 
9
- if key_regexp.nil? || new_key.nil?
10
- raise Fluent::ConfigError, "Failed to parse: #{r} #{conf[r]}"
11
- end
11
+ rule_keys.each do |rule_key|
12
+ rule = parse_rename_rule conf[rule_key]
12
13
 
13
- if @rename_rules.map { |r| r[:key_regexp] }.include? /#{key_regexp}/
14
- raise Fluent::ConfigError, "Duplicated rules for key #{key_regexp}: #{@rename_rules}"
14
+ if @rename_rules.any? { |existing_rule| existing_rule[:key_regexp] == rule[:key_regexp] }
15
+ raise Fluent::ConfigError, "Duplicated rules for key #{rule[:key_regexp].source}: #{@rename_rules}"
15
16
  end
16
17
 
17
- @rename_rules << { key_regexp: /#{key_regexp}/, new_key: new_key }
18
- log.info "Added rename key rule: #{r} #{@rename_rules.last}"
18
+ @rename_rules << rule
19
+ log.info "Added rename key rule: #{rule_key} #{@rename_rules.last}"
19
20
  end
20
21
  end
21
22
 
22
23
  def create_replace_rules(conf)
23
24
  @replace_rules = []
24
- conf_replace_rules = conf.keys.select { |k| k =~ /^replace_rule(\d+)$/ }
25
- conf_replace_rules.sort_by { |r| r.sub('replace_rule', '').to_i }.each do |r|
26
- key_regexp, replacement = parse_replace_rule conf[r]
25
+ rule_keys = conf.keys.select { |k| k.strip.start_with? CONF_REPLACE }.
26
+ sort_by { |k| k.sub(CONF_REPLACE, '').to_i }
27
27
 
28
- if key_regexp.nil?
29
- raise Fluent::ConfigError, "Failed to parse: #{r} #{conf[r]}"
30
- end
31
-
32
- if replacement.nil?
33
- replacement = ""
34
- end
28
+ rule_keys.each do |rule_key|
29
+ rule = parse_replace_rule conf[rule_key]
35
30
 
36
- if @replace_rules.map { |r| r[:key_regexp] }.include? /#{key_regexp}/
37
- raise Fluent::ConfigError, "Duplicated rules for key #{key_regexp}: #{@replace_rules}"
31
+ if @replace_rules.any? { |existing_rule| existing_rule[:key_regexp] == rule[:key_regexp] }
32
+ raise Fluent::ConfigError, "Duplicated rules for key #{rule[:key_regexp].source}: #{@replace_rules}"
38
33
  end
39
34
 
40
- @replace_rules << { key_regexp: /#{key_regexp}/, replacement: replacement }
41
- log.info "Added replace key rule: #{r} #{@replace_rules.last}"
35
+ @replace_rules << rule
36
+ log.info "Added replace key rule: #{rule_key} #{@replace_rules.last}"
42
37
  end
43
38
  end
44
39
 
45
- def parse_rename_rule rule
46
- $~.captures if rule.match /^([^\s]+)\s+(.+)$/
47
- end
48
-
49
- def parse_replace_rule rule
50
- $~.captures if rule.match /^([^\s]+)(?:\s+(.+))?$/
51
- end
52
-
53
40
  def rename_key record
54
41
  new_record = {}
55
42
 
@@ -106,6 +93,22 @@ module Fluent
106
93
  new_record
107
94
  end
108
95
 
96
+ private
97
+
98
+ def parse_rename_rule rule
99
+ m = rule.match(/^([^\s]+)\s+(.+)$/).captures
100
+ { key_regexp: /#{m[0]}/, new_key: m[1] }
101
+ rescue => e
102
+ raise Fluent::ConfigError, "Failed to parse rename rule #{rule} : #{e.message}"
103
+ end
104
+
105
+ def parse_replace_rule rule
106
+ m = rule.match(/^([^\s]+)(?:\s+(.+))?$/).captures
107
+ { key_regexp: /#{m[0]}/, replacement: m[1] || '' }
108
+ rescue => e
109
+ raise Fluent::ConfigError, "Failed to parse replace rule #{rule} : #{e.message}"
110
+ end
111
+
109
112
  def get_placeholder match_data
110
113
  placeholder = {}
111
114
 
data/test/helper.rb CHANGED
@@ -1,31 +1,7 @@
1
- require 'rubygems'
2
- require 'bundler'
3
- begin
4
- Bundler.setup(:default, :development)
5
- rescue Bundler::BundlerError => e
6
- $stderr.puts e.message
7
- $stderr.puts "Run `bundle install` to install missing gems"
8
- exit e.status_code
9
- end
1
+ require 'bundler/setup'
10
2
  require 'test/unit'
11
3
 
12
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
13
- $LOAD_PATH.unshift(File.dirname(__FILE__))
4
+ $LOAD_PATH.unshift(File.join(__dir__, '..', 'lib'))
5
+ $LOAD_PATH.unshift(__dir__)
14
6
  require 'fluent/test'
15
- unless ENV.has_key?('VERBOSE')
16
- nulllogger = Object.new
17
- nulllogger.instance_eval {|obj|
18
- def method_missing(method, *args)
19
- # pass
20
- end
21
- }
22
- $log = nulllogger
23
- end
24
-
25
- require 'fluent/plugin/out_rename_key'
26
- if defined?(Fluent::Filter)
27
- require 'fluent/plugin/filter_rename_key'
28
- end
29
-
30
- class Test::Unit::TestCase
31
- end
7
+ require 'fluent/test/helpers'
@@ -1,4 +1,6 @@
1
1
  require 'helper'
2
+ require 'fluent/test/driver/filter'
3
+ require 'fluent/plugin/filter_rename_key'
2
4
 
3
5
  class RenameKeyFilterTest < Test::Unit::TestCase
4
6
  MATCH_TAG = 'incoming_tag'
@@ -6,12 +8,11 @@ class RenameKeyFilterTest < Test::Unit::TestCase
6
8
  REPLACE_RULE_CONFIG = 'replace_rule1 ^\$ x'
7
9
 
8
10
  def setup
9
- omit("Fluentd v0.12 or later is required.") unless defined?(Fluent::Filter)
10
11
  Fluent::Test.setup
11
12
  end
12
13
 
13
- def create_driver(conf, tag = MATCH_TAG)
14
- Fluent::Test::FilterTestDriver.new(Fluent::RenameKeyFilter, tag).configure(conf)
14
+ def create_driver(conf)
15
+ Fluent::Test::Driver::Filter.new(Fluent::Plugin::RenameKeyFilter).configure(conf)
15
16
  end
16
17
 
17
18
  def test_config_error
@@ -39,50 +40,28 @@ class RenameKeyFilterTest < Test::Unit::TestCase
39
40
  assert_equal '^\$(.+)2(\d+) ${md[1]}_${md[2]}', d.instance.config['rename_rule2']
40
41
  end
41
42
 
42
- def test_parse_rename_rule
43
- parsed = Fluent::RenameKeyOutput.new.parse_rename_rule '(reg)(exp) ${md[1]} ${md[2]}'
44
- assert_equal 2, parsed.length
45
- assert_equal '(reg)(exp)', parsed[0]
46
- assert_equal '${md[1]} ${md[2]}', parsed[1]
47
- end
48
-
49
- def test_parse_replace_rule_with_replacement
50
- # Replace hyphens with underscores
51
- parsed = Fluent::RenameKeyOutput.new.parse_replace_rule '- _'
52
- assert_equal 2, parsed.length
53
- assert_equal '-', parsed[0]
54
- assert_equal '_', parsed[1]
55
- end
56
-
57
- def test_parse_replace_rule_without_replacement
58
- # Remove all parenthesis hyphens and spaces
59
- parsed = Fluent::RenameKeyOutput.new.parse_replace_rule '[()-\s]'
60
- assert_equal 2, parsed.length
61
- assert_equal '[()-\s]', parsed[0]
62
- assert parsed[1].nil?
63
- end
64
43
 
65
44
  def test_rename_rule_emit_deep_rename_hash
66
45
  d = create_driver RENAME_RULE_CONFIG
67
- d.run do
68
- d.emit '$key1' => 'value1', 'key2' => {'$key3' => 'value3', '$key4'=> {'$key5' => 'value5'} }
46
+ d.run default_tag: MATCH_TAG do
47
+ d.feed '$key1' => 'value1', 'key2' => {'$key3' => 'value3', '$key4'=> {'$key5' => 'value5'} }
69
48
  end
70
49
 
71
- emits = d.emits
72
- assert_equal %w[x$key1 key2], emits[0][2].keys
73
- assert_equal %w[x$key3 x$key4], emits[0][2]['key2'].keys
74
- assert_equal ['x$key5'], emits[0][2]['key2']['x$key4'].keys
50
+ records = d.filtered_records
51
+ assert_equal %w[x$key1 key2], records[0].keys
52
+ assert_equal %w[x$key3 x$key4], records[0]['key2'].keys
53
+ assert_equal ['x$key5'], records[0]['key2']['x$key4'].keys
75
54
  end
76
55
 
77
56
  def test_rename_rule_emit_deep_rename_array
78
57
  d = create_driver RENAME_RULE_CONFIG
79
- d.run do
80
- d.emit '$key1' => 'value1', 'key2' => [{'$key3' => 'value3'}, {'$key4'=> {'$key5' => 'value5'}}]
58
+ d.run default_tag: MATCH_TAG do
59
+ d.feed '$key1' => 'value1', 'key2' => [{'$key3' => 'value3'}, {'$key4'=> {'$key5' => 'value5'}}]
81
60
  end
82
61
 
83
- emits = d.emits
84
- assert_equal %w[x$key3 x$key4], emits[0][2]['key2'].flat_map(&:keys)
85
- assert_equal ['x$key5'], emits[0][2]['key2'][1]['x$key4'].keys
62
+ records = d.filtered_records
63
+ assert_equal %w[x$key3 x$key4], records[0]['key2'].flat_map(&:keys)
64
+ assert_equal ['x$key5'], records[0]['key2'][1]['x$key4'].keys
86
65
  end
87
66
 
88
67
  def test_rename_rule_emit_deep_rename_off
@@ -92,22 +71,22 @@ class RenameKeyFilterTest < Test::Unit::TestCase
92
71
  ]
93
72
 
94
73
  d = create_driver config
95
- d.run do
96
- d.emit '$key1' => 'value1', 'key2' => {'$key3'=>'value3', '$key4'=> 'value4'}
74
+ d.run default_tag: MATCH_TAG do
75
+ d.feed '$key1' => 'value1', 'key2' => {'$key3'=>'value3', '$key4'=> 'value4'}
97
76
  end
98
77
 
99
- emits = d.emits
100
- assert_equal %w[$key3 $key4], emits[0][2]['key2'].keys
78
+ records = d.filtered_records
79
+ assert_equal %w[$key3 $key4], records[0]['key2'].keys
101
80
  end
102
81
 
103
82
  def test_rename_rule_emit_with_match_data
104
83
  d = create_driver 'rename_rule1 (\w+)\s(\w+)\s(\w+) ${md[3]} ${md[2]} ${md[1]}'
105
- d.run do
106
- d.emit 'key1 key2 key3' => 'value'
84
+ d.run default_tag: MATCH_TAG do
85
+ d.feed 'key1 key2 key3' => 'value'
107
86
  end
108
- emits = d.emits
109
- assert_equal 1, emits.length
110
- assert_equal ['key3 key2 key1'], emits[0][2].keys
87
+ records = d.filtered_records
88
+ assert_equal 1, records.length
89
+ assert_equal ['key3 key2 key1'], records[0].keys
111
90
  end
112
91
 
113
92
  def test_multiple_rename_rules_emit
@@ -117,45 +96,45 @@ class RenameKeyFilterTest < Test::Unit::TestCase
117
96
  ]
118
97
 
119
98
  d = create_driver config_multiple_rules
120
- d.run do
121
- d.emit 'key 1' => 'value1', 'key 2' => 'value2'
99
+ d.run default_tag: MATCH_TAG do
100
+ d.feed 'key 1' => 'value1', 'key 2' => 'value2'
122
101
  end
123
102
 
124
- emits = d.emits
125
- assert_equal %w[key_1 key_2], emits[0][2].keys
103
+ records = d.filtered_records
104
+ assert_equal %w[key_1 key_2], records[0].keys
126
105
  end
127
106
 
128
107
  def test_replace_rule_emit_deep_rename_hash
129
108
  d = create_driver 'replace_rule1 ^(\$) x'
130
109
 
131
- d.run do
132
- d.emit '$key1' => 'value1', 'key2' => { 'key3' => 'value3', '$key4' => 'value4' }
110
+ d.run default_tag: MATCH_TAG do
111
+ d.feed '$key1' => 'value1', 'key2' => { 'key3' => 'value3', '$key4' => 'value4' }
133
112
  end
134
- emits = d.emits
135
- assert_equal %w[xkey1 key2], emits[0][2].keys
136
- assert_equal %w[key3 xkey4], emits[0][2]['key2'].keys
113
+ records = d.filtered_records
114
+ assert_equal %w[xkey1 key2], records[0].keys
115
+ assert_equal %w[key3 xkey4], records[0]['key2'].keys
137
116
  end
138
117
 
139
118
  def test_replace_rule_emit_with_match_data
140
119
  d = create_driver 'rename_rule1 (\w+)\s(\w+)\s(\w+) ${md[3]} ${md[2]} ${md[1]}'
141
- d.run do
142
- d.emit 'key1 key2 key3' => 'value'
120
+ d.run default_tag: MATCH_TAG do
121
+ d.feed 'key1 key2 key3' => 'value'
143
122
  end
144
- emits = d.emits
145
- assert_equal 1, emits.length
146
- assert_equal ['key3 key2 key1'], emits[0][2].keys
123
+ records = d.filtered_records
124
+ assert_equal 1, records.length
125
+ assert_equal ['key3 key2 key1'], records[0].keys
147
126
  end
148
127
 
149
128
  def test_replace_rule_emit_deep_rename_array
150
129
  d = create_driver 'replace_rule1 ^(\$) x${md[1]}'
151
130
 
152
- d.run do
153
- d.emit '$key1' => 'value1', 'key2' => [{'$key3' => 'value3'}, {'$key4' => {'$key5' => 'value5'}}]
131
+ d.run default_tag: MATCH_TAG do
132
+ d.feed '$key1' => 'value1', 'key2' => [{'$key3' => 'value3'}, {'$key4' => {'$key5' => 'value5'}}]
154
133
  end
155
134
 
156
- emits = d.emits
157
- assert_equal %w[x$key3 x$key4], emits[0][2]['key2'].flat_map(&:keys)
158
- assert_equal %w[x$key5], emits[0][2]['key2'][1]['x$key4'].keys
135
+ records = d.filtered_records
136
+ assert_equal %w[x$key3 x$key4], records[0]['key2'].flat_map(&:keys)
137
+ assert_equal %w[x$key5], records[0]['key2'][1]['x$key4'].keys
159
138
  end
160
139
 
161
140
  def test_replace_rule_emit_deep_rename_off
@@ -165,51 +144,51 @@ class RenameKeyFilterTest < Test::Unit::TestCase
165
144
  ]
166
145
 
167
146
  d = create_driver config
168
- d.run do
169
- d.emit '$key1' => 'value1', 'key2' => {'$key3'=>'value3', '$key4'=> 'value4'}
147
+ d.run default_tag: MATCH_TAG do
148
+ d.feed '$key1' => 'value1', 'key2' => {'$key3'=>'value3', '$key4'=> 'value4'}
170
149
  end
171
150
 
172
- emits = d.emits
173
- assert_equal %w[$key3 $key4], emits[0][2]['key2'].keys
151
+ records = d.filtered_records
152
+ assert_equal %w[$key3 $key4], records[0]['key2'].keys
174
153
  end
175
154
 
176
155
  def test_replace_rule_emit_remove_matched_when_no_replacement
177
- d = create_driver 'replace_rule1 [\s/()]'
178
- d.run do
179
- d.emit 'key (/1 )' => 'value1'
156
+ d = create_driver 'replace_rule1 "[\\\\s/()]"'
157
+ d.run default_tag: MATCH_TAG do
158
+ d.feed 'key (/1 )' => 'value1'
180
159
  end
181
160
 
182
- emits = d.emits
183
- assert_equal %w[key1], emits[0][2].keys
161
+ records = d.filtered_records
162
+ assert_equal %w[key1], records[0].keys
184
163
  end
185
164
 
186
165
  def test_multiple_replace_rules_emit
187
166
  config_multiple_rules = %q[
188
167
  replace_rule1 ^(\w+)\s(\d) ${md[1]}${md[2]}
189
- replace_rule2 [\s()]
168
+ replace_rule2 "[\\\\s()]"
190
169
  ]
191
170
 
192
171
  d = create_driver config_multiple_rules
193
- d.run do
194
- d.emit 'key 1' => 'value1', 'key (2)' => 'value2'
172
+ d.run default_tag: MATCH_TAG do
173
+ d.feed 'key 1' => 'value1', 'key (2)' => 'value2'
195
174
  end
196
175
 
197
- emits = d.emits
198
- assert_equal %w[key1 key2], emits[0][2].keys
176
+ records = d.filtered_records
177
+ assert_equal %w[key1 key2], records[0].keys
199
178
  end
200
179
 
201
180
  def test_combined_rename_rule_and_replace_rule
202
181
  config_combined_rules = %q[
203
182
  rename_rule1 ^(.+)\s(one) ${md[1]}1
204
- replace_rule2 [\s()]
183
+ replace_rule2 "[\\\\s()]"
205
184
  ]
206
185
 
207
186
  d = create_driver config_combined_rules
208
- d.run do
209
- d.emit '(key) one (x)' => 'value1', 'key (2)' => 'value2'
187
+ d.run default_tag: MATCH_TAG do
188
+ d.feed '(key) one (x)' => 'value1', 'key (2)' => 'value2'
210
189
  end
211
190
 
212
- emits = d.emits
213
- assert_equal %w[key1 key2], emits[0][2].keys
191
+ records = d.filtered_records
192
+ assert_equal %w[key1 key2], records[0].keys
214
193
  end
215
194
  end
@@ -1,4 +1,6 @@
1
1
  require 'helper'
2
+ require 'fluent/plugin/out_rename_key'
3
+ require 'fluent/test/driver/output'
2
4
 
3
5
  class RenameKeyOutputTest < Test::Unit::TestCase
4
6
  MATCH_TAG = 'incoming_tag'
@@ -9,15 +11,13 @@ class RenameKeyOutputTest < Test::Unit::TestCase
9
11
  Fluent::Test.setup
10
12
  end
11
13
 
12
- def create_driver(conf, tag = MATCH_TAG)
13
- Fluent::Test::OutputTestDriver.new(Fluent::RenameKeyOutput, tag).configure(conf)
14
+ def create_driver(conf)
15
+ Fluent::Test::Driver::Output.new(Fluent::Plugin::RenameKeyOutput).configure(conf)
14
16
  end
15
17
 
16
18
  def test_config_error
17
19
  assert_raise(Fluent::ConfigError) { create_driver('') }
18
-
19
20
  assert_raise(Fluent::ConfigError) { create_driver('rename_rule1 ^$(.+?) ') }
20
-
21
21
  assert_raise(Fluent::ConfigError) {
22
22
  config_dup_rules_for_a_key = %q[
23
23
  rename_rule1 ^\$(.+) ${md[1]}
@@ -38,39 +38,16 @@ class RenameKeyOutputTest < Test::Unit::TestCase
38
38
  assert_equal '^\$(.+)2(\d+) ${md[1]}_${md[2]}', d.instance.config['rename_rule2']
39
39
  end
40
40
 
41
- def test_parse_rename_rule
42
- parsed = Fluent::RenameKeyOutput.new.parse_rename_rule '(reg)(exp) ${md[1]} ${md[2]}'
43
- assert_equal 2, parsed.length
44
- assert_equal '(reg)(exp)', parsed[0]
45
- assert_equal '${md[1]} ${md[2]}', parsed[1]
46
- end
47
-
48
- def test_parse_replace_rule_with_replacement
49
- # Replace hyphens with underscores
50
- parsed = Fluent::RenameKeyOutput.new.parse_replace_rule '- _'
51
- assert_equal 2, parsed.length
52
- assert_equal '-', parsed[0]
53
- assert_equal '_', parsed[1]
54
- end
55
-
56
- def test_parse_replace_rule_without_replacement
57
- # Remove all parethesis hyphens and spaces
58
- parsed = Fluent::RenameKeyOutput.new.parse_replace_rule '[()-\s]'
59
- assert_equal 2, parsed.length
60
- assert_equal '[()-\s]', parsed[0]
61
- assert parsed[1].nil?
62
- end
63
-
64
41
  def test_emit_default_append_tag
65
- append_tag = Fluent::RenameKeyOutput::DEFAULT_APPEND_TAG
42
+ append_tag = Fluent::Plugin::RenameKeyOutput::DEFAULT_APPEND_TAG
66
43
  d = create_driver RENAME_RULE_CONFIG
67
- d.run do
68
- d.emit '$key1' => 'value1', '%key2' => {'$key3'=>'123', '$key4'=> {'$key5' => 'value2'} }
44
+ d.run default_tag: MATCH_TAG do
45
+ d.feed '$key1' => 'value1', '%key2' => {'$key3'=>'123', '$key4'=> {'$key5' => 'value2'} }
69
46
  end
70
47
 
71
- emits = d.emits
72
- assert_equal 1, emits.length
73
- assert_equal "#{MATCH_TAG}.#{append_tag}", emits[0][0]
48
+ events = d.events
49
+ assert_equal 1, events.length
50
+ assert_equal "#{MATCH_TAG}.#{append_tag}", events[0][0]
74
51
  end
75
52
 
76
53
  def test_emit_append_custom_tag
@@ -81,17 +58,17 @@ class RenameKeyOutputTest < Test::Unit::TestCase
81
58
  ]
82
59
  d = create_driver config
83
60
 
84
- d.run do
85
- d.emit '$key1' => 'value1', '%key2' => {'$key3'=>'123', '$key4'=> {'$key5' => 'value2'} }
61
+ d.run default_tag: MATCH_TAG do
62
+ d.feed '$key1' => 'value1', '%key2' => {'$key3'=>'123', '$key4'=> {'$key5' => 'value2'} }
86
63
  end
87
64
 
88
- emits = d.emits
89
- assert_equal 1, emits.length
90
- assert_equal "#{MATCH_TAG}.#{custom_tag}", emits[0][0]
65
+ events = d.events
66
+ assert_equal 1, events.length
67
+ assert_equal "#{MATCH_TAG}.#{custom_tag}", events[0][0]
91
68
  end
92
69
 
93
70
  def test_remove_tag_prefix
94
- append_tag = Fluent::RenameKeyOutput::DEFAULT_APPEND_TAG
71
+ append_tag = Fluent::Plugin::RenameKeyOutput::DEFAULT_APPEND_TAG
95
72
 
96
73
  config = %Q[
97
74
  #{RENAME_RULE_CONFIG}
@@ -99,38 +76,38 @@ class RenameKeyOutputTest < Test::Unit::TestCase
99
76
  ]
100
77
 
101
78
  d = create_driver config
102
- d.run do
103
- d.emit 'key1' => 'value1'
104
- d.emit '$key2' => 'value2'
79
+ d.run default_tag: MATCH_TAG do
80
+ d.feed 'key1' => 'value1'
81
+ d.feed '$key2' => 'value2'
105
82
  end
106
83
 
107
- emits = d.emits
108
- assert_equal 2, emits.length
109
- assert_equal append_tag, emits[0][0]
110
- assert_equal append_tag, emits[1][0]
84
+ events = d.events
85
+ assert_equal 2, events.length
86
+ assert_equal append_tag, events[0][0]
87
+ assert_equal append_tag, events[1][0]
111
88
  end
112
89
 
113
90
  def test_rename_rule_emit_deep_rename_hash
114
91
  d = create_driver RENAME_RULE_CONFIG
115
- d.run do
116
- d.emit '$key1' => 'value1', 'key2' => {'$key3' => 'value3', '$key4'=> {'$key5' => 'value5'} }
92
+ d.run default_tag: MATCH_TAG do
93
+ d.feed '$key1' => 'value1', 'key2' => {'$key3' => 'value3', '$key4'=> {'$key5' => 'value5'} }
117
94
  end
118
95
 
119
- emits = d.emits
120
- assert_equal %w[x$key1 key2], emits[0][2].keys
121
- assert_equal %w[x$key3 x$key4], emits[0][2]['key2'].keys
122
- assert_equal ['x$key5'], emits[0][2]['key2']['x$key4'].keys
96
+ events = d.events
97
+ assert_equal %w[x$key1 key2], events[0][2].keys
98
+ assert_equal %w[x$key3 x$key4], events[0][2]['key2'].keys
99
+ assert_equal ['x$key5'], events[0][2]['key2']['x$key4'].keys
123
100
  end
124
101
 
125
102
  def test_rename_rule_emit_deep_rename_array
126
103
  d = create_driver RENAME_RULE_CONFIG
127
- d.run do
128
- d.emit '$key1' => 'value1', 'key2' => [{'$key3' => 'value3'}, {'$key4'=> {'$key5' => 'value5'}}]
104
+ d.run default_tag: MATCH_TAG do
105
+ d.feed '$key1' => 'value1', 'key2' => [{'$key3' => 'value3'}, {'$key4'=> {'$key5' => 'value5'}}]
129
106
  end
130
107
 
131
- emits = d.emits
132
- assert_equal %w[x$key3 x$key4], emits[0][2]['key2'].flat_map(&:keys)
133
- assert_equal ['x$key5'], emits[0][2]['key2'][1]['x$key4'].keys
108
+ events = d.events
109
+ assert_equal %w[x$key3 x$key4], events[0][2]['key2'].flat_map(&:keys)
110
+ assert_equal ['x$key5'], events[0][2]['key2'][1]['x$key4'].keys
134
111
  end
135
112
 
136
113
  def test_rename_rule_emit_deep_rename_off
@@ -140,22 +117,22 @@ class RenameKeyOutputTest < Test::Unit::TestCase
140
117
  ]
141
118
 
142
119
  d = create_driver config
143
- d.run do
144
- d.emit '$key1' => 'value1', 'key2' => {'$key3'=>'value3', '$key4'=> 'value4'}
120
+ d.run default_tag: MATCH_TAG do
121
+ d.feed '$key1' => 'value1', 'key2' => {'$key3'=>'value3', '$key4'=> 'value4'}
145
122
  end
146
123
 
147
- emits = d.emits
148
- assert_equal %w[$key3 $key4], emits[0][2]['key2'].keys
124
+ events = d.events
125
+ assert_equal %w[$key3 $key4], events[0][2]['key2'].keys
149
126
  end
150
127
 
151
128
  def test_rename_rule_emit_with_match_data
152
129
  d = create_driver 'rename_rule1 (\w+)\s(\w+)\s(\w+) ${md[3]} ${md[2]} ${md[1]}'
153
- d.run do
154
- d.emit 'key1 key2 key3' => 'value'
130
+ d.run default_tag: MATCH_TAG do
131
+ d.feed 'key1 key2 key3' => 'value'
155
132
  end
156
- emits = d.emits
157
- assert_equal 1, emits.length
158
- assert_equal ['key3 key2 key1'], emits[0][2].keys
133
+ events = d.events
134
+ assert_equal 1, events.length
135
+ assert_equal ['key3 key2 key1'], events[0][2].keys
159
136
  end
160
137
 
161
138
  def test_multiple_rename_rules_emit
@@ -165,45 +142,45 @@ class RenameKeyOutputTest < Test::Unit::TestCase
165
142
  ]
166
143
 
167
144
  d = create_driver config_multiple_rules
168
- d.run do
169
- d.emit 'key 1' => 'value1', 'key 2' => 'value2'
145
+ d.run default_tag: MATCH_TAG do
146
+ d.feed 'key 1' => 'value1', 'key 2' => 'value2'
170
147
  end
171
148
 
172
- emits = d.emits
173
- assert_equal %w[key_1 key_2], emits[0][2].keys
149
+ events = d.events
150
+ assert_equal %w[key_1 key_2], events[0][2].keys
174
151
  end
175
152
 
176
153
  def test_replace_rule_emit_deep_rename_hash
177
154
  d = create_driver 'replace_rule1 ^(\$) x'
178
155
 
179
- d.run do
180
- d.emit '$key1' => 'value1', 'key2' => { 'key3' => 'value3', '$key4' => 'value4' }
156
+ d.run default_tag: MATCH_TAG do
157
+ d.feed '$key1' => 'value1', 'key2' => { 'key3' => 'value3', '$key4' => 'value4' }
181
158
  end
182
- emits = d.emits
183
- assert_equal %w[xkey1 key2], emits[0][2].keys
184
- assert_equal %w[key3 xkey4], emits[0][2]['key2'].keys
159
+ events = d.events
160
+ assert_equal %w[xkey1 key2], events[0][2].keys
161
+ assert_equal %w[key3 xkey4], events[0][2]['key2'].keys
185
162
  end
186
163
 
187
164
  def test_replace_rule_emit_with_match_data
188
165
  d = create_driver 'rename_rule1 (\w+)\s(\w+)\s(\w+) ${md[3]} ${md[2]} ${md[1]}'
189
- d.run do
190
- d.emit 'key1 key2 key3' => 'value'
166
+ d.run default_tag: MATCH_TAG do
167
+ d.feed 'key1 key2 key3' => 'value'
191
168
  end
192
- emits = d.emits
193
- assert_equal 1, emits.length
194
- assert_equal ['key3 key2 key1'], emits[0][2].keys
169
+ events = d.events
170
+ assert_equal 1, events.length
171
+ assert_equal ['key3 key2 key1'], events[0][2].keys
195
172
  end
196
173
 
197
174
  def test_replace_rule_emit_deep_rename_array
198
175
  d = create_driver 'replace_rule1 ^(\$) x${md[1]}'
199
176
 
200
- d.run do
201
- d.emit '$key1' => 'value1', 'key2' => [{'$key3' => 'value3'}, {'$key4' => {'$key5' => 'value5'}}]
177
+ d.run default_tag: MATCH_TAG do
178
+ d.feed '$key1' => 'value1', 'key2' => [{'$key3' => 'value3'}, {'$key4' => {'$key5' => 'value5'}}]
202
179
  end
203
180
 
204
- emits = d.emits
205
- assert_equal %w[x$key3 x$key4], emits[0][2]['key2'].flat_map(&:keys)
206
- assert_equal %w[x$key5], emits[0][2]['key2'][1]['x$key4'].keys
181
+ events = d.events
182
+ assert_equal %w[x$key3 x$key4], events[0][2]['key2'].flat_map(&:keys)
183
+ assert_equal %w[x$key5], events[0][2]['key2'][1]['x$key4'].keys
207
184
  end
208
185
 
209
186
  def test_replace_rule_emit_deep_rename_off
@@ -213,51 +190,51 @@ class RenameKeyOutputTest < Test::Unit::TestCase
213
190
  ]
214
191
 
215
192
  d = create_driver config
216
- d.run do
217
- d.emit '$key1' => 'value1', 'key2' => {'$key3'=>'value3', '$key4'=> 'value4'}
193
+ d.run default_tag: MATCH_TAG do
194
+ d.feed '$key1' => 'value1', 'key2' => {'$key3'=>'value3', '$key4'=> 'value4'}
218
195
  end
219
196
 
220
- emits = d.emits
221
- assert_equal %w[$key3 $key4], emits[0][2]['key2'].keys
197
+ events = d.events
198
+ assert_equal %w[$key3 $key4], events[0][2]['key2'].keys
222
199
  end
223
200
 
224
201
  def test_replace_rule_emit_remove_matched_when_no_replacement
225
- d = create_driver 'replace_rule1 [\s/()]'
226
- d.run do
227
- d.emit 'key (/1 )' => 'value1'
202
+ d = create_driver 'replace_rule1 "[\\\\s/()]"'
203
+ d.run default_tag: MATCH_TAG do
204
+ d.feed 'key (/1 )' => 'value1'
228
205
  end
229
206
 
230
- emits = d.emits
231
- assert_equal %w[key1], emits[0][2].keys
207
+ events = d.events
208
+ assert_equal %w[key1], events[0][2].keys
232
209
  end
233
210
 
234
211
  def test_multiple_replace_rules_emit
235
212
  config_multiple_rules = %q[
236
213
  replace_rule1 ^(\w+)\s(\d) ${md[1]}${md[2]}
237
- replace_rule2 [\s()]
214
+ replace_rule2 "[\\\\s()]"
238
215
  ]
239
216
 
240
217
  d = create_driver config_multiple_rules
241
- d.run do
242
- d.emit 'key 1' => 'value1', 'key (2)' => 'value2'
218
+ d.run default_tag: MATCH_TAG do
219
+ d.feed 'key 1' => 'value1', 'key (2)' => 'value2'
243
220
  end
244
221
 
245
- emits = d.emits
246
- assert_equal %w[key1 key2], emits[0][2].keys
222
+ events = d.events
223
+ assert_equal %w[key1 key2], events[0][2].keys
247
224
  end
248
225
 
249
226
  def test_combined_rename_rule_and_replace_rule
250
227
  config_combined_rules = %q[
251
228
  rename_rule1 ^(.+)\s(one) ${md[1]}1
252
- replace_rule2 [\s()]
229
+ replace_rule2 "[\\\\s()]"
253
230
  ]
254
231
 
255
232
  d = create_driver config_combined_rules
256
- d.run do
257
- d.emit '(key) one (x)' => 'value1', 'key (2)' => 'value2'
233
+ d.run default_tag: MATCH_TAG do
234
+ d.feed '(key) one (x)' => 'value1', 'key (2)' => 'value2'
258
235
  end
259
236
 
260
- emits = d.emits
261
- assert_equal %w[key1 key2], emits[0][2].keys
237
+ events = d.events
238
+ assert_equal %w[key1 key2], events[0][2].keys
262
239
  end
263
240
  end
@@ -0,0 +1,32 @@
1
+ require 'test/unit'
2
+ require 'fluent/plugin/filter_rename_key'
3
+
4
+ class TestClass
5
+ include Fluent::Plugin::RenameKeyUtil
6
+ end
7
+
8
+ class RenameKeyUtilTest < Test::Unit::TestCase
9
+
10
+ def test_parse_rename_rule
11
+ parsed = TestClass.new.send :parse_rename_rule, '(reg)(exp) ${md[1]} ${md[2]}'
12
+ assert_equal 2, parsed.length
13
+ assert_equal /(reg)(exp)/, parsed[:key_regexp]
14
+ assert_equal '${md[1]} ${md[2]}', parsed[:new_key]
15
+ end
16
+
17
+ def test_parse_replace_rule_with_replacement
18
+ # Replace hyphens with underscores
19
+ parsed = TestClass.new.send :parse_replace_rule, '- _'
20
+ assert_equal 2, parsed.length
21
+ assert_equal /-/, parsed[:key_regexp]
22
+ assert_equal '_', parsed[:replacement]
23
+ end
24
+
25
+ def test_parse_replace_rule_without_replacement
26
+ # Remove all parentheses, hyphens, and spaces
27
+ parsed = TestClass.new.send :parse_replace_rule, '[-\s()]'
28
+ assert_equal 2, parsed.length
29
+ assert_equal /[-\s()]/, parsed[:key_regexp]
30
+ assert_equal '', parsed[:replacement]
31
+ end
32
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-rename-key
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shunwen Hsiao
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-11-29 00:00:00.000000000 Z
13
+ date: 2017-02-27 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: fluentd
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: 0.12.0
21
+ version: 0.14.0
22
22
  - - "<"
23
23
  - !ruby/object:Gem::Version
24
24
  version: '2'
@@ -28,7 +28,7 @@ dependencies:
28
28
  requirements:
29
29
  - - ">="
30
30
  - !ruby/object:Gem::Version
31
- version: 0.12.0
31
+ version: 0.14.0
32
32
  - - "<"
33
33
  - !ruby/object:Gem::Version
34
34
  version: '2'
@@ -94,6 +94,7 @@ files:
94
94
  - test/helper.rb
95
95
  - test/plugin/test_filter_rename_key.rb
96
96
  - test/plugin/test_out_rename_key.rb
97
+ - test/plugin/test_rename_key_util.rb
97
98
  homepage: https://github.com/shunwen/fluent-plugin-rename-key
98
99
  licenses:
99
100
  - Apache-2.0
@@ -106,7 +107,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
106
107
  requirements:
107
108
  - - ">="
108
109
  - !ruby/object:Gem::Version
109
- version: 1.9.3
110
+ version: 2.1.0
110
111
  required_rubygems_version: !ruby/object:Gem::Requirement
111
112
  requirements:
112
113
  - - ">="
@@ -114,10 +115,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
115
  version: '0'
115
116
  requirements: []
116
117
  rubyforge_project:
117
- rubygems_version: 2.6.4
118
+ rubygems_version: 2.6.10
118
119
  signing_key:
119
120
  specification_version: 4
120
121
  summary: Fluentd output plugin. Rename keys which match given regular expressions,
121
122
  assign new tags and re-emit the records.
122
123
  test_files: []
123
- has_rdoc: