link-checker 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.0
1
+ 0.5.0
@@ -5,6 +5,7 @@ require 'trollop'
5
5
 
6
6
  options = Trollop::options do
7
7
  opt :no_warnings, "Don't warn about redirects to valid links"
8
+ opt :warnings_are_errors, "Treat any warning as an error and produce an error return code"
8
9
  end
9
10
 
10
11
  exit LinkChecker.new(:options => options, :target => ARGV[0]).check_uris
@@ -43,7 +43,6 @@ class LinkChecker
43
43
  when Net::HTTPRedirection then
44
44
  return self.check_uri(URI(response['location']), true)
45
45
  else
46
- @return_code = 1
47
46
  return Error.new(:uri_string => uri.to_s, :response => response)
48
47
  end
49
48
  end
@@ -89,9 +88,10 @@ class LinkChecker
89
88
  begin
90
89
  uri = URI(uri_string)
91
90
  response = self.class.check_uri(uri)
92
- { :uri_string => uri_string, :response => response }
91
+ response.uri_string = uri_string
92
+ response
93
93
  rescue => error
94
- { :uri_string => uri_string, :response => Error.new(:error => error.to_s) }
94
+ Error.new(:error => error.to_s, :uri_string => uri_string)
95
95
  end
96
96
  end
97
97
  report_results(source_name, results)
@@ -99,10 +99,16 @@ class LinkChecker
99
99
  end
100
100
 
101
101
  def report_results(file, results)
102
- bad_checks = results.select{|result| result[:response].class.eql? Error}
103
- warnings = results.select{|result| result[:response].class.eql? Redirect}
102
+ errors = results.select{|result| result.class.eql? Error}
103
+ warnings = results.select{|result| result.class.eql? Redirect}
104
+ @return_code = 1 unless errors.empty?
105
+ if @options[:warnings_are_errors]
106
+ @return_code = 1 unless warnings.empty?
107
+ errors = errors + warnings
108
+ warnings = []
109
+ end
104
110
  Thread.exclusive do
105
- if bad_checks.empty?
111
+ if errors.empty?
106
112
  message = "Checked: #{file}"
107
113
  if warnings.empty? || @options[:no_warnings]
108
114
  puts message.green
@@ -111,22 +117,27 @@ class LinkChecker
111
117
  end
112
118
  unless @options[:no_warnings]
113
119
  warnings.each do |warning|
114
- puts " Warning: #{warning[:uri_string]}".yellow
115
- puts " Redirected to: #{warning[:response].final_destination_uri_string}".yellow
120
+ puts " Warning: #{warning.uri_string}".yellow
121
+ puts " Redirected to: #{warning.final_destination_uri_string}".yellow
116
122
  end
117
123
  end
118
124
  else
119
125
  puts "Problem: #{file}".red
120
- bad_checks.each do |check|
121
- puts " Link: #{check[:uri_string]}".red
122
- puts " Response: #{check[:response].error.to_s}".red
126
+ errors.each do |error|
127
+ puts " Link: #{error.uri_string}".red
128
+ case error
129
+ when Redirect
130
+ puts " Redirected to: #{error.final_destination_uri_string}".red
131
+ when Error
132
+ puts " Response: #{error.error.to_s}".red
133
+ end
123
134
  end
124
135
  end
125
136
  end
126
137
  end
127
138
 
128
139
  class Result
129
- attr_reader :uri_string
140
+ attr_accessor :uri_string
130
141
  def initialize(params)
131
142
  @uri_string = params[:uri_string]
132
143
  end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "link-checker"
8
- s.version = "0.4.0"
8
+ s.version = "0.5.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"]
@@ -75,7 +75,8 @@ describe LinkChecker do
75
75
  before(:each) do
76
76
  LinkChecker.any_instance.stub(:html_file_paths) {
77
77
  ['spec/test-site/public/blog/2012/10/02/a-list-of-links/index.html'] }
78
- LinkChecker.stub(:external_link_uri_strings).and_return(['http://something.com'])
78
+ LinkChecker.stub(:external_link_uri_strings).and_return(
79
+ ['http://something.com', 'http://something-else.com'])
79
80
  end
80
81
 
81
82
  it "prints green when the links are good." do
@@ -83,7 +84,7 @@ describe LinkChecker do
83
84
  LinkChecker::Good.new(:uri_string => 'http://something.com')
84
85
  end
85
86
  $stdout.should_receive(:puts).with(/Checked/i).once
86
- LinkChecker.new(:target => @site_path).check_uris
87
+ LinkChecker.new(:target => @site_path).check_uris.should == 0 # Return value: good
87
88
  end
88
89
 
89
90
  it "prints red when the links are bad." do
@@ -94,9 +95,9 @@ describe LinkChecker do
94
95
  )
95
96
  end
96
97
  $stdout.should_receive(:puts).with(/Problem/i).once
97
- $stdout.should_receive(:puts).with(/Link/i).once
98
- $stdout.should_receive(:puts).with(/Response/i).once
99
- LinkChecker.new(:target => @site_path).check_uris
98
+ $stdout.should_receive(:puts).with(/Link/i).twice
99
+ $stdout.should_receive(:puts).with(/Response/i).twice
100
+ LinkChecker.new(:target => @site_path).check_uris.should == 1 # Return value: error
100
101
  end
101
102
 
102
103
  it "prints yellow warnings when the links redirect." do
@@ -107,22 +108,38 @@ describe LinkChecker do
107
108
  )
108
109
  end
109
110
  $stdout.should_receive(:puts).with(/Checked/i).once
110
- $stdout.should_receive(:puts).with(/Warning/i).once
111
- $stdout.should_receive(:puts).with(/Redirected/i).once
112
- LinkChecker.new(:target => @site_path).check_uris
111
+ $stdout.should_receive(:puts).with(/Warning/i).twice
112
+ $stdout.should_receive(:puts).with(/Redirected/i).twice
113
+ LinkChecker.new(:target => @site_path).check_uris.should == 0 # Return value: good
114
+ end
115
+
116
+ it "prints errors when there are warnings with the --warnings_are_errors option." do
117
+ LinkChecker.stub(:check_uri) do
118
+ LinkChecker::Redirect.new(
119
+ :uri_string => 'http://something.com',
120
+ :final_destination_uri_string => 'http://something-else.com'
121
+ )
122
+ end
123
+ $stdout.should_receive(:puts).with(/Problem/i).once
124
+ $stdout.should_receive(:puts).with(/Link/i).twice
125
+ $stdout.should_receive(:puts).with(/Redirected/i).twice
126
+ LinkChecker.new(
127
+ :target => @site_path,
128
+ :options => { :warnings_are_errors => true }
129
+ ).check_uris.should == 1 # Return value: error
113
130
  end
114
131
 
115
132
  it "does not print warnings when the links redirect with the --no-warnings option." do
116
133
  LinkChecker.stub(:check_uri) do
117
134
  LinkChecker::Redirect.new(
118
135
  :uri_string => 'http://something.com',
119
- :final_desination => 'http://something-else.com'
136
+ :final_destination_uri_string => 'http://something-else.com'
120
137
  )
121
138
  end
122
139
  $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
140
+ $stdout.should_receive(:puts).with(/Warning/i).twice
141
+ $stdout.should_receive(:puts).with(/Redirected/i).twice
142
+ LinkChecker.new(:target => @site_path).check_uris.should == 0 # Return value: good
126
143
  end
127
144
 
128
145
  end
@@ -130,10 +147,11 @@ describe LinkChecker do
130
147
  describe "prints output for invalid links and" do
131
148
 
132
149
  it "declares them to be bad." do
133
- LinkChecker.stub(:external_link_uri_strings).and_return(['hQQp://!!!.com'])
150
+ LinkChecker.stub(:external_link_uri_strings).and_return(
151
+ ['hQQp://!!!.com', 'hOOp://???.com'])
134
152
  $stdout.should_receive(:puts).with(/Problem/i).once
135
- $stdout.should_receive(:puts).with(/Link/i).once
136
- $stdout.should_receive(:puts).with(/Response/i).once
153
+ $stdout.should_receive(:puts).with(/Link/i).twice
154
+ $stdout.should_receive(:puts).with(/Response/i).twice
137
155
  thread = LinkChecker.new(:target => @site_path).start_link_check_thread('<html></html>', 'source.html')
138
156
  thread.join
139
157
  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.4.0
4
+ version: 0.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -558,7 +558,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
558
558
  version: '0'
559
559
  segments:
560
560
  - 0
561
- hash: 1966410350842699633
561
+ hash: -2838258292777551333
562
562
  required_rubygems_version: !ruby/object:Gem::Requirement
563
563
  none: false
564
564
  requirements: