summaryrefslogtreecommitdiffhomepage
path: root/app/models/game.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/game.rb')
-rw-r--r--app/models/game.rb25
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