2010-10-10 19:18:42 -07:00
|
|
|
class PetsController < ApplicationController
|
2024-01-24 00:54:30 -08:00
|
|
|
rescue_from Pet::PetNotFound, with: :pet_not_found
|
|
|
|
rescue_from PetType::DownloadError, SwfAsset::DownloadError, with: :asset_download_error
|
|
|
|
rescue_from Pet::DownloadError, with: :pet_download_error
|
2024-01-24 03:25:23 -08:00
|
|
|
rescue_from Pet::UnexpectedDataFormat, with: :unexpected_data_format
|
2013-12-08 20:59:36 -08:00
|
|
|
|
2010-11-05 15:45:05 -07:00
|
|
|
def load
|
2024-01-24 01:00:25 -08:00
|
|
|
# Uncomment this to temporarily disable modeling for most users.
|
|
|
|
# return modeling_disabled unless user_signed_in? && current_user.admin?
|
2024-01-24 00:42:21 -08:00
|
|
|
|
2023-10-24 18:07:11 -07:00
|
|
|
raise Pet::PetNotFound unless params[:name]
|
2024-02-20 15:53:56 -08:00
|
|
|
@pet = Pet.load(params[:name])
|
2023-10-24 18:07:11 -07:00
|
|
|
points = contribute(current_user, @pet)
|
|
|
|
|
|
|
|
respond_to do |format|
|
|
|
|
format.html do
|
|
|
|
path = destination + @pet.wardrobe_query
|
|
|
|
redirect_to path
|
|
|
|
end
|
2013-01-13 18:10:01 -08:00
|
|
|
|
2023-10-24 18:07:11 -07:00
|
|
|
format.json do
|
|
|
|
render :json => {:points => points, :query => @pet.wardrobe_query}
|
2010-11-05 17:09:03 -07:00
|
|
|
end
|
|
|
|
end
|
2010-11-05 15:45:05 -07:00
|
|
|
end
|
|
|
|
|
|
|
|
protected
|
2013-12-08 20:59:36 -08:00
|
|
|
|
|
|
|
def contribute(user, pet)
|
|
|
|
if user.present?
|
|
|
|
points = user.contribute! pet
|
|
|
|
else
|
|
|
|
pet.save!
|
|
|
|
points = true
|
|
|
|
end
|
|
|
|
points
|
|
|
|
end
|
2010-11-05 15:45:05 -07:00
|
|
|
|
2012-08-06 18:15:31 -07:00
|
|
|
def destination
|
|
|
|
case (params[:destination] || params[:origin])
|
2023-10-12 22:30:16 -07:00
|
|
|
when 'wardrobe' then wardrobe_path + '?'
|
2012-08-06 18:15:31 -07:00
|
|
|
when 'needed_items' then needed_items_path + '?'
|
|
|
|
else root_path + '#'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2010-11-05 15:45:05 -07:00
|
|
|
def pet_not_found
|
2013-01-09 20:05:07 -08:00
|
|
|
pet_load_error :long_message => t('pets.load.not_found'),
|
|
|
|
:status => :not_found
|
2011-02-19 19:09:12 -08:00
|
|
|
end
|
|
|
|
|
2011-02-19 19:49:13 -08:00
|
|
|
def asset_download_error(e)
|
2011-02-19 19:09:12 -08:00
|
|
|
Rails.logger.warn e.message
|
2013-01-09 20:05:07 -08:00
|
|
|
pet_load_error :long_message => t('pets.load.asset_download_error'),
|
|
|
|
:status => :gateway_timeout
|
2011-02-19 19:09:12 -08:00
|
|
|
end
|
|
|
|
|
2011-02-19 19:49:13 -08:00
|
|
|
def pet_download_error(e)
|
|
|
|
Rails.logger.warn e.message
|
2013-02-24 22:14:45 -08:00
|
|
|
Rails.logger.warn e.backtrace.join("\n")
|
2013-01-09 20:05:07 -08:00
|
|
|
pet_load_error :long_message => t('pets.load.pet_download_error'),
|
2011-02-19 19:49:13 -08:00
|
|
|
:status => :gateway_timeout
|
|
|
|
end
|
|
|
|
|
2011-02-19 19:09:12 -08:00
|
|
|
def pet_load_error(options)
|
2010-11-05 17:09:03 -07:00
|
|
|
respond_to do |format|
|
|
|
|
format.html do
|
|
|
|
path = params[:origin] || root_path
|
|
|
|
path += "?name=#{params[:name]}"
|
2011-02-19 19:09:12 -08:00
|
|
|
redirect_to path, :alert => options[:long_message]
|
2010-11-05 17:09:03 -07:00
|
|
|
end
|
|
|
|
|
|
|
|
format.json do
|
2023-10-12 18:08:43 -07:00
|
|
|
render :json => options[:long_message], :status => options[:status]
|
2010-11-05 17:09:03 -07:00
|
|
|
end
|
|
|
|
end
|
2010-10-10 11:33:54 -07:00
|
|
|
end
|
2024-01-24 00:19:28 -08:00
|
|
|
|
|
|
|
def modeling_disabled
|
|
|
|
pet_load_error long_message: t('pets.load.modeling_disabled'),
|
|
|
|
status: :forbidden
|
|
|
|
end
|
2024-01-24 00:54:30 -08:00
|
|
|
|
2024-01-24 03:25:23 -08:00
|
|
|
def unexpected_data_format
|
|
|
|
pet_load_error long_message: t('pets.load.unexpected_data_format'),
|
|
|
|
status: :internal_server_error
|
2024-01-24 00:54:30 -08:00
|
|
|
end
|
2010-10-10 11:33:54 -07:00
|
|
|
end
|