App-GitHooks
view release on metacpan or search on metacpan
lib/App/GitHooks/CommitMessage.pm view on Meta::CPAN
=head1 METHODS
=head2 new()
my $commit_message = App::GitHooks::CommitMessage->new(
app => $app,
message => $message,
);
Arguments:
=over 4
=item * app I<(mandatory)>
An C<App::GitHook> instance.
=item * message I<(mandatory)>
The commit message.
=back
=cut
sub new
{
my ( $class, %args ) = @_;
my $message = delete( $args{'message'} );
my $app = delete( $args{'app'} );
# Check arguments.
croak 'A "message" argument is mandatory'
if !defined( $message );
croak 'An "app" argument is mandatory'
if !Data::Validate::Type::is_instance( $app, class => 'App::GitHooks' );
croak 'Unknown arguments: ' . join( ', ', keys( %args ) )
if scalar( keys %args ) != 0;
# Create a new instance.
return bless(
{
message => $message,
original_message => $message,
app => $app,
},
$class,
);
}
=head2 update_message()
Update the commit message.
my $success = $commit_message->update_message( $new_message );
=cut
sub update_message
{
my ( $self, $message ) = @_;
# Update the message.
$self->{'message'} = $message;
# Remove various caches.
delete( $self->{'lines'} );
delete( $self->{'ticket_id'} );
return 1;
}
=head2 get_lines()
Return an arrayref of the lines that will be included in the commit message,
excluding blank lines and comments.
my $lines = $commit_message->get_lines(
include_comments => $include_comments, # default: 0
include_blank_lines => $include_blank_lines, # default: 1
);
=cut
sub get_lines
{
my ( $self, %args ) = @_;
my $include_comments = delete( $args{'include_comments'} ) // 0;
my $include_blank_lines = delete( $args{'include_blank_lines'} ) // 1;
my $message = $self->get_message();
my @lines = split( /\n/, $message // '' );
@lines = grep { $_ !~ /^#/ } @lines
if !$include_comments;
@lines = grep { $_ !~ /^\s*$/ } @lines
if !$include_blank_lines;
return \@lines;
}
=head2 get_summary()
Return the first line of the commit message.
my $summary = $commit_message->get_summary();
=cut
sub get_summary
{
my ( $self ) = @_;
my $lines = $self->get_lines(
include_comments => 0,
include_blank_lines => 1,
);
( run in 1.528 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )