logstash-filter-xml 2.2.0 → 3.0.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: 3c54641de27d0a2d3d1521cf95ca13053cf79fdf
4
- data.tar.gz: 45fa43b4e3e0e8d55de05be69ab68c8b2e63b8e0
3
+ metadata.gz: 1840e844c5ece350a424e0cebe3277defc8c5e8b
4
+ data.tar.gz: 61fb53f8feba4439c651c834fa64393191c2c4a6
5
5
  SHA512:
6
- metadata.gz: e43cd5a04b877149db47c036303f1a74cfef0e6f3033c5994409f2d98edd957dcd9dcefff64e679bee7f134aa1e737c37c5b39adc21143223807e78f2580cec0
7
- data.tar.gz: a54963d0704933285befe3b70ef4ec35fd921808cea3c631d5900cb0a6934fcc8c48e863f3d722eeccff1d82027289a4b837dd3054d0061698bbb25d1ed1af0c
6
+ metadata.gz: 4130e7435dc522d2c1d92d598eb6284c051b5ffad47f147281c679cdc49fff2b28568c5d02e36b84bec2e0633a06f051c62709cf849c83c3efca0cff88687d62
7
+ data.tar.gz: 75e3d58462c5f088c164c55b5fc2fd9fad38f6543974796b65bbd58c97b8346082213886632699cc46460f94d00fdd8ff8f13cf1e20062345c0a9b11c39966c2
data/CHANGELOG.md CHANGED
@@ -1,19 +1,11 @@
1
- ## 2.2.0
2
- - config: New configuration `suppress_empty`. By default the filter creates empty hash from empty xml elements (`suppress_empty => false`).
3
- This can now be configured, `supress_empty => true` will not create event fields from empty xml elements.
4
- - config: New configuration `force_content`. By default the filter expands attributes differently from content in xml elements.
5
- This option allows you to force text content and attributes to always parse to a hash value.
6
- - config: Ensure that `target` is set when storing xml content in the event (`store_xml => true`)
7
-
8
- ## 2.1.4
1
+ ## 3.0.0
2
+ - Update the plugin to the version 2.0 of the plugin api, this change is required for Logstash 5.0 compatibility. See https://github.com/elastic/logstash/issues/5141
3
+ # 2.1.4
9
4
  - Added setting to disable forcing single values to be added in arrays. Ref: https://github.com/logstash-plugins/logstash-filter-xml/pull/28.
10
-
11
- ## 2.1.3
5
+ # 2.1.3
12
6
  - Depend on logstash-core-plugin-api instead of logstash-core, removing the need to mass update plugins on major releases of logstash
13
-
14
- ## 2.1.2
7
+ # 2.1.2
15
8
  - New dependency requirements for logstash-core for the 5.0 release
16
-
17
9
  ## 2.1.1
18
10
  - Refactored field references, code cleanups
19
11
 
data/Gemfile CHANGED
@@ -1,2 +1,4 @@
1
1
  source 'https://rubygems.org'
2
- gemspec
2
+
3
+ # Specify your gem's dependencies in logstash-mass_effect.gemspec
4
+ gemspec
@@ -51,10 +51,10 @@ class LogStash::Filters::Xml < LogStash::Filters::Base
51
51
  # destination field as an array. As such, multiple matches across
52
52
  # multiple source fields will produce duplicate entries in the field.
53
53
  #
54
- # More on XPath: http://www.w3schools.com/xml/xml_xpath.asp
54
+ # More on XPath: http://www.w3schools.com/xpath/
55
55
  #
56
56
  # The XPath functions are particularly powerful:
57
- # http://www.w3schools.com/xsl/xsl_functions.asp
57
+ # http://www.w3schools.com/xpath/xpath_functions.asp
58
58
  #
59
59
  config :xpath, :validate => :hash, :default => {}
60
60
 
@@ -66,11 +66,6 @@ class LogStash::Filters::Xml < LogStash::Filters::Base
66
66
  # false will prevent storing single elements in arrays.
67
67
  config :force_array, :validate => :boolean, :default => true
68
68
 
69
- # By default the filter will expand attributes differently from content inside
70
- # of tags. This option allows you to force text content and attributes to always
71
- # parse to a hash value.
72
- config :force_content, :validate => :boolean, :default => false
73
-
74
69
  # By default only namespaces declarations on the root element are considered.
75
70
  # This allows to configure all namespace declarations to parse the XML document.
76
71
  #
@@ -92,24 +87,11 @@ class LogStash::Filters::Xml < LogStash::Filters::Base
92
87
  # Of course, if the document had nodes with the same names but different namespaces, they will now be ambiguous.
93
88
  config :remove_namespaces, :validate => :boolean, :default => false
94
89
 
95
- # By default, empty element will result in an empty hash object
96
- # If set to `true`, output nothing if the element is empty..
97
- config :suppress_empty, :validate => :boolean, :default => false
98
-
99
90
  XMLPARSEFAILURE_TAG = "_xmlparsefailure"
100
91
 
101
92
  def register
102
93
  require "nokogiri"
103
94
  require "xmlsimple"
104
-
105
- if @store_xml && (!@target || @target.empty?)
106
- raise LogStash::ConfigurationError, I18n.t(
107
- "logstash.agent.configuration.invalid_plugin_register",
108
- :plugin => "filter",
109
- :type => "xml",
110
- :error => "When the 'store_xml' configuration option is true, 'target' must also be set"
111
- )
112
- end
113
95
  end
114
96
 
115
97
  def filter(event)
@@ -117,7 +99,7 @@ class LogStash::Filters::Xml < LogStash::Filters::Base
117
99
 
118
100
  @logger.debug? && @logger.debug("Running xml filter", :event => event)
119
101
 
120
- value = event[@source]
102
+ value = event.get(@source)
121
103
  return unless value
122
104
 
123
105
  if value.is_a?(Array)
@@ -167,13 +149,9 @@ class LogStash::Filters::Xml < LogStash::Filters::Base
167
149
  # the array should probably be created once, filled in the loop and set at after the loop but the return
168
150
  # statement above screws this strategy and is likely a bug anyway so I will not touch this until I can
169
151
  # deep a big deeper and verify there is a sufficient test harness to refactor this.
170
- data = event[xpath_dest] || []
152
+ data = event.get(xpath_dest) || []
171
153
  data << value.to_s
172
- event[xpath_dest] = data
173
-
174
- # do not use the following construct to set the event, we cannot assume anymore that the field values are in-place mutable
175
- # event[xpath_dest] ||= []
176
- # event[xpath_dest] << value.to_s
154
+ event.set(xpath_dest, data)
177
155
  end
178
156
  end
179
157
  end
@@ -181,9 +159,7 @@ class LogStash::Filters::Xml < LogStash::Filters::Base
181
159
 
182
160
  if @store_xml
183
161
  begin
184
- xml_options = {"ForceArray" => @force_array, "ForceContent" => @force_content}
185
- xml_options["SuppressEmpty"] = true if @suppress_empty
186
- event[@target] = XmlSimple.xml_in(value, xml_options)
162
+ event.set(@target, XmlSimple.xml_in(value, "ForceArray" => @force_array))
187
163
  matched = true
188
164
  rescue => e
189
165
  event.tag(XMLPARSEFAILURE_TAG)
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-filter-xml'
4
- s.version = '2.2.0'
4
+ s.version = '3.0.0'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "Takes a field that contains XML and expands it into an actual datastructure."
7
7
  s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
20
20
  s.metadata = { "logstash_plugin" => "true", "logstash_group" => "filter" }
21
21
 
22
22
  # Gem dependencies
23
- s.add_runtime_dependency "logstash-core-plugin-api", "~> 1.0"
23
+ s.add_runtime_dependency "logstash-core-plugin-api", "~> 2.0"
24
24
  s.add_runtime_dependency 'nokogiri'
25
25
  s.add_runtime_dependency 'xml-simple'
26
26
 
@@ -15,55 +15,55 @@ describe LogStash::Filters::Xml do
15
15
  CONFIG
16
16
 
17
17
  sample("raw" => '<foo key="value"/>') do
18
- insist { subject["tags"] }.nil?
19
- insist { subject["data"]} == {"key" => "value"}
18
+ insist { subject.get("tags") }.nil?
19
+ insist { subject.get("data")} == {"key" => "value"}
20
20
  end
21
21
 
22
22
  #From parse xml with array as a value
23
23
  sample("raw" => '<foo><key>value1</key><key>value2</key></foo>') do
24
- insist { subject["tags"] }.nil?
25
- insist { subject["data"]} == {"key" => ["value1", "value2"]}
24
+ insist { subject.get("tags") }.nil?
25
+ insist { subject.get("data")} == {"key" => ["value1", "value2"]}
26
26
  end
27
27
 
28
28
  #From parse xml with hash as a value
29
29
  sample("raw" => '<foo><key1><key2>value</key2></key1></foo>') do
30
- insist { subject["tags"] }.nil?
31
- insist { subject["data"]} == {"key1" => [{"key2" => ["value"]}]}
30
+ insist { subject.get("tags") }.nil?
31
+ insist { subject.get("data")} == {"key1" => [{"key2" => ["value"]}]}
32
32
  end
33
33
 
34
34
  # parse xml in single item array
35
35
  sample("raw" => ["<foo bar=\"baz\"/>"]) do
36
- insist { subject["tags"] }.nil?
37
- insist { subject["data"]} == {"bar" => "baz"}
36
+ insist { subject.get("tags") }.nil?
37
+ insist { subject.get("data")} == {"bar" => "baz"}
38
38
  end
39
39
 
40
40
  # fail in multi items array
41
41
  sample("raw" => ["<foo bar=\"baz\"/>", "jojoba"]) do
42
- insist { subject["tags"] }.include?("_xmlparsefailure")
43
- insist { subject["data"]} == nil
42
+ insist { subject.get("tags") }.include?("_xmlparsefailure")
43
+ insist { subject.get("data")} == nil
44
44
  end
45
45
 
46
46
  # fail in empty array
47
47
  sample("raw" => []) do
48
- insist { subject["tags"] }.include?("_xmlparsefailure")
49
- insist { subject["data"]} == nil
48
+ insist { subject.get("tags") }.include?("_xmlparsefailure")
49
+ insist { subject.get("data")} == nil
50
50
  end
51
51
 
52
52
  # fail for non string field
53
53
  sample("raw" => {"foo" => "bar"}) do
54
- insist { subject["tags"] }.include?("_xmlparsefailure")
55
- insist { subject["data"]} == nil
54
+ insist { subject.get("tags") }.include?("_xmlparsefailure")
55
+ insist { subject.get("data")} == nil
56
56
  end
57
57
 
58
58
  # fail for non string single item array
59
59
  sample("raw" => [{"foo" => "bar"}]) do
60
- insist { subject["tags"] }.include?("_xmlparsefailure")
61
- insist { subject["data"]} == nil
60
+ insist { subject.get("tags") }.include?("_xmlparsefailure")
61
+ insist { subject.get("data")} == nil
62
62
  end
63
63
 
64
64
  #From bad xml
65
65
  sample("raw" => '<foo /') do
66
- insist { subject["tags"] }.include?("_xmlparsefailure")
66
+ insist { subject.get("tags") }.include?("_xmlparsefailure")
67
67
  end
68
68
  end
69
69
 
@@ -79,8 +79,8 @@ describe LogStash::Filters::Xml do
79
79
  CONFIG
80
80
 
81
81
  sample("raw" => '<foo key="value"/>') do
82
- insist { subject["tags"] }.nil?
83
- insist { subject["data"]} == nil
82
+ insist { subject.get("tags") }.nil?
83
+ insist { subject.get("data")} == nil
84
84
  end
85
85
  end
86
86
 
@@ -97,14 +97,14 @@ describe LogStash::Filters::Xml do
97
97
 
98
98
  # Single value
99
99
  sample("raw" => '<foo><key>value</key></foo>') do
100
- insist { subject["tags"] }.nil?
101
- insist { subject["xpath_field"]} == ["value"]
100
+ insist { subject.get("tags") }.nil?
101
+ insist { subject.get("xpath_field")} == ["value"]
102
102
  end
103
103
 
104
104
  #Multiple values
105
105
  sample("raw" => '<foo><key>value1</key><key>value2</key></foo>') do
106
- insist { subject["tags"] }.nil?
107
- insist { subject["xpath_field"]} == ["value1","value2"]
106
+ insist { subject.get("tags") }.nil?
107
+ insist { subject.get("xpath_field")} == ["value1","value2"]
108
108
  end
109
109
  end
110
110
 
@@ -121,25 +121,25 @@ describe LogStash::Filters::Xml do
121
121
  CONFIG
122
122
 
123
123
  sample("xmldata" => '<foo key="value"/>') do
124
- insist { subject["tags"] }.nil?
125
- insist { subject["data"]} == {"key" => "value"}
124
+ insist { subject.get("tags") }.nil?
125
+ insist { subject.get("data") } == {"key" => "value"}
126
126
  end
127
127
 
128
128
  #From parse xml with array as a value
129
129
  sample("xmldata" => '<foo><key>value1</key><key>value2</key></foo>') do
130
- insist { subject["tags"] }.nil?
131
- insist { subject["data"]} == {"key" => ["value1", "value2"]}
130
+ insist { subject.get("tags") }.nil?
131
+ insist { subject.get("data") } == {"key" => ["value1", "value2"]}
132
132
  end
133
133
 
134
134
  #From parse xml with hash as a value
135
135
  sample("xmldata" => '<foo><key1><key2>value</key2></key1></foo>') do
136
- insist { subject["tags"] }.nil?
137
- insist { subject["data"]} == {"key1" => [{"key2" => ["value"]}]}
136
+ insist { subject.get("tags") }.nil?
137
+ insist { subject.get("data") } == {"key1" => [{"key2" => ["value"]}]}
138
138
  end
139
139
 
140
140
  #From bad xml
141
141
  sample("xmldata" => '<foo /') do
142
- insist { subject["tags"] }.include?("_xmlparsefailure")
142
+ insist { subject.get("tags") }.include?("_xmlparsefailure")
143
143
  end
144
144
  end
145
145
 
@@ -155,8 +155,8 @@ describe LogStash::Filters::Xml do
155
155
  CONFIG
156
156
 
157
157
  sample("xmldata" => '<foo key="value"/>') do
158
- insist { subject["tags"] }.nil?
159
- insist { subject["data"]} == nil
158
+ insist { subject.get("tags") }.nil?
159
+ insist { subject.get("data")} == nil
160
160
  end
161
161
  end
162
162
 
@@ -173,14 +173,14 @@ describe LogStash::Filters::Xml do
173
173
 
174
174
  # Single value
175
175
  sample("xmldata" => '<foo><key>value</key></foo>') do
176
- insist { subject["tags"] }.nil?
177
- insist { subject["xpath_field"]} == ["value"]
176
+ insist { subject.get("tags") }.nil?
177
+ insist { subject.get("xpath_field") } == ["value"]
178
178
  end
179
179
 
180
180
  #Multiple values
181
181
  sample("xmldata" => '<foo><key>value1</key><key>value2</key></foo>') do
182
- insist { subject["tags"] }.nil?
183
- insist { subject["xpath_field"]} == ["value1","value2"]
182
+ insist { subject.get("tags") }.nil?
183
+ insist { subject.get("xpath_field") } == ["value1","value2"]
184
184
  end
185
185
  end
186
186
 
@@ -197,8 +197,8 @@ describe LogStash::Filters::Xml do
197
197
 
198
198
  # Single value
199
199
  sample("xmldata" => '<foo><key>Français</key></foo>') do
200
- insist { subject["tags"] }.nil?
201
- insist { subject["xpath_field"]} == ["Français"]
200
+ insist { subject.get("tags") }.nil?
201
+ insist { subject.get("xpath_field")} == ["Français"]
202
202
  end
203
203
  end
204
204
 
@@ -209,14 +209,13 @@ describe LogStash::Filters::Xml do
209
209
  source => "xmldata"
210
210
  xpath => [ "/foo/h:div", "xpath_field" ]
211
211
  remove_namespaces => false
212
- store_xml => false
213
212
  }
214
213
  }
215
214
  CONFIG
216
215
 
217
216
  # Single value
218
217
  sample("xmldata" => '<foo xmlns:h="http://www.w3.org/TR/html4/"><h:div>Content</h:div></foo>') do
219
- insist { subject["xpath_field"] } == ["<h:div>Content</h:div>"]
218
+ insist { subject.get("xpath_field") } == ["<h:div>Content</h:div>"]
220
219
  end
221
220
  end
222
221
 
@@ -228,14 +227,13 @@ describe LogStash::Filters::Xml do
228
227
  xpath => [ "/foo/h:div", "xpath_field" ]
229
228
  namespaces => {"h" => "http://www.w3.org/TR/html4/"}
230
229
  remove_namespaces => false
231
- store_xml => false
232
230
  }
233
231
  }
234
232
  CONFIG
235
233
 
236
234
  # Single value
237
235
  sample("xmldata" => '<foo xmlns:h="http://www.w3.org/TR/html4/"><h:div>Content</h:div></foo>') do
238
- insist { subject["xpath_field"] } == ["<h:div>Content</h:div>"]
236
+ insist { subject.get("xpath_field") } == ["<h:div>Content</h:div>"]
239
237
  end
240
238
  end
241
239
 
@@ -247,14 +245,13 @@ describe LogStash::Filters::Xml do
247
245
  xpath => [ "/foo/h:div", "xpath_field" ]
248
246
  namespaces => {"h" => "http://www.w3.org/TR/html4/"}
249
247
  remove_namespaces => false
250
- store_xml => false
251
248
  }
252
249
  }
253
250
  CONFIG
254
251
 
255
252
  # Single value
256
253
  sample("xmldata" => '<foo><h:div xmlns:h="http://www.w3.org/TR/html4/">Content</h:div></foo>') do
257
- insist { subject["xpath_field"] } == ["<h:div xmlns:h=\"http://www.w3.org/TR/html4/\">Content</h:div>"]
254
+ insist { subject.get("xpath_field") } == ["<h:div xmlns:h=\"http://www.w3.org/TR/html4/\">Content</h:div>"]
258
255
  end
259
256
  end
260
257
 
@@ -265,14 +262,13 @@ describe LogStash::Filters::Xml do
265
262
  source => "xmldata"
266
263
  xpath => [ "/foo/div", "xpath_field" ]
267
264
  remove_namespaces => true
268
- store_xml => false
269
265
  }
270
266
  }
271
267
  CONFIG
272
268
 
273
269
  # Single value
274
270
  sample("xmldata" => '<foo xmlns:h="http://www.w3.org/TR/html4/"><h:div>Content</h:div></foo>') do
275
- insist { subject["xpath_field"] } == ["<div>Content</div>"]
271
+ insist { subject.get("xpath_field") } == ["<div>Content</div>"]
276
272
  end
277
273
  end
278
274
 
@@ -289,7 +285,7 @@ describe LogStash::Filters::Xml do
289
285
 
290
286
  # Single value
291
287
  sample("xmldata" => '<foo><bar>Content</bar></foo>') do
292
- insist { subject["parseddata"] } == { "bar" => ["Content"] }
288
+ insist { subject.get("parseddata") } == { "bar" => ["Content"] }
293
289
  end
294
290
  end
295
291
 
@@ -306,96 +302,7 @@ describe LogStash::Filters::Xml do
306
302
 
307
303
  # Single value
308
304
  sample("xmldata" => '<foo><bar>Content</bar></foo>') do
309
- insist { subject["parseddata"] } == { "bar" => "Content" }
310
- end
311
- end
312
-
313
- context "Using suppress_empty option" do
314
- describe "suppress_empty => false" do
315
- config <<-CONFIG
316
- filter {
317
- xml {
318
- source => "xmldata"
319
- target => "data"
320
- suppress_empty => false
321
- }
322
- }
323
- CONFIG
324
-
325
- sample("xmldata" => '<foo><key>value1</key><key></key></foo>') do
326
- insist { subject["tags"] }.nil?
327
- insist { subject["data"] } == {"key" => ["value1", {}]}
328
- end
329
- end
330
-
331
- describe "suppress_empty => true" do
332
- config <<-CONFIG
333
- filter {
334
- xml {
335
- source => "xmldata"
336
- target => "data"
337
- suppress_empty => true
338
- }
339
- }
340
- CONFIG
341
-
342
- sample("xmldata" => '<foo><key>value1</key><key></key></foo>') do
343
- insist { subject["tags"] }.nil?
344
- insist { subject["data"] } == {"key" => ["value1"]}
345
- end
346
- end
347
- end
348
-
349
- context "Using force content option" do
350
- describe "force_content => false" do
351
- config <<-CONFIG
352
- filter {
353
- xml {
354
- source => "xmldata"
355
- target => "data"
356
- force_array => false
357
- force_content => false
358
- }
359
- }
360
- CONFIG
361
-
362
- sample("xmldata" => '<opt><x>text1</x><y a="2">text2</y></opt>') do
363
- insist { subject["tags"] }.nil?
364
- insist { subject["data"] } == { 'x' => 'text1', 'y' => { 'a' => '2', 'content' => 'text2' } }
365
- end
366
- end
367
- describe "force_content => true" do
368
- config <<-CONFIG
369
- filter {
370
- xml {
371
- source => "xmldata"
372
- target => "data"
373
- force_array => false
374
- force_content => true
375
- }
376
- }
377
- CONFIG
378
-
379
- sample("xmldata" => '<opt><x>text1</x><y a="2">text2</y></opt>') do
380
- insist { subject["tags"] }.nil?
381
- insist { subject["data"] } == { 'x' => { 'content' => 'text1' }, 'y' => { 'a' => '2', 'content' => 'text2' } }
382
- end
383
- end
384
- end
385
-
386
- describe "plugin registration" do
387
- config <<-CONFIG
388
- filter {
389
- xml {
390
- xmldata => "message"
391
- store_xml => true
392
- }
393
- }
394
- CONFIG
395
-
396
- sample("xmldata" => "<foo>random message</foo>") do
397
- insist { subject }.raises(LogStash::ConfigurationError)
305
+ insist { subject.get("parseddata") } == { "bar" => "Content" }
398
306
  end
399
307
  end
400
-
401
308
  end
metadata CHANGED
@@ -1,72 +1,74 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-filter-xml
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-24 00:00:00.000000000 Z
11
+ date: 2016-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logstash-core-plugin-api
15
- version_requirements: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ~>
18
- - !ruby/object:Gem::Version
19
- version: '1.0'
20
15
  requirement: !ruby/object:Gem::Requirement
21
16
  requirements:
22
- - - ~>
17
+ - - "~>"
23
18
  - !ruby/object:Gem::Version
24
- version: '1.0'
25
- prerelease: false
19
+ version: '2.0'
26
20
  type: :runtime
27
- - !ruby/object:Gem::Dependency
28
- name: nokogiri
21
+ prerelease: false
29
22
  version_requirements: !ruby/object:Gem::Requirement
30
23
  requirements:
31
- - - '>='
24
+ - - "~>"
32
25
  - !ruby/object:Gem::Version
33
- version: '0'
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: nokogiri
34
29
  requirement: !ruby/object:Gem::Requirement
35
30
  requirements:
36
- - - '>='
31
+ - - ">="
37
32
  - !ruby/object:Gem::Version
38
33
  version: '0'
39
- prerelease: false
40
34
  type: :runtime
41
- - !ruby/object:Gem::Dependency
42
- name: xml-simple
35
+ prerelease: false
43
36
  version_requirements: !ruby/object:Gem::Requirement
44
37
  requirements:
45
- - - '>='
38
+ - - ">="
46
39
  - !ruby/object:Gem::Version
47
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: xml-simple
48
43
  requirement: !ruby/object:Gem::Requirement
49
44
  requirements:
50
- - - '>='
45
+ - - ">="
51
46
  - !ruby/object:Gem::Version
52
47
  version: '0'
53
- prerelease: false
54
48
  type: :runtime
55
- - !ruby/object:Gem::Dependency
56
- name: logstash-devutils
49
+ prerelease: false
57
50
  version_requirements: !ruby/object:Gem::Requirement
58
51
  requirements:
59
- - - '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: logstash-devutils
62
57
  requirement: !ruby/object:Gem::Requirement
63
58
  requirements:
64
- - - '>='
59
+ - - ">="
65
60
  - !ruby/object:Gem::Version
66
61
  version: '0'
67
- prerelease: false
68
62
  type: :development
69
- description: This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: This gem is a Logstash plugin required to be installed on top of the
70
+ Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This
71
+ gem is not a stand-alone program
70
72
  email: info@elastic.co
71
73
  executables: []
72
74
  extensions: []
@@ -87,24 +89,24 @@ licenses:
87
89
  metadata:
88
90
  logstash_plugin: 'true'
89
91
  logstash_group: filter
90
- post_install_message:
92
+ post_install_message:
91
93
  rdoc_options: []
92
94
  require_paths:
93
95
  - lib
94
96
  required_ruby_version: !ruby/object:Gem::Requirement
95
97
  requirements:
96
- - - '>='
98
+ - - ">="
97
99
  - !ruby/object:Gem::Version
98
100
  version: '0'
99
101
  required_rubygems_version: !ruby/object:Gem::Requirement
100
102
  requirements:
101
- - - '>='
103
+ - - ">="
102
104
  - !ruby/object:Gem::Version
103
105
  version: '0'
104
106
  requirements: []
105
- rubyforge_project:
106
- rubygems_version: 2.4.8
107
- signing_key:
107
+ rubyforge_project:
108
+ rubygems_version: 2.5.1
109
+ signing_key:
108
110
  specification_version: 4
109
111
  summary: Takes a field that contains XML and expands it into an actual datastructure.
110
112
  test_files: