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