magellan 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION.yml +1 -1
- data/lib/magellan/broken_link_tracker.rb +6 -2
- data/lib/magellan/expected_links_tracker.rb +4 -3
- data/lib/magellan/explorer.rb +1 -1
- data/lib/magellan/logger.rb +7 -2
- data/lib/magellan/rake/base_magellan_task.rb +6 -3
- data/lib/magellan/rake/broken_link_task.rb +3 -10
- data/lib/magellan/rake/expected_links_task.rb +2 -9
- data/spec/broken_link_task_spec.rb +32 -12
- data/spec/explorer_spec.rb +1 -1
- data/spec/logger_spec.rb +28 -3
- metadata +2 -2
data/VERSION.yml
CHANGED
@@ -13,7 +13,7 @@ module Magellan
|
|
13
13
|
failed = result.status_code.starts_with?("5") || result.status_code.starts_with?("4")
|
14
14
|
@broken_links << result if failed
|
15
15
|
changed
|
16
|
-
notify_observers(Time.now, !failed)
|
16
|
+
notify_observers(Time.now, !failed, broken_link_message(result))
|
17
17
|
result.absolute_linked_resources.each do |linked_resource|
|
18
18
|
@first_linked_from[linked_resource] = result.url if !@first_linked_from.has_key?(linked_resource)
|
19
19
|
end
|
@@ -24,7 +24,11 @@ module Magellan
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def failure_message
|
27
|
-
@broken_links.map{|broken_link|
|
27
|
+
@broken_links.map{|broken_link| broken_link_message(broken_link)}.join("\n")
|
28
|
+
end
|
29
|
+
|
30
|
+
def broken_link_message(broken_link)
|
31
|
+
"#{broken_link.url} first linked from: #{@first_linked_from[broken_link.url]} returned: #{broken_link.status_code}"
|
28
32
|
end
|
29
33
|
end
|
30
34
|
end
|
@@ -14,8 +14,9 @@ module Magellan
|
|
14
14
|
patterns_that_apply(result).each do |pattern,expectation|
|
15
15
|
passed = result.linked_resources.include?(expectation)
|
16
16
|
changed
|
17
|
-
|
18
|
-
|
17
|
+
message = "#{result.url} did not contain a link to #{expectation}"
|
18
|
+
notify_observers(Time.now, passed, message)
|
19
|
+
@errors << message unless passed
|
19
20
|
end
|
20
21
|
end
|
21
22
|
end
|
@@ -43,7 +44,7 @@ module Magellan
|
|
43
44
|
end
|
44
45
|
|
45
46
|
def unmet_expecations_messages
|
46
|
-
message = "
|
47
|
+
message = ""
|
47
48
|
unmet_expecations.each {|pattern,unmet_expecation| message << "#{pattern} was never evaluted during the crawl\n"}
|
48
49
|
message
|
49
50
|
end
|
data/lib/magellan/explorer.rb
CHANGED
@@ -34,7 +34,7 @@ module Magellan
|
|
34
34
|
rescue WWW::Mechanize::ResponseCodeError => the_error
|
35
35
|
Explorer.create_result(url, url, the_error.response_code, [],UNKNOWN_CONTENT)
|
36
36
|
rescue Timeout::Error
|
37
|
-
Explorer.create_result(url, url, "
|
37
|
+
Explorer.create_result(url, url, "504", [],UNKNOWN_CONTENT)
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
data/lib/magellan/logger.rb
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
module Magellan
|
2
2
|
class Logger
|
3
|
-
def
|
4
|
-
|
3
|
+
def initialize(file_name=nil)
|
4
|
+
@file_name = file_name
|
5
|
+
end
|
6
|
+
|
7
|
+
def update(time,passed,message)
|
8
|
+
$stdout.putc(passed ? '.' : 'F')
|
5
9
|
$stdout.flush
|
10
|
+
File.open(@file_name, 'a') {|f| f.write(message + "\n") } if @file_name && !passed
|
6
11
|
end
|
7
12
|
end
|
8
13
|
end
|
@@ -6,7 +6,10 @@ module Magellan
|
|
6
6
|
attr_accessor :origin_url
|
7
7
|
attr_accessor :explore_depth
|
8
8
|
attr_accessor :ignored_urls
|
9
|
-
|
9
|
+
attr_accessor :links_to_explore
|
10
|
+
attr_accessor :success_message
|
11
|
+
attr_accessor :failure_log
|
12
|
+
|
10
13
|
def initialize(name)
|
11
14
|
@ignored_urls = []
|
12
15
|
@name=name
|
@@ -21,11 +24,11 @@ module Magellan
|
|
21
24
|
:ignored_urls =>ignored_urls, :links_to_explore => links_to_explore, :trace => ENV['TRACE']}
|
22
25
|
cartographer = Magellan::Cartographer.new(settings)
|
23
26
|
observer = create_observer
|
24
|
-
observer.add_observer(Magellan::Logger.new)
|
27
|
+
observer.add_observer(Magellan::Logger.new(failure_log))
|
25
28
|
cartographer.add_observer(observer)
|
26
29
|
cartographer.crawl
|
27
30
|
if observer.failed?
|
28
|
-
STDERR.puts observer.failure_message
|
31
|
+
STDERR.puts "\n" + observer.failure_message
|
29
32
|
exit 1
|
30
33
|
else
|
31
34
|
$stdout.puts "\n" + success_message
|
@@ -8,6 +8,8 @@ module Magellan
|
|
8
8
|
|
9
9
|
class BrokenLinkTask < BaseMagellanTask
|
10
10
|
def initialize(name="magellan:explore")
|
11
|
+
@links_to_explore = [["a","href"],["script","src"],["img","src"]]
|
12
|
+
@success_message = "No broken links were found!"
|
11
13
|
super(name)
|
12
14
|
end
|
13
15
|
|
@@ -15,18 +17,9 @@ module Magellan
|
|
15
17
|
Magellan::BrokenLinkTracker.new
|
16
18
|
end
|
17
19
|
|
18
|
-
def links_to_explore
|
19
|
-
[["a","href"],["script","src"],["img","src"]]
|
20
|
-
end
|
21
|
-
|
22
20
|
def description
|
23
21
|
"explore #{@origin_url} for broken links"
|
24
|
-
end
|
25
|
-
|
26
|
-
def success_message
|
27
|
-
"No broken links were found!"
|
28
|
-
end
|
29
|
-
|
22
|
+
end
|
30
23
|
end
|
31
24
|
|
32
25
|
end
|
@@ -10,25 +10,18 @@ module Magellan
|
|
10
10
|
attr_accessor :patterns_and_expected_links
|
11
11
|
|
12
12
|
def initialize(name="magellan:check_links")
|
13
|
+
@success_message = "All expected links found!"
|
14
|
+
@links_to_explore = [["a","href"]]
|
13
15
|
super(name)
|
14
16
|
end
|
15
17
|
|
16
18
|
def description
|
17
19
|
"Explore #{@origin_url} and find check if all given patterns are matched"
|
18
20
|
end
|
19
|
-
|
20
|
-
def links_to_explore
|
21
|
-
[["a","href"]]
|
22
|
-
end
|
23
21
|
|
24
22
|
def create_observer
|
25
23
|
Magellan::ExpectedLinksTracker.new(@patterns_and_expected_links)
|
26
24
|
end
|
27
|
-
|
28
|
-
def success_message
|
29
|
-
"All expected links found!"
|
30
|
-
end
|
31
|
-
|
32
25
|
end
|
33
26
|
|
34
27
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper'
|
2
2
|
require 'rake'
|
3
|
+
require 'fileutils'
|
3
4
|
|
4
5
|
describe "Magellan BrokenLinkTask" do
|
5
6
|
|
@@ -22,7 +23,7 @@ describe "Magellan BrokenLinkTask" do
|
|
22
23
|
Magellan::Rake::BrokenLinkTask.new
|
23
24
|
tasks.include?("magellan:explore").should be_true
|
24
25
|
end
|
25
|
-
|
26
|
+
|
26
27
|
it "should explore when task is invoked" do
|
27
28
|
Magellan::Rake::BrokenLinkTask.new("invoke_task") do |t|
|
28
29
|
t.explore_depth = 1
|
@@ -42,17 +43,36 @@ describe "Magellan BrokenLinkTask" do
|
|
42
43
|
Magellan::Explorer.any_instance.stubs(:explore_a).once.with("http://canrailsscale.com").returns(create_result("http://canrailsscale.com","500"))
|
43
44
|
lambda {@rake.invoke_task("exception_task")}.should raise_error
|
44
45
|
end
|
45
|
-
|
46
|
+
|
47
|
+
it "should create a log file if one was specified" do
|
48
|
+
begin
|
49
|
+
log = File.dirname(__FILE__) + "/log.txt"
|
50
|
+
FileUtils.rm(log,:force => true)
|
51
|
+
File.exists?(log).should be_false
|
52
|
+
Magellan::Rake::BrokenLinkTask.new("failure_log") do |t|
|
53
|
+
t.explore_depth = 1
|
54
|
+
t.failure_log = log
|
55
|
+
t.origin_url = "http://canrailsscale.com"
|
56
|
+
end
|
57
|
+
$stderr.expects(:puts)
|
58
|
+
Magellan::Explorer.any_instance.stubs(:explore_a).once.with("http://canrailsscale.com").returns(create_result("http://canrailsscale.com","504"))
|
59
|
+
lambda {@rake.invoke_task("failure_log")}.should raise_error
|
60
|
+
File.exists?(log).should be_true
|
61
|
+
ensure
|
62
|
+
FileUtils.rm(log,:force => true)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
46
66
|
it "should attach logger" do
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
67
|
+
Magellan::Rake::BrokenLinkTask.new("logger_test") do |t|
|
68
|
+
t.explore_depth = 1
|
69
|
+
t.origin_url = "http://canrailsscale.com"
|
70
|
+
end
|
71
|
+
$stderr.stubs(:puts)
|
72
|
+
Magellan::Logger.any_instance.expects(:update)
|
73
|
+
Magellan::Explorer.any_instance.stubs(:explore_a).once.with("http://canrailsscale.com").returns(create_result("http://canrailsscale.com","500"))
|
74
|
+
lambda {@rake.invoke_task("logger_test")}.should raise_error
|
75
|
+
end
|
56
76
|
|
57
77
|
def create_result(url,status_code)
|
58
78
|
Magellan::Explorer.create_result(url,url,status_code, [],"foo")
|
@@ -61,4 +81,4 @@ describe "Magellan BrokenLinkTask" do
|
|
61
81
|
def tasks
|
62
82
|
@rake.tasks.collect{|task| task.name }
|
63
83
|
end
|
64
|
-
end
|
84
|
+
end
|
data/spec/explorer_spec.rb
CHANGED
@@ -11,7 +11,7 @@ describe Magellan::Explorer do
|
|
11
11
|
it "should foo" do
|
12
12
|
WWW::Mechanize.any_instance.expects(:get).raises(Timeout::Error)
|
13
13
|
result = Magellan::Explorer.new(['http://canrailsscale.com/'],links_to_explore).explore
|
14
|
-
result.first.status_code.should eql('
|
14
|
+
result.first.status_code.should eql('504')
|
15
15
|
result.first.url.should eql('http://canrailsscale.com/')
|
16
16
|
end
|
17
17
|
|
data/spec/logger_spec.rb
CHANGED
@@ -5,11 +5,36 @@ describe Magellan::Logger do
|
|
5
5
|
it "should put a . for a pass" do
|
6
6
|
logger = Magellan::Logger.new
|
7
7
|
$stdout.expects(:putc).with('.')
|
8
|
-
logger.update(Time.now,true)
|
8
|
+
logger.update(Time.now,true,'')
|
9
9
|
end
|
10
10
|
it "should put a F for a fail" do
|
11
11
|
logger = Magellan::Logger.new
|
12
12
|
$stdout.expects(:putc).with('F')
|
13
|
-
logger.update(Time.now,false)
|
13
|
+
logger.update(Time.now,false,'')
|
14
14
|
end
|
15
|
-
|
15
|
+
it "should create a log file if one is passed in and the updated failed" do
|
16
|
+
begin
|
17
|
+
log = File.dirname(__FILE__) + "/log.txt"
|
18
|
+
FileUtils.rm(log,:force => true)
|
19
|
+
File.exists?(log).should be_false
|
20
|
+
$stdout.stubs(:putc)
|
21
|
+
logger =Magellan::Logger.new(log)
|
22
|
+
logger.update(Time.now,false,'foozor')
|
23
|
+
File.exists?(log).should be_true
|
24
|
+
File.open(log).readlines.should include("foozor\n")
|
25
|
+
ensure
|
26
|
+
FileUtils.rm(log,:force => true)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should not a log file if one is passed in and the updated passed" do
|
31
|
+
log = File.dirname(__FILE__) + "/log2.txt"
|
32
|
+
FileUtils.rm(log,:force => true)
|
33
|
+
File.exists?(log).should be_false
|
34
|
+
$stdout.stubs(:putc)
|
35
|
+
logger =Magellan::Logger.new(log)
|
36
|
+
logger.update(Time.now,true,'foozor')
|
37
|
+
File.exists?(log).should be_false
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: magellan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nolan Evans
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-04-
|
12
|
+
date: 2009-04-07 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|