Sha256: ce79e9c99d8eb584b148d5251c93bf736191f1bb4d6aac24649ed33b8ba250cb

Contents?: true

Size: 1.36 KB

Versions: 1

Compression:

Stored size: 1.36 KB

Contents

module Magellan
  # The class that will track all broken links, urls that return 4** or 5** http status codes.
  class BrokenLinkTracker
    include Observable
    
    # All results containing 4** or 5** http status codes
    attr_reader :broken_links

    # Create a new broken link tracker
    def initialize
      @broken_links = []
      @first_linked_from = {}
    end

    # The updates that come in via a observable subject, the time the result came at and the Magellan::Result itself.
    def update(time,result)
      failed = result.status_code.starts_with?("5") || result.status_code.starts_with?("4")
      @broken_links << result if failed
      changed
      notify_observers(Time.now, !failed, broken_link_message(result))
      result.absolute_linked_resources.each do |linked_resource|
        @first_linked_from[linked_resource] = result.url if !@first_linked_from.has_key?(linked_resource)
      end
    end

    # Are there any broken links?
    def failed? 
      !@broken_links.empty?
    end

    # A text message of all failures
    def failure_message
      @broken_links.map{|broken_link| broken_link_message(broken_link)}.join("\n")
    end
    
    # Generate the failure message for a Magellan::Result
    def broken_link_message(result)
      "#{result.url} first linked from: #{@first_linked_from[result.url]} returned: #{result.status_code}"
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
magellan-0.1.3 lib/magellan/broken_link_tracker.rb