Mercurial > pub > Impl
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; |