examples/api-samples/samples/sample18.rb in groupdocs-1.5.0 vs examples/api-samples/samples/sample18.rb in groupdocs-1.5.1

- old
+ new

@@ -1,173 +1,157 @@ # GET request get '/sample18' do haml :sample18 end -post '/sample18/test_callback' do - downloads_path = "#{File.dirname(__FILE__)}/../public/downloads" - unless File.directory?(downloads_path) - Dir::mkdir(downloads_path) - else - Dir.foreach(downloads_path) {|f| fn = File.join(downloads_path, f); File.delete(fn) if f != '.' && f != '..'} - end - - SourceId = nil - client_key = nil - private_key = nil - - data = JSON.parse(request.body.read) - data.each do |key, value| - if key == 'SourceId' - SourceId = value - end - end - - if File.exist?("#{File.dirname(__FILE__)}/../public/user_info.txt") - contents = File.read("#{File.dirname(__FILE__)}/../public/user_info.txt") - contents = contents.split(' ') - client_key = contents.first - private_key = contents.last - end - - outFile = File.new("#{File.dirname(__FILE__)}/../public/downloads/signed", "w") - outFile.write("private_key: #{private_key} \n") - outFile.write("client_key: #{client_key} \n") - outFile.write("SourceId: #{SourceId} \n") - outFile.close - - job = GroupDocs::Job.new({:id=>SourceId}) - documents = job.documents!({:client_id => client_key, :private_key => private_key}) - tttt = documents[:inputs].first.file.download!(downloads_path, {:client_id => client_key, :private_key => private_key}) - - outFile = File.new("#{File.dirname(__FILE__)}/../public/downloads/t", "w") - outFile.write("documents: #{documents} \n") - outFile.write("tttt: #{tttt} \n") - outFile.close -end - -# GET request to check if envelop was signed -get '/sample18/test_check' do - if File.exist?("#{File.dirname(__FILE__)}/../public/downloads/signed") - File.readlines("#{File.dirname(__FILE__)}/../public/downloads/signed").each do |line| - end - else - 'not yet' - end -end - -# +# POST request post '/sample18/convert_callback' do + # Set download path downloads_path = "#{File.dirname(__FILE__)}/../public/downloads" - unless File.directory?(downloads_path) - Dir::mkdir(downloads_path) - else - Dir.foreach(downloads_path) {|f| fn = File.join(downloads_path, f); File.delete(fn) if f != '.' && f != '..'} - end - + + # Get callback request data = JSON.parse(request.body.read) begin - raise "Empty params!" if data.empty? - SourceId = nil - client_key = nil + raise 'Empty params!' if data.empty? + source_id = nil + client_id = nil private_key = nil - + # Get value of SourceId data.each do |key, value| if key == 'SourceId' - SourceId = value + source_id = value end end + # Get private key and client_id from file user_info.txt if File.exist?("#{File.dirname(__FILE__)}/../public/user_info.txt") contents = File.read("#{File.dirname(__FILE__)}/../public/user_info.txt") contents = contents.split(' ') - client_key = contents.first + client_id = contents.first private_key = contents.last end - job = GroupDocs::Job.new({:id=>SourceId}) - documents = job.documents!({:client_id => client_key, :private_key => private_key}) - documents[:inputs].first.file.download!(downloads_path, {:client_id => client_key, :private_key => private_key}) + # Create Job instance + job = GroupDocs::Job.new({:id => source_id}) + # Get document by job id + documents = job.documents!({:client_id => client_id, :private_key => private_key}) + + # Download converted file + documents[:inputs].first.outputs.first.download!(downloads_path, {:client_id => client_id, :private_key => private_key}) + rescue Exception => e err = e.message end end -# +# GET request get '/sample18/check' do - + + # Check is there download directory unless File.directory?("#{File.dirname(__FILE__)}/../public/downloads") - return "Directory was not found." + return 'Directory was not found.' end + # Get file name from download directory name = nil Dir.entries("#{File.dirname(__FILE__)}/../public/downloads").each do |file| name = file if file != '.' && file != '..' end - if name - return name - else - return "File was not found." - end + name end +# GET request +get '/sample18/downloads/:filename' do |filename| + # Send file with header to download it + send_file "#{File.dirname(__FILE__)}/../public/downloads/#{filename}", :filename => filename, :type => 'Application/octet-stream' +end + # POST request post '/sample18' do # set variables set :client_id, params[:client_id] set :private_key, params[:private_key] + set :source, params[:source] set :file_id, params[:fileId] + set :url, params[:url] set :convert_type, params[:convert_type] set :callback, params[:callback] + # Set download path + downloads_path = "#{File.dirname(__FILE__)}/../public/downloads" + + # Remove all files from download directory or create folder if it not there + if File.directory?(downloads_path) + Dir.foreach(downloads_path) { |f| fn = File.join(downloads_path, f); File.delete(fn) if f != '.' && f != '..' } + else + Dir::mkdir(downloads_path) + end + begin # check required variables - raise "Please enter all required parameters" if settings.client_id.empty? or settings.private_key.empty? or settings.file_id.empty? - + raise 'Please enter all required parameters' if settings.client_id.empty? or settings.private_key.empty? + + # Write client and private key to the file for callback job if settings.callback[0] - outFile = File.new("#{File.dirname(__FILE__)}/../public/user_info.txt", "w") - outFile.write("#{settings.client_id} ") - outFile.write("#{settings.private_key}") - outFile.close + out_file = File.new("#{File.dirname(__FILE__)}/../public/user_info.txt", 'w') + # white space is required + out_file.write("#{settings.client_id} ") + out_file.write("#{settings.private_key}") + out_file.close end - # make a request to API using client_id and private_key - files_list = GroupDocs::Storage::Folder.list!('/', {}, { :client_id => settings.client_id, :private_key => settings.private_key}) file = nil - # get document by file ID - files_list.each do |element| - if element.respond_to?('guid') == true and element.guid == settings.file_id - file = element - end + # get document by file GUID + case settings.source + when 'guid' + # Create instance of File + file = GroupDocs::Storage::File.new({:guid => settings.file_id}) + when 'local' + # construct path + file_path = "#{Dir.tmpdir}/#{params[:file][:filename]}" + # open file + File.open(file_path, 'wb') { |f| f.write(params[:file][:tempfile].read) } + # make a request to API using client_id and private_key + file = GroupDocs::Storage::File.upload!(file_path, {}, {:client_id => settings.client_id, :private_key => settings.private_key}) + when 'url' + # Upload file from defined url + file = GroupDocs::Storage::File.upload_web!(settings.url, {:client_id => settings.client_id, :private_key => settings.private_key}) + else + raise 'Wrong GUID source.' end - message = "No file with such GUID" - unless file.nil? + # Raise exception if something went wrong + raise 'No such file' unless file.is_a?(GroupDocs::Storage::File) - document = file.to_document - # convert file - convert = document.convert!(settings.convert_type, {:callback=>settings.callback}, {:client_id => settings.client_id, :private_key => settings.private_key}) - sleep(10) + # Make document from file + document = file.to_document + # convert document + convert = document.convert!(settings.convert_type, {:callback => settings.callback}, {:client_id => settings.client_id, :private_key => settings.private_key}) + # waite 10 seconds for while file converting + sleep(10) - original_document = convert.documents!({:client_id => settings.client_id, :private_key => settings.private_key}) - # TODO: add Exception if not enough time for convertation - guid = original_document[:inputs].first.outputs.first.guid - - if guid - iframe = "<iframe src='https://apps.groupdocs.com/document-viewer/embed/#{guid}' frameborder='0' width='100%' height='600'></iframe>" - message = "<p>Converted file saved successfully." - end + # Get array of changes in document from job + original_document = convert.documents!({:client_id => settings.client_id, :private_key => settings.private_key}) + + # Get converted document GUID + guid = original_document[:inputs].first.outputs.first.guid + + # Set iframe with document GUID or raise an error + if guid + iframe = "<iframe width='100%' height='600' frameborder='0' src='https://apps.groupdocs.com/document-viewer/embed/#{guid}'></iframe>" + else + raise 'File was not converted' end rescue Exception => e err = e.message end # set variables for template - haml :sample18, :locals => { :userId => settings.client_id, :privateKey => settings.private_key, :fileId => settings.file_id, :message => message, :iframe => iframe, :err => err } + haml :sample18, :locals => {:userId => settings.client_id, :privateKey => settings.private_key, :callback => settings.callback, :fileId => file, :converted => guid, :iframe => iframe, :err => err} end