shifting code about
writer creates all nodes (not delegated) Check for class name, just as in members as is_a will lead to wrong results
This commit is contained in:
parent
78f0108166
commit
f00364cd18
@ -1,21 +1,6 @@
|
|||||||
# If a class defines to_sof_node it tells the write that it will generate Nodes itself
|
|
||||||
# this delegates to array_to_sof_node
|
|
||||||
Array.class_eval do
|
|
||||||
def to_sof_node(writer , level , ref )
|
|
||||||
Sof.array_to_sof_node(self , writer , level , ref )
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
module Sof
|
module Sof
|
||||||
# Creates a ArrayNode (see there) for the Array.
|
|
||||||
# This mainly involves creating nodes for the children
|
|
||||||
def self.array_to_sof_node(array , writer , level , ref )
|
|
||||||
node = Sof::ArrayNode.new(ref)
|
|
||||||
array.each do |object|
|
|
||||||
node.add writer.to_sof_node( object , level + 1)
|
|
||||||
end
|
|
||||||
node
|
|
||||||
end
|
|
||||||
|
|
||||||
# A ArrayNode is a Node for an Array. See Node for when and how nodes are used in Sof.
|
# A ArrayNode is a Node for an Array. See Node for when and how nodes are used in Sof.
|
||||||
# A ArrayNode has a list of children that hold the value node representations for
|
# A ArrayNode has a list of children that hold the value node representations for
|
||||||
|
@ -1,24 +1,4 @@
|
|||||||
Hash.class_eval do
|
|
||||||
# If a class defines to_sof_node it tells the write that it will generate Nodes itself
|
|
||||||
# this delegates to hash_to_sof_node
|
|
||||||
def to_sof_node(writer , level , ref)
|
|
||||||
Sof.hash_to_sof_node( self , writer , level , ref)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
module Sof
|
module Sof
|
||||||
# Creates a HashNode (see there) for the Hash.
|
|
||||||
# This mainly involves creating nodes for key value pairs
|
|
||||||
def self.hash_to_sof_node(hash,writer , level , ref)
|
|
||||||
node = Sof::HashNode.new(ref)
|
|
||||||
hash.each do |key , object|
|
|
||||||
k = writer.to_sof_node( key ,level + 1)
|
|
||||||
v = writer.to_sof_node( object ,level + 1)
|
|
||||||
node.add(k , v)
|
|
||||||
end
|
|
||||||
node
|
|
||||||
end
|
|
||||||
|
|
||||||
# A HashNode is a Node for a Hash. See Node for when and how nodes are used in Sof.
|
# A HashNode is a Node for a Hash. See Node for when and how nodes are used in Sof.
|
||||||
# A HashNode has a list of children that hold the key/value node representations for
|
# A HashNode has a list of children that hold the key/value node representations for
|
||||||
# the hashes keys and values.
|
# the hashes keys and values.
|
||||||
|
@ -35,7 +35,7 @@ module Sof
|
|||||||
# Level is mainly needed for the indenting
|
# Level is mainly needed for the indenting
|
||||||
# from the object we get the Occurence and decide wether a reference node is needed
|
# from the object we get the Occurence and decide wether a reference node is needed
|
||||||
# simple objects (with more inner structure) become SimpleNodes
|
# simple objects (with more inner structure) become SimpleNodes
|
||||||
# Any structured object bocomes a ObjectNode
|
# Any structured object becomes a ObjectNode
|
||||||
# Hash and Array create their own nodes via to_sof_node functions on the classes
|
# Hash and Array create their own nodes via to_sof_node functions on the classes
|
||||||
def to_sof_node(object , level)
|
def to_sof_node(object , level)
|
||||||
if is_value?(object)
|
if is_value?(object)
|
||||||
@ -53,19 +53,27 @@ module Sof
|
|||||||
return SimpleNode.new("->#{occurence.referenced}")
|
return SimpleNode.new("->#{occurence.referenced}")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
ref = occurence.referenced
|
ref = occurence.referenced
|
||||||
if(object.respond_to? :to_sof_node) #mainly meant for arrays and hashes
|
case object.class.name
|
||||||
object.to_sof_node(self , level , ref )
|
when "Array" , "Parfait::List"
|
||||||
|
# If a class defines to_sof_node it tells the write that it will generate Nodes itself
|
||||||
|
# this delegates to array_to_sof_node
|
||||||
|
array_to_sof_node(object , level , ref )
|
||||||
|
when "Hash" , "Parfait::Dictionary"
|
||||||
|
# and hash keys/values
|
||||||
|
hash_to_sof_node( object , level , ref)
|
||||||
else
|
else
|
||||||
object_sof_node(object , level , ref )
|
object_to_sof_node(object , level , ref)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# create an object node from the object
|
# create an object node from the object
|
||||||
# simple nodes are returned for small objects
|
# simple nodes are returned for small objects
|
||||||
# small means only simple attributes and only 30 chars of them
|
# small means only simple attributes and only 30 chars of them
|
||||||
# object nodes are basically arrays (see there)
|
# object nodes are basically arrays (see there)
|
||||||
def object_sof_node( object , level , ref)
|
def object_to_sof_node( object , level , ref)
|
||||||
node = ObjectNode.new(object.class.name , ref)
|
node = ObjectNode.new(object.class.name , ref)
|
||||||
attributes_for(object).each() do |a|
|
attributes_for(object).each() do |a|
|
||||||
val = get_value(object , a)
|
val = get_value(object , a)
|
||||||
@ -74,5 +82,28 @@ module Sof
|
|||||||
end
|
end
|
||||||
node
|
node
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Creates a ArrayNode (see there) for the Array.
|
||||||
|
# This mainly involves creating nodes for the children
|
||||||
|
def array_to_sof_node(array , level , ref )
|
||||||
|
node = Sof::ArrayNode.new(ref)
|
||||||
|
array.each do |object|
|
||||||
|
node.add to_sof_node( object , level + 1)
|
||||||
|
end
|
||||||
|
node
|
||||||
|
end
|
||||||
|
|
||||||
|
# Creates a HashNode (see there) for the Hash.
|
||||||
|
# This mainly involves creating nodes for key value pairs
|
||||||
|
def hash_to_sof_node(hash , level , ref)
|
||||||
|
node = Sof::HashNode.new(ref)
|
||||||
|
hash.each do |key , object|
|
||||||
|
k = to_sof_node( key ,level + 1)
|
||||||
|
v = to_sof_node( object ,level + 1)
|
||||||
|
node.add(k , v)
|
||||||
|
end
|
||||||
|
node
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user