link-checker 0.4.0 → 0.5.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/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: