ruby-link-checker 0.1.0 → 0.2.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.
@@ -9,7 +9,6 @@ module LinkChecker
9
9
  request = ::Net::HTTPGenericRequest.new(method, false, true, uri)
10
10
  request['User-Agent'] = checker.user_agent
11
11
  response = http.request(request)
12
- logger.debug "#{method} #{uri}: #{response.code}"
13
12
  result! Result.new(uri, method, original_uri, request, response, options)
14
13
  end
15
14
  end
@@ -28,7 +28,6 @@ module LinkChecker
28
28
  _queue_task(uri, method, original_uri || uri, options)
29
29
  elsif methods_left.any?
30
30
  @method = methods_left.shift
31
- @redirects = [uri]
32
31
  @uri = URI(@uri) unless @uri.is_a?(URI)
33
32
  _queue_task(uri, method, original_uri || uri, options)
34
33
  elsif @result && result.error?
@@ -72,9 +71,20 @@ module LinkChecker
72
71
  _handle_result ResultError.new(uri, method, original_uri, e, options)
73
72
  end
74
73
 
74
+ def _retries_left_s
75
+ return nil unless retry? && retries_left > 0
76
+
77
+ if retries_left == 1
78
+ '1 retry left'
79
+ else
80
+ "#{retries_left} retries left"
81
+ end
82
+ end
83
+
75
84
  def _handle_result(result)
76
85
  @result = result
77
- logger.info "#{' ' * (redirects.count - 1)}#{result}"
86
+ retry_text = " (#{_retries_left_s})" if retry? && (result.error? || result.failure?)
87
+ logger.info "#{' ' * (redirects.count - 1)}#{result}#{retry_text}"
78
88
  result! result
79
89
  if result.redirect?
80
90
  redirect! result
@@ -89,6 +99,7 @@ module LinkChecker
89
99
  elsif result.success?
90
100
  success! result
91
101
  else
102
+ @redirects = [uri]
92
103
  execute!
93
104
  end
94
105
  rescue StandardError => e
@@ -16,10 +16,8 @@ module LinkChecker
16
16
  )
17
17
  request.on_complete do |response|
18
18
  if response.timed_out?
19
- logger.debug "#{method} #{uri}: #{response.return_code}"
20
19
  result! ResultError.new(uri, method, original_uri, Timeout::Error.new, options)
21
20
  else
22
- logger.debug "#{method} #{uri}: #{response.code}"
23
21
  result! Result.new(uri, method, original_uri, request, response, options)
24
22
  end
25
23
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LinkChecker
4
- VERSION = '0.1.0'
4
+ VERSION = '0.2.0'
5
5
  end
Binary file
@@ -0,0 +1,108 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: head
5
+ uri: https://www.example.org/
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Ruby Link Checker/0.2.0
12
+ Expect:
13
+ - ''
14
+ response:
15
+ status:
16
+ code: 308
17
+ message: ''
18
+ headers:
19
+ server:
20
+ - CloudFront
21
+ date:
22
+ - Mon, 03 Apr 2023 00:01:15 GMT
23
+ content-length:
24
+ - '0'
25
+ location:
26
+ - https://www.dblock.org/
27
+ x-cache:
28
+ - FunctionGeneratedResponse from cloudfront
29
+ via:
30
+ - 1.1 49830f6fdfb2c3519e81248d6d19f450.cloudfront.net (CloudFront)
31
+ x-amz-cf-pop:
32
+ - EWR52-C4
33
+ x-amz-cf-id:
34
+ - BRpz7eXeEToGF8Ytac3rGh6DHQZLwnZBdNOxnDICSUPoHDN6wHDxWQ==
35
+ body:
36
+ encoding: UTF-8
37
+ string: ''
38
+ http_version: '2'
39
+ adapter_metadata:
40
+ effective_url: https://www.example.org/
41
+ recorded_at: Mon, 03 Apr 2023 00:01:15 GMT
42
+ - request:
43
+ method: head
44
+ uri: https://www.dblock.org/
45
+ body:
46
+ encoding: US-ASCII
47
+ string: ''
48
+ headers:
49
+ User-Agent:
50
+ - Ruby Link Checker/0.2.0
51
+ Expect:
52
+ - ''
53
+ response:
54
+ status:
55
+ code: 429
56
+ message: ''
57
+ headers:
58
+ server:
59
+ - nginx
60
+ date:
61
+ - Mon, 03 Apr 2023 00:01:15 GMT
62
+ content-type:
63
+ - text/html; charset=utf-8
64
+ vary:
65
+ - Accept-Encoding
66
+ - Accept
67
+ x-frame-options:
68
+ - SAMEORIGIN
69
+ x-xss-protection:
70
+ - '0'
71
+ x-content-type-options:
72
+ - nosniff
73
+ x-download-options:
74
+ - noopen
75
+ x-permitted-cross-domain-policies:
76
+ - none
77
+ referrer-policy:
78
+ - strict-origin-when-cross-origin
79
+ x-discourse-route:
80
+ - users/show
81
+ cache-control:
82
+ - no-cache, no-store
83
+ content-security-policy:
84
+ - upgrade-insecure-requests; base-uri 'self'; object-src 'none'; script-src
85
+ https://forum.opensearch.org/logs/ https://forum.opensearch.org/sidekiq/ https://forum.opensearch.org/mini-profiler-resources/
86
+ https://global.discourse-cdn.com/business5/assets/ https://global.discourse-cdn.com/business5/brotli_asset/
87
+ https://forum.opensearch.org/extra-locales/ https://sea1.discourse-cdn.com/business5/highlight-js/
88
+ https://sea1.discourse-cdn.com/business5/javascripts/ https://sea1.discourse-cdn.com/business5/plugins/
89
+ https://sea1.discourse-cdn.com/business5/theme-javascripts/ https://sea1.discourse-cdn.com/business5/svg-sprite/
90
+ 'sha256-Gty3/aPWFfSvz7pdT39HY97/+2opLup9V0L19ZF0IwY=' https://forum.opensearch.org/plugins/discourse-client-performance/javascripts/discourse-client-performance.js;
91
+ worker-src 'self' https://global.discourse-cdn.com/business5/assets/ https://global.discourse-cdn.com/business5/brotli_asset/
92
+ https://sea1.discourse-cdn.com/business5/javascripts/ https://sea1.discourse-cdn.com/business5/plugins/;
93
+ frame-ancestors 'self'; manifest-src 'self'
94
+ x-request-id:
95
+ - a54de95c-ab20-4f9a-81a0-93908fc94357
96
+ cdck-proxy-id:
97
+ - app-router-tiehunter03.sea1
98
+ - app-balancer-tieinterceptor1b.sea1
99
+ strict-transport-security:
100
+ - max-age=31536000
101
+ body:
102
+ encoding: UTF-8
103
+ string: ''
104
+ http_version: '2'
105
+ adapter_metadata:
106
+ effective_url: https://www.dblock.org/
107
+ recorded_at: Mon, 03 Apr 2023 00:01:15 GMT
108
+ recorded_with: VCR 6.1.0
@@ -240,6 +240,19 @@ shared_context 'a link checker' do
240
240
  end
241
241
  end
242
242
 
243
+ context 'a failed retry on a redirect', vcr: { cassette_name: '308+429', allow_playback_repeats: true } do
244
+ subject do
245
+ described_class.new(methods: %w[HEAD], retries: 2)
246
+ end
247
+
248
+ it 'calls redirect callback' do
249
+ expect(result.success?).to be false
250
+ expect(result.failure?).to be true
251
+ expect(result.error?).to be false
252
+ expect(result.error).not_to be_a LinkChecker::Errors::RedirectLoopError
253
+ end
254
+ end
255
+
243
256
  context 'an invalid URI' do
244
257
  let(:url) { '\/invalid-url' }
245
258
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-link-checker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Doubrovkine
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-02 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
14
  name: typhoeus
@@ -100,6 +100,7 @@ files:
100
100
  - spec/fixtures/301_301.yml
101
101
  - spec/fixtures/301_400_301_200.yml
102
102
  - spec/fixtures/301_403.yml
103
+ - spec/fixtures/308_429.yml
103
104
  - spec/fixtures/404.yml
104
105
  - spec/fixtures/404_200.yml
105
106
  - spec/fixtures/404_404.yml