Skip to content

Commit 4540732

Browse files
authored
Merge pull request #816 from metacpan/haarg/author-prefix-search
author prefix search endpoint
2 parents 00246f4 + aa133c5 commit 4540732

File tree

4 files changed

+55
-12
lines changed

4 files changed

+55
-12
lines changed

cpanfile

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ requires 'CPAN::DistnameInfo', '0.12';
88
requires 'CPAN::Meta', '2.150005'; # Avoid issues with List::Util dep under carton install.
99
requires 'CPAN::Meta::Requirements', '2.140';
1010
requires 'CPAN::Meta::YAML', '0.018';
11+
requires 'CPAN::Repository::Perms';
1112
requires 'Captcha::reCAPTCHA', '0.99';
1213
requires 'Catalyst', '5.90103';
1314
requires 'Catalyst::Action::RenderView';
@@ -25,20 +26,19 @@ requires 'Catalyst::Utils';
2526
requires 'Catalyst::View';
2627
requires 'Catalyst::View::JSON', '0.36';
2728
requires 'CatalystX::Component::Traits';
29+
requires 'CatalystX::Fastly::Role::Response', '0.06';
2830
requires 'CatalystX::InjectComponent';
2931
requires 'CatalystX::RoleApplicator';
30-
requires 'CatalystX::Fastly::Role::Response', '0.06';
31-
requires 'CPAN::Repository::Perms';
3232
requires 'Config::ZOMG', '>=', '1.000000';
3333
requires 'Const::Fast';
3434
requires 'Cpanel::JSON::XS', '3.0115';
3535
requires 'Cwd';
36-
requires 'Data::Printer', '0.38';
3736
requires 'DBD::SQLite', '>=1.50';
3837
requires 'DBI', '1.616';
3938
requires 'Data::DPath';
4039
requires 'Data::Dump';
4140
requires 'Data::Dumper';
41+
requires 'Data::Printer', '0.38';
4242
requires 'DateTime', '1.24';
4343
requires 'DateTime::Format::ISO8601';
4444
requires 'Devel::ArgNames';
@@ -99,18 +99,18 @@ requires 'Module::Load';
9999
requires 'Module::Metadata', '1.000022';
100100
requires 'Module::Pluggable';
101101
requires 'Module::Runtime';
102-
requires 'Moose', ' >= 2.1403';
103102
requires 'Mojo::Pg', '>= 4.08';
103+
requires 'Moose', ' >= 2.1403';
104104
requires 'Moose::Role';
105105
requires 'Moose::Util';
106106
requires 'MooseX::Aliases';
107107
requires 'MooseX::Attribute::Deflator', '2.1.5';
108108
requires 'MooseX::ChainedAccessors';
109109
requires 'MooseX::ClassAttribute';
110+
requires 'MooseX::Fastly::Role', '0.02';
110111
requires 'MooseX::Getopt', '0.71';
111112
requires 'MooseX::Getopt::Dashes';
112113
requires 'MooseX::Getopt::OptionTypeMap';
113-
requires 'MooseX::Fastly::Role', '0.02';
114114
requires 'MooseX::StrictConstructor';
115115
requires 'MooseX::Types';
116116
requires 'MooseX::Types::Common::String';
@@ -130,8 +130,8 @@ requires 'Parse::CPAN::Packages::Fast', '0.09';
130130
requires 'Parse::CSV', '2.04';
131131
requires 'Parse::PMFile', '0.41';
132132
requires 'Path::Class', '>= 0.36';
133-
requires 'Path::Iterator::Rule', '>=1.011';
134133
requires 'Path::Class::File';
134+
requires 'Path::Iterator::Rule', '>=1.011';
135135
requires 'PerlIO::gzip';
136136
requires 'Pithub', '0.01033';
137137
requires 'Plack', '1.0039';
@@ -158,8 +158,8 @@ requires 'Regexp::Common::time';
158158
requires 'Safe', '2.35'; # bug fixes (used by Parse::PMFile)
159159
requires 'Search::Elasticsearch', '== 2.03';
160160
requires 'Starman';
161-
requires 'Time::Local';
162161
requires 'Throwable::Error';
162+
requires 'Time::Local';
163163
requires 'Try::Tiny', '0.24';
164164
requires 'URI', '1.71';
165165
requires 'URI::Escape';
@@ -178,17 +178,17 @@ requires 'version', '0.9901';
178178
requires 'warnings';
179179

180180
test_requires 'App::Prove';
181+
test_requires 'CPAN::Faker', '0.010';
181182
test_requires 'Code::TidyAll', '>= 0.47';
182183
test_requires 'Code::TidyAll::Plugin::UniqueLines';
183-
test_requires 'CPAN::Faker', '0.010';
184-
test_requires 'Devel::Confess';
185-
test_requires 'Module::Faker', '0.015';
186-
test_requires 'Module::Faker::Dist', '0.010';
187184
test_requires 'Config::General';
185+
test_requires 'Devel::Confess';
188186
test_requires 'File::Copy';
189187
test_requires 'HTTP::Cookies';
190188
test_requires 'LWP::ConsoleLogger::Easy';
191189
test_requires 'MetaCPAN::Client', '>=', '2.017000';
190+
test_requires 'Module::Faker', '0.015';
191+
test_requires 'Module::Faker::Dist', '0.010';
192192
test_requires 'Perl::Tidy' => '20180220';
193193
test_requires 'Plack::Test::Agent';
194194
test_requires 'Test::Code::TidyAll';

lib/MetaCPAN/Document/Author/Set.pm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ has query_author => (
1111
isa => 'MetaCPAN::Query::Author',
1212
lazy => 1,
1313
builder => '_build_query_author',
14-
handles => [qw< by_ids by_user search >],
14+
handles => [qw< by_ids by_user search prefix_search >],
1515
);
1616

1717
sub _build_query_author {

lib/MetaCPAN/Query/Author.pm

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,5 +105,38 @@ sub search {
105105
};
106106
}
107107

108+
sub prefix_search {
109+
my ( $self, $query, $opts ) = @_;
110+
my $size = $opts->{size} // 500;
111+
my $from = $opts->{from} // 0;
112+
113+
my $body = {
114+
query => {
115+
prefix => {
116+
pauseid => $query,
117+
},
118+
},
119+
size => $size,
120+
from => $from,
121+
};
122+
123+
my $ret = $self->es->search(
124+
index => $self->index_name,
125+
type => 'author',
126+
body => $body,
127+
);
128+
129+
my @authors = map {
130+
single_valued_arrayref_to_scalar( $_->{_source} );
131+
+{ %{ $_->{_source} }, id => $_->{_id} }
132+
} @{ $ret->{hits}{hits} };
133+
134+
return +{
135+
authors => \@authors,
136+
took => $ret->{took},
137+
total => $ret->{hits}{total},
138+
};
139+
}
140+
108141
__PACKAGE__->meta->make_immutable;
109142
1;

lib/MetaCPAN/Server/Controller/Author.pm

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,14 @@ sub by_users : Path('by_user') : Args(0) {
6161
$self->model($c)->by_user( $c->read_param('user') ) );
6262
}
6363

64+
# /author/by_prefix/PAUSE_ID_PREFIX
65+
sub by_prefix : Path('by_prefix') : Args(1) {
66+
my ( $self, $c, $prefix ) = @_;
67+
my ($size) = $c->read_param('size')->[0] // 500;
68+
my ($from) = $c->read_param('from')->[0] // 0;
69+
70+
$c->stash_or_detach( $self->model($c)
71+
->prefix_search( $prefix, { size => $size, from => $from } ) );
72+
}
73+
6474
1;

0 commit comments

Comments
 (0)