From 72fa26b00eaae61136b3490b9692cd693d80268c Mon Sep 17 00:00:00 2001 From: Torsten Ruger Date: Tue, 16 Jun 2015 18:51:30 +0300 Subject: [PATCH] make class a value and minor others --- lib/salama-object-file.rb | 5 +++++ lib/sof/array_node.rb | 2 +- lib/sof/object_node.rb | 4 ++-- lib/sof/occurence.rb | 1 + lib/sof/util.rb | 2 +- lib/sof/writer.rb | 11 ++++------- test/test_object.rb | 2 +- 7 files changed, 15 insertions(+), 12 deletions(-) diff --git a/lib/salama-object-file.rb b/lib/salama-object-file.rb index 6aa5005..f15f361 100644 --- a/lib/salama-object-file.rb +++ b/lib/salama-object-file.rb @@ -13,6 +13,11 @@ require_relative "sof/array_node" require_relative "sof/hash_node" require_relative "sof/occurence" +Class.class_eval do + def to_sof + self.name + end +end Symbol.class_eval do def to_sof() ":#{to_s}" diff --git a/lib/sof/array_node.rb b/lib/sof/array_node.rb index 43c5ea9..249546f 100644 --- a/lib/sof/array_node.rb +++ b/lib/sof/array_node.rb @@ -17,7 +17,7 @@ module Sof node end - # A ArrayNode is a Node for a 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 # the arrays values. # diff --git a/lib/sof/object_node.rb b/lib/sof/object_node.rb index f1c7e9a..29db674 100644 --- a/lib/sof/object_node.rb +++ b/lib/sof/object_node.rb @@ -22,8 +22,8 @@ module Sof # write out at the given level # level determines the indentation (level * space) - # write out the data and then the children (always key value on one line) - def out io , level = 0 + # write out the data and then the children (always key value on one line) + def out io , level super io.write(@data) indent = " " * (level + 1) diff --git a/lib/sof/occurence.rb b/lib/sof/occurence.rb index c208e36..a85549f 100644 --- a/lib/sof/occurence.rb +++ b/lib/sof/occurence.rb @@ -12,6 +12,7 @@ module Sof @written = nil end def set_reference r + raise "was set #{@referenced}" if @referenced @referenced = r end attr_reader :object , :referenced diff --git a/lib/sof/util.rb b/lib/sof/util.rb index 4cd5dfe..4fe6a08 100644 --- a/lib/sof/util.rb +++ b/lib/sof/util.rb @@ -7,7 +7,7 @@ module Sof # hence int/bool/string etc are values def is_value? o return true if [true , false , nil].include?(o) - return true if [Fixnum, Symbol, String].include?(o.class) + return true if [Fixnum, Symbol, String, Class].include?(o.class) if o.respond_to? :is_value? return true if o.is_value? end diff --git a/lib/sof/writer.rb b/lib/sof/writer.rb index 42fa34c..aa39cce 100644 --- a/lib/sof/writer.rb +++ b/lib/sof/writer.rb @@ -45,12 +45,12 @@ module Sof raise "no object #{object}" unless occurence #puts "#{level} ? #{occurence.level} : ref #{occurence.referenced}" if( occurence.referenced ) - return SimpleNode.new("*#{occurence.referenced}") unless (level == occurence.level ) - #puts "ref #{occurence.referenced} level #{level} at #{occurence.level}" + puts "ref #{occurence.referenced} level #{level} at #{occurence.level}" + return SimpleNode.new("->#{occurence.referenced}") unless (level == occurence.level ) if( occurence.written.nil? ) occurence.written = true else - return SimpleNode.new("*#{occurence.referenced}") + return SimpleNode.new("->#{occurence.referenced}") end end ref = occurence.referenced @@ -66,9 +66,6 @@ module Sof # small means only simple attributes and only 30 chars of them # object nodes are basically arrays (see there) def object_sof_node( object , level , ref) - if( object.is_a? Class ) - return SimpleNode.new( object.name , ref ) - end head = object.class.name + "(" atts = {} attributes_for(object).each() do |a| @@ -77,7 +74,7 @@ module Sof atts[a] = to_sof_node(val , level + 1) end immediate , extended = atts.partition {|a,val| val.is_a?(SimpleNode) } - head += immediate.collect {|a,val| "#{a.to_sof()} => #{val.as_string(level)}"}.join(", ") + ")" + head += immediate.collect {|a,val| "#{a.to_sof()} => #{val.as_string(level + 1)}"}.join(", ") + ")" return SimpleNode.new(head) if( ref.nil? and extended.empty? and head.length < 30 ) node = ObjectNode.new(head , ref) extended.each do |a , val| diff --git a/test/test_object.rb b/test/test_object.rb index 7bb45be..604da6e 100644 --- a/test/test_object.rb +++ b/test/test_object.rb @@ -55,6 +55,6 @@ class ObjectSof < MiniTest::Test object.extra = ObjectWithAttributes ar = [object , ObjectWithAttributes] @out = ar - check "- ObjectWithAttributes(:name => 'some name', :number => 1234, :extra => ->1)\n- &1 ObjectWithAttributes" + check "- ObjectWithAttributes(:name => 'some name', :number => 1234, :extra => ObjectWithAttributes)\n- ObjectWithAttributes" end end