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 Webrat
|
||||||
module Matchers
|
module Matchers
|
||||||
|
|
||||||
@ -16,9 +19,13 @@ module Webrat
|
|||||||
end
|
end
|
||||||
|
|
||||||
def matches_rexml?(stringlike)
|
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|
|
matched = @query.map do |q|
|
||||||
if @document.is_a?(Array)
|
if @document.is_a?(Array)
|
||||||
@ -42,28 +49,6 @@ module Webrat
|
|||||||
matched = @document.xpath(*@query)
|
matched = @document.xpath(*@query)
|
||||||
matched.any? && (!@block || @block.call(matched))
|
matched.any? && (!@block || @block.call(matched))
|
||||||
end
|
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
|
def query
|
||||||
[@expected].flatten.compact
|
[@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/form"
|
||||||
require "webrat/core/locators"
|
require "webrat/core/locators"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user