package System::Introspector::Hosts;
use Moo;

has hosts_file => (
    is      => 'ro',
    default => sub { '/etc/hosts' },
);

sub gather {
    my ($self) = @_;
    my $fh = $self->_open_hosts_file;
    my @hosts;
    while (defined( my $line = <$fh> )) {
        chomp $line;
        next if $line =~ m{^\s*$}
             or $line =~ m{^\s*#};
        push @hosts, [split m{\s+}, $line];
    }
    return \@hosts;
}

sub _open_hosts_file {
    my ($self) = @_;
    my $file = $self->hosts_file;
    open my $fh, '<', $file
        or die "Unable to read $file: $!\n";
    return $fh;
}

1;

__END__

=head1 NAME

System::Introspector::Hosts - Gather known hosts

=head1 DESCRIPTION

Reads a C<hosts> file to produce a list of known hosts

=head1 ATTRIBUTES

=head2 hosts_file

The path to the C<hosts> file that should be read. Defaults to C</etc/hosts>.

=head1 SEE ALSO

=over

=item L<System::Introspector>

=back

=cut

