Class Uttk::Logger::SectionNode
In: lib/uttk/logger/section_node.rb
Parent: Object

Implement a tree of section. A section node has a name and a `active’ flag that say if the section node is on/off. A section tree verifies the following property:

   a node is active iff at least one of its sub nodes is active

Obviously, when activating a node, all its sub nodes are also activated.

Methods

Attributes

name  [R] 

Public Class methods

[Source]

# File lib/uttk/logger/section_node.rb, line 20
      def initialize(name, *sub_sections)
        self.name = name
        @sub_sections = {}
        sub_sections.each { |s| self << s }
        @active = false
      end

Public Instance methods

[Source]

# File lib/uttk/logger/section_node.rb, line 47
      def <<(sub_section)
        check_sub_section_type(sub_section)
        @sub_sections[sub_section.name] = sub_section
      end

[Source]

# File lib/uttk/logger/section_node.rb, line 37
      def [](name)
        @sub_sections[name]
      end

[Source]

# File lib/uttk/logger/section_node.rb, line 41
      def []=(name, sub_section)
        check_sub_section_type(sub_section)
        sub_section.name = name
        @sub_sections[sub_section.name] = sub_section
      end

[Source]

# File lib/uttk/logger/section_node.rb, line 56
      def active=(new_active)
        active_tree(new_active)
        @active
      end

[Source]

# File lib/uttk/logger/section_node.rb, line 61
      def active?
        @active
      end

Active the given section name in the tree. Return an array of all the section name that have been activated. The returned array is empty if the section name doesn‘t exists in the tree.

[Source]

# File lib/uttk/logger/section_node.rb, line 81
      def active_section(section_name)
        accu = []
        active_section_rec(section_name, accu)
        accu
      end

[Source]

# File lib/uttk/logger/section_node.rb, line 65
      def active_tree(new_active)
        accu = []
        active_tree_rec(new_active, accu) unless new_active == @active
        accu
      end

[Source]

# File lib/uttk/logger/section_node.rb, line 168
      def clear(name)
        @sub_sections.clear
      end

[Source]

# File lib/uttk/logger/section_node.rb, line 164
      def delete(name)
        @sub_sections.delete(name)
      end

[Source]

# File lib/uttk/logger/section_node.rb, line 146
      def each(&block)
        @sub_sections.each(&block)
      end
each_key(&block)

Alias for each_label

[Source]

# File lib/uttk/logger/section_node.rb, line 158
      def each_label(&block)
        @sub_sections.each_key(&block)
      end
each_pair(&block)

Alias for each

[Source]

# File lib/uttk/logger/section_node.rb, line 152
      def each_section(&block)
        @sub_sections.each_value(&block)
      end
each_value(&block)

Alias for each_section

[Source]

# File lib/uttk/logger/section_node.rb, line 189
      def find(name)
        if @name == name
          self
        else
          @sub_sections.each_value do |s|
            ret = s.find(name)
            return ret unless ret.nil?
          end
          nil
        end
      end

[Source]

# File lib/uttk/logger/section_node.rb, line 179
      def leaf?
        @sub_sections.empty?
      end
length()

Alias for nb_sub_sections

[Source]

# File lib/uttk/logger/section_node.rb, line 29
      def name=(new_name)
        @name = new_name.to_s
      end

[Source]

# File lib/uttk/logger/section_node.rb, line 172
      def nb_sub_sections
        @sub_sections.size
      end

[Source]

# File lib/uttk/logger/section_node.rb, line 183
      def pre_depth_first(&block)
        block[self]
        @sub_sections.each_value { |s| s.pre_depth_first(&block) }
        nil
      end

[Source]

# File lib/uttk/logger/section_node.rb, line 52
      def push(*sub_sections)
        sub_sections.each { |ss| self << ss }
      end

[Source]

# File lib/uttk/logger/section_node.rb, line 137
      def set_active_section(active, *section_names)
        section = []
        section_names.each do |s|
          section.concat(active ? active_section(s) : unactive_section(s))
        end
        section.uniq!
        section
      end
size()

Alias for nb_sub_sections

[Source]

# File lib/uttk/logger/section_node.rb, line 33
      def sub_sections
        @sub_sections.values
      end

Unactive the given section name in the tree. Return an array of all the section name that have been unactivated. The returned array is empty if the section name doesn‘t exists in the tree or if none section have been unactivated.

[Source]

# File lib/uttk/logger/section_node.rb, line 110
      def unactive_section(section_name)
        accu = []
        unactive_section_rec(section_name, accu)
        accu
      end

Protected Instance methods

[Source]

# File lib/uttk/logger/section_node.rb, line 87
      def active_section_rec(section_name, accu)
        if @name == section_name
          accu.concat(active_tree(true))
          true
        else
          ret = false
          @sub_sections.each_value do |s|
            if s.active_section_rec(section_name, accu)
              @active = true
              accu << @name
              ret = true
              break
            end
          end
          ret
        end
      end

[Source]

# File lib/uttk/logger/section_node.rb, line 71
      def active_tree_rec(new_active, accu)
        @active = new_active
        accu << @name
        @sub_sections.each_value { |s| s.active_tree_rec(new_active, accu) }
      end

[Source]

# File lib/uttk/logger/section_node.rb, line 202
      def check_sub_section_type(sub_section)
        unless sub_section.is_a?(self.class)
          raise(TypeError, "`#{sub_section}' - must be a #{self.class}")
        end
      end

[Source]

# File lib/uttk/logger/section_node.rb, line 116
      def unactive_section_rec(section_name, accu)
        if @name == section_name
          accu.concat(active_tree(false))
          true
        else
          not_unactivable = ret = false
          @sub_sections.each_value do |s|
            ret ||= s.unactive_section_rec(section_name, accu)
            not_unactivable ||= s.active?
          end
          if ret and (not not_unactivable)
            @active = false
            accu << @name
            true
          else
            false
          end
        end
      end

[Validate]