VRFS-2795 distance sort order

This commit is contained in:
Jonathan Kolyer 2015-03-26 05:56:43 +00:00
parent cc1660d1dc
commit f3344affaf
2 changed files with 34 additions and 3 deletions

View File

@ -183,20 +183,34 @@ module JamRuby
end
def _skills(rel)
if 0 < (val = json['skill_level'].to_i)
if 0 < (val = json[KEY_SKILL].to_i)
rel = rel.where(['skill_level = ?', val])
end
rel
end
def _interests(rel)
val = json['interests']
val = json[KEY_INTERESTS]
if val.present? && ANY_VAL_STR != val
rel = rel.where("#{val} = ?", true)
end
rel
end
def _sort_order(rel)
val = json[KEY_SORT_ORDER]
if SORT_VALS[1] == val
locidispid = self.user.last_jam_locidispid || 0
my_locid = locidispid / 1000000
rel = rel.joins("INNER JOIN geoiplocations AS my_geo ON my_geo.locid = #{my_locid}")
rel = rel.joins("INNER JOIN geoiplocations AS other_geo ON users.last_jam_locidispid/1000000 = other_geo.locid")
rel = rel.group("users.id, my_geo.geog, other_geo.geog")
rel = rel.order('st_distance(my_geo.geog, other_geo.geog)')
else
end
rel
end
def pagination(rel, params)
perpage = [(params[:per_page] || PER_PAGE).to_i, 100].min
page = [params[:page].to_i, 1].max
@ -204,7 +218,7 @@ module JamRuby
end
def do_search(params={})
rel = User.musicians
rel = User.musicians.where(['users.id != ?', self.user.id])
rel = self._genres(rel)
rel = self._ages(rel)
rel = self._studios(rel)
@ -212,6 +226,7 @@ module JamRuby
rel = self._skills(rel)
rel = self._instruments(rel)
rel = self._interests(rel)
rel = self._sort_order(rel)
rel
end

View File

@ -1,9 +1,16 @@
require 'spec_helper'
require 'time_difference'
require 'byebug'
describe 'Musician Search Model' do
let!(:searcher) { FactoryGirl.create(:austin_user) }
let!(:search) { MusicianSearch.create_search(searcher) }
let!(:austin_user) { FactoryGirl.create(:austin_user) }
let!(:dallas_user) { FactoryGirl.create(:dallas_user) }
let!(:miami_user) { FactoryGirl.create(:miami_user) }
let!(:seattle_user) { FactoryGirl.create(:seattle_user) }
let!(:user_types) { [:austin_user, :dallas_user, :miami_user, :seattle_user] }
describe "creates search obj" do
@ -185,5 +192,14 @@ describe 'Musician Search Model' do
create_phony_database
end
it "sorts by distance" do
search.update_json_value(MusicianSearch::KEY_SORT_ORDER, MusicianSearch::SORT_VALS[1])
results = search.do_search
expect(results[0].id).to eq(austin_user.id)
expect(results[1].id).to eq(dallas_user.id)
expect(results[2].id).to eq(miami_user.id)
expect(results[3].id).to eq(seattle_user.id)
end
end
end