vrfs-884: refactored search filter var names
This commit is contained in:
parent
380e264a9a
commit
2a93ce7caf
|
|
@ -2,6 +2,7 @@ module JamRuby
|
|||
# not a active_record model; just a search result
|
||||
class Search
|
||||
attr_accessor :bands, :musicians, :fans, :recordings, :friends, :search_type
|
||||
attr_accessor :bands_filter, :musicians_filter
|
||||
LIMIT = 10
|
||||
|
||||
# performs a site-white search
|
||||
|
|
@ -30,6 +31,8 @@ module JamRuby
|
|||
@fans = []
|
||||
@recordings = []
|
||||
@friends = []
|
||||
@musicians_filter = []
|
||||
@bands_filter = []
|
||||
|
||||
if search_results.nil?
|
||||
return
|
||||
|
|
@ -38,7 +41,7 @@ module JamRuby
|
|||
search_results.take(LIMIT).each do |result|
|
||||
if result.class == User
|
||||
if result.musician
|
||||
@musicians.push(result)
|
||||
@musicians_filter.push(result)
|
||||
@search_type = PARAM_MUSICIAN
|
||||
else
|
||||
@fans.push(result)
|
||||
|
|
@ -158,10 +161,10 @@ module JamRuby
|
|||
COUNTERS = [COUNT_FRIEND, COUNT_FOLLOW, COUNT_RECORD, COUNT_SESSION]
|
||||
|
||||
def musician_results_for_user(results, user)
|
||||
@search_type, @musicians = PARAM_MUSICIAN, results
|
||||
@search_type, @musicians_filter = PARAM_MUSICIAN, results
|
||||
if user
|
||||
@user_counters = results.inject({}) { |hh,val| hh[val.id] = []; hh }
|
||||
mids = "'#{@musicians.map(&:id).join("','")}'"
|
||||
mids = "'#{@musicians_filter.map(&:id).join("','")}'"
|
||||
|
||||
# this gets counts for each search result on friends/follows/records/sessions
|
||||
results.each do |uu|
|
||||
|
|
@ -276,7 +279,7 @@ module JamRuby
|
|||
|
||||
rel = rel.select(sel_str)
|
||||
rel, page = self.relation_pagination(rel, params)
|
||||
rel = rel.includes([:users])
|
||||
rel = rel.includes([{ :users => :instruments } ])
|
||||
|
||||
objs = rel.all
|
||||
srch = Search.new
|
||||
|
|
@ -285,10 +288,10 @@ module JamRuby
|
|||
end
|
||||
|
||||
def band_results_for_user(results, user)
|
||||
@search_type, @bands = PARAM_BAND, results
|
||||
@search_type, @bands_filter = PARAM_BAND, results
|
||||
if user
|
||||
@user_counters = results.inject({}) { |hh,val| hh[val.id] = []; hh }
|
||||
mids = "'#{@bands.map(&:id).join("','")}'"
|
||||
mids = "'#{@bands_filter.map(&:id).join("','")}'"
|
||||
|
||||
# this gets counts for each search result
|
||||
results.each do |bb|
|
||||
|
|
|
|||
|
|
@ -26,23 +26,21 @@ describe 'Band search' do
|
|||
# expects all the bands
|
||||
num = Band.count
|
||||
results = Search.band_search({ :per_page => num })
|
||||
expect(results.bands.count).to eq(num)
|
||||
expect(results.bands_filter.count).to eq(num)
|
||||
end
|
||||
|
||||
it "finds bands with proper ordering" do
|
||||
# the ordering should be create_at since no followers exist
|
||||
expect(BandFollower.count).to eq(0)
|
||||
results = Search.band_search({ :per_page => Band.count })
|
||||
results.bands.each_with_index do |uu, idx|
|
||||
results.bands_filter.each_with_index do |uu, idx|
|
||||
expect(uu.id).to eq(@bands.reverse[idx].id)
|
||||
end
|
||||
end
|
||||
|
||||
it "sorts bands by followers" do
|
||||
users = []
|
||||
4.downto(1) do |nn|
|
||||
users << FactoryGirl.create(:user)
|
||||
end
|
||||
4.downto(1) { |nn| users << FactoryGirl.create(:user) }
|
||||
|
||||
# establish sorting order
|
||||
@band4.followers.concat(users[1..-1])
|
||||
|
|
@ -56,75 +54,51 @@ describe 'Band search' do
|
|||
# refresh the order to ensure it works right
|
||||
@band2.followers.concat(users[1..-1])
|
||||
results = Search.band_search({ :per_page => @bands.size }, users[0])
|
||||
expect(results.bands[0].id).to eq(@band2.id)
|
||||
expect(results.bands_filter[0].id).to eq(@band2.id)
|
||||
|
||||
# check the follower count for given entry
|
||||
expect(results.bands[0].search_follow_count.to_i).not_to eq(0)
|
||||
expect(results.bands_filter[0].search_follow_count.to_i).not_to eq(0)
|
||||
# check the follow relationship between current_user and result
|
||||
expect(results.is_follower?(@band2)).to be true
|
||||
end
|
||||
|
||||
it 'paginates properly' do
|
||||
pending
|
||||
# make sure pagination works right
|
||||
params = { :per_page => 2, :page => 1 }
|
||||
results = Search.band_search(params)
|
||||
expect(results.bands.count).to be 2
|
||||
expect(results.bands_filter.count).to be 2
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
def make_recording(usr)
|
||||
connection = FactoryGirl.create(:connection, :band => usr)
|
||||
instrument = FactoryGirl.create(:instrument, :description => 'a great instrument')
|
||||
track = FactoryGirl.create(:track, :connection => connection, :instrument => instrument)
|
||||
music_session = FactoryGirl.create(:music_session, :creator => usr, :band_access => true)
|
||||
music_session.connections << connection
|
||||
music_session.save
|
||||
recording = Recording.start(music_session, usr)
|
||||
recording.stop
|
||||
recording.reload
|
||||
genre = FactoryGirl.create(:genre)
|
||||
recording.claim(usr, "name", "description", genre, true, true)
|
||||
recording.reload
|
||||
recording
|
||||
def make_session(band)
|
||||
usr = band.users[0]
|
||||
session = FactoryGirl.create(:music_session, :creator => usr, :description => "Session", :band => band)
|
||||
FactoryGirl.create(:connection, :user => usr, :music_session => session)
|
||||
user = FactoryGirl.create(:user)
|
||||
session
|
||||
end
|
||||
|
||||
def make_session(usr)
|
||||
connection = FactoryGirl.create(:connection, :band => usr)
|
||||
music_session = FactoryGirl.create(:music_session, :creator => usr, :band_access => true)
|
||||
music_session.connections << connection
|
||||
music_session.save
|
||||
end
|
||||
|
||||
=begin
|
||||
context 'band stat counters' do
|
||||
|
||||
it "displays bands top followings" do
|
||||
pending
|
||||
@band4.followers.concat([@band4])
|
||||
@band3.followers.concat([@band4])
|
||||
@band2.followers.concat([@band4])
|
||||
expect(@band4.top_followings.count).to be 3
|
||||
expect(@band4.top_followings.map(&:id)).to match_array((@bands - [@band1]).map(&:id))
|
||||
it "follow stat shows follower count" do
|
||||
users = []
|
||||
2.downto(1) { |nn| users << FactoryGirl.create(:user) }
|
||||
|
||||
# establish sorting order
|
||||
@band1.followers.concat(users)
|
||||
results = Search.band_search({},@band1)
|
||||
uu = results.bands_filter.detect { |mm| mm.id == @band1.id }
|
||||
expect(uu).to_not be_nil
|
||||
expect(results.follow_count(uu)).to eq(users.count)
|
||||
end
|
||||
|
||||
it "recording stat shows recording count" do
|
||||
pending
|
||||
recording = make_recording(@band1)
|
||||
expect(recording.bands.length).to be 1
|
||||
expect(recording.bands.first).to eq(@band1)
|
||||
it "session stat shows session count" do
|
||||
make_session(@band1)
|
||||
@band1.reload
|
||||
expect(@band1.recordings.length).to be 1
|
||||
expect(@band1.recordings.first).to eq(recording)
|
||||
expect(recording.claimed_recordings.length).to be 1
|
||||
expect(@band1.recordings.detect { |rr| rr == recording }).to_not be_nil
|
||||
|
||||
results = Search.band_search({},@band1)
|
||||
uu = results.bands.detect { |mm| mm.id == @band1.id }
|
||||
uu = results.bands_filter.detect { |mm| mm.id == @band1.id }
|
||||
expect(uu).to_not be_nil
|
||||
|
||||
expect(results.record_count(uu)).to be 1
|
||||
expect(results.session_count(uu)).to be 1
|
||||
end
|
||||
|
||||
|
|
@ -133,86 +107,81 @@ describe 'Band search' do
|
|||
context 'band sorting' do
|
||||
|
||||
it "by plays" do
|
||||
pending
|
||||
make_recording(@band1)
|
||||
make_session(@band2)
|
||||
make_session(@band2)
|
||||
make_session(@band2)
|
||||
make_session(@band1)
|
||||
# order results by num recordings
|
||||
results = Search.band_search({ :orderby => 'plays' }, @band2)
|
||||
expect(results.bands[0].id).to eq(@band1.id)
|
||||
|
||||
# add more data and make sure order still correct
|
||||
make_recording(@band2); make_recording(@band2)
|
||||
results = Search.band_search({ :orderby => 'plays' }, @band2)
|
||||
expect(results.bands[0].id).to eq(@band2.id)
|
||||
results = Search.band_search({ :orderby => 'plays' })
|
||||
expect(results.bands_filter[0].id).to eq(@band2.id)
|
||||
expect(results.bands_filter[1].id).to eq(@band1.id)
|
||||
end
|
||||
|
||||
it "by now playing" do
|
||||
pending
|
||||
# should get 1 result with 1 active session
|
||||
make_session(@band3)
|
||||
results = Search.band_search({ :orderby => 'playing' }, @band2)
|
||||
expect(results.bands.count).to be 1
|
||||
expect(results.bands.first.id).to eq(@band3.id)
|
||||
session = make_session(@band3)
|
||||
FactoryGirl.create(:music_session_history, :music_session => session)
|
||||
|
||||
results = Search.band_search({ :orderby => 'playing' })
|
||||
expect(results.bands_filter.count).to be 1
|
||||
expect(results.bands_filter.first.id).to eq(@band3.id)
|
||||
|
||||
# should get 2 results with 2 active sessions
|
||||
# sort order should be created_at DESC
|
||||
make_session(@band4)
|
||||
results = Search.band_search({ :orderby => 'playing' }, @band2)
|
||||
expect(results.bands.count).to be 2
|
||||
expect(results.bands[0].id).to eq(@band4.id)
|
||||
expect(results.bands[1].id).to eq(@band3.id)
|
||||
session = make_session(@band4)
|
||||
FactoryGirl.create(:music_session_history, :music_session => session)
|
||||
results = Search.band_search({ :orderby => 'playing' })
|
||||
expect(results.bands_filter.count).to be 2
|
||||
expect(results.bands_filter[0].id).to eq(@band4.id)
|
||||
expect(results.bands_filter[1].id).to eq(@band3.id)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
context 'filter settings' do
|
||||
it "searches musicisns for an instrument" do
|
||||
pending
|
||||
minst = FactoryGirl.create(:band_instrument, {
|
||||
:band => @band1,
|
||||
:instrument => Instrument.find('tuba') })
|
||||
@band1.band_instruments << minst
|
||||
it "searches bands for a genre" do
|
||||
genre = FactoryGirl.create(:genre)
|
||||
@band1.genres << genre
|
||||
@band1.reload
|
||||
ii = @band1.instruments.detect { |inst| inst.id == 'tuba' }
|
||||
expect(ii).to_not be_nil
|
||||
results = Search.band_search({ :instrument => ii.id })
|
||||
results.bands.each do |rr|
|
||||
expect(rr.instruments.detect { |inst| inst.id=='tuba' }.id).to eq(ii.id)
|
||||
ggg = @band1.genres.detect { |gg| gg.id == genre.id }
|
||||
expect(ggg).to_not be_nil
|
||||
results = Search.band_search({ :genre => ggg.id })
|
||||
results.bands_filter.each do |rr|
|
||||
expect(rr.genres.detect { |gg| gg.id==ggg.id }.id).to eq(genre.id)
|
||||
end
|
||||
expect(results.count).to be 1
|
||||
expect(results.bands_filter.count).to be 1
|
||||
end
|
||||
|
||||
it "finds bands within a given distance of given location" do
|
||||
pending
|
||||
num = Band.count
|
||||
expect(@band1.lat).to_not be_nil
|
||||
# short distance
|
||||
results = Search.band_search({ :per_page => num,
|
||||
:distance => 10,
|
||||
:city => 'Apex' }, @band1)
|
||||
expect(results.count).to be num
|
||||
expect(results.bands_filter.count).to be num
|
||||
# long distance
|
||||
results = Search.band_search({ :per_page => num,
|
||||
:distance => 1000,
|
||||
:city => 'Miami',
|
||||
:state => 'FL' }, @band1)
|
||||
expect(results.count).to be num
|
||||
expect(results.bands_filter.count).to be num
|
||||
end
|
||||
|
||||
it "finds bands within a given distance of bands location" do
|
||||
pending
|
||||
expect(@band1.lat).to_not be_nil
|
||||
# uses the location of @band1
|
||||
results = Search.band_search({ :distance => 10, :per_page => Band.count }, @band1)
|
||||
expect(results.count).to be Band.count
|
||||
expect(results.bands_filter.count).to be Band.count
|
||||
end
|
||||
|
||||
it "finds no bands within a given distance of location" do
|
||||
pending
|
||||
expect(@band1.lat).to_not be_nil
|
||||
results = Search.band_search({ :distance => 10, :city => 'San Francisco' }, @band1)
|
||||
expect(results.count).to be 0
|
||||
expect(results.bands_filter.count).to be 0
|
||||
end
|
||||
|
||||
end
|
||||
=end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -18,14 +18,14 @@ describe 'Musician search' do
|
|||
# expects all the users
|
||||
num = User.musicians.count
|
||||
results = Search.musician_search({ :per_page => num })
|
||||
expect(results.musicians.count).to eq(num)
|
||||
expect(results.musicians_filter.count).to eq(num)
|
||||
end
|
||||
|
||||
it "finds musicians with proper ordering" do
|
||||
# the ordering should be create_at since no followers exist
|
||||
expect(UserFollower.count).to eq(0)
|
||||
results = Search.musician_search({ :per_page => User.musicians.count })
|
||||
results.musicians.each_with_index do |uu, idx|
|
||||
results.musicians_filter.each_with_index do |uu, idx|
|
||||
expect(uu.id).to eq(@users.reverse[idx].id)
|
||||
end
|
||||
end
|
||||
|
|
@ -41,10 +41,10 @@ describe 'Musician search' do
|
|||
# refresh the order to ensure it works right
|
||||
@user2.followers.concat([@user3, @user4, @user2])
|
||||
results = Search.musician_search({ :per_page => @users.size }, @user3)
|
||||
expect(results.musicians[0].id).to eq(@user2.id)
|
||||
expect(results.musicians_filter[0].id).to eq(@user2.id)
|
||||
|
||||
# check the follower count for given entry
|
||||
expect(results.musicians[0].search_follow_count.to_i).not_to eq(0)
|
||||
expect(results.musicians_filter[0].search_follow_count.to_i).not_to eq(0)
|
||||
# check the follow relationship between current_user and result
|
||||
expect(results.is_follower?(@user2)).to be true
|
||||
end
|
||||
|
|
@ -53,7 +53,7 @@ describe 'Musician search' do
|
|||
# make sure pagination works right
|
||||
params = { :per_page => 2, :page => 1 }
|
||||
results = Search.musician_search(params)
|
||||
expect(results.musicians.count).to be 2
|
||||
expect(results.musicians_filter.count).to be 2
|
||||
end
|
||||
|
||||
end
|
||||
|
|
@ -96,7 +96,7 @@ describe 'Musician search' do
|
|||
Friendship.save(@user1.id, @user2.id)
|
||||
# search on user2
|
||||
results = Search.musician_search({}, @user2)
|
||||
friend = results.musicians.detect { |mm| mm.id == @user1.id }
|
||||
friend = results.musicians_filter.detect { |mm| mm.id == @user1.id }
|
||||
expect(friend).to_not be_nil
|
||||
expect(results.friend_count(friend)).to be 1
|
||||
@user1.reload
|
||||
|
|
@ -115,7 +115,7 @@ describe 'Musician search' do
|
|||
expect(@user1.recordings.detect { |rr| rr == recording }).to_not be_nil
|
||||
|
||||
results = Search.musician_search({},@user1)
|
||||
uu = results.musicians.detect { |mm| mm.id == @user1.id }
|
||||
uu = results.musicians_filter.detect { |mm| mm.id == @user1.id }
|
||||
expect(uu).to_not be_nil
|
||||
|
||||
expect(results.record_count(uu)).to be 1
|
||||
|
|
@ -130,28 +130,28 @@ describe 'Musician search' do
|
|||
make_recording(@user1)
|
||||
# order results by num recordings
|
||||
results = Search.musician_search({ :orderby => 'plays' }, @user2)
|
||||
expect(results.musicians[0].id).to eq(@user1.id)
|
||||
expect(results.musicians_filter[0].id).to eq(@user1.id)
|
||||
|
||||
# add more data and make sure order still correct
|
||||
make_recording(@user2); make_recording(@user2)
|
||||
results = Search.musician_search({ :orderby => 'plays' }, @user2)
|
||||
expect(results.musicians[0].id).to eq(@user2.id)
|
||||
expect(results.musicians_filter[0].id).to eq(@user2.id)
|
||||
end
|
||||
|
||||
it "by now playing" do
|
||||
# should get 1 result with 1 active session
|
||||
make_session(@user3)
|
||||
results = Search.musician_search({ :orderby => 'playing' }, @user2)
|
||||
expect(results.musicians.count).to be 1
|
||||
expect(results.musicians.first.id).to eq(@user3.id)
|
||||
expect(results.musicians_filter.count).to be 1
|
||||
expect(results.musicians_filter.first.id).to eq(@user3.id)
|
||||
|
||||
# should get 2 results with 2 active sessions
|
||||
# sort order should be created_at DESC
|
||||
make_session(@user4)
|
||||
results = Search.musician_search({ :orderby => 'playing' }, @user2)
|
||||
expect(results.musicians.count).to be 2
|
||||
expect(results.musicians[0].id).to eq(@user4.id)
|
||||
expect(results.musicians[1].id).to eq(@user3.id)
|
||||
expect(results.musicians_filter.count).to be 2
|
||||
expect(results.musicians_filter[0].id).to eq(@user4.id)
|
||||
expect(results.musicians_filter[1].id).to eq(@user3.id)
|
||||
end
|
||||
|
||||
end
|
||||
|
|
@ -166,10 +166,10 @@ describe 'Musician search' do
|
|||
ii = @user1.instruments.detect { |inst| inst.id == 'tuba' }
|
||||
expect(ii).to_not be_nil
|
||||
results = Search.musician_search({ :instrument => ii.id })
|
||||
results.musicians.each do |rr|
|
||||
results.musicians_filter.each do |rr|
|
||||
expect(rr.instruments.detect { |inst| inst.id=='tuba' }.id).to eq(ii.id)
|
||||
end
|
||||
expect(results.musicians.count).to be 1
|
||||
expect(results.musicians_filter.count).to be 1
|
||||
end
|
||||
|
||||
it "finds musicians within a given distance of given location" do
|
||||
|
|
@ -179,26 +179,26 @@ describe 'Musician search' do
|
|||
results = Search.musician_search({ :per_page => num,
|
||||
:distance => 10,
|
||||
:city => 'Apex' }, @user1)
|
||||
expect(results.musicians.count).to be num
|
||||
expect(results.musicians_filter.count).to be num
|
||||
# long distance
|
||||
results = Search.musician_search({ :per_page => num,
|
||||
:distance => 1000,
|
||||
:city => 'Miami',
|
||||
:state => 'FL' }, @user1)
|
||||
expect(results.musicians.count).to be num
|
||||
expect(results.musicians_filter.count).to be num
|
||||
end
|
||||
|
||||
it "finds musicians within a given distance of users location" do
|
||||
expect(@user1.lat).to_not be_nil
|
||||
# uses the location of @user1
|
||||
results = Search.musician_search({ :distance => 10, :per_page => User.musicians.count }, @user1)
|
||||
expect(results.musicians.count).to be User.musicians.count
|
||||
expect(results.musicians_filter.count).to be User.musicians.count
|
||||
end
|
||||
|
||||
it "finds no musicians within a given distance of location" do
|
||||
expect(@user1.lat).to_not be_nil
|
||||
results = Search.musician_search({ :distance => 10, :city => 'San Francisco' }, @user1)
|
||||
expect(results.musicians.count).to be 0
|
||||
expect(results.musicians_filter.count).to be 0
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,12 +1,26 @@
|
|||
object @search
|
||||
|
||||
unless @search.bands.nil? || @search.bands.size == 0
|
||||
if @search.bands.present?
|
||||
child(:bands => :bands) {
|
||||
attributes :id, :name, :location, :photo_url, :logo_url
|
||||
}
|
||||
end
|
||||
|
||||
unless @search.musicians.nil? || @search.musicians.size == 0
|
||||
if @search.musicians.present?
|
||||
child(:musicians => :musicians) {
|
||||
attributes :id, :first_name, :last_name, :name, :location, :photo_url
|
||||
|
||||
node :is_friend do |musician|
|
||||
musician.friends?(current_user)
|
||||
end
|
||||
|
||||
child :musician_instruments => :instruments do
|
||||
attributes :instrument_id, :description, :proficiency_level, :priority
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
if @search.musicians_filter.present?
|
||||
|
||||
node :city do |user|
|
||||
current_user.try(:location)
|
||||
|
|
@ -16,7 +30,7 @@ unless @search.musicians.nil? || @search.musicians.size == 0
|
|||
@search.page_count
|
||||
end
|
||||
|
||||
child(:musicians => :musicians) {
|
||||
child(:musicians_filter => :musicians) {
|
||||
attributes :id, :first_name, :last_name, :name, :city, :state, :country, :email, :online, :musician, :photo_url, :biography
|
||||
|
||||
node :is_friend do |musician|
|
||||
|
|
|
|||
Loading…
Reference in New Issue