sr_fax 0.4.1 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e48956c74b31f3de3cb0045346c13e853f2ff63b
4
- data.tar.gz: 279682183600050e3feac2d51d6ad1edbd5f6904
3
+ metadata.gz: 3fb3aa28e640ae1db6b0dad66d2b12f3b05690e3
4
+ data.tar.gz: 6d12eab4fe174c2c75f9f21722c742fd44d97798
5
5
  SHA512:
6
- metadata.gz: e604ffac24efd5b2740e7a0bf18d26abbe208a6cb59fa4f6362bd861fafe1efa3aa4499474a016b8b68e9b6d3cec637e4c1db197d3db22ee034e09fbbbb7230f
7
- data.tar.gz: 52e0d48ec3caf51f3a07380684ecd25e7373b8099df7f28325f14d389f8b17fa1c81529a177ac5a2bd240fd2059ccfd7b80e521855f08eec2ae06298637801d5
6
+ metadata.gz: 889c220eebfa3a1e1fd97b0ffa5fd38d925081e4ae31cdb20d9a2fac1b84508bc233dfcd7b42e5a56576c8b6a92d58f892ce98ac6fc9e478d9faefdb69439444
7
+ data.tar.gz: 9bfb2a47455b9d2e77741ffaa4d0288126b2bbde4521f5b1b86ef4cbbdbf215fde18c2ed036526f1b450e4c2ae2f5798907c90a21184ae750603f049fa617b00
data/.gitignore CHANGED
@@ -9,3 +9,4 @@ gemfiles/*.lock
9
9
  /spec/reports/
10
10
  /tmp/
11
11
  *.gem
12
+ .DS_Store
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in srfax.gemspec
3
+ # Specify your gem's dependencies in srfax.gemspec.
4
4
  gemspec
data/README.md CHANGED
@@ -14,7 +14,7 @@ And then execute:
14
14
 
15
15
  $ bundle
16
16
 
17
- Or install it yourself using:
17
+ Or install it yourself using:
18
18
 
19
19
  $ gem install sr_fax
20
20
 
@@ -29,13 +29,13 @@ require 'srfax'
29
29
  SrFax.setup do |config|
30
30
  config.defaults[:access_id] = '1234'
31
31
  config.defaults[:access_pwd] = 'password'
32
- config.connection_defaults[:timeout] = 180
32
+ config.logger = Rails.logger
33
33
  end
34
34
 
35
35
  SrFax.view_inbox
36
36
  SrFax.view_outbox
37
- SrFax.update_fax_status(descriptor, direction)
38
- SrFax.get_fax(descriptor, direction, {:sMarkasViewed => 'Y'}
37
+ SrFax.update_fax_status(descriptor, direction)
38
+ SrFax.get_fax(descriptor, direction, {:sMarkasViewed => 'Y'}
39
39
  ```
40
40
 
41
41
  As an example, here is a sample queue fax call to send a fax
@@ -65,5 +65,5 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
65
65
  4. Push to the branch (`git push origin my-new-feature`)
66
66
  5. Create a new Pull Request
67
67
 
68
- Licensing: **MIT**
68
+ Licensing: **MIT**
69
69
  Remember: **'Great opportunities to help others seldom come, but small ones surround us daily' -- Sally Koch**
data/Rakefile CHANGED
@@ -1 +1,31 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
+
3
+ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
4
+ require 'srfax/version'
5
+
6
+ begin
7
+ Bundler.setup(:default, :development)
8
+ rescue Bundler::BundlerError => e
9
+ $stderr.puts e.message
10
+ $stderr.puts "Run `bundle install` to install missing gems"
11
+ exit e.status_code
12
+ end
13
+ require 'rake'
14
+
15
+ require 'rake/testtask'
16
+ Rake::TestTask.new(:test) do |test|
17
+ test.libs << 'lib' << 'test'
18
+ test.test_files = Dir.glob("test/**/*_test.rb")
19
+ test.verbose = true
20
+ end
21
+
22
+ task :build do
23
+ system "gem build srfax.gemspec"
24
+ end
25
+
26
+ task :release => :build do
27
+ system "gem push srfax-#{SrFax::VERSION}.gem"
28
+ system "rm srfax-#{SrFax::VERSION}.gem"
29
+ end
30
+
31
+ task :default => :test
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "srfax"
3
+ require 'bundler/setup'
4
+ require 'srfax'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +10,5 @@ require "srfax"
10
10
  # require "pry"
11
11
  # Pry.start
12
12
 
13
- require "irb"
13
+ require 'irb'
14
14
  IRB.start
@@ -1,28 +1,29 @@
1
1
  require 'restclient'
2
2
  require 'active_support'
3
3
  require 'active_support/core_ext/hash'
4
- require 'version'
4
+ require 'json'
5
+ require 'srfax/version'
5
6
 
6
7
  # This class serves as the integration component between the application and the SRFax cloud service.
7
- # API DOX available @ https://www.srfax.com/srf/media/SRFax-REST-API-Documentation.pdf.
8
+ # API DOX available @ https://www.srfax.com/srf/media/SRFax-REST-API-Documentation.pdf.
8
9
  #
9
10
  # This module currently Implements the following POST commands from the API:
10
- # Get_Usage – Retrieves the account usage
11
+ # Get_Usage – Retrieves the account usage.
11
12
  # Update_Viewed_Status – Mark a inbound or outbound fax as read or unread.
12
13
  # Queue_Fax - Schedules a fax to be sent with or without cover page.
13
- # Get_Fax_Inbox - Returns a list of faxes received for a specified period of time
14
- # Get_Fax_Outbox - Returns a list of faxes sent for a specified period of time
15
- # Retrieve_Fax – Returns a specified sent or received fax file in PDF or TIFF format
16
- # Delete_Fax - Deletes specified received or sent faxes
14
+ # Get_Fax_Inbox - Returns a list of faxes received for a specified period of time.
15
+ # Get_Fax_Outbox - Returns a list of faxes sent for a specified period of time.
16
+ # Retrieve_Fax – Returns a specified sent or received fax file in PDF or TIFF format.
17
+ # Delete_Fax - Deletes specified received or sent faxes.
17
18
  # Get_FaxStatus – Determines the status of a fax that has been scheduled for delivery.
18
- # Get_MultiFaxStatus – Determines the status of a multiple faxes that hav been
19
+ # Get_MultiFaxStatus – Determines the status of a multiple faxes that have been
19
20
  # scheduled for delivery.
20
- # Stop_Fax - Removes a scheduled fax from the queue
21
+ # Stop_Fax - Removes a scheduled fax from the queue.
21
22
  # Unimplemented methods:
22
- # Delete_Pending_Fax - THIS DOESN'T EXIST - but is documented to exist
23
+ # Delete_Pending_Fax - THIS DOESN'T EXIST - but is documented to exist.
23
24
  module SrFax
24
25
  # Base URL for accessing SRFax API
25
- BASE_URL = "https://www.srfax.com/SRF_SecWebSvc.php"
26
+ BASE_URL = 'https://www.srfax.com/SRF_SecWebSvc.php'.freeze
26
27
 
27
28
  mattr_accessor :defaults
28
29
  # Default values hash to use with all #execute commands
@@ -34,19 +35,17 @@ module SrFax
34
35
  sResponseFormat: 'JSON' # XML or JSON
35
36
  }
36
37
 
37
- mattr_accessor :connection_defaults
38
- # Default values to use with the RestClient connection
39
- @@connection_defaults = {
40
- timeout: 180
41
- }
42
-
43
38
  mattr_accessor :logger
44
- # Logger object for use in standalone modeo or with Rails
45
- @@logger = defined?(Rails) ? Rails.logger : Logger.new(STDOUT)
46
- @@logger.level = Logger::INFO
39
+ # Logger object for use in standalone mode or with Rails.
40
+ if defined?(Rails)
41
+ @@logger = Rails.logger
42
+ else
43
+ @@logger = Logger.new(STDOUT)
44
+ @@logger.level = Logger::INFO
45
+ end
47
46
 
48
47
  class << self
49
- # Allow configuring Srfax with a block, these will be the methods default values for passing to
48
+ # Allow configuring Srfax with a block, these will be the methods default values for passing to
50
49
  # each function and will be overridden by any methods locally posted variables (ex: :action)
51
50
  #
52
51
  # @yield Accepts a block of valid configuration options to set or override default values
@@ -57,174 +56,174 @@ module SrFax
57
56
  # config.defaults[:access_pwd] = 'password'
58
57
  # config.defaults[:sCallerID] = '5555555555'
59
58
  # end
60
- def setup(&block)
59
+ def setup
61
60
  yield self
62
61
  end
63
-
64
- # Views the remote inbox. By default this call does NOT update the viewed
62
+
63
+ # Views the remote inbox. By default this call does NOT update the viewed
65
64
  # or read status of the fax unless specified in options.
66
65
  #
67
66
  # @param status [String] Specify the status of the message you are listing (UNREAD, ALL, READ)
68
67
  # @param options [Hash] An optional hash paramter to ovveride any default values (ie., Account ID)
69
- # @option options [String] :sPeriod Specify the period to query. Accepts 'ALL' or 'RANGE'
70
- # @option options [String] :sStatDate Used with :sPeriod and denotes the period to start at. Format is 'YYYYMMDD'
71
- # @option options [String] :sEndDate Used with :sPeriod and denotes the period to endd at. Format is 'YYYYMMDD'
68
+ # @option options [String] :sPeriod Specify the period to query. Accepts 'ALL' or 'RANGE'
69
+ # @option options [String] :sStatDate Used with :sPeriod and denotes the period to start at. Format is 'YYYYMMDD'
70
+ # @option options [String] :sEndDate Used with :sPeriod and denotes the period to endd at. Format is 'YYYYMMDD'
72
71
  # @option options [String] :sIncludeSubUsers Include subuser accounts ('Y' or 'N')
73
72
  # @return [Hash] A hash containing the return value (Success/Failure) and the payload where applicable
74
73
  #
75
- # Example Payload for Return:
76
- # {"Status"=>"Success", "Result"=>[{"FileName"=>"20150430124505-6104-19_1|20360095", "ReceiveStatus"=>"Ok",
77
- # "Date"=>"Apr 30/15 02:45 PM", "EpochTime"=>1430423105, "CallerID"=>"5555555555", "RemoteID"=>"", "Pages"=>"1",
74
+ # Example Payload for Return:
75
+ # {"Status"=>"Success", "Result"=>[{"FileName"=>"20150430124505-6104-19_1|20360095", "ReceiveStatus"=>"Ok",
76
+ # "Date"=>"Apr 30/15 02:45 PM", "EpochTime"=>1430423105, "CallerID"=>"5555555555", "RemoteID"=>"", "Pages"=>"1",
78
77
  # "Size"=>"5000", "ViewedStatus"=>"N"} ]}
79
78
  def view_inbox(status = 'UNREAD', options = {})
80
- logger.debug "Checking fax inbox from cloud service"
81
- postVariables = {
82
- :action => "Get_Fax_Inbox",
83
- :sViewedStatus => status.upcase
79
+ logger.debug 'Checking fax inbox from cloud service'
80
+ postVariables = {
81
+ action: 'Get_Fax_Inbox',
82
+ sViewedStatus: status.upcase
84
83
  }.merge!(options)
85
84
  res = execute(postVariables)
86
-
87
- if res[:Status] != "Failure"
88
- faxcount = res["Result"].count
89
- faxcount > 0 ? logger.debug("Found #{faxcount} new fax(es)") : logger.debug("No faxes found matching that criteria")
85
+
86
+ if res[:Status] != 'Failure'
87
+ faxcount = res['Result'].length
88
+ faxcount > 0 ? logger.debug("Found #{faxcount} new fax(es)") : logger.debug('No faxes found matching that criteria')
90
89
  end
91
-
92
- return res
90
+
91
+ res
93
92
  end
94
-
93
+
95
94
  # Uses post Get_Usage to fetch the current account usage statistics (for all associated accounts)
96
95
  #
97
96
  # @param options [Hash] An optional hash paramter to ovveride any default values (ie., Account ID)
98
- # @option options [String] :sPeriod Specify the period to query. Accepts 'ALL' or 'RANGE'
99
- # @option options [String] :sStatDate Used with :sPeriod and denotes the period to start at. Format is 'YYYYMMDD'
100
- # @option options [String] :sEndDate Used with :sPeriod and denotes the period to endd at. Format is 'YYYYMMDD'
97
+ # @option options [String] :sPeriod Specify the period to query. Accepts 'ALL' or 'RANGE'
98
+ # @option options [String] :sStatDate Used with :sPeriod and denotes the period to start at. Format is 'YYYYMMDD'
99
+ # @option options [String] :sEndDate Used with :sPeriod and denotes the period to endd at. Format is 'YYYYMMDD'
101
100
  # @option options [String] :sIncludeSubUsers Include subuser accounts ('Y' or 'N')
102
101
  # @return [Hash] A hash containing the return value (Success/Failure) and the payload where applicable
103
102
  #
104
- # Example Payload for Return:
105
- # {"Status"=>"Success", "Result"=>[{"UserID"=>1234, "Period"=>"ALL",
103
+ # Example Payload for Return:
104
+ # {"Status"=>"Success", "Result"=>[{"UserID"=>1234, "Period"=>"ALL",
106
105
  # "ClientName"=>nil, "SubUserID"=>0, "BillingNumber"=>"8888888888", "NumberOfFaxes"=>5, "NumberOfPages"=>8}]}
107
106
  def view_usage(options = {})
108
- logger.debug "Viewing fax usage from cloud service"
109
- postVariables = { :action => "Get_Fax_Usage" }
107
+ logger.debug 'Viewing fax usage from cloud service'
108
+ postVariables = { action: 'Get_Fax_Usage' }
110
109
  res = execute(postVariables)
111
- return res
110
+ res
112
111
  end
113
-
112
+
114
113
  # Uses post Get_Fax_Outbox to retrieve the usage for the account (and all subaccounts)
115
114
  #
116
115
  # @param options [Hash] An optional hash paramter to ovveride any default values (ie., Account ID)
117
- # @option options [String] :sPeriod Specify the period to query. Accepts 'ALL' or 'RANGE'
118
- # @option options [String] :sStatDate Used with :sPeriod and denotes the period to start at. Format is 'YYYYMMDD'
119
- # @option options [String] :sEndDate Used with :sPeriod and denotes the period to endd at. Format is 'YYYYMMDD'
116
+ # @option options [String] :sPeriod Specify the period to query. Accepts 'ALL' or 'RANGE'
117
+ # @option options [String] :sStatDate Used with :sPeriod and denotes the period to start at. Format is 'YYYYMMDD'
118
+ # @option options [String] :sEndDate Used with :sPeriod and denotes the period to endd at. Format is 'YYYYMMDD'
120
119
  # @option options [String] :sIncludeSubUsers Include subuser accounts ('Y' or 'N')
121
120
  # @return [Hash] A hash containing the return value (Success/Failure) and the payload where applicable
122
121
  def view_outbox(options = {})
123
- logger.debug "Viewing fax outbox from cloud service"
124
- postVariables = { :action => "Get_Fax_Outbox" }
122
+ logger.debug 'Viewing fax outbox from cloud service'
123
+ postVariables = { action: 'Get_Fax_Outbox' }
125
124
  res = execute(postVariables)
126
-
127
- if res[:Status] != "Failure"
128
- faxcount = res["Result"].count
129
- faxcount > 0 ? logger.debug("Found #{faxcount} new fax(es)") : logger.debug("No faxes found matching that criteria")
125
+
126
+ if res[:Status] != 'Failure'
127
+ faxcount = res['Result'].length
128
+ faxcount > 0 ? logger.debug("Found #{faxcount} new fax(es)") : logger.debug('No faxes found matching that criteria')
130
129
  end
131
-
132
- return res
130
+
131
+ res
133
132
  end
134
-
135
- # Uses POST Retrieve_Fax to retrieve a specified fax from the server. Returns it in the default
133
+
134
+ # Uses POST Retrieve_Fax to retrieve a specified fax from the server. Returns it in the default
136
135
  # specified format (PDF or TIFF)
137
- #
136
+ #
138
137
  # @param descriptor [String] Specify the status of the message you are listing (UNREAD, ALL, READ)
139
138
  # @param direction [String] Either 'IN' or 'OUT' to specify the inbox or outbox
140
139
  # @param options [Hash] An optional hash paramter to ovveride any default values (ie., Account ID)
141
140
  # @option options [String] :sMarkasViewed Update the fax status to viewed (or unviewed). Accepts 'Y' or 'N'
142
141
  # @option options [String] :sFaxFormat Update the format to retrieve the file in ('PDF' or 'TIFF')
143
142
  # @return [Hash] A hash containing the return value (Success/Failure) and the payload where applicable
144
- def get_fax(descriptor, direction, options = {})
145
- logger.debug "Retrieving fax from cloud service in the direction of '#{direction}', Descriptor:'#{descriptor}'"
146
- faxname,faxid = descriptor.split('|')
147
- if (faxname.nil? or faxid.nil?)
148
- logger.debug "Valid descriptor not provided to get_fax function call. Descriptor:'#{descriptor}'"
143
+ def get_fax(descriptor, direction, options = {})
144
+ logger.debug "Retrieving fax from cloud service in the direction of '#{direction}', Descriptor: '#{descriptor}'"
145
+ faxname, faxid = descriptor.split('|')
146
+ if faxname.nil? || faxid.nil?
147
+ logger.debug "Valid descriptor not provided to get_fax function call. Descriptor: '#{descriptor}'"
149
148
  return nil
150
149
  end
151
-
152
- logger.debug "Retrieving fax from cloud service"
153
- postVariables = {
154
- :action => "Retrieve_Fax",
155
- :sFaxFileName => descriptor,
156
- :sFaxDetailsID => faxid,
157
- :sDirection => direction.upcase,
158
- :sMarkasViewed => 'N'
150
+
151
+ logger.debug 'Retrieving fax from cloud service'
152
+ postVariables = {
153
+ action: 'Retrieve_Fax',
154
+ sFaxFileName: descriptor,
155
+ sFaxDetailsID: faxid,
156
+ sDirection: direction.upcase,
157
+ sMarkasViewed: 'N'
159
158
  }.merge!(options)
160
159
  res = execute(postVariables)
161
- return res
160
+ res
162
161
  end
163
-
162
+
164
163
  # Update the status (read/unread) for a particular fax
165
164
  #
166
165
  # @param descriptor [String] Specify the status of the message you are listing (UNREAD, ALL, READ)
167
166
  # @param direction [String] Either 'IN' or 'OUT' to specify the inbox or outbox
168
167
  # @param options [Hash] An optional hash paramter to ovveride any default values (ie., Account ID)
169
- # @option options [String] :sMarkasViewed Update the fax status to viewed (or unviewed). Accepts 'Y' or 'N'. Defaults to Y
168
+ # @option options [String] :sMarkasViewed Update the fax status to viewed (or unviewed). Accepts 'Y' or 'N'. Defaults to Y
170
169
  # @return [Hash] A hash containing the return value (Success/Failure) and the payload where applicable
171
170
  def update_fax_status(descriptor, direction, options = {})
172
- logger.debug "Updating a fax in the cloud service in the direction of '#{direction}', Descriptor:'#{descriptor}'"
173
- faxname,faxid = descriptor.split('|')
174
- if (faxname.nil? or faxid.nil?)
175
- logger.debug "Valid descriptor not provided to get_fax function call. Descriptor:'#{descriptor}'"
171
+ logger.debug "Updating a fax in the cloud service in the direction of '#{direction}', Descriptor: '#{descriptor}'"
172
+ faxname, faxid = descriptor.split('|')
173
+ if faxname.nil? || faxid.nil?
174
+ logger.debug "Valid descriptor not provided to get_fax function call. Descriptor: '#{descriptor}'"
176
175
  return nil
177
176
  end
178
177
 
179
- postVariables = {
180
- :action => "Update_Viewed_Status",
181
- :sFaxFileName => descriptor,
182
- :sFaxDetailsID => faxid,
183
- :sDirection => direction.upcase,
184
- :sMarkasViewed => 'Y',
178
+ postVariables = {
179
+ action: 'Update_Viewed_Status',
180
+ sFaxFileName: descriptor,
181
+ sFaxDetailsID: faxid,
182
+ sDirection: direction.upcase,
183
+ sMarkasViewed: 'Y'
185
184
  }.merge!(options)
186
185
  res = execute(postVariables)
187
- return res
186
+ res
188
187
  end
189
188
 
190
189
  # Schedules a fax to be sent with or without cover page
191
190
  #
192
191
  # @param faxids [String, Array] Get the state of 'id' as given by the #queue_fax call
193
192
  # @param options [Hash] An optional hash paramter to ovveride any default values (ie., Account ID)
194
- # @option options [String] :sResponseFormat The output response format for
193
+ # @option options [String] :sResponseFormat The output response format for
195
194
  # @return [Hash] A hash containing the return value (Success/Failure) and the payload where applicable
196
195
  def get_fax_status(faxids, options = {})
197
- logger.debug "Gathering fax status information for id(s):'#{faxids}'"
196
+ logger.debug "Gathering fax status information for id(s): '#{faxids}'"
198
197
 
199
198
  if faxids.is_a? String
200
- action = "Get_FaxStatus"
199
+ action = 'Get_FaxStatus'
201
200
  elsif faxids.is_a? Array
202
- action = "Get_MultiFaxStatus"
201
+ action = 'Get_MultiFaxStatus'
203
202
  faxids = faxids.join('|')
204
203
  else
205
- logger.warn "Error wth fax ids parameter id(s):'#{faxid}'"
206
- return { :Status => "Failure" }
204
+ logger.warn "Error wth fax ids parameter id(s): '#{faxid}'"
205
+ return { Status: 'Failure' }
207
206
  end
208
207
 
209
- postVariables = {
210
- :action => action,
211
- :sFaxDetailsID => faxids
208
+ postVariables = {
209
+ action: action,
210
+ sFaxDetailsID: faxids
212
211
  }.merge!(options)
213
212
  res = execute(postVariables)
214
- return res
213
+ res
215
214
  end
216
215
 
217
- # Determines the state of a fax that has been scheduled for delivery. Use queue fax to schedule a fax
218
- # for delivery. Note: no validation is done on the fields prior to sending.
216
+ # Determines the state of a fax that has been scheduled for delivery. Use queue fax to schedule a fax
217
+ # for delivery. Note: no validation is done on the fields prior to sending.
219
218
  #
220
219
  # @param senderEmail [String] Email address of the sender
221
220
  # @param receiverNumber [String, Array] Single 11 digit fax number or up to 50 x 11 fax numbers
222
221
  # @param faxType [String] 'SINGLE' or 'BROADCAST'
223
222
  # @param options [Hash] An optional hash paramter to ovveride any default values (ie., Account ID)
224
- # @option options [String] :sResponseFormat The output response format for
223
+ # @option options [String] :sResponseFormat The output response format for
225
224
  # @option options [String] :sAccountCode Internal reference number (Max of 20 Characters)
226
225
  # @option options [String] :sRetries Number of times the system is to retry a number if busy or an error is encountered – number from 0 to 6.
227
- # @option options [String] :sCoverPage If you want to use one of the cover pages on file, specify the cover page you wish to use “Basic”, “Standard” , “Company” or “Personal”. If a cover page is not provided then all cover page variable will be ignored. NOTE: If the default cover page on the account is set to “Attachments ONLY” the cover page will NOT be created irrespective of this variable.
226
+ # @option options [String] :sCoverPage If you want to use one of the cover pages on file, specify the cover page you wish to use “Basic”, “Standard” , “Company” or “Personal”. If a cover page is not provided then all cover page variable will be ignored. NOTE: If the default cover page on the account is set to “Attachments ONLY” the cover page will NOT be created irrespective of this variable.
228
227
  # @option options [String] :sFaxFromHeader From: On the Fax Header Line (max 30 Char)
229
228
  # @option options [String] :sCPFromName Sender’s name on the Cover Page
230
229
  # @option options [String] :sCPToName Recipient’s name on the Cover Page
@@ -234,39 +233,38 @@ module SrFax
234
233
  # @option options [String] :sFileName_x (See supported file types @ https://www.srfax.com/faqs)
235
234
  # @option options [String] :sFileContent_x Base64 encoding of file contents.
236
235
  # @option options [String] :sNotifyURL Provide an absolute URL (beginning with http:// or https://) and the SRFax system will POST back the fax status record when the fax completes. See the ‘NOTIFY URL POST’ section below for details of what is posted.
237
- # @return [Hash] A hash containing the return value (Success/Failure) and the payload where applicable
236
+ # @return [Hash] A hash containing the return value (Success/Failure) and the payload where applicable
238
237
  #
239
238
  # Example code (this will send a fax with 'Sample Fax' as the fileContent field):
240
- # SrFax.queue_fax "yourname@yourdomain.com", "SINGLE", "18888888888", {sFileName_1: "file1.txt", sFileContent_1: Base64.encode64("Sample Fax")}
239
+ # SrFax.queue_fax "yourname@yourdomain.com", "18888888888", "SINGLE", {sFileName_1: "file1.txt", sFileContent_1: Base64.encode64("Sample Fax")}
241
240
  def queue_fax(senderEmail, receiverNumber, faxType, options = {})
242
- logger.debug "Attempting to queue fax"
241
+ logger.debug 'Attempting to queue fax'
243
242
  receiverNumber = receiverNumber.join('|') if receiverNumber.is_a? Array
244
243
 
245
- postVariables = {
246
- :action => "Queue_Fax",
247
- :sSenderEmail => senderEmail,
248
- :sFaxType => faxType,
249
- :sToFaxNumber => receiverNumber
244
+ postVariables = {
245
+ action: 'Queue_Fax',
246
+ sSenderEmail: senderEmail,
247
+ sFaxType: faxType,
248
+ sToFaxNumber: receiverNumber
250
249
  }.merge!(options)
251
250
  res = execute(postVariables)
252
- return res
251
+ res
253
252
  end
254
-
255
- # Attempt to stop a fax from being delivered. See the result payload for possible condiitions in fax status
253
+
254
+ # Attempt to stop a fax from being delivered. See the result payload for possible conditions in fax status
256
255
  #
257
- # @param faxid [String] Stop fax with 'id' as given by the #queue_fax call
258
- # @param options [Hash] An optional hash paramter to ovveride any default values (ie., Account ID)
256
+ # @param faxid [String] Stop fax with 'id' as given by the #queue_fax call.
257
+ # @param options [Hash] An optional hash paramter to ovveride any default values (ie., Account ID).
259
258
  # @return [Hash] A hash containing the return value (Success/Failure) and the payload where applicable
260
259
  def stop_fax(faxid, options = {})
261
- action = nil
262
- logger.debug "Sending stop fax command for id:'#{faxid}'"
260
+ logger.debug "Sending stop fax command for id: '#{faxid}'"
263
261
 
264
- postVariables = {
265
- :action => 'Stop_Fax',
266
- :sFaxDetailsID => faxid
262
+ postVariables = {
263
+ action: 'Stop_Fax',
264
+ sFaxDetailsID: faxid
267
265
  }.merge!(options)
268
266
  res = execute(postVariables)
269
- return res
267
+ res
270
268
  end
271
269
 
272
270
  # Delete a particular fax from the SRFax cloud service
@@ -275,75 +273,48 @@ module SrFax
275
273
  # @param direction [String] Either 'IN' or 'OUT' to specify the inbox or outbox
276
274
  # @return [Hash] A hash containing the return value (Success/Failure) and the payload where applicable
277
275
  #
278
- # Example Payload for Return:
279
- # {"Status"=>"Success", "Result"=>[{"FileName"=>"20150430124505-6104-19_1|20360095", "ReceiveStatus"=>"Ok",
280
- # "Date"=>"Apr 30/15 02:45 PM", "EpochTime"=>1430423105, "CallerID"=>"5555555555", "RemoteID"=>"", "Pages"=>"1",
276
+ # Example Payload for Return:
277
+ # {"Status"=>"Success", "Result"=>[{"FileName"=>"20150430124505-6104-19_1|20360095", "ReceiveStatus"=>"Ok",
278
+ # "Date"=>"Apr 30/15 02:45 PM", "EpochTime"=>1430423105, "CallerID"=>"5555555555", "RemoteID"=>"", "Pages"=>"1",
281
279
  # "Size"=>"5000", "ViewedStatus"=>"N"} ]}
282
280
  def delete_fax(descriptor, direction)
283
- logger.debug "Deleting a fax in the cloud service in the direction of '#{direction}', Descriptor:'#{descriptor}'"
284
- faxname,faxid = descriptor.split('|')
285
- if (faxname.nil? or faxid.nil?)
286
- logger.debug "Valid descriptor not provided to get_fax function call. Descriptor:'#{descriptor}'"
281
+ logger.debug "Deleting a fax in the cloud service in the direction of '#{direction}', Descriptor: '#{descriptor}'"
282
+ faxname, faxid = descriptor.split('|')
283
+ if faxname.nil? || faxid.nil?
284
+ logger.debug "Valid descriptor not provided to get_fax function call. Descriptor: '#{descriptor}'"
287
285
  return nil
288
286
  end
289
-
290
- postVariables = {
291
- :action => "Delete_Fax",
292
- :sFaxFileName_x => descriptor,
293
- :sFaxDetailsID_x => faxid,
294
- :sDirection => direction.upcase,
287
+
288
+ postVariables = {
289
+ action: 'Delete_Fax',
290
+ sFaxFileName_x: descriptor,
291
+ sFaxDetailsID_x: faxid,
292
+ sDirection: direction.upcase
295
293
  }
296
294
  res = execute(postVariables)
297
- return res
295
+ res
298
296
  end
299
297
 
300
298
  private
301
299
 
302
300
  # Actually execute the RESTful post command to the #BASE_URL
303
301
  #
304
- # @param postVariables [String] The list of variables to apply in the POST body when executing the request
305
- # @return [Hash] The hash payload value including a proper status. Will never return nil.
302
+ # @param postVariables [String] The list of variables to apply in the POST body when executing the request.
303
+ # @return [Hash] The hash payload value including a proper status. Will never return nil.
306
304
  def execute(postVariables)
307
305
  logger.debug postVariables.merge(defaults)
308
- # redirect where necessary
309
- res = RestClient::Request.execute(:method => :post, :url => BASE_URL,
310
- :payload => postVariables.merge(defaults).to_json,
311
- :timeout => connection_defaults[:timeout], :open_timeout => connection_defaults[:timeout],
312
- :headers => {:accept => :json}) { |response, request, result, &block|
313
- if [301, 302, 307].include? response.code
314
- response.follow_redirection(request, result, &block)
315
- elsif [200].include? response.code
316
- # default behaviour for OK requests
317
- response.return!(request, result, &block)
318
- else
319
- # suppress the throw's by RestClient
320
- response = Oj.dump({"Status"=>"Failure", "Result"=>"#{response}"}, mode: :compat)
321
- end
322
- }
323
-
324
- # res = RestClient.post(BASE_URL, postVariables.merge(defaults).to_json,
325
- # :content_type => :json, :accept => :json,
326
- # :timeout => connection_defaults[:timeout], :open_timeout => connection_defaults[:timeout] ){ |response, request, result, &block|
327
- # if [301, 302, 307].include? response.code
328
- # response.follow_redirection(request, result, &block)
329
- # elsif [200].include? response.code
330
- # # default behaviour
331
- # response.return!(request, result, &block)
332
- # else
333
- # # suppress the throw's by RestClient
334
- # response = {"Status"=>"Failure", "Result"=>"#{response}"}.to_json
335
- # end
336
- # }
337
- return_data = nil
338
- return_data = !res.nil? ? JSON.parse(res) : nil
339
-
340
- if return_data.nil? || return_data.fetch("Status", "Failure") != "Success"
341
- logger.debug "Execution of SR Fax command not successful"
342
- return_data = { :Status => "Failure", :Result => return_data.fetch("Result", "") }
306
+ # Redirect where necessary.
307
+ res = RestClient.post(BASE_URL, postVariables.merge(defaults), { accept: :json })
308
+ unless res.code == 200
309
+ return { 'Status' => 'Failed', 'Result' => res.body }.with_indifferent_access
343
310
  end
344
311
 
345
- return return_data.with_indifferent_access
312
+ return_data = JSON.parse(res.body).with_indifferent_access
313
+
314
+ if return_data['Status'] == 'Failed'
315
+ logger.debug 'Execution of SR Fax command not successful'
316
+ end
317
+ return_data
346
318
  end
347
319
  end
348
320
  end
349
-
@@ -0,0 +1,3 @@
1
+ module SrFax
2
+ VERSION = '0.5.3'.freeze
3
+ end
@@ -1,30 +1,30 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'version.rb'
4
+ require 'srfax/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "sr_fax"
7
+ spec.name = 'sr_fax'
8
8
  spec.version = SrFax::VERSION
9
- spec.authors = ["Jeff Klink", "Sean Esson"]
10
- spec.email = ["techcanuck@gmail.com"]
9
+ spec.authors = ['Jeff Klink', 'Sean Esson', 'Brady Bouchard']
10
+ spec.email = ['techcanuck@gmail.com']
11
11
 
12
- spec.summary = %q{SR Fax Module provides and easy way to access SR fax online services to send, receive or query faxes}
13
- spec.description = %q{This is the 'unofficial' SRFax (http://www.srfax.com) API wrapper for ruby. The API documentation for SRFax can be found at https://www.srfax.com/srf/media/SRFax-REST-API-Documentation.pdf}
14
- spec.homepage = "https://github.com/TechCanuck/srfax"
15
- spec.license = "MIT"
12
+ spec.summary = 'SR Fax Module provides and easy way to access SR fax online services to send, receive or query faxes'
13
+ spec.description = "This is the 'unofficial' SRFax (http://www.srfax.com) API wrapper for ruby. The API documentation for SRFax can be found at https://www.srfax.com/srf/media/SRFax-REST-API-Documentation.pdf"
14
+ spec.homepage = 'https://github.com/TechCanuck/srfax'
15
+ spec.license = 'MIT'
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = "exe"
18
+ spec.bindir = 'exe'
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
- spec.require_paths = ["lib"]
20
+ spec.require_paths = ['lib']
21
21
 
22
- spec.add_development_dependency "bundler", "~> 1.6"
23
- spec.add_development_dependency "rake", "~> 10.0"
24
- spec.add_development_dependency "pry", "~> 0.8"
25
- spec.add_development_dependency "yard", "~> 0.8"
22
+ spec.add_development_dependency 'minitest'
23
+ spec.add_development_dependency 'bundler', '~> 1.6'
24
+ spec.add_development_dependency 'rake', '~> 11.0'
25
+ spec.add_development_dependency 'pry', '~> 0.8'
26
+ spec.add_development_dependency 'yard', '~> 0.8'
26
27
  spec.add_dependency 'logger', '~> 1'
27
- spec.add_dependency 'oj', '~> 2.11'
28
- spec.add_dependency 'activesupport', '~> 4.2'
29
- spec.add_dependency 'rest-client', '~> 1.7'
28
+ spec.add_dependency 'activesupport', ['>= 4.2', '< 6']
29
+ spec.add_dependency 'rest-client', '~> 2.0'
30
30
  end
metadata CHANGED
@@ -1,16 +1,31 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sr_fax
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Klink
8
8
  - Sean Esson
9
+ - Brady Bouchard
9
10
  autorequire:
10
11
  bindir: exe
11
12
  cert_chain: []
12
- date: 2015-09-03 00:00:00.000000000 Z
13
+ date: 2016-08-18 00:00:00.000000000 Z
13
14
  dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: minitest
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '0'
14
29
  - !ruby/object:Gem::Dependency
15
30
  name: bundler
16
31
  requirement: !ruby/object:Gem::Requirement
@@ -31,14 +46,14 @@ dependencies:
31
46
  requirements:
32
47
  - - "~>"
33
48
  - !ruby/object:Gem::Version
34
- version: '10.0'
49
+ version: '11.0'
35
50
  type: :development
36
51
  prerelease: false
37
52
  version_requirements: !ruby/object:Gem::Requirement
38
53
  requirements:
39
54
  - - "~>"
40
55
  - !ruby/object:Gem::Version
41
- version: '10.0'
56
+ version: '11.0'
42
57
  - !ruby/object:Gem::Dependency
43
58
  name: pry
44
59
  requirement: !ruby/object:Gem::Requirement
@@ -81,48 +96,40 @@ dependencies:
81
96
  - - "~>"
82
97
  - !ruby/object:Gem::Version
83
98
  version: '1'
84
- - !ruby/object:Gem::Dependency
85
- name: oj
86
- requirement: !ruby/object:Gem::Requirement
87
- requirements:
88
- - - "~>"
89
- - !ruby/object:Gem::Version
90
- version: '2.11'
91
- type: :runtime
92
- prerelease: false
93
- version_requirements: !ruby/object:Gem::Requirement
94
- requirements:
95
- - - "~>"
96
- - !ruby/object:Gem::Version
97
- version: '2.11'
98
99
  - !ruby/object:Gem::Dependency
99
100
  name: activesupport
100
101
  requirement: !ruby/object:Gem::Requirement
101
102
  requirements:
102
- - - "~>"
103
+ - - ">="
103
104
  - !ruby/object:Gem::Version
104
105
  version: '4.2'
106
+ - - "<"
107
+ - !ruby/object:Gem::Version
108
+ version: '6'
105
109
  type: :runtime
106
110
  prerelease: false
107
111
  version_requirements: !ruby/object:Gem::Requirement
108
112
  requirements:
109
- - - "~>"
113
+ - - ">="
110
114
  - !ruby/object:Gem::Version
111
115
  version: '4.2'
116
+ - - "<"
117
+ - !ruby/object:Gem::Version
118
+ version: '6'
112
119
  - !ruby/object:Gem::Dependency
113
120
  name: rest-client
114
121
  requirement: !ruby/object:Gem::Requirement
115
122
  requirements:
116
123
  - - "~>"
117
124
  - !ruby/object:Gem::Version
118
- version: '1.7'
125
+ version: '2.0'
119
126
  type: :runtime
120
127
  prerelease: false
121
128
  version_requirements: !ruby/object:Gem::Requirement
122
129
  requirements:
123
130
  - - "~>"
124
131
  - !ruby/object:Gem::Version
125
- version: '1.7'
132
+ version: '2.0'
126
133
  description: This is the 'unofficial' SRFax (http://www.srfax.com) API wrapper for
127
134
  ruby. The API documentation for SRFax can be found at https://www.srfax.com/srf/media/SRFax-REST-API-Documentation.pdf
128
135
  email:
@@ -139,7 +146,7 @@ files:
139
146
  - bin/console
140
147
  - bin/setup
141
148
  - lib/srfax.rb
142
- - lib/version.rb
149
+ - lib/srfax/version.rb
143
150
  - srfax.gemspec
144
151
  homepage: https://github.com/TechCanuck/srfax
145
152
  licenses:
@@ -1,4 +0,0 @@
1
- module SrFax
2
- # Version # for SrFax
3
- VERSION = '0.4.1'
4
- end