Files
codeocean/app/controllers/concerns/file_conversion.rb
2022-11-25 11:10:06 +01:00

36 lines
1.1 KiB
Ruby

# frozen_string_literal: true
module FileConversion
private
def convert_files_json_to_files(files_json)
all_file_types = FileType.all
directories = []
files = files_json['files'].filter_map do |file|
# entryType: `-` describes a regular file, `d` a directory. See `info ls` for others
directories.push(file['name']) if file['entryType'] == 'd'
next unless file['entryType'] == '-'
extension = File.extname(file['name'])
name = File.basename(file['name'], extension)
path = File.dirname(file['name']).sub(%r{^(?>\./|\.)}, '').presence
file_type = all_file_types.detect {|ft| ft.file_extension == extension } || FileType.new(file_extension: extension)
CodeOcean::File.new(
name:,
path:,
size: file['size'],
owner: file['owner'],
group: file['group'],
permissions: file['permissions'],
updated_at: file['modificationTime'],
file_type:
)
end
[augment_files_for_download(files), directories]
end
def augment_files_for_download(files)
raise NotImplementedError
end
end