site-inspector 1.0.2 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +8 -0
  3. data/.rubocop.yml +42 -0
  4. data/.rubocop_todo.yml +139 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +9 -0
  7. data/Gemfile +7 -0
  8. data/Guardfile +10 -0
  9. data/README.md +189 -0
  10. data/Rakefile +10 -0
  11. data/bin/site-inspector +50 -22
  12. data/lib/cliver/dependency_ext.rb +24 -0
  13. data/lib/site-inspector.rb +62 -615
  14. data/lib/site-inspector/cache.rb +10 -51
  15. data/lib/site-inspector/checks/accessibility.rb +135 -0
  16. data/lib/site-inspector/checks/check.rb +54 -0
  17. data/lib/site-inspector/checks/content.rb +85 -0
  18. data/lib/site-inspector/checks/cookies.rb +45 -0
  19. data/lib/site-inspector/checks/dns.rb +138 -0
  20. data/lib/site-inspector/checks/headers.rb +68 -0
  21. data/lib/site-inspector/checks/hsts.rb +81 -0
  22. data/lib/site-inspector/checks/https.rb +40 -0
  23. data/lib/site-inspector/checks/sniffer.rb +67 -0
  24. data/lib/site-inspector/checks/wappalyzer.rb +62 -0
  25. data/lib/site-inspector/checks/whois.rb +36 -0
  26. data/lib/site-inspector/disk_cache.rb +42 -0
  27. data/lib/site-inspector/domain.rb +271 -0
  28. data/lib/site-inspector/endpoint.rb +217 -0
  29. data/lib/site-inspector/rails_cache.rb +13 -0
  30. data/lib/site-inspector/version.rb +5 -0
  31. data/package-lock.json +505 -0
  32. data/package.json +23 -0
  33. data/script/bootstrap +2 -0
  34. data/script/cibuild +11 -0
  35. data/script/console +3 -0
  36. data/script/pa11y-version +10 -0
  37. data/script/release +38 -0
  38. data/site-inspector.gemspec +42 -0
  39. data/spec/checks/site_inspector_endpoint_accessibility_spec.rb +84 -0
  40. data/spec/checks/site_inspector_endpoint_check_spec.rb +42 -0
  41. data/spec/checks/site_inspector_endpoint_content_spec.rb +117 -0
  42. data/spec/checks/site_inspector_endpoint_cookies_spec.rb +73 -0
  43. data/spec/checks/site_inspector_endpoint_dns_spec.rb +184 -0
  44. data/spec/checks/site_inspector_endpoint_headers_spec.rb +65 -0
  45. data/spec/checks/site_inspector_endpoint_hsts_spec.rb +92 -0
  46. data/spec/checks/site_inspector_endpoint_https_spec.rb +49 -0
  47. data/spec/checks/site_inspector_endpoint_sniffer_spec.rb +150 -0
  48. data/spec/checks/site_inspector_endpoint_wappalyzer_spec.rb +34 -0
  49. data/spec/checks/site_inspector_endpoint_whois_spec.rb +26 -0
  50. data/spec/fixtures/wappalyzer.json +125 -0
  51. data/spec/site_inspector_cache_spec.rb +15 -0
  52. data/spec/site_inspector_disk_cache_spec.rb +39 -0
  53. data/spec/site_inspector_domain_spec.rb +271 -0
  54. data/spec/site_inspector_endpoint_spec.rb +252 -0
  55. data/spec/site_inspector_spec.rb +48 -0
  56. data/spec/spec_helper.rb +19 -0
  57. metadata +204 -63
  58. data/lib/site-inspector/compliance.rb +0 -19
  59. data/lib/site-inspector/dns.rb +0 -92
  60. data/lib/site-inspector/headers.rb +0 -59
  61. data/lib/site-inspector/sniffer.rb +0 -26
@@ -0,0 +1,252 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe SiteInspector::Endpoint do
6
+ subject { described_class.new('http://example.com') }
7
+
8
+ it 'downcases the host' do
9
+ endpoint = described_class.new('http://EXAMPLE.com')
10
+ expect(endpoint.host).to eql('example.com')
11
+ end
12
+
13
+ it 'strips www from the host' do
14
+ endpoint = described_class.new('http://www.example.com')
15
+ expect(endpoint.host).to eql('example.com')
16
+ end
17
+
18
+ it 'returns the uri' do
19
+ expect(subject.uri.to_s).to eql('http://example.com/')
20
+ end
21
+
22
+ it 'knows if an endpoint is www' do
23
+ expect(subject.www?).to be(false)
24
+ expect(subject.root?).to be(true)
25
+
26
+ endpoint = described_class.new('http://www.example.com')
27
+ expect(endpoint.www?).to be(true)
28
+ expect(endpoint.root?).to be(false)
29
+ end
30
+
31
+ it 'knows if an endpoint is http' do
32
+ stub_request(:head, 'http://example.com/')
33
+ .to_return(status: 200, body: 'content')
34
+
35
+ stub_request(:head, 'https://example.com/')
36
+ .to_return(status: 500, body: 'content')
37
+
38
+ expect(subject.https?).to be(false)
39
+ expect(subject.http?).to be(true)
40
+ end
41
+
42
+ it 'knows if an endpoint is https' do
43
+ stub_request(:head, 'http://example.com/')
44
+ .to_return(status: 200, body: 'content')
45
+
46
+ stub_request(:head, 'https://example.com/')
47
+ .to_return(status: 200, body: 'content')
48
+
49
+ endpoint = described_class.new('https://example.com')
50
+ expect(endpoint.https?).to be(true)
51
+ expect(endpoint.http?).to be(false)
52
+ end
53
+
54
+ it 'knows the scheme' do
55
+ expect(subject.scheme).to eql('http')
56
+
57
+ endpoint = described_class.new('https://example.com')
58
+ expect(endpoint.scheme).to eql('https')
59
+ end
60
+
61
+ context 'requests' do
62
+ it 'requests a URL' do
63
+ stub = stub_request(:head, 'http://example.com/')
64
+ .to_return(status: 200, body: 'content')
65
+
66
+ expect(subject.request.body).to eql('content')
67
+ expect(stub).to have_been_requested
68
+ end
69
+
70
+ it 'requests a requested path' do
71
+ stub = stub_request(:head, 'http://example.com/foo')
72
+ .to_return(status: 200, body: 'content')
73
+
74
+ expect(subject.request(path: 'foo').body).to eql('content')
75
+ expect(stub).to have_been_requested
76
+ end
77
+
78
+ it 'requests with typhoeus options' do
79
+ stub_request(:head, 'http://example.com/')
80
+ .to_return(status: 301, headers: { location: 'http://example.com/foo' })
81
+
82
+ response = subject.request(followlocation: true)
83
+ expect(response.request.options[:followlocation]).to be(true)
84
+ end
85
+
86
+ it 'returns the response' do
87
+ stub = stub_request(:head, 'http://example.com/')
88
+ .to_return(status: 200, body: 'content')
89
+
90
+ expect(subject.response.body).to eql('content')
91
+ expect(subject.response.body).to eql('content')
92
+ expect(stub).to have_been_requested.once
93
+ end
94
+
95
+ it "knows if there's a response" do
96
+ stub_request(:head, 'http://example.com/')
97
+ .to_return(status: 200, body: 'content')
98
+
99
+ expect(subject.responds?).to be(true)
100
+ end
101
+
102
+ it "knows when there's not a response" do
103
+ allow(subject).to receive(:response) { Typhoeus::Response.new(code: 0) }
104
+ expect(subject.responds?).to be(false)
105
+
106
+ allow(subject).to receive(:response) { Typhoeus::Response.new(return_code: :operation_timedout) }
107
+ expect(subject.responds?).to be(false)
108
+ end
109
+
110
+ it 'knows the response code' do
111
+ stub_request(:head, 'http://example.com/')
112
+ .to_return(status: 200)
113
+
114
+ expect(subject.response_code).to eql('200')
115
+ end
116
+
117
+ it 'knows if a response has timed out' do
118
+ allow(subject).to receive(:response) { Typhoeus::Response.new(return_code: :operation_timedout) }
119
+ expect(subject.timed_out?).to be(true)
120
+ end
121
+
122
+ it 'considers a 200 response code to be live and a response' do
123
+ stub_request(:head, 'http://example.com/')
124
+ .to_return(status: 200)
125
+
126
+ expect(subject.up?).to be(true)
127
+ expect(subject.responds?).to be(true)
128
+ end
129
+
130
+ it 'considers a 301 response code to be live and a response' do
131
+ stub_request(:head, 'http://example.com/')
132
+ .to_return(status: 301)
133
+
134
+ expect(subject.up?).to be(true)
135
+ expect(subject.responds?).to be(true)
136
+ end
137
+
138
+ it 'considers a 404 response code to be down but a response' do
139
+ stub_request(:head, 'http://example.com/')
140
+ .to_return(status: 404)
141
+
142
+ expect(subject.up?).to be(false)
143
+ expect(subject.responds?).to be(true)
144
+ end
145
+
146
+ it 'considers a 500 response code to be down but a response' do
147
+ stub_request(:head, 'http://example.com/')
148
+ .to_return(status: 500)
149
+
150
+ expect(subject.up?).to be(false)
151
+ expect(subject.responds?).to be(true)
152
+ end
153
+
154
+ it 'considers a 0 response code (error) to down and unresponsive' do
155
+ allow(subject).to receive(:response) { Typhoeus::Response.new(code: 0) }
156
+
157
+ expect(subject.up?).to be(false)
158
+ expect(subject.responds?).to be(false)
159
+ end
160
+
161
+ it 'considers a timeout to be down and unresponsive' do
162
+ allow(subject).to receive(:response) { Typhoeus::Response.new(return_code: :operation_timedout) }
163
+
164
+ expect(subject.up?).to be(false)
165
+ expect(subject.responds?).to be(false)
166
+ end
167
+ end
168
+
169
+ context 'redirects' do
170
+ it "knows when there's a redirect" do
171
+ stub_request(:head, 'http://example.com/')
172
+ .to_return(status: 301, headers: { location: 'http://www.example.com' })
173
+
174
+ expect(subject.redirect?).to be(true)
175
+ end
176
+
177
+ it 'returns the redirect' do
178
+ stub_request(:head, 'http://example.com/')
179
+ .to_return(status: 301, headers: { location: 'http://www.example.com' })
180
+
181
+ stub_request(:head, 'http://www.example.com/')
182
+ .to_return(status: 200)
183
+
184
+ expect(subject.redirect.uri.to_s).to eql('http://www.example.com/')
185
+ end
186
+
187
+ it 'handles relative redirects' do
188
+ stub_request(:head, 'http://example.com/')
189
+ .to_return(status: 301, headers: { location: '/foo' })
190
+
191
+ expect(subject.redirect?).to be(false)
192
+ end
193
+
194
+ it 'handles relative redirects without a leading slash' do
195
+ stub_request(:head, 'http://example.com/')
196
+ .to_return(status: 301, headers: { location: 'foo' })
197
+
198
+ expect(subject.redirect?).to be(false)
199
+ end
200
+
201
+ it 'knows what it resolves to' do
202
+ stub_request(:head, 'http://example.com/')
203
+ .to_return(status: 301, headers: { location: 'http://www.example.com' })
204
+
205
+ stub_request(:head, 'http://www.example.com/')
206
+ .to_return(status: 200)
207
+
208
+ expect(subject.redirect?).to be(true)
209
+ expect(subject.resolves_to.uri.to_s).to eql('http://www.example.com/')
210
+ end
211
+
212
+ it 'detects external redirects' do
213
+ stub_request(:head, 'http://example.com/')
214
+ .to_return(status: 301, headers: { location: 'http://www.example.gov' })
215
+
216
+ stub_request(:head, 'http://www.example.gov')
217
+ .to_return(status: 200)
218
+
219
+ expect(subject.redirect?).to be(true)
220
+ expect(subject.external_redirect?).to be(true)
221
+ end
222
+
223
+ it 'knows internal redirects are not external redirects' do
224
+ stub_request(:head, 'http://example.com/')
225
+ .to_return(status: 301, headers: { location: 'https://example.com' })
226
+
227
+ stub_request(:head, 'https://example.com/')
228
+ .to_return(status: 200)
229
+
230
+ expect(subject.external_redirect?).to be(false)
231
+ end
232
+ end
233
+
234
+ context 'checks' do
235
+ it 'identifies checks' do
236
+ expected = 9
237
+ pa11y = SiteInspector::Endpoint::Accessibility.pa11y?
238
+ expected -= 1 unless pa11y
239
+ expect(described_class.checks.count).to eql(expected)
240
+ end
241
+
242
+ described_class.checks.each do |check|
243
+ it "responds to the #{check} check" do
244
+ stub_request(:head, 'http://example.com/')
245
+ .to_return(status: 200)
246
+
247
+ expect(subject.send(check.name)).not_to be_nil
248
+ expect(subject.send(check.name).class).to eql(check)
249
+ end
250
+ end
251
+ end
252
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe SiteInspector do
6
+ before do
7
+ described_class.instance_variable_set('@cache', nil)
8
+ described_class.instance_variable_set('@timeout', nil)
9
+ end
10
+
11
+ it 'defaults to ephemeral cache' do
12
+ with_env 'CACHE', nil do
13
+ expect(described_class.cache.class).to be(SiteInspector::Cache)
14
+ end
15
+ end
16
+
17
+ it 'uses disk cache when requested' do
18
+ with_env 'CACHE', '/tmp' do
19
+ expect(described_class.cache.class).to be(SiteInspector::DiskCache)
20
+ end
21
+ end
22
+
23
+ it 'returns the default timeout' do
24
+ expect(described_class.timeout).to be(10)
25
+ end
26
+
27
+ it 'honors custom timeouts' do
28
+ described_class.timeout = 20
29
+ expect(described_class.timeout).to be(20)
30
+ end
31
+
32
+ it 'returns a domain when inspecting' do
33
+ expect(described_class.inspect('example.com').class).to be(SiteInspector::Domain)
34
+ end
35
+
36
+ it 'returns the typhoeus defaults' do
37
+ expected = {
38
+ accept_encoding: 'gzip',
39
+ followlocation: false,
40
+ method: :head,
41
+ timeout: 10,
42
+ headers: {
43
+ 'User-Agent' => "Mozilla/5.0 (compatible; SiteInspector/#{SiteInspector::VERSION}; +https://github.com/benbalter/site-inspector)"
44
+ }
45
+ }
46
+ expect(described_class.typhoeus_defaults).to eql(expected)
47
+ end
48
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/setup'
4
+ require 'webmock/rspec'
5
+ require 'fileutils'
6
+ require_relative '../lib/site-inspector'
7
+
8
+ WebMock.disable_net_connect!
9
+
10
+ def with_env(key, value)
11
+ old_env = ENV[key]
12
+ ENV[key] = value
13
+ yield
14
+ ENV[key] = old_env
15
+ end
16
+
17
+ def tmpdir
18
+ File.expand_path '../tmp', File.dirname(__FILE__)
19
+ end
metadata CHANGED
@@ -1,239 +1,315 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: site-inspector
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Balter
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-01 00:00:00.000000000 Z
11
+ date: 2020-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: nokogiri
14
+ name: cliver
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.6'
19
+ version: '0.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: '1.6'
26
+ version: '0.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: public_suffix
28
+ name: colorator
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.4'
33
+ version: '1.1'
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.4'
40
+ version: '1.1'
41
41
  - !ruby/object:Gem::Dependency
42
- name: gman
42
+ name: dnsruby
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '4.1'
47
+ version: '1.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: '4.1'
54
+ version: '1.0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: dnsruby
56
+ name: dotenv
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '1.56'
61
+ version: '2.0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '1.56'
68
+ version: '2.0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: sniffles
70
+ name: gman
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.2'
75
+ version: '7.0'
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: 7.0.4
76
79
  type: :runtime
77
80
  prerelease: false
78
81
  version_requirements: !ruby/object:Gem::Requirement
79
82
  requirements:
80
83
  - - "~>"
81
84
  - !ruby/object:Gem::Version
82
- version: '0.2'
85
+ version: '7.0'
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 7.0.4
83
89
  - !ruby/object:Gem::Dependency
84
- name: typhoeus
90
+ name: mercenary
85
91
  requirement: !ruby/object:Gem::Requirement
86
92
  requirements:
87
93
  - - "~>"
88
94
  - !ruby/object:Gem::Version
89
- version: '0.6'
95
+ version: '0.0'
90
96
  type: :runtime
91
97
  prerelease: false
92
98
  version_requirements: !ruby/object:Gem::Requirement
93
99
  requirements:
94
100
  - - "~>"
95
101
  - !ruby/object:Gem::Version
96
- version: '0.6'
102
+ version: '0.0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: nokogiri
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '1.0'
110
+ type: :runtime
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '1.0'
97
117
  - !ruby/object:Gem::Dependency
98
118
  name: oj
99
119
  requirement: !ruby/object:Gem::Requirement
100
120
  requirements:
101
121
  - - "~>"
102
122
  - !ruby/object:Gem::Version
103
- version: '2.11'
123
+ version: '3.0'
104
124
  type: :runtime
105
125
  prerelease: false
106
126
  version_requirements: !ruby/object:Gem::Requirement
107
127
  requirements:
108
128
  - - "~>"
109
129
  - !ruby/object:Gem::Version
110
- version: '2.11'
130
+ version: '3.0'
111
131
  - !ruby/object:Gem::Dependency
112
- name: pry
132
+ name: parallel
113
133
  requirement: !ruby/object:Gem::Requirement
114
134
  requirements:
115
135
  - - "~>"
116
136
  - !ruby/object:Gem::Version
117
- version: '0.10'
118
- type: :development
137
+ version: '1.0'
138
+ type: :runtime
119
139
  prerelease: false
120
140
  version_requirements: !ruby/object:Gem::Requirement
121
141
  requirements:
122
142
  - - "~>"
123
143
  - !ruby/object:Gem::Version
124
- version: '0.10'
144
+ version: '1.0'
125
145
  - !ruby/object:Gem::Dependency
126
- name: rake
146
+ name: public_suffix
127
147
  requirement: !ruby/object:Gem::Requirement
128
148
  requirements:
129
149
  - - "~>"
130
150
  - !ruby/object:Gem::Version
131
- version: '10.4'
132
- type: :development
151
+ version: '4.0'
152
+ type: :runtime
133
153
  prerelease: false
134
154
  version_requirements: !ruby/object:Gem::Requirement
135
155
  requirements:
136
156
  - - "~>"
137
157
  - !ruby/object:Gem::Version
138
- version: '10.4'
158
+ version: '4.0'
139
159
  - !ruby/object:Gem::Dependency
140
- name: shoulda
160
+ name: sniffles
141
161
  requirement: !ruby/object:Gem::Requirement
142
162
  requirements:
143
163
  - - "~>"
144
164
  - !ruby/object:Gem::Version
145
- version: '3.5'
165
+ version: '0.0'
166
+ type: :runtime
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '0.0'
173
+ - !ruby/object:Gem::Dependency
174
+ name: typhoeus
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: '1.0'
180
+ type: :runtime
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - "~>"
185
+ - !ruby/object:Gem::Version
186
+ version: '1.0'
187
+ - !ruby/object:Gem::Dependency
188
+ name: urlscan
189
+ requirement: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - "~>"
192
+ - !ruby/object:Gem::Version
193
+ version: '0.6'
194
+ type: :runtime
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - "~>"
199
+ - !ruby/object:Gem::Version
200
+ version: '0.6'
201
+ - !ruby/object:Gem::Dependency
202
+ name: whois
203
+ requirement: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - "~>"
206
+ - !ruby/object:Gem::Version
207
+ version: '5.0'
208
+ type: :runtime
209
+ prerelease: false
210
+ version_requirements: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - "~>"
213
+ - !ruby/object:Gem::Version
214
+ version: '5.0'
215
+ - !ruby/object:Gem::Dependency
216
+ name: pry
217
+ requirement: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - "~>"
220
+ - !ruby/object:Gem::Version
221
+ version: '0.0'
146
222
  type: :development
147
223
  prerelease: false
148
224
  version_requirements: !ruby/object:Gem::Requirement
149
225
  requirements:
150
226
  - - "~>"
151
227
  - !ruby/object:Gem::Version
152
- version: '3.5'
228
+ version: '0.0'
153
229
  - !ruby/object:Gem::Dependency
154
- name: rdoc
230
+ name: rake
155
231
  requirement: !ruby/object:Gem::Requirement
156
232
  requirements:
157
233
  - - "~>"
158
234
  - !ruby/object:Gem::Version
159
- version: '4.1'
235
+ version: '13.0'
160
236
  type: :development
161
237
  prerelease: false
162
238
  version_requirements: !ruby/object:Gem::Requirement
163
239
  requirements:
164
240
  - - "~>"
165
241
  - !ruby/object:Gem::Version
166
- version: '4.1'
242
+ version: '13.0'
167
243
  - !ruby/object:Gem::Dependency
168
- name: bundler
244
+ name: rspec
169
245
  requirement: !ruby/object:Gem::Requirement
170
246
  requirements:
171
247
  - - "~>"
172
248
  - !ruby/object:Gem::Version
173
- version: '1.6'
249
+ version: '3.0'
174
250
  type: :development
175
251
  prerelease: false
176
252
  version_requirements: !ruby/object:Gem::Requirement
177
253
  requirements:
178
254
  - - "~>"
179
255
  - !ruby/object:Gem::Version
180
- version: '1.6'
256
+ version: '3.0'
181
257
  - !ruby/object:Gem::Dependency
182
- name: rerun
258
+ name: rubocop
183
259
  requirement: !ruby/object:Gem::Requirement
184
260
  requirements:
185
261
  - - "~>"
186
262
  - !ruby/object:Gem::Version
187
- version: '0.10'
263
+ version: '1.0'
188
264
  type: :development
189
265
  prerelease: false
190
266
  version_requirements: !ruby/object:Gem::Requirement
191
267
  requirements:
192
268
  - - "~>"
193
269
  - !ruby/object:Gem::Version
194
- version: '0.10'
270
+ version: '1.0'
195
271
  - !ruby/object:Gem::Dependency
196
- name: vcr
272
+ name: rubocop-performance
197
273
  requirement: !ruby/object:Gem::Requirement
198
274
  requirements:
199
275
  - - "~>"
200
276
  - !ruby/object:Gem::Version
201
- version: '2.9'
277
+ version: '1.5'
202
278
  type: :development
203
279
  prerelease: false
204
280
  version_requirements: !ruby/object:Gem::Requirement
205
281
  requirements:
206
282
  - - "~>"
207
283
  - !ruby/object:Gem::Version
208
- version: '2.9'
284
+ version: '1.5'
209
285
  - !ruby/object:Gem::Dependency
210
- name: webmock
286
+ name: rubocop-rspec
211
287
  requirement: !ruby/object:Gem::Requirement
212
288
  requirements:
213
289
  - - "~>"
214
290
  - !ruby/object:Gem::Version
215
- version: '1.2'
291
+ version: '2.0'
216
292
  type: :development
217
293
  prerelease: false
218
294
  version_requirements: !ruby/object:Gem::Requirement
219
295
  requirements:
220
296
  - - "~>"
221
297
  - !ruby/object:Gem::Version
222
- version: '1.2'
298
+ version: '2.0'
223
299
  - !ruby/object:Gem::Dependency
224
- name: guard-rake
300
+ name: webmock
225
301
  requirement: !ruby/object:Gem::Requirement
226
302
  requirements:
227
303
  - - "~>"
228
304
  - !ruby/object:Gem::Version
229
- version: '1.0'
305
+ version: '3.0'
230
306
  type: :development
231
307
  prerelease: false
232
308
  version_requirements: !ruby/object:Gem::Requirement
233
309
  requirements:
234
310
  - - "~>"
235
311
  - !ruby/object:Gem::Version
236
- version: '1.0'
312
+ version: '3.0'
237
313
  description: Returns information about a domain's technology and capabilities
238
314
  email: ben@balter.com
239
315
  executables:
@@ -241,21 +317,69 @@ executables:
241
317
  extensions: []
242
318
  extra_rdoc_files: []
243
319
  files:
320
+ - ".gitignore"
321
+ - ".rubocop.yml"
322
+ - ".rubocop_todo.yml"
323
+ - ".ruby-version"
324
+ - ".travis.yml"
325
+ - Gemfile
326
+ - Guardfile
244
327
  - LICENSE
328
+ - README.md
329
+ - Rakefile
245
330
  - bin/site-inspector
331
+ - lib/cliver/dependency_ext.rb
246
332
  - lib/data/cdn.yml
247
333
  - lib/data/cloud.yml
248
334
  - lib/site-inspector.rb
249
335
  - lib/site-inspector/cache.rb
250
- - lib/site-inspector/compliance.rb
251
- - lib/site-inspector/dns.rb
252
- - lib/site-inspector/headers.rb
253
- - lib/site-inspector/sniffer.rb
254
- homepage: https://github.com/benbalter/site-inspector-ruby
336
+ - lib/site-inspector/checks/accessibility.rb
337
+ - lib/site-inspector/checks/check.rb
338
+ - lib/site-inspector/checks/content.rb
339
+ - lib/site-inspector/checks/cookies.rb
340
+ - lib/site-inspector/checks/dns.rb
341
+ - lib/site-inspector/checks/headers.rb
342
+ - lib/site-inspector/checks/hsts.rb
343
+ - lib/site-inspector/checks/https.rb
344
+ - lib/site-inspector/checks/sniffer.rb
345
+ - lib/site-inspector/checks/wappalyzer.rb
346
+ - lib/site-inspector/checks/whois.rb
347
+ - lib/site-inspector/disk_cache.rb
348
+ - lib/site-inspector/domain.rb
349
+ - lib/site-inspector/endpoint.rb
350
+ - lib/site-inspector/rails_cache.rb
351
+ - lib/site-inspector/version.rb
352
+ - package-lock.json
353
+ - package.json
354
+ - script/bootstrap
355
+ - script/cibuild
356
+ - script/console
357
+ - script/pa11y-version
358
+ - script/release
359
+ - site-inspector.gemspec
360
+ - spec/checks/site_inspector_endpoint_accessibility_spec.rb
361
+ - spec/checks/site_inspector_endpoint_check_spec.rb
362
+ - spec/checks/site_inspector_endpoint_content_spec.rb
363
+ - spec/checks/site_inspector_endpoint_cookies_spec.rb
364
+ - spec/checks/site_inspector_endpoint_dns_spec.rb
365
+ - spec/checks/site_inspector_endpoint_headers_spec.rb
366
+ - spec/checks/site_inspector_endpoint_hsts_spec.rb
367
+ - spec/checks/site_inspector_endpoint_https_spec.rb
368
+ - spec/checks/site_inspector_endpoint_sniffer_spec.rb
369
+ - spec/checks/site_inspector_endpoint_wappalyzer_spec.rb
370
+ - spec/checks/site_inspector_endpoint_whois_spec.rb
371
+ - spec/fixtures/wappalyzer.json
372
+ - spec/site_inspector_cache_spec.rb
373
+ - spec/site_inspector_disk_cache_spec.rb
374
+ - spec/site_inspector_domain_spec.rb
375
+ - spec/site_inspector_endpoint_spec.rb
376
+ - spec/site_inspector_spec.rb
377
+ - spec/spec_helper.rb
378
+ homepage: https://github.com/benbalter/site-inspector
255
379
  licenses:
256
380
  - MIT
257
381
  metadata: {}
258
- post_install_message:
382
+ post_install_message:
259
383
  rdoc_options: []
260
384
  require_paths:
261
385
  - lib
@@ -270,9 +394,26 @@ required_rubygems_version: !ruby/object:Gem::Requirement
270
394
  - !ruby/object:Gem::Version
271
395
  version: '0'
272
396
  requirements: []
273
- rubyforge_project:
274
- rubygems_version: 2.2.2
275
- signing_key:
397
+ rubygems_version: 3.0.3
398
+ signing_key:
276
399
  specification_version: 4
277
- summary: A Ruby port and v2 of Site Inspector (http://github.com/benbalter/site-inspector)
278
- test_files: []
400
+ summary: A Ruby port and v2 of Site Inspector (https://github.com/benbalter/site-inspector)
401
+ test_files:
402
+ - spec/checks/site_inspector_endpoint_accessibility_spec.rb
403
+ - spec/checks/site_inspector_endpoint_check_spec.rb
404
+ - spec/checks/site_inspector_endpoint_content_spec.rb
405
+ - spec/checks/site_inspector_endpoint_cookies_spec.rb
406
+ - spec/checks/site_inspector_endpoint_dns_spec.rb
407
+ - spec/checks/site_inspector_endpoint_headers_spec.rb
408
+ - spec/checks/site_inspector_endpoint_hsts_spec.rb
409
+ - spec/checks/site_inspector_endpoint_https_spec.rb
410
+ - spec/checks/site_inspector_endpoint_sniffer_spec.rb
411
+ - spec/checks/site_inspector_endpoint_wappalyzer_spec.rb
412
+ - spec/checks/site_inspector_endpoint_whois_spec.rb
413
+ - spec/fixtures/wappalyzer.json
414
+ - spec/site_inspector_cache_spec.rb
415
+ - spec/site_inspector_disk_cache_spec.rb
416
+ - spec/site_inspector_domain_spec.rb
417
+ - spec/site_inspector_endpoint_spec.rb
418
+ - spec/site_inspector_spec.rb
419
+ - spec/spec_helper.rb