site-inspector 3.1.1 → 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 (51) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -1
  3. data/.rubocop.yml +18 -10
  4. data/.rubocop_todo.yml +139 -0
  5. data/.ruby-version +1 -1
  6. data/Gemfile +4 -0
  7. data/Guardfile +2 -0
  8. data/Rakefile +2 -0
  9. data/bin/site-inspector +7 -6
  10. data/lib/cliver/dependency_ext.rb +6 -3
  11. data/lib/site-inspector.rb +18 -11
  12. data/lib/site-inspector/cache.rb +2 -0
  13. data/lib/site-inspector/checks/accessibility.rb +30 -22
  14. data/lib/site-inspector/checks/check.rb +4 -2
  15. data/lib/site-inspector/checks/content.rb +15 -4
  16. data/lib/site-inspector/checks/cookies.rb +5 -3
  17. data/lib/site-inspector/checks/dns.rb +13 -11
  18. data/lib/site-inspector/checks/headers.rb +8 -6
  19. data/lib/site-inspector/checks/hsts.rb +16 -12
  20. data/lib/site-inspector/checks/https.rb +3 -1
  21. data/lib/site-inspector/checks/sniffer.rb +10 -7
  22. data/lib/site-inspector/checks/wappalyzer.rb +62 -0
  23. data/lib/site-inspector/checks/whois.rb +36 -0
  24. data/lib/site-inspector/disk_cache.rb +2 -0
  25. data/lib/site-inspector/domain.rb +36 -30
  26. data/lib/site-inspector/endpoint.rb +22 -23
  27. data/lib/site-inspector/rails_cache.rb +2 -0
  28. data/lib/site-inspector/version.rb +3 -1
  29. data/package-lock.json +505 -0
  30. data/package.json +1 -1
  31. data/script/pa11y-version +1 -0
  32. data/site-inspector.gemspec +24 -17
  33. data/spec/checks/site_inspector_endpoint_accessibility_spec.rb +15 -13
  34. data/spec/checks/site_inspector_endpoint_check_spec.rb +9 -7
  35. data/spec/checks/site_inspector_endpoint_content_spec.rb +30 -21
  36. data/spec/checks/site_inspector_endpoint_cookies_spec.rb +17 -15
  37. data/spec/checks/site_inspector_endpoint_dns_spec.rb +42 -40
  38. data/spec/checks/site_inspector_endpoint_headers_spec.rb +12 -10
  39. data/spec/checks/site_inspector_endpoint_hsts_spec.rb +27 -25
  40. data/spec/checks/site_inspector_endpoint_https_spec.rb +12 -10
  41. data/spec/checks/site_inspector_endpoint_sniffer_spec.rb +33 -31
  42. data/spec/checks/site_inspector_endpoint_wappalyzer_spec.rb +34 -0
  43. data/spec/checks/site_inspector_endpoint_whois_spec.rb +26 -0
  44. data/spec/fixtures/wappalyzer.json +125 -0
  45. data/spec/site_inspector_cache_spec.rb +2 -0
  46. data/spec/site_inspector_disk_cache_spec.rb +8 -6
  47. data/spec/site_inspector_domain_spec.rb +34 -34
  48. data/spec/site_inspector_endpoint_spec.rb +44 -43
  49. data/spec/site_inspector_spec.rb +15 -13
  50. data/spec/spec_helper.rb +2 -0
  51. metadata +125 -55
@@ -4,7 +4,7 @@
4
4
  "description": "Returns information about a domain's technology and capabilities",
5
5
  "main": "site-inspector",
6
6
  "dependencies": {
7
- "pa11y": "^2.1.0"
7
+ "pa11y": "^5.0.0"
8
8
  },
9
9
  "devDependencies": {},
10
10
  "scripts": {
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require './lib/site-inspector'
4
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.expand_path './lib/site-inspector/version', File.dirname(__FILE__)
2
4
 
3
5
  Gem::Specification.new do |s|
@@ -15,21 +17,26 @@ Gem::Specification.new do |s|
15
17
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
16
18
  s.require_paths = ['lib']
17
19
 
18
- s.add_dependency('nokogiri', '~> 1.6')
19
- s.add_dependency('public_suffix', '~> 1.4')
20
- s.add_dependency('gman', '~> 4.1')
21
- s.add_dependency('dnsruby', '~> 1.56')
22
- s.add_dependency('sniffles', '~> 0.2')
23
- s.add_dependency('typhoeus', '~> 0.7')
24
- s.add_dependency('oj', '~> 2.11')
25
- s.add_dependency('mercenary', '~> 0.3')
26
- s.add_dependency('colorator', '~> 0.1')
27
- s.add_dependency('cliver', '~> 0.3')
28
- s.add_dependency('parallel', '~> 1.6')
29
- s.add_development_dependency('pry', '~> 0.10')
30
- s.add_development_dependency('rake', '~> 10.4')
31
- s.add_development_dependency('rspec', '~> 3.2')
32
- s.add_development_dependency('bundler', '~> 1.6')
33
- s.add_development_dependency('webmock', '~> 1.2')
34
- s.add_development_dependency('rubocop', '~> 0.35')
20
+ s.add_dependency('cliver', '~> 0.0')
21
+ s.add_dependency('colorator', '~> 1.1')
22
+ s.add_dependency('dnsruby', '~> 1.0')
23
+ s.add_dependency('dotenv', '~> 2.0')
24
+ s.add_dependency('gman', '~> 7.0', '>= 7.0.4')
25
+ s.add_dependency('mercenary', '~> 0.0')
26
+ s.add_dependency('nokogiri', '~> 1.0')
27
+ s.add_dependency('oj', '~> 3.0')
28
+ s.add_dependency('parallel', '~> 1.0')
29
+ s.add_dependency('public_suffix', '~> 4.0')
30
+ s.add_dependency('sniffles', '~> 0.0')
31
+ s.add_dependency('typhoeus', '~> 1.0')
32
+ s.add_dependency('urlscan', '~> 0.6')
33
+ s.add_dependency('whois', '~> 5.0')
34
+
35
+ s.add_development_dependency('pry', '~> 0.0')
36
+ s.add_development_dependency('rake', '~> 13.0')
37
+ s.add_development_dependency('rspec', '~> 3.0')
38
+ s.add_development_dependency('rubocop', '~> 1.0')
39
+ s.add_development_dependency('rubocop-performance', '~> 1.5')
40
+ s.add_development_dependency('rubocop-rspec', '~> 2.0')
41
+ s.add_development_dependency('webmock', '~> 3.0')
35
42
  end
@@ -1,27 +1,29 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe SiteInspector::Endpoint::Accessibility do
4
6
  subject do
5
7
  endpoint = SiteInspector::Endpoint.new('http://example.com')
6
- SiteInspector::Endpoint::Accessibility.new(endpoint)
8
+ described_class.new(endpoint)
7
9
  end
8
10
 
9
11
  it "retrieve's pa11y's version" do
10
- pending('Pa11y not installed') unless SiteInspector::Endpoint::Accessibility.pa11y?
12
+ pending('Pa11y not installed') unless described_class.pa11y?
11
13
  expect(subject.class.pa11y_version).to match(/\d\.\d\.\d/)
12
14
  end
13
15
 
14
16
  it 'responds to valid standards' do
15
- expect(subject.respond_to?(:section508)).to eql(true)
17
+ expect(subject.respond_to?(:section508)).to be(true)
16
18
  end
17
19
 
18
20
  it 'knows the level' do
19
- expect(subject.level).to eql(:error)
21
+ expect(subject.level).to be(:error)
20
22
  end
21
23
 
22
24
  it 'allows the user to set the level' do
23
25
  subject.level = :warning
24
- expect(subject.level).to eql(:warning)
26
+ expect(subject.level).to be(:warning)
25
27
  end
26
28
 
27
29
  it 'errors on invalid levels' do
@@ -29,12 +31,12 @@ describe SiteInspector::Endpoint::Accessibility do
29
31
  end
30
32
 
31
33
  it 'knows the standard' do
32
- expect(subject.standard).to eql(:section508)
34
+ expect(subject.standard).to be(:wcag2a)
33
35
  end
34
36
 
35
37
  it 'allows the user to set the standard' do
36
38
  subject.standard = :wcag2a
37
- expect(subject.standard).to eql(:wcag2a)
39
+ expect(subject.standard).to be(:wcag2a)
38
40
  end
39
41
 
40
42
  it 'errors on invalid standards' do
@@ -55,27 +57,27 @@ describe SiteInspector::Endpoint::Accessibility do
55
57
 
56
58
  it 'knows if a site is valid' do
57
59
  with_env 'SKIP_PA11Y_CHECK', 'true' do
58
- expect(subject.valid?).to eql(false)
60
+ expect(subject.valid?).to be(false)
59
61
  end
60
62
  end
61
63
 
62
64
  it 'counts the errors' do
63
65
  with_env 'SKIP_PA11Y_CHECK', 'true' do
64
- expect(subject.errors).to eql(1)
66
+ expect(subject.errors).to be(1)
65
67
  end
66
68
  end
67
69
 
68
70
  it 'runs the check' do
69
71
  with_env 'SKIP_PA11Y_CHECK', 'true' do
70
- expect(subject.check[:valid]).to eql(false)
71
- expect(subject.check[:results].first['code']).to eql('Section508.L.NoContentAnchor')
72
+ expect(subject.check[:valid]).to be(false)
73
+ expect(subject.check[:results].first['code']).to eql('WCAG2A.Principle3.Guideline3_1.3_1_1.H57.2')
72
74
  end
73
75
  end
74
76
 
75
77
  it 'runs a named check' do
76
78
  with_env 'SKIP_PA11Y_CHECK', 'true' do
77
- expect(subject.check[:valid]).to eql(false)
78
- expect(subject.check[:results].first['code']).to eql('Section508.L.NoContentAnchor')
79
+ expect(subject.check[:valid]).to be(false)
80
+ expect(subject.check[:results].first['code']).to eql('WCAG2A.Principle3.Guideline3_1.3_1_1.H57.2')
79
81
  end
80
82
  end
81
83
  end
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe SiteInspector::Endpoint::Check do
4
6
  subject do
5
7
  stub_request(:head, 'http://example.com/').to_return(status: 200)
6
8
  endpoint = SiteInspector::Endpoint.new('http://example.com')
7
- SiteInspector::Endpoint::Check.new(endpoint)
9
+ described_class.new(endpoint)
8
10
  end
9
11
 
10
12
  it 'returns the endpoint' do
@@ -24,17 +26,17 @@ describe SiteInspector::Endpoint::Check do
24
26
  end
25
27
 
26
28
  it 'returns its name' do
27
- expect(subject.name).to eql(:check)
29
+ expect(subject.name).to be(:check)
28
30
  end
29
31
 
30
32
  it 'returns the instance name' do
31
- expect(SiteInspector::Endpoint::Check.name).to eql(:check)
33
+ expect(described_class.name).to be(:check)
32
34
  end
33
35
 
34
36
  it 'enables and disables the check' do
35
- expect(SiteInspector::Endpoint::Check.enabled?).to eql(true)
36
- SiteInspector::Endpoint::Check.enabled = false
37
- expect(SiteInspector::Endpoint::Check.enabled?).to eql(false)
38
- SiteInspector::Endpoint::Check.enabled = true
37
+ expect(described_class.enabled?).to be(true)
38
+ described_class.enabled = false
39
+ expect(described_class.enabled?).to be(false)
40
+ described_class.enabled = true
39
41
  end
40
42
  end
@@ -1,22 +1,27 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe SiteInspector::Endpoint::Content do
4
6
  subject do
5
- body = <<-eos
7
+ body = <<-BODY
6
8
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
7
9
  <html>
10
+ <head>
11
+ <meta name="generator" content="Jekyll v3.8.5" />
12
+ </head>
8
13
  <body>
9
14
  <h1>Some page</h1>
10
15
  </body>
11
16
  </html>
12
- eos
17
+ BODY
13
18
 
14
19
  stub_request(:get, 'http://example.com/')
15
20
  .to_return(status: 200, body: body)
16
21
  stub_request(:head, 'http://example.com/')
17
22
  .to_return(status: 200)
18
23
  endpoint = SiteInspector::Endpoint.new('http://example.com')
19
- SiteInspector::Endpoint::Content.new(endpoint)
24
+ described_class.new(endpoint)
20
25
  end
21
26
 
22
27
  it 'returns the doc' do
@@ -33,64 +38,68 @@ describe SiteInspector::Endpoint::Content do
33
38
  end
34
39
 
35
40
  it 'knows when robots.txt exists' do
36
- stub_request(:head, %r{http\://example.com/[a-z0-9]{32}}i).to_return(status: 404)
41
+ stub_request(:head, %r{http://example.com/[a-z0-9]{32}}i).to_return(status: 404)
37
42
 
38
43
  stub_request(:head, 'http://example.com/robots.txt')
39
44
  .to_return(status: 200)
40
- expect(subject.robots_txt?).to eql(true)
45
+ expect(subject.robots_txt?).to be(true)
41
46
  end
42
47
 
43
48
  it "knows when robots.txt doesn't exist" do
44
- stub_request(:head, %r{http\://example.com/[a-z0-9]{32}}i).to_return(status: 404)
49
+ stub_request(:head, %r{http://example.com/[a-z0-9]{32}}i).to_return(status: 404)
45
50
 
46
51
  stub_request(:head, 'http://example.com/robots.txt')
47
52
  .to_return(status: 404)
48
- expect(subject.robots_txt?).to eql(false)
53
+ expect(subject.robots_txt?).to be(false)
49
54
  end
50
55
 
51
56
  it 'knows when sitemap.xml exists' do
52
- stub_request(:head, %r{http\://example.com/[a-z0-9]{32}}i).to_return(status: 404)
57
+ stub_request(:head, %r{http://example.com/[a-z0-9]{32}}i).to_return(status: 404)
53
58
 
54
59
  stub_request(:head, 'http://example.com/sitemap.xml')
55
60
  .to_return(status: 200)
56
- expect(subject.sitemap_xml?).to eql(true)
61
+ expect(subject.sitemap_xml?).to be(true)
57
62
  end
58
63
 
59
64
  it 'knows when sitemap.xml exists' do
60
- stub_request(:head, %r{http\://example.com/[a-z0-9]{32}}i).to_return(status: 404)
65
+ stub_request(:head, %r{http://example.com/[a-z0-9]{32}}i).to_return(status: 404)
61
66
 
62
67
  stub_request(:head, 'http://example.com/sitemap.xml')
63
68
  .to_return(status: 404)
64
- expect(subject.sitemap_xml?).to eql(false)
69
+ expect(subject.sitemap_xml?).to be(false)
65
70
  end
66
71
 
67
72
  it 'knows when humans.txt exists' do
68
- stub_request(:head, %r{http\://example.com/[a-z0-9]{32}}i).to_return(status: 404)
73
+ stub_request(:head, %r{http://example.com/[a-z0-9]{32}}i).to_return(status: 404)
69
74
 
70
75
  stub_request(:head, 'http://example.com/humans.txt')
71
76
  .to_return(status: 200)
72
- expect(subject.humans_txt?).to eql(true)
77
+ expect(subject.humans_txt?).to be(true)
73
78
  end
74
79
 
75
80
  it "knows when humans.txt doesn't exist" do
76
- stub_request(:head, %r{http\://example.com/[a-z0-9]{32}}i).to_return(status: 404)
81
+ stub_request(:head, %r{http://example.com/[a-z0-9]{32}}i).to_return(status: 404)
77
82
 
78
83
  stub_request(:head, 'http://example.com/humans.txt')
79
84
  .to_return(status: 200)
80
- expect(subject.humans_txt?).to eql(true)
85
+ expect(subject.humans_txt?).to be(true)
86
+ end
87
+
88
+ it 'returns the generator' do
89
+ expect(subject.generator).to eql('Jekyll v3.8.5')
81
90
  end
82
91
 
83
92
  context '404s' do
84
93
  it 'knows when an endpoint returns a proper 404' do
85
- stub_request(:head, %r{http\://example.com/.*})
94
+ stub_request(:head, %r{http://example.com/.*})
86
95
  .to_return(status: 404)
87
- expect(subject.proper_404s?).to eql(true)
96
+ expect(subject.proper_404s?).to be(true)
88
97
  end
89
98
 
90
99
  it "knows when an endpoint doesn't return a proper 404" do
91
- stub_request(:head, %r{http\://example.com/[a-z0-9]{32}}i)
100
+ stub_request(:head, %r{http://example.com/[a-z0-9]{32}}i)
92
101
  .to_return(status: 200)
93
- expect(subject.proper_404s?).to eql(false)
102
+ expect(subject.proper_404s?).to be(false)
94
103
  end
95
104
 
96
105
  it 'generates a random path' do
@@ -100,9 +109,9 @@ describe SiteInspector::Endpoint::Content do
100
109
  end
101
110
 
102
111
  it "doesn't say something exists when there are no 404s" do
103
- stub_request(:head, %r{http\://example.com/[a-z0-9]{32}}i).to_return(status: 200)
112
+ stub_request(:head, %r{http://example.com/[a-z0-9]{32}}i).to_return(status: 200)
104
113
  stub_request(:head, 'http://example.com/humans.txt').to_return(status: 200)
105
- expect(subject.humans_txt?).to eql(nil)
114
+ expect(subject.humans_txt?).to be(nil)
106
115
  end
107
116
  end
108
117
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe SiteInspector::Endpoint::Cookies do
@@ -6,12 +8,12 @@ describe SiteInspector::Endpoint::Cookies do
6
8
  stub_request(:head, 'http://example.com/')
7
9
  .to_return(status: 200, body: '')
8
10
  endpoint = SiteInspector::Endpoint.new('http://example.com')
9
- SiteInspector::Endpoint::Cookies.new(endpoint)
11
+ described_class.new(endpoint)
10
12
  end
11
13
 
12
14
  it 'knows when there are no cookies' do
13
- expect(subject.cookies?).to eql(false)
14
- expect(subject.all).to eql(nil)
15
+ expect(subject.cookies?).to be(false)
16
+ expect(subject.all).to be(nil)
15
17
  end
16
18
  end
17
19
 
@@ -19,28 +21,28 @@ describe SiteInspector::Endpoint::Cookies do
19
21
  subject do
20
22
  cookies = [
21
23
  CGI::Cookie.new(
22
- 'name' => 'foo',
23
- 'value' => 'bar',
24
+ 'name' => 'foo',
25
+ 'value' => 'bar',
24
26
  'domain' => 'example.com',
25
- 'path' => '/'
27
+ 'path' => '/'
26
28
  ),
27
29
  CGI::Cookie.new(
28
- 'name' => 'foo2',
29
- 'value' => 'bar2',
30
+ 'name' => 'foo2',
31
+ 'value' => 'bar2',
30
32
  'domain' => 'example.com',
31
- 'path' => '/'
33
+ 'path' => '/'
32
34
  )
33
35
  ].map(&:to_s)
34
36
 
35
37
  stub_request(:head, 'http://example.com/')
36
38
  .to_return(status: 200, body: '', headers: { 'set-cookie' => cookies })
37
39
  endpoint = SiteInspector::Endpoint.new('http://example.com')
38
- SiteInspector::Endpoint::Cookies.new(endpoint)
40
+ described_class.new(endpoint)
39
41
  end
40
42
 
41
43
  it 'knows when there are cookies' do
42
- expect(subject.cookies?).to eql(true)
43
- expect(subject.all.count).to eql(2)
44
+ expect(subject.cookies?).to be(true)
45
+ expect(subject.all.count).to be(2)
44
46
  end
45
47
 
46
48
  it 'returns a cookie by name' do
@@ -48,7 +50,7 @@ describe SiteInspector::Endpoint::Cookies do
48
50
  end
49
51
 
50
52
  it "knows cookies aren't secure" do
51
- expect(subject.secure?).to eql(false)
53
+ expect(subject.secure?).to be(false)
52
54
  end
53
55
  end
54
56
 
@@ -61,11 +63,11 @@ describe SiteInspector::Endpoint::Cookies do
61
63
  stub_request(:head, 'http://example.com/')
62
64
  .to_return(status: 200, body: '', headers: { 'set-cookie' => cookies })
63
65
  endpoint = SiteInspector::Endpoint.new('http://example.com')
64
- SiteInspector::Endpoint::Cookies.new(endpoint)
66
+ described_class.new(endpoint)
65
67
  end
66
68
 
67
69
  it 'knows cookies are secure' do
68
- expect(subject.secure?).to eql(true)
70
+ expect(subject.secure?).to be(true)
69
71
  end
70
72
  end
71
73
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'dnsruby'
3
5
 
@@ -5,22 +7,22 @@ describe SiteInspector::Endpoint::Dns do
5
7
  subject do
6
8
  stub_request(:head, 'http://github.com/').to_return(status: 200)
7
9
  endpoint = SiteInspector::Endpoint.new('http://github.com')
8
- SiteInspector::Endpoint::Dns.new(endpoint)
10
+ described_class.new(endpoint)
9
11
  end
10
12
 
11
13
  it 'inits the resolver' do
12
- expect(SiteInspector::Endpoint::Dns.resolver.class).to eql(Dnsruby::Resolver)
14
+ expect(described_class.resolver.class).to eql(Dnsruby::Resolver)
13
15
  end
14
16
 
15
- # Note: these tests makes external calls
17
+ # NOTE: these tests makes external calls
16
18
  context 'live tests' do
17
- it 'it runs the query' do
19
+ it 'runs the query' do
18
20
  expect(subject.query).not_to be_empty
19
21
  end
20
22
 
21
23
  context 'resolv' do
22
24
  it 'returns the IP' do
23
- expect(subject.ip).to include('192.30.252.')
25
+ expect(subject.ip).to include('140.82.')
24
26
  end
25
27
 
26
28
  it 'returns the hostname' do
@@ -33,21 +35,21 @@ describe SiteInspector::Endpoint::Dns do
33
35
  before do
34
36
  record = Dnsruby::RR.create type: 'A', address: '1.2.3.4', name: 'test'
35
37
  allow(subject).to receive(:records) { [record] }
36
- allow(subject).to receive(:query) { [] }
38
+ allow(subject).to receive(:query).and_return([])
37
39
  end
38
40
 
39
41
  it 'returns the records' do
40
- expect(subject.records.count).to eql(1)
42
+ expect(subject.records.count).to be(1)
41
43
  expect(subject.records.first.class).to eql(Dnsruby::RR::IN::A)
42
44
  end
43
45
 
44
46
  it 'knows if a record exists' do
45
- expect(subject.has_record?('A')).to eql(true)
46
- expect(subject.has_record?('CNAME')).to eql(false)
47
+ expect(subject.has_record?('A')).to be(true)
48
+ expect(subject.has_record?('CNAME')).to be(false)
47
49
  end
48
50
 
49
51
  it 'knows if a domain supports dnssec' do
50
- expect(subject.dnssec?).to eql(false)
52
+ expect(subject.dnssec?).to be(false)
51
53
 
52
54
  # via https://github.com/alexdalitz/dnsruby/blob/master/test/tc_dnskey.rb
53
55
  input = 'example.com. 86400 IN DNSKEY 256 3 5 ( AQPSKmynfzW4kyBv015MUG2DeIQ3' \
@@ -61,25 +63,25 @@ describe SiteInspector::Endpoint::Dns do
61
63
  record = Dnsruby::RR.create input
62
64
  allow(subject).to receive(:records) { [record] }
63
65
 
64
- expect(subject.dnssec?).to eql(true)
66
+ expect(subject.dnssec?).to be(true)
65
67
  end
66
68
 
67
69
  it 'knows if a domain supports ipv6' do
68
- expect(subject.ipv6?).to eql(false)
70
+ expect(subject.ipv6?).to be(false)
69
71
 
70
72
  input = {
71
- type: 'AAAA',
72
- name: 'test',
73
+ type: 'AAAA',
74
+ name: 'test',
73
75
  address: '102:304:506:708:90a:b0c:d0e:ff10'
74
76
  }
75
77
  record = Dnsruby::RR.create input
76
78
  allow(subject).to receive(:records) { [record] }
77
79
 
78
- expect(subject.ipv6?).to eql(true)
80
+ expect(subject.ipv6?).to be(true)
79
81
  end
80
82
 
81
83
  it "knows it's not a localhost address" do
82
- expect(subject.localhost?).to eql(false)
84
+ expect(subject.localhost?).to be(false)
83
85
  end
84
86
 
85
87
  context 'hostname detection' do
@@ -87,38 +89,38 @@ describe SiteInspector::Endpoint::Dns do
87
89
  records = []
88
90
 
89
91
  records.push Dnsruby::RR.create(
90
- type: 'CNAME',
92
+ type: 'CNAME',
91
93
  domainname: 'example.com',
92
- name: 'example'
94
+ name: 'example'
93
95
  )
94
96
 
95
97
  records.push Dnsruby::RR.create(
96
- type: 'CNAME',
98
+ type: 'CNAME',
97
99
  domainname: 'github.com',
98
- name: 'github'
100
+ name: 'github'
99
101
  )
100
102
 
101
103
  allow(subject).to receive(:records) { records }
102
104
 
103
- expect(subject.cnames.count).to eql(2)
105
+ expect(subject.cnames.count).to be(2)
104
106
  expect(subject.cnames.first.sld).to eql('example')
105
107
  end
106
108
 
107
109
  it "knows when a domain doesn't have a cdn" do
108
- expect(subject.cdn?).to eql(false)
110
+ expect(subject.cdn?).to be(false)
109
111
  end
110
112
 
111
113
  it 'detects CDNs' do
112
114
  records = [Dnsruby::RR.create(
113
- type: 'CNAME',
115
+ type: 'CNAME',
114
116
  domainname: 'foo.cloudfront.net',
115
- name: 'example'
117
+ name: 'example'
116
118
  )]
117
119
  allow(subject).to receive(:records) { records }
118
120
 
119
- expect(subject.send(:detect_by_hostname, 'cdn')).to eql(:cloudfront)
120
- expect(subject.cdn).to eql(:cloudfront)
121
- expect(subject.cdn?).to eql(true)
121
+ expect(subject.send(:detect_by_hostname, 'cdn')).to be(:cloudfront)
122
+ expect(subject.cdn).to be(:cloudfront)
123
+ expect(subject.cdn?).to be(true)
122
124
  end
123
125
 
124
126
  it 'builds that path to a data file' do
@@ -133,46 +135,46 @@ describe SiteInspector::Endpoint::Dns do
133
135
  end
134
136
 
135
137
  it "knows when a domain isn't cloud" do
136
- expect(subject.cloud?).to eql(false)
138
+ expect(subject.cloud?).to be(false)
137
139
  end
138
140
 
139
141
  it 'detects cloud providers' do
140
142
  records = [Dnsruby::RR.create(
141
- type: 'CNAME',
143
+ type: 'CNAME',
142
144
  domainname: 'foo.herokuapp.com',
143
- name: 'example'
145
+ name: 'example'
144
146
  )]
145
147
  allow(subject).to receive(:records) { records }
146
148
 
147
- expect(subject.send(:detect_by_hostname, 'cloud')).to eql(:heroku)
148
- expect(subject.cloud_provider).to eql(:heroku)
149
- expect(subject.cloud?).to eql(true)
149
+ expect(subject.send(:detect_by_hostname, 'cloud')).to be(:heroku)
150
+ expect(subject.cloud_provider).to be(:heroku)
151
+ expect(subject.cloud?).to be(true)
150
152
  end
151
153
 
152
154
  it "knows when a domain doesn't have google apps" do
153
- expect(subject.google_apps?).to eql(false)
155
+ expect(subject.google_apps?).to be(false)
154
156
  end
155
157
 
156
158
  it 'knows when a domain is using google apps' do
157
159
  records = [Dnsruby::RR.create(
158
- type: 'MX',
159
- exchange: 'mx1.google.com',
160
- name: 'example',
160
+ type: 'MX',
161
+ exchange: 'mx1.google.com',
162
+ name: 'example',
161
163
  preference: 10
162
164
  )]
163
165
  allow(subject).to receive(:records) { records }
164
- expect(subject.google_apps?).to eql(true)
166
+ expect(subject.google_apps?).to be(true)
165
167
  end
166
168
  end
167
169
  end
168
170
 
169
171
  context 'localhost' do
170
172
  before do
171
- allow(subject).to receive(:ip) { '127.0.0.1' }
173
+ allow(subject).to receive(:ip).and_return('127.0.0.1')
172
174
  end
173
175
 
174
176
  it "knows it's a localhost address" do
175
- expect(subject.localhost?).to eql(true)
177
+ expect(subject.localhost?).to be(true)
176
178
  end
177
179
 
178
180
  it 'returns a LocalhostError' do