fix species:x bug on new arel, start tracking unintended search exceptions

This commit is contained in:
Emi Matchu 2010-11-16 23:32:53 -05:00
parent 09da6e31ac
commit 1f1c219005
2 changed files with 10 additions and 8 deletions

View file

@ -16,7 +16,7 @@ class ItemsController < ApplicationController
format.json { render :json => {:items => @items, :total_pages => @items.total_pages} } format.json { render :json => {:items => @items, :total_pages => @items.total_pages} }
format.js { render :json => {:items => @items, :total_pages => @items.total_pages}, :callback => params[:callback] } format.js { render :json => {:items => @items, :total_pages => @items.total_pages}, :callback => params[:callback] }
end end
rescue rescue Item::SearchError
respond_to do |format| respond_to do |format|
format.html { flash.now[:alert] = $!.message } format.html { flash.now[:alert] = $!.message }
format.js { render :json => {:error => $!.message}, :callback => params[:callback] } format.js { render :json => {:error => $!.message}, :callback => params[:callback] }

View file

@ -73,9 +73,9 @@ class Item < ActiveRecord::Base
end end
def self.search(query) def self.search(query)
raise ArgumentError, "Please provide a search query" unless query raise SearchError, "Please provide a search query" unless query
query = query.strip query = query.strip
raise ArgumentError, "Search queries should be at least 3 characters" if query.length < 3 raise SearchError, "Search queries should be at least 3 characters" if query.length < 3
query_conditions = [Condition.new] query_conditions = [Condition.new]
in_phrase = false in_phrase = false
query.each_char do |c| query.each_char do |c|
@ -284,7 +284,7 @@ class Item < ActiveRecord::Base
search_filter :is do |adjective| search_filter :is do |adjective|
filter = ADJECTIVE_FILTERS[adjective] filter = ADJECTIVE_FILTERS[adjective]
unless filter unless filter
raise ArgumentError, raise SearchError,
"We don't know how an item can be \"#{adjective}\". " + "We don't know how an item can be \"#{adjective}\". " +
"Did you mean is:nc or is:pb?" "Did you mean is:nc or is:pb?"
end end
@ -299,17 +299,17 @@ class Item < ActiveRecord::Base
search_filter :species do |species_name| search_filter :species do |species_name|
id = Species.require_by_name(species_name).id id = Species.require_by_name(species_name).id
ids = arel_table[:species_support_ids] ids = arel_table[:species_support_ids]
ids.eq('').or(ids.matches_any( ids.eq('').or(ids.matches_any([
id, id,
"#{id},%", "#{id},%",
"%,#{id},%", "%,#{id},%",
"%,#{id}" "%,#{id}"
)) ]))
end end
search_filter :type, {:scope => join_swf_assets} do |zone_set_name| search_filter :type, {:scope => join_swf_assets} do |zone_set_name|
zone_set = Zone::ItemZoneSets[zone_set_name] zone_set = Zone::ItemZoneSets[zone_set_name]
raise ArgumentError, "Type \"#{zone_set_name}\" does not exist" unless zone_set raise SearchError, "Type \"#{zone_set_name}\" does not exist" unless zone_set
SwfAsset.arel_table[:zone_id].in(zone_set.map(&:id)) SwfAsset.arel_table[:zone_id].in(zone_set.map(&:id))
end end
@ -327,7 +327,7 @@ class Item < ActiveRecord::Base
if SearchFilterScopes.include?(filter) if SearchFilterScopes.include?(filter)
scope & Item.send("search_filter_#{filter}", self, @negative) scope & Item.send("search_filter_#{filter}", self, @negative)
else else
raise ArgumentError, "Filter #{filter} does not exist" raise SearchError, "Filter #{filter} does not exist"
end end
end end
@ -339,4 +339,6 @@ class Item < ActiveRecord::Base
@filter ? "#{@filter}:#{super}" : super @filter ? "#{@filter}:#{super}" : super
end end
end end
class SearchError < ArgumentError;end
end end