utterson 0.2.1 → 0.3.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: e7eda8616bc21015460d88a5ca75b3f8c54b689a
4
- data.tar.gz: 6b9ed189552a7b77af5157254342261aa01923e3
2
+ SHA256:
3
+ metadata.gz: f068f678f7ad3eace6ba4083e1fab800e571165483fd366b80807620776063ed
4
+ data.tar.gz: d20d1495a36de95ae1212e11b18f06b926da37351ef72cf06fa6ccabb7ebf20f
5
5
  SHA512:
6
- metadata.gz: f5f6b9427c7df537f6bb1c6b1ce4603212a21a3c22fb2eb59180f71d0e35f9e6869c5b57584c9450053bac7de7e38c4dc72ded069bd86c67c7fb54ec7e493d9f
7
- data.tar.gz: feb9b8622a6e078d76e066561cf8f6768039e5b64cdb863f79fa7f3c21f73e08aec35f73ffd19f2fe1974388d4a622a7255d499333e2cec1ee2393bcb951af63
6
+ metadata.gz: 424f2cdbdfa9f56bbb92b64baff326b3722ca1ec8d6c97db0f176c70ad5066918696595364544f6cf283a616f38eabdb2d4a69d68beb5235eced8ed703727234
7
+ data.tar.gz: a5ee5b1682da10e1953f5de0addc9231179d3d00fc4fd5f9877b0352d2cd1615fcf91d73b87afa74081d47f4ee76e0a9866a66450c618de990f15603ad471ba1
data/README.md CHANGED
@@ -1,7 +1,8 @@
1
1
  Simple utility to traverse directory of html files and check links in them.
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/utterson.png)](http://badge.fury.io/rb/utterson)
4
- [![Build Status](https://travis-ci.org/iiska/utterson.png)](https://travis-ci.org/iiska/utterson) [![Dependency Status](https://gemnasium.com/iiska/utterson.png)](https://gemnasium.com/iiska/utterson)
4
+ [![Tests](https://github.com/iiska/utterson/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/iiska/utterson/actions/workflows/ci.yml)
5
+
5
6
 
6
7
  ## Getting started
7
8
 
data/bin/utterson CHANGED
@@ -2,10 +2,10 @@
2
2
 
3
3
  $:.unshift File.join(File.dirname(__FILE__), *%w{ .. lib })
4
4
 
5
- require 'trollop'
5
+ require 'optimist'
6
6
  require 'utterson'
7
7
 
8
- opts = Trollop::options do
8
+ opts = Optimist::options do
9
9
  opt :root, "Root directory for the site if it differs from target dir", type: :string
10
10
  end
11
11
 
data/lib/utterson/base.rb CHANGED
@@ -3,6 +3,8 @@ require 'ruby-progressbar'
3
3
  require 'utterson/html_check'
4
4
 
5
5
  module Utterson
6
+ # Base implements initialization of the checking process and handles
7
+ # outputting final results.
6
8
  class Base
7
9
  attr_reader :errors
8
10
 
@@ -45,7 +47,8 @@ module Utterson
45
47
  if count == 0
46
48
  puts "#{@stats[:files]} files with #{@stats[:urls]} urls checked."
47
49
  else
48
- puts "#{@stats[:files]} files with #{@stats[:urls]} urls checked and #{count} errors found."
50
+ puts "Q{#{@stats[:files]} files with #{@stats[:urls]} urls checked "+
51
+ "and #{count} errors found."
49
52
  end
50
53
  end
51
54
  end
@@ -5,6 +5,8 @@ require 'timeout'
5
5
  require 'thread'
6
6
 
7
7
  module Utterson
8
+ # Handle collecting URIs from HTML documents and both remote and
9
+ # local checking of them.
8
10
  class HtmlCheck
9
11
  attr_reader :errors
10
12
 
@@ -61,23 +63,18 @@ module Utterson
61
63
  end
62
64
 
63
65
  def check_remote_uri(url, file)
64
- begin
65
- uri = URI(url.gsub(/^\/\//, 'http://'))
66
- rescue URI::InvalidURIError => e
67
- return add_error(file, uri.to_s, e.message)
66
+ uri = URI(url.gsub(/^\/\//, 'http://'))
67
+
68
+ response = Net::HTTP.start(uri.host, uri.port,
69
+ :use_ssl => uri.scheme == 'https') do |http|
70
+ http.head uri.path.empty? ? "/" : uri.path
68
71
  end
69
- begin
70
- response = Net::HTTP.start(uri.host, uri.port,
71
- :use_ssl => uri.scheme == 'https') do |http|
72
- p = uri.path.empty? ? "/" : uri.path
73
- http.head(p)
74
- end
75
- if response.code =~ /^[^23]/
76
- add_error(file, uri.to_s, response)
77
- end
78
- rescue => e
79
- add_error(file, uri.to_s, e.message)
72
+ if response.code =~ /^[^23]/
73
+ add_error(file, uri.to_s, response)
80
74
  end
75
+
76
+ rescue => e
77
+ add_error(file, uri.to_s, e.message)
81
78
  end
82
79
 
83
80
  def check_local_uri(url, file)
@@ -87,7 +84,7 @@ module Utterson
87
84
  else
88
85
  path = File.expand_path(url, File.dirname(file))
89
86
  end
90
- add_error(file, url, "File not found") unless File.exists? path
87
+ add_error(file, url, "File not found") unless File.exist? path
91
88
  end
92
89
 
93
90
  def add_error(file, url, response)
@@ -1,3 +1,3 @@
1
1
  module Utterson
2
- VERSION = '0.2.1'
2
+ VERSION = '0.3.2'
3
3
  end
data/spec/spec_helper.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  require 'webmock/rspec'
4
4
 
5
5
  require 'simplecov'
6
+ SimpleCov.formatter = SimpleCov::Formatter::HTMLFormatter
6
7
  SimpleCov.start
7
8
 
8
9
  require 'utterson'
@@ -11,7 +11,7 @@ module Utterson
11
11
  "spec/fixtures/dir-structure/2.html",
12
12
  "spec/fixtures/dir-structure/a/3.htm",
13
13
  "spec/fixtures/dir-structure/a/b/4.html"].each do |file|
14
- HtmlCheck.should_receive(:new).with(file: file, root: dir)
14
+ expect(HtmlCheck).to receive(:new).with(file: file, root: dir)
15
15
  end
16
16
 
17
17
  u.check
@@ -23,7 +23,7 @@ module Utterson
23
23
  output = capture_stdout do
24
24
  u.check
25
25
  end
26
- output.should match(/4 files with 0 urls checked/)
26
+ expect(output).to match(/4 files with 0 urls checked/)
27
27
  end
28
28
 
29
29
  it "should output error information" do
@@ -34,11 +34,12 @@ module Utterson
34
34
  output = capture_stdout do
35
35
  u.check
36
36
  end
37
- output.should match("spec/fixtures/sample.html\n\tstyle.css\n\t\tFile not found")
38
- output.should match("script.js\n\t\tFile not found")
39
- output.should match("image.jpg\n\t\tFile not found")
40
- output.should match("http://example.com\n\t\tHTTP 404")
41
- output.should match("5 files with 4 urls checked and 4 errors found")
37
+ expect(output).to match("spec/fixtures/sample.html\n\tstyle.css\n"+
38
+ "\t\tFile not found")
39
+ expect(output).to match("script.js\n\t\tFile not found")
40
+ expect(output).to match("image.jpg\n\t\tFile not found")
41
+ expect(output).to match("http://example.com\n\t\tHTTP 404")
42
+ expect(output).to match("5 files with 4 urls checked and 4 errors found")
42
43
  end
43
44
  end
44
45
  end
@@ -18,10 +18,10 @@ module Utterson
18
18
  it "should find all uris from sample document" do
19
19
  h = HtmlCheck.new(file: sample_file)
20
20
  uris = h.collect_uris_from(sample_file)
21
- uris.should include("script.js")
22
- uris.should include("style.css")
23
- uris.should include("http://example.com")
24
- uris.should include("image.jpg")
21
+ expect(uris).to include("script.js")
22
+ expect(uris).to include("style.css")
23
+ expect(uris).to include("http://example.com")
24
+ expect(uris).to include("image.jpg")
25
25
  end
26
26
 
27
27
  describe "#check_uri" do
@@ -65,36 +65,36 @@ module Utterson
65
65
  end
66
66
  end
67
67
 
68
- describe "#check_local_uri" do
68
+ describe "#check_relative_uri" do
69
69
  let(:h) {HtmlCheck.new(root: "spec/fixtures/dir-structure")}
70
70
  let(:html_file) {"spec/fixtures/dir-structure/1.htm"}
71
71
 
72
72
  it "should not assign error info if file exists" do
73
73
  h.check_local_uri("../sample.html", html_file)
74
- h.errors.should be_empty
74
+ expect(h.errors).to be_empty
75
75
  end
76
76
 
77
77
  it "should assign error info if file doesn't exist" do
78
78
  url = "../sample_not_found.html"
79
79
  h.check_local_uri(url, html_file)
80
- h.errors[html_file].should == {url => "File not found"}
80
+ expect(h.errors[html_file]).to eq({url => "File not found"})
81
81
  end
82
82
 
83
83
  it "should use root directory when urls start with /" do
84
84
  h2 = HtmlCheck.new(file: html_file,
85
85
  root: "spec/fixtures")
86
86
  h2.check_local_uri("/sample.html", html_file)
87
- h2.errors.should be_empty
87
+ expect(h2.errors).to be_empty
88
88
  end
89
89
 
90
- it "should handle target directory as root for urls starting with / if root is no available" do
90
+ it "uses target directory as root if undefined when url starts with /" do
91
91
  h.check_local_uri("/2.html", html_file)
92
- h.errors.should be_empty
92
+ expect(h.errors).to be_empty
93
93
  end
94
94
 
95
95
  it "should ignore query string when checking local files" do
96
96
  h.check_local_uri("2.html?queryparam=value", html_file)
97
- h.errors.should be_empty
97
+ expect(h.errors).to be_empty
98
98
  end
99
99
  end
100
100
 
@@ -108,7 +108,7 @@ module Utterson
108
108
  with(:headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).
109
109
  to_return(:status => 200, :body => "", :headers => {})
110
110
  h.check_remote_uri(url, html_file)
111
- h.errors.should be_empty
111
+ expect(h.errors).to be_empty
112
112
  end
113
113
 
114
114
  it "should assign error info if there is error response" do
@@ -116,40 +116,38 @@ module Utterson
116
116
  with(:headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).
117
117
  to_return(:status => 404, :body => "", :headers => {})
118
118
  h.check_remote_uri(url, html_file)
119
- puts h.errors.inspect
120
- h.errors[html_file].should_not be_empty
121
- h.errors[html_file][url].instance_of?(Net::HTTPNotFound).should be_true
119
+ expect(h.errors[html_file]).not_to be_empty
120
+ expect(h.errors[html_file][url].instance_of?(Net::HTTPNotFound)).to be_truthy
122
121
  end
123
122
 
124
123
  it "should add error status from buffer timeouts" do
125
124
  stub_request(:head, url).to_timeout
126
125
  h.check_remote_uri(url, html_file)
127
- h.errors.should_not be_empty
126
+ expect(h.errors).not_to be_empty
128
127
  end
129
128
 
130
129
  it "should add error status from connection timeouts" do
131
130
  stub_request(:head, url).to_raise(Errno::ETIMEDOUT)
132
131
  h.check_remote_uri(url, html_file)
133
- h.errors.should_not be_empty
132
+ expect(h.errors).not_to be_empty
134
133
  end
135
134
 
136
135
  it "should add error status from 'No route to host' errors" do
137
136
  stub_request(:head, url).to_raise(Errno::EHOSTUNREACH)
138
137
  h.check_remote_uri(url, html_file)
139
- h.errors.should_not be_empty
138
+ expect(h.errors).not_to be_empty
140
139
  end
141
140
 
142
141
  it "shoud add error status from name resolution errors" do
143
142
  stub_request(:head, url).
144
143
  to_raise(SocketError.new('getaddrinfo: Name or service not known'))
145
144
  h.check_remote_uri(url, html_file)
146
- h.errors.should_not be_empty
145
+ expect(h.errors).not_to be_empty
147
146
  end
148
147
 
149
148
  it "shoud add error status when invalid URI" do
150
- URI.stub(:new).and_raise(URI::InvalidURIError)
151
- h.check_remote_uri("http://invalid_uri", html_file)
152
- h.errors.should_not be_empty
149
+ h.check_remote_uri(":", html_file)
150
+ expect(h.errors).not_to be_empty
153
151
  end
154
152
  end
155
153
  end
metadata CHANGED
@@ -1,113 +1,127 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: utterson
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juhamatti Niemelä
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-08 00:00:00.000000000 Z
11
+ date: 2023-04-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: trollop
14
+ name: optimist
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.0'
19
+ version: '3.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.0'
26
+ version: '3.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: nokogiri
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.6.0
33
+ version: 1.14.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.6.0
40
+ version: 1.14.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: ruby-progressbar
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.2.0
47
+ version: 1.13.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.2.0
54
+ version: 1.13.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '1.12'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '1.12'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rake
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - '>='
73
+ - - ">="
60
74
  - !ruby/object:Gem::Version
61
75
  version: '0'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - '>='
80
+ - - ">="
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rspec
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - '>='
87
+ - - ">="
74
88
  - !ruby/object:Gem::Version
75
89
  version: '0'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - '>='
94
+ - - ">="
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: simplecov
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - '>='
101
+ - - ">="
88
102
  - !ruby/object:Gem::Version
89
103
  version: '0'
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
- - - '>='
108
+ - - ">="
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: webmock
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
- - - ~>
115
+ - - "~>"
102
116
  - !ruby/object:Gem::Version
103
- version: 1.15.2
117
+ version: 3.18.0
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
- - - ~>
122
+ - - "~>"
109
123
  - !ruby/object:Gem::Version
110
- version: 1.15.2
124
+ version: 3.18.0
111
125
  description: Traverses all HTML files from given directory and checks links found
112
126
  in them.
113
127
  email: iiska@iki.fi
@@ -116,20 +130,20 @@ executables:
116
130
  extensions: []
117
131
  extra_rdoc_files: []
118
132
  files:
133
+ - README.md
119
134
  - bin/utterson
135
+ - lib/utterson.rb
136
+ - lib/utterson/base.rb
120
137
  - lib/utterson/html_check.rb
121
138
  - lib/utterson/version.rb
122
- - lib/utterson/base.rb
123
- - lib/utterson.rb
124
- - README.md
125
- - spec/utterson/base_spec.rb
126
- - spec/utterson/html_check_spec.rb
127
- - spec/spec_helper.rb
139
+ - spec/fixtures/dir-structure/1.htm
140
+ - spec/fixtures/dir-structure/2.html
128
141
  - spec/fixtures/dir-structure/a/3.htm
129
142
  - spec/fixtures/dir-structure/a/b/4.html
130
- - spec/fixtures/dir-structure/2.html
131
- - spec/fixtures/dir-structure/1.htm
132
143
  - spec/fixtures/sample.html
144
+ - spec/spec_helper.rb
145
+ - spec/utterson/base_spec.rb
146
+ - spec/utterson/html_check_spec.rb
133
147
  homepage: https://github.com/iiska/utterson
134
148
  licenses:
135
149
  - MIT
@@ -140,27 +154,25 @@ require_paths:
140
154
  - lib
141
155
  required_ruby_version: !ruby/object:Gem::Requirement
142
156
  requirements:
143
- - - '>='
157
+ - - ">="
144
158
  - !ruby/object:Gem::Version
145
- version: 1.9.3
159
+ version: 2.7.0
146
160
  required_rubygems_version: !ruby/object:Gem::Requirement
147
161
  requirements:
148
- - - '>='
162
+ - - ">="
149
163
  - !ruby/object:Gem::Version
150
164
  version: '0'
151
165
  requirements: []
152
- rubyforge_project:
153
- rubygems_version: 2.0.3
166
+ rubygems_version: 3.4.10
154
167
  signing_key:
155
168
  specification_version: 4
156
169
  summary: Friendly HTML crawler and url checker
157
170
  test_files:
158
- - spec/utterson/base_spec.rb
159
- - spec/utterson/html_check_spec.rb
160
- - spec/spec_helper.rb
171
+ - spec/fixtures/dir-structure/1.htm
172
+ - spec/fixtures/dir-structure/2.html
161
173
  - spec/fixtures/dir-structure/a/3.htm
162
174
  - spec/fixtures/dir-structure/a/b/4.html
163
- - spec/fixtures/dir-structure/2.html
164
- - spec/fixtures/dir-structure/1.htm
165
175
  - spec/fixtures/sample.html
166
- has_rdoc:
176
+ - spec/spec_helper.rb
177
+ - spec/utterson/base_spec.rb
178
+ - spec/utterson/html_check_spec.rb