diff --git a/ruby/bin/jamtrack.rb b/ruby/bin/jamtrack.rb old mode 100644 new mode 100755 diff --git a/ruby/lib/jam_ruby/jam_tracks_manager.rb b/ruby/lib/jam_ruby/jam_tracks_manager.rb index 07b264df0..1c4b481aa 100644 --- a/ruby/lib/jam_ruby/jam_tracks_manager.rb +++ b/ruby/lib/jam_ruby/jam_tracks_manager.rb @@ -1,20 +1,36 @@ +require 'json' +require 'tempfile' +require 'open3' + module JamRuby - # describes an audio track (like the drums, or guitar) that comprises a JamTrack + # Interact with external python tools to create the JKZ class JamTracksManager class << self - def save_jam_track(jam_track, user) - spec = Gem::Specification.find_by_name("jam_ruby") - py_root = spec.gem_dir + "/lib/py/jam_tracks/" - puts "Executing python in #{py_root}" + def save_jam_track_jkz(user, jam_track) + py_root = File.expand_path(File.join("..", "..", "jamtracks")) + tmp_dir = Dir::Tmpname.make_tmpname("/tmp/jamtrack", nil) + puts "Executing python in #{py_root}, outputting to #{tmp_dir}" + - sku=""#jam_track.sku - public_key="" - private_key="" - tracks_filename="" - output_jkz="" - title="" - `python #{py_root}jkcreate.py -D -k #{sku} -c art.png -p #{public_key} -s #{private_key} -I #{tracks_filename} -o #{output_jkz} -t '#{title}'` + sku=jam_track.id + tracks_filename=tmp_dir + "/jamtrack.info" + output_jkz="tmp_dir/#{jam_track.name.tableize}.jkz" + title=jam_track.name + + # From http://stackoverflow.com/questions/690151/getting-output-of-system-calls-in-ruby/5970819#5970819: + #Open3.popen3("ls") do |stdin, stdout, stderr, wait_thr| + Open3.popen3("python", + "#{py_root}/jkcreate.py", + "-D -k #{sku} -c art.png -p #{tmp_dir}/pkey.pem -s #{tmp_dir}/skey.pem -I #{tracks_filename} -o #{output_jkz} -t '#{title}'" + ) do |stdin, stdout, stderr, wait_thr| + pid = wait_thr.pid + exit_status = wait_thr.value + err = stderr.read(1000) + raise ArgumentError, "Error calling python script: #{err}" if err.present? + end + + tmp_dir end end end diff --git a/ruby/spec/jam_ruby/models/jam_track_right_spec.rb b/ruby/spec/jam_ruby/models/jam_track_right_spec.rb index 5d136d62a..1df21358f 100644 --- a/ruby/spec/jam_ruby/models/jam_track_right_spec.rb +++ b/ruby/spec/jam_ruby/models/jam_track_right_spec.rb @@ -27,5 +27,15 @@ describe JamTrackRight do right_2.errors[:user_id].should == ['has already been taken'] end end + + it "saves JKZ" do + user = FactoryGirl.create(:user) + jam_track = FactoryGirl.create(:jam_track) + right = JamTrackRight.create(:user=>user, :jam_track=>jam_track) + expect { + JamRuby::JamTracksManager.save_jam_track_jkz(user, jam_track) + }.to_not raise_error + end + end