Blame lib/CPAN/Changes/Group.pm

Packit 90fbfc
package CPAN::Changes::Group;
Packit 90fbfc
Packit 90fbfc
use strict;
Packit 90fbfc
use warnings;
Packit 90fbfc
Packit 90fbfc
use Text::Wrap   ();
Packit 90fbfc
Packit 90fbfc
sub new {
Packit 90fbfc
    my $class = shift;
Packit 90fbfc
    return bless {
Packit 90fbfc
        changes    => [],
Packit 90fbfc
        @_,
Packit 90fbfc
    }, $class;
Packit 90fbfc
}
Packit 90fbfc
Packit 90fbfc
# Intentionally read only
Packit 90fbfc
# to prevent hash key and name being out of sync.
Packit 90fbfc
sub name {
Packit 90fbfc
    my $self = shift;
Packit 90fbfc
    if ( not exists $self->{ name } ) {
Packit 90fbfc
      $self->{ name } = q[];
Packit 90fbfc
    }
Packit 90fbfc
    return $self->{ name };
Packit 90fbfc
}
Packit 90fbfc
Packit 90fbfc
sub changes {
Packit 90fbfc
    my $self = shift;
Packit 90fbfc
    return $self->{ changes };
Packit 90fbfc
}
Packit 90fbfc
Packit 90fbfc
sub add_changes {
Packit 90fbfc
    my $self  = shift;
Packit 90fbfc
    push @{ $self->{ changes } }, @_;
Packit 90fbfc
}
Packit 90fbfc
Packit 90fbfc
sub set_changes {
Packit 90fbfc
    my $self  = shift;
Packit 90fbfc
    $self->{ changes } = \@_;
Packit 90fbfc
}
Packit 90fbfc
Packit 90fbfc
sub clear_changes {
Packit 90fbfc
    my $self = shift;
Packit 90fbfc
    $self->{ changes } = [];
Packit 90fbfc
}
Packit 90fbfc
Packit 90fbfc
sub is_empty {
Packit 90fbfc
    my $self = shift;
Packit 90fbfc
    return !@{ $self->changes };
Packit 90fbfc
}
Packit 90fbfc
Packit 90fbfc
sub serialize {
Packit 90fbfc
    my $self = shift;
Packit 90fbfc
    my %args = @_;
Packit 90fbfc
Packit 90fbfc
    my $output = '';
Packit 90fbfc
    my $name = $self->name;
Packit 90fbfc
    $output .= sprintf " [%s]\n", $name if length $name;
Packit 90fbfc
    # change logs commonly have long URLs we shouldn't break, and by default
Packit 90fbfc
    # Text::Wrap wraps on NONBREAKING SPACE.
Packit 90fbfc
    local $Text::Wrap::break = '[\t ]';
Packit 90fbfc
    local $Text::Wrap::huge = 'overflow';
Packit 90fbfc
    $output .= Text::Wrap::wrap( ' - ', '   ', $_ ) . "\n" for @{ $self->changes };
Packit 90fbfc
Packit 90fbfc
    return $output;
Packit 90fbfc
}
Packit 90fbfc
Packit 90fbfc
1;
Packit 90fbfc
Packit 90fbfc
__END__
Packit 90fbfc
Packit 90fbfc
=head1 NAME
Packit 90fbfc
Packit 90fbfc
CPAN::Changes::Group - A group of related change information within a release
Packit 90fbfc
Packit 90fbfc
=head1 SYNOPSIS
Packit 90fbfc
Packit 90fbfc
    my $rel = CPAN::Changes::Release->new(
Packit 90fbfc
        version => '0.01',
Packit 90fbfc
        date    => '2009-07-06',
Packit 90fbfc
    );
Packit 90fbfc
Packit 90fbfc
    my $grp = CPAN::Changes::Group->new(
Packit 90fbfc
        name => 'BugFixes',
Packit 90fbfc
    );
Packit 90fbfc
Packit 90fbfc
    $grp->add_changes(
Packit 90fbfc
      'Return a Foo object instead of a Bar object in foobar()'
Packit 90fbfc
    );
Packit 90fbfc
Packit 90fbfc
    $rel->attach_group( $grp ); # clobbers existing group if present.
Packit 90fbfc
Packit 90fbfc
=head1 DESCRIPTION
Packit 90fbfc
Packit 90fbfc
A release is made up of several groups. This object provides access
Packit 90fbfc
to all of the key data that embodies a such a group.
Packit 90fbfc
Packit 90fbfc
For instance:
Packit 90fbfc
Packit 90fbfc
  0.27 2013-12-13
Packit 90fbfc
Packit 90fbfc
  - Foo
Packit 90fbfc
Packit 90fbfc
  [ Spec Changes ]
Packit 90fbfc
Packit 90fbfc
  - Bar
Packit 90fbfc
Packit 90fbfc
Here, there are two groups, the second one, C< Spec Changes > and the first with the empty label C<q[]>.
Packit 90fbfc
Packit 90fbfc
=head1 METHODS
Packit 90fbfc
Packit 90fbfc
=head2 new( %args )
Packit 90fbfc
Packit 90fbfc
Creates a new group object, using C<%args> as the default data.
Packit 90fbfc
Packit 90fbfc
  Group->new(
Packit 90fbfc
      name => 'Some Group Name',
Packit 90fbfc
      changes    => [ ],
Packit 90fbfc
  );
Packit 90fbfc
Packit 90fbfc
=head2 name()
Packit 90fbfc
Packit 90fbfc
Returns the name of the group itself.
Packit 90fbfc
Packit 90fbfc
=head2 changes( [ $group ] )
Packit 90fbfc
Packit 90fbfc
Gets the list of changes for this group as an arrayref of changes.
Packit 90fbfc
Packit 90fbfc
=head2 add_changes( @changes )
Packit 90fbfc
Packit 90fbfc
Appends a list of changes to the group.
Packit 90fbfc
Packit 90fbfc
    $group->add_changes( 'Added foo() function' );
Packit 90fbfc
Packit 90fbfc
=head2 set_changes( @changes )
Packit 90fbfc
Packit 90fbfc
Replaces the existing list of changes with the supplied values.
Packit 90fbfc
Packit 90fbfc
=head2 clear_changes( )
Packit 90fbfc
Packit 90fbfc
Clears all changes from the group.
Packit 90fbfc
Packit 90fbfc
=head2 groups( sort => \&sorting_function )
Packit 90fbfc
Packit 90fbfc
Returns a list of current groups in this release.
Packit 90fbfc
Packit 90fbfc
=head2 is_empty()
Packit 90fbfc
Packit 90fbfc
Returns whether or not the given group has changes.
Packit 90fbfc
Packit 90fbfc
=head2 serialize()
Packit 90fbfc
Packit 90fbfc
Returns the group data as a string, suitable for inclusion in a Changes
Packit 90fbfc
file.
Packit 90fbfc
Packit 90fbfc
=head1 SEE ALSO
Packit 90fbfc
Packit 90fbfc
=over 4
Packit 90fbfc
Packit 90fbfc
=item * L<CPAN::Changes::Release>
Packit 90fbfc
Packit 90fbfc
=item * L<CPAN::Changes::Spec>
Packit 90fbfc
Packit 90fbfc
=item * L<CPAN::Changes>
Packit 90fbfc
Packit 90fbfc
=item * L<Test::CPAN::Changes>
Packit 90fbfc
Packit 90fbfc
=back
Packit 90fbfc
Packit 90fbfc
=head1 AUTHOR
Packit 90fbfc
Packit 90fbfc
Brian Cassidy E<lt>bricas@cpan.orgE<gt>
Packit 90fbfc
Packit 90fbfc
=head1 COPYRIGHT AND LICENSE
Packit 90fbfc
Packit 90fbfc
Copyright 2011-2013 by Brian Cassidy
Packit 90fbfc
Packit 90fbfc
This library is free software; you can redistribute it and/or modify
Packit 90fbfc
it under the same terms as Perl itself.
Packit 90fbfc
Packit 90fbfc
=cut