ilovepdf 1.3.0 → 1.3.3

Sign up to get free protection for your applications and to get access to all the features.
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 +5 -4
  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,11 @@
1
+ module Ilovepdf
2
+ module Signature
3
+ class SignatureElement
4
+ include FileElement
5
+ def initialize(file)
6
+ super(file)
7
+ @type = :signature
8
+ end
9
+ end
10
+ end
11
+ end
@@ -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.0"
2
+ VERSION = "1.3.3"
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