phaxio 0.5.0 → 2.0.0
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/.gitignore +1 -1
- data/.travis.yml +2 -1
- data/Gemfile +10 -0
- data/README.md +260 -73
- data/Rakefile +6 -16
- data/lib/phaxio.rb +47 -3
- data/lib/phaxio/client.rb +117 -484
- data/lib/phaxio/config.rb +31 -0
- data/lib/phaxio/error.rb +13 -0
- data/lib/phaxio/helpers/mime_type_helper.rb +14 -0
- data/lib/phaxio/resource.rb +168 -0
- data/lib/phaxio/resources.rb +7 -0
- data/lib/phaxio/resources/account.rb +41 -0
- data/lib/phaxio/resources/callback.rb +65 -0
- data/lib/phaxio/resources/fax.rb +310 -0
- data/lib/phaxio/resources/fax_recipient.rb +41 -0
- data/lib/phaxio/resources/phax_code.rb +89 -0
- data/lib/phaxio/resources/phone_number.rb +112 -0
- data/lib/phaxio/resources/public.rb +8 -0
- data/lib/phaxio/resources/public/area_code.rb +64 -0
- data/lib/phaxio/resources/public/country.rb +54 -0
- data/lib/phaxio/version.rb +1 -1
- data/phaxio.gemspec +9 -12
- data/spec/client_spec.rb +132 -0
- data/spec/helpers/mime_type_helper_spec.rb +11 -0
- data/spec/phaxio_spec.rb +20 -0
- data/spec/resources/account_spec.rb +24 -0
- data/spec/resources/callback_spec.rb +34 -0
- data/spec/resources/fax_spec.rb +227 -0
- data/spec/resources/phax_code_spec.rb +83 -0
- data/spec/resources/phone_number_spec.rb +89 -0
- data/spec/resources/public/area_code_spec.rb +24 -0
- data/spec/resources/public/country_spec.rb +24 -0
- data/spec/spec_helper.rb +6 -0
- data/spec/support/credentials.rb +7 -0
- data/spec/support/expectations.rb +9 -0
- data/spec/support/files/test.pdf +0 -0
- data/spec/support/vcr.rb +9 -0
- data/spec/support/vcr_cassettes/resources/account/status.yml +44 -0
- data/spec/support/vcr_cassettes/resources/fax/cancel.yml +46 -0
- data/spec/support/vcr_cassettes/resources/fax/create.yml +230 -0
- data/spec/support/vcr_cassettes/resources/fax/delete.yml +44 -0
- data/spec/support/vcr_cassettes/resources/fax/delete_file.yml +44 -0
- data/spec/support/vcr_cassettes/resources/fax/file.yml +251 -0
- data/spec/support/vcr_cassettes/resources/fax/get.yml +44 -0
- data/spec/support/vcr_cassettes/resources/fax/list.yml +56 -0
- data/spec/support/vcr_cassettes/resources/fax/resend.yml +46 -0
- data/spec/support/vcr_cassettes/resources/fax/test_receive.yml +231 -0
- data/spec/support/vcr_cassettes/resources/phax_code/create.yml +100 -0
- data/spec/support/vcr_cassettes/resources/phax_code/get.yml +190 -0
- data/spec/support/vcr_cassettes/resources/phone_number/create.yml +47 -0
- data/spec/support/vcr_cassettes/resources/phone_number/get.yml +45 -0
- data/spec/support/vcr_cassettes/resources/phone_number/list.yml +52 -0
- data/spec/support/vcr_cassettes/resources/phone_number/release.yml +44 -0
- data/spec/support/vcr_cassettes/resources/public/area_codes/list.yml +77 -0
- data/spec/support/vcr_cassettes/resources/public/country/list.yml +54 -0
- metadata +70 -82
- data/.ruby-version +0 -1
- data/CHANGELOG +0 -6
- data/test/files/test.pdf +0 -0
- data/test/integration/phaxio_integration_test.rb +0 -45
- data/test/support/responses/account_status.json +0 -9
- data/test/support/responses/cancel_success.json +0 -4
- data/test/support/responses/fax_status_success.json +0 -21
- data/test/support/responses/list_faxes.json +0 -68
- data/test/support/responses/list_numbers.json +0 -22
- data/test/support/responses/provision_number.json +0 -12
- data/test/support/responses/release_number.json +0 -7
- data/test/support/responses/send_failure.json +0 -8
- data/test/support/responses/send_success.json +0 -8
- data/test/support/responses/test.pdf +0 -0
- data/test/support/responses/test_receive.json +0 -4
- data/test/test_helper.rb +0 -57
- data/test/test_phaxio.rb +0 -128
@@ -0,0 +1,31 @@
|
|
1
|
+
module Phaxio
|
2
|
+
class Config
|
3
|
+
DEFAULT_API_ENDPOINT = 'https://api.phaxio.com/v2/'.freeze
|
4
|
+
|
5
|
+
class << self
|
6
|
+
# Your Phaxio API key. This will be used for all interactions with the Phaxio API.
|
7
|
+
#
|
8
|
+
# To find your API key, visit https://console.phaxio.com/api_credentials
|
9
|
+
attr_accessor :api_key
|
10
|
+
|
11
|
+
# Your Phaxio API secret. This will be used for all interactions with the Phaxio API.
|
12
|
+
#
|
13
|
+
# To find your API secret, visit https://console.phaxio.com/api_credentials
|
14
|
+
attr_accessor :api_secret
|
15
|
+
|
16
|
+
# Your Phaxio callback token. This will be used to verify that callback requests are coming
|
17
|
+
# from Phaxio.
|
18
|
+
#
|
19
|
+
# To find your callback token, visit https://console.phaxio.com/user/callbacks/edit
|
20
|
+
attr_accessor :callback_token
|
21
|
+
|
22
|
+
# The Phaxio API endpoint. Users generally shouldn't need to change it.
|
23
|
+
# Defaults to https://api.phaxio.com/v2/
|
24
|
+
attr_writer :api_endpoint
|
25
|
+
|
26
|
+
def api_endpoint
|
27
|
+
@api_endpoint || DEFAULT_API_ENDPOINT
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/phaxio/error.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
module Phaxio
|
2
|
+
module Error
|
3
|
+
PhaxioError = Class.new StandardError
|
4
|
+
%w[
|
5
|
+
AuthenticationError
|
6
|
+
NotFoundError
|
7
|
+
InvalidRequestError
|
8
|
+
RateLimitExceededError
|
9
|
+
GeneralError
|
10
|
+
ApiConnectionError
|
11
|
+
].each { |error_klass_name| const_set error_klass_name, Class.new(PhaxioError) }
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Phaxio
|
2
|
+
# @api private
|
3
|
+
module MimeTypeHelper
|
4
|
+
class << self
|
5
|
+
def extension_for_mimetype mimetype
|
6
|
+
MIME::Types[mimetype].first.extensions.first
|
7
|
+
end
|
8
|
+
|
9
|
+
def mimetype_for_file file_path
|
10
|
+
MIME::Types.of(file_path).first.content_type
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,168 @@
|
|
1
|
+
module Phaxio
|
2
|
+
# The base class for API resources, such as `Fax` and `PhoneNumber`.
|
3
|
+
#
|
4
|
+
# This class is considered an implementation detail, and shouldn't be directly relied upon by
|
5
|
+
# users.
|
6
|
+
#
|
7
|
+
# The only exception is that this class will continue to be the base class for all Phaxio
|
8
|
+
# resources, so checking whether a fax instance is a kind of Phaxio::Resource will always return
|
9
|
+
# true.
|
10
|
+
class Resource
|
11
|
+
private
|
12
|
+
|
13
|
+
# The raw response data
|
14
|
+
attr_accessor :raw_data
|
15
|
+
|
16
|
+
# Populates the instance's attributes based on the `raw_data`.
|
17
|
+
def populate_attributes
|
18
|
+
self.class.normal_attribute_list.each do |normal_attribute|
|
19
|
+
self.public_send "#{normal_attribute}=", raw_data[normal_attribute]
|
20
|
+
end
|
21
|
+
|
22
|
+
self.class.time_attribute_list.each do |time_attribute|
|
23
|
+
time = raw_data[time_attribute]
|
24
|
+
time = Time.parse(time) if !time.nil?
|
25
|
+
self.public_send "#{time_attribute}=", time
|
26
|
+
end
|
27
|
+
|
28
|
+
self.class.collection_attribute_mappings.each do |collection_attribute, klass|
|
29
|
+
collection = raw_data[collection_attribute] || []
|
30
|
+
collection = {'data' => collection}
|
31
|
+
collection = klass.response_collection(collection)
|
32
|
+
self.public_send "#{collection_attribute}=", collection
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# @see Phaxio::Resource.response_record
|
37
|
+
def initialize raw_data
|
38
|
+
self.raw_data = raw_data
|
39
|
+
populate_attributes
|
40
|
+
end
|
41
|
+
|
42
|
+
class << self
|
43
|
+
# @api private
|
44
|
+
# Returns a new instance of the resource for this data.
|
45
|
+
# @param raw_data [Hash] The raw response data from Phaxio.
|
46
|
+
# @return [Phaxio::Resource] The resource instance.
|
47
|
+
def response_record raw_data
|
48
|
+
new raw_data
|
49
|
+
end
|
50
|
+
|
51
|
+
# @api private
|
52
|
+
# Returns a new collection of resource instances for this data.
|
53
|
+
# @param raw_data [Array] The raw response data from Phaxio.
|
54
|
+
# @return [Phaxio::Resource::Collection] A collection of Phaxio::Resource instances.
|
55
|
+
def response_collection raw_data
|
56
|
+
Collection.new raw_data, self
|
57
|
+
end
|
58
|
+
|
59
|
+
# @api private
|
60
|
+
# Full list of resource-specific attributes.
|
61
|
+
attr_accessor :attribute_list
|
62
|
+
|
63
|
+
# @api private
|
64
|
+
# List of resource-specific attributes that don't require additional processing during
|
65
|
+
# instance data population.
|
66
|
+
attr_accessor :normal_attribute_list
|
67
|
+
|
68
|
+
# @api private
|
69
|
+
# List of resource-specific attributes that must be parsed into a Time object during instance
|
70
|
+
# data population.
|
71
|
+
attr_accessor :time_attribute_list
|
72
|
+
|
73
|
+
# @api private
|
74
|
+
# Mapping of resource-specific attributes that must be parsed into a resource collection.
|
75
|
+
attr_accessor :collection_attribute_mappings
|
76
|
+
|
77
|
+
private :new
|
78
|
+
|
79
|
+
private
|
80
|
+
|
81
|
+
# Creates accessors for the given normal attributes and adds them to the class's internal
|
82
|
+
# attribute lists.
|
83
|
+
# @param attribute_list [Array]
|
84
|
+
# A list of attributes as strings or symbols.
|
85
|
+
# @see Phaxio::Resource.normal_attribute_list
|
86
|
+
def has_normal_attributes attribute_list
|
87
|
+
attribute_list = attribute_list.map { |attribute_name| attribute_name.to_s.freeze }
|
88
|
+
attr_accessor *attribute_list
|
89
|
+
self.attribute_list += attribute_list
|
90
|
+
self.normal_attribute_list += attribute_list
|
91
|
+
end
|
92
|
+
|
93
|
+
# Creates accessors for the given time attributes and adds them to the class's internal
|
94
|
+
# attribute lists.
|
95
|
+
# @param attribute_list [Array]
|
96
|
+
# A list of attributes as strings or symbols.
|
97
|
+
# @see Phaxio::Resource.time_attribute_list
|
98
|
+
def has_time_attributes attribute_list
|
99
|
+
attribute_list = attribute_list.map { |attribute_name| attribute_name.to_s.freeze }
|
100
|
+
attr_accessor *attribute_list
|
101
|
+
self.attribute_list += attribute_list
|
102
|
+
self.time_attribute_list += attribute_list
|
103
|
+
end
|
104
|
+
|
105
|
+
# Creates accessors for the given collection attributes and adds them to the class's internal
|
106
|
+
# attribute lists.
|
107
|
+
# @param attribute_hash [Hash<String, Symbol => Phaxio::Resource>]
|
108
|
+
# A hash which has keys corresponding to the attribute name on this resource, and values
|
109
|
+
# corresponding to the resource class for the collection's items.
|
110
|
+
# @see Phaxio::Resource.collection_attribute_mappings
|
111
|
+
def has_collection_attributes attribute_hash
|
112
|
+
# Array#to_h doesn't exist in 2.0.0, hence the inject here.
|
113
|
+
attribute_hash = attribute_hash
|
114
|
+
.map { |k, v| [ k.to_s.freeze, v ] }
|
115
|
+
.inject({}) { |memo, obj| memo.tap { |memo| memo[obj.first] = obj.last } }
|
116
|
+
attr_accessor *attribute_hash.keys
|
117
|
+
self.attribute_list += attribute_hash.keys
|
118
|
+
self.collection_attribute_mappings = self.collection_attribute_mappings.merge(attribute_hash)
|
119
|
+
end
|
120
|
+
|
121
|
+
# Use the inherited hook to dynamically set each subclass's attribute lists to empty arrays
|
122
|
+
# upon creation.
|
123
|
+
def inherited subclass
|
124
|
+
subclass.attribute_list = []
|
125
|
+
subclass.normal_attribute_list = []
|
126
|
+
subclass.time_attribute_list = []
|
127
|
+
subclass.collection_attribute_mappings = {}
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
class Collection
|
132
|
+
include Enumerable
|
133
|
+
|
134
|
+
# The raw response data
|
135
|
+
attr_accessor :raw_data, :collection, :total, :per_page, :page
|
136
|
+
|
137
|
+
# Returns a new collection of resource instances for this data. Generally this is not called
|
138
|
+
# directly.
|
139
|
+
#
|
140
|
+
# @see Phaxio::Resource.response_collection
|
141
|
+
def initialize response_data, resource
|
142
|
+
if response_data.key? 'paging'
|
143
|
+
self.total = response_data['paging']['total']
|
144
|
+
self.per_page = response_data['paging']['per_page']
|
145
|
+
self.page = response_data['paging']['page']
|
146
|
+
end
|
147
|
+
self.raw_data = response_data['data']
|
148
|
+
self.collection = raw_data.map { |record_data| resource.response_record record_data }
|
149
|
+
end
|
150
|
+
|
151
|
+
def [] idx
|
152
|
+
collection[idx]
|
153
|
+
end
|
154
|
+
|
155
|
+
def each(&block)
|
156
|
+
collection.each(&block)
|
157
|
+
end
|
158
|
+
|
159
|
+
def length
|
160
|
+
collection.length
|
161
|
+
end
|
162
|
+
|
163
|
+
def size
|
164
|
+
length
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
module Phaxio
|
2
|
+
# This module contains all Phaxio Resource classes. These have already been included into the
|
3
|
+
# Phaxio namespace, so you can write Phaxio::Fax instead of Phaxio::Resources::Fax. If that's
|
4
|
+
# still too verbose, you can `include Phaxio::Resources` to pull only these in.
|
5
|
+
module Resources
|
6
|
+
end
|
7
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Phaxio
|
2
|
+
module Resources
|
3
|
+
# Information about your Phaxio account.
|
4
|
+
class Account < Resource
|
5
|
+
ACCOUNT_PATH = 'account'
|
6
|
+
private_constant :ACCOUNT_PATH
|
7
|
+
|
8
|
+
# @return [Integer] Your current account funds balance in cents.
|
9
|
+
# @!attribute balance
|
10
|
+
|
11
|
+
# @return [Hash<String: Integer>] A hash of the number of faxes sent and received today.
|
12
|
+
# @!attribute faxes_today
|
13
|
+
|
14
|
+
# @return [Hash<String: Integer>] A hash of the number of faxes sent and received this month.
|
15
|
+
# @!attribute faxes_this_month
|
16
|
+
has_normal_attributes %w[balance faxes_today faxes_this_month]
|
17
|
+
|
18
|
+
class << self
|
19
|
+
# Get information about your Phaxio account, including your balance, number of faxes sent
|
20
|
+
# today, and number of faxes sent this week.
|
21
|
+
# @param params [Hash]
|
22
|
+
# Any parameters to send to Phaxio. This action does not have any unique parameters.
|
23
|
+
# @return [Phaxio::Resources::Acount] Your account information.
|
24
|
+
# @raise [Phaxio::Error::PhaxioError]
|
25
|
+
# @see https://www.phaxio.com/docs/api/v2/account/status
|
26
|
+
def get params = {}
|
27
|
+
response = Client.request :get, account_status_endpoint, params
|
28
|
+
response_record response
|
29
|
+
end
|
30
|
+
alias :status :get
|
31
|
+
alias :retrieve :get
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def account_status_endpoint
|
36
|
+
"#{ACCOUNT_PATH}/status"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module Phaxio
|
2
|
+
module Resources
|
3
|
+
# Provides utilities for working with callbacks.
|
4
|
+
# @see https://www.phaxio.com/docs/api/v2/faxes/send_callback
|
5
|
+
# @see https://www.phaxio.com/docs/api/v2/faxes/receive_callback
|
6
|
+
class Callback
|
7
|
+
DIGEST = OpenSSL::Digest.new('sha1')
|
8
|
+
private_constant :DIGEST
|
9
|
+
|
10
|
+
class << self
|
11
|
+
# Determines whether or not the passed signature is valid for the given
|
12
|
+
# url, params, and files.
|
13
|
+
# @param signature [String]
|
14
|
+
# The signature received from Phaxio.
|
15
|
+
# @param url [String]
|
16
|
+
# The callback URL used in this request.
|
17
|
+
# @param params [Hash]
|
18
|
+
# The parameters received with the callback, excluding files.
|
19
|
+
# @param files [Array<File>]
|
20
|
+
# The files received with the callback, if any.
|
21
|
+
# @return [true, false]
|
22
|
+
# @raise [Phaxio::Error::PhaxioError]
|
23
|
+
# @see https://www.phaxio.com/docs/security/callbacks
|
24
|
+
def valid_signature? signature, url, params, files = []
|
25
|
+
check_signature = generate_check_signature url, params, files
|
26
|
+
check_signature == signature
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def generate_check_signature url, params, files = []
|
32
|
+
params_string = generate_params_string(params)
|
33
|
+
files_string = generate_files_string(files)
|
34
|
+
callback_data = "#{url}#{params_string}#{files_string}"
|
35
|
+
OpenSSL::HMAC.hexdigest(DIGEST, callback_token, callback_data)
|
36
|
+
end
|
37
|
+
|
38
|
+
def callback_token
|
39
|
+
Phaxio.callback_token or raise(Error::PhaxioError, 'No callback token has been set')
|
40
|
+
end
|
41
|
+
|
42
|
+
def generate_params_string(params)
|
43
|
+
sorted_params = params.sort_by { |key, _value| key }
|
44
|
+
params_strings = sorted_params.map { |key, value| "#{key}#{value}" }
|
45
|
+
params_strings.join
|
46
|
+
end
|
47
|
+
|
48
|
+
def generate_files_string(files)
|
49
|
+
files_array = files_to_array(files).reject(&:nil?)
|
50
|
+
sorted_files = files_array.sort_by { |file| file[:name] }
|
51
|
+
files_strings = sorted_files.map { |file| generate_file_string(file) }
|
52
|
+
files_strings.join
|
53
|
+
end
|
54
|
+
|
55
|
+
def files_to_array(files)
|
56
|
+
files.is_a?(Array) ? files : [files]
|
57
|
+
end
|
58
|
+
|
59
|
+
def generate_file_string(file)
|
60
|
+
file[:name] + DIGEST.hexdigest(file[:tempfile].read)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,310 @@
|
|
1
|
+
module Phaxio
|
2
|
+
module Resources
|
3
|
+
# Provides functionality for viewing and managing faxes.
|
4
|
+
class Fax < Resource
|
5
|
+
FAXES_PATH = 'faxes'.freeze
|
6
|
+
private_constant :FAXES_PATH
|
7
|
+
|
8
|
+
# @return [Integer] the ID associated with this fax.
|
9
|
+
# @!attribute id
|
10
|
+
|
11
|
+
# @return ["sent" | "received"] the direction of the fax.
|
12
|
+
# @!attribute direction
|
13
|
+
|
14
|
+
# @return [Integer] the number of pages in the fax.
|
15
|
+
# @!attribute num_pages
|
16
|
+
|
17
|
+
# @return [Integer] the cost of the fax in cents.
|
18
|
+
# @!attribute cost
|
19
|
+
|
20
|
+
# @return [String] the status of the fax.
|
21
|
+
# @!attribute status
|
22
|
+
|
23
|
+
# @return [true | false]
|
24
|
+
# an indication of whether or not this is a test fax.
|
25
|
+
# @!attribute is_test
|
26
|
+
|
27
|
+
# @return [String]
|
28
|
+
# for sent faxes only, the number set as the Caller ID when sending the
|
29
|
+
# fax.
|
30
|
+
# @!attribute caller_id
|
31
|
+
|
32
|
+
# @return [String]
|
33
|
+
# for received faxes only, the sender's E.164 phone number.
|
34
|
+
# @!attribute from_number
|
35
|
+
|
36
|
+
# @return [String]
|
37
|
+
# for received faxes only, the Phaxio phone number that was used to
|
38
|
+
# receive the call.
|
39
|
+
# @!attribute to_number
|
40
|
+
|
41
|
+
# @return [String]
|
42
|
+
# one of the Phaxio error types. Will give you a general idea of what
|
43
|
+
# went wrong for a failed fax.
|
44
|
+
# @!attribute error_type
|
45
|
+
|
46
|
+
# @return [String]
|
47
|
+
# a more detailed description of what went wrong for a failed fax.
|
48
|
+
# @!attribute error_message
|
49
|
+
|
50
|
+
# @return [Integer]
|
51
|
+
# a numeric error code that corresponds to the error message, if any.
|
52
|
+
# @!attribute error_id
|
53
|
+
|
54
|
+
# @return [Hash]
|
55
|
+
# a hash of tag name and value pairs. If a fax was sent with tag
|
56
|
+
# metadata, it will appear here.
|
57
|
+
# @!attribute tags
|
58
|
+
has_normal_attributes %w[
|
59
|
+
id direction num_pages cost status is_test caller_id from_number
|
60
|
+
to_number error_type error_message error_id tags
|
61
|
+
]
|
62
|
+
|
63
|
+
# @return [Time]
|
64
|
+
# the time the fax was created.
|
65
|
+
# @!attribute created_at
|
66
|
+
|
67
|
+
# @return [Time]
|
68
|
+
# the time the fax was completed.
|
69
|
+
# @!attribute completed_at
|
70
|
+
|
71
|
+
has_time_attributes %w[created_at completed_at]
|
72
|
+
|
73
|
+
# @return [Phaxio::Resource::Collection<Phaxio::Resources::FaxRecipient>]
|
74
|
+
# a collection of this fax's recipients.
|
75
|
+
# @!attribute recipients
|
76
|
+
|
77
|
+
has_collection_attributes({recipients: FaxRecipient})
|
78
|
+
|
79
|
+
# A reference to a fax. This is returned by certain actions which don't
|
80
|
+
# return the full fax.
|
81
|
+
class Reference
|
82
|
+
# @return [Integer]
|
83
|
+
# The ID of the fax being referenced.
|
84
|
+
attr_accessor :id
|
85
|
+
|
86
|
+
# Gets the referenced fax.
|
87
|
+
# @return [Phaxio::Resource::Fax]
|
88
|
+
# The referenced Fax.
|
89
|
+
def get
|
90
|
+
Fax.get self
|
91
|
+
end
|
92
|
+
alias :retrieve :get
|
93
|
+
alias :find :get
|
94
|
+
|
95
|
+
def to_i
|
96
|
+
id
|
97
|
+
end
|
98
|
+
|
99
|
+
private
|
100
|
+
|
101
|
+
def initialize id
|
102
|
+
self.id = id
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
class << self
|
107
|
+
# @macro paging
|
108
|
+
# List faxes in date range.
|
109
|
+
# @param params [Hash]
|
110
|
+
# Any parameters to send to Phaxio.
|
111
|
+
# - *direction* [String] - Either "sent" or "received". Limits results
|
112
|
+
# to faxes with the specified direction.
|
113
|
+
# - *status* [String] - Limits results to faxes with the specified
|
114
|
+
# status.
|
115
|
+
# - *phone_number* [String] - A phone number in E.164 format that you
|
116
|
+
# want to use to filter results. The phone number must be an exact
|
117
|
+
# match, not a number fragment.
|
118
|
+
# - *tag* [Hash<String: String>] - A tag name and value that you want
|
119
|
+
# to use to filter results.
|
120
|
+
# @return [Phaxio::Resource::Collection<Phaxio::Resources::Fax>]
|
121
|
+
# The collection of faxes matching your request.
|
122
|
+
# @raise [Phaxio::Error::PhaxioError]
|
123
|
+
# @see https://www.phaxio.com/docs/api/v2/faxes/list_faxes
|
124
|
+
def list params = {}
|
125
|
+
response = Client.request :get, faxes_endpoint, params
|
126
|
+
response_collection response
|
127
|
+
end
|
128
|
+
|
129
|
+
# Create and send a fax.
|
130
|
+
# @param params [Hash]
|
131
|
+
# Any parameters to send to Phaxio. At least one *to* number is
|
132
|
+
# required, as well as at least one *file* or *content_url*.
|
133
|
+
# - *to* [String | Array<String>] - One or more phone numbers in E.164
|
134
|
+
# format where this fax should be sent.
|
135
|
+
# - *file* [File | Array<File>] - The fax file(s) to be sent.
|
136
|
+
# - *content_url* [String, Array<String>] - URL(s) to be rendered and
|
137
|
+
# sent as the fax content. If the *file* param is included as well,
|
138
|
+
# URL content will come first in the transmitted files.
|
139
|
+
# - *header_text* [String] - Text that will be displayed at the top of
|
140
|
+
# each page of the fax. 50-character maximum. Defaults to "-".
|
141
|
+
# - *batch_delay* [Integer] - Enabled batching and specifies the
|
142
|
+
# amount of time, in seconds, before the batch is fired. Max is 3600
|
143
|
+
# (one hour).
|
144
|
+
# - *batch_collision_avoidance* [true | false] - When *batch_delay* is
|
145
|
+
# set, the fax will be blocked until the receiving machine is no
|
146
|
+
# longer busy.
|
147
|
+
# - *callback_url* [String] - You can specify a callback URL that will
|
148
|
+
# override one set globally in your account.
|
149
|
+
# - *cancel_timeout* [Integer] - Number of minutes after which the fax
|
150
|
+
# will be canceled if it hasn't yet completed. Must be between 3 and
|
151
|
+
# \60. Additionally, for faxes with *batch_delay* set, it must be at
|
152
|
+
# least 3 minutes after the *batch_delay*. If not, it will be
|
153
|
+
# automatically extended when batching.
|
154
|
+
# - *tag* [Hash<String: Object>] - A tag that contains metadata
|
155
|
+
# relevant to your application. For example, you may wish to tag a
|
156
|
+
# fax with an order id in your application. You could pass Phaxio
|
157
|
+
# the following parameter: +tag: {order_id: 1234}+. You may specify
|
158
|
+
# up to 10 tags.
|
159
|
+
# @return [Phaxio::Resources::Fax]
|
160
|
+
# The created fax.
|
161
|
+
# @raise [Phaxio::Error::PhaxioError]
|
162
|
+
# @see https://www.phaxio.com/docs/api/v2/faxes/create_and_send_fax
|
163
|
+
# @see https://www.phaxio.com/docs/api/v2/faxes/batching
|
164
|
+
def create params = {}
|
165
|
+
response = Client.request :post, faxes_endpoint, params
|
166
|
+
response_reference response
|
167
|
+
end
|
168
|
+
alias :send :create
|
169
|
+
|
170
|
+
# Get fax info.
|
171
|
+
# @param id [Integer]
|
172
|
+
# The ID of the fax to retrieve information about.
|
173
|
+
# @param params [Hash]
|
174
|
+
# A hash of parameters to send to Phaxio. This action takes no unique parameters.
|
175
|
+
# @return [Phaxio::Resource::Fax] The requested fax.
|
176
|
+
# @raise [Phaxio::Error::PhaxioError]
|
177
|
+
# @see https://www.phaxio.com/docs/api/v2/faxes/get_fax
|
178
|
+
def get id, params = {}
|
179
|
+
response = Client.request :get, fax_endpoint(id.to_i), params
|
180
|
+
response_record response
|
181
|
+
end
|
182
|
+
alias :retrieve :get
|
183
|
+
alias :find :get
|
184
|
+
|
185
|
+
# Cancel a fax.
|
186
|
+
# @param id [Integer]
|
187
|
+
# The ID of the fax to cancel.
|
188
|
+
# @param params [Hash]
|
189
|
+
# A hash of parameters to send to Phaxio. This action takes no unique
|
190
|
+
# parameters.
|
191
|
+
# @return [Phaxio::Resources::Fax::Reference]
|
192
|
+
# A reference to the canceled fax.
|
193
|
+
# @raise [Phaxio::Error::PhaxioError]
|
194
|
+
# @see https://www.phaxio.com/docs/api/v2/faxes/cancel
|
195
|
+
def cancel id, params = {}
|
196
|
+
response = Client.request :post, cancel_fax_endpoint(id), params
|
197
|
+
response_reference response
|
198
|
+
end
|
199
|
+
|
200
|
+
# Resend a fax.
|
201
|
+
# @param id [Integer]
|
202
|
+
# The ID of the fax to resend.
|
203
|
+
# @param params [Hash]
|
204
|
+
# A hash of parameters to send to Phaxio.
|
205
|
+
# - *callback_url* [String] - This parameter may be used to set a
|
206
|
+
# different callback URL for the new fax.
|
207
|
+
# @return [Phaxio::Resources::Fax::Reference]
|
208
|
+
# A reference to the resent fax.
|
209
|
+
# @raise [Phaxio::Error::PhaxioError]
|
210
|
+
# @see https://www.phaxio.com/docs/api/v2/faxes/resend
|
211
|
+
def resend id, params = {}
|
212
|
+
response = Client.request :post, resend_fax_endpoint(id), params
|
213
|
+
response_reference response
|
214
|
+
end
|
215
|
+
|
216
|
+
# Delete a fax. May only be used with test API credentials.
|
217
|
+
# @param id [Integer]
|
218
|
+
# The ID of the fax to delete.
|
219
|
+
# @param params [Hash]
|
220
|
+
# A hash of parameters to send to Phaxio. This action takes no unique
|
221
|
+
# parameters.
|
222
|
+
# @return [true]
|
223
|
+
# @raise [Phaxio::Error::PhaxioError]
|
224
|
+
# @see https://www.phaxio.com/docs/api/v2/faxes/delete_fax
|
225
|
+
def delete id, params = {}
|
226
|
+
Client.request :delete, fax_endpoint(id), params
|
227
|
+
true
|
228
|
+
end
|
229
|
+
|
230
|
+
# Delete fax files.
|
231
|
+
# @param id [Integer]
|
232
|
+
# The ID of the fax for which you want to delete files.
|
233
|
+
# @param params [Hash]
|
234
|
+
# A hash of parameters to send to Phaxio. This action takes no unique
|
235
|
+
# parameters.
|
236
|
+
# @return [true]
|
237
|
+
# @raise [Phaxio::Error::PhaxioError]
|
238
|
+
# @see https://www.phaxio.com/docs/api/v2/faxes/delete_fax_file
|
239
|
+
def delete_file id, params = {}
|
240
|
+
Client.request :delete, fax_file_endpoint(id), params
|
241
|
+
true
|
242
|
+
end
|
243
|
+
|
244
|
+
# Get fax content file or thumbnail.
|
245
|
+
# @param id [Integer]
|
246
|
+
# The ID of the fax for which you want to get a file.
|
247
|
+
# @param params [Hash]
|
248
|
+
# A hash of parameters to send to Phaxio.
|
249
|
+
# - *thumbnail* ["s" | "l"] - If set to +"s"+ (small) or +"l"+
|
250
|
+
# (large), a thumbnail of the requested size will be returned.
|
251
|
+
# If unset, returns a PDF of the fax image.
|
252
|
+
# @return [File]
|
253
|
+
# The requested fax file.
|
254
|
+
# @raise [Phaxio::Error::PhaxioError]
|
255
|
+
# @see https://www.phaxio.com/docs/api/v2/faxes/get_fax_file
|
256
|
+
def file id, params = {}
|
257
|
+
Client.request :get, fax_file_endpoint(id), params
|
258
|
+
end
|
259
|
+
|
260
|
+
# Test receiving a fax. May only be used with test API credentials.
|
261
|
+
# @param params [Hash]
|
262
|
+
# A hash of parameters to send to Phaxio.
|
263
|
+
# - *file* [File] - A PDF file to simulate receiving.
|
264
|
+
# - *from_number* [String] - The phone number of the simulated sender
|
265
|
+
# in E.164 format. Default is the public Phaxio phone number.
|
266
|
+
# - *to_number* [String] - The phone number, in E.164 format, that is
|
267
|
+
# receiving the fax. Specifically, a Phaxio phone number in your
|
268
|
+
# account that is "receiving" the fax, or the public Phaxio phone
|
269
|
+
# number. Default is the public Phaxio phone number.
|
270
|
+
# @return [true]
|
271
|
+
# @raise [Phaxio::Error::PhaxioError]
|
272
|
+
# @see https://www.phaxio.com/docs/api/v2/faxes/test_receive
|
273
|
+
def test_receive params = {}
|
274
|
+
Client.request :post, faxes_endpoint, test_receive_params(params)
|
275
|
+
true
|
276
|
+
end
|
277
|
+
|
278
|
+
private
|
279
|
+
|
280
|
+
def response_reference response
|
281
|
+
Reference.new response['id']
|
282
|
+
end
|
283
|
+
|
284
|
+
def faxes_endpoint
|
285
|
+
FAXES_PATH
|
286
|
+
end
|
287
|
+
|
288
|
+
def fax_endpoint id
|
289
|
+
"#{FAXES_PATH}/#{id}"
|
290
|
+
end
|
291
|
+
|
292
|
+
def fax_file_endpoint id
|
293
|
+
"#{fax_endpoint(id)}/file"
|
294
|
+
end
|
295
|
+
|
296
|
+
def cancel_fax_endpoint id
|
297
|
+
"#{fax_endpoint(id)}/cancel"
|
298
|
+
end
|
299
|
+
|
300
|
+
def resend_fax_endpoint id
|
301
|
+
"#{fax_endpoint(id)}/resend"
|
302
|
+
end
|
303
|
+
|
304
|
+
def test_receive_params params
|
305
|
+
{direction: 'received'}.merge(params)
|
306
|
+
end
|
307
|
+
end
|
308
|
+
end
|
309
|
+
end
|
310
|
+
end
|