Moved back to compact class naming to use File.exitst?

This commit is contained in:
Martin Edenhofer 2015-04-28 00:21:30 +02:00
parent 135dcceafd
commit 95e27b0994

View file

@ -1,87 +1,84 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
class Store class Store::Provider::File
module Provider
module File
def self.add(data, sha) def self.add(data, sha)
write_to_fs(data, sha) write_to_fs(data, sha)
true true
end end
def self.get(sha) def self.get(sha)
read_from_fs(sha) read_from_fs(sha)
end end
def self.delete(sha) def self.delete(sha)
unlink_from_fs(sha) unlink_from_fs(sha)
end end
private private
# generate file location # generate file location
def self.get_locaton(sha) def self.get_locaton(sha)
# generate directory # generate directory
base = Rails.root.to_s + '/storage/fs/' base = Rails.root.to_s + '/storage/fs/'
parts = sha.scan(/.{1,4}/) parts = sha.scan(/.{1,4}/)
path = parts[ 1 .. 10 ].join('/') + '/' path = parts[ 1 .. 10 ].join('/') + '/'
file = parts[ 11 .. parts.count ].join('') file = parts[ 11 .. parts.count ].join('')
location = "#{base}/#{path}" location = "#{base}/#{path}"
# create directory if not exists # create directory if not exists
if !File.exist?( location ) if !File.exist?( location )
FileUtils.mkdir_p( location ) FileUtils.mkdir_p( location )
end end
location += file location += file
end end
# unlink file from fs # unlink file from fs
def self.unlink_from_fs(sha) def self.unlink_from_fs(sha)
if File.exist?( get_locaton(sha) ) if File.exist?( get_locaton(sha) )
puts "NOTICE: storge remove '#{ get_locaton(sha) }'" puts "NOTICE: storge remove '#{ get_locaton(sha) }'"
File.delete( get_locaton(sha) ) File.delete( get_locaton(sha) )
end
end
# read file from fs
def self.read_from_fs(sha)
puts "read from fs #{ get_locaton(sha) }"
if !File.exist?( get_locaton(sha) )
raise "ERROR: No such file #{ get_locaton(sha) }"
end
data = File.open( get_locaton(sha), 'rb' )
content = data.read
# check sha
local_sha = Digest::SHA256.hexdigest( content )
if local_sha != sha
raise "ERROR: Corrupt file in fs #{ get_locaton(sha) }, sha should be #{sha} but is #{local_sha}"
end
content
end
# write file to fs
def self.write_to_fs(data, sha)
# install file
permission = '600'
if !File.exist?( get_locaton(sha) )
puts "NOTICE: storge write '#{ get_locaton(sha) }' (#{permission})"
file = File.new( get_locaton(sha), 'wb' )
file.write( data )
file.close
end
File.chmod( permission.to_i(8), get_locaton(sha) )
# check sha
local_sha = Digest::SHA256.hexdigest( read_from_fs(sha) )
if sha != local_sha
raise "ERROR: Corrupt file in fs #{ get_locaton(sha) }, sha should be #{sha} but is #{local_sha}"
end
true
end
end end
end end
# read file from fs
def self.read_from_fs(sha)
puts "read from fs #{ get_locaton(sha) }"
if !File.exist?( get_locaton(sha) )
raise "ERROR: No such file #{ get_locaton(sha) }"
end
data = File.open( get_locaton(sha), 'rb' )
content = data.read
# check sha
local_sha = Digest::SHA256.hexdigest( content )
if local_sha != sha
raise "ERROR: Corrupt file in fs #{ get_locaton(sha) }, sha should be #{sha} but is #{local_sha}"
end
content
end
# write file to fs
def self.write_to_fs(data, sha)
# install file
permission = '600'
if !File.exist?( get_locaton(sha) )
puts "NOTICE: storge write '#{ get_locaton(sha) }' (#{permission})"
file = File.new( get_locaton(sha), 'wb' )
file.write( data )
file.close
end
File.chmod( permission.to_i(8), get_locaton(sha) )
# check sha
local_sha = Digest::SHA256.hexdigest( read_from_fs(sha) )
if sha != local_sha
raise "ERROR: Corrupt file in fs #{ get_locaton(sha) }, sha should be #{sha} but is #{local_sha}"
end
true
end
end end