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

@ -5,12 +5,13 @@ module Sof
@object = object
@level = level
@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,10 +18,15 @@ 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}"
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
object.to_sof_node(self , level , ref )

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