Class: Async::DNS::System::Hosts
- Inherits:
-
Object
- Object
- Async::DNS::System::Hosts
- Defined in:
- lib/async/dns/system.rb
Overview
An interface for querying the system’s hosts file.
Class Method Summary collapse
-
.local ⇒ Object
Hosts for the local system.
Instance Method Summary collapse
-
#add(address, names) ⇒ Object
Add a new address with the given names.
- #each(&block) ⇒ Object
-
#initialize ⇒ Hosts
constructor
Create a new hosts file interface.
-
#lookup(name, origin: nil) ⇒ Object
(also: #[])
Lookup a name in the hosts file.
-
#parse_hosts(io) ⇒ Object
Parse a hosts file and add the entries.
Constructor Details
#initialize ⇒ Hosts
Create a new hosts file interface.
60 61 62 63 |
# File 'lib/async/dns/system.rb', line 60 def initialize @addresses = {} @names = {} end |
Class Method Details
.local ⇒ Object
Hosts for the local system.
45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/async/dns/system.rb', line 45 def self.local hosts = self.new path = System.hosts_path if path and File.exist?(path) File.open(path) do |file| hosts.parse_hosts(file) end end return hosts end |
Instance Method Details
#add(address, names) ⇒ Object
Add a new address with the given names.
81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/async/dns/system.rb', line 81 def add(address, names) @addresses[address] ||= [] @addresses[address] += names names.each do |name| name = Resolv::DNS::Name.create(name).with_origin(nil) @names[name] ||= [] @names[name] << address end end |
#each(&block) ⇒ Object
93 94 95 |
# File 'lib/async/dns/system.rb', line 93 def each(&block) @names.each(&block) end |
#lookup(name, origin: nil) ⇒ Object Also known as: []
Lookup a name in the hosts file.
66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/async/dns/system.rb', line 66 def lookup(name, origin: nil) name = Resolv::DNS::Name.create(name).with_origin(origin) addresses = @names[name] if addresses addresses.last else nil end end |
#parse_hosts(io) ⇒ Object
Parse a hosts file and add the entries.
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/async/dns/system.rb', line 98 def parse_hosts(io) io.each do |line| line.sub!(/#.*/, "") address, hostname, *aliases = line.split(/\s+/) if address =~ Resolv::IPv4::Regex address = Resolv::IPv4.create(address) elsif address =~ Resolv::IPv6::Regex address = Resolv::IPv6.create(address) else next end add(address, [hostname] + aliases) end end |