File Coverage

blib/lib/Data/Sah/Coerce/perl/To_str/From_str/convert_perl_pm_or_pod_to_path.pm
Criterion Covered Total %
statement 16 16 100.0
branch n/a
condition 1 2 50.0
subroutine 5 5 100.0
pod 0 2 0.0
total 22 25 88.0


line stmt bran cond sub pod time code
1             package Data::Sah::Coerce::perl::To_str::From_str::convert_perl_pm_or_pod_to_path;
2              
3 1     1   7152 use 5.010001;
  1         4  
4 1     1   5 use strict;
  1         3  
  1         19  
5 1     1   5 use warnings;
  1         2  
  1         257  
6              
7             our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
8             our $DATE = '2022-12-16'; # DATE
9             our $DIST = 'Sah-Schemas-Perl'; # DIST
10             our $VERSION = '0.046'; # VERSION
11              
12             sub meta {
13             +{
14 1     1 0 14 v => 4,
15             summary => 'Convert module/POD name existing in @INC to its filesystem path',
16             prio => 50,
17             };
18             }
19              
20             sub coerce {
21 1     1 0 17 my %args = @_;
22              
23 1         2 my $dt = $args{data_term};
24              
25 1         2 my $res = {};
26              
27 1   50     11 $res->{modules}{'Module::Path::More'} //= {version=>0, core=>0, pp=>1};
28 1         3 $res->{expr_match} = "1";
29 1         5 $res->{expr_coerce} = join(
30             "",
31             "do { ",
32             "my \$_sahc_orig = $dt; ",
33             "if (\$_sahc_orig =~ m!\\A\\w+((?:/|::)\\w+)*(?:\\.pm|\\.pod)?\\z!) {",
34             " (my \$tmp = \$_sahc_orig) =~ s!/!::!g; my \$ext; \$tmp =~ s/\\.(pm|pod)\\z// and \$ext = \$1;",
35             " Module::Path::More::module_path(module=>\$tmp, find_pm=>!\$ext || \$ext eq 'pm', find_pod=>!\$ext || \$ext eq 'pod', find_prefix=>0, find_pmc=>0) || \$_sahc_orig ",
36             "} else {",
37             " \$_sahc_orig ",
38             "} ",
39             "}",
40             );
41              
42 1         4 $res;
43             }
44              
45             1;
46             # ABSTRACT:
47              
48             __END__
49              
50             =pod
51              
52             =encoding UTF-8
53              
54             =head1 NAME
55              
56             Data::Sah::Coerce::perl::To_str::From_str::convert_perl_pm_or_pod_to_path
57              
58             =head1 VERSION
59              
60             This document describes version 0.046 of Data::Sah::Coerce::perl::To_str::From_str::convert_perl_pm_or_pod_to_path (from Perl distribution Sah-Schemas-Perl), released on 2022-12-16.
61              
62             =head1 DESCRIPTION
63              
64             This rule can convert strings in the form of:
65              
66             Foo::Bar
67             Foo/Bar
68             Foo/Bar.pm
69             Foo/Bar.pod
70              
71             into the filesystem path (e.g.
72             C</home/ujang/perl5/perlbrew/perls/perl-5.24.0/lib/site_perl/5.24.0/Foo/Bar.pm>)
73             when the module or POD exists in C<@INC>. Otherwise, it leaves the string as-is.
74              
75             Note that .pm is prioritized over .pod. If C<Foo.pm> and C<Foo.pod> are both
76             found on the filesystem, C<Foo.pm> will be returned.
77              
78             =for Pod::Coverage ^(meta|coerce)$
79              
80             =head1 HOMEPAGE
81              
82             Please visit the project's homepage at L<https://metacpan.org/release/Sah-Schemas-Perl>.
83              
84             =head1 SOURCE
85              
86             Source repository is at L<https://github.com/perlancar/perl-Sah-Schemas-Perl>.
87              
88             =head1 AUTHOR
89              
90             perlancar <perlancar@cpan.org>
91              
92             =head1 CONTRIBUTING
93              
94              
95             To contribute, you can send patches by email/via RT, or send pull requests on
96             GitHub.
97              
98             Most of the time, you don't need to build the distribution yourself. You can
99             simply modify the code, then test via:
100              
101             % prove -l
102              
103             If you want to build the distribution (e.g. to try to install it locally on your
104             system), you can install L<Dist::Zilla>,
105             L<Dist::Zilla::PluginBundle::Author::PERLANCAR>,
106             L<Pod::Weaver::PluginBundle::Author::PERLANCAR>, and sometimes one or two other
107             Dist::Zilla- and/or Pod::Weaver plugins. Any additional steps required beyond
108             that are considered a bug and can be reported to me.
109              
110             =head1 COPYRIGHT AND LICENSE
111              
112             This software is copyright (c) 2022, 2021, 2020, 2019, 2018, 2017, 2016 by perlancar <perlancar@cpan.org>.
113              
114             This is free software; you can redistribute it and/or modify it under
115             the same terms as the Perl 5 programming language system itself.
116              
117             =head1 BUGS
118              
119             Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Sah-Schemas-Perl>
120              
121             When submitting a bug or request, please include a test-file or a
122             patch to an existing test-file that illustrates the bug or desired
123             feature.
124              
125             =cut