faxage 1.0.0 → 1.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9ddc13458c6a5240635be1aa1f7c8e7aec3e794121f399fb7b985aa426c72c44
4
- data.tar.gz: 226ad755e313625fa171771ea213e3d2a7b1333f702c01ff14763939274cebb5
3
+ metadata.gz: f9b7534be52991e73089c5258d35d4cd791c2fbd7370c1a005946bb292f3b940
4
+ data.tar.gz: 076cb60e728a22f1bd7c7b98c761abfcb3c8ec572fb4b041f642260970ff3014
5
5
  SHA512:
6
- metadata.gz: ad8704196cd2d4f200d4258d21546436287057a5318164899e376b139bdd987c1bdbb1e8cbc792630683c2a4442483ae02ecbfdd3cae4f83f2de7be018792190
7
- data.tar.gz: 233e11214f064bc0b6901a595af546462fc6b9d4c546caa080792c5b7007ce8c420c35531bf488cf9c3ff06805b6662153bf44889c05a8461bfe62107ae32b89
6
+ metadata.gz: 82aa232fd6cdc0ae82adae99df8b661b365c2d27bc66475f0cea96cca5ac89af3a191298618ddd356ac029b1f994ca0328e787e7d720bca735a98dff90c48ebb
7
+ data.tar.gz: 9b683d9d4de97e2eda7d36953aa9fa96ac1274342f033f5deccbdb1f2927249f60994864affa1855f45936d9e44978e94db348561e0290f9a9ce43fa265d4918
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- faxage (1.0.0)
4
+ faxage (1.2.2)
5
5
  httparty
6
6
 
7
7
  GEM
@@ -40,4 +40,4 @@ DEPENDENCIES
40
40
  rspec (>= 3.4)
41
41
 
42
42
  BUNDLED WITH
43
- 1.17.1
43
+ 2.1.4
data/README.md CHANGED
@@ -56,6 +56,51 @@ Click the link for ‘Q: What types of files can I send?’ on the above URL to
56
56
  | HP Printer Control Language | PCL |
57
57
  | Plain Text | TXT |
58
58
 
59
+ #### Error Types
60
+
61
+ ```ruby
62
+ class LoginError < StandardError
63
+ # "One or more of username, company, password is incorrect or your account is disabled for some reason."
64
+ end
65
+
66
+ class FaxageInternalError < StandardError
67
+ # "Internal FAXAGE error."
68
+ end
69
+
70
+ class UnknownOperationError < StandardError
71
+ # "Either operation is not correctly hard coded or the POST was bad, the POST contents are returned for debugging purposes. #{response.parsed_response}"
72
+ end
73
+
74
+ class NoResponseError < StandardError
75
+ # "An empty response was returned from Faxage."
76
+ end
77
+
78
+ class InvalidJobIdError < StandardError
79
+ # "Internal FAXAGE error – the job was not properly inserted into our database."
80
+ end
81
+
82
+ class InvalidFaxNoError < StandardError
83
+ # "The faxno variable does not contain a 10-digit numeric only string."
84
+ end
85
+
86
+ class NoFilesError < StandardError
87
+ # "No valid files were found in faxfilenames[] and/or faxfiledata[]."
88
+ end
89
+
90
+ class BlockedNumberError < StandardError
91
+ # "The number you tried to fax to was blocked (outside of continental US, Canada and Hawaii or a 555, 911, or other invalid/blocked type of number)."
92
+ end
93
+
94
+ class NoIncomingFaxesError < StandardError
95
+ # "There are no incoming faxes to list for you."
96
+ end
97
+
98
+ class FaxIdNotFoundError < StandardError
99
+ # The faxid passed in is invalid or is an ID that does not belong to your company.
100
+ end
101
+ ```
102
+
103
+
59
104
  #### Sending a fax
60
105
 
61
106
  ##### sendfax
@@ -122,6 +167,32 @@ Faxage::ReceiveFax.new(
122
167
  ).listfax()
123
168
  ```
124
169
 
170
+ ##### getfax
171
+ This operation is used to download a received fax image.
172
+ ```ruby
173
+ Faxage::ReceiveFax.new(
174
+ username: # Assigned FAXAGE username
175
+ company: # Assigned FAXAGE company credential
176
+ password: # Assigned FAXAGE password
177
+ ).getfax(recvid:) # The numeric ID of the fax to get, retrieved from the listfax operation (the recvid in listfax)
178
+
179
+ # The actual data returned will be the binary contents of the fax itself.
180
+
181
+ # A practical example of uploading the file to AWS S3 in a Rails application could look like:
182
+
183
+ get_fax = Faxage::ReceiveFax.new(
184
+ username: # Assigned FAXAGE username
185
+ company: # Assigned FAXAGE company credential
186
+ password: # Assigned FAXAGE password
187
+ ).getfax(recvid:)
188
+
189
+ creds = Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY'])
190
+ s3_resource = Aws::S3::Resource.new(region: ENV['AWS_S3_REGION'], credentials: creds)
191
+ obj = s3_resource.bucket(ENV['AWS_BUCKET_NAME']).object("path-to-your-file-on-S3/your-file-name.pdf")
192
+ obj.put(body: get_fax)
193
+
194
+ ```
195
+
125
196
  #### Information Gathering Operations
126
197
 
127
198
  These operations relate to gathering information that helps with managing and/or
@@ -293,5 +293,40 @@ module Faxage
293
293
  return response.parsed_response
294
294
  end
295
295
  end
296
+
297
+ def dlstatus(jobid:, viewtype: 'pdf')
298
+ # This operation is used to download a sent fax image.
299
+
300
+ subdirectory = "/httpsfax.php"
301
+
302
+ body = {
303
+ operation: "dlstatus",
304
+ username: username,
305
+ company: company,
306
+ password: password,
307
+ jobid: jobid,
308
+ viewtype: viewtype
309
+ }
310
+
311
+ response = self.class.post(subdirectory, body: body)
312
+
313
+ if response.parsed_response.nil?
314
+ raise NoResponseError.new("An empty response was returned from Faxage.")
315
+ elsif response.parsed_response.include?("ERR01: Database connection failed")
316
+ raise FaxageInternalError.new("Internal FAXAGE error.")
317
+ elsif response.parsed_response.include?("ERR02: Login incorrect")
318
+ raise LoginError.new("One or more of username, company, password is incorrect or your account is disabled for some reason.")
319
+ elsif response.parsed_response.include?("ERR06: No jobs to display or job id specified not found")
320
+ raise InvalidJobIdError.new("The jobid you passed was not found")
321
+ elsif response.parsed_response.include?("ERR08: Unknown operation")
322
+ raise UnknownOperationError.new("Either operation is not correctly hard coded or the POST was bad, the POST contents are returned for debugging purposes. #{response.parsed_response}")
323
+ elsif response.parsed_response.include?("ERR24: File is not yet converted")
324
+ raise NoFilesError.new("Images can only be retrieved after the file(s) have actually been imaged (I.e.: The fax must either be In Queue or completed to be able to retrieve an image)")
325
+ elsif response.parsed_response.include?("ERR25: File does not exist")
326
+ raise NoFilesError.new("This can be either an internal error, or if the status is a ‘Failed Conversion’, then there is no image to retrieve")
327
+ else
328
+ return response.parsed_response
329
+ end
330
+ end
296
331
  end
297
- end
332
+ end
@@ -7,7 +7,7 @@ module Faxage
7
7
 
8
8
  attr_reader :username, # Assigned FAXAGE username
9
9
  :company, # Assigned FAXAGE company credential
10
- :password, # Assigned FAXAGE password
10
+ :password # Assigned FAXAGE password
11
11
 
12
12
  def initialize(username:, company:, password:)
13
13
  @username = username
@@ -15,6 +15,40 @@ module Faxage
15
15
  @password = password
16
16
  end
17
17
 
18
+ def getfax(recvid:, **options)
19
+ # This operation is used to download a received fax image.
20
+
21
+ subdirectory = "/httpsfax.php"
22
+
23
+ body = {
24
+ operation: "getfax",
25
+ username: username,
26
+ company: company,
27
+ password: password,
28
+ faxid: recvid
29
+ }.merge!(options.each { |k, v| options[k] = 1 if v } )
30
+
31
+ response = self.class.post(subdirectory,
32
+ body: body
33
+ )
34
+
35
+ if response.parsed_response.nil?
36
+ raise NoResponseError.new("An empty response was returned from Faxage.")
37
+ elsif response.parsed_response.include?("ERR01: Database connection failed")
38
+ raise FaxageInternalError.new("Internal FAXAGE error.")
39
+ elsif response.parsed_response.include?("ERR02: Login incorrect")
40
+ raise LoginError.new("One or more of username, company, password is incorrect or your account is disabled for some reason.")
41
+ elsif response.parsed_response.include?("ERR08: Unknown operation")
42
+ raise UnknownOperationError.new("Either operation is not correctly hard coded or the POST was bad, the POST contents are returned for debugging purposes. #{response.parsed_response}")
43
+ elsif response.parsed_response.include?("ERR12: FAX ID")
44
+ raise FaxIdNotFoundError.new("The faxid passed in is invalid or is an ID that does not belong to your company. #{response.parsed_response}")
45
+ elsif response.parsed_response.include?("ERR13: File could not be opened")
46
+ raise FaxageInternalError.new("Internal FAXAGE error. #{response.parsed_response}.")
47
+ else
48
+ return response.parsed_response
49
+ end
50
+ end
51
+
18
52
  def listfax(**options)
19
53
  # This operation is used to gather a list of incoming faxes for your account.
20
54
 
@@ -25,7 +59,7 @@ module Faxage
25
59
  username: username,
26
60
  company: company,
27
61
  password: password
28
- }.merge!(options)
62
+ }.merge!(options.each { |k, v| options[k] = 1 if v } )
29
63
 
30
64
  response = self.class.post(subdirectory,
31
65
  body: body
@@ -42,7 +76,70 @@ module Faxage
42
76
  elsif response.parsed_response.include?("ERR11: No incoming faxes available")
43
77
  raise NoIncomingFaxesError.new("There are no incoming faxes to list for you.")
44
78
  else
45
- return response.parsed_response
79
+ data = []
80
+ response.parsed_response.split("\n").each do |received_fax|
81
+ # <recvid><tab><recvdate>(OPTIONAL:
82
+ # <tab><starttime>)
83
+ # <tab><CID><tab><DNIS>(OPTIONAL:
84
+ # <tab><filename>)(OPTIONAL:
85
+ # <tab><pagecount>)(OPTIONAL: <tab><tsid>)
86
+ individual_fax = Hash.new
87
+ received_fax.split("\t").each_with_index do |item, index|
88
+ if options[:starttime].nil?
89
+ if index == 0
90
+ individual_fax[:recvid] = item
91
+ elsif index == 1
92
+ individual_fax[:revdate] = item
93
+ elsif index == 2
94
+ individual_fax[:cid] = item
95
+ elsif index == 3
96
+ individual_fax[:dnis] = item
97
+ elsif index == 4 && !options[:filename].nil?
98
+ individual_fax[:filename] = item
99
+ elsif index == 4 && options[:filename].nil? && !options[:pagecount].nil?
100
+ individual_fax[:pagecount] = item
101
+ elsif index == 4 && options[:filename].nil? && options[:pagecount].nil? && !options[:showtsid].nil?
102
+ individual_fax[:tsid] = item
103
+ elsif index == 5 && !options[:filename].nil? && !options[:pagecount].nil?
104
+ individual_fax[:pagecount] = item
105
+ elsif index == 5 && !options[:filename].nil? && options[:pagecount].nil? && !options[:showtsid].nil?
106
+ individual_fax[:tsid] = item
107
+ elsif index == 5 && options[:filename].nil? && !options[:pagecount].nil? && !options[:showtsid].nil?
108
+ individual_fax[:tsid] = item
109
+ elsif index == 6 && !options[:filename].nil? && !options[:pagecount].nil? && !options[:showtsid].nil?
110
+ individual_fax[:tsid] = item
111
+ end
112
+ else
113
+ if index == 0
114
+ individual_fax[:recvid] = item
115
+ elsif index == 1
116
+ individual_fax[:revdate] = item
117
+ elsif index == 2
118
+ individual_fax[:starttime] = item
119
+ elsif index == 3
120
+ individual_fax[:cid] = item
121
+ elsif index == 4
122
+ individual_fax[:dnis] = item
123
+ elsif index == 5 && !options[:filename].nil?
124
+ individual_fax[:filename] = item
125
+ elsif index == 5 && options[:filename].nil? && !options[:pagecount].nil?
126
+ individual_fax[:pagecount] = item
127
+ elsif index == 5 && options[:filename].nil? && options[:pagecount].nil? && !options[:showtsid].nil?
128
+ individual_fax[:tsid] = item
129
+ elsif index == 6 && !options[:filename].nil? && !options[:pagecount].nil?
130
+ individual_fax[:pagecount] = item
131
+ elsif index == 6 && !options[:filename].nil? && options[:pagecount].nil? && !options[:showtsid].nil?
132
+ individual_fax[:tsid] = item
133
+ elsif index == 6 && options[:filename].nil? && !options[:pagecount].nil? && !options[:showtsid].nil?
134
+ individual_fax[:tsid] = item
135
+ elsif index == 7 && !options[:filename].nil? && !options[:pagecount].nil? && !options[:showtsid].nil?
136
+ individual_fax[:tsid] = item
137
+ end
138
+ end
139
+ data << individual_fax
140
+ end
141
+ end
142
+ return data
46
143
  end
47
144
  end
48
145
  end
@@ -1,3 +1,3 @@
1
1
  module Faxage
2
- VERSION = "1.0.0"
2
+ VERSION = "1.2.2"
3
3
  end
data/lib/faxage.rb CHANGED
@@ -28,4 +28,7 @@ class BlockedNumberError < StandardError
28
28
  end
29
29
 
30
30
  class NoIncomingFaxesError < StandardError
31
+ end
32
+
33
+ class FaxIdNotFoundError < StandardError
31
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faxage
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Dias
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-05 00:00:00.000000000 Z
11
+ date: 2022-01-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -98,7 +98,7 @@ homepage: https://github.com/diasks2/faxage
98
98
  licenses:
99
99
  - MIT
100
100
  metadata: {}
101
- post_install_message:
101
+ post_install_message:
102
102
  rdoc_options: []
103
103
  require_paths:
104
104
  - lib
@@ -113,9 +113,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
113
  - !ruby/object:Gem::Version
114
114
  version: '0'
115
115
  requirements: []
116
- rubyforge_project:
117
- rubygems_version: 2.7.6
118
- signing_key:
116
+ rubygems_version: 3.1.6
117
+ signing_key:
119
118
  specification_version: 4
120
119
  summary: Faxage is a Ruby wrapper for the faxage.com API
121
120
  test_files: []