interfax 1.0.0.beta.1 → 1.0.0.beta.2
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.
- checksums.yaml +4 -4
- data/README.md +161 -36
- data/lib/interfax.rb +3 -0
- data/lib/interfax/client.rb +15 -1
- data/lib/interfax/document.rb +17 -0
- data/lib/interfax/documents.rb +42 -0
- data/lib/interfax/file.rb +30 -5
- data/lib/interfax/files.rb +9 -0
- data/lib/interfax/outbound/delivery.rb +1 -1
- data/lib/interfax/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a1e9c472700ce6e06a0b6e73c8404177ff8798ce
|
4
|
+
data.tar.gz: e4d2321131a15cfdbf3a7a35f25260bbf72877b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c8e357151a090187121cadfec40d95604b1b5e45f2b8ea44347be9a26935526a203ccb2623c7af26441f23c07cb76da5927baa19dc31e5d2555528effff54cc1
|
7
|
+
data.tar.gz: c92ba400dc2def9cca50d94eb27f3d8471e9d2d3b79eed7aae34f7299e7f4c6ef7787208da649f4acd5c5811dffbfa1ba3a8adbec0f8efb54d6f19222a36698c
|
data/README.md
CHANGED
@@ -8,7 +8,7 @@ Send and receive faxes in Ruby with the [InterFAX](https://www.interfax.net/en/d
|
|
8
8
|
|
9
9
|
## Installation
|
10
10
|
|
11
|
-
|
11
|
+
This gem requires 2.1+. You can install install it directly or via bundler.
|
12
12
|
|
13
13
|
```ruby
|
14
14
|
gem 'interfax', '~> 1.0.0'
|
@@ -22,27 +22,31 @@ To send a fax from a PDF file:
|
|
22
22
|
require 'interfax'
|
23
23
|
|
24
24
|
interfax = InterFAX::Client.new(username: 'username', password: 'password')
|
25
|
-
interfax.deliver(faxNumber: "+11111111112", file: 'folder/fax.pdf')
|
25
|
+
fax = interfax.deliver(faxNumber: "+11111111112", file: 'folder/fax.pdf')
|
26
|
+
fax = fax.reload # resync with API to get latest status
|
27
|
+
fax.status # Success if 0. Pending if < 0. Error if > 0
|
26
28
|
```
|
27
29
|
|
28
30
|
# Usage
|
29
31
|
|
30
|
-
[Client](#client) | [Account](#account) | [Outbound](#outbound) | [Inbound](#inbound) | [Helper Classes](#helper-classes)
|
32
|
+
[Client](#client) | [Account](#account) | [Outbound](#outbound) | [Inbound](#inbound) | [Documents](#documents) | [Helper Classes](#helper-classes)
|
31
33
|
|
32
34
|
## Client
|
33
35
|
|
34
36
|
The client follows the [12-factor](12factor.net/config) apps principle and can be either set directly or via environment variables.
|
35
37
|
|
36
38
|
```ruby
|
37
|
-
# using parameters
|
39
|
+
# Initialize using parameters
|
38
40
|
interfax = InterFAX::Client.new(username: '...', password: '...')
|
39
41
|
|
40
|
-
# using environment variables
|
42
|
+
# Alternatice: Initialize using environment variables
|
41
43
|
# * INTERFAX_USERNAME
|
42
44
|
# * INTERFAX_PASSWORD
|
43
45
|
interfax = InterFAX::Client.new
|
44
46
|
```
|
45
47
|
|
48
|
+
All connections are established over HTTPS.
|
49
|
+
|
46
50
|
## Account
|
47
51
|
|
48
52
|
### Balance
|
@@ -54,7 +58,7 @@ interfax.account.balance
|
|
54
58
|
=> 9.86
|
55
59
|
```
|
56
60
|
|
57
|
-
**
|
61
|
+
**More:** [documentation](https://www.interfax.net/en/dev/rest/reference/3001)
|
58
62
|
|
59
63
|
## Outbound
|
60
64
|
|
@@ -69,16 +73,22 @@ Submit a fax to a single destination number.
|
|
69
73
|
There are a few ways to send a fax. One way is to directly provide a file path or url.
|
70
74
|
|
71
75
|
```ruby
|
72
|
-
|
76
|
+
# with a path
|
77
|
+
interfax.outbound.deliver(faxNumber: "+11111111112", file: 'folder/fax.txt')
|
78
|
+
# with a URL
|
73
79
|
interfax.outbound.deliver(faxNumber: "+11111111112", file: 'https://s3.aws.com/example/fax.pdf')
|
74
80
|
```
|
75
81
|
|
82
|
+
InterFAX supports over 20 file types including HTML, PDF, TXT, Word, and many more. For a full list see the [Supported File Types](https://www.interfax.net/en/help/supported_file_types) documentation.
|
83
|
+
|
76
84
|
The returned object is a `InterFAX::Outbound::Fax` with just an `id`. You can use this object to load more information, get the image, or cancel the sending of the fax.
|
77
85
|
|
78
86
|
```rb
|
79
87
|
fax = interfax.outbound.deliver(faxNumber: "+11111111112", file: 'file://fax.pdf')
|
80
|
-
fax = fax.reload #
|
81
|
-
|
88
|
+
fax = fax.reload # Reload fax, allowing you to inspect the status and more
|
89
|
+
|
90
|
+
fax.id # the ID of the fax that can be used in some of the other API calls
|
91
|
+
fax.image # returns an image representing the fax sent to the faxNumber
|
82
92
|
fax.cancel # cancel the sending of the fax
|
83
93
|
```
|
84
94
|
|
@@ -86,7 +96,7 @@ Alternatively you can create an `InterFAX::File` with binary data and pass this
|
|
86
96
|
|
87
97
|
```ruby
|
88
98
|
data = File.open('file://fax.pdf').read
|
89
|
-
file =
|
99
|
+
file = interfax.files.create(data, mime_type: 'application/pdf')
|
90
100
|
interfax.outbound.deliver(faxNumber: "+11111111112", file: file)
|
91
101
|
```
|
92
102
|
|
@@ -98,9 +108,7 @@ interfax.outbound.deliver(faxNumber: "+11111111112", files: ['file://fax.pdf', '
|
|
98
108
|
|
99
109
|
Under the hood every path and string is turned into a [InterFAX::File](#InterFax::File) object. For more information see [the documentation](#InterFax::File) for this class.
|
100
110
|
|
101
|
-
**
|
102
|
-
|
103
|
-
[**Additional options:**](https://www.interfax.net/en/dev/rest/reference/2918) `contact`, `postponeTime`, `retriesToPerform`, `csid`, `pageHeader`, `reference`, `pageSize`, `fitToPage`, `pageOrientation`, `resolution`, `rendering`
|
111
|
+
**Options:** [`contact`, `postponeTime`, `retriesToPerform`, `csid`, `pageHeader`, `reference`, `pageSize`, `fitToPage`, `pageOrientation`, `resolution`, `rendering`](https://www.interfax.net/en/dev/rest/reference/2918)
|
104
112
|
|
105
113
|
**Alias**: `interfax.deliver`
|
106
114
|
|
@@ -115,11 +123,11 @@ Get a list of recent outbound faxes (which does not include batch faxes).
|
|
115
123
|
```ruby
|
116
124
|
interfax.outbound.all
|
117
125
|
=> [#<InterFAX::Outbound::Fax>, ...]
|
126
|
+
interfax.outbound.all(limit: 1)
|
127
|
+
=> [#<InterFAX::Outbound::Fax>]
|
118
128
|
```
|
119
129
|
|
120
|
-
**
|
121
|
-
|
122
|
-
[**Options:**](https://www.interfax.net/en/dev/rest/reference/2920) `limit`, `lastId`, `sortOrder`, `userId`
|
130
|
+
**Options:** [`limit`, `lastId`, `sortOrder`, `userId`](https://www.interfax.net/en/dev/rest/reference/2920)
|
123
131
|
|
124
132
|
----
|
125
133
|
|
@@ -134,7 +142,7 @@ interfax.outbound.completed(123, 234)
|
|
134
142
|
=> [#<InterFAX::Outbound::Fax>, ...]
|
135
143
|
```
|
136
144
|
|
137
|
-
**
|
145
|
+
**More:** [none](https://www.interfax.net/en/dev/rest/reference/2972)
|
138
146
|
|
139
147
|
----
|
140
148
|
|
@@ -149,7 +157,7 @@ interfax.outbound.find(123456)
|
|
149
157
|
=> #<InterFAX::Outbound::Fax>
|
150
158
|
```
|
151
159
|
|
152
|
-
**
|
160
|
+
**More:** [none](https://www.interfax.net/en/dev/rest/reference/2921)
|
153
161
|
|
154
162
|
----
|
155
163
|
|
@@ -168,7 +176,7 @@ image.save('fax.tiff')
|
|
168
176
|
=> # saves image to file
|
169
177
|
```
|
170
178
|
|
171
|
-
**
|
179
|
+
**More:** [none](https://www.interfax.net/en/dev/rest/reference/2941)
|
172
180
|
|
173
181
|
----
|
174
182
|
|
@@ -183,7 +191,7 @@ interfax.outbound.cancel(123456)
|
|
183
191
|
=> #<InterFAX::Outbound::Fax>
|
184
192
|
```
|
185
193
|
|
186
|
-
**
|
194
|
+
**More:** [none](https://www.interfax.net/en/dev/rest/reference/2939)
|
187
195
|
|
188
196
|
----
|
189
197
|
|
@@ -198,9 +206,7 @@ interfax.outbound.search(faxNumber: '+1230002305555')
|
|
198
206
|
=> [#<InterFAX::Outbound::Fax>, ...]
|
199
207
|
```
|
200
208
|
|
201
|
-
**
|
202
|
-
|
203
|
-
[**Options:**](https://www.interfax.net/en/dev/rest/reference/2959) `ids`, `reference`, `dateFrom`, `dateTo`, `status`, `userId`, `faxNumber`, `limit`, `offset`
|
209
|
+
**Options:** [`ids`, `reference`, `dateFrom`, `dateTo`, `status`, `userId`, `faxNumber`, `limit`, `offset`](https://www.interfax.net/en/dev/rest/reference/2959)
|
204
210
|
|
205
211
|
## Inbound
|
206
212
|
|
@@ -215,11 +221,11 @@ Retrieves a user's list of inbound faxes. (Sort order is always in descending ID
|
|
215
221
|
```ruby
|
216
222
|
interfax.inbound.all
|
217
223
|
=> [#<InterFAX::Inbound::Fax>, ...]
|
224
|
+
interfax.inbound.all(limit: 1)
|
225
|
+
=> [#<InterFAX::Inbound::Fax>]
|
218
226
|
```
|
219
227
|
|
220
|
-
**
|
221
|
-
|
222
|
-
[**Options:**](https://www.interfax.net/en/dev/rest/reference/2935) `unreadOnly`, `limit`, `lastId`, `allUsers`
|
228
|
+
**Options:** [`unreadOnly`, `limit`, `lastId`, `allUsers`](https://www.interfax.net/en/dev/rest/reference/2935)
|
223
229
|
|
224
230
|
---
|
225
231
|
|
@@ -234,7 +240,7 @@ interfax.inbound.find(123456)
|
|
234
240
|
=> #<InterFAX::Inbound::Fax>
|
235
241
|
```
|
236
242
|
|
237
|
-
**
|
243
|
+
**More:** [none](https://www.interfax.net/en/dev/rest/reference/2938)
|
238
244
|
|
239
245
|
---
|
240
246
|
|
@@ -253,7 +259,7 @@ image.save('fax.tiff')
|
|
253
259
|
=> # saves image to file
|
254
260
|
```
|
255
261
|
|
256
|
-
**
|
262
|
+
**More:** [none](https://www.interfax.net/en/dev/rest/reference/2937)
|
257
263
|
|
258
264
|
---
|
259
265
|
|
@@ -268,7 +274,7 @@ interfax.inbound.email(123456)
|
|
268
274
|
=> [#<InterFAX::Email>]
|
269
275
|
```
|
270
276
|
|
271
|
-
**
|
277
|
+
**More:** [none](https://www.interfax.net/en/dev/rest/reference/2930)
|
272
278
|
|
273
279
|
---
|
274
280
|
|
@@ -285,7 +291,9 @@ interfax.inbound.mark(123456, read: false) # mark unread
|
|
285
291
|
=> true
|
286
292
|
```
|
287
293
|
|
288
|
-
**
|
294
|
+
**More:** [none](https://www.interfax.net/en/dev/rest/reference/2936)
|
295
|
+
|
296
|
+
---
|
289
297
|
|
290
298
|
### Resend inbound fax
|
291
299
|
|
@@ -302,6 +310,105 @@ interfax.inbound.resend(123456, email: 'test@example.com')
|
|
302
310
|
=> true
|
303
311
|
```
|
304
312
|
|
313
|
+
**More:** [none](https://www.interfax.net/en/dev/rest/reference/2929)
|
314
|
+
|
315
|
+
---
|
316
|
+
|
317
|
+
## Documents
|
318
|
+
|
319
|
+
[Create](#create-document) | [Upload chunk](#upload-chunk) | [Get list](#get-document-list) | [Status](#get-document-status) | [Cancel](#cancel-document)
|
320
|
+
|
321
|
+
Document allow for uploading of large files up to 20MB in 200kb chunks. The `InterFAX::File` format automatically uses this if needed but a sample implementation would look as followed.
|
322
|
+
|
323
|
+
```ruby
|
324
|
+
file = File.open('test.pdf', 'rb')
|
325
|
+
|
326
|
+
document = interfax.documents.create('test.pdf', file.size)
|
327
|
+
|
328
|
+
cursor = 0
|
329
|
+
while !file.eof?
|
330
|
+
chunk = file.read(500)
|
331
|
+
next_cursor = cursor + chunk.length
|
332
|
+
document.upload(cursor, next_cursor-1, chunk)
|
333
|
+
cursor = next_cursor
|
334
|
+
end
|
335
|
+
```
|
336
|
+
|
337
|
+
### Create Documents
|
338
|
+
|
339
|
+
`interfax.documents.create(name, size, options = {})`
|
340
|
+
|
341
|
+
Create a document upload session, allowing you to upload large files in chunks.
|
342
|
+
|
343
|
+
```ruby
|
344
|
+
interfax.documents.create('large_file.pdf', '231234')
|
345
|
+
=> #<InterFAX::Document uri="https://rest.interfax.net/outbound/documents/123456">
|
346
|
+
```
|
347
|
+
|
348
|
+
**Options:** [`disposition`, `sharing`](https://www.interfax.net/en/dev/rest/reference/2967)
|
349
|
+
|
350
|
+
---
|
351
|
+
|
352
|
+
### Upload chunk
|
353
|
+
|
354
|
+
`interfax.documents.upload(id, range_start, range_end, chunk)`
|
355
|
+
|
356
|
+
Upload a chunk to an existing document upload session.
|
357
|
+
|
358
|
+
```ruby
|
359
|
+
interfax.documents.upload(123456, 0, 999, "....binary-data....")
|
360
|
+
=> true
|
361
|
+
```
|
362
|
+
|
363
|
+
**More:** [none](https://www.interfax.net/en/dev/rest/reference/2966)
|
364
|
+
|
365
|
+
---
|
366
|
+
|
367
|
+
### Get document list
|
368
|
+
|
369
|
+
`interfax.documents.all(options = {})`
|
370
|
+
|
371
|
+
Get a list of previous document uploads which are currently available.
|
372
|
+
|
373
|
+
```ruby
|
374
|
+
interfax.documents.all
|
375
|
+
=> #[#<InterFAX::Document>, ...]
|
376
|
+
interfax.documents.all(offset: 10)
|
377
|
+
=> #[#<InterFAX::Document>, ...]
|
378
|
+
```
|
379
|
+
|
380
|
+
**Options:** [`limit`, `offset`](https://www.interfax.net/en/dev/rest/reference/2968)
|
381
|
+
|
382
|
+
---
|
383
|
+
|
384
|
+
### Get document status
|
385
|
+
|
386
|
+
`interfax.documents.find(id)`
|
387
|
+
|
388
|
+
Get the current status of a specific document upload.
|
389
|
+
|
390
|
+
```ruby
|
391
|
+
interfax.documents.find(123456)
|
392
|
+
=> #<InterFAX::Document ... >
|
393
|
+
```
|
394
|
+
|
395
|
+
**More:** [documentation](https://www.interfax.net/en/dev/rest/reference/2965)
|
396
|
+
|
397
|
+
---
|
398
|
+
|
399
|
+
### Cancel document
|
400
|
+
|
401
|
+
`interfax.documents.cancel(id)`
|
402
|
+
|
403
|
+
Cancel a document upload and tear down the upload session, or delete a previous upload.
|
404
|
+
|
405
|
+
```ruby
|
406
|
+
interfax.documents.cancel(123456)
|
407
|
+
=> true
|
408
|
+
```
|
409
|
+
|
410
|
+
**More:** [none](https://www.interfax.net/en/dev/rest/reference/2964)
|
411
|
+
|
305
412
|
---
|
306
413
|
|
307
414
|
## Helper Classes
|
@@ -344,15 +451,21 @@ image.save('folder/fax.tiff') # Saves the TIFF to the path provided
|
|
344
451
|
|
345
452
|
### InterFAX::File
|
346
453
|
|
347
|
-
This class is used by `interfax.outbound.deliver` to turn every URL, path and binary data into a uniform format, ready to be sent out to the InterFAX API.
|
454
|
+
This class is used by `interfax.outbound.deliver` and `interfax.files` to turn every URL, path and binary data into a uniform format, ready to be sent out to the InterFAX API.
|
348
455
|
|
349
456
|
It is most useful for sending binary data to the `.deliver` method.
|
350
457
|
|
351
458
|
```rb
|
352
459
|
# binary data
|
353
|
-
file = InterFAX::File.new('....binary data.....', mime_type: 'application/pdf')
|
354
|
-
|
355
|
-
|
460
|
+
file = InterFAX::File.new(interfax, '....binary data.....', mime_type: 'application/pdf')
|
461
|
+
=> #<InterFAX::File>
|
462
|
+
|
463
|
+
# Alternatively
|
464
|
+
file = interfax.files.create('....binary data.....', mime_type: 'application/pdf')
|
465
|
+
file.header
|
466
|
+
=> "Content-Type: application/pdf"
|
467
|
+
file.body
|
468
|
+
=> '....binary data.....'
|
356
469
|
|
357
470
|
interfax.outbound.deliver(faxNumber: '+1111111111112', file: file)
|
358
471
|
```
|
@@ -361,12 +474,12 @@ Additionally it can be used to turn a URL or path into a valid object as well, t
|
|
361
474
|
|
362
475
|
```rb
|
363
476
|
# a file by path
|
364
|
-
file =
|
477
|
+
file = interfax.files.create('foo/bar.pdf')
|
365
478
|
file.header #=> "Content-Type: application/pdf"
|
366
479
|
file.body #=> '....binary data.....'
|
367
480
|
|
368
481
|
# a file by url
|
369
|
-
file =
|
482
|
+
file = interfax.files.create('https://foo.com/bar.html')
|
370
483
|
file.header #=> "Content-Location: https://foo.com/bar.html"
|
371
484
|
file.body #=> nil
|
372
485
|
```
|
@@ -383,6 +496,18 @@ email.messageStatus # 0 = OK; number smaller than zero = in progress; number gre
|
|
383
496
|
email.completionTime # Completion timestamp.
|
384
497
|
```
|
385
498
|
|
499
|
+
### InterFAX::Document
|
500
|
+
|
501
|
+
The `InterFAX::Document` is returned in most of the Document APIs. As a convenience the following methods are available.
|
502
|
+
|
503
|
+
```ruby
|
504
|
+
document = interfax.documents.find(123)
|
505
|
+
document = document.reload # Loads or reloads object
|
506
|
+
document.upload(0, 999, '.....binary data....' # Maps to the interfax.documents.upload method
|
507
|
+
document.cancel # Maps to the interfax.documents.upload method
|
508
|
+
document.id # Extracts the ID from the URI (the API does not return the ID)
|
509
|
+
```
|
510
|
+
|
386
511
|
## Contributing
|
387
512
|
|
388
513
|
1. **Fork** the repo on GitHub
|
data/lib/interfax.rb
CHANGED
@@ -3,6 +3,7 @@ require 'interfax/client'
|
|
3
3
|
require 'interfax/account'
|
4
4
|
require 'interfax/object'
|
5
5
|
require 'interfax/file'
|
6
|
+
require 'interfax/files'
|
6
7
|
require 'interfax/forwarding_email'
|
7
8
|
require 'interfax/outbound'
|
8
9
|
require 'interfax/outbound/fax'
|
@@ -10,5 +11,7 @@ require 'interfax/outbound/delivery'
|
|
10
11
|
require 'interfax/inbound'
|
11
12
|
require 'interfax/inbound/fax'
|
12
13
|
require 'interfax/image'
|
14
|
+
require 'interfax/document'
|
15
|
+
require 'interfax/documents'
|
13
16
|
|
14
17
|
require 'mimemagic'
|
data/lib/interfax/client.rb
CHANGED
@@ -10,7 +10,7 @@ module InterFAX
|
|
10
10
|
class UnauthorizedError < StandardError; end
|
11
11
|
|
12
12
|
attr_accessor :username, :password, :http
|
13
|
-
attr_writer :outbound, :inbound, :account
|
13
|
+
attr_writer :outbound, :inbound, :account, :documents, :files
|
14
14
|
|
15
15
|
DOMAIN = "rest.interfax.net".freeze
|
16
16
|
USER_AGENT = "InterFAX Ruby #{InterFAX::VERSION}".freeze
|
@@ -45,6 +45,14 @@ module InterFAX
|
|
45
45
|
@inbound ||= InterFAX::Inbound.new(self)
|
46
46
|
end
|
47
47
|
|
48
|
+
def documents
|
49
|
+
@documents ||= InterFAX::Documents.new(self)
|
50
|
+
end
|
51
|
+
|
52
|
+
def files
|
53
|
+
@files ||= InterFAX::Files.new(self)
|
54
|
+
end
|
55
|
+
|
48
56
|
def get path, params = {}, valid_keys = {}
|
49
57
|
uri = uri_for(path, params, valid_keys)
|
50
58
|
request = Net::HTTP::Get.new(uri.request_uri)
|
@@ -61,6 +69,12 @@ module InterFAX
|
|
61
69
|
transmit(request)
|
62
70
|
end
|
63
71
|
|
72
|
+
def delete path
|
73
|
+
uri = uri_for(path)
|
74
|
+
request = Net::HTTP::Delete.new(uri.request_uri)
|
75
|
+
transmit(request)
|
76
|
+
end
|
77
|
+
|
64
78
|
private
|
65
79
|
|
66
80
|
def uri_for(path, params = {}, keys = {})
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class InterFAX::Document < InterFAX::Object
|
2
|
+
def upload range_start, range_end, chunk
|
3
|
+
client.documents.upload(id, range_start, range_end, chunk)
|
4
|
+
end
|
5
|
+
|
6
|
+
def cancel
|
7
|
+
client.documents.cancel(id)
|
8
|
+
end
|
9
|
+
|
10
|
+
def reload
|
11
|
+
client.documents.find(id)
|
12
|
+
end
|
13
|
+
|
14
|
+
def id
|
15
|
+
uri.split("/").last
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
class InterFAX::Documents
|
2
|
+
|
3
|
+
def initialize client
|
4
|
+
@client = client
|
5
|
+
end
|
6
|
+
|
7
|
+
def create name, size, options = {}
|
8
|
+
options[:name] = name
|
9
|
+
options[:size] = size
|
10
|
+
|
11
|
+
valid_keys = [:name, :size, :disposition, :shared]
|
12
|
+
|
13
|
+
uri = @client.post("/outbound/documents", options, valid_keys)
|
14
|
+
InterFAX::Document.new(uri: uri, client: @client)
|
15
|
+
end
|
16
|
+
|
17
|
+
def upload document_id, range_start, range_end, chunk
|
18
|
+
headers = { 'Range' => "bytes=#{range_start}-#{range_end}" }
|
19
|
+
@client.post("/outbound/documents/#{document_id}", {}, {}, headers, chunk)
|
20
|
+
true
|
21
|
+
end
|
22
|
+
|
23
|
+
def all options = {}
|
24
|
+
valid_keys = [:limit, :offset]
|
25
|
+
@client.get("/outbound/documents", options, valid_keys).map do |document|
|
26
|
+
document[:client] = @client
|
27
|
+
InterFAX::Document.new(document)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def find document_id
|
32
|
+
document = @client.get("/outbound/documents/#{document_id}")
|
33
|
+
document[:client] = @client
|
34
|
+
InterFAX::Document.new(document)
|
35
|
+
end
|
36
|
+
|
37
|
+
def cancel document_id
|
38
|
+
@client.delete("/outbound/documents/#{document_id}")
|
39
|
+
true
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
data/lib/interfax/file.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
class InterFAX::File
|
2
|
-
attr_accessor :header, :body
|
2
|
+
attr_accessor :header, :body, :client, :chunk_size
|
3
|
+
|
4
|
+
def initialize client, location, options = {}
|
5
|
+
self.client = client
|
6
|
+
self.chunk_size = options[:chunk_size] || 1024*1024
|
3
7
|
|
4
|
-
def initialize location, options = {}
|
5
8
|
if options[:mime_type]
|
6
9
|
initialize_binary(location, options[:mime_type])
|
7
10
|
elsif location.start_with?('http://') || location.start_with?('https://')
|
@@ -12,6 +15,7 @@ class InterFAX::File
|
|
12
15
|
end
|
13
16
|
|
14
17
|
def initialize_binary(data, mime_type)
|
18
|
+
return initialize_document(data, mime_type) if data.length > chunk_size
|
15
19
|
self.header = "Content-Type: #{mime_type}"
|
16
20
|
self.body = data
|
17
21
|
end
|
@@ -23,9 +27,30 @@ class InterFAX::File
|
|
23
27
|
|
24
28
|
def initialize_path(path)
|
25
29
|
file = File.open(path)
|
26
|
-
mime_type = MimeMagic.by_magic(file)
|
30
|
+
mime_type = MimeMagic.by_magic(file) || MimeMagic.by_path(file)
|
31
|
+
data = File.open(path, 'rb').read
|
27
32
|
|
28
|
-
|
29
|
-
|
33
|
+
initialize_binary(data, mime_type)
|
34
|
+
end
|
35
|
+
|
36
|
+
def initialize_document(data, mime_type)
|
37
|
+
document = create_document(data, mime_type)
|
38
|
+
upload(document, data)
|
39
|
+
initialize_url(document.uri)
|
40
|
+
end
|
41
|
+
|
42
|
+
def upload document, data
|
43
|
+
cursor = 0
|
44
|
+
data.bytes.each_slice(chunk_size) do |slice|
|
45
|
+
chunk = slice.pack("C*")
|
46
|
+
next_cursor = cursor + chunk.length
|
47
|
+
document.upload(cursor, next_cursor - 1, chunk)
|
48
|
+
cursor = next_cursor
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def create_document data, mime_type
|
53
|
+
extension = MimeMagic::EXTENSIONS.select {|k,v| v == mime_type.to_s}.keys.first
|
54
|
+
client.documents.create("upload-#{Time.now.to_i}.#{extension}", data.length)
|
30
55
|
end
|
31
56
|
end
|
data/lib/interfax/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: interfax
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.beta.
|
4
|
+
version: 1.0.0.beta.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- InterFAX
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-08-
|
12
|
+
date: 2016-08-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mimemagic
|
@@ -95,7 +95,10 @@ files:
|
|
95
95
|
- lib/interfax.rb
|
96
96
|
- lib/interfax/account.rb
|
97
97
|
- lib/interfax/client.rb
|
98
|
+
- lib/interfax/document.rb
|
99
|
+
- lib/interfax/documents.rb
|
98
100
|
- lib/interfax/file.rb
|
101
|
+
- lib/interfax/files.rb
|
99
102
|
- lib/interfax/forwarding_email.rb
|
100
103
|
- lib/interfax/image.rb
|
101
104
|
- lib/interfax/inbound.rb
|