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

root/tags/RELEASE_1_4_8/_installedFiles.rb

Revision 676, 1.7 kB (checked in by nahi, 6 years ago)

Use Object#class instead of Object#type.

  • 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( dir = '.' )
27     load( dir ) if dir
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( dir = '.' )
45     path = File.join( dir, Repository )
46     if File.exist?( path )
47       self.clear
48       File.open( path, "rb" ) do | f |
49         Marshal.load( f ).each do | package |
50           self << package
51         end
52       end
53     end
54   end
55
56   def dump( dir = '.' )
57     pack!
58     path = File.join( dir, Repository )
59     File.open( path, "wb" ) do | f |
60       f << Marshal.dump( self )
61     end
62   end
63
64 private
65
66   def pack!
67     self.replace( pack )
68     nil
69   end
70
71   def pack
72     newObj = self.class.new( false )
73     reverse_each do | package |
74       newObj << package unless newObj.include?( package )
75     end
76     newObj
77   end
78
79   def delete!( target )
80     self.replace( delete( target ))
81     nil
82   end
83
84   def delete( target )
85     newObj = self.class.new( false )
86     each do | package |
87       newObj << package unless package == target
88     end
89     newObj
90   end
91
92   def checkRemove( target )
93     each do | package |
94       return true if package.match( target )
95     end
96     false
97   end
98 end
Note: See TracBrowser for help on using the browser.