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