Class: LogStash::Modules::SettingsMerger

Inherits:
Object
  • Object
show all
Defined in:
lib/logstash/modules/settings_merger.rb

Class Method Summary collapse

Class Method Details

.merge(cli_settings, yml_settings) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/logstash/modules/settings_merger.rb', line 5

def self.merge(cli_settings, yml_settings)
  # both args are arrays of hashes, e.g.
  # [{"name"=>"mod1", "var.input.tcp.port"=>"3333"}, {"name"=>"mod2"}]
  # [{"name"=>"mod1", "var.input.tcp.port"=>2222, "var.kibana.username"=>"rupert", "var.kibana.password"=>"fotherington"}, {"name"=>"mod3", "var.input.tcp.port"=>4445}]
  merged = []
  # union and group_by preserves order
  # union will also coalesce identical hashes
  union_of_settings = (cli_settings | yml_settings)
  grouped_by_name = union_of_settings.group_by{|e| e["name"]}
  grouped_by_name.each do |name, array|
    if array.size == 2
      merged << array.first.merge(array.last)
    else
      merged.concat(array)
    end
  end
  merged
end