diff --git a/ruby/lib/jam_ruby/models/music_session_history.rb b/ruby/lib/jam_ruby/models/music_session_history.rb index 4d36302dd..0165476d8 100644 --- a/ruby/lib/jam_ruby/models/music_session_history.rb +++ b/ruby/lib/jam_ruby/models/music_session_history.rb @@ -5,18 +5,6 @@ module JamRuby self.primary_key = 'id' - def music_session_user_histories - # NOTE: for some reason the association is not working, i suspect has to do with the foreign key (jkolyer) - # has_many(:music_session_user_histories, - # :class_name => "JamRuby::MusicSessionUserHistory", - # :foreign_key => :music_session_id, - # :order => 'created_at DESC', - # :inverse_of => :music_session_history) - @msuh ||= JamRuby::MusicSessionUserHistory - .where(:music_session_id => self.music_session_id) - .order('created_at DESC') - end - belongs_to(:user, :class_name => 'JamRuby::User', :foreign_key => :user_id, @@ -93,5 +81,12 @@ module JamRuby end_time = self.session_removed_at || Time.now (end_time - self.created_at) / 60.0 end + + def music_session_user_histories + @msuh ||= JamRuby::MusicSessionUserHistory + .where(:music_session_id => self.music_session_id) + .order('created_at DESC') + end + end end diff --git a/ruby/lib/jam_ruby/models/music_session_perf_data.rb b/ruby/lib/jam_ruby/models/music_session_perf_data.rb index b23b8daec..c06c197fe 100644 --- a/ruby/lib/jam_ruby/models/music_session_perf_data.rb +++ b/ruby/lib/jam_ruby/models/music_session_perf_data.rb @@ -7,14 +7,13 @@ module JamRuby attr_accessible :uri - belongs_to(:music_session_user_history, + belongs_to(:music_session_history, :class_name => "JamRuby::MusicSessionHistory", - :foreign_key => :client_id, - :inverse_of => :perf_data) + :foreign_key => :music_session_id) # mount_uploader :uri, PerfDataUploader - validates :music_session, :presence => true + validates :music_session_history, :presence => true validates :client_id, :presence => true validates :uri, :presence => true @@ -25,4 +24,8 @@ module JamRuby end end + def music_session_user_history + @msuh ||= JamRuby::MusicSessionUserHistory.find_by_client_id(self.client_id) + end + end diff --git a/ruby/lib/jam_ruby/models/music_session_user_history.rb b/ruby/lib/jam_ruby/models/music_session_user_history.rb index a548f4987..080298faa 100644 --- a/ruby/lib/jam_ruby/models/music_session_user_history.rb +++ b/ruby/lib/jam_ruby/models/music_session_user_history.rb @@ -10,21 +10,12 @@ module JamRuby :foreign_key => "user_id", :inverse_of => :music_session_user_histories) - has_one(:perf_data, - :class_name => "JamRuby::MusicSessionPerfData", - :foreign_key => "client_id", - :inverse_of => :music_session_user_history) - def music_session_history - # NOTE: for some reason the association is not working, i suspect has to do with the foreign key (jkolyer) - # belongs_to(:music_session_history, - # :class_name => "JamRuby::MusicSessionHistory", - # :foreign_key => :music_session_id, - # :inverse_of => :music_session_user_histories) - @msh ||= JamRuby::MusicSessionHistory - .where(:music_session_id => self.music_session_id) - .limit(1) - .first + @msh ||= JamRuby::MusicSessionHistory.find_by_music_session_id(self.music_session_id) + end + + def perf_data + @perfdata ||= JamRuby::MusicSessionPerfData.find_by_client_id(self.client_id) end def self.save(music_session_id, user_id, client_id) diff --git a/web/app/controllers/api_music_sessions_controller.rb b/web/app/controllers/api_music_sessions_controller.rb index 3838f04f2..b0a6cb22b 100644 --- a/web/app/controllers/api_music_sessions_controller.rb +++ b/web/app/controllers/api_music_sessions_controller.rb @@ -167,11 +167,12 @@ class ApiMusicSessionsController < ApiController # example of using curl to access this API: # curl -L -T some_file -X PUT http://localhost:3000/api/sessions/[SESSION_ID]/perf.json?client_id=[CLIENT_ID] - music_session = MusicSessionHistory.find_by_music_session_id(params[:id]) + music_session_history = MusicSessionHistory.find_by_music_session_id(params[:id]) + msuh = MusicSessionUserHistory.find_by_client_id(params[:client_id]) - @perfdata = MusicSessionPerfData.new() - @perfdata.music_session = music_session + @perfdata = MusicSessionPerfData.new @perfdata.client_id = params[:client_id] + @perfdata.music_session_history = music_session_history unless @perfdata.save # we have to do this because api_session_detail_url will fail with a bad @music_session response.status = :unprocessable_entity diff --git a/web/spec/factories.rb b/web/spec/factories.rb index 78040b55f..b38fbb1cd 100644 --- a/web/spec/factories.rb +++ b/web/spec/factories.rb @@ -63,6 +63,9 @@ FactoryGirl.define do } end + factory :music_session_user_history, :class => JamRuby::MusicSessionUserHistory do + end + factory :connection, :class => JamRuby::Connection do ip_address "1.1.1.1" diff --git a/web/spec/requests/music_sessions_api_spec.rb b/web/spec/requests/music_sessions_api_spec.rb index b0f604d16..da97d050c 100755 --- a/web/spec/requests/music_sessions_api_spec.rb +++ b/web/spec/requests/music_sessions_api_spec.rb @@ -571,13 +571,12 @@ describe "Music Session API ", :type => :api do sessions.first["description"].should == "My Session" end - it "prepare for upload" do - pending - + it "prepare for perf data upload" do user = FactoryGirl.create(:user) - music_session = FactoryGirl.create(:music_session, :creator => user, :description => "My Session") client = FactoryGirl.create(:connection, :user => user) - + music_session = FactoryGirl.create(:music_session, :creator => user, :description => "My Session") + msuh = FactoryGirl.create(:music_session_user_history, :music_session_id => music_session.id, :client_id => client.client_id, :user_id => user.id) + put "/api/sessions/#{music_session.id}/perf.json?client_id=#{client.client_id}", "CONTENT_TYPE" => "application/json" last_response.status.should == 302 @@ -590,7 +589,7 @@ describe "Music Session API ", :type => :api do music_session_perf_data = MusicSessionPerfData.find(perf_data_id) music_session_perf_data.should_not be_nil - music_session_perf_data.music_session.should == MusicSessionHistory.find_by_music_session_id(music_session.id) + music_session_perf_data.music_session_user_history.should == MusicSessionUserHistory.find_by_client_id(client.client_id) end end