lib/cohesion.rb in cohesion-1.0.2 vs lib/cohesion.rb in cohesion-1.0.3
- old
+ new
@@ -2,147 +2,12 @@
require "cohesion/version"
require 'cobweb'
require 'ptools'
require 'digest/md5'
+require 'cohesion/check'
+require 'cohesion/cache'
require 'cohesion/railtie' if defined?(Rails)
module Cohesion
- class Check
- def self.rails_text
- puts "WARNING - not working yet..."
- root_path = Rails.root.to_s
- Dir.glob("**/*").each do |filename|
- unless File.directory?(filename) || File.binary?(filename) || filename.ends_with?(".rdb")
- f = File.open(filename, "r")
- content = f.read()
- f.close
- if content =~ /(https?:\/\/[a-zA-Z0-9\.\/\-_%&\?]+)/
- print "Checking #{$1} "
- begin
- status_code = Cobweb.new(:raise_exceptions => true).head($1)[:status_code].to_i
- if status_code != 200
- puts " [#{status_code}] \e[31m\u2717\e[0m"
- else
- puts "\e[32m\u2713\e[0m"
- end
- rescue SocketError
- status_code = 0
- puts " [DNS Failed] \e[31m\u2717\e[0m"
- end
- end
- end
- end
- end
-
- def self.rails_object
- puts "WARNING - not working yet..."
- root_path = Rails.root.to_s
- #app_name = Rails.application.name
- #puts "Checking #{app_name}..."
- app = CobwebSample::Application
- app.routes.default_url_options = { :host => 'xxx.com' }
-
- Dir.glob("app/controllers/**/*").each do |filename|
- controller_name = filename.gsub(".rb","").split("/")[-1].classify
- unless controller_name == "ApplicationController"
- puts "Processing #{controller_name}"
- controller = controller_name.constantize.new
-
- view = ActionView::Base.new(ActionController::Base.view_paths, {}, controller)
-
- view.view_paths = ActionController::Base.view_paths
- view.extend ApplicationHelper
- view.controller = controller
- view.class_eval do
- include ApplicationHelper
- include app.routes.url_helpers
- end
- begin
- puts view.render(:template => '/tests/index.html.erb')
- rescue => e
- puts "Error rendering view: #{e.message}"
- end
- end
- end
- end
-
- def self.site(url, options={})
- errors = []
- failures = []
-
- pages = {}
-
- options[:cache] = options[:cache].to_i if options[:cache]
- crawler_options = {:cache_type => :full, :crawl_linked_external => true, :store_inbound_links => true}.merge(options)
-
- statistics = CobwebCrawler.new(crawler_options).crawl(url) do |page|
- print page[:url]
-
- duplicate = !pages[Digest::MD5.hexdigest(page[:body])].nil?
- pages[Digest::MD5.hexdigest(page[:body])] = [] unless pages[Digest::MD5.hexdigest(page[:body])]
- pages[Digest::MD5.hexdigest(page[:body])] << page[:url]
-
- # if it was a 404 before, just check again not using the cache this time
- if page[:status_code] == 404
- page = Cobweb.new(crawler_options.merge(:cache => nil)).get(page[:url])
- end
-
- if page[:status_code] == 404 || duplicate
- if duplicate
- puts " [duplicate] \e[31m\u2717\e[0m"
- else
- puts " [#{page[:status_code]}] \e[31m\u2717\e[0m"
- end
- failures << page
- else
- puts " \e[32m\u2713\e[0m"
- end
- end
-
- puts statistics.redis.namespace
- puts statistics.get_statistics
-
- total_inbound_failures = 0
- total_failures = 0
-
- issues = []
- if failures.count == 0
- puts "All links working!"
- else
- puts "Failed urls:"
- failures.each do |f|
- inbound_links = statistics.inbound_links_for(f[:url])
- issues << {:issue => f, :inbound => inbound_links}
-
- total_inbound_failures += inbound_links.count
- total_failures += 1
-
- puts ""
- puts "#{f[:url]} [ #{f[:status_code]} ]"
- inbound_links.each do |inbound_link|
- puts " - #{inbound_link}"
- end
- end
-
- puts ""
- puts "Duplicate Content"
- puts ""
- pages.select{|k,v| v.count > 1}.each do |k,v|
- puts "Duplicate: #{k}"
- v.map{|x| puts " - #{x}" }
- end
-
-
- puts ""
- puts "Total Failed URLs: #{total_failures}"
- puts "Total Duplicates: #{pages.map{|d| d[1]}.select{|d| d.count > 1}.inject{|total, d| total + d.count}.count}"
- puts "Total Inbound Failures (Pages linking to a 404): #{total_inbound_failures}"
- puts ""
- end
- puts
-
- return issues
- end
- end
end