Jump To …

envelope-sample.rb

GET request

get '/envelope-sample' do
  haml :envelope_sample
end


POST request to handle callback when document was signed

post '/envelope-sample/sign' do

Content Type of callback is application/json

  data = JSON.parse(request.body.read)
  begin
    raise 'Empty params!' if data.empty?

create empty file and write data as "key: value" to it

    out_file = File.new('signed', 'w')
    data.each do |key, value|
      out_file.write("#{key}: #{value} \n")
    end
    out_file.close
  rescue Exception => e
    err = e.message
  end
end



POST request to handle callback and download envelop when document was signed

post '/envelope-sample/sign-and-download' do
  data = JSON.parse(request.body.read)
  begin
    raise 'Empty params!' if data.empty?
    GroupDocs.configure do |groupdocs|
      groupdocs.client_id = '' # Your client Client ID here
      groupdocs.private_key = '' # Your API Key here
      groupdocs.api_server = 'https://api.groupdocs.com'
    end
    data.each do |key, value|
      if key == 'SourceId'

Create envelop with id and name as SourceId parameter from callback

        envelope = GroupDocs::Signature::Envelope.new id: value,
                                                      name: value

download signed documents as archive

        envelope.signed_documents! '.'
      end
    end
  rescue Exception => e
    err = e.message
  end
end


GET request to check if envelop was signed

get '/envelope-sample/check' do
  if File.exist?('signed')
    File.readlines('signed').each do |line|
    end
  else
    'Have not signed yet'
  end
end


POST request

post '/envelope-sample' do
  set :client_id, params[:client_id]
  set :private_key, params[:private_key]

  begin
    raise 'Please enter all required parameters' if settings.client_id.empty? or settings.private_key.empty?

    GroupDocs.configure do |groupdocs|
      groupdocs.client_id = params[:client_id]
      groupdocs.private_key = params[:private_key]
      groupdocs.api_server = 'https://stage-api.groupdocs.com'
    end


upload document

    filepath = "#{Dir.tmpdir}/#{params[:file][:filename]}"
    File.open(filepath, 'wb') { |f| f.write(params[:file][:tempfile].read) }
    file = GroupDocs::Storage::File.upload!(filepath, {}, client_id: settings.client_id, private_key: settings.private_key)
    document = file.to_document


create envelope

    envelope = GroupDocs::Signature::Envelope.new
    envelope.name = 'Envelope'
    envelope.email_subject = 'Sing this!'
    envelope.create!


add document to envelope

    envelope.add_document! document


update document object after it's created

    document = envelope.documents!.first


add new recipient to envelope

    roles = GroupDocs::Signature::Role.get!
    recipient = GroupDocs::Signature::Recipient.new
    recipient.email = 'john@smith.com'
    recipient.first_name = 'John'
    recipient.last_name = 'Smith'
    recipient.role_id = roles.detect { |role| role.name == 'Signer' }.id
    envelope.add_recipient! recipient


update recipient object after it's created

    recipient = envelope.recipients!.first


You can add fields manually.



add city field to envelope field = GroupDocs::Signature::Field.get!.detect { |f| f.type == :singleline } field.name = 'City' field.location = { locationx: 0.3, locationy: 0.2, page: 1 } envelope.addfield! field, document, recipient



add signature field to envelope field = GroupDocs::Signature::Field.get!.detect { |f| f.type == :signature } field.location = { locationx: 0.3, locationy: 0.3, page: 1 } envelope.add_field! field, document, recipient



URL for callback webhook = 'http://groupdocs-ruby-samples.herokuapp.com/envelope-sample/sign'

    webhook = 'http://77.81.243.48/?q=groupdocs_signature/signature_callback'


send envelope

    envelope.send! webhook


construct embedded signature url

    url = "https://stage-apps.groupdocs.com/signature/signembed/#{envelope.id}/#{recipient.id}"
    iframe = "<iframe src='#{url}' frameborder='0' width='720' height='600'></iframe>"

  rescue Exception => e
    err = e.message
  end

  haml :envelope_sample, :locals => {:client_id => settings.client_id, :private_key => settings.private_key, :err => err, :iframe => iframe}
end