class Paperbin::Handler
Public Instance Methods
archive_path()
click to toggle source
# File lib/paperbin/handler.rb, line 44 def archive_path File.join(directory_path, "#{archive_split_id}.zip") end
archive_split_id()
click to toggle source
# File lib/paperbin/handler.rb, line 17 def archive_split_id split.last end
check_versions()
click to toggle source
# File lib/paperbin/handler.rb, line 152 def check_versions versions.each_with_index do |version, index| # check both file exist or not next unless files_exist?(md5_file_path(version), json_file_path(version)) if md5_valid?(version) process_valid_records(version, versions.last) else # remove both files [json_file_path(version), md5_file_path(version)].each do |f| File.delete(f) end raise Errno::ENOENT end end rescue Errno::ENOENT # lodge worker unless valid Paperbin::WriteWorker.perform_async(id, type) end
create_archive_file()
click to toggle source
# File lib/paperbin/handler.rb, line 48 def create_archive_file unless File.exists?(archive_path) Zippy.create archive_path do |z| z["created_at.txt"] = Date.today.to_s handle_old_files(z) end end end
create_directory()
click to toggle source
# File lib/paperbin/handler.rb, line 81 def create_directory FileUtils.mkdir_p(directory_path) unless Dir.exists?(directory_path) end
dir_split_id()
click to toggle source
# File lib/paperbin/handler.rb, line 13 def dir_split_id split[0...-1] end
directory_path()
click to toggle source
# File lib/paperbin/handler.rb, line 31 def directory_path dirs = [] dirs << options[:path] dirs << item.send(options[:base_scope]) dirs << type dirs += dir_split_id File.join(dirs.map(&:to_s)) end
files_exist?(*args)
click to toggle source
# File lib/paperbin/handler.rb, line 101 def files_exist?(*args) Array(args).map{|file| File.exist?(file)}.all? end
formatted_id()
click to toggle source
# File lib/paperbin/handler.rb, line 5 def formatted_id "%012d" % id end
generate_files()
click to toggle source
# File lib/paperbin/handler.rb, line 125 def generate_files versions.each do |version| write_json_file version write_md5_file version end end
handle_old_files(z)
click to toggle source
# File lib/paperbin/handler.rb, line 57 def handle_old_files(z) if File.directory?(old_directory_path) Dir.new(old_directory_path).each do |file| if file =~ /\.gz/ name = file.split(".").first z["#{name}.json"] = Zlib::GzipReader.open(File.join(old_directory_path, file)) {|gz| gz.read } end end FileUtils.remove_dir(old_directory_path) end end
item()
click to toggle source
# File lib/paperbin/handler.rb, line 25 def item scope = type.constantize scope = scope.with_deleted if scope.respond_to?(:with_deleted) scope.where(id: id).first end
json_file(version)
click to toggle source
# File lib/paperbin/handler.rb, line 93 def json_file(version) "#{version.id}.json" end
json_file_path(version, checked = false)
click to toggle source
# File lib/paperbin/handler.rb, line 97 def json_file_path(version, checked = false) File.join(directory_path, "#{json_file(version)}#{checked ? '' : '.unchecked'}") end
md5_file(version)
click to toggle source
# File lib/paperbin/handler.rb, line 85 def md5_file(version) "#{version.id}.md5" end
md5_file_path(version)
click to toggle source
# File lib/paperbin/handler.rb, line 89 def md5_file_path(version) File.join(directory_path, "#{md5_file(version)}") end
md5_valid?(version)
click to toggle source
# File lib/paperbin/handler.rb, line 105 def md5_valid?(version) record_md5 = File.read(md5_file_path(version)) data = File.open(json_file_path(version), "r") { |f| f.read } check_md5 = Digest::MD5.hexdigest(data) record_md5 == check_md5 end
old_directory_path()
click to toggle source
# File lib/paperbin/handler.rb, line 40 def old_directory_path File.join(directory_path, archive_split_id) end
options()
click to toggle source
# File lib/paperbin/handler.rb, line 21 def options Paperbin::Config.default_options end
process_valid_records(version, last_item)
click to toggle source
# File lib/paperbin/handler.rb, line 112 def process_valid_records(version, last_item) # remove records from db expcet the lastest one version.delete unless version == last_item # rename file extension File.rename(json_file_path(version), json_file_path(version, true)) Zippy.open(archive_path) do |z| z["#{json_file(version).to_s}"] = File.open(json_file_path(version, true)) { |f| f.read } end File.delete(md5_file_path(version)) File.delete(json_file_path(version, true)) options[:callback].call(json_file_path(version, true)) if options[:callback] end
save_versions()
click to toggle source
# File lib/paperbin/handler.rb, line 73 def save_versions return true unless item create_directory create_archive_file generate_files Paperbin::CheckWorker.perform_async(id, type) end
split()
click to toggle source
# File lib/paperbin/handler.rb, line 9 def split formatted_id.scan(/.{4}/) end
string_data(version)
click to toggle source
# File lib/paperbin/handler.rb, line 148 def string_data(version) version.to_json end
versions()
click to toggle source
# File lib/paperbin/handler.rb, line 69 def versions PaperTrail::Version.where(item_type: type, item_id: id) end
write_json_file(version)
click to toggle source
# File lib/paperbin/handler.rb, line 132 def write_json_file(version) path = json_file_path version unless files_exist?(path) File.open(path, "w") { |f| f.write(string_data(version)) } timestamp = version.created_at.to_time File.utime timestamp, timestamp, path end end
write_md5_file(version)
click to toggle source
# File lib/paperbin/handler.rb, line 141 def write_md5_file(version) File.open(md5_file_path(version), "w") do |file| md5 = Digest::MD5.hexdigest(string_data(version)) file.write md5 end end