The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#
# (c) Jan Gehring <jan.gehring@gmail.com>
# 
# vim: set ts=3 sw=3 tw=0:
# vim: set expandtab:
   
package Rex::File::Parser::Ini;
   
use strict;
use warnings;

use Data::Dumper;

sub new {
   my $that = shift;
   my $proto = ref($that) || $that;
   my $self = { @_ };

   bless($self, $proto);

   return $self;
}

sub get {
   my ($self, $section, $key) = @_;

   unless(exists $self->{"__data"}->{$section}) {
      die("$section not found");
   }

   unless(exists $self->{"__data"}->{$section}->{$key}) {
      die("$key not found in $section");
   }

   return $self->{"__data"}->{$section}->{$key};
}

sub get_sections {
   my ($self) = @_;
   return keys %{$self->{"__data"}};
}

sub read {
   my ($self) = @_;
   $self->{"__data"} = $self->_read_file;
}

sub _read_file {
   my ($self) = @_;

   my $data = {};

   my $section;
   open(my $fh, "<", $self->{"file"});
   while(my $line = <$fh>) {
      chomp $line;
      next if($line =~ m/^\s*?;/);
      next if($line =~ m/^\s*?$/);

      if($line =~ m/^\[(.+)\]$/) {
         $section = $1;
         $data->{$section} = {};
         next;
      }

      if($section) {
         my ($key, $val) = split(/=/, $line, 2);
         $val =~ s/^\s+|\s+$//g;
         $key =~ s/^\s+|\s+$//g;

         $data->{$section}->{$key} = $val;
      }
   }
   close($fh);

   return $data;
}

   
1;