pdf4me 1.0.1 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. checksums.yaml +4 -4
  2. data/{LICENSE → LICENSE.txt} +6 -6
  3. data/README.md +124 -395
  4. data/lib/pdf4me.rb +40 -110
  5. data/lib/pdf4me/actions/complex_action.rb +64 -0
  6. data/lib/pdf4me/actions/convert_file_to_pdf.rb +30 -0
  7. data/lib/pdf4me/actions/convert_to_pdf.rb +14 -0
  8. data/lib/pdf4me/actions/create_pdf_a.rb +29 -0
  9. data/lib/pdf4me/actions/create_thumbnail.rb +55 -0
  10. data/lib/pdf4me/actions/extract_pages.rb +49 -0
  11. data/lib/pdf4me/actions/merge_two_pdfs.rb +34 -0
  12. data/lib/pdf4me/actions/optimize.rb +10 -0
  13. data/lib/pdf4me/actions/optimize_by_profile.rb +42 -0
  14. data/lib/pdf4me/actions/split_by_page_nr.rb +55 -0
  15. data/lib/pdf4me/actions/text_stamp.rb +63 -0
  16. data/lib/pdf4me/actions/wrapper_action.rb +65 -0
  17. data/lib/pdf4me/client.rb +87 -0
  18. data/lib/pdf4me/configuration.rb +9 -88
  19. data/lib/pdf4me/exceptions.rb +26 -0
  20. data/lib/pdf4me/models/base.rb +26 -0
  21. data/lib/pdf4me/models/convert_to_pdf_action.rb +26 -246
  22. data/lib/pdf4me/models/convert_to_pdf_res.rb +5 -185
  23. data/lib/pdf4me/models/doc_log.rb +12 -257
  24. data/lib/pdf4me/models/doc_metadata.rb +13 -282
  25. data/lib/pdf4me/models/document.rb +14 -282
  26. data/lib/pdf4me/models/notification.rb +8 -191
  27. data/lib/pdf4me/models/optimize_action.rb +72 -508
  28. data/lib/pdf4me/models/optimize_res.rb +5 -195
  29. data/lib/pdf4me/models/page.rb +12 -254
  30. data/lib/pdf4me/utils/assigner.rb +10 -0
  31. data/lib/pdf4me/utils/serializer.rb +43 -0
  32. data/lib/pdf4me/version.rb +1 -13
  33. data/spec/actions/create_pdf_a_spec.rb +21 -0
  34. data/spec/actions/wrapper_action_spec.rb +24 -0
  35. data/spec/files/4.pdf +0 -0
  36. data/spec/spec_helper.rb +17 -100
  37. metadata +70 -421
  38. data/Gemfile +0 -7
  39. data/Rakefile +0 -8
  40. data/docs/ActionFlow.md +0 -8
  41. data/docs/ApiUsageRes.md +0 -11
  42. data/docs/ArchiveConfig.md +0 -11
  43. data/docs/ArchiveJobReq.md +0 -12
  44. data/docs/ArchiveJobRes.md +0 -9
  45. data/docs/Color.md +0 -10
  46. data/docs/ConvertApi.md +0 -102
  47. data/docs/ConvertToPdf.md +0 -10
  48. data/docs/ConvertToPdfAction.md +0 -10
  49. data/docs/ConvertToPdfRes.md +0 -8
  50. data/docs/CreateImages.md +0 -10
  51. data/docs/CreateImagesRes.md +0 -8
  52. data/docs/CreatePdfA.md +0 -10
  53. data/docs/CreatePdfARes.md +0 -8
  54. data/docs/CustomCMSConfig.md +0 -23
  55. data/docs/DocAction.md +0 -8
  56. data/docs/DocLog.md +0 -12
  57. data/docs/DocMetadata.md +0 -16
  58. data/docs/Document.md +0 -16
  59. data/docs/DocumentApi.md +0 -203
  60. data/docs/DropDocumentReq.md +0 -20
  61. data/docs/DropDocumentRes.md +0 -15
  62. data/docs/ExecutionTrigger.md +0 -10
  63. data/docs/Extract.md +0 -10
  64. data/docs/ExtractAction.md +0 -9
  65. data/docs/ExtractApi.md +0 -102
  66. data/docs/ExtractRes.md +0 -8
  67. data/docs/GetDocumentListRes.md +0 -13
  68. data/docs/GetDocumentReq.md +0 -14
  69. data/docs/GetDocumentRes.md +0 -14
  70. data/docs/IFormFile.md +0 -13
  71. data/docs/Image.md +0 -15
  72. data/docs/ImageAction.md +0 -30
  73. data/docs/ImageApi.md +0 -107
  74. data/docs/Job.md +0 -10
  75. data/docs/JobApi.md +0 -197
  76. data/docs/JobConfig.md +0 -18
  77. data/docs/JobConfigRes.md +0 -8
  78. data/docs/KeyValuePairStringObject.md +0 -9
  79. data/docs/KeyValuePairStringString.md +0 -9
  80. data/docs/ManagementApi.md +0 -92
  81. data/docs/Merge.md +0 -10
  82. data/docs/MergeAction.md +0 -8
  83. data/docs/MergeApi.md +0 -102
  84. data/docs/MergeRes.md +0 -8
  85. data/docs/Notification.md +0 -9
  86. data/docs/OcrAction.md +0 -12
  87. data/docs/OcrApi.md +0 -57
  88. data/docs/Optimize.md +0 -10
  89. data/docs/OptimizeAction.md +0 -35
  90. data/docs/OptimizeApi.md +0 -103
  91. data/docs/OptimizeRes.md +0 -9
  92. data/docs/Page.md +0 -14
  93. data/docs/PageSelection.md +0 -10
  94. data/docs/Pdf4meAction.md +0 -12
  95. data/docs/Pdf4meDocument.md +0 -32
  96. data/docs/Pdf4meException.md +0 -8
  97. data/docs/PdfAAction.md +0 -14
  98. data/docs/PdfAApi.md +0 -102
  99. data/docs/PdfFont.md +0 -9
  100. data/docs/Pricing.md +0 -13
  101. data/docs/ProduceDocuments.md +0 -14
  102. data/docs/ProduceDocumentsRes.md +0 -8
  103. data/docs/ProduceOutput.md +0 -8
  104. data/docs/RGBSet.md +0 -10
  105. data/docs/RecognizeDocument.md +0 -10
  106. data/docs/RecognizeDocumentRes.md +0 -9
  107. data/docs/Rectangle.md +0 -11
  108. data/docs/Rotate.md +0 -10
  109. data/docs/RunJobRes.md +0 -10
  110. data/docs/SignatureConfig.md +0 -7
  111. data/docs/Split.md +0 -10
  112. data/docs/SplitAction.md +0 -11
  113. data/docs/SplitApi.md +0 -103
  114. data/docs/SplitRes.md +0 -8
  115. data/docs/Stamp.md +0 -10
  116. data/docs/StampAction.md +0 -22
  117. data/docs/StampApi.md +0 -110
  118. data/docs/StampRes.md +0 -8
  119. data/docs/StorageFolder.md +0 -10
  120. data/docs/Text.md +0 -17
  121. data/docs/Transform.md +0 -13
  122. data/docs/Translate.md +0 -9
  123. data/docs/UserFingerprint.md +0 -9
  124. data/docs/VersionRes.md +0 -8
  125. data/docs/java.md +0 -425
  126. data/lib/pdf4me/api/convert_api.rb +0 -130
  127. data/lib/pdf4me/api/document_api.rb +0 -218
  128. data/lib/pdf4me/api/extract_api.rb +0 -131
  129. data/lib/pdf4me/api/image_api.rb +0 -139
  130. data/lib/pdf4me/api/job_api.rb +0 -223
  131. data/lib/pdf4me/api/management_api.rb +0 -117
  132. data/lib/pdf4me/api/merge_api.rb +0 -131
  133. data/lib/pdf4me/api/ocr_api.rb +0 -74
  134. data/lib/pdf4me/api/optimize_api.rb +0 -139
  135. data/lib/pdf4me/api/pdf_a_api.rb +0 -134
  136. data/lib/pdf4me/api/split_api.rb +0 -135
  137. data/lib/pdf4me/api/stamp_api.rb +0 -159
  138. data/lib/pdf4me/api_client.rb +0 -380
  139. data/lib/pdf4me/api_error.rb +0 -38
  140. data/lib/pdf4me/models/action_flow.rb +0 -190
  141. data/lib/pdf4me/models/api_usage_res.rb +0 -219
  142. data/lib/pdf4me/models/archive_config.rb +0 -226
  143. data/lib/pdf4me/models/archive_job_req.rb +0 -249
  144. data/lib/pdf4me/models/archive_job_res.rb +0 -207
  145. data/lib/pdf4me/models/color.rb +0 -206
  146. data/lib/pdf4me/models/convert_to_pdf.rb +0 -209
  147. data/lib/pdf4me/models/create_images.rb +0 -209
  148. data/lib/pdf4me/models/create_images_res.rb +0 -189
  149. data/lib/pdf4me/models/create_pdf_a.rb +0 -209
  150. data/lib/pdf4me/models/create_pdf_a_res.rb +0 -189
  151. data/lib/pdf4me/models/custom_cms_config.rb +0 -323
  152. data/lib/pdf4me/models/doc_action.rb +0 -190
  153. data/lib/pdf4me/models/drop_document_req.rb +0 -348
  154. data/lib/pdf4me/models/drop_document_res.rb +0 -260
  155. data/lib/pdf4me/models/execution_trigger.rb +0 -206
  156. data/lib/pdf4me/models/extract.rb +0 -207
  157. data/lib/pdf4me/models/extract_action.rb +0 -201
  158. data/lib/pdf4me/models/extract_res.rb +0 -188
  159. data/lib/pdf4me/models/get_document_list_res.rb +0 -237
  160. data/lib/pdf4me/models/get_document_req.rb +0 -243
  161. data/lib/pdf4me/models/get_document_res.rb +0 -246
  162. data/lib/pdf4me/models/i_form_file.rb +0 -235
  163. data/lib/pdf4me/models/image.rb +0 -300
  164. data/lib/pdf4me/models/image_action.rb +0 -513
  165. data/lib/pdf4me/models/job.rb +0 -213
  166. data/lib/pdf4me/models/job_config.rb +0 -298
  167. data/lib/pdf4me/models/job_config_res.rb +0 -193
  168. data/lib/pdf4me/models/key_value_pair_string_object.rb +0 -197
  169. data/lib/pdf4me/models/key_value_pair_string_string.rb +0 -197
  170. data/lib/pdf4me/models/merge.rb +0 -209
  171. data/lib/pdf4me/models/merge_action.rb +0 -190
  172. data/lib/pdf4me/models/merge_res.rb +0 -188
  173. data/lib/pdf4me/models/ocr_action.rb +0 -259
  174. data/lib/pdf4me/models/optimize.rb +0 -209
  175. data/lib/pdf4me/models/page_selection.rb +0 -246
  176. data/lib/pdf4me/models/pdf4me_action.rb +0 -259
  177. data/lib/pdf4me/models/pdf4me_document.rb +0 -511
  178. data/lib/pdf4me/models/pdf4me_exception.rb +0 -189
  179. data/lib/pdf4me/models/pdf_a_action.rb +0 -297
  180. data/lib/pdf4me/models/pdf_font.rb +0 -213
  181. data/lib/pdf4me/models/pricing.rb +0 -278
  182. data/lib/pdf4me/models/produce_documents.rb +0 -251
  183. data/lib/pdf4me/models/produce_documents_res.rb +0 -191
  184. data/lib/pdf4me/models/produce_output.rb +0 -221
  185. data/lib/pdf4me/models/recognize_document.rb +0 -209
  186. data/lib/pdf4me/models/recognize_document_res.rb +0 -198
  187. data/lib/pdf4me/models/rectangle.rb +0 -215
  188. data/lib/pdf4me/models/rgb_set.rb +0 -206
  189. data/lib/pdf4me/models/rotate.rb +0 -221
  190. data/lib/pdf4me/models/run_job_res.rb +0 -215
  191. data/lib/pdf4me/models/signature_config.rb +0 -179
  192. data/lib/pdf4me/models/split.rb +0 -207
  193. data/lib/pdf4me/models/split_action.rb +0 -219
  194. data/lib/pdf4me/models/split_res.rb +0 -190
  195. data/lib/pdf4me/models/stamp.rb +0 -209
  196. data/lib/pdf4me/models/stamp_action.rb +0 -387
  197. data/lib/pdf4me/models/stamp_res.rb +0 -189
  198. data/lib/pdf4me/models/storage_folder.rb +0 -239
  199. data/lib/pdf4me/models/text.rb +0 -320
  200. data/lib/pdf4me/models/transform.rb +0 -263
  201. data/lib/pdf4me/models/translate.rb +0 -207
  202. data/lib/pdf4me/models/user_fingerprint.rb +0 -197
  203. data/lib/pdf4me/models/version_res.rb +0 -188
  204. data/pdf4me.gemspec +0 -47
  205. data/spec/api/convert_api_spec.rb +0 -60
  206. data/spec/api/document_api_spec.rb +0 -83
  207. data/spec/api/extract_api_spec.rb +0 -60
  208. data/spec/api/image_api_spec.rb +0 -62
  209. data/spec/api/job_api_spec.rb +0 -82
  210. data/spec/api/management_api_spec.rb +0 -57
  211. data/spec/api/merge_api_spec.rb +0 -60
  212. data/spec/api/ocr_api_spec.rb +0 -47
  213. data/spec/api/optimize_api_spec.rb +0 -60
  214. data/spec/api/pdf_a_api_spec.rb +0 -60
  215. data/spec/api/split_api_spec.rb +0 -60
  216. data/spec/api/stamp_api_spec.rb +0 -63
  217. data/spec/api_client_spec.rb +0 -226
  218. data/spec/configuration_spec.rb +0 -42
  219. data/spec/models/action_flow_spec.rb +0 -42
  220. data/spec/models/api_usage_res_spec.rb +0 -60
  221. data/spec/models/archive_config_spec.rb +0 -60
  222. data/spec/models/archive_job_req_spec.rb +0 -66
  223. data/spec/models/archive_job_res_spec.rb +0 -48
  224. data/spec/models/color_spec.rb +0 -54
  225. data/spec/models/convert_to_pdf_action_spec.rb +0 -62
  226. data/spec/models/convert_to_pdf_res_spec.rb +0 -42
  227. data/spec/models/convert_to_pdf_spec.rb +0 -54
  228. data/spec/models/create_images_res_spec.rb +0 -42
  229. data/spec/models/create_images_spec.rb +0 -54
  230. data/spec/models/create_pdf_a_res_spec.rb +0 -42
  231. data/spec/models/create_pdf_a_spec.rb +0 -54
  232. data/spec/models/custom_cms_config_spec.rb +0 -132
  233. data/spec/models/doc_action_spec.rb +0 -42
  234. data/spec/models/doc_log_spec.rb +0 -70
  235. data/spec/models/doc_metadata_spec.rb +0 -90
  236. data/spec/models/document_spec.rb +0 -90
  237. data/spec/models/drop_document_req_spec.rb +0 -118
  238. data/spec/models/drop_document_res_spec.rb +0 -84
  239. data/spec/models/execution_trigger_spec.rb +0 -54
  240. data/spec/models/extract_action_spec.rb +0 -48
  241. data/spec/models/extract_res_spec.rb +0 -42
  242. data/spec/models/extract_spec.rb +0 -54
  243. data/spec/models/get_document_list_res_spec.rb +0 -72
  244. data/spec/models/get_document_req_spec.rb +0 -78
  245. data/spec/models/get_document_res_spec.rb +0 -78
  246. data/spec/models/i_form_file_spec.rb +0 -72
  247. data/spec/models/image_action_spec.rb +0 -206
  248. data/spec/models/image_spec.rb +0 -88
  249. data/spec/models/job_config_res_spec.rb +0 -42
  250. data/spec/models/job_config_spec.rb +0 -102
  251. data/spec/models/job_spec.rb +0 -54
  252. data/spec/models/key_value_pair_string_object_spec.rb +0 -48
  253. data/spec/models/key_value_pair_string_string_spec.rb +0 -48
  254. data/spec/models/merge_action_spec.rb +0 -42
  255. data/spec/models/merge_res_spec.rb +0 -42
  256. data/spec/models/merge_spec.rb +0 -54
  257. data/spec/models/notification_spec.rb +0 -48
  258. data/spec/models/ocr_action_spec.rb +0 -70
  259. data/spec/models/optimize_action_spec.rb +0 -228
  260. data/spec/models/optimize_res_spec.rb +0 -48
  261. data/spec/models/optimize_spec.rb +0 -54
  262. data/spec/models/page_selection_spec.rb +0 -58
  263. data/spec/models/page_spec.rb +0 -78
  264. data/spec/models/pdf4me_action_spec.rb +0 -70
  265. data/spec/models/pdf4me_document_spec.rb +0 -202
  266. data/spec/models/pdf4me_exception_spec.rb +0 -42
  267. data/spec/models/pdf_a_action_spec.rb +0 -86
  268. data/spec/models/pdf_font_spec.rb +0 -48
  269. data/spec/models/pricing_spec.rb +0 -80
  270. data/spec/models/produce_documents_res_spec.rb +0 -42
  271. data/spec/models/produce_documents_spec.rb +0 -78
  272. data/spec/models/produce_output_spec.rb +0 -46
  273. data/spec/models/recognize_document_res_spec.rb +0 -48
  274. data/spec/models/recognize_document_spec.rb +0 -54
  275. data/spec/models/rectangle_spec.rb +0 -60
  276. data/spec/models/rgb_set_spec.rb +0 -54
  277. data/spec/models/rotate_spec.rb +0 -54
  278. data/spec/models/run_job_res_spec.rb +0 -54
  279. data/spec/models/signature_config_spec.rb +0 -36
  280. data/spec/models/split_action_spec.rb +0 -60
  281. data/spec/models/split_res_spec.rb +0 -42
  282. data/spec/models/split_spec.rb +0 -54
  283. data/spec/models/stamp_action_spec.rb +0 -142
  284. data/spec/models/stamp_res_spec.rb +0 -42
  285. data/spec/models/stamp_spec.rb +0 -54
  286. data/spec/models/storage_folder_spec.rb +0 -58
  287. data/spec/models/text_spec.rb +0 -104
  288. data/spec/models/transform_spec.rb +0 -72
  289. data/spec/models/translate_spec.rb +0 -48
  290. data/spec/models/user_fingerprint_spec.rb +0 -48
  291. data/spec/models/version_res_spec.rb +0 -42
@@ -0,0 +1,10 @@
1
+ module Pdf4me
2
+ class Optimize < ComplexAction
3
+ ATTRIBUTES = %w|document optimize_action|
4
+ attr_accessor *ATTRIBUTES
5
+
6
+ def path
7
+ '/Optimize/Optimize'
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,42 @@
1
+ module Pdf4me
2
+ class OptimizeByProfile < WrapperAction
3
+ attr_accessor(
4
+ :file,
5
+ :profile,
6
+ :save_path
7
+ )
8
+ validates_presence_of(
9
+ :file,
10
+ :profile,
11
+ :save_path
12
+ )
13
+ validates_inclusion_of(
14
+ :profile, in: %w|default web print max|,
15
+ message: 'is invalid, valid values are default, web, print, max.'
16
+ )
17
+
18
+ def defaults
19
+ {
20
+ profile: 'default'
21
+ }
22
+ end
23
+
24
+ def path
25
+ '/Optimize/OptimizeByProfile'
26
+ end
27
+
28
+ def save_path
29
+ @save_path ||= File.join(File.dirname(file), "#{File.basename(file, ".*")}-optimized.pdf")
30
+ end
31
+
32
+ def call_api
33
+ client.multipart_post(
34
+ path,
35
+ file: File.open(file, 'rb'),
36
+ profile: profile
37
+ ) do |request|
38
+ download(request, save_path)
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,55 @@
1
+ module Pdf4me
2
+ class SplitByPageNr < WrapperAction
3
+ attr_accessor(
4
+ :file,
5
+ :page_number,
6
+ :first_pdf,
7
+ :second_pdf
8
+ )
9
+
10
+ validates_presence_of :file
11
+ validates_numericality_of :page_number
12
+
13
+ def path
14
+ '/Split/SplitByPageNr'
15
+ end
16
+
17
+ def first_pdf
18
+ @first_pdf ||= File.join(File.dirname(file), "#{File.basename(file, ".*")}-first.pdf")
19
+ end
20
+
21
+ def second_pdf
22
+ @second_pdf ||= File.join(File.dirname(file), "#{File.basename(file, ".*")}-second.pdf")
23
+ end
24
+
25
+ def call_api
26
+ client.multipart_post(
27
+ path,
28
+ file: File.open(file, 'rb'),
29
+ pageNr: page_number
30
+ )
31
+ end
32
+
33
+ def run
34
+ validate!
35
+ response = call_api
36
+ response.success?.tap do |result|
37
+ result && save_encoded_files(response)
38
+ end
39
+ end
40
+
41
+ private
42
+
43
+ def save_encoded_files(response)
44
+ content = parsed_json_response(response.body)
45
+
46
+ File.open(first_pdf, 'wb') do |f|
47
+ f.write(Base64.decode64(content[0]))
48
+ end
49
+
50
+ File.open(second_pdf, 'wb') do |f|
51
+ f.write(Base64.decode64(content[1]))
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,63 @@
1
+ module Pdf4me
2
+ class TextStamp < WrapperAction
3
+ attr_accessor(
4
+ :position_x,
5
+ :position_y,
6
+ :text,
7
+ :pages,
8
+ :file,
9
+ :save_path
10
+ )
11
+ validates_presence_of(
12
+ :text,
13
+ :pages
14
+ )
15
+ validates_inclusion_of(
16
+ :position_x,
17
+ in: %w|left center right|,
18
+ message: 'is invalid, valid values are left, center, right.'
19
+ )
20
+
21
+ validates_inclusion_of(
22
+ :position_y,
23
+ in: %w|top middle bottom|,
24
+ message: 'is invalid, valid values are top, middle, bottom.'
25
+ )
26
+
27
+ validate :page_attributes
28
+
29
+ def save_path
30
+ @save_path ||= File.join(File.dirname(file), "#{File.basename(file, ".*")}-stamped.pdf")
31
+ end
32
+
33
+ def path
34
+ '/Stamp/TextStamp'
35
+ end
36
+
37
+ def call_api
38
+ client.multipart_post(
39
+ path,
40
+ file: File.open(file, 'rb'),
41
+ alignX: position_x,
42
+ alignY: position_y,
43
+ text: text,
44
+ pages: pages.join(',')
45
+ ) do |request|
46
+ download(request, save_path)
47
+ end
48
+ end
49
+
50
+ private
51
+
52
+ def page_attributes
53
+ if pages.empty?
54
+ errors.add(:pages, 'must be valid numeric value')
55
+ end
56
+
57
+ unless pages.all? {|i| i.is_a?(Integer) }
58
+ errors.add(:pages, 'contains values that are not numbers')
59
+ end
60
+ end
61
+
62
+ end
63
+ end
@@ -0,0 +1,65 @@
1
+ require 'active_model'
2
+
3
+ module Pdf4me
4
+ class WrapperAction
5
+ include ActiveModel::Validations
6
+
7
+ attr_reader :client
8
+
9
+ def client
10
+ @client ||= Client.default
11
+ end
12
+
13
+ def assign_attributes(attributes = {})
14
+ attributes.to_h.each do |key, value|
15
+ writer_method = "#{key}="
16
+ send(writer_method, value) if respond_to?(writer_method)
17
+ end
18
+ end
19
+
20
+ def initialize(attrs = {})
21
+ attributes = defaults.merge(attrs)
22
+ assign_attributes(attributes)
23
+ end
24
+
25
+ def defaults
26
+ {}
27
+ end
28
+
29
+ def run
30
+ return false if invalid?
31
+ call_api.success?
32
+ end
33
+
34
+ def run!
35
+ validate!
36
+ call_api.success?
37
+ end
38
+
39
+ protected
40
+
41
+ def download(request, path)
42
+ downloaded_file = File.open(path, 'wb')
43
+ encoding = nil
44
+
45
+ request.on_headers do |response|
46
+ if response.code != 200
47
+ fail InvalidStatusCode.new(code: response.code, error: response.body)
48
+ end
49
+ encoding = response.body.encoding
50
+ end
51
+ request.on_body do |chunk|
52
+ chunk.force_encoding(encoding)
53
+ downloaded_file.write(chunk)
54
+ end
55
+
56
+ request.on_complete do |response|
57
+ downloaded_file.close
58
+ end
59
+ end
60
+
61
+ def parsed_json_response(response)
62
+ JSON.parse(response, symbolize_names: true)
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,87 @@
1
+ module Pdf4me
2
+ class Client
3
+ attr_accessor :config
4
+ attr_reader :logger
5
+
6
+ def initialize(config = Configuration.default)
7
+ @config = config
8
+ end
9
+
10
+ def self.default
11
+ @@default ||= Client.new
12
+ end
13
+
14
+ def logger
15
+ @logger ||= config.logger
16
+ end
17
+
18
+ def request_url(path)
19
+ URI.join(config.base_url, path)
20
+ end
21
+
22
+ def multipart_post(path, params)
23
+ request = multipart_request(path, params)
24
+
25
+ if block_given?
26
+ yield request
27
+ end
28
+
29
+ request.run.tap do |response|
30
+ validate_response!(response)
31
+ end
32
+ end
33
+
34
+ def post(path, params)
35
+ logger.debug(params)
36
+ request = Typhoeus::Request.new(
37
+ request_url(path),
38
+ method: :post,
39
+ body: params,
40
+ headers: {
41
+ 'Accept': 'application/json',
42
+ 'Content-Type': 'application/json',
43
+ 'Authorization': "Basic #{config.token}",
44
+ 'User-Agent': "Pdf4meClient/#{VERSION}/ruby"
45
+ },
46
+ timeout: 0,
47
+ ssl_verifypeer: true,
48
+ ssl_verifyhost: 2,
49
+ verbose: config.debugging
50
+ )
51
+
52
+ request.run.tap do |response|
53
+ validate_response!(response)
54
+ end
55
+ end
56
+
57
+ private
58
+
59
+ def multipart_request(path, params)
60
+ Typhoeus::Request.new(
61
+ request_url(path),
62
+ method: :post,
63
+ body: params,
64
+ headers: {
65
+ 'Accept': 'application/octet-stream',
66
+ 'Content-Type': 'multipart/form-data',
67
+ 'Authorization': "Basic #{config.token}",
68
+ 'User-Agent': "Pdf4meClient/#{VERSION}/ruby"
69
+ },
70
+ timeout: 0,
71
+ ssl_verifypeer: true,
72
+ ssl_verifyhost: 2,
73
+ verbose: config.debugging
74
+ )
75
+ end
76
+
77
+ def validate_response!(response)
78
+ unless response.success?
79
+ if response.timed_out?
80
+ fail ServerTimedOut.new('Server timed out')
81
+ else
82
+ fail ServerError.new(code: response.code, error: response.body)
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -1,109 +1,30 @@
1
- require 'uri'
2
- require 'adal'
3
-
4
1
  module Pdf4me
5
2
  class Configuration
6
-
7
- # Defines url host
8
- attr_accessor :host
9
-
10
- attr_accessor :app_id
11
-
12
- attr_accessor :app_secret
13
-
14
- # Defines the access token (Bearer) used with OAuth2.
15
- attr_accessor :access_token
16
-
17
- # Set this to enable/disable debugging. When enabled (set to true), HTTP request/response
18
- # details will be logged with `logger.debug` (see the `logger` attribute).
19
- # Default to false.
20
- #
21
- # @return [true, false]
22
- attr_accessor :debugging
23
-
24
- # Defines the logger used for debugging.
25
- # Default to `Rails.logger` (when in Rails) or logging to STDOUT.
26
- #
27
- # @return [#debug]
28
- attr_accessor :logger
29
-
30
- # Defines the temporary folder to store downloaded files
31
- # (for API endpoints that have file response).
32
- # Default to use `Tempfile`.
33
- #
34
- # @return [String]
35
- attr_accessor :temp_folder_path
36
-
37
- # The time limit for HTTP request in seconds.
38
- # Default to 0 (never times out).
39
- attr_accessor :timeout
40
-
41
- # Set this to false to skip client side validation in the operation.
42
- # Default to true.
43
- # @return [true, false]
44
- attr_accessor :client_side_validation
45
-
46
- # Set this to customize parameters encoding of array parameter with multi collectionFormat.
47
- # Default to nil.
48
- #
49
- # @see The params_encoding option of Ethon. Related source code:
50
- # https://github.com/typhoeus/ethon/blob/master/lib/ethon/easy/queryable.rb#L96
51
- attr_accessor :params_encoding
52
-
53
- attr_accessor :inject_format
54
-
55
- attr_accessor :force_ending_format
56
-
57
- AZURE_TENANT = 'devynooxlive.onmicrosoft.com'.freeze
3
+ attr_accessor(
4
+ :host,
5
+ :token,
6
+ :debugging,
7
+ :logger
8
+ )
58
9
 
59
10
  def initialize
60
11
  @host = ''
61
- @timeout = 0
62
- @client_side_validation = true
63
- @params_encoding = nil
12
+ @token = ENV['PDF4ME_TOKEN']
64
13
  @debugging = false
65
- @inject_format = false
66
- @force_ending_format = false
67
14
  @logger = defined?(Rails) ? Rails.logger : Logger.new(STDOUT)
68
-
69
- yield(self) if block_given?
70
15
  end
71
16
 
72
- # The default Configuration object.
73
17
  def self.default
74
18
  @@default ||= Configuration.new
75
19
  end
76
20
 
77
- def configure
78
- yield(self) if block_given?
79
- end
80
-
81
21
  def host=(host)
82
- # remove http(s):// and anything after a slash
83
- @host = host.sub(/https?:\/\//, '').split('/').first
22
+ @host = host.sub(/https?:\/\//, '').split('/').first.freeze
84
23
  end
85
24
 
86
25
  def base_url
87
26
  url = "https://#{host}"
88
- URI.encode(url)
89
- end
90
-
91
- def access_token
92
- @access_token ||= generate_access_token
93
- end
94
-
95
- private
96
-
97
- def generate_access_token
98
- client_credentials = ADAL::ClientCredential.new(app_id, app_secret)
99
- auth_context = ADAL::AuthenticationContext.new(
100
- ADAL::Authority::WORLD_WIDE_AUTHORITY,
101
- AZURE_TENANT
102
- )
103
- auth_context.acquire_token_for_client(
104
- app_id,
105
- client_credentials
106
- ).fields['access_token']
27
+ URI.encode(url).freeze
107
28
  end
108
29
  end
109
30
  end