=pod

=encoding utf8

=head1 NAME

File::Parser::Role A simple role to make life easier when you parse files.

=head1 SYNOPSIS

   package MyFileParser;

   use Moo;
   has blob => ( is => "rw" );

   sub parse {

     my $self = shift;
     my $fh = $self->fh;

     local $/;

     # just stuff it here, so not really parsing it
     $self->blob( <$fh> );

   }

   with "File::Parser::Role";

   1;


And then in some nearby code:

   my $file_obj = MyFileParser->new( "some.file" );

   print length $file_obj->blob; # blob now has the file content because of our sub parse

   print $file_obj->size;        # size of file as reported by -s


=head1 DESCRIPTION

A simple role that provides the tedious necessities when parsing files:

=over

=item * make Moo constructor work with filename as one single argument

=item * if its a filename, handle it properly if it doesnt exist

=item * provide a read-only file handle to the resource

=item * run a required C<sub parse {}>

=item * fetch its size (its a nice thing to have)

=item * accept file handles and other weirdness such as L<Path::Tiny>, L<IO::All>, L<IO::File>, L<Mojo::Path>.

=item * accept references to content

=back

All that is left is for you is the fun bit: write the code that does the parsing

=head1 INSTALLATION

To install this module, run the following commands:

       perl Makefile.PL
       make
       make test
       make install

Alternatively, to install with Module::Build, you can use the following commands:

       perl Build.PL
       ./Build
       ./Build test
       ./Build install

=head1 COPYRIGHT AND LICENCE

Copyright (C) 2014, Torbjørn Lindahl

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

=cut