link-checker 0.3.1 → 0.4.0

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/Gemfile CHANGED
@@ -3,6 +3,7 @@ source :rubygems
3
3
  gem "nokogiri", "~> 1.5.5"
4
4
  gem "colorize", "~> 0.5.8"
5
5
  gem "anemone", "~> 0.7.2"
6
+ gem "trollop", "~> 2.0"
6
7
 
7
8
  group(:test, :development) do
8
9
  gem "rspec", "~> 2.11.0"
@@ -41,6 +41,7 @@ GEM
41
41
  multi_json (~> 1.0)
42
42
  simplecov-html (~> 0.5.3)
43
43
  simplecov-html (0.5.3)
44
+ trollop (2.0)
44
45
  yard (0.8.2.1)
45
46
 
46
47
  PLATFORMS
@@ -56,4 +57,5 @@ DEPENDENCIES
56
57
  redcarpet (~> 2.1.1)
57
58
  rspec (~> 2.11.0)
58
59
  simplecov (~> 0.6.4)
60
+ trollop (~> 2.0)
59
61
  yard (~> 0.8.2.1)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.1
1
+ 0.4.0
@@ -1,8 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'link_checker'
4
+ require 'trollop'
4
5
 
5
- # Assume the 'public' directory is the site unless otherwise specified.
6
- target = ARGV[0] || './'
6
+ options = Trollop::options do
7
+ opt :no_warnings, "Don't warn about redirects to valid links"
8
+ end
7
9
 
8
- LinkChecker.new(target).check_uris
10
+ exit LinkChecker.new(:options => options, :target => ARGV[0]).check_uris
@@ -8,8 +8,10 @@ require 'anemone'
8
8
 
9
9
  class LinkChecker
10
10
 
11
- def initialize(target)
12
- @target = target
11
+ def initialize(params)
12
+ @options = params[:options] || {}
13
+ @target = params[:target] || './'
14
+ @return_code = 0
13
15
  end
14
16
 
15
17
  def html_file_paths
@@ -41,6 +43,7 @@ class LinkChecker
41
43
  when Net::HTTPRedirection then
42
44
  return self.check_uri(URI(response['location']), true)
43
45
  else
46
+ @return_code = 1
44
47
  return Error.new(:uri_string => uri.to_s, :response => response)
45
48
  end
46
49
  end
@@ -48,11 +51,16 @@ class LinkChecker
48
51
  end
49
52
 
50
53
  def check_uris
51
- if @target =~ /^https?\:\/\//
52
- check_uris_by_crawling
53
- else
54
- check_uris_in_files
54
+ begin
55
+ if @target =~ /^https?\:\/\//
56
+ check_uris_by_crawling
57
+ else
58
+ check_uris_in_files
59
+ end
60
+ rescue => error
61
+ puts "Error: #{error.to_s}".red
55
62
  end
63
+ @return_code
56
64
  end
57
65
 
58
66
  def check_uris_by_crawling
@@ -60,6 +68,7 @@ class LinkChecker
60
68
  Anemone.crawl(@target) do |anemone|
61
69
  anemone.storage = Anemone::Storage.PStore('link-checker-crawled-pages.pstore')
62
70
  anemone.on_every_page do |crawled_page|
71
+ raise StandardError.new(crawled_page.error) if crawled_page.error
63
72
  threads << start_link_check_thread(crawled_page.body, crawled_page.url.to_s)
64
73
  end
65
74
  end
@@ -95,14 +104,16 @@ class LinkChecker
95
104
  Thread.exclusive do
96
105
  if bad_checks.empty?
97
106
  message = "Checked: #{file}"
98
- if warnings.empty?
107
+ if warnings.empty? || @options[:no_warnings]
99
108
  puts message.green
100
109
  else
101
110
  puts message.yellow
102
111
  end
103
- warnings.each do |warning|
104
- puts " Warning: #{warning[:uri_string]}".yellow
105
- puts " Redirected to: #{warning[:response].final_destination_uri_string}".yellow
112
+ unless @options[:no_warnings]
113
+ warnings.each do |warning|
114
+ puts " Warning: #{warning[:uri_string]}".yellow
115
+ puts " Redirected to: #{warning[:response].final_destination_uri_string}".yellow
116
+ end
106
117
  end
107
118
  else
108
119
  puts "Problem: #{file}".red
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "link-checker"
8
- s.version = "0.3.1"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ryan Alyn Porter"]
12
- s.date = "2012-10-05"
12
+ s.date = "2012-10-06"
13
13
  s.description = "Check the links in a web site before deploying, using Nokogiri."
14
14
  s.executables = ["check-links"]
15
15
  s.extra_rdoc_files = [
@@ -378,6 +378,7 @@ Gem::Specification.new do |s|
378
378
  s.add_runtime_dependency(%q<nokogiri>, ["~> 1.5.5"])
379
379
  s.add_runtime_dependency(%q<colorize>, ["~> 0.5.8"])
380
380
  s.add_runtime_dependency(%q<anemone>, ["~> 0.7.2"])
381
+ s.add_runtime_dependency(%q<trollop>, ["~> 2.0"])
381
382
  s.add_development_dependency(%q<rspec>, ["~> 2.11.0"])
382
383
  s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
383
384
  s.add_development_dependency(%q<simplecov>, ["~> 0.6.4"])
@@ -389,6 +390,7 @@ Gem::Specification.new do |s|
389
390
  s.add_dependency(%q<nokogiri>, ["~> 1.5.5"])
390
391
  s.add_dependency(%q<colorize>, ["~> 0.5.8"])
391
392
  s.add_dependency(%q<anemone>, ["~> 0.7.2"])
393
+ s.add_dependency(%q<trollop>, ["~> 2.0"])
392
394
  s.add_dependency(%q<rspec>, ["~> 2.11.0"])
393
395
  s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
394
396
  s.add_dependency(%q<simplecov>, ["~> 0.6.4"])
@@ -401,6 +403,7 @@ Gem::Specification.new do |s|
401
403
  s.add_dependency(%q<nokogiri>, ["~> 1.5.5"])
402
404
  s.add_dependency(%q<colorize>, ["~> 0.5.8"])
403
405
  s.add_dependency(%q<anemone>, ["~> 0.7.2"])
406
+ s.add_dependency(%q<trollop>, ["~> 2.0"])
404
407
  s.add_dependency(%q<rspec>, ["~> 2.11.0"])
405
408
  s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
406
409
  s.add_dependency(%q<simplecov>, ["~> 0.6.4"])
@@ -10,7 +10,7 @@ describe LinkChecker do
10
10
  end
11
11
 
12
12
  it "finds all of the HTML files in the target path." do
13
- files = LinkChecker.new(@site_path).html_file_paths
13
+ files = LinkChecker.new(:target => @site_path).html_file_paths
14
14
  files.size.should == 3
15
15
  end
16
16
 
@@ -60,8 +60,8 @@ describe LinkChecker do
60
60
  end
61
61
 
62
62
  it "declares bad redirect targets to be bad." do
63
- FakeWeb.register_uri(:get, @redirect_uri.to_s,
64
- :location => @bad_uri.to_s, :status => ["302", "Moved"])
63
+ FakeWeb.register_uri(:get, @redirect_uri.to_s,
64
+ :location => @bad_uri.to_s, :status => ["302", "Moved"])
65
65
  result = LinkChecker.check_uri(@redirect_uri)
66
66
  result.class.should be LinkChecker::Error
67
67
  end
@@ -83,7 +83,7 @@ describe LinkChecker do
83
83
  LinkChecker::Good.new(:uri_string => 'http://something.com')
84
84
  end
85
85
  $stdout.should_receive(:puts).with(/Checked/i).once
86
- LinkChecker.new(@site_path).check_uris
86
+ LinkChecker.new(:target => @site_path).check_uris
87
87
  end
88
88
 
89
89
  it "prints red when the links are bad." do
@@ -96,7 +96,7 @@ describe LinkChecker do
96
96
  $stdout.should_receive(:puts).with(/Problem/i).once
97
97
  $stdout.should_receive(:puts).with(/Link/i).once
98
98
  $stdout.should_receive(:puts).with(/Response/i).once
99
- LinkChecker.new(@site_path).check_uris
99
+ LinkChecker.new(:target => @site_path).check_uris
100
100
  end
101
101
 
102
102
  it "prints yellow warnings when the links redirect." do
@@ -109,7 +109,20 @@ describe LinkChecker do
109
109
  $stdout.should_receive(:puts).with(/Checked/i).once
110
110
  $stdout.should_receive(:puts).with(/Warning/i).once
111
111
  $stdout.should_receive(:puts).with(/Redirected/i).once
112
- LinkChecker.new(@site_path).check_uris
112
+ LinkChecker.new(:target => @site_path).check_uris
113
+ end
114
+
115
+ it "does not print warnings when the links redirect with the --no-warnings option." do
116
+ LinkChecker.stub(:check_uri) do
117
+ LinkChecker::Redirect.new(
118
+ :uri_string => 'http://something.com',
119
+ :final_desination => 'http://something-else.com'
120
+ )
121
+ end
122
+ $stdout.should_receive(:puts).with(/Checked/i).once
123
+ $stdout.should_receive(:puts).with(/Warning/i).once
124
+ $stdout.should_receive(:puts).with(/Redirected/i).once
125
+ LinkChecker.new(:target => @site_path).check_uris
113
126
  end
114
127
 
115
128
  end
@@ -121,19 +134,36 @@ describe LinkChecker do
121
134
  $stdout.should_receive(:puts).with(/Problem/i).once
122
135
  $stdout.should_receive(:puts).with(/Link/i).once
123
136
  $stdout.should_receive(:puts).with(/Response/i).once
124
- thread = LinkChecker.new(@site_path).start_link_check_thread('<html></html>', 'source.html')
137
+ thread = LinkChecker.new(:target => @site_path).start_link_check_thread('<html></html>', 'source.html')
125
138
  thread.join
126
139
  end
127
140
 
128
141
  end
129
142
 
130
143
  it "crawls a web site." do
144
+ FakeWeb.register_uri(:any, 'http://some-target.com', :body => "Yay it worked.")
131
145
  LinkChecker.stub(:external_link_uri_strings).and_return(['http://something.com'])
132
146
  LinkChecker.stub(:check_uri) do
133
147
  LinkChecker::Good.new(:uri_string => 'http://something.com')
134
148
  end
135
149
  $stdout.should_receive(:puts).with(/Checked/i).once
136
- LinkChecker.new('http://pretty-sure-this-is-not-real.com').check_uris
150
+ LinkChecker.new(:target => 'http://some-target.com').check_uris
151
+ end
152
+
153
+ describe "produces useful return codes when" do
154
+
155
+ it "the target file does not exist." do
156
+ Find.stub(:find).and_raise(Errno::ENOENT.new('test'))
157
+ $stdout.should_receive(:puts).with(/Error/i).once
158
+ LinkChecker.new(:target => 'does-not-exist').check_uris
159
+ end
160
+
161
+ it "the target file does not exist." do
162
+ FakeWeb.allow_net_connect = false
163
+ $stdout.should_receive(:puts).with(/Error/i).once
164
+ LinkChecker.new(:target => 'http://does-not-exist.com').check_uris
165
+ end
166
+
137
167
  end
138
168
 
139
169
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: link-checker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-05 00:00:00.000000000 Z
12
+ date: 2012-10-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -59,6 +59,22 @@ dependencies:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: 0.7.2
62
+ - !ruby/object:Gem::Dependency
63
+ name: trollop
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '2.0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '2.0'
62
78
  - !ruby/object:Gem::Dependency
63
79
  name: rspec
64
80
  requirement: !ruby/object:Gem::Requirement
@@ -542,7 +558,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
542
558
  version: '0'
543
559
  segments:
544
560
  - 0
545
- hash: -623461632206689908
561
+ hash: 1966410350842699633
546
562
  required_rubygems_version: !ruby/object:Gem::Requirement
547
563
  none: false
548
564
  requirements: