Skip to content

Commit 9fa2341

Browse files
committed
Serate methods from their data types
1 parent ffd33d9 commit 9fa2341

File tree

2 files changed

+72
-54
lines changed

2 files changed

+72
-54
lines changed

lib/MetaCPAN/Web/Controller/Feed.pm

+34-25
Original file line numberDiff line numberDiff line change
@@ -72,18 +72,21 @@ sub author : Chained('index') PathPart Args(1) {
7272

7373
my $author_cv = $c->model('API::Author')->get($author);
7474
my $releases_cv = $c->model('API::Release')->latest_by_author($author);
75+
my $release_data
76+
= [ map { $_->{fields} } @{ $releases_cv->recv->{hits}{hits} } ];
7577
my $author_info = $author_cv->recv;
7678
my $faves_cv
7779
= $c->model('API::Favorite')->by_user( $author_info->{user} );
78-
my $faves_data = $faves_cv->recv;
79-
my $data = [
80-
sort { $b->{date} cmp $a->{date} }
81-
map { $_->{fields} } @{ $faves_data->{hits}{hits} },
82-
@{ $releases_cv->recv->{hits}{hits} }
83-
];
80+
my $faves_data
81+
= [ map { $_->{fields} } @{ $faves_cv->recv->{hits}{hits} } ];
82+
8483
$c->stash->{feed} = $self->build_feed(
8584
title => "Recent CPAN activity of $author - MetaCPAN",
86-
entries => $self->build_author_entry( $author, $data ),
85+
entries => [
86+
sort { $b->{date} cmp $a->{date} }
87+
@{ $self->_format_release_entries($release_data) },
88+
@{ $self->_format_favorite_entries( $author, $faves_data ) }
89+
],
8790
);
8891
}
8992

@@ -123,26 +126,32 @@ sub build_feed {
123126
return $feed->as_xml;
124127
}
125128

126-
sub build_author_entry {
127-
my ( $self, $author, $activity ) = @_;
128-
foreach my $item ( @{$activity} ) {
129-
my $dist = $item->{distribution};
130-
$dist =~ s/-/::/g;
131-
$item->{abstract}
132-
||= "$author ++ed $item->{distribution} from $item->{author}";
133-
$item->{link}
134-
= $item->{name}
135-
? join( '/',
129+
sub _format_release_entries {
130+
my ( $self, $releases ) = @_;
131+
my @release_data;
132+
foreach my $item ( @{$releases} ) {
133+
$item->{link} = join( '/',
136134
'https://metacpan.org', 'release',
137-
$item->{author}, $item->{name} )
138-
: join( '/', 'https://metacpan.org', 'pod', $dist );
139-
$item->{name}
140-
= $item->{name}
141-
? "$author has released $item->{name}"
142-
: "$author ++ed $item->{distribution}";
143-
unless ( $item->{author} eq $author ) { $item->{author} = $author }
135+
$item->{author}, $item->{name} );
136+
$item->{name} = "$item->{author} has released $item->{name}";
137+
push( @release_data, $item );
138+
}
139+
return \@release_data;
140+
}
141+
142+
sub _format_favorite_entries {
143+
my ( $self, $author, $data ) = @_;
144+
my @fav_data;
145+
foreach my $fav ( @{$data} ) {
146+
$fav->{abstract}
147+
= "$author ++ed $fav->{distribution} from $fav->{author}";
148+
$fav->{author} = $author;
149+
$fav->{link} = join( '/',
150+
'https://metacpan.org', 'release', $fav->{distribution} );
151+
$fav->{name} = "$author ++ed $fav->{distribution}";
152+
push( @fav_data, $fav );
144153
}
145-
return $activity;
154+
return \@fav_data;
146155
}
147156

148157
sub end : Private {

t/controller/feed.t

+38-29
Original file line numberDiff line numberDiff line change
@@ -53,56 +53,65 @@ sub valid_xml {
5353
return $tx;
5454
}
5555

56-
subtest 'get correct author entry data format' => sub {
57-
my $feed = MetaCPAN::Web::Controller::Feed->new();
58-
my $data = [
59-
{
60-
abstract => "A brand new module from PERLHACKER",
61-
author => "PERLHACKER",
62-
date => "2012-12-12T05:17:44.000Z",
63-
distribution => "Some-New-Module",
64-
name => "Some-New-Module-0.001",
65-
status => "latest",
66-
},
56+
my $feed = MetaCPAN::Web::Controller::Feed->new();
57+
58+
subtest 'get correct author favorite data format' => sub {
59+
my $favorite_data = [
6760
{
68-
author => "ABIGAIL",
69-
date => "2014-01-16T21:51:00.000Z",
70-
distribution => "perl",
61+
author => 'DOLMEN',
62+
date => '2013-07-05T14:41:26.000Z',
63+
distribution => 'Git-Sub',
7164
}
7265
];
73-
my $entry = $feed->build_author_entry( 'PERLHACKER', $data );
66+
67+
my $entry = $feed->_format_favorite_entries( 'PERLHACKER', $favorite_data );
7468
is(
7569
$entry->[0]->{abstract},
76-
'A brand new module from PERLHACKER',
70+
'PERLHACKER ++ed Git-Sub from DOLMEN',
7771
'get correct release abstract'
7872
);
7973
is(
8074
$entry->[0]->{link},
81-
'https://metacpan.org/release/PERLHACKER/Some-New-Module-0.001',
75+
'https://metacpan.org/release/Git-Sub',
8276
'get correct release link'
8377
);
8478
is(
8579
$entry->[0]->{name},
86-
'PERLHACKER has released Some-New-Module-0.001',
80+
'PERLHACKER ++ed Git-Sub',
8781
'get correct release title'
8882
);
8983
is( $entry->[0]->{author}, 'PERLHACKER', 'get correct author name' );
84+
};
85+
86+
subtest 'get correct author release data format' => sub {
87+
my $data = [
88+
{
89+
abstract => 'Easy OO access to the FreshBooks.com API',
90+
author => 'OALDERS',
91+
date => '2014-05-03T03:06:44.000Z',
92+
distribution => 'Net-FreshBooks-API',
93+
name => 'Net-FreshBooks-API-0.24',
94+
status => 'latest',
95+
}
96+
];
97+
98+
my $entry = $feed->_format_release_entries($data);
9099
is(
91-
$entry->[1]->{abstract},
92-
'PERLHACKER ++ed perl from ABIGAIL',
93-
'get correct favorite abstract'
100+
$entry->[0]->{abstract},
101+
'Easy OO access to the FreshBooks.com API',
102+
'get correct release abstract'
94103
);
95104
is(
96-
$entry->[1]->{link},
97-
'https://metacpan.org/pod/perl',
98-
'get correct link to ++ed module'
105+
$entry->[0]->{link},
106+
'https://metacpan.org/release/OALDERS/Net-FreshBooks-API-0.24',
107+
'get correct release link'
99108
);
100109
is(
101-
$entry->[1]->{name},
102-
'PERLHACKER ++ed perl',
103-
'get correct ++ed title'
110+
$entry->[0]->{name},
111+
'OALDERS has released Net-FreshBooks-API-0.24',
112+
'get correct release title'
104113
);
105-
is( $entry->[1]->{author},
106-
'PERLHACKER', 'author on feed should be who ++' );
114+
is( $entry->[0]->{author}, 'OALDERS', 'get correct author name' );
107115
};
116+
108117
done_testing;

0 commit comments

Comments
 (0)