diff Lib/Deployment/Batch/Temp.pm @ 0:03e58a454b20

Создан репозитарий
author Sergey
date Tue, 14 Jul 2009 12:54:37 +0400
parents
children 16ada169ca75
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Lib/Deployment/Batch/Temp.pm	Tue Jul 14 12:54:37 2009 +0400
@@ -0,0 +1,52 @@
+use strict;
+package Deployment::Batch::Temp;
+use base qw(Deployment::Batch::Generic);
+use Common;
+use File::Temp;
+
+
+BEGIN {
+    DeclareProperty TmpObj => ACCESS_READ;
+    DeclareProperty Ref => ACCESS_NONE;
+    DeclareProperty TmpObjType => ACCESS_NONE;
+}
+
+sub CTOR {
+    my ($this,$type,$ref) = @_;
+
+    die "A reference to the temp object can be obtained only in the immediate mode" if $ref and not $this->Context->{Immediate};
+
+    $this->{$TmpObjType} = $type or die "The type of a temporary object should be specified";
+    $this->{$Ref} = $ref;
+}
+
+sub Run {
+    my ($this) = @_;
+
+    if ($this->{$TmpObjType} eq 'File') {
+        $this->{$TmpObj} = File::Temp->new;
+        if ($this->{$Ref}) {
+            ${$this->{$Ref}} = $this->{$TmpObj};
+        } else {
+            $this->Context('tmpfile') = $this->{$TmpObj}->filename;
+        }
+    } elsif ($this->{$TmpObjType} eq 'Dir') {
+        $this->{$TmpObj} = File::Temp->newdir;
+        if ($this->{$Ref}) {
+            ${$this->{$Ref}} = $this->{$TmpObj};
+        } else {
+            $this->Context('tmpdir') = $this->{$TmpObj}->dirname;
+        }
+    } else {
+        die "Don't know how to create a temporary $this->{$TmpObjType}";
+    }
+}
+
+sub DESTORY {
+    my ($this) = @_;
+
+    undef $this->{$TmpObj};
+}
+
+
+1;
\ No newline at end of file