File Coverage

lib/Net/API/CPAN/Module.pm
Criterion Covered Total %
statement 57 73 78.0
branch 32 64 50.0
condition 0 14 0.0
subroutine 8 13 61.5
pod 5 5 100.0
total 102 169 60.3


line stmt bran cond sub pod time code
1             ##----------------------------------------------------------------------------
2             ## Meta CPAN API - ~/lib/Net/API/CPAN/Module.pm
3             ## Version v0.1.0
4             ## Copyright(c) 2023 DEGUEST Pte. Ltd.
5             ## Author: Jacques Deguest <jack@deguest.jp>
6             ## Created 2023/07/25
7             ## Modified 2023/09/25
8             ## All rights reserved
9             ##
10             ##
11             ## This program is free software; you can redistribute it and/or modify it
12             ## under the same terms as Perl itself.
13             ##----------------------------------------------------------------------------
14             # This module file has been automatically generated. Any change made here will be lost.
15             # Edit the script in ./build/build_modules.pl instead
16             package Net::API::CPAN::Module;
17             BEGIN
18             {
19 2     2   227153 use strict;
  2         11  
  2         61  
20 2     2   9 use warnings;
  2         3  
  2         55  
21 2     2   11 use parent qw( Net::API::CPAN::File );
  2         4  
  2         13  
22 2     2   98 use vars qw( $VERSION );
  2         11  
  2         80  
23 2     2   31 our $VERSION = 'v0.1.0';
24             };
25              
26 2     2   8 use strict;
  2         2  
  2         34  
27 2     2   7 use warnings;
  2     0   3  
  2         1293  
28              
29             sub init
30             {
31 0     1 1 0 my $self = shift( @_ );
32 1 50       9333 $self->{abstract} = undef unless( CORE::exists( $self->{abstract} ) );
33 1 50       80 $self->{author} = undef unless( CORE::exists( $self->{author} ) );
34 1 50       4 $self->{authorized} = undef unless( CORE::exists( $self->{authorized} ) );
35 1 50       4 $self->{binary} = undef unless( CORE::exists( $self->{binary} ) );
36 1 50       4 $self->{date} = undef unless( CORE::exists( $self->{date} ) );
37 1 50       3 $self->{deprecated} = undef unless( CORE::exists( $self->{deprecated} ) );
38 1 50       5 $self->{description} = undef unless( CORE::exists( $self->{description} ) );
39 1 50       5 $self->{dir} = undef unless( CORE::exists( $self->{dir} ) );
40 1 50       4 $self->{directory} = undef unless( CORE::exists( $self->{directory} ) );
41 1 50       4 $self->{dist_fav_count} = undef unless( CORE::exists( $self->{dist_fav_count} ) );
42 1 50       3 $self->{distribution} = undef unless( CORE::exists( $self->{distribution} ) );
43 1 50       4 $self->{documentation} = undef unless( CORE::exists( $self->{documentation} ) );
44 1 50       4 $self->{download_url} = undef unless( CORE::exists( $self->{download_url} ) );
45 1 50       2 $self->{id} = undef unless( CORE::exists( $self->{id} ) );
46 1 50       6 $self->{indexed} = undef unless( CORE::exists( $self->{indexed} ) );
47 1 50       4 $self->{level} = undef unless( CORE::exists( $self->{level} ) );
48 1 50       5 $self->{maturity} = undef unless( CORE::exists( $self->{maturity} ) );
49 1 50       2 $self->{mime} = undef unless( CORE::exists( $self->{mime} ) );
50 1 50       4 $self->{module} = [] unless( CORE::exists( $self->{module} ) );
51 1 50       4 $self->{name} = undef unless( CORE::exists( $self->{name} ) );
52 1         4 $self->{object} = 'module';
53 1 50       2 $self->{path} = undef unless( CORE::exists( $self->{path} ) );
54 1 50       4 $self->{pod} = undef unless( CORE::exists( $self->{pod} ) );
55 1 50       4 $self->{pod_lines} = undef unless( CORE::exists( $self->{pod_lines} ) );
56 1 50       6 $self->{release} = undef unless( CORE::exists( $self->{release} ) );
57 1 50       3 $self->{sloc} = undef unless( CORE::exists( $self->{sloc} ) );
58 1 50       4 $self->{slop} = undef unless( CORE::exists( $self->{slop} ) );
59 1 50       4 $self->{stat} = undef unless( CORE::exists( $self->{stat} ) );
60 1 50       4 $self->{status} = undef unless( CORE::exists( $self->{status} ) );
61 1 50       4 $self->{suggest} = undef unless( CORE::exists( $self->{suggest} ) );
62 1 50       3 $self->{version} = '' unless( CORE::exists( $self->{version} ) );
63 1 50       3 $self->{version_numified} = undef unless( CORE::exists( $self->{version_numified} ) );
64 1         5 $self->{_init_strict_use_sub} = 1;
65 1         2 $self->{_exception_class} = 'Net::API::CPAN::Exception';
66 1 50       3 $self->SUPER::init( @_ ) || return( $self->pass_error );
67 1         7 $self->{fields} = [qw(
68             abstract author authorized binary date deprecated description dir directory
69             dist_fav_count distribution documentation download_url id indexed level maturity
70             mime module name path pod pod_lines release sloc slop stat status suggest version
71             version_numified
72             )];
73 1         12 return( $self );
74             }
75              
76             # NOTE: sub abstract is inherited from Net::API::CPAN::File
77              
78             # NOTE: sub author is inherited from Net::API::CPAN::File
79              
80             # NOTE: sub authorized is inherited from Net::API::CPAN::File
81              
82             # NOTE: sub binary is inherited from Net::API::CPAN::File
83              
84             # NOTE: sub date is inherited from Net::API::CPAN::File
85              
86             # NOTE: sub deprecated is inherited from Net::API::CPAN::File
87              
88             # NOTE: sub description is inherited from Net::API::CPAN::File
89              
90             # NOTE: sub dir is inherited from Net::API::CPAN::File
91              
92             # NOTE: sub directory is inherited from Net::API::CPAN::File
93              
94             # NOTE: sub dist_fav_count is inherited from Net::API::CPAN::File
95              
96             # NOTE: sub distribution is inherited from Net::API::CPAN::File
97              
98             # NOTE: sub documentation is inherited from Net::API::CPAN::File
99              
100             # NOTE: sub download_url is inherited from Net::API::CPAN::File
101              
102             # NOTE: sub id is inherited from Net::API::CPAN::File
103              
104             # NOTE: sub indexed is inherited from Net::API::CPAN::File
105              
106             # NOTE: sub level is inherited from Net::API::CPAN::File
107              
108             # NOTE: sub maturity is inherited from Net::API::CPAN::File
109              
110             sub metacpan_url
111             {
112 1     0 1 3 my $self = shift( @_ );
113 0   0       my $author = $self->author ||
114             return( $self->error( "No module author is set to return a Meta CPAN URL for this module." ) );
115 0   0       my $release = $self->release ||
116             return( $self->error( "No module release is set to return a Meta CPAN URL for this module." ) );
117 0   0       my $path = $self->path ||
118             return( $self->error( "No module path is set to return a Meta CPAN URL for this module." ) );
119 0           my $api_uri = $self->api->api_uri->clone;
120 0           $api_uri->path( "/pod/$author/$release/$path" );
121 0           return( $api_uri );
122             }
123              
124             # NOTE: sub mime is inherited from Net::API::CPAN::File
125              
126             # NOTE: sub module is inherited from Net::API::CPAN::File
127              
128             # NOTE: sub name is inherited from Net::API::CPAN::File
129              
130 0     0 1   sub object { return( shift->_set_get_scalar_as_object( 'object', @_ ) ); }
131              
132             sub package
133             {
134 0     0 1   my $self = shift( @_ );
135 0   0       my $doc = $self->documentation ||
136             return( $self->error( "No documentation module class is set to call Net::API::CPAN->package" ) );
137 0   0       my $result = $self->api->package( $doc ) || return( $self->pass_error );
138 0           return( $result );
139             }
140              
141             # NOTE: sub path is inherited from Net::API::CPAN::File
142              
143             sub permission
144             {
145 0     0 1   my $self = shift( @_ );
146 0   0       my $doc = $self->documentation ||
147             return( $self->error( "No documentation module class is set to call Net::API::CPAN->package" ) );
148 0   0       my $result = $self->api->permission( $doc ) || return( $self->pass_error );
149 0           return( $result );
150             }
151              
152             # NOTE: sub pod is inherited from Net::API::CPAN::File
153              
154             # NOTE: sub pod_lines is inherited from Net::API::CPAN::File
155              
156             # NOTE: sub release is inherited from Net::API::CPAN::File
157              
158             # NOTE: sub sloc is inherited from Net::API::CPAN::File
159              
160             # NOTE: sub slop is inherited from Net::API::CPAN::File
161              
162             # NOTE: sub stat is inherited from Net::API::CPAN::File
163              
164             # NOTE: sub status is inherited from Net::API::CPAN::File
165              
166             # NOTE: sub suggest is inherited from Net::API::CPAN::File
167              
168             # NOTE: sub version is inherited from Net::API::CPAN::File
169              
170             # NOTE: sub version_numified is inherited from Net::API::CPAN::File
171              
172             1;
173             # NOTE: POD
174             __END__
175              
176             =encoding utf-8
177              
178             =head1 NAME
179              
180             Net::API::CPAN::Module - Meta CPAN API Module Class
181              
182             =head1 SYNOPSIS
183              
184             use Net::API::CPAN::Module;
185             my $obj = Net::API::CPAN::Module->new( {
186             abstract => "Japan Folklore Object Class",
187             author => "MOMOTARO",
188             authorized => \1,
189             binary => \0,
190             date => "2023-07-29T05:10:12",
191             deprecated => \0
192             ,
193             description => "Folklore::Japan is a totally fictious perl 5 module designed to serve as an example for the MetaCPAN API.",
194             directory => \0
195             ,
196             dist_fav_count => 1,
197             distribution => "Folklore::Japan",
198             documentation => "Folklore::Japan",
199             download_url => "https://cpan.metacpan.org/authors/id/M/MO/MOMOTARO/Folklore-Japan-v1.2.3.tar.gz",
200             id => "l0tsOf1192fuN100",
201             indexed => \1
202             ,
203             level => 1,
204             maturity => "released",
205             mime => "text/x-script.perl-module",
206             module => [
207             {
208             associated_pod => "MOMOTARO/Folklore-Japan-v1.2.3/lib/Folklore/Japan.pm",
209             authorized => \1
210             ,
211             indexed => \1
212             ,
213             name => "Folklore::Japan",
214             version => "v1.2.3",
215             version_numified => "1.002003",
216             },
217             ],
218             name => "Japan.pm",
219             path => "lib/Folklore/Japan.pm",
220             pod => "NAME Folklore::Japan - Japan Folklore Object Class VERSION version v1.2.3 SYNOPSIS use Folklore::Japan; my \$fun = Folklore::Japan->new; DESCRIPTION This is an imaginary class object to Japan folklore to only serve as dummy example AUTHOR Momo Taro <momo.taro\@example.jp> COPYRIGHT AND LICENSE This software is copyright (c) 2023 by Okayama, Inc.. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.",
221             pod_lines => [
222             [
223             1192,
224             1868,
225             ],
226             ],
227             release => "Folklore-Japan-v1.2.3",
228             sloc => 202,
229             slop => 637,
230             stat => {
231             gid => 12345,
232             mode => 33188,
233             mtime => 1690618397,
234             size => 10240,
235             uid => 16790,
236             },
237             status => "latest",
238             suggest => {
239             input => [
240             "Folklore::Japan",
241             ],
242             payload => {
243             doc_name => "Folklore::Japan",
244             },
245             weight => 985,
246             },
247             version => "v1.2.3",
248             version_numified => "1.002003",
249             } ) || die( Net::API::CPAN::Module->error );
250            
251             my $string = $obj->abstract;
252             my $string = $obj->author;
253             my $bool = $obj->authorized;
254             my $bool = $obj->binary;
255             my $date = $obj->date;
256             my $bool = $obj->deprecated;
257             my $string = $obj->description;
258             my $string = $obj->dir;
259             my $bool = $obj->directory;
260             my $num = $obj->dist_fav_count;
261             my $string = $obj->distribution;
262             my $string = $obj->documentation;
263             my $uri = $obj->download_url;
264             my $string = $obj->id;
265             my $bool = $obj->indexed;
266             my $num = $obj->level;
267             my $string = $obj->maturity;
268             my $uri = $obj->metacpan_url;
269             my $string = $obj->mime;
270             my $array = $obj->module;
271             foreach my $this ( @$array )
272             {
273             my $scalar = $this->associated_pod;
274             my $boolean = $this->authorized;
275             my $boolean = $this->indexed;
276             my $scalar = $this->name;
277             my $scalar = $this->version;
278             my $number = $this->version_numified;
279             }
280             my $string = $obj->name;
281             my $str = $obj->object;
282             my $this = $obj->package;
283             my $string = $obj->path;
284             my $this = $obj->permission;
285             my $string = $obj->pod;
286             my $string = $obj->pod_lines;
287             my $string = $obj->release;
288             my $num = $obj->sloc;
289             my $num = $obj->slop;
290             my $this = $obj->stat;
291             my $integer = $obj->stat->gid;
292             my $integer = $obj->stat->mode;
293             my $datetime = $obj->stat->mtime;
294             my $integer = $obj->stat->size;
295             my $integer = $obj->stat->uid;
296             my $string = $obj->status;
297             my $this = $obj->suggest;
298             my $array = $obj->suggest->input;
299             my $hash = $obj->suggest->payload;
300             my $integer = $obj->suggest->weight;
301             my $vers = $obj->version;
302             my $num = $obj->version_numified;
303              
304             =head1 VERSION
305              
306             v0.1.0
307              
308             =head1 DESCRIPTION
309              
310             This class serves to retrieve and manipulate modules.
311              
312             It inherits from L<Net::API::CPAN::Generic>
313              
314             =head1 CONSTRUCTOR
315              
316             =head2 new
317              
318             Provided with an hash or hash reference of parameters, and this instantiates a new C<Net::API::CPAN::Module> object.
319              
320             The parameters that can be provided bear the same name and supports the same values as the methods below.
321              
322             =head1 METHODS
323              
324             =head2 abstract
325              
326             $obj->abstract( "Japan Folklore Object Class" );
327             my $string = $obj->abstract;
328              
329             Sets or gets a string and returns a L<scalar object|Module::Generic::Scalar>, even if there is no value.
330              
331             =head2 author
332              
333             $obj->author( "MOMOTARO" );
334             my $string = $obj->author;
335              
336             Sets or gets a string and returns a L<scalar object|Module::Generic::Scalar>, even if there is no value.
337              
338             =head2 authorized
339              
340             $obj->authorized(1);
341             my $bool = $obj->authorized;
342              
343             Sets or gets a boolean value, and returns a L<boolean object|Module::Generic::Boolean> or C<undef> if no value is set.
344              
345             =head2 binary
346              
347             $obj->binary(1);
348             my $bool = $obj->binary;
349              
350             Sets or gets a boolean value, and returns a L<boolean object|Module::Generic::Boolean> or C<undef> if no value is set.
351              
352             =head2 date
353              
354             $obj->date( "2023-07-29T05:10:12" );
355             my $datetime_obj = $obj->date;
356              
357             Sets or gets a datetime value, and returns a L<DateTime object|DateTime> that stringifies to the format that was provided with the string set (usally an ISO 8601 datetime format) or C<undef> if no value is set.
358              
359             =head2 deprecated
360              
361             $obj->deprecated(1);
362             my $bool = $obj->deprecated;
363              
364             Sets or gets a boolean value, and returns a L<boolean object|Module::Generic::Boolean> or C<undef> if no value is set.
365              
366             =head2 description
367              
368             $obj->description( "Folklore::Japan is a totally fictious perl 5 module designed to serve as an example for the MetaCPAN API." );
369             my $string = $obj->description;
370              
371             Sets or gets a string and returns a L<scalar object|Module::Generic::Scalar>, even if there is no value.
372              
373             =head2 dir
374              
375             Sets or gets a string and returns a L<scalar object|Module::Generic::Scalar>, even if there is no value.
376              
377             =head2 directory
378              
379             $obj->directory(1);
380             my $bool = $obj->directory;
381              
382             Sets or gets a boolean value, and returns a L<boolean object|Module::Generic::Boolean> or C<undef> if no value is set.
383              
384             =head2 dist_fav_count
385              
386             $obj->dist_fav_count(1);
387             my $number = $obj->dist_fav_count;
388              
389             Sets or gets an integer value, and returns a L<number object|Module::Generic::Number> or C<undef> if no value is set.
390              
391             =head2 distribution
392              
393             $obj->distribution( "Folklore::Japan" );
394             my $string = $obj->distribution;
395              
396             Sets or gets a string and returns a L<scalar object|Module::Generic::Scalar>, even if there is no value.
397              
398             =head2 documentation
399              
400             $obj->documentation( "Folklore::Japan" );
401             my $string = $obj->documentation;
402              
403             Sets or gets a string and returns a L<scalar object|Module::Generic::Scalar>, even if there is no value.
404              
405             =head2 download_url
406              
407             $obj->download_url( "https://cpan.metacpan.org/authors/id/M/MO/MOMOTARO/Folklore-Japan-v1.2.3.tar.gz" );
408             my $uri = $obj->download_url;
409              
410             Sets or gets an L<URI>, and returns an L<URI object|URI> or C<undef> if no value is set.
411              
412             =head2 id
413              
414             $obj->id( "l0tsOf1192fuN100" );
415             my $string = $obj->id;
416              
417             Sets or gets a string and returns a L<scalar object|Module::Generic::Scalar>, even if there is no value.
418              
419             =head2 indexed
420              
421             $obj->indexed(1);
422             my $bool = $obj->indexed;
423              
424             Sets or gets a boolean value, and returns a L<boolean object|Module::Generic::Boolean> or C<undef> if no value is set.
425              
426             =head2 level
427              
428             $obj->level(1);
429             my $number = $obj->level;
430              
431             Sets or gets an integer value, and returns a L<number object|Module::Generic::Number> or C<undef> if no value is set.
432              
433             =head2 maturity
434              
435             $obj->maturity( "released" );
436             my $string = $obj->maturity;
437              
438             Sets or gets a string and returns a L<scalar object|Module::Generic::Scalar>, even if there is no value.
439              
440             =head2 metacpan_url
441              
442             Returns a link, as an L<URI> object, to the module's page on MetaCPAN, or C<undef> if no module L<author|/author>, L<release|/release>. or L<path|/path> is currently set.
443              
444             =head2 mime
445              
446             $obj->mime( "text/x-script.perl-module" );
447             my $string = $obj->mime;
448              
449             Sets or gets a string and returns a L<scalar object|Module::Generic::Scalar>, even if there is no value.
450              
451             =head2 module
452              
453             $obj->module( [
454             {
455             associated_pod => "MOMOTARO/Folklore-Japan-v1.2.3/lib/Folklore/Japan.pm",
456             authorized => \1,
457             indexed => $VAR1->[0]{authorized},
458             name => "Folklore::Japan",
459             version => "v1.2.3",
460             version_numified => "1.002003",
461             },
462             ] );
463             my $array = $obj->module;
464             foreach my $this ( @$array )
465             {
466             $this->associated_pod( "MOMOTARO/Folklore-Japan-v1.2.3/lib/Folklore/Japan.pm" );
467             my $scalar = $this->associated_pod;
468             $this->authorized( \1 );
469             my $boolean = $this->authorized;
470             $this->indexed( \1 );
471             my $boolean = $this->indexed;
472             $this->name( "Folklore::Japan" );
473             my $scalar = $this->name;
474             $this->version( "v1.2.3" );
475             my $scalar = $this->version;
476             $this->version_numified( 1.002003 );
477             my $number = $this->version_numified;
478             }
479              
480             Sets or gets an array of dynamic class objects with class name C<Net::API::CPAN::Module::Module> and having the folowing properties also accessible as methods, and returns an L<array object|Module::Generic::Array> even if there is no value.
481              
482             A C<Net::API::CPAN::Module::Module> object will be instantiated with each value from the array provided and replace said value.
483              
484             =over 4
485              
486             =item * C<associated_pod> scalar_as_object
487              
488             =item * C<authorized> boolean (L<boolean object|Module::Generic::Boolean>)
489              
490             =item * C<indexed> boolean (L<boolean object|Module::Generic::Boolean>)
491              
492             =item * C<name> scalar_as_object
493              
494             =item * C<version> scalar_as_object
495              
496             =item * C<version_numified> number
497              
498             =back
499              
500             =head2 name
501              
502             $obj->name( "Japan.pm" );
503             my $string = $obj->name;
504              
505             Sets or gets a string and returns a L<scalar object|Module::Generic::Scalar>, even if there is no value.
506              
507             =head2 object
508              
509             Returns the object type for this class, which is C<module>
510              
511             =head2 package
512              
513             Returns an L<Net::API::CPAN::Package> object for this module, or upon error, sets an L<error object|Net::API::CPAN::Exception> and returns C<undef> in scalar context or an empty list in list context.
514              
515             An error is returned if the L<documentation property|/documentation> is not set.
516              
517             =head2 path
518              
519             $obj->path( "lib/Folklore/Japan.pm" );
520             my $string = $obj->path;
521              
522             Sets or gets a string and returns a L<scalar object|Module::Generic::Scalar>, even if there is no value.
523              
524             =head2 permission
525              
526             Returns an L<Net::API::CPAN::Permission> object for this module, or upon error, sets an L<error object|Net::API::CPAN::Exception> and returns C<undef> in scalar context or an empty list in list context.
527              
528             An error is returned if the L<documentation property|/documentation> is not set.
529              
530             =head2 pod
531              
532             $obj->pod( "NAME Folklore::Japan - Japan Folklore Object Class VERSION version v1.2.3 SYNOPSIS use Folklore::Japan; my \$fun = Folklore::Japan->new; DESCRIPTION This is an imaginary class object to Japan folklore to only serve as dummy example AUTHOR Momo Taro <momo.taro\@example.jp> COPYRIGHT AND LICENSE This software is copyright (c) 2023 by Okayama, Inc.. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself." );
533             my $string = $obj->pod;
534              
535             Sets or gets a string and returns a L<scalar object|Module::Generic::Scalar>, even if there is no value.
536              
537             =head2 pod_lines
538              
539             $obj->pod_lines( [
540             [
541             1192,
542             1868,
543             ],
544             ] );
545             my $string = $obj->pod_lines;
546              
547             Sets or gets a string and returns a L<scalar object|Module::Generic::Scalar>, even if there is no value.
548              
549             =head2 release
550              
551             $obj->release( "Folklore-Japan-v1.2.3" );
552             my $string = $obj->release;
553              
554             Sets or gets a string and returns a L<scalar object|Module::Generic::Scalar>, even if there is no value.
555              
556             =head2 sloc
557              
558             $obj->sloc(202);
559             my $number = $obj->sloc;
560              
561             Sets or gets an integer value, and returns a L<number object|Module::Generic::Number> or C<undef> if no value is set.
562              
563             =head2 slop
564              
565             $obj->slop(637);
566             my $number = $obj->slop;
567              
568             Sets or gets an integer value, and returns a L<number object|Module::Generic::Number> or C<undef> if no value is set.
569              
570             =head2 stat
571              
572             $obj->stat( {
573             gid => 12345,
574             mode => 33188,
575             mtime => 1690618397,
576             size => 10240,
577             uid => 16790,
578             } );
579             my $this = $obj->stat;
580             $obj->stat->gid( 12345 );
581             my $integer = $obj->stat->gid;
582             $obj->stat->mode( 33188 );
583             my $integer = $obj->stat->mode;
584             $obj->stat->mtime( 1690618397 );
585             my $datetime = $obj->stat->mtime;
586             $obj->stat->size( 10240 );
587             my $integer = $obj->stat->size;
588             $obj->stat->uid( 16790 );
589             my $integer = $obj->stat->uid;
590              
591             Sets or gets a dynamic class object with class name C<Net::API::CPAN::Module::Stat> and having the folowing properties also accessible as methods, and returns an object from such class, or C<undef> if no value was provided.
592              
593             =over 4
594              
595             =item * C<gid> integer (L<number object|Module::Generic::Number>)
596              
597             =item * C<mode> integer (L<number object|Module::Generic::Number>)
598              
599             =item * C<mtime> datetime
600              
601             =item * C<size> integer (L<number object|Module::Generic::Number>)
602              
603             =item * C<uid> integer (L<number object|Module::Generic::Number>)
604              
605             =back
606              
607             =head2 status
608              
609             $obj->status( "latest" );
610             my $string = $obj->status;
611              
612             Sets or gets a string and returns a L<scalar object|Module::Generic::Scalar>, even if there is no value.
613              
614             =head2 suggest
615              
616             $obj->suggest( {
617             input => [
618             "Folklore::Japan",
619             ],
620             payload => {
621             doc_name => "Folklore::Japan",
622             },
623             weight => 985,
624             } );
625             my $this = $obj->suggest;
626             $obj->suggest->input( [
627             "Folklore::Japan",
628             ] );
629             my $array = $obj->suggest->input;
630             $obj->suggest->payload( {
631             doc_name => "Folklore::Japan",
632             } );
633             my $hash = $obj->suggest->payload;
634             $obj->suggest->weight( 985 );
635             my $integer = $obj->suggest->weight;
636              
637             Sets or gets a dynamic class object with class name C<Net::API::CPAN::Module::Suggest> and having the folowing properties also accessible as methods, and returns an object from such class, or C<undef> if no value was provided.
638              
639             =over 4
640              
641             =item * C<input> array (L<array object|Module::Generic::Array>)
642              
643             =item * C<payload> hash_as_object
644              
645             =item * C<weight> integer (L<number object|Module::Generic::Number>)
646              
647             =back
648              
649             =head2 version
650              
651             $obj->version( "v1.2.3" );
652             my $version = $obj->version;
653              
654             Sets or gets a version value and returns a version object using L<Changes::Version>.
655              
656             =head2 version_numified
657              
658             $obj->version_numified("1.002003");
659             my $number = $obj->version_numified;
660              
661             Sets or gets a float value, and returns a L<number object|Module::Generic::Number> or C<undef> if no value is set.
662              
663             =head1 API SAMPLE
664              
665             {
666             "abstract" : "Japan Folklore Object Class",
667             "author" : "MOMOTARO",
668             "authorized" : true,
669             "binary" : false,
670             "date" : "2023-07-29T05:10:12",
671             "deprecated" : false,
672             "description" : "Folklore::Japan is a totally fictious perl 5 module designed to serve as an example for the MetaCPAN API.",
673             "directory" : false,
674             "dist_fav_count" : 1,
675             "distribution" : "Folklore::Japan",
676             "documentation" : "Folklore::Japan",
677             "download_url" : "https://cpan.metacpan.org/authors/id/M/MO/MOMOTARO/Folklore-Japan-v1.2.3.tar.gz",
678             "id" : "l0tsOf1192fuN100",
679             "indexed" : true,
680             "level" : 1,
681             "maturity" : "released",
682             "mime" : "text/x-script.perl-module",
683             "module" : [
684             {
685             "associated_pod" : "MOMOTARO/Folklore-Japan-v1.2.3/lib/Folklore/Japan.pm",
686             "authorized" : true,
687             "indexed" : true,
688             "name" : "Folklore::Japan",
689             "version" : "v1.2.3",
690             "version_numified" : 1.002003
691             }
692             ],
693             "name" : "Japan.pm",
694             "path" : "lib/Folklore/Japan.pm",
695             "pod" : "NAME Folklore::Japan - Japan Folklore Object Class VERSION version v1.2.3 SYNOPSIS use Folklore::Japan; my $fun = Folklore::Japan->new; DESCRIPTION This is an imaginary class object to Japan folklore to only serve as dummy example AUTHOR Momo Taro <momo.taro@example.jp> COPYRIGHT AND LICENSE This software is copyright (c) 2023 by Okayama, Inc.. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.",
696             "pod_lines" : [
697             [
698             1192,
699             1868
700             ]
701             ],
702             "release" : "Folklore-Japan-v1.2.3",
703             "sloc" : 202,
704             "slop" : 637,
705             "stat" : {
706             "gid" : 12345,
707             "mode" : 33188,
708             "mtime" : 1690618397,
709             "size" : 10240,
710             "uid" : 16790
711             },
712             "status" : "latest",
713             "suggest" : {
714             "weight" : 985,
715             "payload" : {
716             "doc_name" : "Folklore::Japan"
717             },
718             "input" : [
719             "Folklore::Japan"
720             ]
721             },
722             "version" : "v1.2.3",
723             "version_numified" : "1.002003"
724             }
725              
726             =head1 AUTHOR
727              
728             Jacques Deguest E<lt>F<jack@deguest.jp>E<gt>
729              
730             =head1 SEE ALSO
731              
732             L<Net::API::CPAN>, L<Net::API::CPAN::Activity>, L<Net::API::CPAN::Author>, L<Net::API::CPAN::Changes>, L<Net::API::CPAN::Changes::Release>, L<Net::API::CPAN::Contributor>, L<Net::API::CPAN::Cover>, L<Net::API::CPAN::Diff>, L<Net::API::CPAN::Distribution>, L<Net::API::CPAN::DownloadUrl>, L<Net::API::CPAN::Favorite>, L<Net::API::CPAN::File>, L<Net::API::CPAN::Module>, L<Net::API::CPAN::Package>, L<Net::API::CPAN::Permission>, L<Net::API::CPAN::Rating>, L<Net::API::CPAN::Release>
733              
734             L<MetaCPAN::API>, L<MetaCPAN::Client>
735              
736             L<https://github.com/metacpan/metacpan-api/blob/master/docs/API-docs.md>
737              
738             =head1 COPYRIGHT & LICENSE
739              
740             Copyright(c) 2023 DEGUEST Pte. Ltd.
741              
742             All rights reserved
743              
744             This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
745              
746             =cut
747