diff options
Diffstat (limited to 'lib/Carton/Snapshot/Emitter.pm')
-rw-r--r-- | lib/Carton/Snapshot/Emitter.pm | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/Carton/Snapshot/Emitter.pm b/lib/Carton/Snapshot/Emitter.pm new file mode 100644 index 0000000..9486ba7 --- /dev/null +++ b/lib/Carton/Snapshot/Emitter.pm @@ -0,0 +1,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; |