add named references

object may determine own reference by
defining sof_reference_name
(some tests but surely more needed)
This commit is contained in:
Torsten Ruger 2015-06-19 19:34:27 +03:00
parent ca803225c6
commit 3eb6870bff
3 changed files with 45 additions and 3 deletions

View File

@ -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

View File

@ -3,3 +3,4 @@ require_relative "test_object"
require_relative "test_ext"
require_relative "test_refs"
require_relative "test_super"
require_relative "test_names"

29
test/test_names.rb Normal file
View File

@ -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