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

Создан репозитарий
author Sergey
date Tue, 14 Jul 2009 12:54:37 +0400
parents
children 16ada169ca75
comparison
equal deleted inserted replaced
-1:000000000000 0:03e58a454b20
1 use strict;
2 package Deployment::Batch::Temp;
3 use base qw(Deployment::Batch::Generic);
4 use Common;
5 use File::Temp;
6
7
8 BEGIN {
9 DeclareProperty TmpObj => ACCESS_READ;
10 DeclareProperty Ref => ACCESS_NONE;
11 DeclareProperty TmpObjType => ACCESS_NONE;
12 }
13
14 sub CTOR {
15 my ($this,$type,$ref) = @_;
16
17 die "A reference to the temp object can be obtained only in the immediate mode" if $ref and not $this->Context->{Immediate};
18
19 $this->{$TmpObjType} = $type or die "The type of a temporary object should be specified";
20 $this->{$Ref} = $ref;
21 }
22
23 sub Run {
24 my ($this) = @_;
25
26 if ($this->{$TmpObjType} eq 'File') {
27 $this->{$TmpObj} = File::Temp->new;
28 if ($this->{$Ref}) {
29 ${$this->{$Ref}} = $this->{$TmpObj};
30 } else {
31 $this->Context('tmpfile') = $this->{$TmpObj}->filename;
32 }
33 } elsif ($this->{$TmpObjType} eq 'Dir') {
34 $this->{$TmpObj} = File::Temp->newdir;
35 if ($this->{$Ref}) {
36 ${$this->{$Ref}} = $this->{$TmpObj};
37 } else {
38 $this->Context('tmpdir') = $this->{$TmpObj}->dirname;
39 }
40 } else {
41 die "Don't know how to create a temporary $this->{$TmpObjType}";
42 }
43 }
44
45 sub DESTORY {
46 my ($this) = @_;
47
48 undef $this->{$TmpObj};
49 }
50
51
52 1;