class Arboretum::Scandent::PathStep
Attributes
action[RW]
attrs[RW]
element_ref[RW]
id[RW]
namespace[RW]
pseudo_exps[RW]
tag[RW]
valid_rules[RW]
Public Class Methods
new(action, element_ref, tag, namespace, id, attrs, pseudo_exps, valid_rules)
click to toggle source
# File lib/arboretum/scandent.rb, line 195 def initialize(action, element_ref, tag, namespace, id, attrs, pseudo_exps, valid_rules) @action = action @element_ref = element_ref @tag = tag.nil? ? nil : tag.to_sym @namespace = namespace.nil? ? nil : namespace.to_sym @id = id @attrs = attrs @pseudo_exps = pseudo_exps @valid_rules = valid_rules end
Public Instance Methods
describes?(element)
click to toggle source
Check if all fields match that of the given element, with no attention paid to the action FIXME: Search time improves by 25% when a tag is given. Reject non-tagged Elements more quickly
to get a similar performance boost across the board
# File lib/arboretum/scandent.rb, line 209 def describes?(element) if element.kind_of?(Arboretum::DocTree::Elements::TaggedElement) return false if !@tag.nil? and element.tag != @tag return false if !@namespace.nil? and element.namespace != @namespace return false if !@id.nil? and !element.equals_attr_val?(:id, [@id]) @attrs[:has].each {|attr_name| return false if !element.has_attr?(attr_name)} @attrs[:contains].each {|name,values| values.each {|value| return false if !element.contains_attr_val?(name,value)}} @attrs[:equals].each {|name,values| values.each {|value| return false if !element.equals_attr_val?(name,value)}} @attrs[:matches].each {|name,values| values.each {|value| return false if !element.matches_attr_val?(name,value)}} return false if element_ref == :ELEMENT_ROOT and !element.parent.nil? else return false if !@tag.nil? or !@namespace.nil? or !@id.nil? or !@attrs[:has].empty? or !@attrs[:contains].empty? or !@attrs[:equals].empty? or !@attrs[:matches].empty? or (element_ref == :ELEMENT_ROOT and !element.parent.nil?) end @pseudo_exps.each do |pseudo_name, pseudo_arg| return false if !PseudoClasses.match(element, pseudo_name, pseudo_arg) end @valid_rules.each do |rule| return false if !rule.valid_on?(element) end return true end
to_s_sans_action()
click to toggle source
# File lib/arboretum/scandent.rb, line 238 def to_s_sans_action step_str = '' if !@element_ref.nil? if @element_ref == :ELEMENT_ROOT step_str << '~' elsif @element_ref == :ELEMENT_SELF step_str << '.' end end step_str << "%#{@tag.to_s}" if !tag.nil? step_str << "@#{@namespace.to_s}" if !namespace.nil? step_str << "##{@id}" if !@id.nil? @attrs[:has].each {|attr_name| step_str << "[#{attr_name}]"} @attrs[:contains].each {|name,values| values.each {|value| step_str << "[#{name}=\"#{value}\"]"}} @attrs[:equals].each {|name,values| values.each {|value| step_str << "[#{name}==\"#{value.join(' ')}\"]"}} @attrs[:matches].each {|name,values| values.each {|value| step_str << "[#{name}~=|/#{value}/|]"}} @valid_rules.each {|rule| step_str << "{#{rule.to_s}}"} @pseudo_exps.each {|pseudo, arg| step_str << ":#{pseudo}(#{arg.to_s})"} step_str end