# GET request get '/sample11' do haml :sample11 end # POST request post '/sample11' do # set variables set :client_id, params[:client_id] set :private_key, params[:private_key] set :file_id, params[:fileId] set :annotation_type, params[:annotation_type] 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? or settings.annotation_type.empty? # annotation types types = {:text => 0, :area => 1, :point => 2} # required parameters all_params = all_params = ['annotation_type', 'box_x', 'box_y', 'text'] # added required parameters depends on annotation type ['text' or 'area'] if settings.annotation_type == 'text' all_params = all_params | ['box_width', 'box_height', 'annotationPosition_x', 'annotationPosition_y'] elsif settings.annotation_type == 'area' all_params = all_params | ['box_width', 'box_height'] end # checking required parameters all_params.each do |param| raise 'Please enter all required parameters' if params[param].empty? 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}) document = '' # get document by file ID files_list.each do |element| if element.respond_to?('guid') == true and element.guid == settings.file_id document = element end end unless document.instance_of? String # start create new annotation annotation = GroupDocs::Document::Annotation.new(document: document.to_document) annotation.type = types[settings.annotation_type] # construct requestBody depends on annotation type # text annotation if settings.annotation_type == 'text' annotation.box = {x: params['box_x'], y: params['box_y'], width: params['box_width'], height: params['box_height']} annotation.annotationPosition = {x: params['annotationPosition_x'], y: params['annotationPosition_y']} # area annotation elsif settings.annotation_type == 'area' annotation.box = {x: params['box_x'], y: params['box_y'], width: params['box_width'], height: params['box_height']} annotation.annotationPosition = {x: 0, y: 0} # point annotation elsif settings.annotation_type == 'point' annotation.box = {x: params['box_x'], y: params['box_y'], width: 0, height: 0} annotation.annotationPosition = {x: 0, y: 0} end # call create method annotation.create!({:client_id => settings.client_id, :private_key => settings.private_key}) # add annotation reply reply = GroupDocs::Document::Annotation::Reply.new(annotation: annotation) reply.text = params['text'] reply.create!({:client_id => settings.client_id, :private_key => settings.private_key}) end rescue Exception => e err = e.message end # set variables for template haml :sample11, :locals => {:userId => settings.client_id, :privateKey => settings.private_key, :fileId => settings.file_id, :annotationType => settings.annotation_type, :annotationId => (defined? annotation.id) ? annotation.id : nil, :annotationText => params['text'], :err => err} end