gracefully handle connection errors with neopets servers
This commit is contained in:
parent
fa14232473
commit
ea4ec0f99d
3 changed files with 27 additions and 7 deletions
|
@ -1,5 +1,6 @@
|
|||
class PetsController < ApplicationController
|
||||
rescue_from Pet::PetNotFound, :with => :pet_not_found
|
||||
rescue_from PetType::DownloadError, SwfAsset::DownloadError, :with => :download_error
|
||||
|
||||
cache_sweeper :user_sweeper
|
||||
|
||||
|
@ -40,15 +41,30 @@ class PetsController < ApplicationController
|
|||
protected
|
||||
|
||||
def pet_not_found
|
||||
pet_load_error :long_message => 'Could not find any pet by that name. Did you spell it correctly?',
|
||||
:short_message => 'Pet not found',
|
||||
:status => :not_found
|
||||
end
|
||||
|
||||
def download_error(e)
|
||||
Rails.logger.warn e.message
|
||||
pet_load_error :long_message => "We found the pet all right, but the " +
|
||||
"Neopets image server didn't respond to our download request. Maybe it's " +
|
||||
"down, or maybe it's just having trouble. Try again later, maybe. Sorry!",
|
||||
:short_message => 'Neopets seems down. Try again?',
|
||||
:status => :gateway_timeout
|
||||
end
|
||||
|
||||
def pet_load_error(options)
|
||||
respond_to do |format|
|
||||
format.html do
|
||||
path = params[:origin] || root_path
|
||||
path += "?name=#{params[:name]}"
|
||||
redirect_to path, :alert => 'Could not find any pet by that name. Did you spell it correctly?'
|
||||
redirect_to path, :alert => options[:long_message]
|
||||
end
|
||||
|
||||
format.json do
|
||||
render :text => 'Pet not found', :status => :not_found
|
||||
render :text => options[:short_message], :status => options[:status]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -114,9 +114,9 @@ class PetType < ActiveRecord::Base
|
|||
begin
|
||||
res.error!
|
||||
rescue Exception => e
|
||||
raise "Error loading CPN image at #{cpn_uri}: #{e.message}"
|
||||
raise DownloadError, "Error loading CPN image at #{cpn_uri}: #{e.message}"
|
||||
else
|
||||
raise "Error loading CPN image at #{cpn_uri}. Response: #{res.inspect}"
|
||||
raise DownloadError, "Error loading CPN image at #{cpn_uri}. Response: #{res.inspect}"
|
||||
end
|
||||
end
|
||||
new_url = res['location']
|
||||
|
@ -124,7 +124,7 @@ class PetType < ActiveRecord::Base
|
|||
if match
|
||||
self.image_hash = match[1]
|
||||
else
|
||||
raise "CPN image pointed to #{new_url}, which does not match CP image format"
|
||||
raise DownloadError, "CPN image pointed to #{new_url}, which does not match CP image format"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -148,4 +148,6 @@ class PetType < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
class DownloadError < Exception;end
|
||||
end
|
||||
|
|
|
@ -95,9 +95,9 @@ class SwfAsset < ActiveRecord::Base
|
|||
begin
|
||||
response.error!
|
||||
rescue Exception => e
|
||||
raise "Error loading SWF at #{url}: #{e.message}"
|
||||
raise DownloadError, "Error loading SWF at #{url}: #{e.message}"
|
||||
else
|
||||
raise "Error loading SWF at #{url}. Response: #{response.inspect}"
|
||||
raise DownloadError, "Error loading SWF at #{url}. Response: #{response.inspect}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -108,6 +108,8 @@ class SwfAsset < ActiveRecord::Base
|
|||
self.body_id = 0 if !self.body_specific? || (!self.new_record? && self.body_id_changed?)
|
||||
end
|
||||
|
||||
class DownloadError < Exception;end
|
||||
|
||||
private
|
||||
|
||||
def local_path_within_outfit_swfs
|
||||
|
|
Loading…
Reference in a new issue