Sha256: 4d45a7bdda9c0047701fe0ba0f977c0ed9af58f9149cc6456dc3b9f0bf1a759d

Contents?: true

Size: 1.21 KB

Versions: 2

Compression:

Stored size: 1.21 KB

Contents

module RShade
  class SourceNode
    attr_accessor :nodes, :value, :parent

    def initialize(parent, value = nil)
      @nodes = []
      @value = value || { valid: true, level: 0 }
      @value[:valid] = true unless @value.has_key?(:valid)
      @parent = parent
    end

    def add(node)
      @nodes << node
    end

    def valid?
      @value[:valid]
    end

    def toggle_valid(state)
      @value[:valid] = state
    end

    def level
      @value[:level] || 0
    end

    def klass
      @value[:klass]
    end

    def method_name
      @value[:method_name]
    end

    def path
      @value[:path]
    end

    def lineno
      @value[:lineno]
    end

    def pretty
      class_method = "#{klass}##{method_name}".colorize(:green)
      full_path = "#{path}:#{lineno}".colorize(:blue)
      "#{class_method} -> #{full_path}"
    end

    def filter(node = self, &block)
      return unless block_given?

      node.nodes.each do |item|
        filter(item, &block)
      end

      unless yield(node)
        node.toggle_valid false
      end
    end

    def traverse(node = self, &block)
      return unless block_given?

      yield(node)
      node.nodes.each { |leaf| traverse(leaf, &block) }
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rshade-0.1.1 lib/rshade/source_node.rb
rshade-0.1.0 lib/rshade/source_node.rb