5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
# File 'lib/aws-sdk-core/ini_parser.rb', line 5
def ini_parse(raw)
current_profile = nil
current_prefix = nil
raw.lines.inject({}) do |acc, line|
line = line.split(/^|\s;/).first profile = line.match(/^\[([^\[\]]+)\]\s*(#.+)?$/) unless line.nil?
if profile
current_profile = profile[1]
named_profile = current_profile.match(/^profile\s+(.+?)$/)
current_profile = named_profile[1] if named_profile
elsif current_profile
unless line.nil?
item = line.match(/^(.+?)\s*=\s*(.+?)\s*$/)
prefix = line.match(/^(.+?)\s*=\s*$/)
end
if item && item[1].match(/^\s+/)
inner_item = line.match(/^\s*(.+?)\s*=\s*(.+?)\s*$/)
acc[current_profile] ||= {}
acc[current_profile][current_prefix] ||= {}
acc[current_profile][current_prefix][inner_item[1]] = inner_item[2]
elsif item
current_prefix = nil
acc[current_profile] ||= {}
acc[current_profile][item[1]] = item[2]
elsif prefix
current_prefix = prefix[1]
end
end
acc
end
end
|