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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/gremlin2dot/unmangler.rb', line 5
def unmangle(d)
if d.kind_of?(Hash) and d.has_key?('@type') and d.has_key?('@value') and d.keys.count == 2
case d['@type']
when 'g:Map'
h = Hash.new
raise unless d['@value'].empty?
h
when 'g:List'
unmangle d['@value']
when 'g:Tree'
d['@value'].map do |item|
t = Tree.new
t.key = unmangle item['key']
t.items = unmangle item['value']
t
end
when 'g:Edge'
unmangle_object(d, Edge)
when 'g:Vertex'
unmangle_object(d, Vertex)
when 'g:VertexProperty'
unmangle_object(d, VertexProperty)
when 'g:Property'
unmangle_object(d, Property)
when 'g:Int32'
d['@value']
when 'g:Double'
d['@value']
when 'g:Date'
Time.at(d['@value'] / 1000.0)
else
$stderr.puts 'Ignoring unknown type ' + d['@type'] + " with value #{d['@value'].inspect[0..200]}..."
unmangle d['@value']
end
elsif d.kind_of? Hash
d.entries.map {|k, v| [k, unmangle(v)]}.to_h
elsif d.kind_of? Array
d.map {|v| unmangle v}
else
d
end
end
|