VRFS-2795 distance sort order
This commit is contained in:
parent
cc1660d1dc
commit
f3344affaf
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue