Sha256: 6f73347babf1941b8b9d2ebd2d40a05db2098278a0a91bfeaca8d7b258fb5469
Contents?: true
Size: 1.48 KB
Versions: 2
Compression:
Stored size: 1.48 KB
Contents
# frozen_string_literal: true require 'xpath' module Capybara class Selector # @api private class XPathBuilder class << self def attribute_conditions(attributes) attributes.map do |attribute, value| case value when XPath::Expression XPath.attr(attribute)[value] when Regexp XPath.attr(attribute)[regexp_to_xpath_conditions(value)] when true XPath.attr(attribute) when false, nil !XPath.attr(attribute) else XPath.attr(attribute) == value.to_s end end.reduce(:&) end def class_conditions(classes) case classes when XPath::Expression, Regexp attribute_conditions(class: classes) else Array(classes).map do |klass| if klass.start_with?('!') && !klass.start_with?('!!!') !XPath.attr(:class).contains_word(klass.slice(1..-1)) else XPath.attr(:class).contains_word(klass.sub(/^!!/, '')) end end.reduce(:&) end end private def regexp_to_xpath_conditions(regexp) condition = XPath.current condition = condition.uppercase if regexp.casefold? Selector::RegexpDisassembler.new(regexp).substrings.map do |str| condition.contains(str) end.reduce(:&) end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
capybara-3.10.1 | lib/capybara/selector/builders/xpath_builder.rb |
capybara-3.10.0 | lib/capybara/selector/builders/xpath_builder.rb |