class BeValidAsset::BeValidBase
Abstract base class for other matchers
Private Instance Methods
call_validator(query_params)
click to toggle source
# File lib/be_valid_asset/be_valid_base.rb, line 71 def call_validator(query_params) check_net_enabled boundary = Digest::MD5.hexdigest(Time.now.to_s) data = encode_multipart_params(boundary, query_params) return http_start(validator_host).post2(validator_path, data, "Content-type" => "multipart/form-data; boundary=#{boundary}" ) end
check_net_enabled()
click to toggle source
# File lib/be_valid_asset/be_valid_base.rb, line 12 def check_net_enabled if ENV["NONET"] == 'true' raise BeValidAsset::DontRunValidAssetSpecs.new('Network tests disabled') end end
encode_multipart_params(boundary, params = {})
click to toggle source
# File lib/be_valid_asset/be_valid_base.rb, line 78 def encode_multipart_params(boundary, params = {}) ret = '' params.each do |k,v| unless v.empty? ret << "\r\n--#{boundary}\r\n" ret << "Content-Disposition: form-data; name=\"#{k.to_s}\"\r\n\r\n" ret << v end end ret << "\r\n--#{boundary}--\r\n" ret end
get_validator_response(query_params = {})
click to toggle source
# File lib/be_valid_asset/be_valid_base.rb, line 54 def get_validator_response(query_params = {}) if Configuration.enable_caching digest = Digest::MD5.hexdigest(query_params.to_a.sort {|a,b| a[0].to_s<=>b[0].to_s}.join) cache_filename = File.join(Configuration.cache_path, digest) if File.exist? cache_filename response = File.open(cache_filename) {|f| Marshal.load(f) } else response = call_validator( query_params ) File.open(cache_filename, 'w') {|f| Marshal.dump(response, f) } if response.is_a? Net::HTTPSuccess end else response = call_validator( query_params ) end raise "HTTP error: #{response.code}" unless response.is_a? Net::HTTPSuccess return response end
http_start(host)
click to toggle source
# File lib/be_valid_asset/be_valid_base.rb, line 91 def http_start(host) uri = URI.parse(host) uri = URI.parse("http://#{host}") if uri.scheme.nil? if uri.scheme == 'https' http = Net::HTTP.new uri.host, uri.port http.verify_mode = OpenSSL::SSL::VERIFY_NONE http.use_ssl = true http.start elsif ENV['http_proxy'] proxy_uri = URI.parse(ENV['http_proxy']) proxy_user, proxy_pass = proxy_uri.userinfo.split(/:/) if proxy_uri.userinfo Net::HTTP.start(uri.host, uri.port, proxy_uri.host, proxy_uri.port, proxy_user, proxy_pass) else Net::HTTP.start(uri.host, uri.port) end end
process_errors(query_params, response)
click to toggle source
# File lib/be_valid_asset/be_valid_base.rb, line 34 def process_errors(query_params, response) fragment = query_params[:fragment] || query_params[:text] if Configuration.display_invalid_content || Configuration.display_invalid_lines lines = fragment.split($/) end lines.each_with_index{|line, index| @message << "#{'%04i' % (index+1)} : #{line}#{$/}"} if Configuration.display_invalid_content REXML::Document.new(response.body).root.each_element('//m:error') do |e| @message << "#{error_line_prefix}: line #{e.elements['m:line'].text}: #{e.elements['m:message'].get_text.value.strip}\n" if Configuration.display_invalid_lines line_no = e.elements['m:line'].text.to_i start_line = [line_no - (Configuration.display_invalid_lines_count / 2), 1].max end_line = [line_no + (Configuration.display_invalid_lines_count / 2), lines.length].min for i in start_line..end_line @message << "#{'%04i' % i}#{ i == line_no ? '>>' : ' ' }: #{ lines[i - 1] }#{ $/ }" end @message << "------\n" end end end
response_indicates_valid?(response)
click to toggle source
# File lib/be_valid_asset/be_valid_base.rb, line 30 def response_indicates_valid?(response) response['x-w3c-validator-status'] == 'Valid' end
validate(query_params)
click to toggle source
# File lib/be_valid_asset/be_valid_base.rb, line 18 def validate(query_params) query_params.merge!( {:output => 'soap12' } ) response = get_validator_response(query_params) markup_is_valid = response_indicates_valid?(response) @message = '' unless markup_is_valid process_errors(query_params, response) end return markup_is_valid end