groupdocs 1.5.3 → 1.5.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. data/.travis.yml +0 -1
  2. data/README.md +2 -0
  3. data/examples/api-samples/public/docs/annotation-sample.html +167 -57
  4. data/examples/api-samples/public/docs/docco.css +459 -151
  5. data/examples/api-samples/public/docs/envelope-sample.html +373 -131
  6. data/examples/api-samples/public/docs/sample1.html +126 -26
  7. data/examples/api-samples/public/docs/sample10.html +213 -50
  8. data/examples/api-samples/public/docs/sample11.html +319 -87
  9. data/examples/api-samples/public/docs/sample12.html +165 -40
  10. data/examples/api-samples/public/docs/sample13.html +166 -41
  11. data/examples/api-samples/public/docs/sample14.html +142 -30
  12. data/examples/api-samples/public/docs/sample15.html +127 -27
  13. data/examples/api-samples/public/docs/sample16.html +125 -25
  14. data/examples/api-samples/public/docs/sample17.html +188 -37
  15. data/examples/api-samples/public/docs/sample18.html +614 -157
  16. data/examples/api-samples/public/docs/sample19.html +221 -59
  17. data/examples/api-samples/public/docs/sample2.html +142 -30
  18. data/examples/api-samples/public/docs/sample20.html +176 -51
  19. data/examples/api-samples/public/docs/sample21.html +287 -66
  20. data/examples/api-samples/public/docs/sample22.html +224 -53
  21. data/examples/api-samples/public/docs/sample23.html +256 -0
  22. data/examples/api-samples/public/docs/sample24.html +143 -0
  23. data/examples/api-samples/public/docs/sample25.html +429 -0
  24. data/examples/api-samples/public/docs/sample26.html +113 -0
  25. data/examples/api-samples/public/docs/sample27.html +433 -0
  26. data/examples/api-samples/public/docs/sample28.html +185 -0
  27. data/examples/api-samples/public/docs/sample29.html +175 -0
  28. data/examples/api-samples/public/docs/sample3.html +172 -34
  29. data/examples/api-samples/public/docs/sample30.html +144 -0
  30. data/examples/api-samples/public/docs/sample31.html +734 -0
  31. data/examples/api-samples/public/docs/sample4.html +204 -52
  32. data/examples/api-samples/public/docs/sample5.html +241 -63
  33. data/examples/api-samples/public/docs/sample6.html +209 -48
  34. data/examples/api-samples/public/docs/sample7.html +155 -43
  35. data/examples/api-samples/public/docs/sample8.html +235 -62
  36. data/examples/api-samples/public/docs/sample9.html +200 -49
  37. data/examples/api-samples/public/templates/merge_field1_doc.docx +0 -0
  38. data/examples/api-samples/public/templates/merge_field2_doc.docx +0 -0
  39. data/examples/api-samples/samples/sample23.rb +54 -0
  40. data/examples/api-samples/samples/sample24.rb +30 -0
  41. data/examples/api-samples/samples/sample25.rb +4 -4
  42. data/examples/api-samples/samples/sample26.rb +25 -0
  43. data/examples/api-samples/samples/sample27.rb +100 -0
  44. data/examples/api-samples/samples/sample28.rb +47 -0
  45. data/examples/api-samples/samples/sample29.rb +52 -0
  46. data/examples/api-samples/samples/sample30.rb +39 -0
  47. data/examples/api-samples/samples/sample31.rb +204 -0
  48. data/examples/api-samples/samples/sample5.rb +5 -3
  49. data/examples/api-samples/samples/sample6.rb +2 -0
  50. data/examples/api-samples/views/_others_samples.haml +12 -0
  51. data/examples/api-samples/views/index.haml +12 -0
  52. data/examples/api-samples/views/layout.haml +1 -0
  53. data/examples/api-samples/views/sample1.haml +3 -2
  54. data/examples/api-samples/views/sample10.haml +3 -2
  55. data/examples/api-samples/views/sample11.haml +4 -0
  56. data/examples/api-samples/views/sample12.haml +4 -0
  57. data/examples/api-samples/views/sample13.haml +4 -0
  58. data/examples/api-samples/views/sample14.haml +4 -0
  59. data/examples/api-samples/views/sample15.haml +4 -0
  60. data/examples/api-samples/views/sample16.haml +4 -0
  61. data/examples/api-samples/views/sample17.haml +4 -0
  62. data/examples/api-samples/views/sample19.haml +4 -0
  63. data/examples/api-samples/views/sample2.haml +3 -2
  64. data/examples/api-samples/views/sample20.haml +4 -0
  65. data/examples/api-samples/views/sample21.haml +4 -0
  66. data/examples/api-samples/views/sample22.haml +4 -0
  67. data/examples/api-samples/views/sample23.haml +87 -0
  68. data/examples/api-samples/views/sample24.haml +44 -0
  69. data/examples/api-samples/views/sample26.haml +54 -0
  70. data/examples/api-samples/views/sample27.haml +122 -0
  71. data/examples/api-samples/views/sample28.haml +47 -0
  72. data/examples/api-samples/views/sample29.haml +70 -0
  73. data/examples/api-samples/views/sample3.haml +3 -2
  74. data/examples/api-samples/views/sample30.haml +46 -0
  75. data/examples/api-samples/views/sample31.haml +114 -0
  76. data/examples/api-samples/views/sample4.haml +3 -2
  77. data/examples/api-samples/views/sample5.haml +3 -2
  78. data/examples/api-samples/views/sample6.haml +3 -2
  79. data/examples/api-samples/views/sample7.haml +3 -2
  80. data/examples/api-samples/views/sample8.haml +3 -2
  81. data/examples/api-samples/views/sample9.haml +3 -2
  82. data/examples/viewer/Gemfile +1 -1
  83. data/groupdocs.gemspec +3 -3
  84. data/lib/groupdocs/datasource.rb +22 -0
  85. data/lib/groupdocs/document.rb +493 -43
  86. data/lib/groupdocs/document/annotation.rb +73 -0
  87. data/lib/groupdocs/job.rb +82 -1
  88. data/lib/groupdocs/post.rb +83 -0
  89. data/lib/groupdocs/questionnaire.rb +41 -0
  90. data/lib/groupdocs/signature.rb +342 -0
  91. data/lib/groupdocs/signature/envelope.rb +56 -0
  92. data/lib/groupdocs/signature/form.rb +47 -5
  93. data/lib/groupdocs/signature/shared/field_methods.rb +37 -0
  94. data/lib/groupdocs/storage/file.rb +83 -0
  95. data/lib/groupdocs/subscription.rb +218 -0
  96. data/lib/groupdocs/user.rb +422 -1
  97. data/lib/groupdocs/version.rb +1 -1
  98. data/spec/groupdocs/job_spec.rb +4 -5
  99. data/spec/groupdocs/user_spec.rb +157 -0
  100. data/spec/support/json/annotation_resize.json +11 -0
  101. data/spec/support/json/annotation_text_color.json +10 -0
  102. data/spec/support/json/annotation_text_info.json +11 -0
  103. data/spec/support/json/document_content_get.json +8 -0
  104. data/spec/support/json/document_edit_lock_get.json +10 -0
  105. data/spec/support/json/document_editlock_remove.json +8 -0
  106. data/spec/support/json/document_page_html_urls_get.json +14 -0
  107. data/spec/support/json/document_password_set.json +19 -0
  108. data/spec/support/json/document_representations.json +25 -0
  109. data/spec/support/json/document_shared_documents_get.json +32 -0
  110. data/spec/support/json/document_tags_get.json +9 -0
  111. data/spec/support/json/document_tags_remove.json +8 -0
  112. data/spec/support/json/document_tags_set.json +8 -0
  113. data/spec/support/json/document_user_status_set.json +12 -0
  114. data/spec/support/json/job_documents.json +103 -35
  115. data/spec/support/json/job_xml_get.json +30 -0
  116. data/spec/support/json/jobs_documents.json +40 -0
  117. data/spec/support/json/user_get_profile.json +73 -0
  118. metadata +49 -177
@@ -0,0 +1,54 @@
1
+ # GET request
2
+ get '/sample23' do
3
+ haml :sample23
4
+ end
5
+
6
+ # POST request
7
+ post '/sample23' do
8
+ # set variables
9
+
10
+ set :client_id, params[:client_id]
11
+ set :private_key, params[:private_key]
12
+ set :source, params[:source]
13
+ set :file_id, params[:fileId]
14
+ set :url, params[:url]
15
+
16
+ begin
17
+ # check required variables
18
+ raise 'Please enter all required parameters' if settings.client_id.empty? or settings.private_key.empty?
19
+
20
+ # get document by file GUID
21
+ case settings.source
22
+ when 'guid'
23
+ # Create instance of File
24
+ file = GroupDocs::Storage::File.new({:guid => settings.file_id})
25
+ when 'local'
26
+ # Construct path
27
+ file_path = "#{Dir.tmpdir}/#{params[:file][:filename]}"
28
+ # Open file
29
+ File.open(file_path, 'wb') { |f| f.write(params[:file][:tempfile].read) }
30
+ # Make a request to API using client_id and private_key
31
+ file = GroupDocs::Storage::File.upload!(file_path, {}, {:client_id => settings.client_id, :private_key => settings.private_key})
32
+ when 'url'
33
+ # Upload file from defined url
34
+ file = GroupDocs::Storage::File.upload_web!(settings.url, {:client_id => settings.client_id, :private_key => settings.private_key})
35
+ else
36
+ raise 'Wrong GUID source.'
37
+ end
38
+
39
+ # Raise exception if something went wrong
40
+ raise 'No such file' unless file.is_a?(GroupDocs::Storage::File)
41
+
42
+ # Make GroupDocs::Storage::Document instance
43
+ document = file.to_document
44
+
45
+ #Create new page
46
+ page_image = document.page_images!(700, 700, {first_page: 0, page_count: 2}, {:client_id => settings.client_id, :private_key => settings.private_key})
47
+ pp page_image
48
+ rescue Exception => e
49
+ err = e.message
50
+ end
51
+
52
+ # set variables for template
53
+ haml :sample23, :locals => {:userId => settings.client_id, :privateKey => settings.private_key, :page_image => page_image, :err => err}
54
+ end
@@ -0,0 +1,30 @@
1
+ # GET request
2
+ get '/sample24' do
3
+ haml :sample24
4
+ end
5
+
6
+ # POST request
7
+ post '/sample24' do
8
+ # set variables
9
+ set :client_id, params[:client_id]
10
+ set :private_key, params[:private_key]
11
+ set :url, params[:url]
12
+
13
+ begin
14
+ # check required variables
15
+ raise 'Please enter all required parameters' if settings.client_id.empty? or settings.private_key.empty? or settings.url.nil?
16
+
17
+ # upload web file
18
+ file = GroupDocs::Storage::File.upload_web!(settings.url, {:client_id => settings.client_id, :private_key => settings.private_key})
19
+
20
+ # construct result messages
21
+ message = "<p>File was uploaded to GroupDocs. Here you can see your <strong> file in the GroupDocs Embedded Viewer.</p>"
22
+ iframe = "<iframe src='https://apps.groupdocs.com/document-viewer/Embed/#{file.guid}' frameborder='0' width='720' height='600'></iframe>"
23
+
24
+ rescue Exception => e
25
+ err = e.message
26
+ end
27
+
28
+ # set variables for template
29
+ haml :sample24, :locals => {:userId => settings.client_id, :privateKey => settings.private_key, :iframe => iframe, :message => message, :err => err}
30
+ end
@@ -29,20 +29,20 @@ post '/sample25' do
29
29
 
30
30
  # get document by file GUID
31
31
  case settings.source
32
- when 'guid'
32
+ when 'guid'
33
33
  # Create instance of File
34
34
  file = GroupDocs::Storage::File.new({:guid => settings.file_id})
35
- when 'local'
35
+ when 'local'
36
36
  # Construct path
37
37
  file_path = "#{Dir.tmpdir}/#{params[:file][:filename]}"
38
38
  # Open file
39
39
  File.open(file_path, 'wb') { |f| f.write(params[:file][:tempfile].read) }
40
40
  # Make a request to API using client_id and private_key
41
41
  file = GroupDocs::Storage::File.upload!(file_path, {}, {:client_id => settings.client_id, :private_key => settings.private_key})
42
- when 'url'
42
+ when 'url'
43
43
  # Upload file from defined url
44
44
  file = GroupDocs::Storage::File.upload_web!(settings.url, {:client_id => settings.client_id, :private_key => settings.private_key})
45
- else
45
+ else
46
46
  raise 'Wrong GUID source.'
47
47
  end
48
48
 
@@ -0,0 +1,25 @@
1
+ # GET request
2
+ get '/sample26' do
3
+ haml :sample26
4
+ end
5
+
6
+ # POST request
7
+ post '/sample26' do
8
+ set :email, params[:email]
9
+ set :password, params[:password]
10
+
11
+
12
+ begin
13
+ # check required variables
14
+ raise 'Please enter all required parameters' if settings.email.empty? or settings.password.empty?
15
+
16
+ # make a request to API using email and password
17
+ user = GroupDocs::User.login!(settings.email, settings.password)
18
+
19
+ rescue Exception => e
20
+ err = e.message
21
+ end
22
+
23
+ # set variables for template
24
+ haml :sample26, :locals => {:user => user, :err => err}
25
+ end
@@ -0,0 +1,100 @@
1
+ # GET request
2
+ get '/sample27' do
3
+ haml :sample27
4
+ end
5
+
6
+ # POST request
7
+ post '/sample27' do
8
+ # set variables
9
+ set :client_id, params[:client_id]
10
+ set :private_key, params[:private_key]
11
+ set :file_id, params[:fileId]
12
+ set :source, params[:source]
13
+ set :sex, params[:sex]
14
+ set :age, params[:age]
15
+ set :sunrise, params[:sunrise]
16
+ set :name, params[:name]
17
+ set :type, params[:type]
18
+
19
+ # Set download path
20
+ downloads_path = "#{File.dirname(__FILE__)}/../public/downloads"
21
+
22
+ # Remove all files from download directory or create folder if it not there
23
+ if File.directory?(downloads_path)
24
+ Dir.foreach(downloads_path) { |f| fn = File.join(downloads_path, f); File.delete(fn) if f != '.' && f != '..' }
25
+ else
26
+ Dir::mkdir(downloads_path)
27
+ end
28
+
29
+ begin
30
+ # Check required variables
31
+ raise 'Please enter all required parameters' if settings.client_id.empty? or settings.private_key.empty?
32
+
33
+ # get document by file GUID
34
+ case settings.source
35
+ when 'guid'
36
+ # Create instance of File
37
+ file = GroupDocs::Storage::File.new({:guid => settings.file_id})
38
+ when 'local'
39
+ # Construct path
40
+ file_path = "#{Dir.tmpdir}/#{params[:file][:filename]}"
41
+ # Open file
42
+ File.open(file_path, 'wb') { |f| f.write(params[:file][:tempfile].read) }
43
+ # Make a request to API using client_id and private_key
44
+ file = GroupDocs::Storage::File.upload!(file_path, {}, {:client_id => settings.client_id, :private_key => settings.private_key})
45
+ when 'url'
46
+ # Upload file from defined url
47
+ file = GroupDocs::Storage::File.upload_web!(settings.url, {:client_id => settings.client_id, :private_key => settings.private_key})
48
+ else
49
+ raise 'Wrong GUID source.'
50
+ end
51
+
52
+ # Raise exception if something went wrong
53
+ raise 'No such file' unless file.is_a?(GroupDocs::Storage::File)
54
+
55
+ # Make GroupDocs::Storage::Document instance
56
+ document = file.to_document
57
+
58
+ # Create datasource with fields
59
+ datasource = GroupDocs::DataSource.new
60
+
61
+ # Get arry of document's fields
62
+ enteredData = {"sex" => settings.sex, "name" => settings.name, "age"=> settings.age, "sunrise" => settings.sunrise}
63
+
64
+ # Create Field instance and fill the fields
65
+ datasource.fields = enteredData.map { |key, value| GroupDocs::DataSource::Field.new(name: key, type: :text, values: Array.new() << value) }
66
+
67
+
68
+ # Adds datasource.
69
+ datasource.add!({:client_id => settings.client_id, :private_key => settings.private_key})
70
+
71
+ # Creates new job to merge datasource into document.
72
+ job = document.datasource!(datasource, {:new_type => settings.type}, {:client_id => settings.client_id, :private_key => settings.private_key})
73
+ sleep 10 # wait for merge and convert
74
+
75
+ # Returns an hash of input and output documents associated to job.
76
+ document = job.documents!({:client_id => settings.client_id, :private_key => settings.private_key})
77
+
78
+ # Download file
79
+ document[:inputs][0].outputs[0].download!(downloads_path, {:client_id => settings.client_id, :private_key => settings.private_key})
80
+
81
+ # Set converted document GUID
82
+ guid = document[:inputs][0].outputs[0].guid
83
+
84
+ # Set converted document Name
85
+ file_name = document[:inputs][0].outputs[0].name
86
+
87
+ # Set iframe with document GUID or raise an error
88
+ if guid
89
+ iframe = "<iframe width='100%' height='600' frameborder='0' src='https://apps.groupdocs.com/document-viewer/embed/#{guid}'></iframe>"
90
+ else
91
+ raise 'File was not converted'
92
+ end
93
+
94
+ rescue Exception => e
95
+ err = e.message
96
+ end
97
+
98
+ # set variables for template
99
+ haml :sample27, :locals => {:userId => settings.client_id, :privateKey => settings.private_key, :sex => settings.sex, :age => settings.age, :sunrise => settings.sunrise, :name => settings.name, :type => settings.type, :iframe => iframe, :file_name => file_name, :err => err}
100
+ end
@@ -0,0 +1,47 @@
1
+ # GET request
2
+ get '/sample28' do
3
+ haml :sample28
4
+ end
5
+
6
+ # POST request
7
+ post '/sample28' do
8
+ # set variables
9
+ set :client_id, params[:client_id]
10
+ set :private_key, params[:private_key]
11
+ set :file_id, params[:fileId]
12
+
13
+ begin
14
+ # check required variables
15
+ raise 'Please enter all required parameters' if settings.client_id.empty? or settings.private_key.empty? or settings.file_id.empty?
16
+
17
+ # make a request to API using client_id and private_key
18
+ files_list = GroupDocs::Storage::Folder.list!('/', {}, {:client_id => settings.client_id, :private_key => settings.private_key})
19
+ document = ''
20
+
21
+ # get document by file ID
22
+ files_list.each do |element|
23
+ if element.respond_to?('guid') == true and element.guid == settings.file_id
24
+ document = element
25
+ end
26
+ end
27
+
28
+
29
+ unless document.instance_of? String
30
+ # get list of annotations
31
+ annotations = document.to_document.annotations!(:client_id => settings.client_id, :private_key => settings.private_key)
32
+
33
+ # delete all annotations from document
34
+ annotations.each do |annotation|
35
+ annotation.remove!(:client_id => settings.client_id, :private_key => settings.private_key)
36
+ end
37
+
38
+ message = 'Annotations was deleted from document'
39
+ end
40
+
41
+ rescue Exception => e
42
+ err = e.message
43
+ end
44
+
45
+ # set variables for template
46
+ haml :sample28, :locals => {:userId => settings.client_id, :privateKey => settings.private_key, :messages => message, :fileId => settings.file_id, :err => err}
47
+ end
@@ -0,0 +1,52 @@
1
+ get '/sample29' do
2
+ haml :sample29
3
+ end
4
+
5
+ # POST request
6
+ post '/sample29' do
7
+
8
+ # set variables
9
+ set :client_id, params[:clientId]
10
+ set :base_path, params[:basePath]
11
+ set :url, params[:url]
12
+
13
+ url = settings.url
14
+ base_path = settings.base_path
15
+ client_id = settings.client_id
16
+
17
+ begin
18
+
19
+ #If base base is empty seting base path to prod server
20
+ base_path = 'https://api.groupdocs.com/v2.0' unless !base_path.empty?
21
+
22
+ #Generate iframe url for chosen server
23
+ if (!url.empty?)
24
+
25
+ if (base_path == "https://api.groupdocs.com/v2.0")
26
+ iframe = "https://apps.groupdocs.com/document-viewer/embed?url=#{url} + '&user_id=#{client_id}"
27
+ elsif (base_path == "https://dev-api.groupdocs.com/v2.0")
28
+
29
+ #iframe to dev server
30
+ iframe = "https://dev-apps.groupdocs.com/document-viewer/embed?url=#{url} + '&user_id=#{client_id}"
31
+ elsif (base_path == "https://stage-api.groupdocs.com/v2.0")
32
+
33
+ #iframe to test server
34
+ iframe = "https://stage-apps.groupdocs.com/document-viewer/embed?url=#{url} + '&user_id=#{client_id}"
35
+ elsif (base_path == "http://realtime-api.groupdocs.com")
36
+ iframe = "http://realtime-apps.groupdocs.com/document-viewer/embed?url=#{url} + '&user_id=#{client_id}"
37
+ end
38
+
39
+
40
+ end
41
+
42
+ rescue Exception => e
43
+ err = e.message
44
+ end
45
+
46
+ require 'json'
47
+ content_type 'text/html'
48
+
49
+ #Create json string with result data
50
+ iframe = {:iframe => iframe, :error => ''}.to_json
51
+
52
+ end
@@ -0,0 +1,39 @@
1
+ # GET request
2
+ get '/sample30' do
3
+ haml :sample30
4
+ end
5
+
6
+ # POST request
7
+ post '/sample30' do
8
+ # set variables
9
+ set :client_id, params[:client_id]
10
+ set :private_key, params[:private_key]
11
+ set :name, params[:name]
12
+
13
+ begin
14
+ # check required variables
15
+ raise 'Please enter all required parameters' if settings.client_id.empty? or settings.private_key.empty? or settings.name.empty?
16
+
17
+ # get List files from GroupDocs Storage
18
+ file = GroupDocs::Storage::Folder.list!("", {}, {:client_id => settings.client_id, :private_key => settings.private_key})
19
+ file_name = ''
20
+
21
+ # choose the desired file
22
+ file.map do |element|
23
+ if element.name == settings.name
24
+ file_name = element
25
+ end
26
+ end
27
+
28
+ # delete file from GroupDocs Storage
29
+ file_name.delete!({:client_id => settings.client_id, :private_key => settings.private_key})
30
+
31
+ message = 'File was deleted from GroupDocs Storage'
32
+
33
+ rescue Exception => e
34
+ err = e.message
35
+ end
36
+
37
+ # set variables for template
38
+ haml :sample30, :locals => {:userId => settings.client_id, :privateKey => settings.private_key, :message => message, :name => settings.name, :err => err}
39
+ end
@@ -0,0 +1,204 @@
1
+ # GET request
2
+ get '/sample31' do
3
+ haml :sample31
4
+ end
5
+
6
+ # POST request
7
+ post '/sample31/callback' do
8
+ # Set download path
9
+ downloads_path = "#{File.dirname(__FILE__)}/../public/downloads"
10
+
11
+ # Get callback request
12
+ data = JSON.parse(request.body.read)
13
+ begin
14
+ raise 'Empty params!' if data.empty?
15
+ source_id = nil
16
+ client_id = nil
17
+ private_key = nil
18
+
19
+ # Get value of SourceId
20
+ data.each do |key, value|
21
+ if key == 'SourceId'
22
+ source_id = value
23
+ end
24
+ end
25
+
26
+ # Get private key and client_id from file user_info.txt
27
+ if File.exist?("#{File.dirname(__FILE__)}/../public/user_info.txt")
28
+ contents = File.read("#{File.dirname(__FILE__)}/../public/user_info.txt")
29
+ contents = contents.split(' ')
30
+ client_id = contents.first
31
+ private_key = contents.last
32
+ end
33
+
34
+ # Create Job instance
35
+ job = GroupDocs::Job.new({:id => source_id})
36
+
37
+ # Get document by job id
38
+ documents = job.documents!({:client_id => client_id, :private_key => private_key})
39
+
40
+ # Download converted file
41
+ documents[:inputs].first.outputs.first.download!(downloads_path, {:client_id => client_id, :private_key => private_key})
42
+
43
+ rescue Exception => e
44
+ err = e.message
45
+ end
46
+ end
47
+
48
+
49
+ # GET request
50
+ get '/sample31/check' do
51
+
52
+ # Check is there download directory
53
+ unless File.directory?("#{File.dirname(__FILE__)}/../public/downloads")
54
+ return 'Directory was not found.'
55
+ end
56
+
57
+ # Get file name from download directory
58
+ name = nil
59
+ Dir.entries("#{File.dirname(__FILE__)}/../public/downloads").each do |file|
60
+ name = file if file != '.' && file != '..'
61
+ end
62
+
63
+ name
64
+ end
65
+
66
+ # GET request
67
+ get '/sample31/downloads/:filename' do |filename|
68
+ # Send file with header to download it
69
+ send_file "#{File.dirname(__FILE__)}/../public/downloads/#{filename}", :filename => filename, :type => 'Application/octet-stream'
70
+ end
71
+
72
+
73
+ # POST request
74
+ post '/sample31' do
75
+ # set variables
76
+ set :client_id, params[:client_id]
77
+ set :private_key, params[:private_key]
78
+ set :template_guid, params[:template_guid]
79
+ set :name, params[:name]
80
+ set :country, params[:country]
81
+ set :city, params[:city]
82
+ set :street, params[:street]
83
+ set :email, params[:email]
84
+ set :callback, params[:callback]
85
+ set :last_name, params[:last_name]
86
+
87
+ # Set download path
88
+ downloads_path = "#{File.dirname(__FILE__)}/../public/downloads"
89
+
90
+ # Remove all files from download directory or create folder if it not there
91
+ if File.directory?(downloads_path)
92
+ Dir.foreach(downloads_path) { |f| fn = File.join(downloads_path, f); File.delete(fn) if f != '.' && f != '..' }
93
+ else
94
+ Dir::mkdir(downloads_path)
95
+ end
96
+
97
+ begin
98
+ # check required variables
99
+ raise 'Please enter all required parameters' if settings.client_id.empty? or settings.private_key.empty?
100
+
101
+ # Write client and private key to the file for callback job
102
+ if settings.callback[0]
103
+ out_file = File.new("#{File.dirname(__FILE__)}/../public/user_info.txt", 'w')
104
+ # white space is required
105
+ out_file.write("#{settings.client_id} ")
106
+ out_file.write("#{settings.private_key}")
107
+ out_file.close
108
+ end
109
+
110
+ file = nil
111
+ # Create instance of File
112
+ file = GroupDocs::Storage::File.new({:guid => settings.template_guid})
113
+ # Raise exception if something went wrong
114
+ raise 'No such file' unless file.is_a?(GroupDocs::Storage::File)
115
+
116
+ # Make GroupDocs::Storage::Document instance
117
+ document = file.to_document
118
+
119
+ # Create datasource with fields
120
+ datasource = GroupDocs::DataSource.new
121
+
122
+ # Get arry of document's fields
123
+ enteredData = {"email" => settings.email, "name" => settings.name, "last_name" => settings.last_name, "country"=> settings.country, "city" => settings.city, "street" => settings.street}
124
+
125
+
126
+ # Create Field instance and fill the fields
127
+ datasource.fields = enteredData.map { |key, value| GroupDocs::DataSource::Field.new(name: key, type: :text, values: Array.new() << value) }
128
+
129
+ # Adds datasource.
130
+ datasource.add!({:client_id => settings.client_id, :private_key => settings.private_key})
131
+
132
+
133
+ # Creates new job to merge datasource into document.
134
+ job = document.datasource!(datasource, {:new_type => "pdf"}, {:client_id => settings.client_id, :private_key => settings.private_key})
135
+ sleep 10 # wait for merge and convert
136
+
137
+ # Returns an hash of input and output documents associated to job.
138
+ jobInfo = job.documents!({:client_id => settings.client_id, :private_key => settings.private_key})
139
+
140
+ # Creates new document to envelope
141
+ document = jobInfo[:inputs][0].outputs[0].to_document
142
+
143
+ # Creates envelope using user id and entered by user name
144
+ envelope = GroupDocs::Signature::Envelope.new
145
+ envelope.name = jobInfo[:inputs][0].outputs[0].name
146
+ envelope.create!({}, {:client_id => settings.client_id, :private_key => settings.private_key})
147
+
148
+ # Adds uploaded document to envelope
149
+ envelope.add_document!(document, {}, {:client_id => settings.client_id, :private_key => settings.private_key})
150
+
151
+ # Get role list for current user
152
+ roles = GroupDocs::Signature::Role.get!({}, {client_id: settings.client_id, private_key: settings.private_key})
153
+
154
+ # Creates new recipient
155
+ recipient = GroupDocs::Signature::Recipient.new
156
+ recipient.email = 'test@test.com'
157
+ recipient.first_name = 'test'
158
+ recipient.last_name = 'test'
159
+ recipient.role_id = roles.detect { |role| role.name == 'Signer' }.id
160
+
161
+ # Adds recipient to envelope
162
+ envelope.add_recipient!(recipient, {client_id: settings.client_id, private_key: settings.private_key})
163
+
164
+ #Get field
165
+ fieldGet = GroupDocs::Signature::Field.get!({},{client_id: settings.client_id, private_key: settings.private_key}).detect { |f| f.type == :signature }
166
+ fieldGet.location = { location_x: 0.15,
167
+ location_y: 0.73,
168
+ location_width: 150,
169
+ location_height: 50,
170
+ page: 1 }
171
+
172
+ #Get document
173
+ documentGet = envelope.documents!({}, {client_id: settings.client_id, private_key: settings.private_key}).first
174
+
175
+ #Get recipients
176
+ recipientGet = envelope.recipients!({},{client_id: settings.client_id, private_key: settings.private_key}).first
177
+
178
+ # Add field to envelope
179
+ addField = envelope.add_field!(fieldGet, documentGet, recipientGet, {}, {client_id: settings.client_id, private_key: settings.private_key})
180
+
181
+
182
+ # Send envelope
183
+ envelope.send!(settings.callback, {client_id: settings.client_id, private_key: settings.private_key})
184
+
185
+ # Make iframe
186
+ iframe = "<iframe src='https://apps.groupdocs.com/signature/signembed/#{envelope.id}/#{recipientGet.id}' frameborder='0' width='720' height='600'></iframe>"
187
+
188
+
189
+ rescue Exception => e
190
+ err = e.message
191
+ end
192
+
193
+ # set variables for template
194
+ haml :sample31, :locals => {:userId => settings.client_id,
195
+ :privateKey => settings.private_key,
196
+ :callback => settings.callback,
197
+ :email => settings.email,
198
+ :name => settings.name,
199
+ :country => settings.country,
200
+ :city => settings.city,
201
+ :street => settings.street,
202
+ :iframe => iframe,
203
+ :err => err}
204
+ end