16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
# File 'lib/kumogata2/plugin/ruby/string_ext.rb', line 16
def fn_join(options = {})
options = {
:undent => true,
:trim_mode => nil,
}.merge(options)
data = self.dup
data = data.undent if options[:undent]
trim_mode = options[:trim_mode]
null = "\0"
data = Object.new.instance_eval(" @__functions__ = []\n\n @__value_conv__ = proc do |v|\n case v\n when Array, Hash\n v\n else\n v.to_s\n end\n end\n\n def Fn__Base64(value)\n value = {'Fn::Base64' => @__value_conv__[value]}\n\n case @__functions__\n when Array\n @__functions__ << value\n when Hash\n @__functions__.update(value)\n end\n\n \#{null.inspect}\n end\n\n def Fn__FindInMap(map_name, top_level_key, second_level_key)\n value = {'Fn::FindInMap' => [\n map_name, top_level_key, second_level_key].map(&@__value_conv__)}\n\n case @__functions__\n when Array\n @__functions__ << value\n when Hash\n @__functions__.update(value)\n end\n\n \#{null.inspect}\n end\n\n def Fn__GetAtt(logical_name, attr_name)\n value = {'Fn::GetAtt' => [\n logical_name, attr_name].map(&@__value_conv__)}\n\n case @__functions__\n when Array\n @__functions__ << value\n when Hash\n @__functions__.update(value)\n end\n\n \#{null.inspect}\n end\n\n def Fn__GetAZs(region)\n value = {'Fn::GetAZs' => @__value_conv__[region]}\n\n case @__functions__\n when Array\n @__functions__ << value\n when Hash\n @__functions__.update(value)\n end\n\n \#{null.inspect}\n end\n\n def Ref(value)\n value = {'Ref' => value}\n\n case @__functions__\n when Array\n @__functions__ << value\n when Hash\n @__functions__.update(value)\n end\n\n \#{null.inspect}\n end\n\n def _(&block)\n __functions__orig = @__functions__\n @__functions__ = {}\n block.call if block\n value = @__functions__\n @__functions__ = __functions__orig\n return value\n end\n\n ERB.new(\#{data.inspect}, nil, \#{trim_mode.inspect}).result(binding).split(\#{null.inspect}).zip(@__functions__)\n EOS\n\n data = data.flatten.select {|i| not i.nil? }.map {|i|\n if i.kind_of?(String)\n i.lines.to_a\n else\n i\n end\n }.flatten\n\n return {\n 'Fn::Join' => ['', data]\n }\nend\n")
|