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