From 9c0afd6ccd52d4849bfa28a4c593d920eca56d4a Mon Sep 17 00:00:00 2001
From: Jonathan Kolyer
Date: Mon, 2 Jun 2014 01:56:26 +0000
Subject: [PATCH 01/25] VRFS-1664 fixed var name
---
.../app/views/jam_ruby/user_mailer/new_musicians.html.erb | 2 +-
.../app/views/jam_ruby/user_mailer/new_musicians.text.erb | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.html.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.html.erb
index c7299aa3f..0a48b367e 100644
--- a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.html.erb
+++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.html.erb
@@ -7,7 +7,7 @@ Hi <%= @user.first_name %>,
<% link_style = "background-color:#ED3618; margin:0px 8px 0px 8px; border: solid 1px #F27861; outline: solid 2px #ED3618; padding:3px 10px; font-family:Raleway, Arial, Helvetica, sans-serif; font-size:12px; font-weight:300; cursor:pointer; color:#FC9; text-decoration:none;" %>
-<% @new_nearby.each do |user| %>
+<% @new_musicians.each do |user| %>
 |
<%= user.name %>
diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.text.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.text.erb
index f1b51b9d7..c1d1c236a 100644
--- a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.text.erb
+++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.text.erb
@@ -1,10 +1,10 @@
-New JamKazam Musicians in your Area
+New Musicians You Should Check Out
Hi <%= @user.first_name %>,
The following new musicians have joined JamKazam within the last week, and have Internet connections with low enough latency to you that you can have a good online session together. We'd suggest that you look through the new musicians listed below to see if any match your musical interests, and if so, click through to their profile page on the JamKazam website to send them a message or a request to connect as a JamKazam friend:
-<% @new_nearby.each do |user| %>
+<% @new_musicians.each do |user| %>
<%= user.name %> (http://<%= @host %>/client#/profile/<%= user.id %>)
<%= user.location %>
<% user.instruments.collect { |inst| inst.description }.join(', ') %>
From e35e31888420825f0bd6ec7d56db1c560767497c Mon Sep 17 00:00:00 2001
From: Jonathan Kolyer
Date: Mon, 2 Jun 2014 02:11:00 +0000
Subject: [PATCH 02/25] VRFS-1664 replace tmp tbl with subquery
---
.../models/email_batch_new_musician.rb | 38 +++++++------------
1 file changed, 14 insertions(+), 24 deletions(-)
diff --git a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb
index 819ecdbbc..1e6f1cb70 100644
--- a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb
+++ b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb
@@ -9,7 +9,6 @@ module JamRuby
VAR_MUSICIAN_TABLE = "@MUSICIAN_TABLE"
TMP_NEW = 'tmp_new_musicians'
- TMP_CAND = 'tmp_receiver_candidates'
TMP_PAIRS = 'tmp_receivers_new_musicians'
def self.subject
@@ -32,37 +31,31 @@ SQL
ActiveRecord::Base.connection.execute(sql)
end
- def _fetch_receiver_candidates
- ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS #{TMP_CAND}")
- sql =<
Date: Mon, 2 Jun 2014 02:31:42 +0000
Subject: [PATCH 03/25] VRFS-1664 added paging to fetc_recipients
---
.../models/email_batch_new_musician.rb | 35 +++++++++++--------
1 file changed, 21 insertions(+), 14 deletions(-)
diff --git a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb
index 1e6f1cb70..e73bce1bc 100644
--- a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb
+++ b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb
@@ -60,7 +60,7 @@ SQL
ActiveRecord::Base.connection.execute(sql)
end
- def fetch_recipients
+ def fetch_recipients(per_page=500)
objs = []
# load new musicians into tmp table
self._fetch_new_musicians
@@ -68,20 +68,27 @@ SQL
# load email receivers into tmp table
self._fetch_eligible_receivers
- sql = "SELECT DISTINCT receiver_id FROM #{TMP_PAIRS} GROUP BY receiver_id"
- ActiveRecord::Base.connection.execute(sql).each do |result|
- receiver = User.find_by_id(result['receiver_id'])
-
- sql = "SELECT new_user_id, latency FROM #{TMP_PAIRS} WHERE receiver_id = '#{receiver.id}'"
- new_musicians = ActiveRecord::Base.connection.execute(sql).collect do |rr|
- new_user = User.where(['id = ?',rr['new_user_id']])
- .limit(1)
- .includes([:instruments])
- .first
- new_user.latency_store = result['latency']
- new_user
+ countsql = "SELECT DISTINCT COUNT(receiver_id) AS num FROM #{TMP_PAIRS} GROUP BY receiver_id"
+ num_pair = ActiveRecord::Base.connection.execute(countsql)[0]['num'].to_i
+ loops = (num_pair / per_page) + (num_pair % per_page) - 1
+ 0.upto(loops) do |nn|
+ offset = nn * per_page
+ sql =<
Date: Sun, 1 Jun 2014 22:34:32 -0400
Subject: [PATCH 04/25] renamed scheduled_session.js to session_info.js
---
.../javascripts/web/{scheduled_session.js => session_info.js} | 0
web/app/assets/javascripts/web/web.js | 2 +-
2 files changed, 1 insertion(+), 1 deletion(-)
rename web/app/assets/javascripts/web/{scheduled_session.js => session_info.js} (100%)
diff --git a/web/app/assets/javascripts/web/scheduled_session.js b/web/app/assets/javascripts/web/session_info.js
similarity index 100%
rename from web/app/assets/javascripts/web/scheduled_session.js
rename to web/app/assets/javascripts/web/session_info.js
diff --git a/web/app/assets/javascripts/web/web.js b/web/app/assets/javascripts/web/web.js
index edf1ca888..819bbb975 100644
--- a/web/app/assets/javascripts/web/web.js
+++ b/web/app/assets/javascripts/web/web.js
@@ -53,7 +53,7 @@
//= require web/downloads
//= require web/congratulations
//= require web/sessions
-//= require web/scheduled_session
+//= require web/session_info
//= require web/recordings
//= require web/welcome
//= require banner
From 7ea659c71f4f0123d91403ff2f02c71389aa5c42 Mon Sep 17 00:00:00 2001
From: Jonathan Kolyer
Date: Mon, 2 Jun 2014 06:01:55 +0000
Subject: [PATCH 05/25] VRFS-1665 rewrote daily email queries and adding
pagination; other tweaks
---
.../scheduled_session_daily.html.erb | 2 +-
.../scheduled_session_daily.text.erb | 2 +-
.../models/email_batch_new_musician.rb | 4 +-
.../models/email_batch_scheduled_sessions.rb | 110 +++++++++++-------
ruby/lib/jam_ruby/models/music_session.rb | 3 -
ruby/lib/jam_ruby/models/user.rb | 3 -
.../email_batch_spec_scheduled_session.rb | 6 +-
7 files changed, 79 insertions(+), 51 deletions(-)
diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/scheduled_session_daily.html.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/scheduled_session_daily.html.erb
index 40788d8de..0d6ba9a6b 100644
--- a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/scheduled_session_daily.html.erb
+++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/scheduled_session_daily.html.erb
@@ -25,7 +25,7 @@
| <%= sess.genre.description %> |
<%= sess.description %> |
-<%= sess.latency_store %> |
+<%= sess.latency %> |
<% end %>
|
diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/scheduled_session_daily.text.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/scheduled_session_daily.text.erb
index 16ce1e7c1..423c57f44 100644
--- a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/scheduled_session_daily.text.erb
+++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/scheduled_session_daily.text.erb
@@ -11,7 +11,7 @@ Take a look through these new sessions below, and just click the RSVP button on
GENRE | DESCRIPTION | LATENCY
<% @sessions_and_latency.each do |sess| %>
-<%= sess.genre.description %> | <%= sess.description %> | <%= sess.latency_store %>
+<%= sess.genre.description %> | <%= sess.description %> | <%= sess.latency %>
<% end %>
To see ALL the scheduled sessions that you might be interested in joining, view our Find Session page at: http://www.jamkazam.com/client#/findSession.
diff --git a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb
index e73bce1bc..8f16b8d7f 100644
--- a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb
+++ b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb
@@ -69,7 +69,9 @@ SQL
self._fetch_eligible_receivers
countsql = "SELECT DISTINCT COUNT(receiver_id) AS num FROM #{TMP_PAIRS} GROUP BY receiver_id"
- num_pair = ActiveRecord::Base.connection.execute(countsql)[0]['num'].to_i
+ rr = ActiveRecord::Base.connection.execute(countsql)
+ num_pair = 0 < rr.count ? rr[0]['num'].to_i : 0
+
loops = (num_pair / per_page) + (num_pair % per_page) - 1
0.upto(loops) do |nn|
offset = nn * per_page
diff --git a/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb b/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb
index d3903a5a9..f5b26e7e3 100644
--- a/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb
+++ b/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb
@@ -5,8 +5,9 @@ module JamRuby
SINCE_DAYS = 2
MIN_HOURS_START = 2
- TMP_SNAP = 'tmp_scheduled_session_snapshot'
- TMP_USER = 'tmp_scheduled_session_user'
+ TMP_SESS = 'tmp_candidate_sessions'
+ TMP_RECIP = 'tmp_candidate_recipients'
+ TMP_MATCH = 'tmp_matches'
def self.subject
"New sessions have been scheduled that may be a good match for you!"
@@ -14,22 +15,23 @@ module JamRuby
# inserts eligible sessions to temp table
def _collect_eligible_sessions
- ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS #{TMP_SNAP}")
+ ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS #{TMP_SESS}")
sql =< '#{time_since_last_batch(SINCE_DAYS)}' AND
+ msess.created_at < '#{self.created_at}' AND
scheduled_start >= '#{Time.now() + MIN_HOURS_START.hours}' AND
(rrrs.rsvp_slot_id IS NULL OR rrrs.chosen != 't')
SQL
@@ -37,41 +39,65 @@ SQL
end
def _collect_eligible_recipients
- ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS #{TMP_USER}")
+ ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS #{TMP_RECIP}")
# load eligible recipients into tmp table
sql =< offset
+ sql =< drummer,
:scheduled_start => Time.now() + 2.days,
:musician_access => true,
- :approval_required => false)
+ :approval_required => false,
+ :created_at => Time.now - 1.hour)
end
let (:session2) do
FactoryGirl.create(:music_session,
:creator => drummer,
:scheduled_start => Time.now() + 2.days,
:musician_access => true,
- :approval_required => false)
+ :approval_required => false,
+ :created_at => Time.now - 1.hour)
end
before(:each) do
From 1f726df3209b678d030e97f284cc019075468890 Mon Sep 17 00:00:00 2001
From: Jonathan Kolyer
Date: Mon, 2 Jun 2014 06:17:31 +0000
Subject: [PATCH 06/25] VRFS-1665 prevent session creator from getting notified
of sessions
---
.../lib/jam_ruby/models/email_batch_scheduled_sessions.rb | 8 ++++++--
.../jam_ruby/models/email_batch_spec_scheduled_session.rb | 2 +-
2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb b/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb
index f5b26e7e3..d9c8c915e 100644
--- a/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb
+++ b/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb
@@ -68,8 +68,12 @@ FROM scores
INNER JOIN #{TMP_SESS} ON #{TMP_SESS}.creator_score_idx = scores.alocidispid
INNER JOIN #{TMP_RECIP} ON #{TMP_RECIP}.receiver_score_idx = scores.blocidispid
WHERE
- scores.score < #{Score::MAX_YELLOW_LATENCY}
-GROUP BY #{TMP_RECIP}.receiver_id, #{TMP_SESS}.session_id, latency
+ scores.score < #{Score::MAX_YELLOW_LATENCY} AND
+ #{TMP_RECIP}.receiver_id != #{TMP_SESS}.creator_id
+GROUP BY
+ #{TMP_RECIP}.receiver_id,
+ #{TMP_SESS}.session_id,
+ latency
SQL
ActiveRecord::Base.connection.execute(sql)
end
diff --git a/ruby/spec/jam_ruby/models/email_batch_spec_scheduled_session.rb b/ruby/spec/jam_ruby/models/email_batch_spec_scheduled_session.rb
index 1e591177b..3b235a199 100644
--- a/ruby/spec/jam_ruby/models/email_batch_spec_scheduled_session.rb
+++ b/ruby/spec/jam_ruby/models/email_batch_spec_scheduled_session.rb
@@ -95,7 +95,7 @@ describe EmailBatchScheduledSessions do
expect(drummer.instruments.include?(drums)).to eq(true)
expect(drummer.instruments.include?(guitar)).to eq(true)
obj = scheduled_batch.fetch_recipients
- expect(obj.count).to eq(3)
+ expect(obj.count).to eq(2)
end
it 'sends email' do
From d36ec17436b03124c1f2a1f1e370524a99a11355 Mon Sep 17 00:00:00 2001
From: Jonathan Kolyer
Date: Tue, 3 Jun 2014 03:25:23 +0000
Subject: [PATCH 07/25] VRFS-1664 fixed mail sending test
---
ruby/lib/jam_ruby/app/mailers/user_mailer.rb | 1 -
.../app/views/jam_ruby/user_mailer/new_musicians.html.erb | 2 +-
.../app/views/jam_ruby/user_mailer/new_musicians.text.erb | 2 +-
ruby/lib/jam_ruby/models/email_batch_new_musician.rb | 2 +-
ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb | 4 ++--
5 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/ruby/lib/jam_ruby/app/mailers/user_mailer.rb b/ruby/lib/jam_ruby/app/mailers/user_mailer.rb
index 29ddc3e68..a292357f3 100644
--- a/ruby/lib/jam_ruby/app/mailers/user_mailer.rb
+++ b/ruby/lib/jam_ruby/app/mailers/user_mailer.rb
@@ -104,7 +104,6 @@
def new_musicians(user, new_musicians, host='www.jamkazam.com')
@user, @new_musicians, @host = user, new_musicians, host
-
sendgrid_recipients([user.email])
sendgrid_substitute('@USERID', [user.id])
sendgrid_unique_args :type => "new_musicians"
diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.html.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.html.erb
index 0a48b367e..8551c23df 100644
--- a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.html.erb
+++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.html.erb
@@ -24,7 +24,7 @@ Hi <%= @user.first_name %>,
<% end %>
-There are currently <%= @new_nearby.size%> musicians on JamKazam with low enough latency Internet connections to you to support a good online session. To see ALL the JamKazam musicians with whom you may want to connect and play, view our Musicians page at: http://www.jamkazam.com/client#/musicians.
+
There are currently <%= @new_musicians.size%> musicians on JamKazam with low enough latency Internet connections to you to support a good online session. To see ALL the JamKazam musicians with whom you may want to connect and play, view our Musicians page at: http://www.jamkazam.com/client#/musicians.
Best Regards,
diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.text.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.text.erb
index c1d1c236a..df39c005a 100644
--- a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.text.erb
+++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.text.erb
@@ -11,7 +11,7 @@ The following new musicians have joined JamKazam within the last week, and have
<%= user.biography %>
<% end %>
-There are currently <%= @new_nearby.size%> musicians on JamKazam with low enough latency Internet connections to you to support a good online session. To see ALL the JamKazam musicians with whom you may want to connect and play, view our Musicians page at: http://www.jamkazam.com/client#/musicians.
+There are currently <%= @new_musicians.size%> musicians on JamKazam with low enough latency Internet connections to you to support a good online session. To see ALL the JamKazam musicians with whom you may want to connect and play, view our Musicians page at: http://www.jamkazam.com/client#/musicians.
Best Regards,
Team JamKazam
diff --git a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb
index 8f16b8d7f..4eadd5311 100644
--- a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb
+++ b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb
@@ -100,7 +100,7 @@ SQL
self.fetch_recipients do |user, new_musicians|
self.opt_in_count += 1
bset = EmailBatchSet.new_musician_set(self, user, new_musicians)
- UserMailer.new_musicians(uu, new_musicians).deliver
+ UserMailer.new_musicians(user, new_musicians).deliver
end
self.sent_count = self.opt_in_count
self.save
diff --git a/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb b/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb
index e259ed865..d6dd13626 100644
--- a/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb
+++ b/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb
@@ -54,10 +54,10 @@ describe EmailBatchNewMusician do
end
it 'sends email' do
- pending
+ receiver; drummer; loser; vocalist
ebatch = new_musician_batch
ebatch.deliver_batch
- expect(UserMailer.deliveries.length).to eq(3)
+ expect(UserMailer.deliveries.length).to eq(1)
end
end
From 8d35ea09e8a12bf6048545e1f8522492c1666785 Mon Sep 17 00:00:00 2001
From: Jonathan Kolyer
Date: Tue, 3 Jun 2014 04:01:48 +0000
Subject: [PATCH 08/25] VRFS-1664 added another test
---
.../models/email_batch_spec_new_musicians.rb | 43 ++++++++++++++++---
1 file changed, 37 insertions(+), 6 deletions(-)
diff --git a/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb b/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb
index d6dd13626..ae0e91c11 100644
--- a/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb
+++ b/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb
@@ -15,13 +15,20 @@ describe EmailBatchNewMusician do
let (:new_musician_batch) { FactoryGirl.create(:email_batch_new_musician) }
- let (:receiver) {
+ let (:receiver1) {
FactoryGirl.create(:user,
:created_at => Time.now - (EmailBatchNewMusician::SINCE_DAYS.days + 1.day),
:last_jam_locidispid => 1,
:last_jam_addr => 1
)
}
+ let (:receiver2) {
+ FactoryGirl.create(:user,
+ :created_at => Time.now - (EmailBatchNewMusician::SINCE_DAYS.days + 1.day),
+ :last_jam_locidispid => 3,
+ :last_jam_addr => 3
+ )
+ }
let (:drummer) { FactoryGirl.create(:user,
:last_jam_locidispid => 1,
@@ -38,27 +45,51 @@ describe EmailBatchNewMusician do
let (:loser) { FactoryGirl.create(:user,
:last_jam_locidispid => 2,
:last_jam_addr => 2) }
+ let (:drummer3) { FactoryGirl.create(:user,
+ :last_jam_locidispid => 3,
+ :last_jam_addr => 3) }
+ let (:guitarist3) { FactoryGirl.create(:user,
+ :last_jam_locidispid => 3,
+ :last_jam_addr => 3) }
+ let (:bassist3) { FactoryGirl.create(:user,
+ :last_jam_locidispid => 3,
+ :last_jam_addr => 3) }
+ let (:vocalist3) { FactoryGirl.create(:user,
+ :last_jam_locidispid => 3,
+ :last_jam_addr => 3) }
before(:each) do
-
+ drummer; guitarist; bassist; vocalist; loser
+ drummer3; guitarist3; bassist3; vocalist3
+ receiver1; receiver2
+ new_musician_batch.reset!
+ JamRuby::Score.delete_all
JamRuby::Score.createx(1, 'a', 1, 1, 'a', 1, 10)
JamRuby::Score.createx(1, 'a', 1, 2, 'a', 2, Score::MAX_YELLOW_LATENCY + 1)
end
it 'sets up data properly' do
- receiver; drummer; loser; vocalist
results = new_musician_batch.fetch_recipients
expect(results.count).to eq(1)
user, new_musicians = results[0]
- expect(user.id).to eq(receiver.id)
- expect(new_musicians.count).to eq(2)
+ expect(user.id).to eq(receiver1.id)
+ expect(new_musicians.count).to eq(4)
end
it 'sends email' do
- receiver; drummer; loser; vocalist
ebatch = new_musician_batch
ebatch.deliver_batch
expect(UserMailer.deliveries.length).to eq(1)
end
+ it 'handles multiple receivers' do
+ JamRuby::Score.createx(1, 'a', 1, 3, 'a', 3, 10)
+ results = new_musician_batch.fetch_recipients
+ expect(results.count).to eq(2)
+ user, new_musicians = results.detect { |rr| rr[0].id == receiver1.id }
+ expect(new_musicians.count).to eq(8)
+ user, new_musicians = results.detect { |rr| rr[0].id == receiver2.id }
+ expect(new_musicians.count).to eq(4)
+ end
+
end
end
From abc1044431c53600f98eeb560842375d29f90111 Mon Sep 17 00:00:00 2001
From: Jonathan Kolyer
Date: Tue, 3 Jun 2014 04:03:02 +0000
Subject: [PATCH 09/25] VRFS-1664 added another test
---
ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb | 2 ++
1 file changed, 2 insertions(+)
diff --git a/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb b/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb
index ae0e91c11..eb44e12c2 100644
--- a/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb
+++ b/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb
@@ -83,6 +83,8 @@ describe EmailBatchNewMusician do
it 'handles multiple receivers' do
JamRuby::Score.createx(1, 'a', 1, 3, 'a', 3, 10)
+ JamRuby::Score.createx(1, 'a', 1, 4, 'a', 4, 10)
+ JamRuby::Score.createx(2, 'a', 2, 4, 'a', 4, 10)
results = new_musician_batch.fetch_recipients
expect(results.count).to eq(2)
user, new_musicians = results.detect { |rr| rr[0].id == receiver1.id }
From a9b67a9a6b19a0cf875939ecf25835a61290d067 Mon Sep 17 00:00:00 2001
From: Brian Smith
Date: Tue, 3 Jun 2014 01:10:25 -0400
Subject: [PATCH 10/25] VRFS-1693 resque job to schedule recurring music
sessions
---
db/manifest | 1 +
...eduled_sessions_next_session_scheduled.sql | 1 +
ruby/lib/jam_ruby/models/music_session.rb | 63 +++++++++++++++++++
.../scheduled/music_session_scheduler.rb | 39 ++++++++++++
web/config/scheduler.yml | 4 ++
5 files changed, 108 insertions(+)
create mode 100644 db/up/scheduled_sessions_next_session_scheduled.sql
diff --git a/db/manifest b/db/manifest
index d4b3013d5..4b526266a 100755
--- a/db/manifest
+++ b/db/manifest
@@ -169,3 +169,4 @@ periodic_emails.sql
remember_extra_scoring_data.sql
indexing_for_regions.sql
latency_tester.sql
+scheduled_sessions_next_session_scheduled.sql
\ No newline at end of file
diff --git a/db/up/scheduled_sessions_next_session_scheduled.sql b/db/up/scheduled_sessions_next_session_scheduled.sql
new file mode 100644
index 000000000..ac59d437a
--- /dev/null
+++ b/db/up/scheduled_sessions_next_session_scheduled.sql
@@ -0,0 +1 @@
+alter table music_sessions add column next_session_scheduled BOOLEAN default null;
\ No newline at end of file
diff --git a/ruby/lib/jam_ruby/models/music_session.rb b/ruby/lib/jam_ruby/models/music_session.rb
index 53cb4450c..13b340db2 100644
--- a/ruby/lib/jam_ruby/models/music_session.rb
+++ b/ruby/lib/jam_ruby/models/music_session.rb
@@ -62,6 +62,69 @@ module JamRuby
self.comments.size
end
+ # copies all relevant info for the recurring session
+ def copy
+
+ MusicSession.transaction do
+ # copy base music_session data
+ new_session = MusicSession.new
+ new_session.description = self.description
+ new_session.user_id = self.user_id
+ new_session.band_id = self.band_id
+ new_session.fan_access = self.fan_access
+ # TODO: confirm this logic
+ new_session.scheduled_start = self.scheduled_start + self.scheduled_duration
+ new_session.scheduled_duration = self.scheduled_duration
+ new_session.musician_access = self.musician_access
+ new_session.approval_required = self.approval_required
+ new_session.fan_chat = self.fan_chat
+ new_session.genre_id = self.genre_id
+ new_session.legal_policy = self.legal_policy
+ new_session.language = self.language
+ new_session.name = self.name
+ new_session.recurring_mode = self.recurring_mode
+ new_session.timezone = self.timezone
+ new_session.open_rsvps = self.open_rsvps
+ new_session.save
+
+ # copy rsvp_slots
+ RsvpSlot.find_each(:conditions => "music_session_id = '#{self.id}'") do |slot|
+ new_slot = RsvpSlot.new
+ new_slot.instrument_id = slot.instrument_id
+ new_slot.proficiency_level = slot.proficiency_level
+ new_slot.music_session_id = new_session.id
+ new_slot.save
+ end
+
+ # copy music_notations
+ MusicNotation.find_each(:conditions => "music_session_id = '#{self.id}'") do |notation|
+ new_notation = MusicNotation.new
+ new_notation.user_id = notation.user_id
+ new_notation.music_session_id = new_session.id
+ new_notation.file_url = notation.file_url
+ new_notation.size = notation.size
+ new_notation.save
+ end
+
+ # copy invitations
+ Invitation.find_each(:conditions => "music_session_id = '#{self.id}'") do |invitation|
+ new_invitation = Invitation.new
+ new_invitation.sender_id = invitation.sender_id
+ new_invitation.receiver_id = invitation.receiver_id
+ new_invitation.music_session_id = new_session.id
+ new_invitation.save
+
+ user = User.find(new_invitation.receiver_id)
+ Notification.send_scheduled_session_invitation(new_session, user)
+ end
+
+ # mark the next session as scheduled
+ self.next_session_scheduled = true
+ self.save
+ end
+
+ end
+
def grouped_tracks
tracks = []
self.music_session_user_histories.each do |msuh|
diff --git a/ruby/lib/jam_ruby/resque/scheduled/music_session_scheduler.rb b/ruby/lib/jam_ruby/resque/scheduled/music_session_scheduler.rb
index e69de29bb..6babdd5ee 100644
--- a/ruby/lib/jam_ruby/resque/scheduled/music_session_scheduler.rb
+++ b/ruby/lib/jam_ruby/resque/scheduled/music_session_scheduler.rb
@@ -0,0 +1,39 @@
+require 'json'
+require 'resque'
+require 'resque-retry'
+require 'net/http'
+require 'digest/md5'
+
+module JamRuby
+
+ class MusicSessionScheduler
+ extend Resque::Plugins::LonelyJob
+
+ @queue = :music_session_scheduler
+
+ @@log = Logging.logger[MusicSessionScheduler]
+
+ def self.lock_timeout
+ 120
+ end
+
+ def self.perform
+ @@log.debug("waking up")
+
+ JamWebEventMachine.run_wait_stop do
+ MusicSessionScheduler.new.run
+ end
+
+ @@log.debug("done")
+ end
+
+ def run
+ # get all weekly sessions that have ended in the last 15 minutes
+ criteria = "recurring_mode = 'weekly' AND session_removed_at is not null AND next_session_scheduled = false"
+ MusicSession.find_each(:conditions => criteria) do |music_session|
+ music_session.copy
+ end
+ end
+
+ end
+end
\ No newline at end of file
diff --git a/web/config/scheduler.yml b/web/config/scheduler.yml
index 85297676e..87753a1f4 100644
--- a/web/config/scheduler.yml
+++ b/web/config/scheduler.yml
@@ -39,3 +39,7 @@ NewMusicianEmailer:
class: "JamRuby::NewMusicianEmailer"
description: "Sends weekly emails of new users with good latency"
+MusicSessionScheduler:
+ cron: "0 */5 0 * *"
+ class: "JamRuby::MusicSessionScheduler"
+ description: "Schedules music sessions that are marked as recurring"
\ No newline at end of file
From d07e649c7bfd5692483accdb1d22c45a59e72643 Mon Sep 17 00:00:00 2001
From: Brian Smith
Date: Wed, 4 Jun 2014 01:47:28 -0400
Subject: [PATCH 11/25] VRFS-1693 music session scheduler
---
ruby/lib/jam_ruby/models/music_session.rb | 54 ++++++++++++++++++-----
1 file changed, 44 insertions(+), 10 deletions(-)
diff --git a/ruby/lib/jam_ruby/models/music_session.rb b/ruby/lib/jam_ruby/models/music_session.rb
index 13b340db2..4395127bf 100644
--- a/ruby/lib/jam_ruby/models/music_session.rb
+++ b/ruby/lib/jam_ruby/models/music_session.rb
@@ -87,13 +87,46 @@ module JamRuby
new_session.open_rsvps = self.open_rsvps
new_session.save
- # copy rsvp_slots
+ # copy rsvp_slots, rsvp_requests, and rsvp_requests_rsvp_slots
RsvpSlot.find_each(:conditions => "music_session_id = '#{self.id}'") do |slot|
new_slot = RsvpSlot.new
new_slot.instrument_id = slot.instrument_id
new_slot.proficiency_level = slot.proficiency_level
new_slot.music_session_id = new_session.id
new_slot.save
+
+ # get the request for this slot that was approved (should only be ONE)
+ rsvp_request_slot = RsvpRequestRsvpSlot.where("chosen = true AND rsvp_slot_id = ?", slot.id).first
+
+ unless rsvp_request_slot.nil?
+ rsvp = RsvpRequest.find_by_id(rsvp_request_slot.rsvp_request_id)
+ new_rsvp = RsvpRequest.new
+ new_rsvp.user_id = rsvp.user_id
+ new_rsvp.save
+
+ new_rsvp_req_slot = RsvpRequestRsvpSlot.new
+ new_rsvp_req_slot.rsvp_request_id = new_rsvp.id
+ new_rsvp_req_slot.rsvp_slot_id = new_slot.id
+ new_rsvp_req_slot.chosen = true
+ new_rsvp_req_slot.save
+ end
+
+ # now get any RSVPs that were 1-time cancellations and copy those
+ rejected_req_slots = RsvpRequestRsvpSlot.where("chosen = false AND rsvp_slot_id = ?", slot.id)
+ rejected_req_slots.each do |req_slot|
+ rsvp = RsvpRequest.find_by_id(req_slot.rsvp_request_id)
+ if rsvp.canceled && !rsvp.cancel_all
+ new_rsvp = RsvpRequest.new
+ new_rsvp.user_id = rsvp.user_id
+ new_rsvp.save
+
+ new_rsvp_req_slot = RsvpRequestRsvpSlot.new
+ new_rsvp_req_slot.rsvp_request_id = new_rsvp.id
+ new_rsvp_req_slot.rsvp_slot_id = new_slot.id
+ new_rsvp_req_slot.chosen = true
+ new_rsvp_req_slot.save
+ end
+ end
end
# copy music_notations
@@ -102,21 +135,22 @@ module JamRuby
new_notation.user_id = notation.user_id
new_notation.music_session_id = new_session.id
new_notation.file_url = notation.file_url
+ # new_notation.file_name = notation.file_name
new_notation.size = notation.size
new_notation.save
end
# copy invitations
- Invitation.find_each(:conditions => "music_session_id = '#{self.id}'") do |invitation|
- new_invitation = Invitation.new
- new_invitation.sender_id = invitation.sender_id
- new_invitation.receiver_id = invitation.receiver_id
- new_invitation.music_session_id = new_session.id
- new_invitation.save
+ # Invitation.find_each(:conditions => "music_session_id = '#{self.id}'") do |invitation|
+ # new_invitation = Invitation.new
+ # new_invitation.sender_id = invitation.sender_id
+ # new_invitation.receiver_id = invitation.receiver_id
+ # new_invitation.music_session_id = new_session.id
+ # new_invitation.save
- user = User.find(new_invitation.receiver_id)
- Notification.send_scheduled_session_invitation(new_session, user)
- end
+ # user = User.find(new_invitation.receiver_id)
+ # Notification.send_scheduled_session_invitation(new_session, user)
+ # end
# mark the next session as scheduled
self.next_session_scheduled = true
From 8cc14b1ede0bfa48102628d9d977c4154d330fd6 Mon Sep 17 00:00:00 2001
From: Brian Smith
Date: Wed, 4 Jun 2014 23:17:45 -0400
Subject: [PATCH 12/25] VRFS-1693 copy canceled RSVP for slot if none were
chosen
---
ruby/lib/jam_ruby/models/music_session.rb | 38 ++++++++++++++---------
1 file changed, 24 insertions(+), 14 deletions(-)
diff --git a/ruby/lib/jam_ruby/models/music_session.rb b/ruby/lib/jam_ruby/models/music_session.rb
index 4395127bf..139825c5a 100644
--- a/ruby/lib/jam_ruby/models/music_session.rb
+++ b/ruby/lib/jam_ruby/models/music_session.rb
@@ -87,6 +87,8 @@ module JamRuby
new_session.open_rsvps = self.open_rsvps
new_session.save
+ chosen_slots = []
+
# copy rsvp_slots, rsvp_requests, and rsvp_requests_rsvp_slots
RsvpSlot.find_each(:conditions => "music_session_id = '#{self.id}'") do |slot|
new_slot = RsvpSlot.new
@@ -99,6 +101,8 @@ module JamRuby
rsvp_request_slot = RsvpRequestRsvpSlot.where("chosen = true AND rsvp_slot_id = ?", slot.id).first
unless rsvp_request_slot.nil?
+ chosen_slots << rsvp_request_slot
+
rsvp = RsvpRequest.find_by_id(rsvp_request_slot.rsvp_request_id)
new_rsvp = RsvpRequest.new
new_rsvp.user_id = rsvp.user_id
@@ -109,22 +113,28 @@ module JamRuby
new_rsvp_req_slot.rsvp_slot_id = new_slot.id
new_rsvp_req_slot.chosen = true
new_rsvp_req_slot.save
- end
- # now get any RSVPs that were 1-time cancellations and copy those
- rejected_req_slots = RsvpRequestRsvpSlot.where("chosen = false AND rsvp_slot_id = ?", slot.id)
- rejected_req_slots.each do |req_slot|
- rsvp = RsvpRequest.find_by_id(req_slot.rsvp_request_id)
- if rsvp.canceled && !rsvp.cancel_all
- new_rsvp = RsvpRequest.new
- new_rsvp.user_id = rsvp.user_id
- new_rsvp.save
+ # if this slot was not chosen, try to get any RSVPs that were 1-time cancellations and copy those
+ else
+ rejected_req_slots = RsvpRequestRsvpSlot.where("(chosen = false OR chosen is null) AND rsvp_slot_id = ?", slot.id).order("created_at ASC")
- new_rsvp_req_slot = RsvpRequestRsvpSlot.new
- new_rsvp_req_slot.rsvp_request_id = new_rsvp.id
- new_rsvp_req_slot.rsvp_slot_id = new_slot.id
- new_rsvp_req_slot.chosen = true
- new_rsvp_req_slot.save
+ rejected_req_slots.each do |req_slot|
+ # get RsvpRequest corresponding to this RsvpRequestRsvpSlot
+ rsvp = RsvpRequest.find_by_id(req_slot.rsvp_request_id)
+
+ # if the RSVP was canceled (but all future sessions were NOT canceled), then copy this one and break
+ if rsvp.canceled && !rsvp.cancel_all
+ new_rsvp = RsvpRequest.new
+ new_rsvp.user_id = rsvp.user_id
+ new_rsvp.save
+
+ new_rsvp_req_slot = RsvpRequestRsvpSlot.new
+ new_rsvp_req_slot.rsvp_request_id = new_rsvp.id
+ new_rsvp_req_slot.rsvp_slot_id = new_slot.id
+ new_rsvp_req_slot.chosen = true
+ new_rsvp_req_slot.save
+ break
+ end
end
end
end
From 1141f2bd2e3759ae0232c8026ee3e62ccd402ab0 Mon Sep 17 00:00:00 2001
From: Brian Smith
Date: Thu, 5 Jun 2014 00:55:15 -0400
Subject: [PATCH 13/25] VRFS-1693 bug fixes
---
ruby/lib/jam_ruby/models/music_session.rb | 38 ++++++-----------------
1 file changed, 9 insertions(+), 29 deletions(-)
diff --git a/ruby/lib/jam_ruby/models/music_session.rb b/ruby/lib/jam_ruby/models/music_session.rb
index 139825c5a..0b1912d4b 100644
--- a/ruby/lib/jam_ruby/models/music_session.rb
+++ b/ruby/lib/jam_ruby/models/music_session.rb
@@ -73,7 +73,7 @@ module JamRuby
new_session.band_id = self.band_id
new_session.fan_access = self.fan_access
# TODO: confirm this logic
- new_session.scheduled_start = self.scheduled_start + self.scheduled_duration
+ # new_session.scheduled_start = self.scheduled_start + self.scheduled_duration
new_session.scheduled_duration = self.scheduled_duration
new_session.musician_access = self.musician_access
new_session.approval_required = self.approval_required
@@ -85,34 +85,26 @@ module JamRuby
new_session.recurring_mode = self.recurring_mode
new_session.timezone = self.timezone
new_session.open_rsvps = self.open_rsvps
- new_session.save
-
- chosen_slots = []
# copy rsvp_slots, rsvp_requests, and rsvp_requests_rsvp_slots
RsvpSlot.find_each(:conditions => "music_session_id = '#{self.id}'") do |slot|
new_slot = RsvpSlot.new
new_slot.instrument_id = slot.instrument_id
new_slot.proficiency_level = slot.proficiency_level
- new_slot.music_session_id = new_session.id
- new_slot.save
+ new_session.rsvp_slots << new_slot
# get the request for this slot that was approved (should only be ONE)
rsvp_request_slot = RsvpRequestRsvpSlot.where("chosen = true AND rsvp_slot_id = ?", slot.id).first
unless rsvp_request_slot.nil?
- chosen_slots << rsvp_request_slot
-
rsvp = RsvpRequest.find_by_id(rsvp_request_slot.rsvp_request_id)
new_rsvp = RsvpRequest.new
new_rsvp.user_id = rsvp.user_id
- new_rsvp.save
new_rsvp_req_slot = RsvpRequestRsvpSlot.new
- new_rsvp_req_slot.rsvp_request_id = new_rsvp.id
- new_rsvp_req_slot.rsvp_slot_id = new_slot.id
+ new_rsvp_req_slot.rsvp_request = new_rsvp
+ new_rsvp_req_slot.rsvp_slot = new_slot
new_rsvp_req_slot.chosen = true
- new_rsvp_req_slot.save
# if this slot was not chosen, try to get any RSVPs that were 1-time cancellations and copy those
else
@@ -126,13 +118,11 @@ module JamRuby
if rsvp.canceled && !rsvp.cancel_all
new_rsvp = RsvpRequest.new
new_rsvp.user_id = rsvp.user_id
- new_rsvp.save
new_rsvp_req_slot = RsvpRequestRsvpSlot.new
- new_rsvp_req_slot.rsvp_request_id = new_rsvp.id
- new_rsvp_req_slot.rsvp_slot_id = new_slot.id
+ new_rsvp_req_slot.rsvp_request = new_rsvp
+ new_rsvp_req_slot.rsvp_slot = new_slot
new_rsvp_req_slot.chosen = true
- new_rsvp_req_slot.save
break
end
end
@@ -143,24 +133,14 @@ module JamRuby
MusicNotation.find_each(:conditions => "music_session_id = '#{self.id}'") do |notation|
new_notation = MusicNotation.new
new_notation.user_id = notation.user_id
- new_notation.music_session_id = new_session.id
+ new_notation.music_session = new_session
new_notation.file_url = notation.file_url
# new_notation.file_name = notation.file_name
new_notation.size = notation.size
- new_notation.save
+ new_session.music_notations << new_notation
end
- # copy invitations
- # Invitation.find_each(:conditions => "music_session_id = '#{self.id}'") do |invitation|
- # new_invitation = Invitation.new
- # new_invitation.sender_id = invitation.sender_id
- # new_invitation.receiver_id = invitation.receiver_id
- # new_invitation.music_session_id = new_session.id
- # new_invitation.save
-
- # user = User.find(new_invitation.receiver_id)
- # Notification.send_scheduled_session_invitation(new_session, user)
- # end
+ new_session.save
# mark the next session as scheduled
self.next_session_scheduled = true
From e669205c64d9d6a284a933425cee0f8cc419f12a Mon Sep 17 00:00:00 2001
From: Jonathan Kolyer
Date: Thu, 5 Jun 2014 15:42:23 +0000
Subject: [PATCH 14/25] VRFS-1664 added looping test
---
.../models/email_batch_new_musician.rb | 7 +++--
.../models/email_batch_spec_new_musicians.rb | 30 +++++++++++++++++++
2 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb
index 4eadd5311..2ae5c4e73 100644
--- a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb
+++ b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb
@@ -20,7 +20,9 @@ module JamRuby
ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS #{TMP_NEW}")
sql =< 1, :last_jam_addr => 1,
+ :created_at => dd)
+ end
+ 10.downto(1) do |nn|
+ FactoryGirl.create(:user, :last_jam_locidispid => 3, :last_jam_addr => 3)
+ end
+ JamRuby::Score.createx(1, 'a', 1, 3, 'a', 3, 10)
+ num = 0
+ # User.where(["created_at < ?",dd]).order('created_at DESC').all.each {|uu| puts "#{uu.id}; #{uu.created_at}"}
+ receivers = []
+ new_musician_batch.fetch_recipients do |uu, newm|
+ num += 1
+ receivers << uu
+ # puts "#{uu.id}; #{uu.created_at}; "
+ # binding.pry
+ expect(newm.count).to eq(10)
+ end
+ dd += 1.day
+ # receivers.each_with_index {|rr,idx| puts "#{idx}; #{rr.created_at}; #{rr.id}"}
+ receivers.uniq!
+ expect(receivers.count).to eq(User.where(["created_at <= ?",dd]).count)
+ expect(num).to eq(User.where(["created_at <= ?",dd]).count)
+ end
+
end
end
From a65723681446323d4db662ae2aad1a4506519c09 Mon Sep 17 00:00:00 2001
From: Jonathan Kolyer
Date: Thu, 5 Jun 2014 16:29:01 +0000
Subject: [PATCH 15/25] VRFS-1664 fixed large batch test
---
.../models/email_batch_new_musician.rb | 40 +++++++++++++------
.../models/email_batch_spec_new_musicians.rb | 33 +++++++--------
2 files changed, 42 insertions(+), 31 deletions(-)
diff --git a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb
index 2ae5c4e73..0fe70134e 100644
--- a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb
+++ b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb
@@ -9,6 +9,7 @@ module JamRuby
VAR_MUSICIAN_TABLE = "@MUSICIAN_TABLE"
TMP_NEW = 'tmp_new_musicians'
+ TMP_RECEIVE = 'tmp_receivers'
TMP_PAIRS = 'tmp_receivers_new_musicians'
def self.subject
@@ -26,14 +27,33 @@ SELECT
INTO TEMP TABLE #{TMP_NEW}
FROM users
WHERE
- musician = 't' AND
- last_jam_locidispid IS NOT NULL AND
+ users.musician = 't' AND
+ users.last_jam_locidispid IS NOT NULL AND
users.created_at > '#{time_since_last_batch(SINCE_DAYS)}'
SQL
ActiveRecord::Base.connection.execute(sql)
end
+ # inserts eligible sessions to temp table
def _fetch_eligible_receivers
+ ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS #{TMP_RECEIVE}")
+ sql =< Time.now - (EmailBatchNewMusician::SINCE_DAYS.days + 1.day),
+ :created_at => receiver_date,
:last_jam_locidispid => 1,
:last_jam_addr => 1
)
}
let (:receiver2) {
FactoryGirl.create(:user,
- :created_at => Time.now - (EmailBatchNewMusician::SINCE_DAYS.days + 1.day),
+ :created_at => receiver_date,
:last_jam_locidispid => 3,
:last_jam_addr => 3
)
@@ -68,7 +70,6 @@ describe EmailBatchNewMusician do
end
it 'sets up data properly' do
- pending
results = new_musician_batch.fetch_recipients
expect(results.count).to eq(1)
user, new_musicians = results[0]
@@ -77,14 +78,12 @@ describe EmailBatchNewMusician do
end
it 'sends email' do
- pending
ebatch = new_musician_batch
ebatch.deliver_batch
expect(UserMailer.deliveries.length).to eq(1)
end
it 'handles multiple receivers' do
- pending
JamRuby::Score.createx(1, 'a', 1, 3, 'a', 3, 10)
JamRuby::Score.createx(1, 'a', 1, 4, 'a', 4, 10)
JamRuby::Score.createx(2, 'a', 2, 4, 'a', 4, 10)
@@ -97,30 +96,26 @@ describe EmailBatchNewMusician do
end
it 'handles large batches' do
- dd = Time.now - (EmailBatchNewMusician::SINCE_DAYS.days + 14.day)
+ dd = receiver_date + 1.day
20.downto(1) do |nn|
- FactoryGirl.create(:user, :last_jam_locidispid => 1, :last_jam_addr => 1,
+ FactoryGirl.create(:user, :last_jam_locidispid => 5, :last_jam_addr => 5,
:created_at => dd)
end
10.downto(1) do |nn|
- FactoryGirl.create(:user, :last_jam_locidispid => 3, :last_jam_addr => 3)
+ FactoryGirl.create(:user, :last_jam_locidispid => 6, :last_jam_addr => 6)
end
- JamRuby::Score.createx(1, 'a', 1, 3, 'a', 3, 10)
- num = 0
- # User.where(["created_at < ?",dd]).order('created_at DESC').all.each {|uu| puts "#{uu.id}; #{uu.created_at}"}
+ JamRuby::Score.delete_all
+ JamRuby::Score.createx(5, 'a', 5, 6, 'a', 6, 10)
+ JamRuby::Score.createx(5, 'a', 5, 7, 'a', 7, Score::MAX_YELLOW_LATENCY + 1)
+ FactoryGirl.create(:user, :last_jam_locidispid => 8, :last_jam_addr => 8, :created_at => dd)
+ FactoryGirl.create(:user, :last_jam_locidispid => 7, :last_jam_addr => 7)
+
receivers = []
new_musician_batch.fetch_recipients do |uu, newm|
- num += 1
receivers << uu
- # puts "#{uu.id}; #{uu.created_at}; "
- # binding.pry
expect(newm.count).to eq(10)
end
- dd += 1.day
- # receivers.each_with_index {|rr,idx| puts "#{idx}; #{rr.created_at}; #{rr.id}"}
- receivers.uniq!
- expect(receivers.count).to eq(User.where(["created_at <= ?",dd]).count)
- expect(num).to eq(User.where(["created_at <= ?",dd]).count)
+ expect(receivers.count).to eq(User.where(["created_at <= ? AND last_jam_addr = ?",dd,5]).count)
end
end
From 0aa98146fe6102084a392428f704e86587329cad Mon Sep 17 00:00:00 2001
From: Jonathan Kolyer
Date: Fri, 6 Jun 2014 03:56:32 +0000
Subject: [PATCH 16/25] VRFS-1664 reformatting code
---
.../models/email_batch_spec_new_musicians.rb | 40 +++++--------------
1 file changed, 11 insertions(+), 29 deletions(-)
diff --git a/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb b/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb
index 715c6966d..86584d669 100644
--- a/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb
+++ b/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb
@@ -32,33 +32,16 @@ describe EmailBatchNewMusician do
)
}
- let (:drummer) { FactoryGirl.create(:user,
- :last_jam_locidispid => 1,
- :last_jam_addr => 1) }
- let (:guitarist) { FactoryGirl.create(:user,
- :last_jam_locidispid => 1,
- :last_jam_addr => 1) }
- let (:bassist) { FactoryGirl.create(:user,
- :last_jam_locidispid => 1,
- :last_jam_addr => 1) }
- let (:vocalist) { FactoryGirl.create(:user,
- :last_jam_locidispid => 1,
- :last_jam_addr => 1) }
- let (:loser) { FactoryGirl.create(:user,
- :last_jam_locidispid => 2,
- :last_jam_addr => 2) }
- let (:drummer3) { FactoryGirl.create(:user,
- :last_jam_locidispid => 3,
- :last_jam_addr => 3) }
- let (:guitarist3) { FactoryGirl.create(:user,
- :last_jam_locidispid => 3,
- :last_jam_addr => 3) }
- let (:bassist3) { FactoryGirl.create(:user,
- :last_jam_locidispid => 3,
- :last_jam_addr => 3) }
- let (:vocalist3) { FactoryGirl.create(:user,
- :last_jam_locidispid => 3,
- :last_jam_addr => 3) }
+ let (:drummer) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :last_jam_addr => 1) }
+ let (:guitarist) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :last_jam_addr => 1) }
+ let (:bassist) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :last_jam_addr => 1) }
+ let (:vocalist) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :last_jam_addr => 1) }
+ let (:loser) { FactoryGirl.create(:user, :last_jam_locidispid => 2, :last_jam_addr => 2) }
+ let (:drummer3) { FactoryGirl.create(:user, :last_jam_locidispid => 3, :last_jam_addr => 3) }
+ let (:guitarist3) { FactoryGirl.create(:user, :last_jam_locidispid => 3, :last_jam_addr => 3) }
+ let (:bassist3) { FactoryGirl.create(:user, :last_jam_locidispid => 3, :last_jam_addr => 3) }
+ let (:vocalist3) { FactoryGirl.create(:user, :last_jam_locidispid => 3, :last_jam_addr => 3) }
+
before(:each) do
drummer; guitarist; bassist; vocalist; loser
drummer3; guitarist3; bassist3; vocalist3
@@ -98,8 +81,7 @@ describe EmailBatchNewMusician do
it 'handles large batches' do
dd = receiver_date + 1.day
20.downto(1) do |nn|
- FactoryGirl.create(:user, :last_jam_locidispid => 5, :last_jam_addr => 5,
- :created_at => dd)
+ FactoryGirl.create(:user, :last_jam_locidispid => 5, :last_jam_addr => 5, :created_at => dd)
end
10.downto(1) do |nn|
FactoryGirl.create(:user, :last_jam_locidispid => 6, :last_jam_addr => 6)
From 18167e898d39cc38b81419fc77b9302ca2e8534f Mon Sep 17 00:00:00 2001
From: Jonathan Kolyer
Date: Fri, 6 Jun 2014 05:31:53 +0000
Subject: [PATCH 17/25] VRFS-1665 added large batch test
---
.../models/email_batch_scheduled_sessions.rb | 13 +---
.../email_batch_spec_scheduled_session.rb | 70 ++++++++++++-------
2 files changed, 48 insertions(+), 35 deletions(-)
diff --git a/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb b/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb
index d9c8c915e..34c5ac3a1 100644
--- a/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb
+++ b/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb
@@ -48,7 +48,7 @@ SELECT
INTO TEMP TABLE #{TMP_RECIP}
FROM users
INNER JOIN musicians_instruments AS mi ON mi.user_id = users.id
-JOIN #{TMP_SESS} ON #{TMP_SESS}.instrument_id = mi.instrument_id
+INNER JOIN #{TMP_SESS} ON #{TMP_SESS}.instrument_id = mi.instrument_id
WHERE
users.musician = 't' AND
users.subscribe_email = 't'
@@ -81,18 +81,13 @@ SQL
# select recipients whose score is below minimum threshold
def _select_scored_recipients(offset=0)
if 0 > offset
- sql =< 'bass') }
let (:vocals) { FactoryGirl.create(:instrument, :description => 'vocal') }
- let (:drummer) { FactoryGirl.create(:user,
- :last_jam_locidispid => 1,
- :last_jam_addr => 1) }
- let (:guitarist) { FactoryGirl.create(:user,
- :last_jam_locidispid => 1,
- :last_jam_addr => 1) }
- let (:bassist) { FactoryGirl.create(:user,
- :last_jam_locidispid => 1,
- :last_jam_addr => 1) }
- let (:vocalist) { FactoryGirl.create(:user,
- :last_jam_locidispid => 1,
- :last_jam_addr => 1) }
- let (:loser) { FactoryGirl.create(:user,
- :last_jam_locidispid => 2,
- :last_jam_addr => 2) }
+ let (:drummer) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :last_jam_addr => 1) }
+ let (:guitarist) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :last_jam_addr => 1) }
+ let (:bassist) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :last_jam_addr => 1) }
+ let (:vocalist) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :last_jam_addr => 1) }
+ let (:loser) { FactoryGirl.create(:user, :last_jam_locidispid => 2, :last_jam_addr => 2) }
let (:session1) do
FactoryGirl.create(:music_session,
@@ -57,6 +47,7 @@ describe EmailBatchScheduledSessions do
MusicianInstrument.delete_all
RsvpSlot.delete_all
JamRuby::Score.delete_all
+ scheduled_batch.reset!
drummer.musician_instruments << FactoryGirl.build(:musician_instrument, user: drummer, instrument: drums, proficiency_level: 2)
drummer.musician_instruments << FactoryGirl.build(:musician_instrument, user: drummer, instrument: guitar, proficiency_level: 2)
@@ -75,7 +66,6 @@ describe EmailBatchScheduledSessions do
FactoryGirl.create(:rsvp_slot, :instrument => drums, :music_session => session1)
FactoryGirl.create(:rsvp_slot, :instrument => guitar, :music_session => session1)
FactoryGirl.create(:rsvp_slot, :instrument => bass, :music_session => session1)
-
FactoryGirl.create(:rsvp_slot, :instrument => drums, :music_session => session2)
FactoryGirl.create(:rsvp_slot, :instrument => guitar, :music_session => session2)
FactoryGirl.create(:rsvp_slot, :instrument => bass, :music_session => session2)
@@ -84,24 +74,54 @@ describe EmailBatchScheduledSessions do
# oo = FactoryGirl.create(:rsvp_request, :user => vocalist, :rsvp_slot => oo)
# oo.rsvp_request_slot.update_attributes(chosen: true)
- JamRuby::Score.createx(1, 'a', 1, 1, 'a', 1, 10)
- JamRuby::Score.createx(1, 'a', 1, 2, 'a', 2, Score::MAX_YELLOW_LATENCY + 1)
- end
-
- before(:each) do
end
it 'sets up data properly' do
+ JamRuby::Score.createx(1, 'a', 1, 1, 'a', 1, 10)
+ JamRuby::Score.createx(1, 'a', 1, 2, 'a', 2, Score::MAX_YELLOW_LATENCY + 1)
+
expect(drummer.instruments.include?(drums)).to eq(true)
expect(drummer.instruments.include?(guitar)).to eq(true)
obj = scheduled_batch.fetch_recipients
expect(obj.count).to eq(2)
+
+ scheduled_batch.deliver_batch
+ expect(UserMailer.deliveries.length).to eq(2)
end
- it 'sends email' do
- ebatch = scheduled_batch
- ebatch.deliver_batch
- expect(UserMailer.deliveries.length).to eq(3)
+ it 'handles large batches' do
+ creators = []
+ 8.downto(1) do |nn|
+ creators << uu = FactoryGirl.create(:user, :last_jam_locidispid => 5, :last_jam_addr => 5)
+ msess = FactoryGirl.create(:music_session,
+ :creator => uu,
+ :scheduled_start => Time.now() + 2.days,
+ :musician_access => true,
+ :approval_required => false,
+ :created_at => Time.now - 1.hour)
+ FactoryGirl.create(:rsvp_slot, :instrument => drums, :music_session => msess)
+ FactoryGirl.create(:rsvp_slot, :instrument => guitar, :music_session => msess)
+ FactoryGirl.create(:rsvp_slot, :instrument => bass, :music_session => msess)
+ end
+ instruments = [drums, guitar, bass]
+ 4.downto(1) do |nn|
+ uu = FactoryGirl.create(:user, :last_jam_locidispid => 6, :last_jam_addr => 6)
+ uu.musician_instruments << FactoryGirl.build(:musician_instrument,
+ user: uu,
+ instrument: instruments.sample,
+ proficiency_level: 2)
+ end
+ JamRuby::Score.createx(5, 'a', 5, 6, 'a', 6, 10)
+ JamRuby::Score.createx(5, 'a', 5, 7, 'a', 7, Score::MAX_YELLOW_LATENCY + 1)
+ FactoryGirl.create(:user, :last_jam_locidispid => 8, :last_jam_addr => 8)
+ FactoryGirl.create(:user, :last_jam_locidispid => 7, :last_jam_addr => 7)
+
+ receivers = []
+ scheduled_batch.fetch_recipients(3) do |receiver, sessions|
+ receivers << receiver
+ expect(sessions.count).to eq(8)
+ end
+ expect(receivers.count).to eq(4)
end
end
From 98ede13fbc74cafbd7d31a2b945f6213d104919e Mon Sep 17 00:00:00 2001
From: Jonathan Kolyer
Date: Fri, 6 Jun 2014 06:08:32 +0000
Subject: [PATCH 18/25] VRFS-1664 fixed typo
---
ruby/lib/jam_ruby/models/email_batch_new_musician.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb
index 0fe70134e..9d33bf45e 100644
--- a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb
+++ b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb
@@ -126,7 +126,7 @@ SQL
def self.send_new_musician_batch
oo = self.create
- oo..deliver_batch
+ oo.deliver_batch
oo
end
From eee0281c379a109fa3e92a7abdf580bd006994ea Mon Sep 17 00:00:00 2001
From: Jonathan Kolyer
Date: Fri, 6 Jun 2014 06:08:53 +0000
Subject: [PATCH 19/25] VRFS-1665 fixed typo
---
ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb b/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb
index 34c5ac3a1..8ef39a14c 100644
--- a/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb
+++ b/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb
@@ -141,7 +141,7 @@ SQL
def self.send_daily_session_batch
oo = self.create
- oo..deliver_batch
+ oo.deliver_batch
oo
end
From 2932d02894dfa89b8b27c79dbd66fb149ac816c4 Mon Sep 17 00:00:00 2001
From: Jonathan Kolyer
Date: Fri, 6 Jun 2014 06:09:35 +0000
Subject: [PATCH 20/25] VRFS-1664 added periodical test
---
.../jam_ruby/models/email_batch_spec_new_musicians.rb | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb b/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb
index 86584d669..7d84c9594 100644
--- a/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb
+++ b/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb
@@ -61,8 +61,12 @@ describe EmailBatchNewMusician do
end
it 'sends email' do
- ebatch = new_musician_batch
- ebatch.deliver_batch
+ new_musician_batch.deliver_batch
+ expect(UserMailer.deliveries.length).to eq(1)
+ end
+
+ it 'sends email periodically' do
+ EmailBatchNewMusician.send_new_musician_batch
expect(UserMailer.deliveries.length).to eq(1)
end
From 1a93b5f1f327fd439f37f7bace042d44be593673 Mon Sep 17 00:00:00 2001
From: Brian Smith
Date: Fri, 6 Jun 2014 03:04:52 -0400
Subject: [PATCH 21/25] VRFS-1710 added scheduled session info to hover bubble
/ show session hover bubble for session-related notifications
---
ruby/lib/jam_ruby/models/music_session.rb | 2 +-
web/app/assets/javascripts/findSession.js | 171 ++++++++----------
web/app/assets/javascripts/hoverSession.js | 18 +-
.../assets/javascripts/notificationPanel.js | 37 ++++
.../api_music_sessions/show_history.rabl | 2 +-
web/app/views/clients/_hoverSession.html.erb | 9 +-
web/app/views/clients/_sidebar.html.erb | 3 +-
7 files changed, 134 insertions(+), 108 deletions(-)
diff --git a/ruby/lib/jam_ruby/models/music_session.rb b/ruby/lib/jam_ruby/models/music_session.rb
index 0b1912d4b..5c05a7e24 100644
--- a/ruby/lib/jam_ruby/models/music_session.rb
+++ b/ruby/lib/jam_ruby/models/music_session.rb
@@ -8,7 +8,7 @@ module JamRuby
RECURRING_MODES = [NO_RECURRING, RECURRING_WEEKLY]
- attr_accessor :legal_terms, :recurring_mode, :language_description, :scheduled_start_time, :access_description
+ attr_accessor :legal_terms, :language_description, :scheduled_start_time, :access_description
self.table_name = "music_sessions"
diff --git a/web/app/assets/javascripts/findSession.js b/web/app/assets/javascripts/findSession.js
index e9b2dd964..0c4b81a00 100644
--- a/web/app/assets/javascripts/findSession.js
+++ b/web/app/assets/javascripts/findSession.js
@@ -5,19 +5,17 @@
context.JK = context.JK || {};
context.JK.FindSessionScreen = function (app) {
var CATEGORY = {
- INVITATION: {index: 0, id: "table#sessions-invitations"},
- FRIEND: {index: 1, id: "table#sessions-friends"},
- OTHER: {index: 2, id: "table#sessions-other"}
+ ACTIVE: {index: 0, id: "table#sessions-active"},
+ SCHEDULED: {index: 1, id: "table#sessions-scheduled"}
};
var logger = context.JK.logger;
var rest = context.JK.Rest();
var sessionLatency;
var sessions = {};
- var invitationSessionGroup = {};
- var friendSessionGroup = {};
- var otherSessionGroup = {};
- var sessionCounts = [0, 0, 0];
+ var activeSessionGroup = {};
+ var scheduledSessionGroup = {};
+ var sessionCounts = [0, 0];
var sessionList;
var currentQuery = defaultQuery();
var currentPage = 0;
@@ -105,47 +103,33 @@
function refreshDisplay() {
var priorVisible;
- var INVITATION = 'div#sessions-invitations';
- var FRIEND = 'div#sessions-friends';
- var OTHER = 'div#sessions-other';
+ var ACTIVE = 'div#sessions-active';
+ var SCHEDULED = 'div#sessions-scheduled';
- // INVITATION
- //logger.debug("sessionCounts[CATEGORY.INVITATION.index]=" + sessionCounts[CATEGORY.INVITATION.index]);
- if (sessionCounts[CATEGORY.INVITATION.index] === 0) {
+ // ACTIVE
+ //logger.debug("sessionCounts[CATEGORY.ACTIVE.index]=" + sessionCounts[CATEGORY.ACTIVE.index]);
+ if (sessionCounts[CATEGORY.ACTIVE.index] === 0) {
priorVisible = false;
- $(INVITATION).hide();
+ $(ACTIVE).hide();
}
else {
priorVisible = true;
- $(INVITATION).show();
+ $(ACTIVE).show();
}
// FRIEND
if (!priorVisible) {
- $(FRIEND).removeClass('mt35');
+ $(SCHEDULED).removeClass('mt35');
}
- //logger.debug("sessionCounts[CATEGORY.FRIEND.index]=" + sessionCounts[CATEGORY.FRIEND.index]);
- if (sessionCounts[CATEGORY.FRIEND.index] === 0) {
+ //logger.debug("sessionCounts[CATEGORY.SCHEDULED.index]=" + sessionCounts[CATEGORY.SCHEDULED.index]);
+ if (sessionCounts[CATEGORY.SCHEDULED.index] === 0) {
priorVisible = false;
- $(FRIEND).hide();
+ $(SCHEDULED).hide();
}
else {
priorVisible = true;
- $(FRIEND).show();
- }
-
- // OTHER
- if (!priorVisible) {
- $(OTHER).removeClass('mt35');
- }
-
- //logger.debug("sessionCounts[CATEGORY.OTHER.index]=" + sessionCounts[CATEGORY.OTHER.index]);
- if (sessionCounts[CATEGORY.OTHER.index] === 0) {
- $(OTHER).hide();
- }
- else {
- $(OTHER).show();
+ $(SCHEDULED).show();
}
}
@@ -226,55 +210,55 @@
});
}
- function containsInvitation(session) {
- var i, invitation = null;
+ // function containsInvitation(session) {
+ // var i, invitation = null;
- if (session !== undefined) {
- if ("invitations" in session) {
- // user has invitations for this session
- for (i = 0; i < session.invitations.length; i++) {
- invitation = session.invitations[i];
- // session contains an invitation for this user
- if (invitation.receiver_id == context.JK.currentUserId) {
- return true;
- }
- }
- }
- }
+ // if (session !== undefined) {
+ // if ("invitations" in session) {
+ // // user has invitations for this session
+ // for (i = 0; i < session.invitations.length; i++) {
+ // invitation = session.invitations[i];
+ // // session contains an invitation for this user
+ // if (invitation.receiver_id == context.JK.currentUserId) {
+ // return true;
+ // }
+ // }
+ // }
+ // }
- return false;
- }
+ // return false;
+ // }
- function containsFriend(session) {
- var i, participant = null;
+ // function containsFriend(session) {
+ // var i, participant = null;
- if (session !== undefined) {
- if ("participants" in session) {
- for (i = 0; i < session.participants.length; i++) {
- participant = session.participants[i];
- // this session participant is a friend
- if (participant !== null && participant !== undefined && participant.user.is_friend) {
- return true;
- }
- }
- }
- }
- return false;
- }
+ // if (session !== undefined) {
+ // if ("participants" in session) {
+ // for (i = 0; i < session.participants.length; i++) {
+ // participant = session.participants[i];
+ // // this session participant is a friend
+ // if (participant !== null && participant !== undefined && participant.user.is_friend) {
+ // return true;
+ // }
+ // }
+ // }
+ // }
+ // return false;
+ // }
- function latencyResponse(sessionId) {
- logger.debug("Received latency response for session " + sessionId);
- renderSession(sessionId);
- }
+ // function latencyResponse(sessionId) {
+ // logger.debug("Received latency response for session " + sessionId);
+ // renderSession(sessionId);
+ // }
/**
* Not used normally. Allows modular unit testing
* of the renderSession method without having to do
* as much heavy setup.
*/
- function setSession(session) {
- invitationSessionGroup[session.id] = session;
- }
+ // function setSession(session) {
+ // invitationSessionGroup[session.id] = session;
+ // }
/**
* Render a single session line into the table.
@@ -285,16 +269,12 @@
// store session in the appropriate bucket and increment category counts
var session = sessions[sessionId];
if (containsInvitation(session)) {
- invitationSessionGroup[sessionId] = session;
- sessionCounts[CATEGORY.INVITATION.index]++;
+ activeSessionGroup[sessionId] = session;
+ sessionCounts[CATEGORY.ACTIVE.index]++;
}
else if (containsFriend(session)) {
- friendSessionGroup[sessionId] = session;
- sessionCounts[CATEGORY.FRIEND.index]++;
- }
- else {
- otherSessionGroup[sessionId] = session;
- sessionCounts[CATEGORY.OTHER.index]++;
+ scheduledSessionGroup[sessionId] = session;
+ sessionCounts[CATEGORY.SCHEDULED.index]++;
}
// hack to prevent duplicate rows from being rendered when filtering
@@ -303,25 +283,18 @@
logger.debug('Rendering session ID = ' + sessionId);
- if (invitationSessionGroup[sessionId] != null) {
- $tbGroup = $(CATEGORY.INVITATION.id);
+ if (activeSessionGroup[sessionId] != null) {
+ $tbGroup = $(CATEGORY.ACTIVE.id);
- if ($("table#sessions-invitations tr[id='" + sessionId + "']").length > 0) {
+ if ($("table#sessions-active tr[id='" + sessionId + "']").length > 0) {
sessionAlreadyRendered = true;
}
}
- else if (friendSessionGroup[sessionId] != null) {
+ else if (scheduledSessionGroup[sessionId] != null) {
;
- $tbGroup = $(CATEGORY.FRIEND.id);
+ $tbGroup = $(CATEGORY.SCHEDULED.id);
- if ($("table#sessions-friends tr[id='" + sessionId + "']").length > 0) {
- sessionAlreadyRendered = true;
- }
- }
- else if (otherSessionGroup[sessionId] != null) {
- $tbGroup = $(CATEGORY.OTHER.id);
-
- if ($("table#sessions-other tr[id='" + sessionId + "']").length > 0) {
+ if ($("table#sessions-scheduled tr[id='" + sessionId + "']").length > 0) {
sessionAlreadyRendered = true;
}
}
@@ -359,16 +332,14 @@
currentPage = 0;
$noMoreSessions.hide();
$scroller.infinitescroll('resume');
- $('table#sessions-invitations').children(':not(:first-child)').remove();
- $('table#sessions-friends').children(':not(:first-child)').remove();
- $('table#sessions-other').children(':not(:first-child)').remove();
+ $('table#sessions-active').children(':not(:first-child)').remove();
+ $('table#sessions-scheduled').children(':not(:first-child)').remove();
- sessionCounts = [0, 0, 0];
+ sessionCounts = [0, 0];
sessions = {};
- invitationSessionGroup = {};
- friendSessionGroup = {};
- otherSessionGroup = {};
+ activeSessionGroup = {};
+ scheduledSessionGroup = {};
}
function deleteSession(evt) {
@@ -480,7 +451,7 @@
this.afterShow = afterShow;
// Following exposed for easier testing.
- this.setSession = setSession;
+ // this.setSession = setSession;
this.clearResults = clearResults;
this.getCategoryEnum = getCategoryEnum;
diff --git a/web/app/assets/javascripts/hoverSession.js b/web/app/assets/javascripts/hoverSession.js
index 5bedf9249..19cc5b3da 100644
--- a/web/app/assets/javascripts/hoverSession.js
+++ b/web/app/assets/javascripts/hoverSession.js
@@ -50,14 +50,28 @@
var template = $('#template-hover-session').html();
+ var sessionPageUrl = "/sessions/" + response.id;
+ var sessionPageLinkText = "WEB PAGE";
+
+ // if session hasn't begun, it must be a scheduled session so link to SESSION INFO page
+ if (!response.active_music_session && !response.session_removed_at) {
+ sessionPageUrl += "/details";
+ sessionPageLinkText = "SESSION DETAILS";
+ }
+
var sessionHtml = context.JK.fillTemplate(template, {
musicSessionId: response.id,
+ name: response.name,
description: response.description,
- genre: response.genres.toUpperCase(),
+ genre: response.genre_id.toUpperCase(),
comment_count: response.comment_count,
like_count: response.like_count,
created_at: $.timeago(response.created_at),
- musicians: musicianHtml
+ musicians: musicianHtml,
+ url: sessionPageUrl,
+ externalLinkText: sessionPageLinkText,
+ start_time: response.scheduled_start,
+ recurrence: response.recurring_mode === 'weekly' ? 'Recurs weekly on this day at this time' : ''
});
$(hoverSelector).append('Session Detail
' + sessionHtml);
diff --git a/web/app/assets/javascripts/notificationPanel.js b/web/app/assets/javascripts/notificationPanel.js
index d136a583d..2f78c7e53 100644
--- a/web/app/assets/javascripts/notificationPanel.js
+++ b/web/app/assets/javascripts/notificationPanel.js
@@ -358,6 +358,43 @@
moreTextLink.hide();
}
}
+ else if (type === context.JK.MessageType.SCHEDULED_SESSION_INVITATION) {
+ linkSessionInfoNotification(payload, $notification, $btnNotificationAction);
+ }
+ else if (type === context.JK.MessageType.SCHEDULED_SESSION_RSVP) {
+ linkSessionInfoNotification(payload, $notification, $btnNotificationAction);
+ }
+ else if (type === context.JK.MessageType.SCHEDULED_SESSION_RSVP_APPROVED) {
+ linkSessionInfoNotification(payload, $notification, $btnNotificationAction);
+ }
+ else if (type === context.JK.MessageType.SCHEDULED_SESSION_RSVP_CANCELLED) {
+ linkSessionInfoNotification(payload, $notification, $btnNotificationAction);
+ }
+ else if (type === context.JK.MessageType.SCHEDULED_SESSION_RSVP_CANCELLED_ORG) {
+ linkSessionInfoNotification(payload, $notification, $btnNotificationAction);
+ }
+ else if (type === context.JK.MessageType.SCHEDULED_SESSION_CANCELLED) {
+ linkSessionInfoNotification(payload, $notification, $btnNotificationAction);
+ }
+ else if (type === context.JK.MessageType.SCHEDULED_SESSION_RESCHEDULED) {
+ linkSessionInfoNotification(payload, $notification, $btnNotificationAction);
+ }
+ else if (type === context.JK.MessageType.SCHEDULED_SESSION_REMINDER) {
+ linkSessionInfoNotification(payload, $notification, $btnNotificationAction);
+ }
+ else if (type === context.JK.MessageType.SCHEDULED_SESSION_COMMENT) {
+ linkSessionInfoNotification(payload, $notification, $btnNotificationAction);
+ }
+
+ context.JK.bindHoverEvents($("#sidebar-div"));
+ }
+
+ function linkSessionInfoNotification(payload, $notification, $btnNotificationAction) {
+ var $action_btn = $notification.find($btnNotificationAction);
+ $action_btn.text('SESSION DETAILS');
+ $action_btn.click(function() {
+ context.JK.popExternalLink('/sessions/' + payload.session_id + '/details');
+ });
}
function acceptBandInvitation(args) {
diff --git a/web/app/views/api_music_sessions/show_history.rabl b/web/app/views/api_music_sessions/show_history.rabl
index 3ccfcb73e..c39bf68d9 100644
--- a/web/app/views/api_music_sessions/show_history.rabl
+++ b/web/app/views/api_music_sessions/show_history.rabl
@@ -17,7 +17,7 @@ if !current_user
else
attributes :id, :music_session_id, :name, :description, :musician_access, :approval_required, :fan_access, :fan_chat,
- :band_id, :user_id, :genre_id, :created_at, :like_count, :comment_count, :scheduled_start, :scheduled_duration, :language, :recurring_mode, :language_description, :scheduled_start_time, :access_description
+ :band_id, :user_id, :genre_id, :created_at, :like_count, :comment_count, :scheduled_start, :scheduled_duration, :language, :recurring_mode, :language_description, :scheduled_start_time, :access_description, :session_removed_at
node :share_url do |history|
unless history.share_token.nil?
diff --git a/web/app/views/clients/_hoverSession.html.erb b/web/app/views/clients/_hoverSession.html.erb
index 24af6b69a..a25d0493e 100644
--- a/web/app/views/clients/_hoverSession.html.erb
+++ b/web/app/views/clients/_hoverSession.html.erb
@@ -20,6 +20,7 @@
{genre}
{created_at}
+ {name}
{description}

@@ -30,12 +31,16 @@
-
+
+ SCHEDULE:
+
Starts at {start_time}
+
{recurrence}
+
diff --git a/web/app/views/clients/_sidebar.html.erb b/web/app/views/clients/_sidebar.html.erb
index 5a48671e6..fe6d75fe4 100644
--- a/web/app/views/clients/_sidebar.html.erb
+++ b/web/app/views/clients/_sidebar.html.erb
@@ -209,7 +209,7 @@
-