vrfs-884: refactored search filter var names

This commit is contained in:
Jonathan Kolyer 2013-12-09 13:54:02 -06:00
parent 380e264a9a
commit 2a93ce7caf
4 changed files with 105 additions and 119 deletions

View File

@ -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|

View File

@ -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

View File

@ -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

View File

@ -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|