better naming and help command for KeyMangler
[scpubgit/DKit.git] / lib / DX / Lib / FS / Action / CreateFile.pm
index 426b241..314a516 100644 (file)
@@ -1,16 +1,19 @@
 package DX::Lib::FS::Action::CreateFile;
 
+use aliased 'DX::Lib::FS::Fact::FileContent';
 use aliased 'DX::Lib::FS::Fact::PathStatus';
 use aliased 'DX::Lib::FS::Fact::PathStatusInfo';
-use Fcntl qw(O_CREAT O_WRONLY);
 use Moo;
 
 with 'DX::Role::Action';
+with 'DX::Lib::FS::Role::RunOn';
 
 has path => (is => 'ro', required => 1);
 
 has mode => (is => 'ro', predicate => 1);
 
+has data => (is => 'ro', default => sub { '' });
+
 sub expected_effect {
   my ($self) = @_;
   return +(path_status => PathStatus->new(
@@ -19,23 +22,20 @@ sub expected_effect {
       is_file => 1,
       mode => ($self->has_mode ? $self->mode : '')
     )
+  ), file_content => FileContent->new(
+    path => $self->path,
+    data => $self->data,
   ));
 }
 
 sub _do_run {
   my ($self) = @_;
-  my $fh;
-  if ($self->has_mode) {
-    my $umask = umask(0000);
-    sysopen(
-      $fh, $self->path, O_CREAT | O_WRONLY, oct($self->mode)
-    ) or do { umask($umask); die "Couldn't create ${\$self->path}: $!" };
-    umask($umask);
-  } else {
-    sysopen($fh, $self->path, O_CREAT | O_WRONLY)
-      or die "Couldn't create ${\$self->path}: $!";
-  }
-  +(path_status => PathStatus->new(path => $self->path));
+  $self->_call_guts(create_file => $self->mode, $self->data);
+  +(path_status => $self->path);
+}
+
+sub but_add {
+  $_[0]->but(data => $_[0]->data.$_[1]."\n")
 }
 
 1;