Merge branch 'develop' of bitbucket.org:jamkazam/jam-cloud into develop

This commit is contained in:
Jonathan Kolyer 2016-07-18 06:01:58 +00:00
commit de7b3121e2
563 changed files with 5899 additions and 2102 deletions

View File

@ -14,42 +14,41 @@ else
ENV['NOKOGIRI_USE_SYSTEM_LIBRARIES'] ||= "true"
end
gem 'rails', '~> 3.2.22'
gem 'rails', '> 4.2'
gem 'protected_attributes'
gem 'rails-observers'
gem 'bootstrap-sass', '2.0.4'
gem 'bcrypt-ruby', '3.0.1'
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sass-rails', '~> 3.2.3'
gem 'coffee-rails', '~> 3.2.1'
gem 'sass-rails' #, '~> 3.2.3'
gem 'coffee-rails' #, '~> 3.2.1'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', :platforms => :ruby
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', :platforms => :ruby
gem 'uglifier', '>= 1.0.3'
# this version is pinned due to this: https://github.com/gregbell/active_admin/issues/1939
gem 'coffee-script-source', '~> 1.4.0' # ADD THIS LINE, 1.5.0 doesn't compile ActiveAdmin JavaScript files
end
gem 'kickbox'
gem 'devise', '3.3.0'
gem 'will_paginate', '3.0.3'
gem 'uglifier' #, '>= 1.0.3'
gem 'net-ssh'
# this version is pinned due to this: https://github.com/gregbell/active_admin/issues/1939
gem 'coffee-script-source' #, '~> 1.4.0' # ADD THIS LINE, 1.5.0 doesn't compile ActiveAdmin JavaScript files
gem 'devise' #, '3.3.0'
gem 'will_paginate' #, '3.0.3'
gem 'bootstrap-will_paginate', '0.0.6'
gem 'carrierwave', '0.9.0'
gem 'carrierwave' #, '0.9.0'
gem 'carrierwave_direct'
gem 'uuidtools', '2.1.2'
gem 'jquery-rails' # , '2.3.0' # pinned because jquery-ui-rails was split from jquery-rails, but activeadmin doesn't support this gem yet
gem 'jquery-ui-rails', '4.2.1'
gem 'rails3-jquery-autocomplete'
gem 'activeadmin' #, github: 'activeadmin', branch: '0-6-stable'
#gem 'activeadmin', github: 'activeadmin
gem 'jquery-ui-rails' #, '4.2.1'
gem 'jquery-rails'
gem 'rails-jquery-autocomplete' # This is the maintained version of rails3-jquery-autocomplete
gem 'activeadmin' , '1.0.0.pre4'# github: 'activeadmin', branch: 'master'
gem 'mime-types', '1.25'
gem 'meta_search'
gem 'fog'
#gem 'meta_search'
gem 'fog', "~> 1.32.0"
gem 'unf', '0.1.3' #optional fog dependency
gem 'country-select'
gem 'aasm', '3.0.16'
gem 'aasm' #, '3.0.16'
gem 'postgres-copy', '0.6.0'
gem 'aws-sdk', '~> 1'
gem 'bugsnag'
@ -62,21 +61,21 @@ gem 'resque-failed-job-mailer'
gem 'resque-lonely_job', '~> 1.0.0'
gem 'eventmachine', '1.0.4'
gem 'amqp', '0.9.8'
gem 'logging-rails', :require => 'logging/rails'
#gem 'logging-rails', :require => 'logging/rails'
gem 'pg_migrate'
gem 'ruby-protocol-buffers', '1.2.2'
gem 'sendgrid', '1.2.0'
gem 'geokit-rails'
gem 'postgres_ext', '1.0.0'
gem 'postgres_ext' #, '1.0.0'
gem 'resque_mailer'
gem 'rest-client'
gem 'iso-639'
gem 'rubyzip'
gem 'sanitize'
gem 'slim'
#gem 'influxdb'
gem 'cause' # needed by influxdb
gem 'influxdb-rails', '0.1.10'
#gem 'influxdb', '0.1.8'
#gem 'influxdb-rails', '0.1.10'
gem 'influxdb-rails'
gem 'recurly'
gem 'sendgrid_toolkit', '>= 1.1.1'
gem 'stripe'
@ -111,8 +110,8 @@ group :development, :test do
gem 'jasmine', '1.3.1'
gem 'execjs', '1.4.0'
#gem 'therubyracer' #, '0.11.0beta8'
gem 'factory_girl_rails', '4.1.0'
gem 'database_cleaner', '0.7.0'
gem 'factory_girl_rails' # , '4.1.0'
gem 'database_cleaner' #, '0.7.0'
gem 'launchy'
gem 'faker', '1.3.0'
gem 'puma'

View File

@ -16,7 +16,7 @@ ActiveAdmin.register JamRuby::AffiliatePartner, :as => 'Affiliates' do
index do
# default_actions # use this for all view/edit/delete links
# actions # use this for all view/edit/delete links
column 'User' do |oo| link_to(oo.partner_user.name, admin_user_path(oo.partner_user.id), {:title => oo.partner_user.name}) end
column 'Name' do |oo| oo.partner_name end
@ -29,7 +29,7 @@ ActiveAdmin.register JamRuby::AffiliatePartner, :as => 'Affiliates' do
link_to('Mark Paid', mark_paid_admin_affiliate_path(oo.id), :confirm => "Mark this affiliate as PAID?") if oo.unpaid
end
default_actions
actions
end

View File

@ -56,7 +56,7 @@ ActiveAdmin.register JamRuby::Connection, :as => 'Connection' do
end
index do
default_actions
actions
column :user_id do |c|
c.user ? c.user.name : ''
end

View File

@ -57,7 +57,7 @@ ActiveAdmin.register JamRuby::EmailBatch, :as => 'Batch Emails' do
link_to("Clone", batch_clone_admin_batch_email_path(bb.id))
end
default_actions
actions
end
show :title => 'Batch Email' do |obj|

View File

@ -42,12 +42,11 @@ ActiveAdmin.register_page "Fake Purchaser" do
end
content do
semantic_form_for JamTrackRight.new, :url => admin_fake_purchaser_bulk_jamtrack_purchase_path, :builder => ActiveAdmin::FormBuilder do |f|
f.inputs "Admin User to Fake JamTrack Purchases" do
f.input :user, :as => :autocomplete, :url => autocomplete_user_email_admin_users_path, :input_html => { :id_element => "#jam_trak_right_user_id" }, hint: 'All JamTracks in the system will be \'bought\' for this user. No Recurly interaction occurs with this feature.'
active_admin_form_for JamTrackRight.new, :url => admin_fake_purchaser_bulk_jamtrack_purchase_path, :builder => ActiveAdmin::FormBuilder do |f|
inputs "Admin User to Fake JamTrack Purchases" do
input :user, :as => :autocomplete, :url => autocomplete_user_email_admin_users_path, :input_html => { :id_element => "#jam_trak_right_user_id" }, hint: 'All JamTracks in the system will be \'bought\' for this user. No Recurly interaction occurs with this feature.'
end
f.actions
actions
end
end
end

View File

@ -10,7 +10,7 @@ ActiveAdmin.register JamRuby::FraudAlert, :as => 'Fraud Alerts' do
scope.joins('INNER JOIN "machine_fingerprints" ON "machine_fingerprints"."id" = "fraud_alerts"."machine_fingerprint_id" LEFT OUTER JOIN "fingerprint_whitelists" ON "fingerprint_whitelists"."fingerprint" = "machine_fingerprints"."fingerprint"').where('fingerprint_whitelists IS NULL')}
index do
default_actions
actions
column :machine_fingerprint
column :user

View File

@ -220,7 +220,7 @@ ActiveAdmin.register_page "Bootstrap" do
para "You need to create at least one server template, and one mount template. Click one of the top-left buttons based on your platform"
elsif IcecastMountTemplate.count == 0
semantic_form_for IcecastMountTemplate.new, :url => admin_bootstrap_create_mount_template_path, :builder => ActiveAdmin::FormBuilder do |f|
active_admin_form_for IcecastMountTemplate.new, :url => admin_bootstrap_create_mount_template_path, :builder => ActiveAdmin::FormBuilder do |f|
f.inputs "New Mount Template" do
f.input :hostname, :label => "jam-web public hostname:port (such that icecast can reach it)"
f.input :default_mime_type, :as => :select, :collection => ["ogg", "mp3"]
@ -228,7 +228,7 @@ ActiveAdmin.register_page "Bootstrap" do
f.actions
end
else
semantic_form_for IcecastServer.new, :url => admin_bootstrap_create_server_path, :builder => ActiveAdmin::FormBuilder do |f|
active_admin_form_for IcecastServer.new, :url => admin_bootstrap_create_server_path, :builder => ActiveAdmin::FormBuilder do |f|
f.inputs "New Icecast Server" do
f.input :hostname, :hint => "Just the icecast hostname; no port"
f.input :template, :hint => "This is the template associated with the server. Not as useful for the 1st server, but subsequent servers can use this same template, and share config"

View File

@ -17,7 +17,7 @@ ActiveAdmin.register JamRuby::ArtifactUpdate, :as => 'Artifacts' do
f.input :uri, :as => :file, :hint => "Upload the artifact from Jenkins"
end
f.buttons
f.actions
end

View File

@ -62,7 +62,7 @@ ActiveAdmin.register JamRuby::User, :as => 'Users' do
column :session_settings
column :can_invite
# default_actions # use this for all view/edit/delete links
# actions # use this for all view/edit/delete links
column "Actions" do |user|
links = ''.html_safe
links << link_to("View", resource_path(user), :class => "member_link view_link")

View File

@ -11,7 +11,7 @@ ActiveAdmin.register_page "Harry Fox Request" do
content do
semantic_form_for JamTrackHfaRequest.new, :url => admin_harry_fox_request_create_request_path, :builder => ActiveAdmin::FormBuilder do |f|
active_admin_form_for JamTrackHfaRequest.new, :url => admin_harry_fox_request_create_request_path, :builder => ActiveAdmin::FormBuilder do |f|
f.inputs "New Harry Fox Licensing Request" do
f.input :name, :hint => "Some sort of name to help us remember what this request was for"
end

View File

@ -18,7 +18,7 @@ ActiveAdmin.register JamRuby::JamTrackRight, :as => 'JamTrackRights' do
filter :jam_track
index do
default_actions
actions
#column "Order" do |right|
#link_to("Place", order_admin_jam_track_right_path(right)) + " | " +

View File

@ -21,7 +21,7 @@ ActiveAdmin.register JamRuby::JamTrack, :as => 'JamTracks' do
index do
# default_actions # use this for all view/edit/delete links
# actions # use this for all view/edit/delete links
column "Actions" do |jam_track|
links = ''.html_safe
clz = "member_link view_link show_tracks"
@ -35,7 +35,7 @@ ActiveAdmin.register JamRuby::JamTrack, :as => 'JamTracks' do
column :name
column :onboarding_exceptions do |jam_track|
if jam_track.onboarding_exceptions
exceptions = JSON.parse(jam_track.onboarding_exceptions)
exceptions = jam_track.onboarding_exceptions
exceptions.keys.join(',')
else
''
@ -55,6 +55,7 @@ ActiveAdmin.register JamRuby::JamTrack, :as => 'JamTracks' do
column :licensor_royalty_amount
column :id
=begin
column :jam_track_tracks do |jam_track|
table_for jam_track.jam_track_tracks.order('position ASC') do
column :id
@ -77,6 +78,8 @@ ActiveAdmin.register JamRuby::JamTrack, :as => 'JamTracks' do
end
end
end
=end
end

View File

@ -18,7 +18,7 @@ ActiveAdmin.register JamRuby::PromoBuzz, :as => 'Buzz' do
column 'State' do |pp| pp.aasm_state end
column 'Position' do |pp| pp.position end
column 'Updated' do |pp| pp.updated_at end
default_actions
actions
end
show do

View File

@ -15,7 +15,7 @@ ActiveAdmin.register JamRuby::PromoLatest, :as => 'Latest' do
column 'State' do |pp| pp.aasm_state end
column 'Position' do |pp| pp.position end
column 'Updated' do |pp| pp.updated_at end
default_actions
actions
end
show do

View File

@ -21,7 +21,7 @@ ActiveAdmin.register JamRuby::RecurlyTransactionWebHook, :as => 'RecurlyHooks'
index do
default_actions
actions
column :transaction_type
column :transaction_at

View File

@ -15,7 +15,7 @@ ActiveAdmin.register_page "Test Jobs" do
content do
semantic_form_for LongRunning.new, :url => admin_test_jobs_long_running_path, :builder => ActiveAdmin::FormBuilder do |f|
active_admin_form_for LongRunning.new, :url => admin_test_jobs_long_running_path, :builder => ActiveAdmin::FormBuilder do |f|
f.inputs "Queue a long running job" do
f.input :time
end

View File

@ -8,7 +8,8 @@
// require jquery.ui.dialog
// require jquery.ui.autocomplete
//= require cocoon
//= require active_admin/application
//= require autocomplete-rails
//= require active_admin/base
//= require jquery-ui/autocomplete
// //= require autocomplete-rails
//= require base
//= require_tree .

View File

@ -8,7 +8,7 @@
// $sidebar-width: 242px;
/*
*= require jquery.ui.all
*= require jquery-ui
*= require custom
*/
// Active Admin's got SASS!

View File

@ -9,6 +9,6 @@
* compiled file, but it's generally better to create a new file per style scope.
*
*= require_self
*= require jquery.ui.all
*= require jquery-ui
*= require_tree .
*/

View File

@ -14,7 +14,7 @@ class ArtifactsController < ApplicationController
ArtifactUpdate.transaction do
# VRFS-1071: Postpone client update notification until installer is available for download
ArtifactUpdate.connection.execute('SET TRANSACTION ISOLATION LEVEL READ COMMITTED')
@artifact = ArtifactUpdate.find_or_create_by_product_and_environment(product, environment)
@artifact = ArtifactUpdate.find_or_create_by({product: product, environement: environment})
@artifact.version = version
@artifact.uri = file

View File

@ -35,7 +35,7 @@ class Cohort < ActiveRecord::Base
}
attr_accessible :all_time, :monthly_start
serialize :data_set, JSON
#serialize :data_set, JSON
before_create do
self.data_set ||= {}

View File

@ -9,7 +9,7 @@ ActiveRecord::Base.establish_connection(YAML::load(File.open('config/database.ym
if defined?(Bundler)
# If you precompile assets before deploying to production, use this line
Bundler.require(*Rails.groups(:assets => %w(development test)))
Bundler.require(*Rails.groups)
# If you want your assets lazily compiled in production, use this line
# Bundler.require(:default, :assets, Rails.env)
end
@ -22,6 +22,7 @@ Band = JamRuby::Band
module JamAdmin
class Application < Rails::Application
config.eager_load = false
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.

View File

@ -28,9 +28,6 @@ JamAdmin::Application.configure do
# Raise exception on mass assignment protection for Active Record models
config.active_record.mass_assignment_sanitizer = :strict
# Log the query plan for queries taking more than this (works
# with SQLite, MySQL, and PostgreSQL)
config.active_record.auto_explain_threshold_in_seconds = 0.5
# Do not compress assets
config.assets.compress = false

View File

@ -1,6 +1,8 @@
JamAdmin::Application.configure do
# Settings specified here will take precedence over those in config/application.rb
config.eager_load = true
# Code is not reloaded between requests
config.cache_classes = true
@ -9,7 +11,7 @@ JamAdmin::Application.configure do
config.action_controller.perform_caching = true
# Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = false
config.serve_static_files = false
# Compress JavaScripts and CSS
config.assets.compress = true
@ -61,10 +63,6 @@ JamAdmin::Application.configure do
# Send deprecation notices to registered listeners
config.active_support.deprecation = :notify
# Log the query plan for queries taking more than this (works
# with SQLite, MySQL, and PostgreSQL)
# config.active_record.auto_explain_threshold_in_seconds = 0.5
# Set the logging destination(s)
config.log_to = %w[file]

View File

@ -8,7 +8,7 @@ JamAdmin::Application.configure do
config.cache_classes = true
# Configure static asset server for tests with Cache-Control for performance
config.serve_static_assets = true
config.serve_static_files = true
config.static_cache_control = "public, max-age=3600"
# Log error messages when you accidentally call methods on nil

View File

@ -167,7 +167,7 @@ ActiveAdmin.setup do |config|
config.view_factory.footer = Footer
config.register_javascript 'autocomplete-rails.js'
config.register_stylesheet 'jquery.ui.theme.css'
config.register_stylesheet 'jquery-ui/theme'
config.authorization_adapter = "AdminAuthorization"

View File

@ -85,7 +85,7 @@ FactoryGirl.define do
end
factory :music_session_user_history, :class => JamRuby::MusicSessionUserHistory do
ignore do
transient do
history nil
user nil
end
@ -162,7 +162,7 @@ FactoryGirl.define do
association :creator, factory: :user
ignore do
transient do
name "My Music Session"
description "Come Music Session"
fan_chat true
@ -194,7 +194,7 @@ FactoryGirl.define do
end
factory :latency_tester, :class => JamRuby::LatencyTester do
ignore do
transient do
connection nil
make_connection true
end

View File

@ -37,7 +37,7 @@ Capybara.register_driver :poltergeist do |app|
driver = Capybara::Poltergeist::Driver.new(app, { debug: false, phantomjs_logger: File.open('log/phantomjs.out', 'w') })
end
Capybara.javascript_driver = :poltergeist
Capybara.default_wait_time = 10
Capybara.default_max_wait_time = 10
RSpec.configure do |config|
# ## Mock Framework

View File

@ -359,4 +359,7 @@ lesson_time_tracking.sql
packaged_test_drive.sql
packaged_test_drive2.sql
jamclass_report.sql
jamblasters_network.sql
jamblasters_network.sql
immediate_recordings.sql
nullable_user_id_jamblaster.sql
rails4_migration.sql

View File

@ -0,0 +1 @@
ALTER TABLE recordings ADD COLUMN immediate BOOLEAN DEFAULT FALSE;

View File

@ -0,0 +1 @@
ALTER TABLE jamblasters ALTER user_id DROP NOT NULL;

View File

@ -0,0 +1 @@
ALTER TABLE music_sessions ALTER COLUMN session_removed_at DROP DEFAULT;

View File

@ -16,10 +16,17 @@ else
end
gem 'pg', '0.17.1', :platform => [:mri, :mswin, :mingw]
gem 'jdbc_postgres', :platform => [:jruby]
#gem 'jdbc_postgres', :platform => [:jruby]
gem 'activerecord', '> 4.2'
gem 'railties', '> 4.2'
gem 'actionmailer', '> 4.2'
gem 'rails-observers', '0.1.2'
gem 'protected_attributes' # needed to support attr_accessible
gem 'activerecord', '3.2.22'
gem "activerecord-import", "~> 0.4.1"
gem 'uuidtools', '2.1.2'
gem 'bcrypt-ruby', '3.0.1'
gem 'ruby-protocol-buffers', '1.2.2'
@ -27,11 +34,10 @@ gem 'eventmachine', '1.0.4'
gem 'amqp', '1.0.2'
gem 'kickbox'
gem 'will_paginate'
gem 'actionmailer', '3.2.22'
gem 'sendgrid', '1.2.0'
gem 'aws-sdk', '~> 1'
gem 'carrierwave', '0.9.0'
gem 'aasm', '3.0.16'
gem 'aasm'
gem 'devise', '3.3.0' # 3.4.0 causes: uninitialized constant ActionController::Metal (NameError)
gem 'postgres-copy'
gem 'geokit'
@ -60,10 +66,10 @@ gem 'email_validator'
group :test do
gem 'simplecov', '~> 0.7.1'
gem 'simplecov-rcov'
gem 'factory_girl', '4.1.0'
gem 'factory_girl', '4.5.0'
gem "rspec", "2.11"
gem 'spork', '0.9.0'
gem 'database_cleaner', '1.3.0'
gem 'database_cleaner', '1.4.1'
gem 'faker', '1.3.0'
gem 'resque_spec' #, :path => "/home/jam/src/resque_spec/"
gem 'timecop'

View File

@ -1,5 +1,10 @@
require "pg"
require "active_record"
require "rails/railtie"
require "protected_attributes"
require "rails-observers"
require "rails/observers/active_model"
require "rails/observers/activerecord/active_record"
require "carrierwave"
require "carrierwave/orm/activerecord"
require "jampb"
@ -25,6 +30,7 @@ require 'stripe'
require 'zip-codes'
require 'email_validator'
ActiveRecord::Base.raise_in_transactional_callbacks = true
require "jam_ruby/lib/timezone"
require "jam_ruby/constants/limits"
require "jam_ruby/constants/notification_types"
@ -224,7 +230,7 @@ require "jam_ruby/models/jam_track_hfa_request"
require "jam_ruby/models/jam_track_hfa_request_id"
require "jam_ruby/models/jam_track_track"
require "jam_ruby/models/jam_track_right"
require "jam_ruby/models/jam_track_tap_in"
#require "jam_ruby/models/jam_track_tap_in" # consider deletion
require "jam_ruby/models/jam_track_file"
require "jam_ruby/models/jam_track_mixdown"
require "jam_ruby/models/jam_track_mixdown_package"

View File

@ -9,11 +9,11 @@
<% else %>
<p>
<% if @card_declined %>
When we tried to distribute a payment to you on <%= @bill_date %>, the charge was declined by stripe. Can you please check your stripe account status? Thank you!
When we tried to distribute a payment to you on <%= @bill_date %>, the charge was declined by Stripe. Can you please check your Stripe account status? Thank you!
<% elsif @card_expired %>
When we tried to distribute a payment to you on <%= @bill_date %>, the charge was declined by stripe due to a card expiration. Can you please check your stripe account status? Thank you!
When we tried to distribute a payment to you on <%= @bill_date %>, the charge was declined by Stripe due to a card expiration. Can you please check your stripe account status? Thank you!
<% else %>
For some reason, when we tried to distribute a payment to you on <%= @bill_date %>, the charge failed. Can you please check your stripe account status? Thank you!
For some reason, when we tried to distribute a payment to you on <%= @bill_date %>, the charge failed. Can you please check your Stripe account status? Thank you!
<% end %>
</p>
<% end %>

View File

@ -5,11 +5,11 @@ Hello <%= @name %>,
We attempted to process a payment via your Stripe account for <%= @distribution.real_distribution_display %> for this lesson, but the payment failed. Please sign into your Stripe account, and verify that everything there is working properly. Well try again to process this payment in about 24 hours.
<% else %>
<% if @card_declined %>
When we tried to distribute a payment to you on <%= @bill_date %>, the charge was declined by stripe. Can you please check your stripe account status? Thank you!
When we tried to distribute a payment to you on <%= @bill_date %>, the charge was declined by Stripe. Can you please check your Stripe account status? Thank you!
<% elsif @card_expired %>
When we tried to distribute a payment to you on <%= @bill_date %>, the charge was declined by stripe due to a card expiration. Can you please check your stripe account status? Thank you!
When we tried to distribute a payment to you on <%= @bill_date %>, the charge was declined by Stripe due to a card expiration. Can you please check your Stripe account status? Thank you!
<% else %>
For some reason, when we tried to distribute a payment to you on <%= @bill_date %>, the charge failed. Can you please check your stripe account status? Thank you!
For some reason, when we tried to distribute a payment to you on <%= @bill_date %>, the charge failed. Can you please check your Stripe account status? Thank you!
<% end %>
<% end %>

View File

@ -66,8 +66,8 @@ module JamRuby
return
end
#wav_file = File.join(tmp_dir, File.basename(click_track_file[:original_filename]))
#JamTrackImporter.song_storage_manager.download(click_track_file[:original_filename], wav_file)
wav_file = File.join(tmp_dir, File.basename(click_track_file[:original_filename]))
JamTrackImporter.song_storage_manager.download(click_track_file[:original_filename], wav_file)
JamTrack.transaction do
click_track = jam_track.click_track
@ -81,6 +81,8 @@ module JamRuby
click_track.instrument_id = 'computer'
click_track.jam_track = jam_track
click_track.position = 10000
click_track.wav_file = wav_file
if !click_track.save
@@log.error("unable to create jamtrack click track #{click_track.errors.inspect}")
finish("jam_track_click", "unable to create: #{click_track.errors.inspect}")
@ -1601,6 +1603,8 @@ module JamRuby
end
end
def assign_instrument_parts(wav_file, tracks, addt_files, reassign = false)
if !reassign
track = JamTrackTrack.new
@ -2651,6 +2655,34 @@ module JamRuby
importer
end
# created for helbing tracks which had .mp3 as click track
def convert_click_track_to_wav(jam_track)
importer = JamTrackImporter.new
importer.name = jam_track.name
track = jam_track.click_track
if !track
Dir.mktmpdir do |tmp_dir|
# something like: "mapped/Victor Young - Stella By Starlight/meta.yml"
metalocation = jam_track.metalocation
base_dir = metalocation[0...metalocation.rindex('/')]
click_mp3 = File.join(tmp_dir, 'Click.mp3')
click_wav = File.join(tmp_dir, 'Click.wav')
song_storage_manager.download(base_dir + '/Click.mp3', click_mp3)
`ffmpeg -i "#{click_mp3}" "#{click_wav}"`
song_storage_manager.upload(base_dir + '/Click.wav', click_wav)
importer.finish("success", nil)
end
else
importer.finish('success', nil)
end
importer
end
def synchronize_jamtrack_master_preview(jam_track)
importer = JamTrackImporter.new
importer.name = jam_track.name
@ -2717,7 +2749,8 @@ module JamRuby
def import_click_tracks
importers = []
JamTrack.all.each do |jam_track|
licensor = JamTrackLicensor.find_by_name!('Stockton Helbing')
JamTrack.where(licensor_id: licensor.id).each do |jam_track|
#jam_track = JamTrack.find('126')
importers << import_click_track(jam_track)
end
@ -2796,6 +2829,32 @@ module JamRuby
end
end
def convert_click_track_to_wavs
importers = []
licensor = JamTrackLicensor.find_by_name!('Stockton Helbing')
JamTrack.where(licensor_id: licensor.id).each do |jam_track|
importers << convert_click_track_to_wav(jam_track)
end
@@log.info("SUMMARY")
@@log.info("-------")
importers.each do |importer|
if importer
if importer.reason == "success" || importer.reason == "jam_track_exists" || importer.reason == "other_processing"
@@log.info("#{importer.name} #{importer.reason}")
else
@@log.error("#{importer.name} failed to import.")
@@log.error("#{importer.name} reason=#{importer.reason}")
@@log.error("#{importer.name} detail=#{importer.detail}")
end
else
@@log.error("NULL IMPORTER")
end
end
end
def synchronize_jamtrack_aac_previews
importers = []
@ -2818,8 +2877,6 @@ module JamRuby
else
@@log.error("NULL IMPORTER")
end
end
end
@ -3123,11 +3180,11 @@ module JamRuby
def resync_instruments(licensor)
load_paris_mappings if @paris_mapping.nil?
load_paris_mappings if @paris_mapping.nil? && is_paris_storage?
JamTrack.where(licensor_id: licensor.id).each do |jam_track|
if @paris_metadata[jam_track.vendor_id].nil?
if is_paris_storage? && @paris_metadata[jam_track.vendor_id].nil?
next
end
puts "RESYNCING JAMTRACK #{jam_track.id}"
@ -3140,6 +3197,7 @@ module JamRuby
#puts ">>>>>>>>> HIT KEY TO CONTINUE <<<<<<<<<<"
#STDIN.gets
break
end
end

View File

@ -35,6 +35,7 @@ module JamRuby
def save_jam_track_right_jkz(jam_track_right, sample_rate=48)
jam_track = jam_track_right.jam_track
jam_track.reload
py_root = APP_CONFIG.jamtracks_dir
step = 0
Dir.mktmpdir do |tmp_dir|

View File

@ -1,4 +1,12 @@
#
#
#
#
# shouldn't be used in Rails 4
#
#
#
#
# This needs to be outside the module to work.
class JsonValidator < ActiveModel::EachValidator
# implement the method called during validation

View File

@ -32,7 +32,7 @@ module JamRuby
def upload_sign(filename, content_md5, part_number, upload_id)
hdt = http_date_time
str_to_sign = "PUT\n#{content_md5}\n#{content_type}\n#{hdt}\n/#{@aws_bucket}/#{filename}?partNumber=#{part_number}&uploadId=#{upload_id}"
signature = Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha1'), @aws_secret, str_to_sign)).chomp
signature = Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha1'), @aws_secret, str_to_sign)).chomp
{ :datetime => hdt,
:md5 => content_md5,
:url => "https://s3.amazonaws.com/#{@aws_bucket}/#{filename}?partNumber=#{part_number}&uploadId=#{upload_id}",

View File

@ -833,7 +833,7 @@ module JamRuby
def self.stats
stats = {}
result = ActiveMusicSession.select('count(distinct(id)) AS total, count(distinct(jam_track_initiator_id)) as jam_track_count, count(distinct(backing_track_initiator_id)) as backing_track_count, count(distinct(metronome_initiator_id)) as metronome_count, count(distinct(claimed_recording_initiator_id)) as recording_count').first
result = ActiveMusicSession.select('count(distinct(id)) AS total, count(distinct(jam_track_initiator_id)) as jam_track_count, count(distinct(backing_track_initiator_id)) as backing_track_count, count(distinct(metronome_initiator_id)) as metronome_count, count(distinct(claimed_recording_initiator_id)) as recording_count')[0]
stats['count'] = result['total'].to_i
stats['jam_track_count'] = result['jam_track_count'].to_i

View File

@ -45,7 +45,7 @@ class JamRuby::AffiliatePartner < ActiveRecord::Base
#validates :partner_code, format: { with: PARTNER_CODE_REGEX }, :allow_blank => true
validates :entity_type, inclusion: {in: ENTITY_TYPES, message: "invalid entity type"}
serialize :address, JSON
#serialize :address, JSON
before_save do |record|
record.address ||= ADDRESS_SCHEMA.clone

View File

@ -4,7 +4,7 @@ module JamRuby
DEFAULT_ENVIRONMENT = 'public'
CLIENT_PREFIX = 'JamClient'
PRODUCTS = ["#{CLIENT_PREFIX}/Win32", "#{CLIENT_PREFIX}/MacOSX", "#{CLIENT_PREFIX}/JamBlaster"]
PRODUCTS = ["#{CLIENT_PREFIX}/Win32", "#{CLIENT_PREFIX}/MacOSX", "#{CLIENT_PREFIX}/JamBlaster", "#{CLIENT_PREFIX}/JamBlasterClient"]
self.primary_key = 'id'
attr_accessible :version, :uri, :sha1, :environment, :product, as: :admin

View File

@ -4,7 +4,7 @@ module JamRuby
self.table_name = "backing_tracks"
self.primary_key = 'id'
default_scope order('created_at ASC')
default_scope { order('created_at ASC') }
belongs_to :connection, :class_name => "JamRuby::Connection", :inverse_of => :tracks, :foreign_key => 'connection_id'
validates :connection, presence: true

View File

@ -110,8 +110,8 @@ module JamRuby
.order('created_at DESC')
.limit(10)
recordings.concat(msh)
recordings.sort! {|a,b| b.created_at <=> a.created_at}.first(5)
result = recordings.concat(msh)
result.sort! {|a,b| b.created_at <=> a.created_at}.first(5)
end
def location
@ -182,7 +182,7 @@ module JamRuby
band = id.blank? ? Band.new : Band.find(id)
# ensure user updating Band details is a Band member
unless band.new_record? || band.users.exists?(user)
unless band.new_record? || band.users.exists?(user.id)
raise JamPermissionError, ValidationMessages::USER_NOT_BAND_MEMBER_VALIDATION_ERROR
end

View File

@ -4,7 +4,7 @@ module JamRuby
cattr_accessor :jschema, :search_meta
attr_accessor :user_counters
serialize :data_blob, JSON
#serialize :data_blob, JSON
KEY_BAND_SEARCH_TYPE = 'band_search_type'
KEY_BAND_TYPE = 'band_type'
@ -251,6 +251,7 @@ module JamRuby
end
def _process_results_page(_results)
@results = _results
if user
@user_counters = @results.inject({}) { |hh,val| hh[val.id] = {}; hh }

View File

@ -1,6 +1,8 @@
module JamRuby
class Charge < ActiveRecord::Base
attr_accessor :stripe_charge
belongs_to :user, class_name: "JamRuby::User"
validates :sent_billing_notices, inclusion: {in: [true, false]}
@ -24,9 +26,16 @@ module JamRuby
raise "not implemented"
end
def record_charge(stripe_charge)
self.stripe_charge_id = stripe_charge.id
self.billed = true
self.billed_at = Time.now
self.save(validate: false)
end
def charge(force = false)
stripe_charge = nil
@stripe_charge = nil
if !self.billed
@ -49,25 +58,30 @@ module JamRuby
begin
stripe_charge = do_charge(force)
self.stripe_charge_id = stripe_charge.id
self.billed = true
self.billed_at = Time.now
self.save(validate: false)
# record the charge in this context (meaning, in our transaction)
record_charge(@stripe_charge) if @stripe_charge
rescue Stripe::StripeError => e
stripe_handler(e)
subject = "Unable to charge user #{charged_user.email} for lesson #{self.id} (stripe)"
body = "user=#{charged_user.email}\n\nbilling_error_reason=#{billing_error_reason}\n\nbilling_error_detail = #{billing_error_detail}"
AdminMailer.alerts({subject: subject, body: body})
AdminMailer.alerts({subject: subject, body: body}).deliver
do_send_unable_charge
return false
rescue Exception => e
# record the charge even if there was an unhandled exception at some point
record_charge(@stripe_charge) if @stripe_charge
unhandled_handler(e)
subject = "Unable to charge user #{charged_user.email} for lesson #{self.id} (unhandled)"
body = "user=#{charged_user.email}\n\nbilling_error_reason=#{billing_error_reason}\n\nbilling_error_detail = #{billing_error_detail}"
AdminMailer.alerts({subject: subject, body: body})
unhandled_handler(e)
AdminMailer.alerts({subject: subject, body: body}).deliver
return false
end
@ -89,8 +103,8 @@ module JamRuby
return stripe_charge
end
def unhandled_handler(e, reason = 'unhandled_exception')
self.billing_error_reason = reason
def unhandled_handler(e)
self.billing_error_reason = e.to_s
if e.cause
self.billing_error_detail = e.cause.to_s + "\n" + e.cause.backtrace.join("\n\t") if e.cause.backtrace
self.billing_error_detail << "\n\n"
@ -98,7 +112,7 @@ module JamRuby
else
self.billing_error_detail = e.to_s + "\n" + e.backtrace.join("\n\t") if e.backtrace
end
puts "Charge: unhandled exception #{billing_error_reason}, #{billing_error_detail}"
#puts "Charge: unhandled exception #{billing_error_reason}, #{billing_error_detail}"
self.save(validate: false)
end

View File

@ -7,7 +7,7 @@ module JamRuby
self.table_name = 'chat_messages'
self.primary_key = 'id'
default_scope order('created_at DESC')
default_scope { order('created_at DESC') }
attr_accessor :ignore_message_checks

View File

@ -33,7 +33,7 @@ module JamRuby
def user_belongs_to_recording
if user && recording && !recording.users.exists?(user)
if user && recording && !recording.users.exists?(user.id)
errors.add(:user, ValidationMessages::NOT_PART_OF_RECORDING)
end
end

View File

@ -4,6 +4,8 @@ module JamRuby
class Connection < ActiveRecord::Base
include HtmlSanitize
include AASM
# client_types
TYPE_CLIENT = 'client'
TYPE_BROWSER = 'browser'
@ -116,13 +118,13 @@ module JamRuby
if music_session.musician_access
if music_session.approval_required
if !(music_session.music_session.creator == user || music_session.creator == user || music_session.invited_musicians.exists?(user))
if !(music_session.music_session.creator == user || music_session.creator == user || music_session.invited_musicians.exists?(user.id))
errors.add(:approval_required, ValidationMessages::INVITE_REQUIRED)
return false
end
end
else
if !(music_session.music_session.creator == user || music_session.creator == user || music_session.invited_musicians.exists?(user))
if !(music_session.music_session.creator == user || music_session.creator == user || music_session.invited_musicians.exists?(user.id))
errors.add(:musician_access, ValidationMessages::INVITE_REQUIRED)
return false
end
@ -176,7 +178,7 @@ module JamRuby
def join_the_session(music_session, as_musician, tracks, user, audio_latency, videos=nil)
self.music_session_id = music_session.id
self.as_musician = as_musician
self.as_musician = as_musician == true # this is deliberate; otherwise we create a warning in one our tests that passes 'blarg' (rails warning about casting strings to false)
self.joining_session = true
self.joined_session_at = Time.now
associate_tracks(tracks) unless tracks.nil?
@ -244,7 +246,7 @@ module JamRuby
stats[result['client_type']] = result['client_type_count'].to_i
end
result = Connection.select('count(id) AS total, count(CASE WHEN scoring_timeout > NOW() THEN 1 ELSE null END) AS scoring_timeout_count, count(music_session_id) AS in_session, count(as_musician) AS musicians, count(CASE WHEN udp_reachable THEN 1 ELSE null END) AS udp_reachable_count, count(CASE WHEN is_network_testing THEN 1 ELSE null END) AS is_network_testing_count').first
result = Connection.select('count(id) AS total, count(CASE WHEN scoring_timeout > NOW() THEN 1 ELSE null END) AS scoring_timeout_count, count(music_session_id) AS in_session, count(as_musician) AS musicians, count(CASE WHEN udp_reachable THEN 1 ELSE null END) AS udp_reachable_count, count(CASE WHEN is_network_testing THEN 1 ELSE null END) AS is_network_testing_count')[0]
stats['count'] = result['total'].to_i
stats['scoring_timeout'] = result['scoring_timeout_count'].to_i

View File

@ -35,7 +35,7 @@ module JamRuby
csv = ::CSV.new(io, {encoding: 'ISO-8859-1', headers: false})
csv.each do |row|
vals = vals+sep+"(#{ActiveRecord::Base.quote_value(row[0])}, #{ActiveRecord::Base.quote_value(row[1])})"
vals = vals+sep+"(#{ActiveRecord::Base.quote_value(row[0], nil)}, #{ActiveRecord::Base.quote_value(row[1], nil)})"
sep = ','
i += 1

View File

@ -95,7 +95,7 @@ module JamRuby
AdminMailer.alerts({
subject:"Account IP Access Violation. USER: #{user.email}",
body:body
}).deliver
}).deliver_now
end
end
@ -119,7 +119,7 @@ module JamRuby
AdminMailer.alerts({
subject:"Single IP Access Violation. IP:#{remote_ip}",
body:body
}).deliver
}).deliver_now
# and now shut them down
if Rails.application.config.ban_jamtrack_downloaders

View File

@ -7,7 +7,7 @@ module JamRuby
attr_accessible :from_email, :subject, :test_emails, :body
attr_accessible :lock_version, :opt_in_count, :sent_count, :started_at, :completed_at
default_scope :order => 'created_at DESC'
default_scope { order('created_at DESC') }
VAR_FIRST_NAME = '@FIRSTNAME'
VAR_LAST_NAME = '@LASTNAME'
@ -88,7 +88,7 @@ FOO
if 'test' == Rails.env
BatchMailer.send_batch_email(self.id, bset.user_id).deliver!
else
BatchMailer.send_batch_email(self.id, bset.user_id).deliver
BatchMailer.send_batch_email(self.id, bset.user_id).deliver_now
end
end
end
@ -122,7 +122,7 @@ FOO
if 'test' == Rails.env
BatchMailer.send_batch_email_test(self.id).deliver!
else
BatchMailer.send_batch_email_test(self.id).deliver
BatchMailer.send_batch_email_test(self.id).deliver_now
end
end

View File

@ -118,7 +118,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(user, new_musicians).deliver
UserMailer.new_musicians(user, new_musicians).deliver_now
end
self.sent_count = self.opt_in_count
self.save

View File

@ -214,7 +214,7 @@ SQL
self.fetch_recipients(trigger_idx) do |users|
users.each do |uu|
self.email_batch_sets << (bset = self.make_set(uu, trigger_idx))
ProgressMailer.send_reminder(bset).deliver
ProgressMailer.send_reminder(bset).deliver_now
sent += 1
end
end

View File

@ -137,7 +137,7 @@ module JamRuby
self.fetch_recipients do |receiver, sessions_and_latency|
self.opt_in_count += 1
bset = EmailBatchSet.scheduled_session_set(self, receiver, sessions_and_latency)
UserMailer.scheduled_session_daily(receiver, sessions_and_latency).deliver
UserMailer.scheduled_session_daily(receiver, sessions_and_latency).deliver_now
end
self.test_emails = _count_recipients.inspect

View File

@ -8,11 +8,11 @@ module JamRuby
validates :email, uniqueness: true
def self.banned(user)
EmailBlacklist.count(:conditions => "email = '#{user.email.downcase}'") >= 1
EmailBlacklist.where("email = '#{user.email.downcase}'").count >= 1
end
def self.listed(user)
EmailBlacklist.count(:conditions => "email= '#{user.id}'") == 1
EmailBlacklist.where("email = '#{user.id}'").count == 1
end
def self.admin_url

View File

@ -4,7 +4,7 @@ module JamRuby
observe JamRuby::Feedback
def after_validation(feedback)
CorpMailer.feedback(feedback).deliver unless feedback.errors.any?
CorpMailer.feedback(feedback).deliver_now unless feedback.errors.any?
end
end
end

View File

@ -73,7 +73,7 @@ module JamRuby
[locid, countrycode, region, city, postalcode, latitude, longitude, metrocode, areacode])
end
def self.i(s)
def self.what(s)
return 'NULL' if s.nil? or s.blank?
return s.to_i
end
@ -175,7 +175,8 @@ module JamRuby
metrocode = row[7]
areacode = row[8]
vals = vals+sep+"(#{locid}, '#{countrycode}', '#{region}', #{quote_value(city)}, '#{postalcode}', #{latitude}, #{longitude}, #{i(metrocode)}, '#{areacode}')"
quoted_city = quote_value(city, nil)
vals = vals+sep+"(#{locid}, '#{countrycode}', '#{region}', #{quoted_city}, '#{postalcode}', #{latitude}, #{longitude}, #{what(metrocode)}, '#{areacode}')"
sep = ','
i += 1

View File

@ -16,8 +16,8 @@ module JamRuby
after_save :poke_config
def poke_config
IcecastServer.update(servers, config_changed: 1)
templates.each { |template| IcecastServer.update(template.servers, config_changed: 1) }
servers.update_all(config_changed: 1)
templates.each { |template| template.servers.update_all(config_changed: 1) }
end
def to_s

View File

@ -13,8 +13,8 @@ module JamRuby
after_save :poke_config
def poke_config
IcecastServer.update(servers, config_changed: 1)
templates.each { |template| IcecastServer.update(template.servers, config_changed: 1) }
servers.update_all(config_changed: 1)
templates.each { |template| template.servers.update_all(config_changed: 1) }
end
def to_s

View File

@ -19,8 +19,8 @@ module JamRuby
after_save :poke_config
def poke_config
IcecastServer.update(servers, config_changed: 1)
templates.each { |template| IcecastServer.update(template.servers, config_changed: 1) }
servers.update_all(config_changed: 1)
templates.each { |template| template.servers.update_all(config_changed: 1) }
end
def to_s

View File

@ -16,8 +16,8 @@ module JamRuby
after_save :poke_config
def poke_config
IcecastServer.update(servers, config_changed: 1)
templates.each { |template| IcecastServer.update(template.servers, config_changed: 1) }
servers.update_all(config_changed: 1)
templates.each { |template| template.servers.update_all(config_changed: 1) }
end
def to_s

View File

@ -16,8 +16,8 @@ module JamRuby
after_save :poke_config
def poke_config
IcecastServer.update(servers, config_changed: 1)
templates.each { |template| IcecastServer.update(template.servers, config_changed: 1) }
servers.update_all(config_changed: 1)
templates.each { |template| template.servers.update_all(config_changed: 1) }
end
def to_s

View File

@ -7,7 +7,7 @@ module JamRuby
has_many :servers, :class_name => "JamRuby::IcecastServer", :inverse_of => :master_relay, :foreign_key => "master_relay_id"
has_many :templates, :class_name => "JamRuby::IcecastTemplate", :inverse_of => :master_relay, :foreign_key => "master_relay_id"
validates :master_server, presence: true, length: {minimum: 1}
validates :master_server, length: {minimum: 1}
validates :master_server_port, presence: true, numericality: {only_integer: true}, length: {in: 1..65535}
validates :master_update_interval, presence: true, numericality: {only_integer: true}, length: {in: 1..1200}
validates :master_username, presence: true, length: {minimum: 5}
@ -18,8 +18,8 @@ module JamRuby
after_save :poke_config
def poke_config
IcecastServer.update(servers, config_changed: 1)
templates.each { |template| IcecastServer.update(template.servers, config_changed: 1) }
servers.update_all(config_changed: 1)
templates.each { |template| template.servers.update_all(config_changed: 1) }
end
def to_s

View File

@ -18,7 +18,7 @@ module JamRuby
belongs_to :server, class_name: "JamRuby::IcecastServer", inverse_of: :mounts, foreign_key: 'icecast_server_id'
belongs_to :mount_template, class_name: "JamRuby::IcecastMountTemplate", inverse_of: :mounts, foreign_key: 'icecast_mount_template_id'
has_many :source_changes, class_name: "JamRuby::IcecastSourceChange", inverse_of: :mount, foreign_key: 'icecast_mount_id', order: 'created_at DESC'
has_many :source_changes, -> { order('created_at DESC') }, class_name: "JamRuby::IcecastSourceChange", inverse_of: :mount, foreign_key: 'icecast_mount_id'
validates :name, presence: true, uniqueness: true
validates :source_username, length: {minimum: 5}, if: lambda {|m| m.source_username.present?}

View File

@ -36,7 +36,7 @@ module JamRuby
end
def poke_config
IcecastServer.update(servers, config_changed: 1)
servers.update_all(config_changed: 1)
end
def sanitize_active_admin

View File

@ -16,8 +16,8 @@ module JamRuby
before_destroy :poke_config
def poke_config
IcecastServer.update(servers, config_changed: 1)
templates.each { |template| IcecastServer.update(template.servers, config_changed: 1) }
servers.update_all(config_changed: 1)
templates.each { |template| template.servers.update_all(config_changed: 1) }
end
def to_s

View File

@ -17,7 +17,7 @@ module JamRuby
after_save :poke_config
def poke_config
IcecastServer.update(servers, :config_changed => true)
servers.update_all(:config_changed => 1)
end
def to_s

View File

@ -12,8 +12,8 @@ module JamRuby
after_save :poke_config
def poke_config
IcecastServer.update(servers, config_changed: 1)
templates.each { |template| IcecastServer.update(template.servers, config_changed: 1) }
servers.update_all(config_changed: 1)
templates.each { |template| template.servers.update_all(config_changed: 1) }
end
def to_s

View File

@ -13,8 +13,8 @@ module JamRuby
validates :source_direction, inclusion: {:in => [true, false]}
validates :success, inclusion: {:in => [true, false]}
validates :reason, length: {minimum: 0, maximum:255}
validates :detail, length: {minimum: 0, maximum:10000}
validates :reason, length: {minimum: 0, maximum:255}, allow_nil: true
validates :detail, length: {minimum: 0, maximum:10000}, allow_nil: true
validates :user, presence:true, :if => :is_client_change?
validates :client_id, presence: true, :if => :is_client_change?
validates :mount, presence:true

View File

@ -37,7 +37,7 @@ module JamRuby
before_destroy :poke_config
def poke_config
IcecastServer.update(servers, config_changed: 1)
servers.update_all(config_changed: 1)
end
def sanitize_active_admin

View File

@ -15,7 +15,7 @@ module JamRuby
before_destroy :poke_config
def poke_config
IcecastServer.update(template.servers, config_changed: 1) if template
template.servers.update_all(config_changed: 1) if template
end
end
end

View File

@ -31,14 +31,12 @@ module JamRuby
errors.add(:join_request, JOIN_REQUEST_IS_NOT_FOR_RECEIVER_AND_MUSIC_SESSION )
elsif join_request.nil?
# we only check for friendship requirement if this was not in response to a join_request
if !receiver.friends.exists?(sender) && (music_session.is_lesson? && receiver != music_session.lesson_session.teacher)
if !receiver.friends.exists?(sender)
if !receiver.friends.exists?(sender.id) && (music_session.is_lesson? && receiver != music_session.lesson_session.teacher)
if !receiver.friends.exists?(sender.id)
errors.add(:receiver, FRIENDSHIP_REQUIRED_VALIDATION_ERROR)
elsif (music_session.is_lesson? && receiver != music_session.lesson_session.teacher)
errors.add(:receiver, INVITATION_NOT_TEACHER_VALIDATION_ERROR)
end
end
end

View File

@ -5,9 +5,9 @@ module JamRuby
def after_create(invited_user)
if invited_user.sender.nil?
InvitedUserMailer.welcome_betauser(invited_user).deliver
InvitedUserMailer.welcome_betauser(invited_user).deliver_now
else
InvitedUserMailer.friend_invitation(invited_user).deliver
InvitedUserMailer.friend_invitation(invited_user).deliver_now
end if invited_user.email.present?
end
end

View File

@ -8,11 +8,11 @@ module JamRuby
validates :remote_ip, presence: true, uniqueness: true
def self.banned(remote_ip)
IpBlacklist.count(:conditions => "remote_ip = '#{remote_ip}' AND remote_ip not in (select remote_ip from ip_whitelists where remote_ip = '#{remote_ip}')") == 1
IpBlacklist.where("remote_ip = '#{remote_ip}' AND remote_ip not in (select remote_ip from ip_whitelists where remote_ip = '#{remote_ip}')").count == 1
end
def self.listed(remote_ip)
IpBlacklist.where(:conditions => "remote_ip = '#{remote_ip}'") == 1
IpBlacklist.where("remote_ip = '#{remote_ip}'").count == 1
end
def self.admin_url

View File

@ -8,7 +8,7 @@ module JamRuby
validates :remote_ip, presence:true, uniqueness:true
def self.listed(remote_ip)
IpWhitelist.count(:conditions => "remote_ip = '#{remote_ip}'") == 1
IpWhitelist.where("remote_ip = '#{remote_ip}'").count == 1
end
def self.admin_url

View File

@ -115,7 +115,7 @@ module JamRuby
endip = ip_address_to_int(strip_quotes(row[1]))
company = row[2]
vals = vals+sep+"(#{beginip}, #{endip}, #{quote_value(company)})"
vals = vals+sep+"(#{beginip}, #{endip}, #{quote_value(company, nil)})"
sep = ','
i += 1

View File

@ -31,7 +31,7 @@ module JamRuby
validates :songwriter, length: {maximum: 1000}
validates :publisher, length: {maximum: 1000}
validates :sales_region, inclusion: {in: [nil] + SALES_REGION}
validates_format_of :price, with: /^\d+\.*\d{0,2}$/
validates_format_of :price, with: /\A\d+\.*\d{0,2}\z/
validates :version, presence: true
validates :pro_ascap, inclusion: {in: [true, false]}
validates :pro_bmi, inclusion: {in: [true, false]}
@ -48,16 +48,16 @@ module JamRuby
validates :album_title, length: {maximum: 200}
validates :slug, uniqueness: true
validates_format_of :reproduction_royalty_amount, with: /^\d+\.*\d{0,4}$/, :allow_blank => true
validates_format_of :licensor_royalty_amount, with: /^\d+\.*\d{0,4}$/, :allow_blank => true
validates_format_of :reproduction_royalty_amount, with: /\A\d+\.*\d{0,4}\z/, :allow_blank => true
validates_format_of :licensor_royalty_amount, with: /\A\d+\.*\d{0,4}\z/, :allow_blank => true
belongs_to :licensor , class_name: 'JamRuby::JamTrackLicensor', foreign_key: 'licensor_id', :inverse_of => :jam_tracks
has_many :genres_jam_tracks, :class_name => "JamRuby::GenreJamTrack", :foreign_key => "jam_track_id", inverse_of: :jam_track
has_many :genres, :through => :genres_jam_tracks, :class_name => "JamRuby::Genre", :source => :genre
has_many :jam_track_tracks, :class_name => "JamRuby::JamTrackTrack", order: 'track_type ASC, position ASC, part ASC, instrument_id ASC'
has_many :jam_track_tap_ins, :class_name => "JamRuby::JamTrackTapIn", order: 'offset_time ASC'
has_many :jam_track_tracks, -> { order('track_type ASC, position ASC, part ASC, instrument_id ASC' )},:class_name => "JamRuby::JamTrackTrack"
has_many :jam_track_tap_ins, -> { order('offset_time ASC')}, :class_name => "JamRuby::JamTrackTapIn"
has_many :jam_track_files, :class_name => "JamRuby::JamTrackFile"
has_many :jam_track_rights, :class_name => "JamRuby::JamTrackRight" #, inverse_of: 'jam_track', :foreign_key => "jam_track_id" # '
@ -155,7 +155,7 @@ module JamRuby
if exceptions.keys.length == 0
self.update_column(:onboarding_exceptions, nil)
else
self.update_column(:onboarding_exceptions, exceptions.to_json)
self.update_column(:onboarding_exceptions, exceptions)
end
true
@ -323,7 +323,16 @@ module JamRuby
end
if options[:artist].present?
query = query.where("original_artist=?", options[:artist])
artist_param = options[:artist]
# todo: add licensor option
if artist_param == 'Stockton Helbing'
licensor = JamTrackLicensor.find_by_name('Stockton Helbing')
if licensor
query = query.where(licensor_id: licensor.id)
end
else
query = query.where("original_artist=?", options[:artist])
end
end
if options[:song].present?
@ -463,7 +472,7 @@ module JamRuby
def has_count_in?
has_count_in = false
if jmep_json
jmep = JSON.parse(jmep_json)
jmep = jmep_json
if jmep["Events"]
events = jmep["Events"]

View File

@ -11,7 +11,7 @@ module JamRuby
# look through all jam_track requests, and find the highest one that is associated with an approved harry fox requests
def self.find_max()
max = JamTrackHfaRequestId.select('coalesce(max(request_id), 0) as max').joins('INNER JOIN jam_track_hfa_requests ON jam_track_hfa_requests.id = jam_track_hfa_request_id').where('received_at IS NOT NULL').first()['max']
max = JamTrackHfaRequestId.select('coalesce(max(request_id), 0) as max').joins('INNER JOIN jam_track_hfa_requests ON jam_track_hfa_requests.id = jam_track_hfa_request_id').where('received_at IS NOT NULL')[0]['max']
max.to_i
end

View File

@ -7,7 +7,7 @@ module JamRuby
belongs_to :user, class_name: "JamRuby::User" # the owner, or purchaser of the jam_track
belongs_to :jam_track, class_name: "JamRuby::JamTrack"
has_many :jam_track_mixdown_packages, class_name: "JamRuby::JamTrackMixdownPackage", order: 'created_at DESC'
has_many :jam_track_mixdown_packages, -> { order('created_at desc') }, class_name: "JamRuby::JamTrackMixdownPackage"#, order: 'created_at DESC'
has_one :jam_track_right, class_name: 'JamRuby::JamTrackRight', foreign_key: 'last_mixdown_id', inverse_of: :last_mixdown
validates :name, presence: true, length: {maximum: 100}
@ -49,7 +49,8 @@ module JamRuby
# the user has to specify at least at least one tweak to volume, speed, pitch, pan. otherwise there is nothing to do
parsed = JSON.parse(self.settings)
#parsed = JSON.parse(self.settings)
parsed = self.settings
specified_track_count = parsed["tracks"] ? parsed["tracks"].length : 0
tweaked = false

View File

@ -40,7 +40,9 @@ module JamRuby
def self.estimated_queue_time
jam_track_signing_count = JamTrackRight.where(queued: true).count
mixdowns = JamTrackMixdownPackage.unscoped.select('count(CASE WHEN queued THEN 1 ELSE NULL END) as queue_count, count(CASE WHEN speed_pitched THEN 1 ELSE NULL END) as speed_pitch_count').where(queued: true).first
#mixdowns = JamTrackMixdownPackage.unscoped.select('count(CASE WHEN queued THEN 1 ELSE NULL END) as queue_count, count(CASE WHEN speed_pitched THEN 1 ELSE NULL END) as speed_pitch_count').where(queued: true).limit(1)
mixdowns = ActiveRecord::Base.connection.execute("select count(CASE WHEN queued THEN 1 ELSE NULL END) as queue_count, count(CASE WHEN speed_pitched THEN 1 ELSE NULL END) as speed_pitch_count FROM jam_track_mixdown_packages WHERE queued = true")[0]
total_mixdowns = mixdowns['queue_count'].to_i
slow_mixdowns = mixdowns['speed_pitch_count'].to_i
fast_mixdowns = total_mixdowns - slow_mixdowns

View File

@ -295,7 +295,7 @@ module JamRuby
@@log.debug("ignoring 'all' hash found in whitelist")
else
# can we find a jam track that belongs to someone else with the same fingerprint
conflict = MachineFingerprint.select('count(id) as count').where('user_id != ?', current_user.id).where(fingerprint: all_fingerprint).where(remote_ip: remote_ip).where('created_at > ?', APP_CONFIG.expire_fingerprint_days.days.ago).first
conflict = MachineFingerprint.select('count(id) as count').where('user_id != ?', current_user.id).where(fingerprint: all_fingerprint).where(remote_ip: remote_ip).where('created_at > ?', APP_CONFIG.expire_fingerprint_days.days.ago)[0]
conflict_count = conflict['count'].to_i
if conflict_count >= APP_CONFIG.found_conflict_count
@ -307,7 +307,7 @@ module JamRuby
AdminMailer.alerts(subject: "'All' fingerprint collision by #{current_user.name}",
body: "Current User: #{current_user.admin_url}\n\n Fraud Alert: #{fraud_admin_url}").deliver
body: "Current User: #{current_user.admin_url}\n\n Fraud Alert: #{fraud_admin_url}").deliver_now
# try to record the other fingerprint
mf = MachineFingerprint.create(running_fingerprint, current_user, MachineFingerprint::TAKEN_ON_FRAUD_CONFLICT, MachineFingerprint::PRINT_TYPE_ACTIVE, remote_ip, running_fingerprint_extra, self)
@ -331,7 +331,7 @@ module JamRuby
@@log.debug("ignoring 'running' hash found in whitelist")
else
conflict = MachineFingerprint.select('count(id) as count').where('user_id != ?', current_user.id).where(fingerprint: running_fingerprint).where(remote_ip: remote_ip).where('created_at > ?', APP_CONFIG.expire_fingerprint_days.days.ago).first
conflict = MachineFingerprint.select('count(id) as count').where('user_id != ?', current_user.id).where(fingerprint: running_fingerprint).where(remote_ip: remote_ip).where('created_at > ?', APP_CONFIG.expire_fingerprint_days.days.ago)[0]
conflict_count = conflict['count'].to_i
if conflict_count >= APP_CONFIG.found_conflict_count
mf = MachineFingerprint.create(running_fingerprint, current_user, MachineFingerprint::TAKEN_ON_FRAUD_CONFLICT, MachineFingerprint::PRINT_TYPE_ACTIVE, remote_ip, running_fingerprint_extra, self)
@ -340,7 +340,7 @@ module JamRuby
fraud = FraudAlert.create(mf, current_user) if mf.valid?
fraud_admin_url = fraud.admin_url if fraud
AdminMailer.alerts(subject: "'Running' fingerprint collision by #{current_user.name}",
body: "Current User: #{current_user.admin_url}\n\nFraud Alert: #{fraud_admin_url}").deliver\
body: "Current User: #{current_user.admin_url}\n\nFraud Alert: #{fraud_admin_url}").deliver_now
# try to record the other fingerprint
mf = MachineFingerprint.create(all_fingerprint, current_user, MachineFingerprint::TAKEN_ON_FRAUD_CONFLICT, MachineFingerprint::PRINT_TYPE_ALL, remote_ip, all_fingerprint_extra, self)
@ -376,7 +376,7 @@ module JamRuby
def self.stats
stats = {}
result = JamTrackRight.select('count(id) as total, count(CASE WHEN signing_44 THEN 1 ELSE NULL END) + count(CASE WHEN signing_48 THEN 1 ELSE NULL END) as signing_count, count(CASE WHEN redeemed THEN 1 ELSE NULL END) as redeem_count, count(last_downloaded_at) as redeemed_and_dl_count').where(is_test_purchase: false).first
result = JamTrackRight.select('count(id) as total, count(CASE WHEN signing_44 THEN 1 ELSE NULL END) + count(CASE WHEN signing_48 THEN 1 ELSE NULL END) as signing_count, count(CASE WHEN redeemed THEN 1 ELSE NULL END) as redeem_count, count(last_downloaded_at) as redeemed_and_dl_count').where(is_test_purchase: false)[0]
stats['count'] = result['total'].to_i
stats['signing_count'] = result['signing_count'].to_i

View File

@ -9,7 +9,6 @@ module JamRuby
has_many :users, class_name: 'JamRuby::User', through: :jamblasters_users
has_many :jamblaster_pairing_requests, class_name: "JamRuby::JamblasterPairingRequest", foreign_key: :jamblaster_id
belongs_to :connection, class_name: "JamRuby::Connection", foreign_key: "client_id"
validates :user, presence: true
validates :serial_no, uniqueness: true
validates :client_id, uniqueness: true
@ -25,6 +24,18 @@ module JamRuby
jamblaster_pairing_requests.where(active: true).first
end
def self.bootstrap(serialno)
jb = Jamblaster.find_by_serial_no(serialno)
if jb
return jb
end
jb = Jamblaster.new
jb.serial_no = serialno
jb.save
jb
end
class << self
@@mq_router = MQRouter.new

View File

@ -40,7 +40,7 @@ module JamRuby
# only the creator of the join request can do a get
# or a member of the music_session that the join_request is designated for
def self.show(id, user)
return JoinRequest.find(id, :conditions => ["user_id = ? OR music_session_id IN (select music_session_id from connections WHERE user_id = ?)", user.id, user.id])
return JoinRequest.where(["user_id = ? OR music_session_id IN (select music_session_id from connections WHERE user_id = ?)", user.id, user.id]).find(id)
end
end
end

View File

@ -2,7 +2,7 @@ module JamRuby
class JsonStore < ActiveRecord::Base
self.table_name = 'json_stores'
serialize :data_blob, JSON
#serialize :data_blob, JSON
before_create do
self.data_blob ||= {}

View File

@ -449,8 +449,8 @@ module JamRuby
end
def send_notices
UserMailer.student_lesson_request(self).deliver
UserMailer.teacher_lesson_request(self).deliver
UserMailer.student_lesson_request(self).deliver_now
UserMailer.teacher_lesson_request(self).deliver_now
Notification.send_lesson_message('requested', lesson_sessions[0], false) # TODO: this isn't quite an 'accept'
self.sent_notices = true
self.sent_notices_at = Time.now
@ -616,18 +616,18 @@ module JamRuby
# just tell both people it's cancelled, to act as confirmation
Notification.send_lesson_message('canceled', next_lesson, false)
Notification.send_lesson_message('canceled', next_lesson, true)
UserMailer.student_lesson_booking_canceled(self, message).deliver
UserMailer.teacher_lesson_booking_canceled(self, message).deliver
UserMailer.student_lesson_booking_canceled(self, message).deliver_now
UserMailer.teacher_lesson_booking_canceled(self, message).deliver_now
purpose = "Lesson Canceled"
else
if canceler == student
# if it's the first time acceptance student canceling, we call it a 'cancel'
Notification.send_lesson_message('canceled', next_lesson, false)
UserMailer.teacher_lesson_booking_canceled(self, message).deliver
UserMailer.teacher_lesson_booking_canceled(self, message).deliver_now
purpose = "Lesson Canceled"
else
# if it's the first time acceptance teacher, it was declined
UserMailer.student_lesson_booking_declined(self, message).deliver
UserMailer.student_lesson_booking_declined(self, message).deliver_now
Notification.send_lesson_message('declined', next_lesson, true)
purpose = "Lesson Declined"
end

View File

@ -39,12 +39,18 @@ module JamRuby
!lesson_session.nil?
end
# stupid way to inject a failure
def post_sale_test_failure
return true
end
def do_charge(force)
if is_lesson?
result = Sale.purchase_lesson(student, lesson_booking, lesson_booking.lesson_package_type, lesson_session)
result = Sale.purchase_lesson(self, student, lesson_booking, lesson_booking.lesson_package_type, lesson_session)
else
result = Sale.purchase_lesson(student, lesson_booking, lesson_booking.lesson_package_type, nil, lesson_package_purchase, force)
result = Sale.purchase_lesson(self, student, lesson_booking, lesson_booking.lesson_package_type, nil, lesson_package_purchase, force)
lesson_booking.unsuspend! if lesson_booking.is_suspended?
end
@ -55,6 +61,8 @@ module JamRuby
# update teacher distribution, because it's now ready to be given to them!
post_sale_test_failure
distribution = target.teacher_distribution
if distribution # not all lessons/payment charges have a distribution
distribution.ready = true
@ -66,11 +74,11 @@ module JamRuby
def do_send_notices
if is_lesson?
UserMailer.student_lesson_normal_done(lesson_session).deliver
UserMailer.teacher_lesson_normal_done(lesson_session).deliver
UserMailer.student_lesson_normal_done(lesson_session).deliver_now
UserMailer.teacher_lesson_normal_done(lesson_session).deliver_now
else
UserMailer.student_lesson_monthly_charged(lesson_package_purchase).deliver
UserMailer.teacher_lesson_monthly_charged(lesson_package_purchase).deliver
UserMailer.student_lesson_monthly_charged(lesson_package_purchase).deliver_now
UserMailer.teacher_lesson_monthly_charged(lesson_package_purchase).deliver_now
end
end

View File

@ -262,8 +262,8 @@ module JamRuby
end
def send_starting_notice
UserMailer.lesson_starting_soon_student(self).deliver!
UserMailer.lesson_starting_soon_teacher(self).deliver!
UserMailer.lesson_starting_soon_student(self).deliver_now
UserMailer.lesson_starting_soon_teacher(self).deliver_now
self.sent_starting_notice = true
self.save(validate: false)
@ -374,7 +374,7 @@ module JamRuby
if !sent_notices
# not in spec; just poke user and tell them we saw it was successfully completed
UserMailer.monthly_recurring_done(self).deliver
UserMailer.monthly_recurring_done(self).deliver_now
self.sent_notices = true
self.sent_notices_at = Time.now
@ -390,7 +390,7 @@ module JamRuby
if !sent_notices
if !school_on_school?
# bad session; just poke user
UserMailer.monthly_recurring_no_bill(self).deliver
UserMailer.monthly_recurring_no_bill(self).deliver_now
end
self.sent_notices = true
@ -401,11 +401,10 @@ module JamRuby
end
else
puts "STUDENT NO BILL SENT #{self.id}"
if !sent_notices
if !school_on_school?
# bad session; just poke user
UserMailer.student_lesson_normal_no_bill(self).deliver
UserMailer.student_lesson_normal_no_bill(self).deliver_now
end
self.sent_notices = true
@ -426,8 +425,8 @@ module JamRuby
if !sent_notices
if !school_on_school?
puts "STUDENT NO BILL SENT #{success}"
UserMailer.student_lesson_normal_no_bill(self).deliver
UserMailer.teacher_lesson_normal_no_bill(self).deliver
UserMailer.student_lesson_normal_no_bill(self).deliver_now
UserMailer.teacher_lesson_normal_no_bill(self).deliver_now
end
self.sent_notices = true
@ -455,9 +454,9 @@ module JamRuby
def send_counter(countered_lesson, countered_slot)
if !lesson_booking.errors.any?
if countered_slot.is_teacher_created?
UserMailer.student_lesson_counter(countered_lesson, countered_slot).deliver
UserMailer.student_lesson_counter(countered_lesson, countered_slot).deliver_now
else
UserMailer.teacher_lesson_counter(countered_lesson, countered_slot).deliver
UserMailer.teacher_lesson_counter(countered_lesson, countered_slot).deliver_now
end
end
self.countering = false
@ -490,7 +489,7 @@ module JamRuby
end
def analysis_json
@parsed_analysis || analysis ? JSON.parse(analysis) : nil
@parsed_analysis || analysis
end
def validate_creating
@ -725,6 +724,7 @@ module JamRuby
message = params[:message]
slot = params[:slot]
accepter = params[:accepter]
raise "LessonBookingSlot" if slot.is_a?(LessonBookingSlot)
self.slot = slot = LessonBookingSlot.find(slot)
self.slot.accept_message = message
self.slot.save!
@ -744,8 +744,8 @@ module JamRuby
response = lesson_booking
raise ActiveRecord::Rollback
end
UserMailer.student_lesson_accepted(self, message, slot).deliver
UserMailer.teacher_lesson_accepted(self, message, slot).deliver
UserMailer.student_lesson_accepted(self, message, slot).deliver_now
UserMailer.teacher_lesson_accepted(self, message, slot).deliver_now
message = '' if message.nil?
msg = ChatMessage.create(teacher, nil, message, ChatMessage::CHANNEL_LESSON, nil, student, self, "Lesson Approved")
Notification.send_jamclass_invitation_teacher(music_session, teacher)
@ -770,8 +770,8 @@ module JamRuby
message = '' if message.nil?
msg = ChatMessage.create(slot.proposer, nil, message, ChatMessage::CHANNEL_LESSON, nil, slot.recipient, self, "All Lesson Times Updated")
Notification.send_lesson_message('accept', self, true) # TODO: this isn't quite an 'accept'
UserMailer.student_lesson_update_all(self, message, slot).deliver
UserMailer.teacher_lesson_update_all(self, message, slot).deliver
UserMailer.student_lesson_update_all(self, message, slot).deliver_now
UserMailer.teacher_lesson_update_all(self, message, slot).deliver_now
else
# nothing to do with the original booking (since we are not changing all times), so we update just ourself
time = update_next_available_time # XXX: week offset as 0? This *could* still be in the past. But the user is approving it. So do we just trust them and get out of their way?
@ -783,8 +783,8 @@ module JamRuby
end
message = '' if message.nil?
msg = ChatMessage.create(slot.proposer, nil, message, ChatMessage::CHANNEL_LESSON, nil, slot.recipient, self, "Lesson Updated Time Approved")
UserMailer.student_lesson_accepted(self, message, slot).deliver
UserMailer.teacher_lesson_accepted(self, message, slot).deliver
UserMailer.student_lesson_accepted(self, message, slot).deliver_now
UserMailer.teacher_lesson_accepted(self, message, slot).deliver_now
end
else
@@log.error("unable to accept slot #{slot.id} for lesson #{self.id} #{errors.inspect}")
@ -820,9 +820,11 @@ module JamRuby
self.counter_slot = slot
#end
if self.save
puts "SAVING OK"
#if update_all && !lesson_booking.counter(self, proposer, slot)
if !lesson_booking.counter(self, proposer, slot)
response = lesson_booking
puts "ROLLBACK"
raise ActiveRecord::Rollback
end
else
@ -923,8 +925,8 @@ module JamRuby
msg = ChatMessage.create(canceler, nil, message, ChatMessage::CHANNEL_LESSON, nil, other, self, "Lesson Canceled")
Notification.send_lesson_message('canceled', self, false)
Notification.send_lesson_message('canceled', self, true)
UserMailer.student_lesson_canceled(self, message).deliver
UserMailer.teacher_lesson_canceled(self, message).deliver
UserMailer.student_lesson_canceled(self, message).deliver_now
UserMailer.teacher_lesson_canceled(self, message).deliver_now
end
end
@ -932,7 +934,7 @@ module JamRuby
end
def description(lesson_booking)
lesson_booking.lesson_package_type.description(lesson_booking)
lesson_booking.lesson_package_type.description(lesson_booking) + " with #{teacher.admin_name}"
end
def timed_description

View File

@ -56,7 +56,7 @@ module JamRuby
#dmacode = row[8]
#areacode = row[9]
vals = vals+sep+"(#{quote_value(country)},#{quote_value(region)},#{quote_value(city)},#{lat},#{lng},#{ip_start},#{ip_end})"
vals = vals+sep+"(#{quote_value(country, nil)},#{quote_value(region, nil)},#{quote_value(city, nil)},#{lat},#{lng},#{ip_start},#{ip_end})"
sep = ','
i += 1

View File

@ -57,7 +57,7 @@ module JamRuby
country = row[2]
isp = row[3]
vals = vals+sep+"(#{ip_bottom}, #{ip_top}, '#{country}', #{quote_value(isp)})"
vals = vals+sep+"(#{ip_bottom}, #{ip_top}, '#{country}', #{quote_value(isp, nil)})"
sep = ','
i += 1

View File

@ -144,7 +144,7 @@ module JamRuby
was_jamtrack_played = false
if recording.timeline
recording_timeline_data = JSON.parse(recording.timeline)
recording_timeline_data = recording.timeline
# did the jam track play at all?
jam_track_isplaying = recording_timeline_data["jam_track_isplaying"]
@ -232,7 +232,7 @@ module JamRuby
level = 1.0 # default value - means no effect
if recorded_jam_track_track.timeline
timeline_data = JSON.parse(recorded_jam_track_track.timeline)
timeline_data = recorded_jam_track_track.timeline
# always take the 1st entry for now
first = timeline_data[0]

View File

@ -122,7 +122,7 @@ module JamRuby
new_session.session_controller = self.session_controller
# copy rsvp_slots, rsvp_requests, and rsvp_requests_rsvp_slots
RsvpSlot.find_each(:conditions => "music_session_id = '#{self.id}'") do |slot|
RsvpSlot.where("music_session_id = '#{self.id}'").find_each do |slot|
new_slot = RsvpSlot.new
new_slot.instrument_id = slot.instrument_id
new_slot.proficiency_level = slot.proficiency_level
@ -170,7 +170,7 @@ module JamRuby
end
# copy music_notations
MusicNotation.find_each(:conditions => "music_session_id = '#{self.id}'") do |notation|
MusicNotation.where("music_session_id = '#{self.id}'").find_each do |notation|
new_notation = MusicNotation.new
new_notation.user_id = notation.user_id
new_notation.music_session = new_session
@ -240,14 +240,14 @@ module JamRuby
if self.musician_access
if self.approval_required
return self.invited_musicians.exists?(user) || self.approved_rsvps.include?(user)
return self.invited_musicians.exists?(user.id) || self.approved_rsvps.include?(user)
else
return true
end
else
# the creator can always join, and the invited users can join
return self.creator == user || self.invited_musicians.exists?(user) || self.approved_rsvps.include?(user)
return self.creator == user || self.invited_musicians.exists?(user.id) || self.approved_rsvps.include?(user)
end
else
# it's a fan, and the only way a fan can join is if fan_access is true
@ -259,7 +259,7 @@ module JamRuby
if self.musician_access || self.fan_access
true
else
self.creator == user || self.invited_musicians.exists?(user)
self.creator == user || self.invited_musicians.exists?(user.id)
end
end
@ -528,7 +528,7 @@ module JamRuby
# which means are currently in the music_session, or, rsvp'ed, or creator
def part_of_session? user
# XXX check RSVP'ed
user == self.creator || (active_music_session ? active_music_session.users.exists?(user) : false)
user == self.creator || (active_music_session ? active_music_session.users.exists?(user.id) : false)
end
def is_over?
@ -644,7 +644,7 @@ module JamRuby
# retrieve users that have invitations but have not submitted an RSVP request for this session
def pending_invitations
User.find_by_sql(%Q{select distinct u.id, u.email, u.photo_url, u.first_name, u.last_name
User.find_by_sql(%Q{select distinct u.id, u.email, u.photo_url, u.first_name, u.last_name, u.online
from users u
inner join invitations i on u.id = i.receiver_id
left join rsvp_requests rr on rr.user_id = i.receiver_id
@ -876,6 +876,7 @@ SQL
timezone = ActiveSupport::TimeZone.new(tz_identifier)
rescue Exception => e
@@log.error("unable to find timezone=#{tz_identifier}, e=#{e}")
puts "unable to find timezone=#{tz_identifier}, e=#{e}"
end
if timezone
@ -942,16 +943,10 @@ SQL
end
def safe_scheduled_duration
duration = scheduled_duration
duration = scheduled_duration
# you can put seconds into the scheduled_duration field, but once stored, it comes back out as a string
if scheduled_duration.class == String
begin
bits = scheduled_duration.split(':')
duration = bits[0].to_i.hours + bits[1].to_i.minutes + bits[2].to_i.seconds
rescue Exception => e
duration = 1.hours
@@log.error("unable to parse duration #{scheduled_duration}")
end
duration = scheduled_duration.to_i.seconds
end
duration
end

View File

@ -7,7 +7,7 @@ module JamRuby
self.primary_key = 'id'
default_scope order('created_at DESC')
default_scope { order('created_at DESC') }
belongs_to(:music_session,
:class_name => "JamRuby::MusicSession",

View File

@ -5,7 +5,7 @@ module JamRuby
self.primary_key = 'id'
default_scope order('user_id ASC')
default_scope { order('user_id ASC') }
attr_accessible :max_concurrent_connections, :session_removed_at, :rating
validates_inclusion_of :rating, :in => -1..1, :allow_nil => true
@ -140,7 +140,7 @@ module JamRuby
MIN_SESSION_DURATION_RATING = 60
def should_rate_session?
(2 <= music_session.unique_users.all.count &&
(2 <= music_session.unique_users.length &&
MIN_SESSION_DURATION_RATING < (Time.now - music_session.created_at).seconds) ||
Rails.env.development?
end

View File

@ -6,7 +6,7 @@ module JamRuby
self.primary_key = 'id'
# ensure most proficient, highest priority
default_scope order('proficiency_level DESC, priority ASC')
default_scope { order('proficiency_level DESC, priority ASC') }
# proficiency is 1 = Beginner, 2 = Intermediate, 3 = Expert

View File

@ -6,7 +6,7 @@ module JamRuby
self.primary_key = 'id'
default_scope order('created_at DESC')
default_scope { order('created_at DESC') }
belongs_to :target_user, :class_name => "JamRuby::User", :foreign_key => "target_user_id"
belongs_to :source_user, :class_name => "JamRuby::User", :foreign_key => "source_user_id"
@ -335,7 +335,7 @@ module JamRuby
@@mq_router.publish_to_user(friend_id, msg)
else
begin
UserMailer.friend_request(friend, notification_msg, friend_request_id).deliver
UserMailer.friend_request(friend, notification_msg, friend_request_id).deliver_now
rescue => e
@@log.error("Unable to send FRIEND_REQUEST email to offline user #{friend.email} #{e}")
end
@ -355,7 +355,7 @@ module JamRuby
notification_msg = format_msg(notification.description, {:user => friend})
if user.online
if user.online?
msg = @@message_factory.friend_request_accepted(
user.id,
friend.photo_url,
@ -368,7 +368,7 @@ module JamRuby
else
begin
UserMailer.friend_request_accepted(user, notification_msg).deliver
UserMailer.friend_request_accepted(user, notification_msg).deliver_now
rescue => e
@@log.error("Unable to send FRIEND_REQUEST_ACCEPTED email to offline user #{user.email} #{e}")
end
@ -386,7 +386,7 @@ module JamRuby
notification_msg = format_msg(notification.description, {:user => follower})
if follower.id != user.id
if user.online
if user.online?
msg = @@message_factory.new_user_follower(
user.id,
follower.photo_url,
@ -399,7 +399,7 @@ module JamRuby
else
begin
UserMailer.new_user_follower(user, notification_msg).deliver
UserMailer.new_user_follower(user, notification_msg).deliver_now
rescue => e
@@log.error("Unable to send NEW_USER_FOLLOWER email to offline user #{user.email} #{e}")
end
@ -466,7 +466,7 @@ module JamRuby
# this protects against sending the notification to a band member who decides to follow the band
if follower.id != bm.user.id
if bm.user.online
if bm.user.online?
msg = @@message_factory.new_band_follower(
bm.user_id,
@ -480,7 +480,7 @@ module JamRuby
else
begin
UserMailer.new_band_follower(bm.user, notification_msg).deliver
UserMailer.new_band_follower(bm.user, notification_msg).deliver_now
rescue => e
@@log.error("Unable to send NEW_BAND_FOLLOWER email to offline user #{bm.user.email} #{e}")
end
@ -500,7 +500,7 @@ module JamRuby
notification_msg = format_msg(NotificationTypes::SESSION_INVITATION, {:user => sender})
if receiver.online
if receiver.online?
msg = @@message_factory.session_invitation(
receiver.id,
session_id,
@ -513,7 +513,7 @@ module JamRuby
else
begin
UserMailer.session_invitation(receiver, notification_msg).deliver
UserMailer.session_invitation(receiver, notification_msg).deliver_now
rescue => e
@@log.error("Unable to send SESSION_INVITATION email to user #{receiver.email} #{e}")
end
@ -696,7 +696,7 @@ module JamRuby
notification.session_id = music_session.id
notification.save
if ff.online
if ff.online?
msg = @@message_factory.musician_session_join(
ff.id,
music_session.id,
@ -714,7 +714,7 @@ module JamRuby
else
# if APP_CONFIG.send_join_session_email_notifications
# begin
# UserMailer.musician_session_join(ff, notification_msg, music_session.id).deliver
# UserMailer.musician_session_join(ff, notification_msg, music_session.id).deliver_now
# rescue => e
# @@log.error("Unable to send MUSICIAN_SESSION_JOIN email to user #{ff.email} #{e}")
# end
@ -742,8 +742,6 @@ module JamRuby
#notification.message = notification_msg
notification.save
if target_user.online
msg = @@message_factory.scheduled_jamclass_invitation(
target_user.id,
@ -761,7 +759,7 @@ module JamRuby
end
begin
#UserMailer.teacher_scheduled_jamclass_invitation(music_session.lesson_session.teacher, notification_msg, music_session).deliver
#UserMailer.teacher_scheduled_jamclass_invitation(music_session.lesson_session.teacher, notification_msg, music_session).deliver_now
rescue => e
@@log.error("Unable to send SCHEDULED_JAMCLASS_INVITATION email to user #{music_session.lesson_session.teacher.email} #{e}")
end
@ -801,7 +799,7 @@ module JamRuby
end
begin
#UserMailer.student_scheduled_jamclass_invitation(student, notification_msg, music_session).deliver
#UserMailer.student_scheduled_jamclass_invitation(student, notification_msg, music_session).deliver_now
rescue => e
@@log.error("Unable to send SCHEDULED_JAMCLASS_INVITATION email to user #{student.email} #{e}")
end
@ -841,7 +839,7 @@ module JamRuby
end
begin
UserMailer.scheduled_session_invitation(target_user, notification_msg, music_session).deliver
UserMailer.scheduled_session_invitation(target_user, notification_msg, music_session).deliver_now
rescue => e
@@log.error("Unable to send SCHEDULED_SESSION_INVITATION email to user #{target_user.email} #{e}")
end
@ -867,7 +865,8 @@ module JamRuby
notification_msg = format_msg(notification.description, {:user => source_user, :session => music_session})
if target_user.online
if target_user.online?
puts "ONLINE"
msg = @@message_factory.scheduled_session_rsvp(
target_user.id,
music_session.id,
@ -885,7 +884,7 @@ module JamRuby
end
begin
UserMailer.scheduled_session_rsvp(target_user, notification_msg, music_session).deliver
UserMailer.scheduled_session_rsvp(target_user, notification_msg, music_session).deliver_now
rescue => e
@@log.error("Unable to send SCHEDULED_SESSION_RSVP email to user #{target_user.email} #{e}")
end
@ -911,7 +910,7 @@ module JamRuby
notification_msg = format_msg(notification.description, {:session => music_session})
if target_user.online
if target_user.online?
msg = @@message_factory.scheduled_session_rsvp_approved(
target_user.id,
music_session.id,
@ -926,7 +925,7 @@ module JamRuby
end
begin
UserMailer.scheduled_session_rsvp_approved(target_user, notification_msg, music_session).deliver
UserMailer.scheduled_session_rsvp_approved(target_user, notification_msg, music_session).deliver_now
rescue => e
@@log.error("Unable to send SCHEDULED_SESSION_RSVP_APPROVED email to user #{target_user.email} #{e}")
end
@ -948,7 +947,7 @@ module JamRuby
notification_msg = format_msg(notification.description, {:session => music_session})
if target_user.online
if target_user.online?
msg = @@message_factory.scheduled_session_rsvp_cancelled(
target_user.id,
music_session.id,
@ -963,7 +962,7 @@ module JamRuby
end
begin
UserMailer.scheduled_session_rsvp_cancelled(target_user, notification_msg, music_session).deliver
UserMailer.scheduled_session_rsvp_cancelled(target_user, notification_msg, music_session).deliver_now
rescue => e
@@log.error("Unable to send SCHEDULED_SESSION_RSVP_CANCELLED email to user #{target_user.email} #{e}")
end
@ -985,7 +984,7 @@ module JamRuby
notification_msg = format_msg(notification.description, {:session => music_session})
if target_user.online
if target_user.online?
msg = @@message_factory.scheduled_session_rsvp_cancelled_org(
target_user.id,
music_session.id,
@ -1000,7 +999,7 @@ module JamRuby
end
begin
UserMailer.scheduled_session_rsvp_cancelled_org(target_user, notification_msg, music_session).deliver
UserMailer.scheduled_session_rsvp_cancelled_org(target_user, notification_msg, music_session).deliver_now
rescue => e
@@log.error("Unable to send SCHEDULED_SESSION_RSVP_CANCELLED_ORG email to user #{target_user.email} #{e}")
end
@ -1028,7 +1027,7 @@ module JamRuby
notification_msg = format_msg(notification.description, {:session => music_session})
if target_user.online
if target_user.online?
msg = @@message_factory.scheduled_session_cancelled(
target_user.id,
music_session.id,
@ -1043,7 +1042,7 @@ module JamRuby
end
begin
UserMailer.scheduled_session_cancelled(target_user, notification_msg, music_session).deliver
UserMailer.scheduled_session_cancelled(target_user, notification_msg, music_session).deliver_now
rescue => e
@@log.error("Unable to send SCHEDULED_SESSION_CANCELLED email to user #{target_user.email} #{e}")
end
@ -1073,7 +1072,7 @@ module JamRuby
notification_msg = format_msg(notification.description, {:session => music_session})
if target_user.online
if target_user.online?
msg = @@message_factory.scheduled_session_rescheduled(
target_user.id,
music_session.id,
@ -1088,7 +1087,7 @@ module JamRuby
end
begin
UserMailer.scheduled_session_rescheduled(target_user, notification_msg, music_session).deliver
UserMailer.scheduled_session_rescheduled(target_user, notification_msg, music_session).deliver_now
rescue => e
@@log.error("Unable to send SCHEDULED_SESSION_RESCHEDULED email to offline user #{target_user.email} #{e}")
end
@ -1117,7 +1116,7 @@ module JamRuby
def send_session_reminder_day(music_session)
send_session_reminder(music_session, NotificationTypes::SCHEDULED_SESSION_REMINDER_DAY) do |music_session, target_user, notification|
begin
UserMailer.scheduled_session_reminder_day(target_user, music_session).deliver
UserMailer.scheduled_session_reminder_day(target_user, music_session).deliver_now
rescue => e
@@log.error("Unable to send SCHEDULED_SESSION_REMINDER_DAY email to user #{target_user.email} #{e}")
end
@ -1127,7 +1126,7 @@ module JamRuby
def send_session_reminder_upcoming(music_session)
send_session_reminder(music_session, NotificationTypes::SCHEDULED_SESSION_REMINDER_UPCOMING) do |music_session, target_user, notification|
begin
UserMailer.scheduled_session_reminder_upcoming(target_user, music_session).deliver
UserMailer.scheduled_session_reminder_upcoming(target_user, music_session).deliver_now
rescue => e
@@log.error("Unable to send SCHEDULED_SESSION_REMINDER_UPCOMING email to user #{target_user.email} #{e}")
end
@ -1136,7 +1135,7 @@ module JamRuby
def send_session_reminder_imminent(music_session)
send_session_reminder(music_session, NotificationTypes::SCHEDULED_SESSION_REMINDER_IMMINENT) do |music_session, target_user, notification|
if target_user.online
if target_user.online?
msg = @@message_factory.scheduled_session_reminder(
target_user.id,
music_session.id,
@ -1196,7 +1195,7 @@ module JamRuby
notification_msg = format_msg(notification.description, {:session => music_session})
if target_user.online
if target_user.online?
msg = @@message_factory.scheduled_session_comment(
target_user.id,
music_session.id,
@ -1213,7 +1212,7 @@ module JamRuby
end
begin
UserMailer.scheduled_session_comment(target_user, source_user, notification_msg, comment, music_session).deliver
UserMailer.scheduled_session_comment(target_user, source_user, notification_msg, comment, music_session).deliver_now
rescue => e
@@log.error("Unable to send SCHEDULED_SESSION_COMMENT email to user #{target_user.email} #{e}")
end
@ -1241,7 +1240,7 @@ module JamRuby
notification.session_id = music_session.id
notification.save
if follower.online
if follower.online?
msg = @@message_factory.band_session_join(
follower.id,
music_session.id,
@ -1258,7 +1257,7 @@ module JamRuby
else
if music_session.fan_access && APP_CONFIG.send_join_session_email_notifications
begin
UserMailer.band_session_join(follower, notification_msg, music_session.id).deliver
UserMailer.band_session_join(follower, notification_msg, music_session.id).deliver_now
rescue => e
@@log.error("Unable to send BAND_SESSION_JOIN email to user #{follower.email} #{e}")
end
@ -1290,7 +1289,7 @@ module JamRuby
notification.recording_id = recording.id
notification.save
if ff.online
if ff.online?
msg = @@message_factory.musician_recording_saved(
ff.id,
recording.id,
@ -1303,7 +1302,7 @@ module JamRuby
@@mq_router.publish_to_user(ff.id, notification_msg)
else
begin
UserMailer.musician_recording_saved(ff, notification_msg).deliver
UserMailer.musician_recording_saved(ff, notification_msg).deliver_now
rescue => e
@@log.error("Unable to send MUSICIAN_RECORDING_SAVED email to user #{ff.email} #{e}")
end
@ -1325,7 +1324,7 @@ module JamRuby
notification.recording_id = recording.id
notification.save
if follower.online
if follower.online?
msg = @@message_factory.band_recording_saved(
follower.id,
recording.id,
@ -1338,7 +1337,7 @@ module JamRuby
@@mq_router.publish_to_user(follower.id, notification_msg)
else
begin
UserMailer.band_recording_saved(follower, notification_msg).deliver
UserMailer.band_recording_saved(follower, notification_msg).deliver_now
rescue => e
@@log.error("Unable to send BAND_RECORDING_SAVED email to user #{follower.email} #{e}")
end
@ -1528,7 +1527,7 @@ module JamRuby
notification.source_user_id = sender.id
notification.target_user_id = receiver.id if receiver
if notification.save
if receiver.online
if receiver.online?
clip_at = 200
msg_is_clipped = message.length > clip_at
truncated_msg = message[0..clip_at - 1]
@ -1546,7 +1545,7 @@ module JamRuby
else
begin
UserMailer.text_message(receiver, sender.id, sender.name, sender.resolved_photo_url, message).deliver
UserMailer.text_message(receiver, sender.id, sender.name, sender.resolved_photo_url, message).deliver_now
rescue => e
@@log.error("Unable to send TEXT_MESSAGE email to user #{receiver.email} #{e}")
end
@ -1568,7 +1567,7 @@ module JamRuby
notification_msg = format_msg(notification.description, {:band => band})
if receiver.online
if receiver.online?
msg = @@message_factory.band_invitation(
receiver.id,
band_invitation.id,
@ -1583,7 +1582,7 @@ module JamRuby
else
begin
UserMailer.band_invitation(receiver, notification_msg).deliver
UserMailer.band_invitation(receiver, notification_msg).deliver_now
rescue => e
@@log.error("Unable to send BAND_INVITATION email to offline user #{receiver.email} #{e}")
end
@ -1601,7 +1600,7 @@ module JamRuby
notification_msg = format_msg(notification.description, {:user => sender, :band => band})
if receiver.online
if receiver.online?
msg = @@message_factory.band_invitation_accepted(
receiver.id,
band_invitation.id,
@ -1614,7 +1613,7 @@ module JamRuby
else
begin
UserMailer.band_invitation_accepted(receiver, notification_msg).deliver
UserMailer.band_invitation_accepted(receiver, notification_msg).deliver_now
rescue => e
@@log.error("Unable to send BAND_INVITATION_ACCEPTED email to offline user #{receiver.email} #{e}")
end

View File

@ -1,7 +1,7 @@
class JamRuby::Promotional < ActiveRecord::Base
self.table_name = :promotionals
default_scope :order => 'aasm_state ASC, position ASC, updated_at DESC'
default_scope { order('aasm_state ASC, position ASC, updated_at DESC') }
attr_accessible :position, :aasm_state

View File

@ -124,7 +124,7 @@ module JamRuby
def increment_part_failures(part_failure_before_error)
self.part_failures = part_failure_before_error + 1
QuickMix.update_all("part_failures = #{self.part_failures}", "id = '#{self.id}'")
QuickMix.update_all({"part_failures" => self.part_failures, "id" => self.id})
end
def self.create(recording, user)
@ -135,7 +135,7 @@ module JamRuby
mix.recording = recording
mix.user = user
mix.save
mix[:ogg_url] = construct_filename(mix.created_at, recording.id, mix.id, type='ogg')
mix[:ogg_url] = construct_filename(mix.created_at, recording.id, mix.id, mix.default_type)
mix[:mp3_url] = construct_filename(mix.created_at, recording.id, mix.id, type='mp3')
mix.save
mix.is_skip_mount_uploader = false
@ -205,8 +205,10 @@ module JamRuby
end
end
def s3_url(type='ogg')
if type == 'ogg'
def s3_url(type=default_type)
if type == 'aac'
s3_manager.s3_url(self[:ogg_url])
elsif type == 'ogg'
s3_manager.s3_url(self[:ogg_url])
else
s3_manager.s3_url(self[:mp3_url])
@ -222,10 +224,12 @@ module JamRuby
self[url_field].start_with?('http') ? self[url_field] : s3_manager.sign_url(self[url_field], {:expires => expiration_time, :response_content_type => mime_type, :secure => true})
end
def sign_url(expiration_time = 120, type='ogg')
def sign_url(expiration_time = 120, type=default_type)
type ||= 'ogg'
# expire link in 1 minute--the expectation is that a client is immediately following this link
if type == 'ogg'
if type == 'aac'
resolve_url(:ogg_url, 'audio/aac', expiration_time)
elsif type == 'ogg'
resolve_url(:ogg_url, 'audio/ogg', expiration_time)
else
resolve_url(:mp3_url, 'audio/mpeg', expiration_time)
@ -233,9 +237,11 @@ module JamRuby
end
# this is not 'secure' because, in testing, the PUT failed often in Ruby. should investigate more.
def sign_put(expiration_time = 3600 * 24, type='ogg')
def sign_put(expiration_time = 3600 * 24, type=default_type)
type ||= 'ogg'
if type == 'ogg'
if type == 'aac'
s3_manager.sign_url(self[:ogg_url], {:expires => expiration_time, :content_type => 'audio/aac', :secure => false}, :put)
elsif type == 'ogg'
s3_manager.sign_url(self[:ogg_url], {:expires => expiration_time, :content_type => 'audio/ogg', :secure => false}, :put)
else
s3_manager.sign_url(self[:mp3_url], {:expires => expiration_time, :content_type => 'audio/mpeg', :secure => false}, :put)
@ -258,19 +264,25 @@ module JamRuby
end
end
def filename(type='ogg')
def default_type
recording.immediate ? 'aac' : 'ogg'
end
def filename(type=default_type)
# construct a path for s3
QuickMix.construct_filename(self.created_at, self.recording_id, self.id, type)
end
def delete_s3_files
s3_manager.delete(filename(type='ogg')) if self[:ogg_url] && s3_manager.exists?(filename(type='ogg'))
s3_manager.delete(filename(type='mp3')) if self[:mp3_url] && s3_manager.exists?(filename(type='mp3'))
s3_manager.delete(filename(type=default_type)) if self[:ogg_url] && s3_manager.exists?(filename(type=default_type))
s3_manager.delete(filename(type='mp3')) if self[:mp3_url] && s3_manager.exists?(filename(type=default_type))
end
def self.construct_filename(created_at, recording_id, id, type='ogg')
raise "unknown ID" unless id
"recordings/#{created_at.strftime('%m-%d-%Y')}/#{recording_id}/stream-mix-#{id}.#{type}"
end
end
end

View File

@ -162,7 +162,7 @@ module JamRuby
def increment_part_failures(part_failure_before_error)
self.part_failures = part_failure_before_error + 1
RecordedBackingTrack.update_all("part_failures = #{self.part_failures}", "id = '#{self.id}'")
RecordedBackingTrack.update_all({"part_failures" => self.part_failures, "id" => self.id })
end
def stored_filename

Some files were not shown because too many files have changed in this diff Show More