module Arachni::Parser::WithChildren::Search

Public Instance Methods

descendants() click to toggle source
# File lib/arachni/parser/with_children/search.rb, line 19
def descendants
    @descendants ||= begin
        n = []
        traverse { |e| n << e }
        n
    end
end
nodes_by_attribute_name( name ) click to toggle source
# File lib/arachni/parser/with_children/search.rb, line 54
def nodes_by_attribute_name( name )
    name = name.to_s.downcase

    @nodes_by_attribute_name ||= {}
    @nodes_by_attribute_name[name.hash] ||= begin
        descendants.select do |e|
            e.respond_to?(:attributes) && e.attributes.include?( name )
        end
    end
end
nodes_by_attribute_name_and_value( name, value ) click to toggle source
# File lib/arachni/parser/with_children/search.rb, line 65
def nodes_by_attribute_name_and_value( name, value )
    name = name.to_s.downcase

    @nodes_by_attribute_name_and_value ||= {}
    @nodes_by_attribute_name_and_value[[name, value].hash] ||= begin
        nodes_by_attribute_name( name ).select do |e|
            e[name].to_s.downcase == value
        end
    end
end
nodes_by_class( klass ) click to toggle source
# File lib/arachni/parser/with_children/search.rb, line 27
def nodes_by_class( klass )
    @nodes_by_name ||= {}
    @nodes_by_name[name] ||= begin
        descendants.select do |e|
            e.kind_of? klass
        end
    end
end
nodes_by_name( name ) click to toggle source
# File lib/arachni/parser/with_children/search.rb, line 36
def nodes_by_name( name )
    name = name.to_s.downcase

    @nodes_by_name ||= {}
    @nodes_by_name[name.hash] ||= begin
        descendants.select do |e|
            e.respond_to?( :name ) && e.name == name.to_sym
        end
    end
end
nodes_by_names( *names ) click to toggle source
# File lib/arachni/parser/with_children/search.rb, line 47
def nodes_by_names( *names )
    names = names.flatten

    @nodes_by_name ||= {}
    @nodes_by_name[names.hash] ||= names.map { |n| nodes_by_name( n ) }.flatten
end
traverse( klass = nil, &block ) click to toggle source
# File lib/arachni/parser/with_children/search.rb, line 15
def traverse( klass = nil, &block )
    traverser children, klass, &block
end

Private Instance Methods

traverser( nodes, klass = nil, &block ) click to toggle source
# File lib/arachni/parser/with_children/search.rb, line 78
def traverser( nodes, klass = nil, &block )
    nodes.each do |node|
        block.call( node ) if !klass || node.is_a?( klass )

        next if !node.respond_to?( :children )

        traverser node.children, klass, &block
    end
end