diff options
Diffstat (limited to 'app')
| -rw-r--r-- | app/controllers/api/v1/games_controller.rb | 20 | ||||
| -rw-r--r-- | app/models/game.rb | 25 |
2 files changed, 26 insertions, 19 deletions
diff --git a/app/controllers/api/v1/games_controller.rb b/app/controllers/api/v1/games_controller.rb index 6a412c8..4346244 100644 --- a/app/controllers/api/v1/games_controller.rb +++ b/app/controllers/api/v1/games_controller.rb @@ -25,25 +25,7 @@ class Api::V1::GamesController < ApplicationController end end - Zip::File.open(params[:game][: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 } - @game.game_files.attach(io: File.open(temp_file.path), filename: path_name.last) - @game.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 - @game.game_files.last.blob.save - end - - end - end - end + @game.save_zip(params[:game][:zip]) if @game.save render json: @game, status: :created 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 |
