9: def parse
10: raise("File server configuration #{self.file} does not exist") unless FileTest.exists?(self.file)
11: raise("Cannot read file server configuration #{self.file}") unless FileTest.readable?(self.file)
12:
13: @mounts = {}
14: @count = 0
15:
16: File.open(self.file) { |f|
17: mount = nil
18: f.each { |line|
19:
20: @count += 1
21:
22: case line
23: when /^\s*#/; next
24: when /^\s*$/; next
25: when /\[([-\w]+)\]/
26: mount = newmount($1)
27: when /^\s*(\w+)\s+(.+)$/
28: var = $1
29: value = $2
30: raise(ArgumentError, "Fileserver configuration file does not use '=' as a separator") if value =~ /^=/
31: case var
32: when "path"
33: path(mount, value)
34: when "allow"
35: allow(mount, value)
36: when "deny"
37: deny(mount, value)
38: else
39: raise ArgumentError.new("Invalid argument '#{var}'", @count, file)
40: end
41: else
42: raise ArgumentError.new("Invalid line '#{line.chomp}'", @count, file)
43: end
44: }
45: }
46:
47: validate
48:
49: @mounts
50: end