Sha256: 19c47b73609f708f543425c0682eede8596941479ace49d0a449272f5955f3ce

Contents?: true

Size: 1.59 KB

Versions: 3

Compression:

Stored size: 1.59 KB

Contents

###
### ##################################################################
###
### Node#inspect.
###
### ##################################################################
###

module C
  class Node
    INSPECT_TAB = '    '
    def inspect
      return Node.inspect1(self)
    end

    def Node.inspect1 x, prefix='', indent=0, is_child=true
      case x
      when NodeList
        if x.empty?
          return "#{INSPECT_TAB*indent}#{prefix}[]\n"
        else
          str = "#{INSPECT_TAB*indent}#{prefix}\n"
          x.each do |el|
            str << inspect1(el, "- ", indent+1)
          end
          return str
        end
      when Node
        classname = x.class.name.gsub(/^C::/, '')
        str = "#{INSPECT_TAB*indent}#{prefix}#{classname}"

        fields = x.fields
        bools, others = fields.partition{|field| field.reader.to_s[-1] == ??}
        bools.delete_if{|field| !x.send(field.reader)}
        bools.map!{|field| field.init_key}

        unless bools == []
          str << " (#{bools.join(' ')})"
        end
        str << "\n"

        others.each do |field|
          val = x.send(field.reader)
          next if val == field.make_default ||
            ## don't bother with non-child Nodes, since they may cause
            ## loops in the tree
            (val.is_a?(Node) && !field.child?)
          str << inspect1(val, "#{field.reader}: ", indent+1, field.child?)
        end
        return str
      when Symbol
        return "#{INSPECT_TAB*indent}#{prefix}#{x}\n"
      else
        return "#{INSPECT_TAB*indent}#{prefix}#{x.inspect}\n"
      end
      return s.string
    end
  end
end

Version data entries

3 entries across 3 versions & 2 rubygems

Version Path
cast19-0.1.1 lib/cast19/inspect.rb
cast19-0.1.0 lib/cast19/inspect.rb
cast-0.1.0 lib/cast/inspect.rb