logstash-filter-xml 2.2.0 → 3.0.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: 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: