Skip to content

Commit

Permalink
Merge pull request #889 from omega/omega/release-changes
Browse files Browse the repository at this point in the history
Add last release changes on release page
  • Loading branch information
oalders committed Jul 31, 2013
2 parents a3d56a4 + 79e2efd commit 69f6d46
Show file tree
Hide file tree
Showing 7 changed files with 65 additions and 1 deletion.
1 change: 1 addition & 0 deletions Makefile.PL
Expand Up @@ -46,6 +46,7 @@ my %WriteMakefileArgs = (
"Catalyst::View::TT::Alloy" => 0,
"CatalystX::RoleApplicator" => 0,
"Config::General" => 0,
"CPAN::Changes" => 0.21,
"Data::Dumper" => 0,
"DateTime" => 0,
"DateTime::Format::HTTP" => 0,
Expand Down
1 change: 1 addition & 0 deletions cpanfile
Expand Up @@ -17,6 +17,7 @@ requires 'Catalyst::View::JSON';
requires 'Catalyst::View::TT::Alloy';
requires 'CatalystX::RoleApplicator';
requires 'Config::General';
requires 'CPAN::Changes', '0.21';
requires 'Data::Dumper';
requires 'DateTime';
requires 'DateTime::Format::HTTP';
Expand Down
21 changes: 21 additions & 0 deletions lib/MetaCPAN/Web/Model/API/Changes.pm
Expand Up @@ -2,9 +2,30 @@ package MetaCPAN::Web::Model::API::Changes;
use Moose;
extends 'MetaCPAN::Web::Model::API';

use CPAN::Changes;
use Try::Tiny;

sub get {
my ( $self, @path ) = @_;
$self->request( '/changes/' . join( '/', @path ) );
}

sub last_version {
my ( $self, $response ) = @_;
my $changes;
if ( !exists $response->{content} or $response->{documentation} ) {
} else {
# I guess we have a propper changes file? :P
try {
$changes = CPAN::Changes->load_string($response->{content});
} catch {
# we don't really care?
warn "Error parsing changes: $_" if $ENV{CATALYST_DEBUG};
};
}
return unless $changes;
my @releases = $changes->releases;
return unless scalar @releases;
return $releases[-1];
}
1;
4 changes: 4 additions & 0 deletions lib/MetaCPAN/Web/Role/ReleaseInfo.pm
Expand Up @@ -34,6 +34,7 @@ sub api_requests {

versions => $c->model('API::Release')->versions( $data->{distribution} ),
distribution => $c->model('API::Release')->distribution( $data->{distribution} ),
changes => $c->model('API::Changes')->get( $data->{author}, $data->{name} ),
%$reqs,
};
}
Expand All @@ -42,13 +43,16 @@ sub api_requests {
sub stash_api_results {
my ( $self, $c, $reqs, $data ) = @_;

my $changes = $c->model('API::Changes')->last_version( $reqs->{changes} );

$c->stash({
author => $reqs->{author},
#release => $release->{hits}->{hits}->[0]->{_source},
rating => $reqs->{rating}->{ratings}->{ $data->{distribution} },
distribution => $reqs->{distribution},
versions =>
[ map { $_->{fields} } @{ $reqs->{versions}->{hits}->{hits} } ],
( $changes ? (last_version_changes => $changes) : () ),
});
}

Expand Down
20 changes: 19 additions & 1 deletion root/release.html
Expand Up @@ -142,6 +142,24 @@
<% IF root.size %><strong>Other files</strong>
<% FOREACH file IN root %>
<div><strong><a href="/<% file.documentation ? "module" : "source" %>/<% release.author; '/'; release.name; '/'; file.name %>"><% file.name %></a></strong></div>
<% END; END %>
<% END %><br><% END %>

<% IF last_version_changes; SET v = last_version_changes; %>
<strong>Changes for version <% v.version %></strong>
<div class="last-changes">
<% IF v.note %><div class="note"><% v.note %></div><% END %>
<ul>
<% FOREACH group IN v.groups; SET changes = v.changes(group) %>
<li><span class="group-header"><% group %></span>
<ul class="changes">
<% FOREACH change IN changes %>
<li><% change %></li>
<% END %>
</ul>
</li>

<% END %>
</ul>
</div>
<% END %>
</div>
13 changes: 13 additions & 0 deletions root/static/css/style.css
Expand Up @@ -1039,3 +1039,16 @@ div.qtip-github table th {
#contributors .contributor * {
vertical-align: top;
}


/* Changes in release page
* See /release/CPAN-Changes for example
*/
.last-changes .group-header {
font-weight: bold;
}
.last-changes .changes {
margin-left: 1em;
padding-left: 1em;
list-style: square;
}
6 changes: 6 additions & 0 deletions t/controller/release.t
Expand Up @@ -24,8 +24,14 @@ test_psgi app, sub {
ok( $tx->find_value('//a[@href="/release/Moose"]'),
'contains permalink to resource' );

# Figure out version for Changes test
my ($author, $module) = split m|/|, $tx->find_value('//strong/big');
$module =~ s/[^\d\w_.-]//g;
my ($version) = (reverse split /-/, $module);

# Confirm that the headings in the content div are in the expected order.
my @headings = ( 'Documentation', 'Modules', 'Provides', 'Examples', 'Other files' );
push @headings, 'Changes for version ' . $version ;
my $heading = 0;

$tx->ok( '//div[@class="content"]/strong', sub {
Expand Down

0 comments on commit 69f6d46

Please sign in to comment.