diff --git a/app/controllers/pets_controller.rb b/app/controllers/pets_controller.rb index 9eefd381..bf65dc62 100644 --- a/app/controllers/pets_controller.rb +++ b/app/controllers/pets_controller.rb @@ -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 diff --git a/app/models/pet_type.rb b/app/models/pet_type.rb index fea6a55b..c449c21e 100644 --- a/app/models/pet_type.rb +++ b/app/models/pet_type.rb @@ -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 diff --git a/app/models/swf_asset.rb b/app/models/swf_asset.rb index 985d8685..5bbdef79 100644 --- a/app/models/swf_asset.rb +++ b/app/models/swf_asset.rb @@ -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