s =
"{new {value1 value2 value3}} {old {value2 value1 value1}} {{old school} {value2 value3 value1}}"
os =
[
]
level =
0
pos =
0
str =
Struct
.
new
(
:key
,
:values
)
value =
""
o = str.
new
(
""
,
[
]
)
for
i
in
0
...
s
.
size
x = s
[
i...
i
+
1
]
case
x
when
"{"
level
+
=
1
when
"}"
if
level ==
2
pos =
1
end
level
-
=
1
when
" "
case
level
when
0
o.
values
<<
value
os
<<
o.
dup
o = str.
new
(
""
,
[
]
)
value =
""
pos =
0
when
1
if
pos ==
0
pos =
1
else
value =
""
end
when
2
if
pos ==
0
o.
key
+
= x
else
o.
values
<<
value.
dup
value =
""
end
else
raise
end
else
if
pos ==
0
o.
key
+
= x
else
value
+
= x
end
end
end
o.
values
<<
value
os
<<
o
puts
os.
inspect