fixes references

only writes references out once (was broken)
and only the first occurrence in write order
This commit is contained in:
Torsten Ruger 2015-06-14 22:55:41 +03:00
parent 5ca9eed89c
commit 941f0a4886
4 changed files with 14 additions and 7 deletions

View File

@ -4,13 +4,14 @@ module Sof
def initialize object , level
@object = object
@level = level
@referenced = nil
@referenced = nil
@written = nil
end
def set_reference r
@referenced = r
end
attr_reader :object , :referenced
attr_accessor :level
attr_accessor :level , :written
end
end

View File

@ -18,9 +18,14 @@ module Sof
end
occurence = @members.objects[object.object_id]
raise "no object #{object}" unless occurence
if(level > occurence.level )
#puts "#{level} ? #{occurence.level} : ref #{occurence.referenced}"
if( occurence.referenced and (occurence.level <= level) )
#puts "ref #{occurence.referenced} level #{level} at #{occurence.level}"
return SimpleNode.new("*#{occurence.referenced}")
if( occurence.written.nil? )
occurence.written = true
else
return SimpleNode.new("*#{occurence.referenced}")
end
end
ref = occurence.referenced
if(object.respond_to? :to_sof_node) #mainly meant for arrays and hashes
@ -36,7 +41,7 @@ module Sof
end
head = object.class.name + "("
atts = {}
attributes_for(object).each() do |a|
attributes_for(object).each() do |a|
val = get_value(object , a)
next if val.nil?
atts[a] = to_sof_node(val , level + 1)
@ -55,6 +60,6 @@ module Sof
writer = Writer.new(Members.new(object) )
writer.write
end
end
end

View File

@ -1,3 +1,4 @@
require_relative "test_basic"
require_relative "test_object"
require_relative "test_ext"
require_relative "test_refs"

View File

@ -57,6 +57,6 @@ class ObjectSof < MiniTest::Test
object.extra = ObjectWithAttributes
ar = [object , ObjectWithAttributes]
@out = ar
check "-ObjectWithAttributes(:name => 'some name', :number => 1234, :extra => *1)\n-&1 ObjectWithAttributes"
check "-ObjectWithAttributes(:name => 'some name', :number => 1234, :extra => &1 ObjectWithAttributes)\n-*1"
end
end