Sha256: 0fc89378e41311f16344e6ce93386c79813ccb7087baeb656cf5d2b502f28d3c

Contents?: true

Size: 1.75 KB

Versions: 2

Compression:

Stored size: 1.75 KB

Contents

# -*- encoding: utf-8 -*-

require 'timeout'
require 'w3c_validators'
include W3CValidators

module W3Clove
  ##
  # A page has an URL to be validated, and a collection of errors
  # In case of an exception happens when validating, it is tracked
  #
  class Page
    attr_accessor :url, :exception

    def initialize(url)
      @url = url
    end

    ##
    # Checks for errors and returns true if none found, false otherwise.
    # Warnings are not considered as validation errors so a page with
    # warnings but without errors will return true.
    # If the validation goes well, errors should be an array. Otherwise
    # it will still be nil, which will not be considered validated.
    def valid?
      !errors.nil? && errors.empty?
    end

    ##
    # Returns the collection of errors from the validations of this page.
    # If it has no validation errors, it will be an empty array.
    # It an exception occurs, it will be nil.
    def errors
      @errors ||= validations.errors.map do |e|
        W3Clove::Message.new(e.message_id, e.line, e.message, :error)
      end
    rescue Exception => e
      @exception = e.to_s
      nil
    end

    ##
    # Returns the collection of warnings from the validations of this page.
    # If it has no validation warnings, it will be an empty array.
    # It an exception occurs, it will be nil.
    def warnings
      @warnings ||= validations.warnings.map do |w|
        W3Clove::Message.new(w.message_id, w.line, w.message, :warning)
      end
    rescue Exception => e
      @exception = e.to_s
      nil
    end

    private

    ##
    # Gets the validations for this page, ensuring it times out soon
    def validations
      @validations ||= Timeout::timeout(10) { MarkupValidator.new.validate_uri(url) }
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
w3clove-0.3.2 lib/w3clove/page.rb
w3clove-0.3.1 lib/w3clove/page.rb