From b0472753f4f4e9f2510da15b4d77a046d8adda7e Mon Sep 17 00:00:00 2001 From: Torsten Ruger Date: Sun, 17 Aug 2014 21:44:34 +0300 Subject: [PATCH] fixing arrays/hashs and starting complex objects --- lib/sof/array.rb | 4 ++-- lib/sof/hash.rb | 4 ++-- lib/sof/node.rb | 4 ++-- lib/sof/writer.rb | 7 ++++--- test/sof.rb | 12 ++++++++++++ 5 files changed, 22 insertions(+), 9 deletions(-) diff --git a/lib/sof/array.rb b/lib/sof/array.rb index 318eea06..f2f03e57 100644 --- a/lib/sof/array.rb +++ b/lib/sof/array.rb @@ -1,8 +1,8 @@ Array.class_eval do - def to_sof_node(members , level) + def to_sof_node(writer , level) node = Sof::NodeList.new() each do |object| - node.add members.to_sof_node( object ) + node.add writer.to_sof_node( object ) end node end diff --git a/lib/sof/hash.rb b/lib/sof/hash.rb index 14e88aec..9dcf5a3c 100644 --- a/lib/sof/hash.rb +++ b/lib/sof/hash.rb @@ -1,9 +1,9 @@ Hash.class_eval do - def to_sof_node(members , level) + def to_sof_node(writer , level) node = Sof::NodeList.new() each do |key , object| k = key.to_sof() + ": " - v = members.to_sof_node( object ) + v = writer.to_sof_node( object ) v.data = "#{k}#{v.data}" node.add v end diff --git a/lib/sof/node.rb b/lib/sof/node.rb index a3606631..232e3e3c 100644 --- a/lib/sof/node.rb +++ b/lib/sof/node.rb @@ -20,8 +20,8 @@ module Sof end class NodeList < SimpleNode - def initialize - super(nil) + def initialize data = nil + super(data) @children = [] end attr_accessor :children diff --git a/lib/sof/writer.rb b/lib/sof/writer.rb index 6cd9e007..94bee925 100644 --- a/lib/sof/writer.rb +++ b/lib/sof/writer.rb @@ -30,12 +30,13 @@ module Sof attributes = attributes_for(object) immediate , extended = attributes.partition {|a| is_value?(get_value(object , a) ) } head += immediate.collect {|a| "#{a}: #{get_value(object , a).to_sof()}"}.join(", ") + ")" - - node = SimpleNode.new(head) + ex = {} extended.each do |a| val = get_value(object , a) - node.add to_sof_node(val) + ex[a] = val end + node = ex.to_sof_node(self,level+1) + node.data = head node end diff --git a/test/sof.rb b/test/sof.rb index a4d29950..32144bcb 100644 --- a/test/sof.rb +++ b/test/sof.rb @@ -6,6 +6,10 @@ class ObjectWithAttributes @name = "some name" @number = 1234 end + def extra_array + @extra = [:sym , 123] + self + end end OBJECT_STRING = "ObjectWithAttributes(name: 'some name', number: 1234)" @@ -22,6 +26,10 @@ class BasicSof < MiniTest::Test out = Sof::Writer.write(ObjectWithAttributes.new) assert_equal "#{OBJECT_STRING}" , out end + def test_object_extra_array + out = Sof::Writer.write(ObjectWithAttributes.new.extra_array) + assert_equal "#{OBJECT_STRING}" , out + end def test_simple_array out = Sof::Writer.write([true, 1234]) assert_equal "-true\n-1234" , out @@ -54,6 +62,10 @@ class BasicSof < MiniTest::Test out = Sof::Writer.write({ one: 1 , two: ObjectWithAttributes.new }) assert_equal "-:one: 1\n-:two: #{OBJECT_STRING}" , out end + def test_array_hash + out = Sof::Writer.write([true, 1 , { one: 1 , tru: true }]) + assert_equal "-true\n-1\n--:one: 1\n -:tru: true" , out + end def test_hash_array out = Sof::Writer.write({ one: [1 , ObjectWithAttributes.new] , two: true }) assert_equal "-:one: -1\n -#{OBJECT_STRING}\n-:two: true" , out