Welcome to the "trac"-ing site of soap4r!
[soap4r] [httpclient] [openpgp4u] [pkcs1] [logger] [csv] [vtr]

root/tags/RELEASE_1_4_4_1/_installedFiles.rb

Revision 458, 1.6 kB (checked in by nahi, 7 years ago)

Added uninstaller.

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to author date id revision
Line 
1 class InstalledFile
2   attr_reader :path
3   attr_reader :mtime
4
5   def initialize( filePath )
6     @path = filePath
7     @mtime = File.stat( filePath ).mtime
8   end
9
10   def ==( rhs )
11     self.path == rhs.path
12   end
13
14   def match( rhs )
15     self.path == rhs.path and self.mtime == rhs.mtime
16   end
17
18   def uninstall
19     File.unlink( self.path )
20   end
21 end
22
23 class InstalledFiles < Array
24   Repository = '__installedFiles.db'
25
26   def initialize( loadP = true )
27     load if loadP
28   end
29
30   def uninstall( target )
31     if include?( target )
32       if checkRemove( target )
33         target.uninstall
34         delete!( target )
35         return true
36       else
37         STDERR.puts "File: #{ target.path } seems to be modified.  It has not been uninstalled.  Please remove the file manually if you want."
38         return false
39       end
40     end
41     false
42   end
43
44   def load
45     if File.exist?( Repository )
46       self.clear
47       File.open( Repository, "rb" ) do | f |
48         Marshal.load( f ).each do | package |
49           self << package
50         end
51       end
52     end
53   end
54
55   def dump
56     pack!
57     File.open( Repository, "wb" ) do | f |
58       f << Marshal.dump( self )
59     end
60   end
61
62 private
63
64   def pack!
65     self.replace( pack )
66     nil
67   end
68
69   def pack
70     newObj = type.new( false )
71     reverse_each do | package |
72       newObj << package unless newObj.include?( package )
73     end
74     newObj
75   end
76
77   def delete!( target )
78     self.replace( delete( target ))
79     nil
80   end
81
82   def delete( target )
83     newObj = type.new( false )
84     each do | package |
85       newObj << package unless package == target
86     end
87     newObj
88   end
89
90   def checkRemove( target )
91     each do | package |
92       return true if package.match( target )
93     end
94     false
95   end
96 end
Note: See TracBrowser for help on using the browser.