pamfaxr 0.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.
- data/.bundle/config +2 -0
- data/.document +5 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +32 -0
- data/LICENSE +21 -0
- data/README.md +45 -0
- data/Rakefile +46 -0
- data/VERSION +1 -0
- data/examples/R-intro.pdf +0 -0
- data/examples/example.rb +93 -0
- data/lib/pamfaxr/multipart.rb +75 -0
- data/lib/pamfaxr/pamfaxr.rb +799 -0
- data/lib/pamfaxr.rb +2 -0
- data/pamfaxr.gemspec +78 -0
- data/spec/pamfaxr_spec.rb +504 -0
- data/spec/pdf-test.pdf +0 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +11 -0
- metadata +176 -0
@@ -0,0 +1,799 @@
|
|
1
|
+
class PamFaxr
|
2
|
+
class FaxJob
|
3
|
+
require 'awesome_print'
|
4
|
+
##
|
5
|
+
# Instantiates the FaxJob class
|
6
|
+
#
|
7
|
+
# @param [Hash] params the options for instantiating a FaxJob class
|
8
|
+
# @option params [String] :api_credentials the credentials for accessing the PamFax API
|
9
|
+
# @option params [Object] :http an SSL enabled net/http object
|
10
|
+
#
|
11
|
+
# @return [Object] the instantiated FaxJob class
|
12
|
+
def initialize(options={})
|
13
|
+
@base_resource = '/FaxJob'
|
14
|
+
@api_credentials = options[:api_credentials]
|
15
|
+
@http = options[:http]
|
16
|
+
end
|
17
|
+
|
18
|
+
##
|
19
|
+
# Creates a new fax job
|
20
|
+
#
|
21
|
+
# @return [Hash] the result of the fax job creation request
|
22
|
+
#
|
23
|
+
# @example
|
24
|
+
# pamfaxr.create_fax_job
|
25
|
+
#
|
26
|
+
# returns:
|
27
|
+
#
|
28
|
+
# {
|
29
|
+
# "result" => {
|
30
|
+
# "code" => "success",
|
31
|
+
# "count" => 1,
|
32
|
+
# "message" => ""
|
33
|
+
# },
|
34
|
+
# "FaxContainer" => {
|
35
|
+
# "price" => 0,
|
36
|
+
# "send_mail" => 0,
|
37
|
+
# "uuid" => "ebKVV4XGwx99Wu",
|
38
|
+
# "error_notification" => 0,
|
39
|
+
# "group_notification" => 0,
|
40
|
+
# "send_sms" => 0,
|
41
|
+
# "currency_rate" => 1,
|
42
|
+
# "cover_page_length" => nil,
|
43
|
+
# "send_chat" => 0,
|
44
|
+
# "pages" => nil,
|
45
|
+
# "cover_id" => 0,
|
46
|
+
# "currency" => true,
|
47
|
+
# "affiliatepartner" => nil,
|
48
|
+
# "updated" => nil,
|
49
|
+
# "cover_text" => nil,
|
50
|
+
# "processing_started" => nil,
|
51
|
+
# "created" => "2011-01-17 19:27:57",
|
52
|
+
# "state" => "editing"
|
53
|
+
# }
|
54
|
+
# }
|
55
|
+
def create_fax_job
|
56
|
+
resource = @base_resource + "/Create" + @api_credentials + "&user_ip=#{Socket.gethostname}&user_agent=pamfax.rb&origin=script"
|
57
|
+
get(resource)
|
58
|
+
end
|
59
|
+
|
60
|
+
##
|
61
|
+
# Adds a recipient to a fax job
|
62
|
+
#
|
63
|
+
# @param [String] the phone number to add to the fax job
|
64
|
+
#
|
65
|
+
# @return [Hash] the result of the add recipient request
|
66
|
+
#
|
67
|
+
# @example adding a recipient
|
68
|
+
# pamfaxr.add_recipient('14155551212')
|
69
|
+
#
|
70
|
+
# returns:
|
71
|
+
#
|
72
|
+
# {
|
73
|
+
# "result" => {
|
74
|
+
# "code" => "success",
|
75
|
+
# "count" => 1,
|
76
|
+
# "message" => ""
|
77
|
+
# },
|
78
|
+
# "FaxRecipient" => {
|
79
|
+
# "price_per_page" => 0.09,
|
80
|
+
# "name" => "",
|
81
|
+
# "number" => "+14155551212",
|
82
|
+
# "price_source" => "PNR",
|
83
|
+
# "country" => "US",
|
84
|
+
# "area_code" => "415",
|
85
|
+
# "zone" => "1",
|
86
|
+
# "number_type" => "FIXED",
|
87
|
+
# "description" => "California (CA)"
|
88
|
+
# }
|
89
|
+
# }
|
90
|
+
def add_recipient(number)
|
91
|
+
resource = @base_resource + "/AddRecipient" + @api_credentials + "&number=#{number}"
|
92
|
+
get(resource)
|
93
|
+
end
|
94
|
+
|
95
|
+
##
|
96
|
+
# Adds a local file to the fax job
|
97
|
+
#
|
98
|
+
# @param [string, Required] filename to add to the fax including full path
|
99
|
+
#
|
100
|
+
# @return [Hash] the result of the request to add a file
|
101
|
+
#
|
102
|
+
# @example adding a local file
|
103
|
+
# pamfaxr.add_file('/path_to_my_file/filename.pdf')
|
104
|
+
#
|
105
|
+
# returns:
|
106
|
+
#
|
107
|
+
# {
|
108
|
+
# "result" => {
|
109
|
+
# "code" => "success",
|
110
|
+
# "count" => 1,
|
111
|
+
# "message" => ""
|
112
|
+
# },
|
113
|
+
# "FaxContainerFile" => {
|
114
|
+
# "name" => "/path_to_my_file/filename.pdf",
|
115
|
+
# "file_order" => 1,
|
116
|
+
# "ext" => "pdf",
|
117
|
+
# "file_uuid" => "JNMi19AeQ6QkoC",
|
118
|
+
# "mime" => "application/pdf",
|
119
|
+
# "state" => ""
|
120
|
+
# }
|
121
|
+
# }
|
122
|
+
def add_file(filename)
|
123
|
+
data, headers = Multipart::Post.prepare_query({ 'filename' => filename, 'file' => File.open(File.join(filename)) })
|
124
|
+
resource = @base_resource + "/AddFile" + @api_credentials
|
125
|
+
post(resource, data, headers)
|
126
|
+
end
|
127
|
+
|
128
|
+
##
|
129
|
+
# Adds a remote file to the fax job
|
130
|
+
#
|
131
|
+
# @param [required, String] url of the file to send with the fax, http basic auth is optional
|
132
|
+
#
|
133
|
+
# @return [Hash] the result of the request to add a file
|
134
|
+
#
|
135
|
+
# @example adding a remote file
|
136
|
+
# pamfaxr.add_remote_file('https://s3.amazonaws.com/pamfax-test/R-intro.pdf')
|
137
|
+
#
|
138
|
+
# returns:
|
139
|
+
#
|
140
|
+
# {
|
141
|
+
# "result" => {
|
142
|
+
# "code" => "success",
|
143
|
+
# "count" => 1,
|
144
|
+
# "message" => ""
|
145
|
+
# },
|
146
|
+
# "FaxContainerFile" => {
|
147
|
+
# "name" => "R-intro.pdf",
|
148
|
+
# "file_order" => 0,
|
149
|
+
# "ext" => "pdf",
|
150
|
+
# "file_uuid" => "CwPx31xjl9k7Cp",
|
151
|
+
# "mime" => "application/pdf",
|
152
|
+
# "state" => ""
|
153
|
+
# }
|
154
|
+
# }
|
155
|
+
def add_remote_file(url)
|
156
|
+
resource = @base_resource + "/AddRemoteFile" + @api_credentials + "&url=#{url}"
|
157
|
+
get(resource)
|
158
|
+
end
|
159
|
+
|
160
|
+
##
|
161
|
+
# Cancel an outstanding fax
|
162
|
+
#
|
163
|
+
# @param [required, String] uuid of the fax to cancel
|
164
|
+
#
|
165
|
+
# @return [Hash] the result of the request to cancel an outstanding fax
|
166
|
+
#
|
167
|
+
# @example cancel a fax
|
168
|
+
# pamfaxr.cancel('ebKVV4XGwx99Wu')
|
169
|
+
#
|
170
|
+
# returns:
|
171
|
+
#
|
172
|
+
# {
|
173
|
+
# "result" => {
|
174
|
+
# "code" => "success",
|
175
|
+
# "count" => 0,
|
176
|
+
# "message" => ""
|
177
|
+
# }
|
178
|
+
# }
|
179
|
+
def cancel(uuid)
|
180
|
+
resource = @base_resource + "/Cancel" + @api_credentials + "&uuid=#{uuid}"
|
181
|
+
get(resource)
|
182
|
+
end
|
183
|
+
|
184
|
+
##
|
185
|
+
# Clone a fax job
|
186
|
+
#
|
187
|
+
# @param [required, String] uuid of the fax to clone
|
188
|
+
#
|
189
|
+
# @return [Hash] the result of the request to clone an outstanding fax
|
190
|
+
#
|
191
|
+
# @example cloning a sent fax
|
192
|
+
# pamfaxr.clone_fax('ebKVV4XGwx99Wu')
|
193
|
+
#
|
194
|
+
# returns:
|
195
|
+
#
|
196
|
+
# {
|
197
|
+
# "result" => {
|
198
|
+
# "code" => "fax_not_found",
|
199
|
+
# "count" => 0,
|
200
|
+
# "message" => "Fax not found"
|
201
|
+
# }
|
202
|
+
# }
|
203
|
+
def clone_fax(uuid)
|
204
|
+
resource = @base_resource + "/CloneFax" + @api_credentials + "&user_ip=#{Socket.gethostname}&user_agent=pamfax.rb&uuid=#{uuid}"
|
205
|
+
get(resource)
|
206
|
+
end
|
207
|
+
|
208
|
+
##
|
209
|
+
# Returns the available cover templates
|
210
|
+
#
|
211
|
+
# @return [Array] an array of hashes of the available covers
|
212
|
+
#
|
213
|
+
# @example list available fax covers
|
214
|
+
# pamfaxr.list_available_covers
|
215
|
+
#
|
216
|
+
# returns:
|
217
|
+
#
|
218
|
+
# {
|
219
|
+
# "result" => {
|
220
|
+
# "code" => "success",
|
221
|
+
# "count" => 1,
|
222
|
+
# "message" => ""
|
223
|
+
# },
|
224
|
+
# "Covers" => {
|
225
|
+
# "type" => "list",
|
226
|
+
# "content" => [
|
227
|
+
# [0] {
|
228
|
+
# "template_id" => "eae27d77ca20db309e056e3d2dcd7d69",
|
229
|
+
# "title" => "Basic",
|
230
|
+
# "creator" => 0,
|
231
|
+
# "id" => 1,
|
232
|
+
# "thumb_id" => "091d584fced301b442654dd8c23b3fc9",
|
233
|
+
# "description" => nil,
|
234
|
+
# "preview_id" => "7eabe3a1649ffa2b3ff8c02ebfd5659f"
|
235
|
+
# },
|
236
|
+
# [1] {
|
237
|
+
# "template_id" => "ca46c1b9512a7a8315fa3c5a946e8265",
|
238
|
+
# "title" => "Flowers",
|
239
|
+
# "creator" => 0,
|
240
|
+
# "id" => 3,
|
241
|
+
# "thumb_id" => "45fbc6d3e05ebd93369ce542e8f2322d",
|
242
|
+
# "description" => nil,
|
243
|
+
# "preview_id" => "979d472a84804b9f647bc185a877a8b5"
|
244
|
+
# },
|
245
|
+
# [2] {
|
246
|
+
# "template_id" => "e96ed478dab8595a7dbda4cbcbee168f",
|
247
|
+
# "title" => "Message",
|
248
|
+
# "creator" => 0,
|
249
|
+
# "id" => 4,
|
250
|
+
# "thumb_id" => "ec8ce6abb3e952a85b8551ba726a1227",
|
251
|
+
# "description" => nil,
|
252
|
+
# "preview_id" => "63dc7ed1010d3c3b8269faf0ba7491d4"
|
253
|
+
# },
|
254
|
+
# [3] {
|
255
|
+
# "template_id" => "f340f1b1f65b6df5b5e3f94d95b11daf",
|
256
|
+
# "title" => "Simple",
|
257
|
+
# "creator" => 0,
|
258
|
+
# "id" => 5,
|
259
|
+
# "thumb_id" => "335f5352088d7d9bf74191e006d8e24c",
|
260
|
+
# "description" => nil,
|
261
|
+
# "preview_id" => "cb70ab375662576bd1ac5aaf16b3fca4"
|
262
|
+
# }
|
263
|
+
# ]
|
264
|
+
# }
|
265
|
+
# }
|
266
|
+
def list_available_covers
|
267
|
+
resource = @base_resource + "/ListAvailableCovers" + @api_credentials
|
268
|
+
get(resource)
|
269
|
+
end
|
270
|
+
|
271
|
+
##
|
272
|
+
# Returns the files associated to the current faxjob
|
273
|
+
#
|
274
|
+
# @return [Array] an array of hashes of the associated files
|
275
|
+
#
|
276
|
+
# @example listing fax files associated to a job
|
277
|
+
# pamfaxr.list_fax_files
|
278
|
+
#
|
279
|
+
# returns:
|
280
|
+
#
|
281
|
+
# {
|
282
|
+
# "result" => {
|
283
|
+
# "code" => "success",
|
284
|
+
# "count" => 1,
|
285
|
+
# "message" => ""
|
286
|
+
# },
|
287
|
+
# "Files" => {
|
288
|
+
# "type" => "list",
|
289
|
+
# "content" => [
|
290
|
+
# [0] {
|
291
|
+
# "name" => "R-intro.pdf",
|
292
|
+
# "size" => 646768,
|
293
|
+
# "extension" => "pdf",
|
294
|
+
# "uuid" => "CwPx31xjl9k7Cp",
|
295
|
+
# "pages" => 101,
|
296
|
+
# "contentmd5" => "fd898b168b9780212a2ddd5bfbd79d65",
|
297
|
+
# "mimetype" => "application/pdf",
|
298
|
+
# "created" => "2011-01-17 19:28:05"
|
299
|
+
# }
|
300
|
+
# ]
|
301
|
+
# }
|
302
|
+
# }
|
303
|
+
def list_fax_files
|
304
|
+
resource = @base_resource + "/ListFaxFiles" + @api_credentials
|
305
|
+
get(resource)
|
306
|
+
end
|
307
|
+
|
308
|
+
##
|
309
|
+
# Returns the recipients associated to the current faxjob
|
310
|
+
#
|
311
|
+
# @return [Array] an array of hashes of recipients
|
312
|
+
#
|
313
|
+
# @example listing recipients on a fax job
|
314
|
+
# pamfaxr.list_recipients
|
315
|
+
#
|
316
|
+
# returns:
|
317
|
+
#
|
318
|
+
# {
|
319
|
+
# "result" => {
|
320
|
+
# "code" => "success",
|
321
|
+
# "count" => 1,
|
322
|
+
# "message" => ""
|
323
|
+
# },
|
324
|
+
# "Recipients" => {
|
325
|
+
# "type" => "list",
|
326
|
+
# "content" => [
|
327
|
+
# {
|
328
|
+
# "price" => 0,
|
329
|
+
# "duration" => 0,
|
330
|
+
# "name" => "",
|
331
|
+
# "delivery_started" => nil,
|
332
|
+
# "price_per_page" => 0.09,
|
333
|
+
# "number" => "+13035551212",
|
334
|
+
# "price_source" => "PNR",
|
335
|
+
# "country" => "US",
|
336
|
+
# "sent" => nil,
|
337
|
+
# "completed" => nil,
|
338
|
+
# "area_code" => "303",
|
339
|
+
# "formatted_number" => "+1 303 5551212",
|
340
|
+
# "zone" => "1",
|
341
|
+
# "uuid" => "ExozS0NJe7CErm",
|
342
|
+
# "currency_rate" => "1",
|
343
|
+
# "pages" => nil,
|
344
|
+
# "status_code" => 0,
|
345
|
+
# "number_type" => "FIXED",
|
346
|
+
# "transmission_report" => "",
|
347
|
+
# "currency" => "1",
|
348
|
+
# "description" => "Colorado (CO)",
|
349
|
+
# "updated" => "2011-01-17 19:28:16",
|
350
|
+
# "status_message" => nil,
|
351
|
+
# "created" => "2011-01-17 19:28:16",
|
352
|
+
# "state" => "unknown"
|
353
|
+
# },
|
354
|
+
# {
|
355
|
+
# "price" => 0,
|
356
|
+
# "duration" => 0,
|
357
|
+
# "name" => "",
|
358
|
+
# "delivery_started" => nil,
|
359
|
+
# "price_per_page" => 0.09,
|
360
|
+
# "number" => "+14155551212",
|
361
|
+
# "price_source" => "PNR",
|
362
|
+
# "country" => "US",
|
363
|
+
# "sent" => nil,
|
364
|
+
# "completed" => nil,
|
365
|
+
# "area_code" => "415",
|
366
|
+
# "formatted_number" => "+1 415 5551212",
|
367
|
+
# "zone" => "1",
|
368
|
+
# "uuid" => "yoAT88QXAda80g",
|
369
|
+
# "currency_rate" => "1",
|
370
|
+
# "pages" => nil,
|
371
|
+
# "status_code" => 0,
|
372
|
+
# "number_type" => "FIXED",
|
373
|
+
# "transmission_report" => "",
|
374
|
+
# "currency" => "1",
|
375
|
+
# "description" => "California (CA)",
|
376
|
+
# "updated" => "2011-01-17 19:28:14",
|
377
|
+
# "status_message" => nil,
|
378
|
+
# "created" => "2011-01-17 19:28:14",
|
379
|
+
# "state" => "unknown"
|
380
|
+
# }
|
381
|
+
# ]
|
382
|
+
# }
|
383
|
+
# }
|
384
|
+
def list_recipients
|
385
|
+
resource = @base_resource + "/ListRecipients" + @api_credentials
|
386
|
+
get(resource)
|
387
|
+
end
|
388
|
+
|
389
|
+
##
|
390
|
+
# Sets the current fax cover sheet
|
391
|
+
#
|
392
|
+
# @param [String] the template ID to use
|
393
|
+
# @param [String] the text to use in the template
|
394
|
+
#
|
395
|
+
# @return [Hash] the result of the set fax cover request
|
396
|
+
#
|
397
|
+
# @example set the cover for the fax
|
398
|
+
# pamfaxr.set_cover('3', 'Foobar is here!')
|
399
|
+
#
|
400
|
+
# returns:
|
401
|
+
#
|
402
|
+
# {
|
403
|
+
# "result" => {
|
404
|
+
# "code" => "success",
|
405
|
+
# "count" => 0,
|
406
|
+
# "message" => ""
|
407
|
+
# }
|
408
|
+
# }
|
409
|
+
def set_cover(template_id, text)
|
410
|
+
resource = URI.encode(@base_resource + "/SetCover" + @api_credentials + "&template_id=#{template_id}&text=#{text}")
|
411
|
+
get(resource)
|
412
|
+
end
|
413
|
+
|
414
|
+
##
|
415
|
+
# Obtains the state of the FaxJob build, may block or return immediately
|
416
|
+
#
|
417
|
+
# @param [Hash] params the options for obtaining the fax state
|
418
|
+
# @option params [optional, Boolean] :blocking true if you want to block until the FaxJob is ready, otherwise it returns the current state
|
419
|
+
# @option params [optional, Integer] :interval the time to wait, in seconds, between each check of the status
|
420
|
+
#
|
421
|
+
# @return [Hash] the result of the status request
|
422
|
+
#
|
423
|
+
# @example get the state of the fax
|
424
|
+
# pamfaxr.get_state
|
425
|
+
#
|
426
|
+
# returns:
|
427
|
+
#
|
428
|
+
# {
|
429
|
+
# "result" => {
|
430
|
+
# "code" => "success",
|
431
|
+
# "count" => 2,
|
432
|
+
# "message" => ""
|
433
|
+
# },
|
434
|
+
# "converting" => false,
|
435
|
+
# "Files" => {
|
436
|
+
# "type" => "list",
|
437
|
+
# "content" => [
|
438
|
+
# [0] {
|
439
|
+
# "file_order" => 0,
|
440
|
+
# "state" => "converted"
|
441
|
+
# }
|
442
|
+
# ]
|
443
|
+
# },
|
444
|
+
# "FaxContainer" => {
|
445
|
+
# "price" => 18.36,
|
446
|
+
# "sms_cost" => 0,
|
447
|
+
# "send_mail" => "0",
|
448
|
+
# "uuid" => "ebKVV4XGwx99Wu",
|
449
|
+
# "error_notification" => "0",
|
450
|
+
# "group_notification" => "0",
|
451
|
+
# "send_sms" => "0",
|
452
|
+
# "currency_rate" => 1,
|
453
|
+
# "cover_page_length" => "1",
|
454
|
+
# "send_chat" => "0",
|
455
|
+
# "pages" => 102,
|
456
|
+
# "cover_id" => 3,
|
457
|
+
# "currency" => true,
|
458
|
+
# "affiliatepartner" => nil,
|
459
|
+
# "updated" => "2011-01-17 19:28:22",
|
460
|
+
# "cover_text" => "Foobar is here!",
|
461
|
+
# "processing_started" => nil,
|
462
|
+
# "created" => "2011-01-17 19:27:57",
|
463
|
+
# "state" => "ready_to_send"
|
464
|
+
# }
|
465
|
+
# }
|
466
|
+
def get_state(options={})
|
467
|
+
if options[:blocking]
|
468
|
+
state = nil
|
469
|
+
result = nil
|
470
|
+
while state == nil
|
471
|
+
result = fetch_state
|
472
|
+
sleep options[:interval]
|
473
|
+
end
|
474
|
+
result
|
475
|
+
else
|
476
|
+
fetch_state
|
477
|
+
end
|
478
|
+
end
|
479
|
+
|
480
|
+
##
|
481
|
+
# Gets the preview of the pages
|
482
|
+
#
|
483
|
+
# @param [required, String] uuid of the fax to get the preview for
|
484
|
+
#
|
485
|
+
# @return [Hash] the result of the preview request
|
486
|
+
#
|
487
|
+
# @example get a preview of the fax pages
|
488
|
+
# pamfaxr.get_preview('ebKVV4XGwx99Wu')
|
489
|
+
#
|
490
|
+
# returns:
|
491
|
+
#
|
492
|
+
# {
|
493
|
+
# "Status" => {
|
494
|
+
# "open" => 5,
|
495
|
+
# "done" => 0
|
496
|
+
# },
|
497
|
+
# "result" => {
|
498
|
+
# "code" => "success",
|
499
|
+
# "count" => 2,
|
500
|
+
# "message" => ""
|
501
|
+
# },
|
502
|
+
# "PreviewPages" => {
|
503
|
+
# "type" => "list"
|
504
|
+
# }
|
505
|
+
# }
|
506
|
+
def get_preview(uuid)
|
507
|
+
resource = URI.encode(@base_resource + "/GetPreview" + @api_credentials + "&uuid=#{uuid}")
|
508
|
+
get(resource)
|
509
|
+
end
|
510
|
+
|
511
|
+
##
|
512
|
+
# Remove all of the files associated to a fax
|
513
|
+
#
|
514
|
+
# @param [required, String] uuid of the fax to remove all the files for
|
515
|
+
#
|
516
|
+
# @return [Hash] the result of the remove request
|
517
|
+
#
|
518
|
+
# @example remove all files
|
519
|
+
# pamfaxr.remove_all_files
|
520
|
+
#
|
521
|
+
# returns:
|
522
|
+
#
|
523
|
+
# {
|
524
|
+
# "result" => {
|
525
|
+
# "code" => "success",
|
526
|
+
# "count" => 0,
|
527
|
+
# "message" => ""
|
528
|
+
# }
|
529
|
+
# }
|
530
|
+
def remove_all_files
|
531
|
+
resource = URI.encode(@base_resource + "/RemoveAllFiles" + @api_credentials)
|
532
|
+
get(resource)
|
533
|
+
end
|
534
|
+
|
535
|
+
##
|
536
|
+
# Remove all of the recipients associated to a fax
|
537
|
+
#
|
538
|
+
# @param [required, String] uuid of the fax to remove all the recipients for
|
539
|
+
#
|
540
|
+
# @return [Hash] the result of the remove request
|
541
|
+
#
|
542
|
+
# @example remove all recipients
|
543
|
+
# pamfaxr.remove_all_recipients
|
544
|
+
#
|
545
|
+
# returns:
|
546
|
+
#
|
547
|
+
# {
|
548
|
+
# "result" => {
|
549
|
+
# "code" => "success",
|
550
|
+
# "count" => 0,
|
551
|
+
# "message" => ""
|
552
|
+
# }
|
553
|
+
# }
|
554
|
+
def remove_all_recipients
|
555
|
+
resource = URI.encode(@base_resource + "/RemoveAllRecipients" + @api_credentials)
|
556
|
+
get(resource)
|
557
|
+
end
|
558
|
+
|
559
|
+
##
|
560
|
+
# Remove all the cover page for the associated fax
|
561
|
+
#
|
562
|
+
# @param [required, String] uuid of the fax to remove the cover page for
|
563
|
+
#
|
564
|
+
# @return [Hash] the result of the remove request
|
565
|
+
#
|
566
|
+
# @example remove cover
|
567
|
+
# pamfaxr.remove_cover
|
568
|
+
#
|
569
|
+
# returns:
|
570
|
+
#
|
571
|
+
# {
|
572
|
+
# "result" => {
|
573
|
+
# "code" => "success",
|
574
|
+
# "count" => 0,
|
575
|
+
# "message" => ""
|
576
|
+
# }
|
577
|
+
# }
|
578
|
+
def remove_cover
|
579
|
+
resource = URI.encode(@base_resource + "/RemoveCover" + @api_credentials)
|
580
|
+
get(resource)
|
581
|
+
end
|
582
|
+
|
583
|
+
##
|
584
|
+
# Remove a particular file associated to a fax
|
585
|
+
#
|
586
|
+
# @param [required, String] uuid of the fax to remove the particular file for
|
587
|
+
#
|
588
|
+
# @return [Hash] the result of the remove request
|
589
|
+
#
|
590
|
+
# @example remove file
|
591
|
+
# pamfaxr.remove_file('JNMi19AeQ6QkoC')
|
592
|
+
#
|
593
|
+
# returns:
|
594
|
+
#
|
595
|
+
# {
|
596
|
+
# "result" => {
|
597
|
+
# "code" => "success",
|
598
|
+
# "count" => 0,
|
599
|
+
# "message" => ""
|
600
|
+
# }
|
601
|
+
# }
|
602
|
+
def remove_file(file_uuid)
|
603
|
+
resource = URI.encode(@base_resource + "/RemoveFile" + @api_credentials + "&file_uuid=#{file_uuid}")
|
604
|
+
get(resource)
|
605
|
+
end
|
606
|
+
|
607
|
+
##
|
608
|
+
# Remove a particular recipient associated to a fax
|
609
|
+
#
|
610
|
+
# @param [required, String] uuid of the fax to remove a particular recipients for
|
611
|
+
#
|
612
|
+
# @return [Hash] the result of the remove request
|
613
|
+
#
|
614
|
+
# @example TBD
|
615
|
+
def remove_recipient(recipient_uuid)
|
616
|
+
resource = URI.encode(@base_resource + "/RemoveRecipient" + @api_credentials + "&uuid=#{uuid}")
|
617
|
+
get(resource)
|
618
|
+
end
|
619
|
+
|
620
|
+
##
|
621
|
+
# Request to send the built fax
|
622
|
+
#
|
623
|
+
# @return [Hash] the result of the request to send the built fax
|
624
|
+
#
|
625
|
+
# @example send a fax
|
626
|
+
# pamfaxr.send_fax
|
627
|
+
#
|
628
|
+
# returns:
|
629
|
+
#
|
630
|
+
# {
|
631
|
+
# "result" => {
|
632
|
+
# "code" => "not_enough_credit",
|
633
|
+
# "count" => 0,
|
634
|
+
# "message" => "You don't have enough PamFax Credit. <a href=\\\"https://www.pamfax.biz/shop\\\">Buy PamFax Credit now</a>."
|
635
|
+
# }
|
636
|
+
# }
|
637
|
+
def send_fax
|
638
|
+
resource = @base_resource + "/Send" + @api_credentials
|
639
|
+
get(resource)
|
640
|
+
end
|
641
|
+
|
642
|
+
##
|
643
|
+
# Request to send the built fax later
|
644
|
+
#
|
645
|
+
# @return [Hash] the result of the request to send the built fax later
|
646
|
+
#
|
647
|
+
# @example
|
648
|
+
# pamfaxr.send_fax_later
|
649
|
+
#
|
650
|
+
# returns:
|
651
|
+
#
|
652
|
+
# {
|
653
|
+
# "result" => {
|
654
|
+
# "code" => "success",
|
655
|
+
# "count" => 0,
|
656
|
+
# "message" => ""
|
657
|
+
# }
|
658
|
+
# }
|
659
|
+
def send_fax_later
|
660
|
+
resource = @base_resource + "/SendLater" + @api_credentials
|
661
|
+
get(resource)
|
662
|
+
end
|
663
|
+
|
664
|
+
##
|
665
|
+
# Captures any unknown methods gracefully by throwing a Runtime Error
|
666
|
+
def method_missing(method, *args)
|
667
|
+
raise RuntimeError, "Unknown method #{method}"
|
668
|
+
end
|
669
|
+
|
670
|
+
private
|
671
|
+
|
672
|
+
##
|
673
|
+
# Fetches the state of the fax job
|
674
|
+
#
|
675
|
+
# @return [Hash] the status of the current fax job
|
676
|
+
def fetch_state
|
677
|
+
resource = @base_resource + "/GetFaxState" + @api_credentials
|
678
|
+
fax_state = JSON.parse @http.get(resource).body
|
679
|
+
fax_state.merge!('converting' => converting?(fax_state))
|
680
|
+
fax_state
|
681
|
+
end
|
682
|
+
|
683
|
+
##
|
684
|
+
# Returns whether or not a file in the fax job is still in a converting state
|
685
|
+
#
|
686
|
+
# @param [required, Hash] the hash returned by fetch_state
|
687
|
+
#
|
688
|
+
# @return [Boolean] true if a file is still in the converting process
|
689
|
+
def converting?(fax_state)
|
690
|
+
converting = false
|
691
|
+
fax_state['Files']['content'].each { |file| converting = true if file['state'] == '' || file['state'] == 'converting' }
|
692
|
+
converting
|
693
|
+
end
|
694
|
+
|
695
|
+
##
|
696
|
+
# Gets the resource
|
697
|
+
#
|
698
|
+
# @param [required, String] resource to get
|
699
|
+
# @return [Hash] the result of the request
|
700
|
+
def get(resource)
|
701
|
+
begin
|
702
|
+
JSON.parse @http.get(resource, { 'Content-Type' => 'application/json' }).body
|
703
|
+
rescue => error
|
704
|
+
end
|
705
|
+
end
|
706
|
+
|
707
|
+
##
|
708
|
+
# Posts to the resource
|
709
|
+
#
|
710
|
+
# @param [required, String] resource to post
|
711
|
+
# @param [requried, String] data of the body to post
|
712
|
+
# @param [required, Hash] headers to send with the post request
|
713
|
+
#
|
714
|
+
# @return [Hash] the result of the request
|
715
|
+
def post(resource, data, headers={})
|
716
|
+
begin
|
717
|
+
result, body = @http.post(resource, data, headers)
|
718
|
+
JSON.parse body
|
719
|
+
rescue => error
|
720
|
+
end
|
721
|
+
end
|
722
|
+
end
|
723
|
+
|
724
|
+
##
|
725
|
+
# Creates an instance of the PamFax class
|
726
|
+
#
|
727
|
+
# @param [Hash] params the options for instantiating a PamFax class
|
728
|
+
# @option params [optionsl, String] :base_uri the URI of the PamFax API, it defaults to https://api.pamfax.biz
|
729
|
+
# @option params [String] :key the PamFax API key you have been assigned
|
730
|
+
# @option params [String] :secret the PamFax API secret you have been assigned
|
731
|
+
# @option params [String] :username the PamFax username you are going to use to send faxes
|
732
|
+
# @option params [String] :password the PamFax password you are going to use to send faxes
|
733
|
+
#
|
734
|
+
# @return [Object] the instantiated FaxJob class
|
735
|
+
#
|
736
|
+
# @example create a new PamFax object
|
737
|
+
# pamfaxr = PamFax.new({ :key => 'your_api_key', :secret => 'your_api_secret' })
|
738
|
+
def initialize(options={})
|
739
|
+
base_uri = options[:base_uri] || "https://api.pamfax.biz"
|
740
|
+
|
741
|
+
options.merge!({ :http => create_http(URI.parse(base_uri)),
|
742
|
+
:api_credentials => "?apikey=#{options[:key]}&apisecret=#{options[:secret]}&apioutputformat=API_FORMAT_JSON" })
|
743
|
+
options[:api_credentials] = options[:api_credentials] + "&usertoken=#{get_user_token(options)}"
|
744
|
+
|
745
|
+
@fax_job = FaxJob.new options
|
746
|
+
end
|
747
|
+
|
748
|
+
##
|
749
|
+
# Captures the request for the fax job and sends them to the instantiated FaxJob object
|
750
|
+
def method_missing(method, *args)
|
751
|
+
@fax_job.send(method, *args)
|
752
|
+
end
|
753
|
+
|
754
|
+
private
|
755
|
+
|
756
|
+
##
|
757
|
+
# Gets the user token to use with subsequent requests
|
758
|
+
#
|
759
|
+
# @param [Hash] params the options for getting the user token
|
760
|
+
# @option params [String] :api_credentials the PamFax credentials built with key/secret
|
761
|
+
# @option params [String] :username the PamFax username you are going to use to send faxes
|
762
|
+
# @option params [String] :password the PamFax password you are going to use to send faxes
|
763
|
+
#
|
764
|
+
# @return [Object] the instantiated FaxJob class
|
765
|
+
def get_user_token(options={})
|
766
|
+
result = verify_user(options)
|
767
|
+
if result['result']['code'] == 'success'
|
768
|
+
result['UserToken']['token']
|
769
|
+
else
|
770
|
+
raise RuntimeError, result['result']['message']
|
771
|
+
end
|
772
|
+
end
|
773
|
+
|
774
|
+
##
|
775
|
+
# Calls the VerifyUser resource to fetch the verified user details
|
776
|
+
#
|
777
|
+
# @param [Hash] params the options for verifying the user
|
778
|
+
# @option params [String] :api_credentials the PamFax credentials built with key/secret
|
779
|
+
# @option params [String] :username the PamFax username you are going to use to send faxes
|
780
|
+
# @option params [String] :password the PamFax password you are going to use to send faxes
|
781
|
+
#
|
782
|
+
# @return [Object] the instantiated FaxJob class
|
783
|
+
def verify_user(options={})
|
784
|
+
resource = "/Session/VerifyUser/#{options[:api_credentials]}&username=#{options[:username]}&password=#{options[:password]}"
|
785
|
+
JSON.parse options[:http].get(resource).body
|
786
|
+
end
|
787
|
+
|
788
|
+
##
|
789
|
+
# Creates an ssl enabled net/http object
|
790
|
+
#
|
791
|
+
# @param [String] the URL to use to connect to the service
|
792
|
+
#
|
793
|
+
# @return [Object] an instantiated net/http object that is ssl enabled
|
794
|
+
def create_http(base_uri)
|
795
|
+
http = Net::HTTP.new(base_uri.host, base_uri.port)
|
796
|
+
http.use_ssl = true
|
797
|
+
http
|
798
|
+
end
|
799
|
+
end
|