pdf4me 1.0.1 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
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