simplified hosts to be standard file data structure, also preserves comments
Robert 'phaylon' Sedlacek [Tue, 19 Jun 2012 20:31:51 +0000 (20:31 +0000)]
lib/System/Introspector/Probe/Hosts.pm
t/data/hosts
t/hosts.t

index d1a0d8b..bc2ab76 100644 (file)
@@ -2,7 +2,7 @@ package System::Introspector::Probe::Hosts;
 use Moo;
 
 use System::Introspector::Util qw(
-    handle_from_file
+    output_from_file
     transform_exceptions
 );
 
@@ -13,24 +13,17 @@ has hosts_file => (
 
 sub gather {
     my ($self) = @_;
-    return transform_exceptions {
-        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 => \@hosts };
+    my $file = $self->hosts_file;
+    return {
+        hosts_file => transform_exceptions {
+            return {
+                file_name => $file,
+                body => scalar output_from_file $file,
+            };
+        },
     };
 }
 
-sub _open_hosts_file {
-    my ($self) = @_;
-    return handle_from_file $self->hosts_file;
-}
-
 1;
 
 __END__
index 1711790..db6ba17 100644 (file)
@@ -1,4 +1,4 @@
 1.2.3.4 foo bar
 
-# another one
+# some comment
 2.3.4.5 bar
index 65822bb..a7c7a43 100644 (file)
--- a/t/hosts.t
+++ b/t/hosts.t
@@ -10,11 +10,16 @@ my $probe = System::Introspector::Probe::Hosts->new(
 
 my $result = $probe->gather;
 ok $result, 'received data';
-my $data = $result->{hosts};
+my $data = $result->{hosts_file};
 ok $data, 'received hosts data';
 
-is_deeply $data,
-    [['1.2.3.4', qw( foo bar )], ['2.3.4.5', 'bar']],
-    'parsing worked';
+is $result->{__error__}, undef, 'no errors';
+ok $data->{file_name}, 'received file name';
+
+my $body = $data->{body};
+ok $body, 'received a body';
+like $body, qr{1.2.3.4\s+foo\s+bar}, 'first host';
+like $body, qr{2.3.4.5\s+bar}, 'second host';
+like $body, qr{some comment}, 'comment preserved';
 
 done_testing;