From 224bd84b01b6e12805543c376daceaad9ef82944 Mon Sep 17 00:00:00 2001 From: Torsten Ruger Date: Mon, 15 Jun 2015 09:07:16 +0300 Subject: [PATCH] fix references (again) quite tricky logic, but now outputting at lowest level, as intended --- lib/sof/writer.rb | 3 ++- test/helper.rb | 10 ++++++++++ test/test_object.rb | 12 ++---------- test/test_refs.rb | 10 ++++++++++ 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/lib/sof/writer.rb b/lib/sof/writer.rb index 484f2ca..42fa34c 100644 --- a/lib/sof/writer.rb +++ b/lib/sof/writer.rb @@ -44,7 +44,8 @@ module Sof occurence = @members.objects[object.object_id] raise "no object #{object}" unless occurence #puts "#{level} ? #{occurence.level} : ref #{occurence.referenced}" - if( occurence.referenced and (occurence.level <= level) ) + if( occurence.referenced ) + return SimpleNode.new("*#{occurence.referenced}") unless (level == occurence.level ) #puts "ref #{occurence.referenced} level #{level} at #{occurence.level}" if( occurence.written.nil? ) occurence.written = true diff --git a/test/helper.rb b/test/helper.rb index 83bb5ea..c61cfb8 100644 --- a/test/helper.rb +++ b/test/helper.rb @@ -23,3 +23,13 @@ module Checker assert_equal should , out end end + +class ObjectWithAttributes + def initialize + @name = "some name" + @number = 1234 + end + attr_accessor :extra , :volotile +end +OBJECT_STRING = "ObjectWithAttributes(:name => 'some name', :number => 1234)" +Sof::Volotile.add(ObjectWithAttributes , [:volotile]) diff --git a/test/test_object.rb b/test/test_object.rb index 1de0400..e4d3c71 100644 --- a/test/test_object.rb +++ b/test/test_object.rb @@ -1,12 +1,4 @@ -class ObjectWithAttributes - def initialize - @name = "some name" - @number = 1234 - end - attr_accessor :extra , :volotile -end -OBJECT_STRING = "ObjectWithAttributes(:name => 'some name', :number => 1234)" -Sof::Volotile.add(ObjectWithAttributes , [:volotile]) +require_relative "helper" class ObjectSof < MiniTest::Test include Checker @@ -63,6 +55,6 @@ class ObjectSof < MiniTest::Test object.extra = ObjectWithAttributes ar = [object , ObjectWithAttributes] @out = ar - check "-ObjectWithAttributes(:name => 'some name', :number => 1234, :extra => &1 ObjectWithAttributes)\n-*1" + check "-ObjectWithAttributes(:name => 'some name', :number => 1234, :extra => *1)\n-&1 ObjectWithAttributes" end end diff --git a/test/test_refs.rb b/test/test_refs.rb index da1907d..34b0b67 100644 --- a/test/test_refs.rb +++ b/test/test_refs.rb @@ -22,4 +22,14 @@ class TestRefs < MiniTest::Test check "-&1 {} -*1" end + def test_bigger + @out = [ { :one => @array , :two => [{ :three => @array}] } ] + check "--:one => &1 []\n -:two => -{:three => *1}" + end + def test_object + object = ObjectWithAttributes.new + object.extra = [object] + @out = [ {:one => object} , object ] + check "-{:one => *1}\n-&1 ObjectWithAttributes(:name => 'some name', :number => 1234)\n :extra [*1]" + end end