diff options
Diffstat (limited to 'app/models/game.rb')
| -rw-r--r-- | app/models/game.rb | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/app/models/game.rb b/app/models/game.rb index 1eb75ff..e30dfae 100644 --- a/app/models/game.rb +++ b/app/models/game.rb @@ -1,3 +1,5 @@ +require "zip" + class Game < ApplicationRecord enum status: { draft: 0, published: 1 } #enum status: { @@ -11,4 +13,27 @@ class Game < ApplicationRecord has_one_attached :char_img has_one_attached :title_img has_and_belongs_to_many :tags + + def save_zip(zip) + Zip::File.open(zip) do |zipfile| + + zipfile.each do |entry| + if entry.file? + path_name = entry.name.rpartition('/') + name_extension = path_name.last.rpartition('.') + + Tempfile.open([name_extension.first, name_extension[1] + name_extension.last]) do |temp_file| + entry.extract(temp_file.path) { true } + self.game_files.attach(io: File.open(temp_file.path), filename: path_name.last) + self.game_files.last.blob.filepath = path_name.first.delete_suffix('/').delete_prefix('/') + + # saving the game wont have the blob saved so we need to do it manually + self.game_files.last.blob.save + end + + end + end + end + + end end |
