WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content

Commit ec8de4f

Browse files
committed
Added nameserver class for nameservers option
1 parent 750d41f commit ec8de4f

File tree

3 files changed

+107
-2
lines changed

3 files changed

+107
-2
lines changed

lib/ddig.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# frozen_string_literal: true
22

33
require_relative "ddig/version"
4+
require_relative "ddig/nameserver"
45
require_relative "ddig/resolver/do53"
56
require_relative "ddig/resolver/dot"
67
require_relative "ddig/ddr"
@@ -12,8 +13,10 @@ def self.lookup(hostname, nameservers: nil)
1213
@hostname = hostname
1314
@nameservers = nameservers
1415

15-
@do53_ipv4 = Ddig::Resolver::Do53.new(hostname: @hostname, nameservers: @nameservers, ip: :ipv4).lookup
16-
@do53_ipv6 = Ddig::Resolver::Do53.new(hostname: @hostname, nameservers: @nameservers, ip: :ipv6).lookup
16+
@nameserver = Ddig::Nameserver.new(nameservers: @nameservers)
17+
18+
@do53_ipv4 = Ddig::Resolver::Do53.new(hostname: @hostname, nameservers: @nameserver.servers, ip: :ipv4).lookup
19+
@do53_ipv6 = Ddig::Resolver::Do53.new(hostname: @hostname, nameservers: @nameserver.servers, ip: :ipv6).lookup
1720

1821
@ddr = Ddig::Ddr.new(nameservers: @nameservers)
1922

lib/ddig/nameserver.rb

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
require 'resolv'
2+
3+
module Ddig
4+
class Nameserver
5+
attr_reader :servers
6+
7+
def initialize(nameservers: nil)
8+
@nameservers = nameservers
9+
10+
if @nameservers.nil?
11+
@servers = default_servers
12+
elsif @nameservers.is_a?(Array)
13+
@servers = @nameservers
14+
else
15+
@servers = [@nameservers]
16+
end
17+
18+
validation_servers
19+
end
20+
21+
def servers
22+
if @servers.count.zero?
23+
raise Ddig::Error.new('nameservers required')
24+
end
25+
26+
@servers
27+
end
28+
29+
def default_servers
30+
Resolv::DNS::Config.default_config_hash[:nameserver]
31+
end
32+
33+
def validation_servers
34+
@servers.uniq.each do |server|
35+
addr = IPAddr.new(server) rescue nil
36+
if addr.nil?
37+
puts "Warning: nameservers has invalid ip address (nameserver: #{server})"
38+
@servers.delete(server)
39+
end
40+
end
41+
42+
if @servers.count.zero?
43+
return false
44+
end
45+
46+
return true
47+
end
48+
end
49+
end

spec/ddig/nameserver_spec.rb

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# frozen_string_literal: true
2+
3+
RSpec.describe Ddig::Nameserver do
4+
context "#servers" do
5+
it "return nameservers with namesevers" do
6+
@nameserver = Ddig::Nameserver.new(nameservers: ['8.8.8.8'])
7+
8+
expect(@nameserver.servers).to eq ['8.8.8.8']
9+
end
10+
11+
it "return nameservers with string value of namesevers" do
12+
@nameserver = Ddig::Nameserver.new(nameservers: '8.8.8.8')
13+
14+
expect(@nameserver.servers).to eq ['8.8.8.8']
15+
end
16+
17+
it "return default nameservers without namesevers" do
18+
@nameserver = Ddig::Nameserver.new()
19+
20+
expect(@nameserver.servers.count).not_to eq 0
21+
end
22+
23+
it "return default nameservers with nil value of namesevers" do
24+
@nameserver = Ddig::Nameserver.new(nameservers: nil)
25+
26+
expect(@nameserver.servers.count).not_to eq 0
27+
end
28+
29+
it "raise error when nameservers is blank" do
30+
@nameserver = Ddig::Nameserver.new(nameservers: [])
31+
32+
expect{
33+
@nameserver.servers
34+
}.to raise_error(Ddig::Error)
35+
end
36+
37+
context "with invalid value of namesevers" do
38+
it "return only valid nameservers with valid and invalid value of nameservers" do
39+
@nameserver = Ddig::Nameserver.new(nameservers: ['invalid', '8.8.8.8'])
40+
41+
expect(@nameserver.servers).to eq ['8.8.8.8']
42+
end
43+
44+
it "raise error when nameservers is blank" do
45+
@nameserver = Ddig::Nameserver.new(nameservers: ['invalid'])
46+
47+
expect{
48+
@nameserver.servers
49+
}.to raise_error(Ddig::Error)
50+
end
51+
end
52+
end
53+
end

0 commit comments

Comments
 (0)