ruby-link-checker 0.2.0 → 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.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +16 -0
  3. data/CONTRIBUTING.md +0 -0
  4. data/Dangerfile +2 -0
  5. data/Gemfile +2 -1
  6. data/Gemfile.lock +254 -82
  7. data/LICENSE.md +0 -0
  8. data/README.md +82 -3
  9. data/RELEASING.md +0 -0
  10. data/Rakefile +0 -0
  11. data/benchmarks/check.rb +27 -20
  12. data/benchmarks/data/opensearch.org/links.txt +0 -0
  13. data/benchmarks/data/opensearch.org/small.txt +0 -0
  14. data/coverage/assets/{0.12.3 → 0.13.2}/DataTables-1.10.20/images/sort_asc.png +0 -0
  15. data/coverage/assets/{0.12.3 → 0.13.2}/DataTables-1.10.20/images/sort_asc_disabled.png +0 -0
  16. data/coverage/assets/{0.12.3 → 0.13.2}/DataTables-1.10.20/images/sort_both.png +0 -0
  17. data/coverage/assets/{0.12.3 → 0.13.2}/DataTables-1.10.20/images/sort_desc.png +0 -0
  18. data/coverage/assets/{0.12.3 → 0.13.2}/DataTables-1.10.20/images/sort_desc_disabled.png +0 -0
  19. data/coverage/assets/0.13.2/application.css +1 -0
  20. data/coverage/assets/0.13.2/application.js +7 -0
  21. data/coverage/assets/{0.12.3 → 0.13.2}/colorbox/border.png +0 -0
  22. data/coverage/assets/{0.12.3 → 0.13.2}/colorbox/controls.png +0 -0
  23. data/coverage/assets/{0.12.3 → 0.13.2}/colorbox/loading.gif +0 -0
  24. data/coverage/assets/{0.12.3 → 0.13.2}/colorbox/loading_background.png +0 -0
  25. data/coverage/assets/{0.12.3 → 0.13.2}/favicon_green.png +0 -0
  26. data/coverage/assets/{0.12.3 → 0.13.2}/favicon_red.png +0 -0
  27. data/coverage/assets/{0.12.3 → 0.13.2}/favicon_yellow.png +0 -0
  28. data/coverage/assets/{0.12.3 → 0.13.2}/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  29. data/coverage/assets/{0.12.3 → 0.13.2}/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  30. data/coverage/assets/{0.12.3 → 0.13.2}/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  31. data/coverage/assets/{0.12.3 → 0.13.2}/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  32. data/coverage/assets/{0.12.3 → 0.13.2}/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  33. data/coverage/assets/{0.12.3 → 0.13.2}/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  34. data/coverage/assets/{0.12.3 → 0.13.2}/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  35. data/coverage/assets/{0.12.3 → 0.13.2}/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  36. data/coverage/assets/{0.12.3 → 0.13.2}/images/ui-icons_222222_256x240.png +0 -0
  37. data/coverage/assets/{0.12.3 → 0.13.2}/images/ui-icons_2e83ff_256x240.png +0 -0
  38. data/coverage/assets/{0.12.3 → 0.13.2}/images/ui-icons_454545_256x240.png +0 -0
  39. data/coverage/assets/{0.12.3 → 0.13.2}/images/ui-icons_888888_256x240.png +0 -0
  40. data/coverage/assets/{0.12.3 → 0.13.2}/images/ui-icons_cd0a0a_256x240.png +0 -0
  41. data/coverage/assets/{0.12.3 → 0.13.2}/loading.gif +0 -0
  42. data/coverage/assets/{0.12.3 → 0.13.2}/magnify.png +0 -0
  43. data/coverage/index.html +3068 -7196
  44. data/lib/ruby-link-checker/async/http/checker.rb +92 -0
  45. data/lib/ruby-link-checker/async/http/config.rb +35 -0
  46. data/lib/ruby-link-checker/async/http/result.rb +81 -0
  47. data/lib/ruby-link-checker/async/http.rb +3 -0
  48. data/lib/ruby-link-checker/callbacks.rb +2 -2
  49. data/lib/ruby-link-checker/checker.rb +0 -0
  50. data/lib/ruby-link-checker/config.rb +2 -0
  51. data/lib/ruby-link-checker/errors/base_error.rb +0 -0
  52. data/lib/ruby-link-checker/errors/redirect_loop_error.rb +0 -0
  53. data/lib/ruby-link-checker/errors.rb +0 -0
  54. data/lib/ruby-link-checker/logger.rb +0 -0
  55. data/lib/ruby-link-checker/net/http/checker.rb +2 -0
  56. data/lib/ruby-link-checker/net/http/config.rb +0 -0
  57. data/lib/ruby-link-checker/net/http/result.rb +0 -0
  58. data/lib/ruby-link-checker/net/http.rb +0 -0
  59. data/lib/ruby-link-checker/result.rb +1 -1
  60. data/lib/ruby-link-checker/task.rb +0 -0
  61. data/lib/ruby-link-checker/tasks.rb +4 -2
  62. data/lib/ruby-link-checker/typhoeus/hydra/checker.rb +2 -1
  63. data/lib/ruby-link-checker/typhoeus/hydra/config.rb +0 -0
  64. data/lib/ruby-link-checker/typhoeus/hydra/result.rb +0 -0
  65. data/lib/ruby-link-checker/typhoeus/hydra.rb +0 -0
  66. data/lib/ruby-link-checker/version.rb +1 -1
  67. data/lib/ruby-link-checker.rb +1 -0
  68. data/lib/ruby_link_checker.rb +0 -0
  69. data/ruby-link-checker.gemspec +2 -1
  70. data/spec/fixtures/200.yml +0 -0
  71. data/spec/fixtures/301_200.yml +0 -0
  72. data/spec/fixtures/301_301.yml +0 -0
  73. data/spec/fixtures/301_400_301_200.yml +0 -0
  74. data/spec/fixtures/301_403.yml +0 -0
  75. data/spec/fixtures/308_429.yml +0 -0
  76. data/spec/fixtures/404.yml +0 -0
  77. data/spec/fixtures/404_200.yml +0 -0
  78. data/spec/fixtures/404_404.yml +0 -0
  79. data/spec/fixtures/429_200.yml +0 -0
  80. data/spec/fixtures/429_429_200.yml +0 -0
  81. data/spec/ruby-link-checker/async/http/checker_spec.rb +99 -0
  82. data/spec/ruby-link-checker/callbacks_spec.rb +33 -0
  83. data/spec/ruby-link-checker/checker_spec.rb +0 -0
  84. data/spec/ruby-link-checker/config_spec.rb +0 -0
  85. data/spec/ruby-link-checker/errors/redirect_loop_error_spec.rb +18 -0
  86. data/spec/ruby-link-checker/net/http/checker_spec.rb +18 -1
  87. data/spec/ruby-link-checker/result_error_spec.rb +17 -0
  88. data/spec/ruby-link-checker/result_spec.rb +41 -0
  89. data/spec/ruby-link-checker/task_spec.rb +20 -0
  90. data/spec/ruby-link-checker/tasks_spec.rb +47 -0
  91. data/spec/ruby-link-checker/typhoeus/hydra/checker_spec.rb +29 -3
  92. data/spec/ruby-link-checker/version_spec.rb +0 -0
  93. data/spec/spec_helper.rb +3 -1
  94. data/spec/support/config.rb +0 -0
  95. data/spec/support/link_checker.rb +34 -0
  96. data/spec/support/vcr.rb +0 -0
  97. data/spec/support/with_result.rb +0 -0
  98. data/spec/support/with_url.rb +0 -0
  99. metadata +57 -38
  100. data/coverage/assets/0.12.3/application.css +0 -1
  101. data/coverage/assets/0.12.3/application.js +0 -7
  102. data/pkg/ruby-link-checker-0.1.0.gem +0 -0
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe LinkChecker::Task do
6
+ subject(:task) do
7
+ described_class.new(
8
+ LinkChecker::Net::HTTP::Checker.new,
9
+ 'https://www.example.org',
10
+ 'GET',
11
+ 'https://www.example.org'
12
+ )
13
+ end
14
+
15
+ describe '#run!' do
16
+ it 'raises NotImplementedError' do
17
+ expect { task.run! }.to raise_error NotImplementedError
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe LinkChecker::Tasks do
6
+ describe '#_handle_result' do
7
+ # Reproduces issue #12: SystemStackError when logging causes repeated errors
8
+ # https://github.com/dblock/ruby-link-checker/issues/12
9
+ context 'when logger.info raises an error repeatedly' do
10
+ let(:checker) { LinkChecker::Net::HTTP::Checker.new(methods: ['GET']) }
11
+ let(:task_klass) { LinkChecker::Net::HTTP::Task }
12
+ let(:url) { 'https://www.example.org' }
13
+
14
+ before do
15
+ stub_request(:get, url).to_return(status: 200, body: '', headers: {})
16
+ end
17
+
18
+ it 'does not cause infinite recursion leading to SystemStackError' do
19
+ tasks = described_class.new(checker, task_klass, url, ['GET'])
20
+
21
+ # Stub logger to always raise an error on info, simulating the scenario
22
+ # from issue #12 where logging causes a stack overflow due to the
23
+ # rescue block in _handle_result recursively calling itself
24
+ allow(tasks).to receive(:logger).and_return(
25
+ instance_double(LinkChecker::Logger).tap do |logger|
26
+ allow(logger).to receive(:info).and_raise(StandardError, 'stack level too deep')
27
+ allow(logger).to receive(:error)
28
+ end
29
+ )
30
+
31
+ # Should not raise SystemStackError - the error should be handled gracefully
32
+ expect { tasks.execute! }.not_to raise_error
33
+ end
34
+ end
35
+ end
36
+
37
+ describe '#retries' do
38
+ let(:checker) { LinkChecker::Net::HTTP::Checker.new(methods: ['GET'], retries: 2) }
39
+ let(:task_klass) { LinkChecker::Net::HTTP::Task }
40
+ let(:url) { 'https://www.example.org' }
41
+
42
+ it 'delegates to the checker' do
43
+ tasks = described_class.new(checker, task_klass, url, ['GET'])
44
+ expect(tasks.send(:retries)).to eq 2
45
+ end
46
+ end
47
+ end
@@ -3,7 +3,7 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe LinkChecker::Typhoeus::Hydra::Checker do
6
- module TestLinkChecker
6
+ module TyphoeusTestLinkChecker
7
7
  class Task < LinkChecker::Typhoeus::Hydra::Task; end
8
8
 
9
9
  class LinkChecker < LinkChecker::Typhoeus::Hydra::Checker
@@ -19,9 +19,15 @@ describe LinkChecker::Typhoeus::Hydra::Checker do
19
19
  end
20
20
  end
21
21
 
22
- describe TestLinkChecker::LinkChecker do
22
+ describe TyphoeusTestLinkChecker::LinkChecker do
23
23
  it_behaves_like 'a link checker'
24
24
 
25
+ describe '.config' do
26
+ it 'returns the Config module' do
27
+ expect(LinkChecker::Typhoeus::Hydra.config).to eq LinkChecker::Typhoeus::Hydra::Config
28
+ end
29
+ end
30
+
25
31
  context 'with timeout options', vcr: { cassette_name: '200' } do
26
32
  before do
27
33
  LinkChecker::Typhoeus::Hydra.configure do |config|
@@ -51,7 +57,7 @@ describe LinkChecker::Typhoeus::Hydra::Checker do
51
57
  it 'times out' do
52
58
  expect(result.success?).to be false
53
59
  expect(result.error?).to be true
54
- expect(result.to_s).to eq 'GET https://www.example.org: ERROR (Timeout::Error)'
60
+ expect(result.to_s).to eq 'GET https://www.example.org : ERROR (Timeout::Error)'
55
61
  end
56
62
 
57
63
  context 'with metadata' do
@@ -64,4 +70,24 @@ describe LinkChecker::Typhoeus::Hydra::Checker do
64
70
  end
65
71
  end
66
72
  end
73
+
74
+ describe LinkChecker::Typhoeus::Hydra::Result do
75
+ describe '#code' do
76
+ it 'returns -1 when the response raises' do
77
+ request = instance_double(Typhoeus::Request)
78
+ response = instance_double(Typhoeus::Response)
79
+ allow(response).to receive(:code).and_raise(StandardError)
80
+ result = described_class.new(URI('https://www.example.org'), 'GET', nil, request, response, {})
81
+ expect(result.code).to eq(-1)
82
+ end
83
+ end
84
+ end
85
+
86
+ describe '#run' do
87
+ it 'delegates to the hydra' do
88
+ checker = described_class.new
89
+ expect(checker.instance_variable_get(:@hydra)).to receive(:run)
90
+ checker.run
91
+ end
92
+ end
67
93
  end
File without changes
data/spec/spec_helper.rb CHANGED
@@ -5,7 +5,9 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
5
  require 'rubygems'
6
6
 
7
7
  require 'simplecov'
8
- SimpleCov.start
8
+ SimpleCov.start do
9
+ add_filter '/spec/'
10
+ end
9
11
 
10
12
  require 'rspec'
11
13
  require 'ruby-link-checker'
File without changes
@@ -1,4 +1,18 @@
1
1
  shared_context 'a link checker' do
2
+ context 'default' do
3
+ subject do
4
+ described_class.new
5
+ end
6
+
7
+ it 'has a default user-agent' do
8
+ expect(subject.user_agent).to eq "Ruby Link Checker/#{LinkChecker::VERSION}"
9
+ end
10
+
11
+ it 'has no default headers' do
12
+ expect(subject.headers).to eq({})
13
+ end
14
+ end
15
+
2
16
  context 'user-agent' do
3
17
  subject do
4
18
  described_class.new(user_agent: 'user/agent')
@@ -9,6 +23,16 @@ shared_context 'a link checker' do
9
23
  end
10
24
  end
11
25
 
26
+ context 'headers' do
27
+ subject do
28
+ described_class.new(headers: { 'DNT' => '1' })
29
+ end
30
+
31
+ it 'updates headers' do
32
+ expect(subject.headers).to eq('DNT' => '1')
33
+ end
34
+ end
35
+
12
36
  context 'check' do
13
37
  let(:url) { 'https://www.example.org' }
14
38
 
@@ -94,6 +118,16 @@ shared_context 'a link checker' do
94
118
  expect(result.options).to eq({})
95
119
  end
96
120
 
121
+ context 'with custom headers' do
122
+ subject do
123
+ described_class.new(methods: ['GET'], headers: { 'DNT' => '1' })
124
+ end
125
+
126
+ it 'sends custom headers' do
127
+ expect(result.request_headers['DNT']).to eq '1'
128
+ end
129
+ end
130
+
97
131
  it 'returns results' do
98
132
  expect(subject.results).to eq(
99
133
  error: [],
data/spec/support/vcr.rb CHANGED
File without changes
File without changes
File without changes
metadata CHANGED
@@ -1,15 +1,28 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-link-checker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Doubrovkine
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2023-04-03 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: async-http
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :development
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
13
26
  - !ruby/object:Gem::Dependency
14
27
  name: typhoeus
15
28
  requirement: !ruby/object:Gem::Requirement
@@ -24,7 +37,6 @@ dependencies:
24
37
  - - ">="
25
38
  - !ruby/object:Gem::Version
26
39
  version: '0'
27
- description:
28
40
  email: dblock@dblock.org
29
41
  executables: []
30
42
  extensions: []
@@ -42,37 +54,41 @@ files:
42
54
  - benchmarks/check.rb
43
55
  - benchmarks/data/opensearch.org/links.txt
44
56
  - benchmarks/data/opensearch.org/small.txt
45
- - coverage/assets/0.12.3/DataTables-1.10.20/images/sort_asc.png
46
- - coverage/assets/0.12.3/DataTables-1.10.20/images/sort_asc_disabled.png
47
- - coverage/assets/0.12.3/DataTables-1.10.20/images/sort_both.png
48
- - coverage/assets/0.12.3/DataTables-1.10.20/images/sort_desc.png
49
- - coverage/assets/0.12.3/DataTables-1.10.20/images/sort_desc_disabled.png
50
- - coverage/assets/0.12.3/application.css
51
- - coverage/assets/0.12.3/application.js
52
- - coverage/assets/0.12.3/colorbox/border.png
53
- - coverage/assets/0.12.3/colorbox/controls.png
54
- - coverage/assets/0.12.3/colorbox/loading.gif
55
- - coverage/assets/0.12.3/colorbox/loading_background.png
56
- - coverage/assets/0.12.3/favicon_green.png
57
- - coverage/assets/0.12.3/favicon_red.png
58
- - coverage/assets/0.12.3/favicon_yellow.png
59
- - coverage/assets/0.12.3/images/ui-bg_flat_0_aaaaaa_40x100.png
60
- - coverage/assets/0.12.3/images/ui-bg_flat_75_ffffff_40x100.png
61
- - coverage/assets/0.12.3/images/ui-bg_glass_55_fbf9ee_1x400.png
62
- - coverage/assets/0.12.3/images/ui-bg_glass_65_ffffff_1x400.png
63
- - coverage/assets/0.12.3/images/ui-bg_glass_75_dadada_1x400.png
64
- - coverage/assets/0.12.3/images/ui-bg_glass_75_e6e6e6_1x400.png
65
- - coverage/assets/0.12.3/images/ui-bg_glass_95_fef1ec_1x400.png
66
- - coverage/assets/0.12.3/images/ui-bg_highlight-soft_75_cccccc_1x100.png
67
- - coverage/assets/0.12.3/images/ui-icons_222222_256x240.png
68
- - coverage/assets/0.12.3/images/ui-icons_2e83ff_256x240.png
69
- - coverage/assets/0.12.3/images/ui-icons_454545_256x240.png
70
- - coverage/assets/0.12.3/images/ui-icons_888888_256x240.png
71
- - coverage/assets/0.12.3/images/ui-icons_cd0a0a_256x240.png
72
- - coverage/assets/0.12.3/loading.gif
73
- - coverage/assets/0.12.3/magnify.png
57
+ - coverage/assets/0.13.2/DataTables-1.10.20/images/sort_asc.png
58
+ - coverage/assets/0.13.2/DataTables-1.10.20/images/sort_asc_disabled.png
59
+ - coverage/assets/0.13.2/DataTables-1.10.20/images/sort_both.png
60
+ - coverage/assets/0.13.2/DataTables-1.10.20/images/sort_desc.png
61
+ - coverage/assets/0.13.2/DataTables-1.10.20/images/sort_desc_disabled.png
62
+ - coverage/assets/0.13.2/application.css
63
+ - coverage/assets/0.13.2/application.js
64
+ - coverage/assets/0.13.2/colorbox/border.png
65
+ - coverage/assets/0.13.2/colorbox/controls.png
66
+ - coverage/assets/0.13.2/colorbox/loading.gif
67
+ - coverage/assets/0.13.2/colorbox/loading_background.png
68
+ - coverage/assets/0.13.2/favicon_green.png
69
+ - coverage/assets/0.13.2/favicon_red.png
70
+ - coverage/assets/0.13.2/favicon_yellow.png
71
+ - coverage/assets/0.13.2/images/ui-bg_flat_0_aaaaaa_40x100.png
72
+ - coverage/assets/0.13.2/images/ui-bg_flat_75_ffffff_40x100.png
73
+ - coverage/assets/0.13.2/images/ui-bg_glass_55_fbf9ee_1x400.png
74
+ - coverage/assets/0.13.2/images/ui-bg_glass_65_ffffff_1x400.png
75
+ - coverage/assets/0.13.2/images/ui-bg_glass_75_dadada_1x400.png
76
+ - coverage/assets/0.13.2/images/ui-bg_glass_75_e6e6e6_1x400.png
77
+ - coverage/assets/0.13.2/images/ui-bg_glass_95_fef1ec_1x400.png
78
+ - coverage/assets/0.13.2/images/ui-bg_highlight-soft_75_cccccc_1x100.png
79
+ - coverage/assets/0.13.2/images/ui-icons_222222_256x240.png
80
+ - coverage/assets/0.13.2/images/ui-icons_2e83ff_256x240.png
81
+ - coverage/assets/0.13.2/images/ui-icons_454545_256x240.png
82
+ - coverage/assets/0.13.2/images/ui-icons_888888_256x240.png
83
+ - coverage/assets/0.13.2/images/ui-icons_cd0a0a_256x240.png
84
+ - coverage/assets/0.13.2/loading.gif
85
+ - coverage/assets/0.13.2/magnify.png
74
86
  - coverage/index.html
75
87
  - lib/ruby-link-checker.rb
88
+ - lib/ruby-link-checker/async/http.rb
89
+ - lib/ruby-link-checker/async/http/checker.rb
90
+ - lib/ruby-link-checker/async/http/config.rb
91
+ - lib/ruby-link-checker/async/http/result.rb
76
92
  - lib/ruby-link-checker/callbacks.rb
77
93
  - lib/ruby-link-checker/checker.rb
78
94
  - lib/ruby-link-checker/config.rb
@@ -93,7 +109,6 @@ files:
93
109
  - lib/ruby-link-checker/typhoeus/hydra/result.rb
94
110
  - lib/ruby-link-checker/version.rb
95
111
  - lib/ruby_link_checker.rb
96
- - pkg/ruby-link-checker-0.1.0.gem
97
112
  - ruby-link-checker.gemspec
98
113
  - spec/fixtures/200.yml
99
114
  - spec/fixtures/301_200.yml
@@ -106,10 +121,16 @@ files:
106
121
  - spec/fixtures/404_404.yml
107
122
  - spec/fixtures/429_200.yml
108
123
  - spec/fixtures/429_429_200.yml
124
+ - spec/ruby-link-checker/async/http/checker_spec.rb
109
125
  - spec/ruby-link-checker/callbacks_spec.rb
110
126
  - spec/ruby-link-checker/checker_spec.rb
111
127
  - spec/ruby-link-checker/config_spec.rb
128
+ - spec/ruby-link-checker/errors/redirect_loop_error_spec.rb
112
129
  - spec/ruby-link-checker/net/http/checker_spec.rb
130
+ - spec/ruby-link-checker/result_error_spec.rb
131
+ - spec/ruby-link-checker/result_spec.rb
132
+ - spec/ruby-link-checker/task_spec.rb
133
+ - spec/ruby-link-checker/tasks_spec.rb
113
134
  - spec/ruby-link-checker/typhoeus/hydra/checker_spec.rb
114
135
  - spec/ruby-link-checker/version_spec.rb
115
136
  - spec/spec_helper.rb
@@ -123,7 +144,6 @@ licenses:
123
144
  - MIT
124
145
  metadata:
125
146
  rubygems_mfa_required: 'true'
126
- post_install_message:
127
147
  rdoc_options: []
128
148
  require_paths:
129
149
  - lib
@@ -131,15 +151,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
131
151
  requirements:
132
152
  - - ">="
133
153
  - !ruby/object:Gem::Version
134
- version: '2.7'
154
+ version: '3.3'
135
155
  required_rubygems_version: !ruby/object:Gem::Requirement
136
156
  requirements:
137
157
  - - ">="
138
158
  - !ruby/object:Gem::Version
139
159
  version: 1.3.6
140
160
  requirements: []
141
- rubygems_version: 3.1.6
142
- signing_key:
161
+ rubygems_version: 3.6.9
143
162
  specification_version: 4
144
163
  summary: Fast ruby link checker.
145
164
  test_files: []
@@ -1 +0,0 @@
1
- html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,code,del,dfn,em,img,q,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,dialog,figure,footer,header,hgroup,nav,section{margin:0;padding:0;border:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline}article,aside,dialog,figure,footer,header,hgroup,nav,section{display:block}body{line-height:1.5}table{border-collapse:separate;border-spacing:0}caption,th,td{text-align:left;font-weight:normal}table,td,th{vertical-align:middle}blockquote:before,blockquote:after,q:before,q:after{content:""}blockquote,q{quotes:"" ""}a img{border:0}html{font-size:100.01%}body{font-size:82%;color:#222;background:#fff;font-family:"Helvetica Neue",Arial,Helvetica,sans-serif}h1,h2,h3,h4,h5,h6{font-weight:normal;color:#111}h1{font-size:3em;line-height:1;margin-bottom:.5em}h2{font-size:2em;margin-bottom:.75em}h3{font-size:1.5em;line-height:1;margin-bottom:1em}h4{font-size:1.2em;line-height:1.25;margin-bottom:1.25em}h5{font-size:1em;font-weight:bold;margin-bottom:1.5em}h6{font-size:1em;font-weight:bold}h1 img,h2 img,h3 img,h4 img,h5 img,h6 img{margin:0}p{margin:0 0 1.5em}p img.left{float:left;margin:1.5em 1.5em 1.5em 0;padding:0}p img.right{float:right;margin:1.5em 0 1.5em 1.5em}a:focus,a:hover{color:#000}a{color:#009;text-decoration:underline}blockquote{margin:1.5em;color:#666;font-style:italic}strong{font-weight:bold}em,dfn{font-style:italic}dfn{font-weight:bold}sup,sub{line-height:0}abbr,acronym{border-bottom:1px dotted #666}address{margin:0 0 1.5em;font-style:italic}del{color:#666}pre{margin:1.5em 0;white-space:pre}pre,code,tt{font:1em 'andale mono','lucida console',monospace;line-height:1.5}li ul,li ol{margin:0}ul,ol{margin:0 1.5em 1.5em 0;padding-left:3.333em}ul{list-style-type:disc}ol{list-style-type:decimal}dl{margin:0 0 1.5em 0}dl dt{font-weight:bold}dd{margin-left:1.5em}table{margin-bottom:1.4em;width:100%}th{font-weight:bold}thead th{background:#c3d9ff}th,td,caption{padding:4px 10px 4px 5px}tr.even td{background:#efefef}tfoot{font-style:italic}caption{background:#eee}.small{font-size:.8em;margin-bottom:1.875em;line-height:1.875em}.large{font-size:1.2em;line-height:2.5em;margin-bottom:1.25em}.hide{display:none}.quiet{color:#666}.loud{color:#000}.highlight{background:#ff0}.added{background:#060;color:#fff}.removed{background:#900;color:#fff}.first{margin-left:0;padding-left:0}.last{margin-right:0;padding-right:0}.top{margin-top:0;padding-top:0}.bottom{margin-bottom:0;padding-bottom:0}label{font-weight:bold}fieldset{padding:1.4em;margin:0 0 1.5em 0;border:1px solid #ccc}legend{font-weight:bold;font-size:1.2em}input[type=text],input[type=password],input.text,input.title,textarea,select{background-color:#fff;border:1px solid #bbb}input[type=text]:focus,input[type=password]:focus,input.text:focus,input.title:focus,textarea:focus,select:focus{border-color:#666}input[type=text],input[type=password],input.text,input.title,textarea,select{margin:.5em 0}input.text,input.title{width:300px;padding:5px}input.title{font-size:1.5em}textarea{width:390px;height:250px;padding:5px}input[type=checkbox],input[type=radio],input.checkbox,input.radio{position:relative;top:.25em}form.inline{line-height:3}form.inline p{margin-bottom:0}.error,.notice,.success{padding:.8em;margin-bottom:1em;border:2px solid #ddd}.error{background:#fbe3e4;color:#8a1f11;border-color:#fbc2c4}.notice{background:#fff6bf;color:#514721;border-color:#ffd324}.success{background:#e6efc2;color:#264409;border-color:#c6d880}.error a{color:#8a1f11}.notice a{color:#514721}.success a{color:#264409}.box{padding:1.5em;margin-bottom:1.5em;background:#e5ecf9}hr{background:#ddd;color:#ddd;clear:both;float:none;width:100%;height:.1em;margin:0 0 1.45em;border:0}hr.space{background:#fff;color:#fff;visibility:hidden}.clearfix:after,.container:after{content:"\0020";display:block;height:0;clear:both;visibility:hidden;overflow:hidden}.clearfix,.container{display:block}.clear{clear:both}table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px 18px;border-bottom:1px solid #111}table.dataTable thead th:active,table.dataTable thead td:active{outline:0}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;*cursor:hand;background-repeat:no-repeat;background-position:center right}table.dataTable thead .sorting{background-image:url("DataTables-1.10.20/images/sort_both.png")}table.dataTable thead .sorting_asc{background-image:url("DataTables-1.10.20/images/sort_asc.png")}table.dataTable thead .sorting_desc{background-image:url("DataTables-1.10.20/images/sort_desc.png")}table.dataTable thead .sorting_asc_disabled{background-image:url("DataTables-1.10.20/images/sort_asc_disabled.png")}table.dataTable thead .sorting_desc_disabled{background-image:url("DataTables-1.10.20/images/sort_desc_disabled.png")}table.dataTable tbody tr{background-color:#fff}table.dataTable tbody tr.selected{background-color:#b0bed9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:0}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:0}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#acbad4}table.dataTable.hover tbody tr:hover,table.dataTable.display tbody tr:hover{background-color:#f6f6f6}table.dataTable.hover tbody tr:hover.selected,table.dataTable.display tbody tr:hover.selected{background-color:#aab7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad5}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:whitesmoke}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:4px 17px 4px 4px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:4px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent;border-radius:2px}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #979797;background-color:white;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,white),color-stop(100%,#dcdcdc));background:-webkit-linear-gradient(top,white 0,#dcdcdc 100%);background:-moz-linear-gradient(top,white 0,#dcdcdc 100%);background:-ms-linear-gradient(top,white 0,#dcdcdc 100%);background:-o-linear-gradient(top,white 0,#dcdcdc 100%);background:linear-gradient(to bottom,white 0,#dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#585858),color-stop(100%,#111));background:-webkit-linear-gradient(top,#585858 0,#111 100%);background:-moz-linear-gradient(top,#585858 0,#111 100%);background:-ms-linear-gradient(top,#585858 0,#111 100%);background:-o-linear-gradient(top,#585858 0,#111 100%);background:linear-gradient(to bottom,#585858 0,#111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:0;background-color:#2b2b2b;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#2b2b2b),color-stop(100%,#0c0c0c));background:-webkit-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:-moz-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:-ms-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:-o-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:linear-gradient(to bottom,#2b2b2b 0,#0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,0)),color-stop(25%,rgba(255,255,255,0.9)),color-stop(75%,rgba(255,255,255,0.9)),color-stop(100%,rgba(255,255,255,0)));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable,.dataTables_wrapper.no-footer div.dataTables_scrollBody>table{border-bottom:0}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width:767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:.5em}}@media screen and (max-width:640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:.5em}}pre .comment,pre .template_comment,pre .diff .header,pre .javadoc{color:#998;font-style:italic}pre .keyword,pre .css .rule .keyword,pre .winutils,pre .javascript .title,pre .lisp .title{color:#000;font-weight:bold}pre .number,pre .hexcolor{color:#458}pre .string,pre .tag .value,pre .phpdoc,pre .tex .formula{color:#d14}pre .subst{color:#712}pre .constant,pre .title,pre .id{color:#900;font-weight:bold}pre .javascript .title,pre .lisp .title,pre .subst{font-weight:normal}pre .class .title,pre .haskell .label,pre .tex .command{color:#458;font-weight:bold}pre .tag,pre .tag .title,pre .rules .property,pre .django .tag .keyword{color:navy;font-weight:normal}pre .attribute,pre .variable,pre .instancevar,pre .lisp .body{color:teal}pre .regexp{color:#009926}pre .class{color:#458;font-weight:bold}pre .symbol,pre .ruby .symbol .string,pre .ruby .symbol .keyword,pre .ruby .symbol .keymethods,pre .lisp .keyword,pre .tex .special,pre .input_number{color:#990073}pre .builtin,pre .built_in,pre .lisp .title{color:#0086b3}pre .preprocessor,pre .pi,pre .doctype,pre .shebang,pre .cdata{color:#999;font-weight:bold}pre .deletion{background:#fdd}pre .addition{background:#dfd}pre .diff .change{background:#0086b3}pre .chunk{color:#aaa}pre .tex .formula{opacity:.5}.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{position:absolute;left:-99999999px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}.ui-helper-clearfix{display:inline-block}/*\*/* html .ui-helper-clearfix{height:1%}.ui-helper-clearfix{display:block}/**/.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-state-disabled{cursor:default !important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-widget :active{outline:0}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-icon{width:16px;height:16px;background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-off{background-position:-96px -144px}.ui-icon-radio-on{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px}.ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px}.ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-corner-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px}.ui-corner-bottom{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-corner-right{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-corner-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.ui-corner-all{-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30);-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}#colorbox,#cboxOverlay,#cboxWrapper{position:absolute;top:0;left:0;z-index:9999;overflow:hidden}#cboxOverlay{position:fixed;width:100%;height:100%}#cboxMiddleLeft,#cboxBottomLeft{clear:left}#cboxContent{position:relative}#cboxLoadedContent{overflow:auto}#cboxTitle{margin:0}#cboxLoadingOverlay,#cboxLoadingGraphic{position:absolute;top:0;left:0;width:100%;height:100%}#cboxPrevious,#cboxNext,#cboxClose,#cboxSlideshow{cursor:pointer}.cboxPhoto{float:left;margin:auto;border:0;display:block;max-width:none}.cboxIframe{width:100%;height:100%;display:block;border:0}#colorbox,#cboxContent,#cboxLoadedContent{box-sizing:content-box}#cboxOverlay{background:#000}#cboxTopLeft{width:14px;height:14px;background:url(colorbox/controls.png) no-repeat 0 0}#cboxTopCenter{height:14px;background:url(colorbox/border.png) repeat-x top left}#cboxTopRight{width:14px;height:14px;background:url(colorbox/controls.png) no-repeat -36px 0}#cboxBottomLeft{width:14px;height:43px;background:url(colorbox/controls.png) no-repeat 0 -32px}#cboxBottomCenter{height:43px;background:url(colorbox/border.png) repeat-x bottom left}#cboxBottomRight{width:14px;height:43px;background:url(colorbox/controls.png) no-repeat -36px -32px}#cboxMiddleLeft{width:14px;background:url(colorbox/controls.png) repeat-y -175px 0}#cboxMiddleRight{width:14px;background:url(colorbox/controls.png) repeat-y -211px 0}#cboxContent{background:#fff;overflow:visible}.cboxIframe{background:#fff}#cboxError{padding:50px;border:1px solid #ccc}#cboxLoadedContent{margin-bottom:5px}#cboxLoadingOverlay{background:url(colorbox/loading_background.png) no-repeat center center}#cboxLoadingGraphic{background:url(colorbox/loading.gif) no-repeat center center}#cboxTitle{position:absolute;bottom:-25px;left:0;text-align:center;width:100%;font-weight:bold;color:#7c7c7c}#cboxCurrent{position:absolute;bottom:-25px;left:58px;font-weight:bold;color:#7c7c7c}#cboxPrevious,#cboxNext,#cboxClose,#cboxSlideshow{position:absolute;bottom:-29px;background:url(colorbox/controls.png) no-repeat 0 0;width:23px;height:23px;text-indent:-9999px}#cboxPrevious{left:0;background-position:-51px -25px}#cboxPrevious:hover{background-position:-51px 0}#cboxNext{left:27px;background-position:-75px -25px}#cboxNext:hover{background-position:-75px 0}#cboxClose{right:0;background-position:-100px -25px}#cboxClose:hover{background-position:-100px 0}.cboxSlideshow_on #cboxSlideshow{background-position:-125px 0;right:27px}.cboxSlideshow_on #cboxSlideshow:hover{background-position:-150px 0}.cboxSlideshow_off #cboxSlideshow{background-position:-150px -25px;right:27px}.cboxSlideshow_off #cboxSlideshow:hover{background-position:-125px 0}#loading{position:fixed;left:40%;top:50%}a{color:#333;text-decoration:none}a:hover{color:#000;text-decoration:underline}body{font-family:"Lucida Grande",Helvetica,"Helvetica Neue",Arial,sans-serif;padding:12px;background-color:#333}h1,h2,h3,h4{color:#1c2324;margin:0;padding:0;margin-bottom:12px}table{width:100%}#content{clear:left;background-color:white;border:2px solid #ddd;border-top:8px solid #ddd;padding:18px;-webkit-border-bottom-left-radius:5px;-webkit-border-bottom-right-radius:5px;-webkit-border-top-right-radius:5px;-moz-border-radius-bottomleft:5px;-moz-border-radius-bottomright:5px;-moz-border-radius-topright:5px;border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-top-right-radius:5px}.dataTables_filter,.dataTables_info{padding:2px 6px}abbr.timeago{text-decoration:none;border:0;font-weight:bold}.timestamp{float:right;color:#ddd}.group_tabs{list-style:none;float:left;margin:0;padding:0}.group_tabs li{display:inline;float:left}.group_tabs li a{font-family:Helvetica,Arial,sans-serif;display:block;float:left;text-decoration:none;padding:4px 8px;background-color:#aaa;background:-webkit-gradient(linear,0 0,0 bottom,from(#ddd),to(#aaa));background:-moz-linear-gradient(#ddd,#aaa);background:linear-gradient(#ddd,#aaa);text-shadow:#e5e5e5 1px 1px 0;border-bottom:0;color:#333;font-weight:bold;margin-right:8px;border-top:1px solid #efefef;-webkit-border-top-left-radius:2px;-webkit-border-top-right-radius:2px;-moz-border-radius-topleft:2px;-moz-border-radius-topright:2px;border-top-left-radius:2px;border-top-right-radius:2px}.group_tabs li a:hover{background-color:#ccc;background:-webkit-gradient(linear,0 0,0 bottom,from(#eee),to(#aaa));background:-moz-linear-gradient(#eee,#aaa);background:linear-gradient(#eee,#aaa)}.group_tabs li a:active{padding-top:5px;padding-bottom:3px}.group_tabs li.active a{color:black;text-shadow:#fff 1px 1px 0;background-color:#ddd;background:-webkit-gradient(linear,0 0,0 bottom,from(white),to(#ddd));background:-moz-linear-gradient(white,#ddd);background:linear-gradient(white,#ddd)}.file_list{margin-bottom:18px}.file_list--responsive{overflow-x:auto;overflow-y:hidden}a.src_link{background:url("./magnify.png") no-repeat left 50%;padding-left:18px}tr,td{margin:0;padding:0}th{white-space:nowrap}th.ui-state-default{cursor:pointer}th span.ui-icon{float:left}td{padding:4px 8px}td.strong{font-weight:bold}.cell--number{text-align:right}.source_table h3,.source_table h4{padding:0;margin:0;margin-bottom:4px}.source_table .header{padding:10px}.source_table pre{margin:0;padding:0;white-space:normal;color:#000;font-family:"Monaco","Inconsolata","Consolas",monospace}.source_table code{color:#000;font-family:"Monaco","Inconsolata","Consolas",monospace}.source_table pre{background-color:#333}.source_table pre ol{margin:0;padding:0;margin-left:45px;font-size:12px;color:white}.source_table pre li{margin:0;padding:2px 6px;border-left:5px solid white}.source_table pre li code{white-space:pre;white-space:pre-wrap}.source_table pre .hits{float:right;margin-left:10px;padding:2px 4px;background-color:#444;background:-webkit-gradient(linear,0 0,0 bottom,from(#222),to(#666));background:-moz-linear-gradient(#222,#666);background:linear-gradient(#222,#666);color:white;font-family:Helvetica,"Helvetica Neue",Arial,sans-serif;font-size:10px;font-weight:bold;text-align:center;border-radius:6px}#footer{color:#ddd;font-size:12px;font-weight:bold;margin-top:12px;text-align:right}#footer a{color:#eee;text-decoration:underline}#footer a:hover{color:#fff;text-decoration:none}.green{color:#090}.red{color:#900}.yellow{color:#da0}.blue{color:blue}thead th{background:white}.source_table .covered{border-color:#090}.source_table .missed{border-color:#900}.source_table .never{border-color:black}.source_table .skipped{border-color:#fc0}.source_table .missed-branch{border-color:#bf0000}.source_table .covered:nth-child(odd){background-color:#cdf2cd}.source_table .covered:nth-child(even){background-color:#dbf2db}.source_table .missed:nth-child(odd){background-color:#f7c0c0}.source_table .missed:nth-child(even){background-color:#f7cfcf}.source_table .never:nth-child(odd){background-color:#efefef}.source_table .never:nth-child(even){background-color:#f4f4f4}.source_table .skipped:nth-child(odd){background-color:#fbf0c0}.source_table .skipped:nth-child(even){background-color:#fbffcf}.source_table .missed-branch:nth-child(odd){background-color:#cc8e8e}.source_table .missed-branch:nth-child(even){background-color:#cc6e6e}