From 3eb6870bff7dfdb064afdd2ec59fd6d6a8938314 Mon Sep 17 00:00:00 2001 From: Torsten Ruger Date: Fri, 19 Jun 2015 19:34:27 +0300 Subject: [PATCH] add named references object may determine own reference by defining sof_reference_name (some tests but surely more needed) --- lib/sof/members.rb | 18 +++++++++++++++--- test/test_all.rb | 1 + test/test_names.rb | 29 +++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 test/test_names.rb diff --git a/lib/sof/members.rb b/lib/sof/members.rb index 7e1b5f9..2ff4a24 100644 --- a/lib/sof/members.rb +++ b/lib/sof/members.rb @@ -15,6 +15,7 @@ module Sof def initialize root @root = root @counter = 1 + @references = [] @objects = {} add_object( root , 0) collect_level(0 , [root]) @@ -34,10 +35,21 @@ module Sof end # and only one Occurence for each object, create a reference for the second occurence unless occurence.referenced - puts "referencing #{@counter} #{occurence.object.name}, at level #{level}/#{occurence.level} " if @counter == 23 +# puts "referencing #{@counter} #{occurence.object.name}, at level #{level}/#{occurence.level} " if @counter == 23 # puts "referencing #{@counter} #{occurence.object.name}, at level #{level}/#{occurence.level} " if @counter == 19 - occurence.set_reference(@counter) - @counter = @counter + 1 + if object.respond_to? :sof_reference_name + reference = object.sof_reference_name + reference = reference.to_s.gsub(/\d|\s|\W/ , "") #remove non alpha chars + if( @references.include?(reference) or reference.empty?) + reference = "#{reference}#{@counter}" + @counter = @counter + 1 + end + else + reference = @counter.to_s + @counter = @counter + 1 + end + occurence.set_reference(reference) + @references << reference end return nil end diff --git a/test/test_all.rb b/test/test_all.rb index 9203c22..d4e14aa 100644 --- a/test/test_all.rb +++ b/test/test_all.rb @@ -3,3 +3,4 @@ require_relative "test_object" require_relative "test_ext" require_relative "test_refs" require_relative "test_super" +require_relative "test_names" diff --git a/test/test_names.rb b/test/test_names.rb new file mode 100644 index 0000000..3a69ad7 --- /dev/null +++ b/test/test_names.rb @@ -0,0 +1,29 @@ +require_relative "helper" +class NamedRef < ObjectWithAttributes + def initialize name + super() + @name = name + end + def sof_reference_name + @name.to_s + end +end + +class NamedTest < MiniTest::Test + include Checker + + def test_object_one + object = NamedRef.new("one") + object.extra = [object] + @out = [ {:one => object} , object ] + check "- {:one => ->one}\n- &one NamedRef(:name => 'one', :number => 1234, :extra => [->one])" + end + def test_object_two + object = NamedRef.new("one") + object2 = NamedRef.new("two") + object.extra = [object2] + @out = [ {:one => object} , object2 ] + check "- - :one => NamedRef(:name => 'one', :number => 1234, :extra => [->two])\n- &two NamedRef(:name => 'two', :number => 1234)" + end + +end