summaryrefslogtreecommitdiff
path: root/lib/Carton/Snapshot/Emitter.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Carton/Snapshot/Emitter.pm')
-rw-r--r--lib/Carton/Snapshot/Emitter.pm30
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;