site-inspector 1.0.2 → 3.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.
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