Module::Changes::Formatter::Free - format a Changes object in freeform


Module-Changes documentation Contained in the Module-Changes distribution.

Index


Code Index:

NAME

Top

Module::Changes::Formatter::Free - format a Changes object in freeform

SYNOPSIS

Top

    use Module::Changes;
    my $formatter = Module::Changes->make_object_for_type('formatter_free',
        indent => 4
    );
    $formatter->format($changes);

DESCRIPTION

Top

This class can format a Changes object in a kind of freeform format. This makes the Changes file look more or less like traditional Changes files do.

METHODS

Top

This class inherits all methods from Module::Changes::Formatter.

indent
    $formatter->indent(4);
    my $indent = $formatter->indent;

Set or get the indent used to format individual changes and tags lines. The default is an indent of 4.

format_line
    print $formatter->format_line('Added foobar()');

Takes a changes string and formats it to look like they do in traditional Changes files, with an indent and a leading dash. The resulting string is returned.

Long change strings, spanning multiple lines, aren't handled gracefully yet.

This method is used internally; most likely you will not need to use it.

format_release
    print $formatter->format_release($release);

Takes a release object and formats it, then returns the result string.

This method is used internally; most likely you will not need to use it.

format
    print $formatter->format($changes);

Takes a changes object and formats it, then returns the result string.

TAGS

Top

If you talk about this module in blogs, on del.icio.us or anywhere else, please use the modulechanges tag.

BUGS AND LIMITATIONS

Top

No bugs have been reported.

Please report any bugs or feature requests to bug-module-changes@rt.cpan.org, or through the web interface at http://rt.cpan.org.

INSTALLATION

Top

See perlmodinstall for information and options on installing Perl modules.

AVAILABILITY

Top

The latest version of this module is available from the Comprehensive Perl Archive Network (CPAN). Visit <http://www.perl.com/CPAN/> to find a CPAN site near you. Or see <http://www.perl.com/CPAN/authors/id/M/MA/MARCEL/>.

AUTHOR

Top

Marcel Grünauer, <marcel@cpan.org>

COPYRIGHT AND LICENSE

Top


Module-Changes documentation Contained in the Module-Changes distribution.

package Module::Changes::Formatter::Free;

use warnings;
use strict;
use DateTime::Format::Mail;
use YAML;


our $VERSION = '0.05';


use base 'Module::Changes::Formatter';


__PACKAGE__->mk_scalar_accessors(qw(indent));


use constant DEFAULTS => (
    indent => 4,
);


sub format_line {
    my ($self, $text) = @_;
    # FIXME handle long text by correctly wrapping it
    sprintf "%s - %s\n", ' ' x $self->indent, $text;
}


sub format_release {
    my ($self, $release) = @_;
    my $text = sprintf "%s  %s (%s)\n",
        $release->version_as_string,
        DateTime::Format::Mail->new->format_datetime($release->date),
        $release->author;
    $text .= $self->format_line($_) for grep { defined } $release->changes;
    if (grep { defined } $release->tags) {
        $text .= $self->format_line(
            sprintf 'tags: %s',
            join ', ' =>
            grep { defined }
            $release->tags
        );
    }
    $text;
}


sub format {
    my ($self, $changes) = @_;

    my $text = sprintf "Revision history for Perl extension %s\n\n",
        $changes->name;

    $text .=
        join "\n" =>
        map { $self->format_release($_) }
        $changes->releases;

    $text;
}


1;

__END__