ilovepdf 1.3.1 → 1.3.4

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 (48) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +1 -1
  3. data/LICENSE +0 -0
  4. data/README.md +21 -1
  5. data/ilovepdf.gemspec +4 -3
  6. data/lib/ilovepdf/element.rb +79 -0
  7. data/lib/ilovepdf/errors.rb +8 -1
  8. data/lib/ilovepdf/file.rb +1 -1
  9. data/lib/ilovepdf/ilovepdf.rb +9 -5
  10. data/lib/ilovepdf/refinements.rb +30 -0
  11. data/lib/ilovepdf/request_payload/form_url_encoded.rb +54 -0
  12. data/lib/ilovepdf/servers.rb +7 -0
  13. data/lib/ilovepdf/signature/date_element.rb +16 -0
  14. data/lib/ilovepdf/signature/file_element.rb +60 -0
  15. data/lib/ilovepdf/signature/initials_element.rb +11 -0
  16. data/lib/ilovepdf/signature/input_element.rb +27 -0
  17. data/lib/ilovepdf/signature/management.rb +103 -0
  18. data/lib/ilovepdf/signature/name_element.rb +11 -0
  19. data/lib/ilovepdf/signature/receiver.rb +87 -0
  20. data/lib/ilovepdf/signature/signature_element.rb +11 -0
  21. data/lib/ilovepdf/signature/text_element.rb +17 -0
  22. data/lib/ilovepdf/signature.rb +5 -0
  23. data/lib/ilovepdf/signature_file.rb +10 -0
  24. data/lib/ilovepdf/task.rb +60 -15
  25. data/lib/ilovepdf/tool/compress.rb +2 -2
  26. data/lib/ilovepdf/tool/extract.rb +2 -2
  27. data/lib/ilovepdf/tool/imagepdf.rb +2 -2
  28. data/lib/ilovepdf/tool/merge.rb +2 -2
  29. data/lib/ilovepdf/tool/officepdf.rb +2 -2
  30. data/lib/ilovepdf/tool/pagenumber.rb +2 -2
  31. data/lib/ilovepdf/tool/pdfa.rb +2 -2
  32. data/lib/ilovepdf/tool/pdfjpg.rb +31 -9
  33. data/lib/ilovepdf/tool/protect.rb +2 -2
  34. data/lib/ilovepdf/tool/repair.rb +2 -2
  35. data/lib/ilovepdf/tool/rotate.rb +2 -2
  36. data/lib/ilovepdf/tool/signature.rb +134 -0
  37. data/lib/ilovepdf/tool/split.rb +2 -2
  38. data/lib/ilovepdf/tool/unlock.rb +2 -2
  39. data/lib/ilovepdf/tool/validate_pdfa.rb +2 -2
  40. data/lib/ilovepdf/tool/watermark.rb +33 -15
  41. data/lib/ilovepdf/version.rb +1 -1
  42. data/lib/ilovepdf.rb +19 -0
  43. data/samples/chained_task.rb +20 -0
  44. data/samples/signature_advanced.rb +74 -0
  45. data/samples/signature_basic.rb +21 -0
  46. data/samples/signature_management.rb +42 -0
  47. data/uploads/sample_pdf.pdf +0 -0
  48. metadata +40 -5
@@ -0,0 +1,17 @@
1
+ module Ilovepdf
2
+ module Signature
3
+ class TextElement
4
+ include FileElement
5
+ def initialize(file,text)
6
+ super(file)
7
+ @type = :text
8
+ @content = text
9
+ end
10
+
11
+ def content=(value)
12
+ raise ::Ilovepdf::Errors::ArgumentError.new("value must be a String type of object") unless s.is_a?(String)
13
+ @content = value
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,5 @@
1
+ module Ilovepdf
2
+ module Signature
3
+
4
+ end
5
+ end
@@ -0,0 +1,10 @@
1
+ require 'ilovepdf/file'
2
+ module Ilovepdf
3
+ class SignatureFile < File
4
+ attr_accessor :recipients
5
+ def recipients
6
+ @recipients ||= []
7
+ end
8
+ end
9
+ end
10
+ end
data/lib/ilovepdf/task.rb CHANGED
@@ -8,16 +8,50 @@ module Ilovepdf
8
8
  API_PARAMS = []
9
9
  DOWNLOAD_INFO = [:output_filename, :output_file, :output_filetype]
10
10
 
11
- def initialize(public_key, secret_key)
11
+ def initialize(public_key, secret_key, make_start=false)
12
12
  super(public_key, secret_key)
13
- response = perform_create_request
14
- self.worker_server = 'https://' + response.body['server']
15
- self.task_id = response.body['task']
16
-
17
13
  # Assign default values
18
14
  self.ignore_errors = true
19
15
  self.ignore_password = true
20
16
  self.try_pdf_repair = true
17
+
18
+ @chained_task = (make_start == false)
19
+ if make_start
20
+ response = perform_start_request
21
+ self.worker_server = "#{Servers::PROTOCOL}://" + response.body['server']
22
+ self.task_id = response.body['task']
23
+ end
24
+ end
25
+
26
+ def chained_task?
27
+ @chained_task
28
+ end
29
+
30
+ def next(next_tool)
31
+ body = {
32
+ v: API_VERSION,
33
+ task: self.task_id,
34
+ tool: next_tool,
35
+ }
36
+ extracted_body = RequestPayload::FormUrlEncoded.new(body).extract_to_s
37
+
38
+ begin
39
+ response = send_request('post', "task/next", body: extracted_body)
40
+ no_task_present = !response.body.key?('task') || response.body['task'].to_s.empty?
41
+ raise StartError.new(response, custom_msg: "No task assigned on chained start") if no_task_present
42
+ rescue ApiError => e
43
+ raise StartError.new(e, custom_msg: "Error on start chained task")
44
+ end
45
+
46
+ next_task = self.new_task(next_tool)
47
+ next_task.send(:"worker_server=", worker_server)
48
+ next_task.send(:"task_id=", response.body['task'])
49
+
50
+ response.body['files'].each do |server_filename, filename|
51
+ next_task.files << File.new(server_filename, filename)
52
+ end
53
+
54
+ next_task
21
55
  end
22
56
 
23
57
  def assign_meta_value(key, value)
@@ -116,7 +150,7 @@ module Ilovepdf
116
150
  content_disposition = response.headers[:content_disposition]
117
151
 
118
152
  if match_data = /filename\*\=utf-8\'\'([\W\w]+)/.match(content_disposition)
119
- filename = URI.unescape(match_data[1].gsub('"', ''))
153
+ filename = URI.decode_www_form_component(match_data[1].gsub('"', ''))
120
154
  else
121
155
  match_data = / .*filename=\"([\W\w]+)\"/.match(content_disposition)
122
156
  filename = match_data[1].gsub('"', '')
@@ -135,7 +169,7 @@ module Ilovepdf
135
169
  server_filename: file.server_filename,
136
170
  v: API_VERSION
137
171
  }
138
- response = send_request('post', 'upload/delete', body: body)
172
+ response = send_request('delete', "upload/#{self.task_id}/#{file.server_filename}", body: body)
139
173
  end
140
174
 
141
175
  def perform_filedownload_request
@@ -156,15 +190,23 @@ module Ilovepdf
156
190
  }.merge(file_submit_params)
157
191
  .merge(extract_api_params)
158
192
 
193
+
194
+ extracted_body = RequestPayload::FormUrlEncoded.new(body).extract_to_s
195
+
159
196
  response = send_request('post', 'process', body: body)
160
197
  response
161
198
  end
162
199
 
163
- def perform_create_request
164
- request_opts = {
165
- body: {v: API_VERSION}
200
+ def perform_start_request
201
+ body = {
202
+ v: API_VERSION
166
203
  }
167
- response = send_request('get', 'start/' + self.tool.to_s, request_opts)
204
+ extracted_body = RequestPayload::FormUrlEncoded.new(body).extract_to_s
205
+ response = send_request('get', "start/#{self.tool}", body: extracted_body)
206
+ is_server_defined = response.body.key?('server') && !response.body['server'].to_s.empty?
207
+ raise ::Ilovepdf::Errors::StartError.new("No server assigned on start") if !is_server_defined
208
+
209
+ response
168
210
  end
169
211
 
170
212
  def perform_upload_request filepath
@@ -202,11 +244,14 @@ module Ilovepdf
202
244
  h
203
245
  end
204
246
 
247
+ def extract_api_param_value(param_name)
248
+ send(param_name)
249
+ end
250
+
205
251
  def extract_api_params
206
- {}.tap do |h|
207
- self.class::API_PARAMS.each{ |param_name|
208
- h[param_name] = send(param_name)
209
- }
252
+ self.class::API_PARAMS.inject({}) do |result,param_name|
253
+ result[param_name] = extract_api_param_value(param_name)
254
+ result
210
255
  end
211
256
  end
212
257
  end
@@ -6,9 +6,9 @@ module Ilovepdf
6
6
 
7
7
  COMPRESSION_LEVEL_VALUES = ["extreme", "recommended", "low"]
8
8
 
9
- def initialize(public_key, secret_key)
9
+ def initialize(public_key, secret_key, make_start=true)
10
10
  self.tool = :compress
11
- super(public_key, secret_key)
11
+ super(public_key, secret_key, make_start)
12
12
  end
13
13
 
14
14
  def compression_level= level
@@ -4,9 +4,9 @@ module Ilovepdf
4
4
  API_PARAMS = [:detailed]
5
5
  attr_accessor *API_PARAMS
6
6
 
7
- def initialize(public_key, secret_key)
7
+ def initialize(public_key, secret_key, make_start=true)
8
8
  self.tool = :extract
9
- super(public_key, secret_key)
9
+ super(public_key, secret_key, make_start)
10
10
  end
11
11
 
12
12
  def detailed
@@ -7,10 +7,10 @@ module Ilovepdf
7
7
  ORIENTATION_VALUES = ['portrait', 'landscape']
8
8
  PAGESIZE_VALUES = ['fit', 'A4', 'letter']
9
9
 
10
- def initialize(public_key, secret_key)
10
+ def initialize(public_key, secret_key, make_start=true)
11
11
  self.tool = :imagepdf
12
12
  self.merge_after = true
13
- super(public_key, secret_key)
13
+ super(public_key, secret_key, make_start)
14
14
  end
15
15
 
16
16
  def orientation=(new_val)
@@ -4,9 +4,9 @@ module Ilovepdf
4
4
  API_PARAMS = []
5
5
  attr_accessor *API_PARAMS
6
6
 
7
- def initialize(public_key, secret_key)
7
+ def initialize(public_key, secret_key, make_start=true)
8
8
  self.tool = :merge
9
- super(public_key, secret_key)
9
+ super(public_key, secret_key, make_start)
10
10
  end
11
11
  end
12
12
  end
@@ -4,9 +4,9 @@ module Ilovepdf
4
4
  API_PARAMS = []
5
5
  attr_accessor *API_PARAMS
6
6
 
7
- def initialize(public_key, secret_key)
7
+ def initialize(public_key, secret_key, make_start=true)
8
8
  self.tool = :officepdf
9
- super(public_key, secret_key)
9
+ super(public_key, secret_key, make_start)
10
10
  end
11
11
  end
12
12
  end
@@ -16,9 +16,9 @@ module Ilovepdf
16
16
  'WenQuanYi Zen Hei', 'Lohit Marathi'
17
17
  ]
18
18
 
19
- def initialize(public_key, secret_key)
19
+ def initialize(public_key, secret_key, make_start=true)
20
20
  self.tool = :pagenumber
21
- super(public_key, secret_key)
21
+ super(public_key, secret_key, make_start)
22
22
  end
23
23
 
24
24
  def vertical_position=(new_val)
@@ -8,9 +8,9 @@ module Ilovepdf
8
8
  'pdfa-2a', 'pdfa-3b', 'pdfa-3u', 'pdfa-3a'
9
9
  ]
10
10
 
11
- def initialize(public_key, secret_key)
11
+ def initialize(public_key, secret_key, make_start=true)
12
12
  self.tool = :pdfa
13
- super(public_key, secret_key)
13
+ super(public_key, secret_key, make_start)
14
14
  self.allow_downgrade = true
15
15
  end
16
16
 
@@ -1,22 +1,44 @@
1
1
  module Ilovepdf
2
2
  module Tool
3
3
  class Pdfjpg < ::Ilovepdf::Task
4
- API_PARAMS = [:mode]
4
+ API_PARAMS = [
5
+ :view_width, :view_height, :navigation_timeout, :delay,
6
+ :page_size, :page_orientation, :page_margin, :remove_popups,
7
+ :single_page
8
+ ]
9
+ attr_accessor *API_PARAMS
5
10
 
6
- MODE_VALUES = ['pages', 'extract']
11
+ PAGE_SIZE_VALUES = ['A3', 'A4', 'A5', 'A6', 'Letter']
12
+ PAGE_ORIENTATION_VALUES = ['portrait', 'landscape']
7
13
 
8
- def initialize(public_key, secret_key)
14
+ def initialize(public_key, secret_key, make_start=true)
9
15
  self.tool = :pdfjpg
10
- super(public_key, secret_key)
16
+ super(public_key, secret_key, make_start)
17
+
18
+ # Assign default values
19
+ self.view_width = 1920
20
+ self.navigation_timeout = 10
21
+ self.delay = 2
22
+ self.page_margin = 0
23
+ # raise Errors::ArgumentEnumError.new(CONFORMANCE_VALUES) unless CONFORMANCE_VALUES.include? new_val
11
24
  end
12
25
 
13
- def mode=(new_val)
14
- raise Errors::ArgumentEnumError.new(MODE_VALUES) unless MODE_VALUES.include?(new_val)
15
- @mode = new_val
26
+ def navigation_timeout=(new_val)
16
27
  end
17
- def mode
18
- @mode
28
+
29
+ def delay=(new_val)
19
30
  end
31
+
32
+ def page_size=(new_val)
33
+ end
34
+
35
+ def page_orientation=(new_val)
36
+ end
37
+
38
+ def addUrl(file_url)
39
+ add_file_from_url(file_url)
40
+ end
41
+
20
42
  end
21
43
  end
22
44
  end
@@ -4,9 +4,9 @@ module Ilovepdf
4
4
  API_PARAMS = [:password]
5
5
  attr_accessor *API_PARAMS
6
6
 
7
- def initialize(public_key, secret_key)
7
+ def initialize(public_key, secret_key, make_start=true)
8
8
  self.tool = :protect
9
- super(public_key, secret_key)
9
+ super(public_key, secret_key, make_start)
10
10
  end
11
11
  end
12
12
  end
@@ -3,9 +3,9 @@ module Ilovepdf
3
3
  class Repair < ::Ilovepdf::Task
4
4
  API_PARAMS = []
5
5
 
6
- def initialize(public_key, secret_key)
6
+ def initialize(public_key, secret_key, make_start=true)
7
7
  self.tool = :repair
8
- super(public_key, secret_key)
8
+ super(public_key, secret_key, make_start)
9
9
  end
10
10
  end
11
11
  end
@@ -3,9 +3,9 @@ module Ilovepdf
3
3
  class Rotate < ::Ilovepdf::Task
4
4
  API_PARAMS = []
5
5
 
6
- def initialize(public_key, secret_key)
6
+ def initialize(public_key, secret_key, make_start=true)
7
7
  self.tool = :rotate
8
- super(public_key, secret_key)
8
+ super(public_key, secret_key, make_start)
9
9
  end
10
10
  end
11
11
  end
@@ -0,0 +1,134 @@
1
+ module Ilovepdf
2
+ module Tool
3
+ class Signature < ::Ilovepdf::Task
4
+ using ::Ilovepdf::Refinements::Crush
5
+
6
+ undef_method :next,:chained_task?,:enable_file_encryption,:download,
7
+ :delete!,:perform_filedownload_request, :assign_meta_value,
8
+ :perform_process_request, :ignore_password, :ignore_errors,
9
+ :try_pdf_repair, :packaged_filename, :output_filename
10
+
11
+ API_PARAMS = [:brand_name,:brand_logo,
12
+ :language,:lock_order,
13
+ :message_signer,:subject_signer,:uuid_visible,:expiration_days,
14
+ :signer_reminders,:signer_reminder_days_cycle,:verify_enabled ]
15
+
16
+ attr_accessor *API_PARAMS
17
+
18
+ def initialize(public_key, secret_key, make_start=true)
19
+ self.tool = :sign
20
+ super(public_key, secret_key, make_start)
21
+ end
22
+
23
+ def execute
24
+ @result = perform_process_request
25
+ end
26
+
27
+ def uuid_visible=(value)
28
+ @uuid_visible = !!value
29
+ end
30
+
31
+ def brand_name=(value)
32
+ raise ::Ilovepdf::Errors::UnsupportedFunctionalityError.new("Method not implemented")
33
+ end
34
+
35
+ def brand_logo=(value)
36
+ raise ::Ilovepdf::Errors::UnsupportedFunctionalityError.new("Method not implemented")
37
+ end
38
+
39
+ def add_receiver(receiver)
40
+ raise ::Ilovepdf::Errors::ArgumentError.new("value is not receiver") unless receiver.is_a?(Ilovepdf::Signature::Receiver)
41
+ @signers << receiver
42
+ end
43
+
44
+ def language=(value)
45
+ raise ::Ilovepdf::Errors::ArgumentError.new("value is not a string") unless value.is_a?(String)
46
+ @language = value
47
+ end
48
+
49
+ def lock_order=(value)
50
+ @lock_order = !!value ? "1" : "0"
51
+ end
52
+
53
+ def email_content(subject:,body:)
54
+ @subject_signer = subject
55
+ @message_signer = body
56
+ {subject: @subject_signer,body: @message_signer}
57
+ end
58
+
59
+ def expiration_days=(value)
60
+ raise ::Ilovepdf::Errors::ArgumentError.new("value is not an Integer") unless value.is_a?(Integer)
61
+ @expiration_days = value
62
+ end
63
+
64
+ def reminders=(value)
65
+ raise ::Ilovepdf::Errors::ArgumentError.new("value is not an Integer") unless value.is_a?(Integer)
66
+ if(value <= 0)
67
+ @signer_reminders = false
68
+ @signer_reminder_days_cycle = nil
69
+ else
70
+ @signer_reminders = true
71
+ @signer_reminder_days_cycle = value
72
+ end
73
+ value
74
+ end
75
+
76
+
77
+ def add_brand(name:,logo:)
78
+ brand_logo_file = perform_upload_request(logo)
79
+ @brand_logo = brand_logo_file.server_filename
80
+ @brand_name = name
81
+ end
82
+
83
+ def verify_enabled=(value)
84
+ @verify_enabled = !!value
85
+ end
86
+
87
+ def signers
88
+ @signers ||= []
89
+ end
90
+
91
+ def <<(receiver)
92
+ raise ::Ilovepdf::Errors::ArgumentError.new("value is not an Ilovepdf::Signature::Receive") unless receiver.is_a?(::Ilovepdf::Signature::Receiver)
93
+ @signers ||= []
94
+ @signers << receiver
95
+ end
96
+
97
+ def extract_api_params
98
+ params = super
99
+ params[:task] = task_id
100
+ params[:files] = files.map do |file|
101
+ {server_filename: file.server_filename,filename: file.filename}
102
+ end
103
+ params[:signers] = signers.map do |signer|
104
+ {
105
+ name: signer.name,
106
+ email: signer.email,
107
+ phone: signer.phone,
108
+ files: signer.elements.group_by do |element|
109
+ element.file.server_filename
110
+ end.inject([]) do |result,(server_filename,elements)|
111
+ result << {
112
+ server_filename: server_filename,
113
+ elements: elements.map(&:to_h)
114
+ }
115
+ result
116
+ end,
117
+ type: signer.type,
118
+ access_code: signer.access_code,
119
+ force_signature_type: signer.force_signature_type
120
+ }
121
+ end
122
+ params.crush
123
+ end
124
+
125
+ def send_to_sign
126
+ body = extract_api_params
127
+ extracted_body = RequestPayload::FormUrlEncoded.new(body).extract_to_s
128
+ response = send_request('post', 'signature', body: extracted_body)
129
+ response
130
+ end
131
+
132
+ end
133
+ end
134
+ end
@@ -4,9 +4,9 @@ module Ilovepdf
4
4
  API_PARAMS = [:ranges, :split_mode, :fixed_range, :remove_pages, :merge_after]
5
5
  attr_accessor *API_PARAMS
6
6
 
7
- def initialize(public_key, secret_key)
7
+ def initialize(public_key, secret_key, make_start=true)
8
8
  self.tool = :split
9
- super(public_key, secret_key)
9
+ super(public_key, secret_key, make_start)
10
10
  end
11
11
 
12
12
  def fixed_range=(range=1)
@@ -3,9 +3,9 @@ module Ilovepdf
3
3
  class Unlock < ::Ilovepdf::Task
4
4
  API_PARAMS = []
5
5
 
6
- def initialize(public_key, secret_key)
6
+ def initialize(public_key, secret_key, make_start=true)
7
7
  self.tool = :unlock
8
- super(public_key, secret_key)
8
+ super(public_key, secret_key, make_start)
9
9
  end
10
10
  end
11
11
  end
@@ -8,9 +8,9 @@ module Ilovepdf
8
8
  'pdfa-2a', 'pdfa-3b', 'pdfa-3u', 'pdfa-3a'
9
9
  ]
10
10
 
11
- def initialize(public_key, secret_key)
11
+ def initialize(public_key, secret_key, make_start=true)
12
12
  self.tool = :validatepdfa
13
- super(public_key, secret_key)
13
+ super(public_key, secret_key, make_start)
14
14
  end
15
15
 
16
16
  def conformance= new_val
@@ -5,45 +5,63 @@ module Ilovepdf
5
5
  :mode, :text, :image, :pages, :vertical_position, :horizontal_position,
6
6
  :vertical_position_adjustment, :horizontal_position_adjustment, :mosaic,
7
7
  :rotate, :font_family, :font_style, :font_size, :font_color, :transparency,
8
- :layer
8
+ :layer, :elements
9
9
  ]
10
10
 
11
+ MODE_VALUES = ['image', 'text', 'multi']
12
+
11
13
  attr_accessor *API_PARAMS
12
14
 
13
- VERTICAL_POSITION_VALUES = ['bottom', 'center' ,'top']
14
- HORIZONTAL_POSITION_VALUES = ['left', 'middle', 'right']
15
- FONT_FAMILY_VALUES = ['Arial', 'Arial Unicode MS', 'Verdana', 'Courier',
16
- 'Times New Roman', 'Comic Sans MS', 'WenQuanYi Zen Hei',
17
- 'Lohit Marathi'
18
- ]
15
+ def initialize(public_key, secret_key, make_start=true)
16
+ self.tool = :watermark
17
+ super(public_key, secret_key, make_start)
18
+ end
19
19
 
20
- LAYER_VALUES = ['above', 'below']
20
+ def add_element(element)
21
+ raise Errors::ArgumentError.new("Element must be of type 'Ilovepdf::Element'") unless element.instance_of?(::Ilovepdf::Element)
22
+ elements << element
23
+ end
21
24
 
22
- def initialize(public_key, secret_key)
23
- self.tool = :watermark
24
- super(public_key, secret_key)
25
+ def elements
26
+ @elements ||= []
27
+ end
28
+
29
+ def mode=(new_val)
30
+ raise Errors::ArgumentEnumError.new(MODE_VALUES) unless MODE_VALUES.include? new_val
31
+ @mode = new_val
25
32
  end
26
33
 
27
34
  def vertical_position=(new_val)
28
- raise Errors::ArgumentEnumError.new(VERTICAL_POSITION_VALUES) unless VERTICAL_POSITION_VALUES.include? new_val
35
+ raise Errors::ArgumentEnumError.new(::Ilovepdf::Element::VERTICAL_POSITION_VALUES) unless ::Ilovepdf::Element::VERTICAL_POSITION_VALUES.include? new_val
29
36
  @vertical_position = new_val
30
37
  end
31
38
 
32
39
  def horizontal_position=(new_val)
33
- raise Errors::ArgumentEnumError.new(HORIZONTAL_POSITION_VALUES) unless HORIZONTAL_POSITION_VALUES.include? new_val
40
+ raise Errors::ArgumentEnumError.new(::Ilovepdf::Element::HORIZONTAL_POSITION_VALUES) unless ::Ilovepdf::Element::HORIZONTAL_POSITION_VALUES.include? new_val
34
41
  @horizontal_position = new_val
35
42
  end
36
43
 
37
44
  def font_family=(new_val)
38
- raise Errors::ArgumentEnumError.new(FONT_FAMILY_VALUES) unless FONT_FAMILY_VALUES.include? new_val
45
+ raise Errors::ArgumentEnumError.new(::Ilovepdf::Element::FONT_FAMILY_VALUES) unless ::Ilovepdf::Element::FONT_FAMILY_VALUES.include? new_val
39
46
  @font_family = new_val
40
47
  end
41
48
 
42
49
  def layer=(new_val)
43
- raise Errors::ArgumentEnumError.new(LAYER_VALUES) unless LAYER_VALUES.include? new_val
50
+ raise Errors::ArgumentEnumError.new(::Ilovepdf::Element::LAYER_VALUES) unless ::Ilovepdf::Element::LAYER_VALUES.include? new_val
44
51
  @layer = new_val
45
52
  end
46
53
 
54
+ private
55
+
56
+ # Do nothing; Use 'add_element' method to alter the elements array
57
+ def elements=(val)
58
+ end
59
+
60
+ def extract_api_param_value(param_name)
61
+ return self.elements.map{|elem| elem.to_api_hash } if param_name == :elements
62
+ super
63
+ end # /extract_api_param_value
64
+
47
65
  end
48
66
  end
49
67
  end
@@ -1,3 +1,3 @@
1
1
  module Ilovepdf
2
- VERSION = "1.3.1"
2
+ VERSION = "1.3.4"
3
3
  end
data/lib/ilovepdf.rb CHANGED
@@ -6,13 +6,18 @@ require 'securerandom'
6
6
  require 'jwt'
7
7
  require 'rest-client'
8
8
 
9
+
9
10
  # Base classes
11
+ require "ilovepdf/refinements"
12
+ require "ilovepdf/servers"
10
13
  require "ilovepdf/errors"
11
14
  require "ilovepdf/response"
12
15
  require "ilovepdf/helper"
13
16
  require "ilovepdf/ilovepdf"
14
17
  require "ilovepdf/file"
15
18
  require "ilovepdf/task"
19
+ require 'ilovepdf/element'
20
+ require 'ilovepdf/request_payload/form_url_encoded'
16
21
 
17
22
  # Load tool classes
18
23
  require 'ilovepdf/tool/compress'
@@ -30,6 +35,20 @@ require 'ilovepdf/tool/unlock'
30
35
  require 'ilovepdf/tool/watermark'
31
36
  require 'ilovepdf/tool/protect'
32
37
  require 'ilovepdf/tool/extract'
38
+ require 'ilovepdf/tool/signature'
39
+
40
+ # Load signature classes
41
+ require 'ilovepdf/signature'
42
+ require 'ilovepdf/signature/file_element'
43
+ require 'ilovepdf/signature/signature_element'
44
+ require 'ilovepdf/signature/initials_element'
45
+ require 'ilovepdf/signature/input_element'
46
+ require 'ilovepdf/signature/name_element'
47
+ require 'ilovepdf/signature/date_element'
48
+ require 'ilovepdf/signature/text_element'
49
+ require 'ilovepdf/signature/receiver'
50
+ require 'ilovepdf/signature/management'
51
+ require 'ilovepdf/tool/signature'
33
52
 
34
53
  module Ilovepdf
35
54
  class << self
@@ -0,0 +1,20 @@
1
+ require "bundler/setup"
2
+ require 'ilovepdf'
3
+
4
+ # You can call task class directly
5
+ my_task = Ilovepdf::Tool::Split.new("PUBLIC_KEY", "SECRET_KEY");
6
+
7
+ # File object keeps information about its server_filename and the properties you can set
8
+ file = my_task.add_file '/path/to/file/document.pdf'
9
+
10
+ # get the 2nd page
11
+ $splitTask.ranges = "2";
12
+
13
+ # Process files
14
+ response = my_task.execute
15
+
16
+ # and create a new task from last action
17
+ chained_task = my_task.next(:pdfjpg)
18
+
19
+ chained_task.execute
20
+ chained_task.download