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
|
def initialize root
|
||||||
@root = root
|
@root = root
|
||||||
@counter = 1
|
@counter = 1
|
||||||
|
@references = []
|
||||||
@objects = {}
|
@objects = {}
|
||||||
add_object( root , 0)
|
add_object( root , 0)
|
||||||
collect_level(0 , [root])
|
collect_level(0 , [root])
|
||||||
@ -34,10 +35,21 @@ module Sof
|
|||||||
end
|
end
|
||||||
# and only one Occurence for each object, create a reference for the second occurence
|
# and only one Occurence for each object, create a reference for the second occurence
|
||||||
unless occurence.referenced
|
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
|
# puts "referencing #{@counter} #{occurence.object.name}, at level #{level}/#{occurence.level} " if @counter == 19
|
||||||
occurence.set_reference(@counter)
|
if object.respond_to? :sof_reference_name
|
||||||
@counter = @counter + 1
|
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
|
end
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
@ -3,3 +3,4 @@ require_relative "test_object"
|
|||||||
require_relative "test_ext"
|
require_relative "test_ext"
|
||||||
require_relative "test_refs"
|
require_relative "test_refs"
|
||||||
require_relative "test_super"
|
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