module HackTree
  module Node
    class Base
      # Brief 1-line description, if present.
      attr_accessor :brief_desc

      # Multi-line description, if present.
      attr_accessor :full_desc

      # Node name, Symbol.
      attr_accessor :name

      # Parent group or <tt>nil</tt>.
      attr_accessor :parent

      def initialize(attrs = {})
        attrs.each {|k, v| send("#{k}=", v)}
      end

      #   global_name   # => "hello"
      #   global_name   # => "rails.db.tables"
      def global_name
        pcs = []
        cursor = self
        begin
          pcs << cursor.name
          cursor = cursor.parent
        end while cursor

        pcs.reverse.join(".")
      end
    end # Base
  end
end