diff --git a/db/Gemfile.lock b/db/Gemfile.lock index 0b59faefa..072f29905 100644 --- a/db/Gemfile.lock +++ b/db/Gemfile.lock @@ -1,5 +1,5 @@ GEM - remote: https://rubygems.org/ + remote: http://rubygems.org/ specs: little-plugger (1.1.3) logging (1.7.2) diff --git a/db/manifest b/db/manifest index 042e0661c..c4ab7b383 100755 --- a/db/manifest +++ b/db/manifest @@ -98,4 +98,5 @@ invited_users_facebook_support.sql first_recording_at.sql share_token.sql facebook_signup.sql -audiomixer_mp3.sql \ No newline at end of file +audiomixer_mp3.sql +share_token_2.sql \ No newline at end of file diff --git a/db/up/share_token_2.sql b/db/up/share_token_2.sql new file mode 100644 index 000000000..db441efb4 --- /dev/null +++ b/db/up/share_token_2.sql @@ -0,0 +1,14 @@ +alter table music_sessions_history drop column share_token; +alter table claimed_recordings drop column share_token; + +CREATE TABLE share_tokens +( + id character varying(64) NOT NULL DEFAULT uuid_generate_v4(), + token varchar(15) NOT NULL, + shareable_id varchar(64) NOT NULL, + shareable_type varchar(50) NOT NULL, + created_at timestamp without time zone NOT NULL DEFAULT now(), + updated_at timestamp without time zone NOT NULL DEFAULT now(), + CONSTRAINT token_uniqkey UNIQUE (token), + CONSTRAINT share_tokens_pkey PRIMARY KEY (id) +); \ No newline at end of file diff --git a/ruby/lib/jam_ruby.rb b/ruby/lib/jam_ruby.rb index aa036793d..d955642b4 100755 --- a/ruby/lib/jam_ruby.rb +++ b/ruby/lib/jam_ruby.rb @@ -94,6 +94,7 @@ require "jam_ruby/models/recording_liker" require "jam_ruby/models/recording_play" require "jam_ruby/models/recorded_track" require "jam_ruby/models/recorded_track_observer" +require "jam_ruby/models/share_token" require "jam_ruby/models/mix" require "jam_ruby/models/claimed_recording" require "jam_ruby/models/crash_dump" diff --git a/ruby/lib/jam_ruby/models/claimed_recording.rb b/ruby/lib/jam_ruby/models/claimed_recording.rb index 7396b9a6a..d85b2c727 100644 --- a/ruby/lib/jam_ruby/models/claimed_recording.rb +++ b/ruby/lib/jam_ruby/models/claimed_recording.rb @@ -8,12 +8,12 @@ module JamRuby validates :genre, presence: true validates_uniqueness_of :recording_id, :scope => :user_id - belongs_to :recording, :class_name => "JamRuby::Recording", :inverse_of => :claimed_recordings belongs_to :user, :class_name => "JamRuby::User", :inverse_of => :claimed_recordings belongs_to :genre, :class_name => "JamRuby::Genre" has_many :recorded_tracks, :through => :recording, :class_name => "JamRuby::RecordedTrack" has_many :playing_sessions, :class_name => "JamRuby::MusicSession" + has_one :share_token, :class_name => "JamRuby::ShareToken", :as => :shareable before_create :generate_share_token @@ -54,12 +54,16 @@ module JamRuby private def generate_share_token - self.share_token = loop do + token = loop do token = SecureRandom.urlsafe_base64(SHARE_TOKEN_LENGTH, false) token = remove_non_alpha_num(token) token.upcase! - break token unless MusicSessionHistory.exists?(share_token: token) + break token unless ShareToken.exists?(token: token) end + + self.share_token = ShareToken.new + self.share_token.token = token + self.share_token.shareable_type = "recording" end end end diff --git a/ruby/lib/jam_ruby/models/music_session_history.rb b/ruby/lib/jam_ruby/models/music_session_history.rb index 8b3c787d3..4169d677e 100644 --- a/ruby/lib/jam_ruby/models/music_session_history.rb +++ b/ruby/lib/jam_ruby/models/music_session_history.rb @@ -22,6 +22,7 @@ module JamRuby has_many :music_session_user_histories, :class_name => "JamRuby::MusicSessionUserHistory", :foreign_key => "music_session_id" has_many :comments, :class_name => "JamRuby::MusicSessionComment", :foreign_key => "music_session_id" has_many :likes, :class_name => "JamRuby::MusicSessionLiker", :foreign_key => "music_session_id" + has_one :share_token, :class_name => "JamRuby::ShareToken", :as => :shareable before_create :generate_share_token @@ -155,12 +156,16 @@ module JamRuby private def generate_share_token - self.share_token = loop do + token = loop do token = SecureRandom.urlsafe_base64(SHARE_TOKEN_LENGTH, false) token = remove_non_alpha_num(token) token.upcase! - break token unless MusicSessionHistory.exists?(share_token: token) + break token unless ShareToken.exists?(token: token) end + + self.share_token = ShareToken.new + self.share_token.token = token + self.share_token.shareable_type = "session" end end diff --git a/ruby/lib/jam_ruby/models/share_token.rb b/ruby/lib/jam_ruby/models/share_token.rb new file mode 100644 index 000000000..2f52afe41 --- /dev/null +++ b/ruby/lib/jam_ruby/models/share_token.rb @@ -0,0 +1,5 @@ +module JamRuby + class ShareToken < ActiveRecord::Base + belongs_to :shareable, :polymorphic => true + end +end \ No newline at end of file diff --git a/web/app/assets/javascripts/web/recordings.js b/web/app/assets/javascripts/web/recordings.js index c49968e0f..67818ba87 100644 --- a/web/app/assets/javascripts/web/recordings.js +++ b/web/app/assets/javascripts/web/recordings.js @@ -36,8 +36,6 @@ }); $(".landing-comment-scroller").prepend(commentHtml); - - $("#txtRecordingComment").val("Enter a comment..."); }); } } diff --git a/web/app/assets/javascripts/web/sessions.js b/web/app/assets/javascripts/web/sessions.js index 5d42c899d..8cb1d8697 100644 --- a/web/app/assets/javascripts/web/sessions.js +++ b/web/app/assets/javascripts/web/sessions.js @@ -28,8 +28,6 @@ }); $(".landing-comment-scroller").prepend(commentHtml); - - $("#txtSessionComment").val("Enter a comment..."); }); } } diff --git a/web/app/controllers/spikes_controller.rb b/web/app/controllers/spikes_controller.rb index 8ba1ce036..1eada9e3a 100644 --- a/web/app/controllers/spikes_controller.rb +++ b/web/app/controllers/spikes_controller.rb @@ -43,4 +43,15 @@ class SpikesController < ApplicationController render :layout => 'web' end + + def shareable_resolver + share_token = ShareToken.find_by_token(params[:id]) + # TODO: clean this up later to truly use polymorphic associations + if share_token.shareable_type == "session" + msh = MusicSessionHistory.find(share_token.shareable_id) + redirect_to "/sessions/#{msh.music_session_id}" + else + redirect_to "/recordings/#{share_token.shareable_id}" + end + end end diff --git a/web/app/views/clients/_shareDialog.html.erb b/web/app/views/clients/_shareDialog.html.erb index 9c114c0ec..9bb0723fe 100644 --- a/web/app/views/clients/_shareDialog.html.erb +++ b/web/app/views/clients/_shareDialog.html.erb @@ -21,8 +21,8 @@

Share a Link:


- <% unless share_token.blank? %> - <%= "#{root_url}#{share_token}" %> + <% unless true %> + <%= "#{root_url}" %> <% end %>

COPY LINK
diff --git a/web/app/views/music_sessions/show.html.erb b/web/app/views/music_sessions/show.html.erb index 2f03d2fb8..6ad6afa4c 100644 --- a/web/app/views/music_sessions/show.html.erb +++ b/web/app/views/music_sessions/show.html.erb @@ -78,7 +78,7 @@ <%= javascript_include_tag "web/sessions" %> -<%= render :partial => "clients/shareDialog", :locals => {:session => @music_session, :share_token => @music_session.share_token} %> +<%= render :partial => "clients/shareDialog", :locals => {:session => @music_session} %> <% content_for :extra_js do %>