1 package App
::HomeBank2Ledger
::Formatter
;
2 # ABSTRACT: Abstract class for formatting a ledger
6 my $formatter = App::HomeBank2Ledger::Formatter->new(
9 print $formatter->format($ledger);
13 This class formats L<ledger data|App::HomeBank2Ledger::Ledger> as for a file.
18 * L<App::HomeBank2Ledger::Formatter::Beancount>
19 * L<App::HomeBank2Ledger::Formatter::Ledger>
27 use Module
::Pluggable search_path
=> [__PACKAGE__
],
28 sub_name
=> 'available_formatters';
30 our $VERSION = '9999.999'; # VERSION
32 sub _croak
{ require Carp
; Carp
::croak
(@_) }
36 $formatter = App
::HomeBank2Ledger
::Formatter-
>new(type
=> $format);
38 Construct a new formatter object
.
46 my $package = __PACKAGE__
;
48 if ($class eq $package and my $type = $args{type
}) {
50 for my $formatter ($class->available_formatters) {
51 next if lc($formatter) ne lc("${package}::${type}");
56 _croak
('Invalid formatter type') if $class eq $package;
59 return bless {%args}, $class;
64 $str = $formatter->format($ledger);
66 Do the actual formatting of ledger data into a serialized form
.
68 This must be overridden by subclasses
.
73 die "Unimplemented\n";
78 Get the type of formatter
.
82 Get the name
or title of the ledger
.
86 Get the filepath where the ledger data came from
.
90 Get the number of characters to
use for the account column
.
94 sub type
{ shift-
>{type
} }
95 sub name
{ shift-
>{name
} }
96 sub file
{ shift-
>{file
} }
97 sub account_width
{ shift-
>{account_width
} || 40 }