vrfs-774: instrument query filtering

This commit is contained in:
Jonathan Kolyer 2013-10-28 17:19:36 -05:00
parent f6674cfc64
commit 4ccd3b9091
4 changed files with 17 additions and 6 deletions

View File

@ -6,7 +6,7 @@ module JamRuby
LIMIT = 10
ORDER_FOLLOWS = ['Most Followed', :followed]
ORDER_LIKED = ['Most Plays', :plays]
ORDER_PLAYS = ['Most Plays', :plays]
ORDER_PLAYING = ['Playing Now', :playing]
ORDERINGS = [ORDER_FOLLOWS, ORDER_PLAYS, ORDER_PLAYING]
ORDERING_KEYS = ORDERINGS.collect { |oo| oo[1] }

View File

@ -903,7 +903,7 @@ module JamRuby
def self.musician_search(params={}, current_user=nil)
rel = User.where(:musician => true)
unless (instrument = params[:instrument]).blank?
rel = rel.joins("INNER JOIN musicians_instruments AS minst ON minst.user_id = users.id")
rel = rel.joins("RIGHT JOIN musicians_instruments AS minst ON minst.user_id = users.id")
.where(['minst.instrument_id = ?', instrument])
end
@ -935,6 +935,7 @@ module JamRuby
perpage = params[:per_page] || 20
page = [params[:page].to_i, 1].max
rel = rel.paginate(:page => page, :per_page => perpage)
# puts rel.to_sql
rel
end

View File

@ -110,6 +110,12 @@ FactoryGirl.define do
priority 0
end
factory :musician_instrument2, :class => JamRuby::MusicianInstrument do
instrument { Instrument.find('tuba') }
proficiency_level 1
priority 0
end
factory :invited_user, :class => JamRuby::InvitedUser do
sequence(:email) { |n| "user#{n}@someservice.com" }
autofriend false

View File

@ -54,7 +54,7 @@ describe User do
results.all.count.should == 2
end
it "should find all musicians sorted by plays with pagination" do
it "should find all musicians sorted by plays " do
pending
end
@ -63,9 +63,13 @@ describe User do
end
it "should find musicians with an instrument" do
@user1.musician_instruments << FactoryGirl.build(:musician_instrument, user: @user1)
ii = @user1.instruments[0]
ii.should not_be nil
@user1.musician_instruments << FactoryGirl.build(:musician_instrument2, user: @user1)
ii = @user1.instruments.detect { |inst| inst.id == 'tuba' }
ii.should_not be_nil
params = { :instrument => ii.id }
results = User.musician_search(params)
results.all[0].instruments.detect {|inst| inst.id=='tuba'}.id.should == ii.id
results.all.count.should == 1
end
it "should find musicians within a given distance of location" do