summaryrefslogtreecommitdiff
path: root/lib/Carton/Snapshot/Emitter.pm
blob: 9486ba7b332fde4b47e0783fb6e1dcd1422b0a89 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package Carton::Snapshot::Emitter;
use Class::Tiny;
use warnings NONFATAL => 'all';

sub emit {
    my($self, $snapshot) = @_;

    my $data = '';
    $data .= "# carton snapshot format: version @{[$snapshot->version]}\n";
    $data .= "DISTRIBUTIONS\n";

    for my $dist (sort { $a->name cmp $b->name } $snapshot->distributions) {
        $data .= "  @{[$dist->name]}\n";
        $data .= "    pathname: @{[$dist->pathname]}\n";

        $data .= "    provides:\n";
        for my $package (sort keys %{$dist->provides}) {
            $data .= "      $package @{[$dist->provides->{$package}{version} || 'undef' ]}\n";
        }

        $data .= "    requirements:\n";
        for my $module (sort $dist->required_modules) {
            $data .= "      $module @{[ $dist->requirements_for_module($module) || '0' ]}\n";
        }
    }

    $data;
}

1;