fluent-plugin-nested-hash-filter 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 64f83a066f2e3c8d2a3453f62615abc36a1d664a
4
+ data.tar.gz: 5da7b8ef0de45bf917245a3eb5fac1867b33d659
5
+ SHA512:
6
+ metadata.gz: 2f009f27550f02a2f6333ef8ffca7d8925ccc6b45e3763abc2827af2fa4cd440cd87b273cf6359739d87f11a097d29c61b02e452313d74cb880231d6fcdda651
7
+ data.tar.gz: 0dde134af29ad68a084ea62431b12ac2bef0c2c972a228cbd5053ace7bb549e72888a3d232f83cdebb3dec337880e0c57ccba2c44b892e7c8d95e3fc7b6ef08d
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ /vendor/
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.2
4
+ - 2.1
5
+ - 2.0.0
6
+ - 1.9.3
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in fluent-plugin-nested-hash-filter.gemspec
4
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,5 @@
1
+ guard :test do
2
+ watch(%r{^test/.+_test\.rb$})
3
+ watch('test/test_helper.rb') { 'test' }
4
+ watch(%r{^lib/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
5
+ end
data/README.md ADDED
@@ -0,0 +1,42 @@
1
+ # fluent-plugin-nested-hash-filter
2
+
3
+ [![Build Status](https://travis-ci.org/sugilog/fluent-plugin-nested-hash-filter.png?branch=master)](https://travis-ci.org/sugilog/fluent-plugin-nested-hash-filter.svg)
4
+
5
+
6
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/fluent/plugin/filter_nested_hash`.
7
+
8
+ TODO: Delete this and the text above, and describe your gem
9
+
10
+ ## Installation
11
+
12
+ Add this line to your application's Gemfile:
13
+
14
+ ```ruby
15
+ gem 'fluent-plugin-nested-hash-filter'
16
+ ```
17
+
18
+ And then execute:
19
+
20
+ $ bundle
21
+
22
+ Or install it yourself as:
23
+
24
+ $ gem install fluent-plugin-nested-hash-filter
25
+
26
+ ## Usage
27
+
28
+ TODO: Write usage instructions here
29
+
30
+ ## Development
31
+
32
+ After checking out the repo, run `bundle install` to install dependencies.
33
+
34
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
35
+
36
+ ## Contributing
37
+
38
+ 1. Fork it ( https://github.com/sugilog/fluent-plugin-nested-hash-filter/fork )
39
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
40
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
41
+ 4. Push to the branch (`git push origin my-new-feature`)
42
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ desc "Run tests"
5
+ Rake::TestTask.new do |test|
6
+ test.name = :test
7
+ test.libs = ["lib", "test"]
8
+ test.test_files = FileList["test/**/*_test.rb"]
9
+ test.verbose = true
10
+ end
11
+
12
+ task :default => :test
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "fluent-plugin-nested-hash-filter"
7
+ spec.version = "0.0.1"
8
+ spec.authors = ["sugilog"]
9
+ spec.email = ["sugilog@gmail.com"]
10
+
11
+ spec.summary = %q{Fluent Plugin for converting nested hash into flatten key-value pair.}
12
+ spec.description = %q{Fluent Plugin for converting nested hash into flatten key-value pair.}
13
+ spec.homepage = "https://github.com/sugilog/fluent-plugin-nested-hash-filter"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.require_paths = ["lib"]
17
+
18
+ spec.add_development_dependency "bundler"
19
+ spec.add_development_dependency "rake", "~> 10.0"
20
+ spec.add_runtime_dependency "fluentd"
21
+ spec.add_development_dependency "test-unit"
22
+ spec.add_development_dependency "guard"
23
+ spec.add_development_dependency "guard-test"
24
+ end
@@ -0,0 +1,23 @@
1
+ require "fluent/plugin/nested_hash_filter/nested_object"
2
+
3
+ module Fluent
4
+ class FilterNestedHash < Filter
5
+ Plugin.register_filter("nested_hash_filter", self)
6
+
7
+ def configure conf
8
+ super
9
+ end
10
+
11
+ def start
12
+ super
13
+ end
14
+
15
+ def shutdown
16
+ super
17
+ end
18
+
19
+ def filter tag, time, record
20
+ Fluent::NestedHashFilter::NestedObject.convert record
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,72 @@
1
+ module Fluent
2
+ module NestedHashFilter
3
+ module NestedObject
4
+ CONNECTOR = "."
5
+
6
+ def self.init
7
+ @output = {}
8
+ @output_keys = []
9
+ end
10
+
11
+ def self.convert object
12
+ init
13
+ select object
14
+
15
+ @output
16
+ end
17
+
18
+ def self.select object
19
+ case object
20
+ when Hash
21
+ convert_hash object
22
+ when Array
23
+ convert_array object
24
+ else
25
+ update object
26
+ end
27
+ end
28
+
29
+ def self.add_key key
30
+ @output_keys.push key
31
+ end
32
+
33
+ def self.pop_key
34
+ @output_keys.pop
35
+ end
36
+
37
+ def self.current_key
38
+ @output_keys.join CONNECTOR
39
+ end
40
+
41
+ def self.update value
42
+ unless current_key.empty?
43
+ @output.update current_key => value
44
+ end
45
+ end
46
+
47
+ def self.convert_hash hash
48
+ if hash.keys.empty?
49
+ update nil
50
+ end
51
+
52
+ hash.each do |key, value|
53
+ add_key key
54
+ select value
55
+ pop_key
56
+ end
57
+ end
58
+
59
+ def self.convert_array array
60
+ if array.empty?
61
+ update nil
62
+ end
63
+
64
+ array.each_with_index do |value, index|
65
+ add_key index
66
+ select value
67
+ pop_key
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,28 @@
1
+ require "fluent/plugin/nested_hash_filter/nested_object"
2
+
3
+ module Fluent
4
+ class OutNestedHash < Output
5
+ Plugin.register_output("nested_hash_filter", self)
6
+
7
+ def configure conf
8
+ super
9
+ end
10
+
11
+ def start
12
+ super
13
+ end
14
+
15
+ def shutdown
16
+ super
17
+ end
18
+
19
+ def emit tag, es, chain
20
+ es.each do |time, record|
21
+ record = Fluent::NestedHashFilter::NestedObject.convert record
22
+ Fluent::Engine.emit tag, time, record
23
+ end
24
+
25
+ chain.next
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,70 @@
1
+ require "test_helper"
2
+ require "fluent/plugin/filter_nested_hash"
3
+
4
+ class FilterNestedHashTest < Test::Unit::TestCase
5
+ include Fluent
6
+
7
+ setup do
8
+ Fluent::Test.setup
9
+ @time = Fluent::Engine.now
10
+ end
11
+
12
+ def create_driver config = ""
13
+ driver = Test::FilterTestDriver.new FilterNestedHash
14
+ driver.configure config, true
15
+ end
16
+
17
+ def emit config, messages
18
+ driver = create_driver config
19
+
20
+ driver.run do
21
+ messages.each do |message|
22
+ driver.emit message, @time
23
+ end
24
+ end
25
+
26
+ driver
27
+ end
28
+
29
+ def filtered driver, index
30
+ result = driver.filtered_as_array[index]
31
+ {tag: result[0], time: result[1], message: result[2]}
32
+ end
33
+
34
+ sub_test_case "configure" do
35
+ test "check default" do
36
+ assert_nothing_raised do
37
+ create_driver "default"
38
+ end
39
+ end
40
+ end
41
+
42
+ sub_test_case "filter" do
43
+ test "with valid record" do
44
+ driver = emit "", [
45
+ {a: 1, b: {c: 2, d: {e: 3, f:4}, g: [10, 20, 30]}, h: [], i: {}},
46
+ {a: {b: {c: 1, d: {e: 2, f:3}, g: [10, 20, 30]}, h: [], i: {}}}
47
+ ]
48
+
49
+ expect_message = {"a" => 1, "b.c" => 2, "b.d.e" => 3, "b.d.f" => 4, "b.g.0" => 10, "b.g.1" => 20, "b.g.2" => 30, "h" => nil, "i" => nil}
50
+ result = filtered driver, 0
51
+ assert_equal expect_message, result[:message]
52
+
53
+ expect_message = {"a.b.c" => 1, "a.b.d.e" => 2, "a.b.d.f" => 3, "a.b.g.0" => 10, "a.b.g.1" => 20, "a.b.g.2" => 30, "a.h" => nil, "a.i" => nil}
54
+ result = filtered driver, 1
55
+ assert_equal expect_message, result[:message]
56
+ end
57
+
58
+ test "with invalid record" do
59
+ driver = emit "", ["message", {hoge: 1, fuga: {"test0" => 2, "test1" => 3}}]
60
+
61
+ expect_message = {}
62
+ result = filtered driver, 0
63
+ assert_equal expect_message, result[:message]
64
+
65
+ expect_message = {"hoge" => 1, "fuga.test0" => 2, "fuga.test1" => 3}
66
+ result = filtered driver, 1
67
+ assert_equal expect_message, result[:message]
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,209 @@
1
+ require "test_helper"
2
+ require "fluent/plugin/nested_hash_filter/nested_object"
3
+
4
+ class NestedObjectTest < Test::Unit::TestCase
5
+ setup do
6
+ klass.init
7
+ end
8
+
9
+ sub_test_case "constants" do
10
+ test "::CONNECTOR" do
11
+ assert_equal ".", klass::CONNECTOR
12
+ end
13
+ end
14
+
15
+ sub_test_case "convert" do
16
+ test "convert by multi time" do
17
+ hash = {"a" => 1, "b" => {"c" => 2, "d" => 3}, "e" => [4, 5], "f" => {}, "g" => []}
18
+ output = klass.convert hash
19
+ assert_equal Set["a", "b.c", "b.d", "e.0", "e.1", "f", "g"], output.keys.to_set
20
+ assert_equal 1, output["a"]
21
+ assert_equal 2, output["b.c"]
22
+ assert_equal 3, output["b.d"]
23
+ assert_equal 4, output["e.0"]
24
+ assert_equal 5, output["e.1"]
25
+ assert_equal nil, output["f"]
26
+ assert_equal nil, output["g"]
27
+
28
+ hash = {"a" => {"b" => {"c" => 1, "d" => 2}, "e" => [3, 4]}}
29
+ output = klass.convert hash
30
+ assert_equal Set["a.b.c", "a.b.d", "a.e.0", "a.e.1"], output.keys.to_set
31
+ assert_equal 1, output["a.b.c"]
32
+ assert_equal 2, output["a.b.d"]
33
+ assert_equal 3, output["a.e.0"]
34
+ assert_equal 4, output["a.e.1"]
35
+ end
36
+ end
37
+
38
+ sub_test_case "select" do
39
+ test "object is hash" do
40
+ klass.add_key "test"
41
+ object = {hoge: 1, fuga: "2"}
42
+ klass.select object
43
+
44
+ assert_equal Set["test.hoge", "test.fuga"], output.keys.to_set
45
+ assert_equal 1, output["test.hoge"]
46
+ assert_equal "2", output["test.fuga"]
47
+ end
48
+
49
+ test "object is array" do
50
+ klass.add_key "test"
51
+ object = [:hoge, "fuga"]
52
+ klass.select object
53
+
54
+ assert_equal Set["test.0", "test.1"], output.keys.to_set
55
+ assert_equal :hoge, output["test.0"]
56
+ assert_equal "fuga", output["test.1"]
57
+ end
58
+
59
+ test "object is string" do
60
+ klass.add_key "test"
61
+ object = "hoge"
62
+ klass.select object
63
+
64
+ assert_equal Set["test"], output.keys.to_set
65
+ assert_equal "hoge", output["test"]
66
+ end
67
+
68
+ test "object is number" do
69
+ klass.add_key "test"
70
+ object = 12345
71
+ klass.select object
72
+
73
+ assert_equal Set["test"], output.keys.to_set
74
+ assert_equal 12345, output["test"]
75
+ end
76
+
77
+ test "object is nil" do
78
+ klass.add_key "test"
79
+ object = nil
80
+ klass.select object
81
+
82
+ assert_equal Set["test"], output.keys.to_set
83
+ assert_equal nil, output["test"]
84
+ end
85
+ end
86
+
87
+ sub_test_case "add_key" do
88
+ test "add" do
89
+ klass.add_key "test"
90
+ assert_equal ["test"], output_keys
91
+ klass.add_key 1
92
+ assert_equal ["test", 1], output_keys
93
+ klass.add_key "hoge"
94
+ assert_equal ["test", 1, "hoge"], output_keys
95
+ end
96
+ end
97
+
98
+ sub_test_case "pop_key" do
99
+ test "remove key by pop" do
100
+ klass.add_key "test"
101
+ klass.add_key 1
102
+ klass.add_key "hoge"
103
+ assert_equal ["test", 1, "hoge"], output_keys
104
+
105
+ klass.pop_key
106
+ assert_equal ["test", 1], output_keys
107
+
108
+ klass.pop_key
109
+ assert_equal ["test"], output_keys
110
+
111
+ klass.pop_key
112
+ assert_equal [], output_keys
113
+ end
114
+
115
+ test "without output_keys" do
116
+ assert_nothing_raised do
117
+ klass.pop_key
118
+ end
119
+ end
120
+ end
121
+
122
+ sub_test_case "current_key" do
123
+ test "with output_keys" do
124
+ klass.add_key "test"
125
+ klass.add_key 1
126
+ assert_equal "test.1", klass.current_key
127
+ end
128
+
129
+ test "without output_keys" do
130
+ assert_equal "", klass.current_key
131
+ end
132
+ end
133
+
134
+ sub_test_case "update" do
135
+ test "with current_key" do
136
+ klass.add_key "test"
137
+ klass.add_key 1
138
+ klass.update 12345
139
+
140
+ assert_equal ["test.1"], output.keys
141
+ assert_equal 12345, output["test.1"]
142
+ end
143
+
144
+ test "without current_key" do
145
+ assert klass.current_key.empty?
146
+ klass.update 12345
147
+
148
+ assert_equal [], output.keys
149
+ end
150
+ end
151
+
152
+ sub_test_case "convert_hash" do
153
+ test "hash is blank" do
154
+ klass.add_key "test"
155
+ object = {}
156
+ klass.convert_hash object
157
+ assert_equal ["test"], output.keys
158
+ assert_equal nil, output["test"]
159
+ end
160
+
161
+ test "convert" do
162
+ klass.add_key "test"
163
+ object = {"a" => "hoge", "b" => 1, "c" => {"hoge" => "fuga"}, "d" => [10, 20], "e" => nil}
164
+ klass.convert_hash object
165
+ assert_equal ["test.a", "test.b", "test.c.hoge", "test.d.0", "test.d.1", "test.e"], output.keys
166
+ assert_equal "hoge", output["test.a"]
167
+ assert_equal 1, output["test.b"]
168
+ assert_equal "fuga", output["test.c.hoge"]
169
+ assert_equal 10, output["test.d.0"]
170
+ assert_equal 20, output["test.d.1"]
171
+ assert_equal nil, output["test.e"]
172
+ end
173
+ end
174
+
175
+ sub_test_case "convert_array" do
176
+ test "array is empty" do
177
+ klass.add_key "test"
178
+ object = []
179
+ klass.convert_array object
180
+ assert_equal ["test"], output.keys
181
+ assert_equal nil, output["test"]
182
+ end
183
+
184
+ test "convert" do
185
+ klass.add_key "test"
186
+ object = ["hoge", 1, {"hoge" => "fuga"}, [10, 20], nil]
187
+ klass.convert_array object
188
+ assert_equal ["test.0", "test.1", "test.2.hoge", "test.3.0", "test.3.1", "test.4"], output.keys
189
+ assert_equal "hoge", output["test.0"]
190
+ assert_equal 1, output["test.1"]
191
+ assert_equal "fuga", output["test.2.hoge"]
192
+ assert_equal 10, output["test.3.0"]
193
+ assert_equal 20, output["test.3.1"]
194
+ assert_equal nil, output["test.4"]
195
+ end
196
+ end
197
+
198
+ def output
199
+ klass.instance_variable_get :@output
200
+ end
201
+
202
+ def output_keys
203
+ klass.instance_variable_get :@output_keys
204
+ end
205
+
206
+ def klass
207
+ Fluent::NestedHashFilter::NestedObject
208
+ end
209
+ end
@@ -0,0 +1,71 @@
1
+ require "test_helper"
2
+ require "fluent/plugin/out_nested_hash"
3
+
4
+ class OutNestedHashTest < Test::Unit::TestCase
5
+ include Fluent
6
+
7
+ setup do
8
+ Fluent::Test.setup
9
+ @time = Fluent::Engine.now
10
+ end
11
+
12
+ def create_driver config = "", tag = "test"
13
+ driver = Fluent::Test::OutputTestDriver.new OutNestedHash, tag
14
+ driver.configure config
15
+ end
16
+
17
+ def emit config, tag, messages
18
+ driver = create_driver config, tag
19
+
20
+ driver.run do
21
+ messages.each do |message|
22
+ driver.emit message
23
+ end
24
+ end
25
+
26
+ driver
27
+ end
28
+
29
+ def emitted driver, index
30
+ result = driver.emits[index]
31
+ {tag: result[0], time: result[1], message: result[2]}
32
+ end
33
+
34
+ sub_test_case "configure" do
35
+ test "check_default" do
36
+ create_driver "default"
37
+ end
38
+ end
39
+
40
+ sub_test_case "emit" do
41
+ test "with valid record" do
42
+ driver = emit "", "test", [
43
+ {a: 1, b: {c: 2, d: {e: 3, f:4}, g: [10, 20, 30]}, h: [], i: {}},
44
+ {a: {b: {c: 1, d: {e: 2, f:3}, g: [10, 20, 30]}, h: [], i: {}}}
45
+ ]
46
+
47
+ expect_message = {"a" => 1, "b.c" => 2, "b.d.e" => 3, "b.d.f" => 4, "b.g.0" => 10, "b.g.1" => 20, "b.g.2" => 30, "h" => nil, "i" => nil}
48
+ result = emitted driver, 0
49
+ assert_equal "test", result[:tag]
50
+ assert_equal expect_message, result[:message]
51
+
52
+ expect_message = {"a.b.c" => 1, "a.b.d.e" => 2, "a.b.d.f" => 3, "a.b.g.0" => 10, "a.b.g.1" => 20, "a.b.g.2" => 30, "a.h" => nil, "a.i" => nil}
53
+ result = emitted driver, 1
54
+ assert_equal "test", result[:tag]
55
+ assert_equal expect_message, result[:message]
56
+ end
57
+
58
+ test "with invalid record" do
59
+ driver = emit "", "test", ["message", {hoge: 1, fuga: {"test0" => 2, "test1" => 3}}]
60
+
61
+ expect_message = {}
62
+ result = emitted driver, 0
63
+ assert_equal expect_message, result[:message]
64
+
65
+ expect_message = {"hoge" => 1, "fuga.test0" => 2, "fuga.test1" => 3}
66
+ result = emitted driver, 1
67
+ assert_equal "test", result[:tag]
68
+ assert_equal expect_message, result[:message]
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,9 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require "test/unit"
4
+ require "fluent/test"
5
+ require "fluent/log"
6
+ require "fluent/load"
7
+
8
+ class Test::Unit::TestCase
9
+ end
metadata ADDED
@@ -0,0 +1,141 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-nested-hash-filter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - sugilog
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-06-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: fluentd
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: test-unit
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: guard
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: guard-test
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Fluent Plugin for converting nested hash into flatten key-value pair.
98
+ email:
99
+ - sugilog@gmail.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".gitignore"
105
+ - ".travis.yml"
106
+ - Gemfile
107
+ - Guardfile
108
+ - README.md
109
+ - Rakefile
110
+ - fluent-plugin-nested-hash-filter.gemspec
111
+ - lib/fluent/plugin/filter_nested_hash.rb
112
+ - lib/fluent/plugin/nested_hash_filter/nested_object.rb
113
+ - lib/fluent/plugin/out_nested_hash.rb
114
+ - test/fluent/plugin/filter_nested_hash_test.rb
115
+ - test/fluent/plugin/nested_hash_filter/nested_object_test.rb
116
+ - test/fluent/plugin/out_nested_hash_test.rb
117
+ - test/test_helper.rb
118
+ homepage: https://github.com/sugilog/fluent-plugin-nested-hash-filter
119
+ licenses: []
120
+ metadata: {}
121
+ post_install_message:
122
+ rdoc_options: []
123
+ require_paths:
124
+ - lib
125
+ required_ruby_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ required_rubygems_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ requirements: []
136
+ rubyforge_project:
137
+ rubygems_version: 2.4.5
138
+ signing_key:
139
+ specification_version: 4
140
+ summary: Fluent Plugin for converting nested hash into flatten key-value pair.
141
+ test_files: []