File Coverage

blib/lib/Plack/Middleware/GitRevisionInfo.pm
Criterion Covered Total %
statement 9 35 25.7
branch 0 4 0.0
condition 0 6 0.0
subroutine 3 8 37.5
pod 1 1 100.0
total 13 54 24.0


line stmt bran cond sub pod time code
1             package Plack::Middleware::GitRevisionInfo;
2 1     1   28806 use Moo;
  1         19441  
  1         6  
3 1     1   2598 use Plack::Util;
  1         18336  
  1         38  
4 1     1   31 use 5.008008;
  1         3  
  1         633  
5              
6             extends 'Plack::Middleware';
7              
8             our $VERSION = '0.002';
9              
10             has 'path' => (
11             is => 'ro',
12             );
13              
14             has 'git_command' => (
15             is => 'ro',
16             default => sub { 'LC_ALL=C git log -1 --pretty=medium' }
17             );
18              
19             sub call {
20 0     0 1   my ($self, $env) = @_;
21              
22 0           my $response = $self->app->($env);
23 0     0     $self->response_cb($response, sub { $self->_handle_response(shift) });
  0            
24             }
25              
26             sub _handle_response {
27 0     0     my ($self, $response) = @_;
28 0           my $header = Plack::Util::headers($response->[1]);
29 0           my $content_type = $header->get('Content-Type');
30 0           my $path = $self->path;
31            
32 0 0 0       return unless defined $content_type && $content_type =~ qr[text/html] && $path;
      0        
33            
34 0           my $body = [];
35 0     0     Plack::Util::foreach( $response->[2], sub { push @$body, $_[0] });
  0            
36 0           $body = join '', @$body;
37              
38 0           $body .= $self->_get_revision_info;
39            
40 0           $response->[2] = [$body];
41 0           $header->set('Content-Length', length $body);
42              
43 0           return;
44             }
45              
46             sub _get_revision_info {
47 0     0     my $self = shift;
48 0 0         if ( -d $self->path ) {
49 0           my $path = $self->path;
50 0           my $command = $self->git_command;
51 0           my $output = `cd $path;$command`;
52              
53 0           my ($sha) = $output =~ m/commit\s([^\n]*)\n/s;
54 0           my ($date) = $output =~ m/Date:\s+([^\n]*)\n/s;
55              
56 0           return qq[];
57             }
58 0           return;
59             }
60              
61             1;
62             =head1 NAME
63              
64             Plack::Middleware::GitRevisionInfo - Middleware that appends git revision information to html
65              
66             =head1 SYNOPSIS
67              
68             use Plack::Builder;
69              
70             builder {
71             enable "Plack::Middleware::GitReivisionInfo", path => '../repo';
72             $app;
73             };
74              
75             =head1 DESCRIPTION
76              
77             L will display the git revision
78             information in the source of an html document in the following format:
79              
80            
81              
82             =head1 ARGUMENTS
83              
84             This middleware accepts the following arguments.
85              
86             =head2 path
87              
88             This is the path to the git repository. This is a required argument.
89              
90             =head1 SEE ALSO
91              
92             L, L, L
93              
94             =head1 AUTHOR
95              
96             Logan Bell, C<< >>
97              
98             =head1 COPYRIGHT & LICENSE
99              
100             Copyright 2012, Logan Bell
101              
102             This program is free software; you can redistribute it and/or modify
103             it under the same terms as Perl itself.
104              
105             =cut
106