better debugging output
Matt S Trout [Sat, 22 Feb 2014 20:38:39 +0000 (20:38 +0000)]
bin/dx-shell
lib/DX/OrderedSet.pm
lib/DX/Role/Action.pm
lib/DX/Role/Set.pm [new file with mode: 0644]
lib/DX/SetOver.pm

index 725fc10..b540453 100644 (file)
@@ -7,6 +7,8 @@ use DX::Lib::FS;
 use Term::ReadLine;
 use Devel::Dwarn;
 use Sub::Quote;
+use YAML ();
+use Safe::Isa;
 
 my $solver = DX::Solver->new(observation_policy => sub { 1 });
 
@@ -30,10 +32,19 @@ my $last_mode;
 sub show {
   $r = ($res->isa('DX::Result') ? $res : $res->next);
   unless ($r) { warn "false\n"; return; }
-  Dwarn(map {
-    my @act = $_->actions;
-    ((@act ? \@act : ()), $_->all_values);
-  } $r);
+  if (my @act = $r->actions) {
+    warn YAML::Dump([ map $_->as_structure, @act ]);
+  }
+  my $values = $r->all_values;
+  unless (keys %$values) {
+    warn "---\ntrue\n"; return;
+  }
+  warn YAML::Dump({
+    map +($_ => ($values->{$_}->$_does('DX::Role::Set')
+                  ? [ $values->{$_}->all ]
+                  : $values->{$_} )),
+      keys %$values
+  });
 }
 
 sub do_query {
@@ -121,6 +132,8 @@ $tcl->CreateCommand(findall => sub {
   ];
   return;
 });
+
+$tcl->CreateCommand(n => \&show);
   
 #$tcl->Eval(q{query D {directory_at D 't'; mode D '0755'; }});
 
index 06af0e8..e2e97af 100644 (file)
@@ -3,6 +3,8 @@ package DX::OrderedSet;
 use DX::ArrayStream;
 use Moo;
 
+with 'DX::Role::Set';
+
 has values => (is => 'ro', default => sub { [] });
 
 sub all { @{$_[0]->values} }
index 3b7367a..d345b4f 100644 (file)
@@ -21,4 +21,12 @@ sub run {
   return @res;
 }
 
+sub as_structure {
+  my ($self) = @_;
+  my %data = %$self;
+  delete $data{dependencies} unless @{$data{dependencies}};
+  my $id = delete $data{id};
+  +{ $id => \%data };
+}
+
 1;
diff --git a/lib/DX/Role/Set.pm b/lib/DX/Role/Set.pm
new file mode 100644 (file)
index 0000000..f52737e
--- /dev/null
@@ -0,0 +1,13 @@
+package DX::Role::Set;
+
+use Moo::Role;
+
+requires 'to_stream';
+
+requires 'all';
+
+requires 'get';
+
+requires 'key_list';
+
+1;
index b267761..2707dab 100644 (file)
@@ -3,6 +3,8 @@ package DX::SetOver;
 use DX::ArrayStream;
 use Moo;
 
+with 'DX::Role::Set';
+
 has over => (is => 'ro', required => 1);
 
 has values => (is => 'ro', default => sub { {} });