class Gremlin2Dot::Unmangler
Public Instance Methods
unmangle(d)
click to toggle source
# 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' d['@value'].map {|t| unmangle t}.to_h when 'g:Set' d['@value'].map {|t| unmangle t}.to_set when 'g:List' unmangle d['@value'] when 'g:Tree' # array of hashes, where each hash has 'key'=Vertex/Edge, 'value' = ... # Array of Hash with 'key' and 'value', where ... # – key is a Vertex # – value is a Hash of @type/@value d['@value'].map do |item| t = Tree.new t.key = unmangle item['key'] t.items = unmangle item['value'] t end when 'g:Path' unmangle_object(d, Path) when 'g:Edge' unmangle_object(d, Edge) when 'g:Vertex' unmangle_object(d, Vertex) when 'g:VertexProperty' unmangle_object(d, VertexProperty) # discard the id # unmangle d['@value']['value'] when 'g:Property' unmangle_object(d, Property) # discard the key # unmangle d['@value']['value'] when 'g:Int32', 'g:Int64', '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
unmangle_object(d, klass)
click to toggle source
# File lib/gremlin2dot/unmangler.rb, line 57 def unmangle_object(d, klass) o = klass.new d['@value'].entries.each do |k, v| o[k] = unmangle v end o end