1package Pod::ProjectDocs::File; 2use strict; 3use warnings; 4use base qw/Class::Accessor::Fast Class::Data::Inheritable/; 5 6use IO::File; 7 8__PACKAGE__->mk_classdata($_) for qw/data default_name is_bin/; 9__PACKAGE__->mk_accessors(qw/config name relpath/); 10__PACKAGE__->is_bin(0); 11 12sub new { 13 my $class = shift; 14 my $self = bless { }, $class; 15 $self->_init(@_); 16 return $self; 17} 18 19sub _init { 20 my($self, %args) = @_; 21 $self->config( $args{config} ); 22} 23 24sub _get_data { 25 my $self = shift; 26 return $self->data; 27} 28 29sub publish { 30 my($self, $data) = @_; 31 $data ||= $self->_get_data(); 32 my $path = $self->get_output_path; 33 my $mode = ">>"; 34 $mode .= ":encoding(UTF-8)" if $path =~ m/html$/; 35 my $fh = IO::File->new($path, $mode) 36 or $self->_croak(qq/Can't open $path./); 37 $fh->seek(0, 0); 38 $fh->truncate(0); 39 $fh->print($data); 40 $fh->close; 41} 42 43sub get_output_path { 44 my $self = shift; 45 my $outroot = $self->config->outroot; 46 my $relpath = $self->relpath || $self->default_name; 47 my $path = File::Spec->catfile($outroot, $relpath); 48 return $path; 49} 50 51sub _croak { 52 my($self, $msg) = @_; 53 require Carp; 54 Carp::croak($msg); 55} 56 571; 58__END__ 59 60