module Html module Test module UrlSelector def skip_url?(url) return true if url.blank? or (!external_http?(url) and url =~ /:\/\//) # Unsupported protocol [/^javascript:/, /^mailto:/, /^\#$/].each do |pattern| return true if url =~ pattern end false end def external_http?(url) url =~ /^http(?:s)?:\/\// end def anchor_urls select("a").map { |l| l.attributes['href'] } end def image_urls select("img").map { |i| i.attributes['src'] } end def form_urls select("form").map { |i| i.attributes['action'] } end def response_body self.respond_to?(:response) ? response.body : @response.body end def select(pattern) HTML::Selector.new(pattern).select(HTML::Document.new(response_body).root) end end end end