BoutrosLab-TSVStream
view release on metacpan or search on metacpan
lib/BoutrosLab/TSVStream/IO/Role/Writer/Fixed.pm view on Meta::CPAN
package BoutrosLab::TSVStream::IO::Role::Writer::Fixed;
# safe Perl
use warnings;
use strict;
use Carp;
use BoutrosLab::TSVStream::IO::Role::Base::Fixed;
=head1 NAME
BoutrosLab::TSVStream:Writer
=cut
use Moose::Role;
use Moose::Util::TypeConstraints;
use namespace::autoclean;
use List::MoreUtils qw(all zip);
use Try::Tiny;
with 'BoutrosLab::TSVStream::IO::Role::Base::Fixed';
has append => ( is => 'ro', lazy => 1, isa => 'Bool', default => '0' );
enum 'WriteHeaderType', [qw(write skip)];
has header => (
is => 'ro',
lazy => 1,
isa => 'WriteHeaderType',
default => sub { my $self = shift; $self->append ? 'skip' : 'write' }
);
has pre_headers => (
is => 'ro',
isa => 'ArrayRef[Str]',
default => sub { [] }
);
has extra_class_params => (
is => 'ro',
isa => 'ArrayRef[Str]',
default => sub { [] }
);
around BUILDARGS => sub {
my $orig = shift;
my $class = shift;
my $arg = ref($_[0]) ? $_[0] : { @_ };
my %valid_arg = (
file => 1,
handle => 1,
header => 1,
class => 1,
comment => 1,
pre_comment => 1,
pre_header => 1,
header_fix => 1,
extra_class_params => 1,
pre_headers => 1,
append => 1,
dyn_fields => 1
);
$arg->{_valid_arg} = \%valid_arg;
$arg->{_open_mode} = $arg->{append} ? '>>' : '>';
$class->$orig( $arg );
};
sub _list_headers {
my $self = shift;
return ( $self->fields );
}
sub BUILD {
my $self = shift;
$self->_write_lines( $self->pre_headers ) if $self->pre_header;
if ($self->header eq 'write') {
( run in 3.244 seconds using v1.01-cache-2.11-cpan-75ffa21a3d4 )