Extracting some rexml code into a module
This commit is contained in:
parent
859a15b8d8
commit
59704da270
@ -1,3 +1,6 @@
|
||||
require "webrat/core/nokogiri"
|
||||
require "webrat/core/rexml"
|
||||
|
||||
module Webrat
|
||||
module Matchers
|
||||
|
||||
@ -16,9 +19,13 @@ module Webrat
|
||||
end
|
||||
|
||||
def matches_rexml?(stringlike)
|
||||
@query = query
|
||||
if REXML::Node === stringlike || Array === stringlike
|
||||
@query = query.map { |q| q.gsub(%r'//', './') }
|
||||
else
|
||||
@query = query
|
||||
end
|
||||
|
||||
@document = rexml_document(stringlike)
|
||||
@document = Webrat.rexml_document(stringlike)
|
||||
|
||||
matched = @query.map do |q|
|
||||
if @document.is_a?(Array)
|
||||
@ -42,28 +49,6 @@ module Webrat
|
||||
matched = @document.xpath(*@query)
|
||||
matched.any? && (!@block || @block.call(matched))
|
||||
end
|
||||
|
||||
def rexml_document(stringlike)
|
||||
stringlike = stringlike.body.to_s if stringlike.respond_to?(:body)
|
||||
|
||||
case stringlike
|
||||
when REXML::Document
|
||||
stringlike.root
|
||||
when REXML::Node, Array
|
||||
@query = query.map { |q| q.gsub(%r'//', './') }
|
||||
stringlike
|
||||
else
|
||||
begin
|
||||
REXML::Document.new(stringlike.to_s).root
|
||||
rescue REXML::ParseException => e
|
||||
if e.message.include?("second root element")
|
||||
REXML::Document.new("<fake-root-element>#{stringlike}</fake-root-element>").root
|
||||
else
|
||||
raise e
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def query
|
||||
[@expected].flatten.compact
|
||||
|
24
lib/webrat/core/rexml.rb
Normal file
24
lib/webrat/core/rexml.rb
Normal file
@ -0,0 +1,24 @@
|
||||
module Webrat
|
||||
|
||||
def self.rexml_document(stringlike)
|
||||
stringlike = stringlike.body.to_s if stringlike.respond_to?(:body)
|
||||
|
||||
case stringlike
|
||||
when REXML::Document
|
||||
stringlike.root
|
||||
when REXML::Node, Array
|
||||
stringlike
|
||||
else
|
||||
begin
|
||||
REXML::Document.new(stringlike.to_s).root
|
||||
rescue REXML::ParseException => e
|
||||
if e.message.include?("second root element")
|
||||
REXML::Document.new("<fake-root-element>#{stringlike}</fake-root-element>").root
|
||||
else
|
||||
raise e
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
@ -1,4 +1,3 @@
|
||||
require "nokogiri"
|
||||
require "webrat/core/form"
|
||||
require "webrat/core/locators"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user