add named references
object may determine own reference by defining sof_reference_name (some tests but surely more needed)
This commit is contained in:
parent
ca803225c6
commit
3eb6870bff
@ -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
|
||||
|
@ -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
29
test/test_names.rb
Normal 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
|
Loading…
x
Reference in New Issue
Block a user