fluent-plugin-rename-key 0.3.4 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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: