fixes references
only writes references out once (was broken) and only the first occurrence in write order
This commit is contained in:
parent
5ca9eed89c
commit
941f0a4886
@ -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
|
||||
|
@ -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
|
||||
|
@ -1,3 +1,4 @@
|
||||
require_relative "test_basic"
|
||||
require_relative "test_object"
|
||||
require_relative "test_ext"
|
||||
require_relative "test_refs"
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user