phaxio 2.1.0.pre → 2.1.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/README.md +17 -17
- data/lib/phaxio/client.rb +2 -6
- data/lib/phaxio/config.rb +6 -4
- data/lib/phaxio/resource.rb +11 -5
- data/lib/phaxio/resources/account.rb +1 -1
- data/lib/phaxio/resources/ata.rb +85 -19
- data/lib/phaxio/resources/callback.rb +10 -56
- data/lib/phaxio/resources/fax.rb +11 -11
- data/lib/phaxio/resources/phax_code.rb +2 -2
- data/lib/phaxio/resources/phone_number.rb +31 -5
- data/lib/phaxio/resources/port_number.rb +42 -0
- data/lib/phaxio/resources/port_number_note.rb +51 -0
- data/lib/phaxio/resources/port_order.rb +172 -0
- data/lib/phaxio/resources/public/area_code.rb +1 -1
- data/lib/phaxio/resources/public/country.rb +1 -1
- data/lib/phaxio/resources/webhook.rb +65 -0
- data/lib/phaxio/version.rb +1 -1
- data/lib/phaxio.rb +12 -3
- data/spec/phaxio_spec.rb +7 -1
- data/spec/resources/account_spec.rb +1 -7
- data/spec/resources/ata_spec.rb +207 -0
- data/spec/resources/fax_spec.rb +35 -103
- data/spec/resources/phax_code_spec.rb +10 -44
- data/spec/resources/phone_number_spec.rb +19 -30
- data/spec/resources/port_number_note_spec.rb +33 -0
- data/spec/resources/port_number_spec.rb +32 -0
- data/spec/resources/port_order_spec.rb +76 -0
- data/spec/resources/public/area_code_spec.rb +1 -1
- data/spec/resources/public/country_spec.rb +1 -7
- data/spec/resources/{callback_spec.rb → webhook_spec.rb} +8 -8
- data/spec/spec_helper.rb +1 -0
- data/spec/support/{vcr_cassettes/resources/account/status.yml → cassettes/account/get.yml} +7 -9
- data/spec/support/cassettes/ata/add_phone_number.yml +89 -0
- data/spec/support/{vcr_cassettes/resources/fax/resend.yml → cassettes/ata/create.yml} +12 -13
- data/spec/support/cassettes/ata/delete.yml +86 -0
- data/spec/support/cassettes/ata/get.yml +87 -0
- data/spec/support/cassettes/ata/list.yml +67 -0
- data/spec/support/{vcr_cassettes/resources/phax_code/get_id.yml → cassettes/ata/provisioning_urls.yml} +10 -13
- data/spec/support/cassettes/ata/reference.yml +87 -0
- data/spec/support/cassettes/ata/regenerate.yml +89 -0
- data/spec/support/cassettes/ata/remove_phone_number.yml +130 -0
- data/spec/support/cassettes/ata/update.yml +89 -0
- data/spec/support/{vcr_cassettes/resources/fax/create_for_cancel.yml → cassettes/fax/cancel.yml} +51 -11
- data/spec/support/{vcr_cassettes/resources/fax/create_for_reference.yml → cassettes/fax/create.yml} +11 -13
- data/spec/support/{vcr_cassettes/resources/fax/create.yml → cassettes/fax/delete.yml} +49 -11
- data/spec/support/{vcr_cassettes/resources/fax/create_for_delete.yml → cassettes/fax/delete_file.yml} +49 -11
- data/spec/support/cassettes/fax/file.yml +93 -0
- data/spec/support/{vcr_cassettes/resources/fax/create_for_download_file.yml → cassettes/fax/get.yml} +49 -11
- data/spec/support/{vcr_cassettes/resources → cassettes}/fax/list.yml +5 -7
- data/spec/support/cassettes/fax/reference.yml +88 -0
- data/spec/support/{vcr_cassettes/resources/fax/create_for_delete_file.yml → cassettes/fax/resend.yml} +51 -11
- data/spec/support/{vcr_cassettes/resources → cassettes}/fax/test_receive.yml +7 -9
- data/spec/support/{vcr_cassettes/resources → cassettes}/phax_code/create.yml +8 -10
- data/spec/support/{vcr_cassettes/resources → cassettes}/phax_code/create_png.yml +8 -10
- data/spec/support/cassettes/phax_code/get_by_id.yml +86 -0
- data/spec/support/{vcr_cassettes/resources/phax_code/get.yml → cassettes/phax_code/get_default.yml} +8 -10
- data/spec/support/{vcr_cassettes/resources/phax_code/get_png.yml → cassettes/phax_code/get_default_png.yml} +8 -10
- data/spec/support/cassettes/phax_code/get_png_by_id.yml +90 -0
- data/spec/support/{vcr_cassettes/resources → cassettes}/phone_number/create.yml +8 -10
- data/spec/support/{vcr_cassettes/resources → cassettes}/phone_number/get.yml +10 -12
- data/spec/support/cassettes/phone_number/list.yml +72 -0
- data/spec/support/cassettes/phone_number/reference.yml +45 -0
- data/spec/support/cassettes/phone_number/release.yml +86 -0
- data/spec/support/cassettes/port_number/get.yml +88 -0
- data/spec/support/cassettes/port_number_note/list.yml +88 -0
- data/spec/support/cassettes/port_order/create.yml +48 -0
- data/spec/support/cassettes/port_order/get.yml +91 -0
- data/spec/support/cassettes/port_order/list.yml +52 -0
- data/spec/support/{vcr_cassettes/resources/public/area_codes → cassettes/public/area_code}/list.yml +15 -17
- data/spec/support/{vcr_cassettes/resources → cassettes}/public/country/list.yml +5 -7
- data/spec/support/vcr.rb +24 -6
- metadata +115 -41
- data/spec/support/credentials.rb +0 -7
- data/spec/support/vcr_cassettes/resources/fax/cancel.yml +0 -47
- data/spec/support/vcr_cassettes/resources/fax/create_for_get.yml +0 -50
- data/spec/support/vcr_cassettes/resources/fax/create_for_resend.yml +0 -50
- data/spec/support/vcr_cassettes/resources/fax/delete.yml +0 -45
- data/spec/support/vcr_cassettes/resources/fax/delete_file.yml +0 -45
- data/spec/support/vcr_cassettes/resources/fax/file.yml +0 -50
- data/spec/support/vcr_cassettes/resources/fax/get.yml +0 -45
- data/spec/support/vcr_cassettes/resources/fax/reference.yml +0 -45
- data/spec/support/vcr_cassettes/resources/phax_code/get_id_png.yml +0 -50
- data/spec/support/vcr_cassettes/resources/phone_number/list.yml +0 -60
- data/spec/support/vcr_cassettes/resources/phone_number/release.yml +0 -45
@@ -0,0 +1,42 @@
|
|
1
|
+
module Phaxio
|
2
|
+
module Resources
|
3
|
+
# Provides functionality for viewing port numbers.
|
4
|
+
class PortNumber < Resource
|
5
|
+
PORT_NUMBERS_PATH = 'port_numbers'.freeze
|
6
|
+
private_constant :PORT_NUMBERS_PATH
|
7
|
+
|
8
|
+
# @return [Integer] the ID associated with this number.
|
9
|
+
# @!attribute id
|
10
|
+
|
11
|
+
# @return [String] the E.164 number.
|
12
|
+
# @!attribute port_number
|
13
|
+
|
14
|
+
# @return [String] the status of this number.
|
15
|
+
# @!attribute status
|
16
|
+
|
17
|
+
has_normal_attributes %w(id port_number status)
|
18
|
+
|
19
|
+
class << self
|
20
|
+
# Get port number info.
|
21
|
+
# @param id [Integer] The ID of the number to retrieve.
|
22
|
+
# @param params [Hash]
|
23
|
+
# A hash of parameters to send to Phaxio. This action takes no unique parameters.
|
24
|
+
# @return [Phaxio::Resource::PortNumber]
|
25
|
+
# @raise [Phaxio::Error::PhaxioError]
|
26
|
+
# @see https://www.phaxio.com/docs/api/v2/port_numbers/get_port_number
|
27
|
+
def get id, params = {}
|
28
|
+
response = Client.request :get, port_number_endpoint(id.to_i), params
|
29
|
+
response_record response
|
30
|
+
end
|
31
|
+
alias :retrieve :get
|
32
|
+
alias :find :get
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def port_number_endpoint id
|
37
|
+
"#{PORT_NUMBERS_PATH}/#{id}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Phaxio
|
2
|
+
module Resources
|
3
|
+
# Provides functionality for viewing port number notes.
|
4
|
+
class PortNumberNote < Resource
|
5
|
+
PORT_NUMBERS_PATH = 'port_numbers'.freeze
|
6
|
+
private_constant :PORT_NUMBERS_PATH
|
7
|
+
NOTES_PATH = 'notes'.freeze
|
8
|
+
private_constant :NOTES_PATH
|
9
|
+
|
10
|
+
# @return [Integer] the ID associated with this note.
|
11
|
+
# @!attribute id
|
12
|
+
|
13
|
+
# @return [String] the author of this note.
|
14
|
+
# @!attribute author
|
15
|
+
|
16
|
+
# @return [String] the content of the note
|
17
|
+
# @!attribute note
|
18
|
+
|
19
|
+
has_normal_attributes %w[id note author]
|
20
|
+
|
21
|
+
# @return [Time] the time this note was created.
|
22
|
+
# @!attribute created_at
|
23
|
+
|
24
|
+
# @return [Time] the time this note was updated.
|
25
|
+
# @!attribute updated_at
|
26
|
+
|
27
|
+
has_time_attributes %w[created_at updated_at]
|
28
|
+
|
29
|
+
class << self
|
30
|
+
# List notes for a port number.
|
31
|
+
# @param port_number_id [Integer]
|
32
|
+
# The ID of the port number to list notes for.
|
33
|
+
# @param params [Hash]
|
34
|
+
# Any parameters to send to Phaxio. This action takes no unique parameters.
|
35
|
+
# @return [Phaxio::Resource::Collection<Phaxio::Resources::PortNumberNote>]
|
36
|
+
# @raise [Phaxio::Error::PhaxioError]
|
37
|
+
# @see https://www.phaxio.com/docs/api/v2/port_number_notes/list_notes
|
38
|
+
def list port_number_id, params = {}
|
39
|
+
response = Client.request :get, port_number_notes_endpoint(port_number_id.to_i), params
|
40
|
+
response_collection response
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def port_number_notes_endpoint port_number_id
|
46
|
+
"#{PORT_NUMBERS_PATH}/#{port_number_id}/#{NOTES_PATH}"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,172 @@
|
|
1
|
+
module Phaxio
|
2
|
+
module Resources
|
3
|
+
# Provides functionality for viewing and managing port orders.
|
4
|
+
class PortOrder < Resource
|
5
|
+
PORT_ORDERS_PATH = 'port_orders'.freeze
|
6
|
+
private_constant :PORT_ORDERS_PATH
|
7
|
+
|
8
|
+
# @return [Integer] the ID associated with this order.
|
9
|
+
# @!attribute id
|
10
|
+
|
11
|
+
# @return [String] the status of this order.
|
12
|
+
# @!attribute status
|
13
|
+
|
14
|
+
# @return [String] the E.164 contact number.
|
15
|
+
# @!attribute contact_number
|
16
|
+
|
17
|
+
# @return [String] The email address for the order.
|
18
|
+
# @!attribute contact_email
|
19
|
+
|
20
|
+
# @return [String] The identifier for the account associated with the numbers.
|
21
|
+
# @!attribute account_identifier
|
22
|
+
|
23
|
+
# @return [String] Type of numbers to be ported. Either "business" or "residential".
|
24
|
+
# @!attribute port_type
|
25
|
+
|
26
|
+
# @return [String] The PIN or password needed to port out the numbers.
|
27
|
+
# @!attribute port_out_pin
|
28
|
+
|
29
|
+
# @return [String] the name associated with the account.
|
30
|
+
# @!attribute name_on_account
|
31
|
+
|
32
|
+
# @return [String] the name of the business.
|
33
|
+
# @!attribute name_of_business
|
34
|
+
|
35
|
+
# @return [String] the provider name.
|
36
|
+
# @!attribute provider_name
|
37
|
+
|
38
|
+
# @return [String] the E.164 billing number.
|
39
|
+
# @!attribute billing_number
|
40
|
+
|
41
|
+
# @return [String] the first billing address line.
|
42
|
+
# @!attribute billing_address1
|
43
|
+
|
44
|
+
# @return [String] the second billing address line.
|
45
|
+
# @!attribute billing_address2
|
46
|
+
|
47
|
+
# @return [String] the billing address city.
|
48
|
+
# @!attribute billing_city
|
49
|
+
|
50
|
+
# @return [String] the billing address state.
|
51
|
+
# @!attribute billing_state
|
52
|
+
|
53
|
+
# @return [String] the billing address zip.
|
54
|
+
# @!attribute billing_zip
|
55
|
+
|
56
|
+
# @return [String] the electronic signature used to sign the order.
|
57
|
+
# @!attribute esig
|
58
|
+
|
59
|
+
# @return [true | false]
|
60
|
+
# whether or not a bill will be provided. (only present on new orders)
|
61
|
+
# @!attribute has_bill
|
62
|
+
|
63
|
+
# @return [true | false]
|
64
|
+
# whether or not the legal agreement is accepted. (only present on new orders)
|
65
|
+
# @!attribute legal_agreement
|
66
|
+
|
67
|
+
has_normal_attributes %w[
|
68
|
+
id contact_number contact_email name_on_account name_of_business provider_name
|
69
|
+
billing_number billing_address1 billing_address2 account_identifier
|
70
|
+
billing_city billing_state billing_zip esig legal_agreement port_type port_out_pin
|
71
|
+
status
|
72
|
+
]
|
73
|
+
|
74
|
+
# @return [Time] the time the order was created.
|
75
|
+
# @!attribute created_at
|
76
|
+
|
77
|
+
# @return [Time] the time the order was updated.
|
78
|
+
# @!attribute updated_at
|
79
|
+
|
80
|
+
# @return [Time] the time the bill for the order was received.
|
81
|
+
# @!attribute bill_received_at
|
82
|
+
|
83
|
+
# @return [Time] the time the order was requested for.
|
84
|
+
# @!attribute requested_for
|
85
|
+
|
86
|
+
# @return [Time] the time the order was completed.
|
87
|
+
# @!attribute completed_at
|
88
|
+
|
89
|
+
has_time_attributes %w[
|
90
|
+
created_at updated_at bill_received_at requested_for completed_at
|
91
|
+
]
|
92
|
+
|
93
|
+
# @return [Phaxio::Resource::Collection<Phaxio::Resources::PortNumber>]
|
94
|
+
# a collection of port numbers associated with the order
|
95
|
+
# @!attribute port_numbers
|
96
|
+
|
97
|
+
has_collection_attributes({port_numbers: PortNumber})
|
98
|
+
|
99
|
+
class << self
|
100
|
+
# @macro paging
|
101
|
+
# List port orders in date range.
|
102
|
+
# @param params [Hash]
|
103
|
+
# Any parameters to send to Phaxio.
|
104
|
+
# - *created_before* [String] - RFC 3339 timestamp representing the end of the range.
|
105
|
+
# - *created_after* [String] - RFC 3339 timestamp representing the beginning of the range.
|
106
|
+
# @return [Phaxio::Resource::Collection<Phaxio::Resources::PortOrder>]
|
107
|
+
# The collection of port orders matching your request.
|
108
|
+
# @raise [Phaxio::Error::PhaxioError
|
109
|
+
# @see https://www.phaxio.com/docs/api/v2/port_orders/list_port_orders
|
110
|
+
def list params = {}
|
111
|
+
response = Client.request :get, port_orders_endpoint, params
|
112
|
+
response_collection response
|
113
|
+
end
|
114
|
+
|
115
|
+
# Create a port order.
|
116
|
+
# @param params [Hash]
|
117
|
+
# Any parameters to send to Phaxio.
|
118
|
+
# - *port_numbers* [Array<String>] - Numbers to port.
|
119
|
+
# - *contact_number* [String] - Number to contact about the port.
|
120
|
+
# - *contact_email* [String] - The email address for the order.
|
121
|
+
# - *account_identifier* [String] - The identifier for the account associated with the numbers.
|
122
|
+
# - *port_type* [String] - Type of numbers to be ported. Either "business" or "residential".
|
123
|
+
# - *port_out_pin* [String] - The PIN or password needed to port out the numbers.
|
124
|
+
# - *name_on_account* [String] - Name on the account for the port.
|
125
|
+
# - *name_of_business* [String] - Name of business associated with the port.
|
126
|
+
# - *provider_name* [String] - Name of provider for the port.
|
127
|
+
# - *esig* [String] - Electronic signature used to sign the order.
|
128
|
+
# - *legal_agreement* [true | false] - Indicates acceptance of the legal agreement.
|
129
|
+
# - *has_bill* [true | false] - Indicates whether or not a bill will be provided. If true, billing number
|
130
|
+
# and address fields are not needed.
|
131
|
+
# - *billing_number* [String] - Billing number.
|
132
|
+
# - *billing_address1* [String] - Billing address line 1
|
133
|
+
# - *billing_address2* [String] - Billing address line 2
|
134
|
+
# - *billing_city* [String] - Billing address city.
|
135
|
+
# - *billing_state* [String] - Billing address state.
|
136
|
+
# - *billing_zip* [String] - Billing address zip.
|
137
|
+
# @return [Phaxio::Resources::PortOrder]
|
138
|
+
# @raise [Phaxio::Error::PhaxioError]
|
139
|
+
# @see https://www.phaxio.com/docs/api/v2/port_orders/create_port_order
|
140
|
+
def create params = {}
|
141
|
+
response = Client.request :post, port_orders_endpoint, params
|
142
|
+
response_record response
|
143
|
+
end
|
144
|
+
|
145
|
+
# Get port order info.
|
146
|
+
# @param id [Integer]
|
147
|
+
# The ID of the order to retrieve.
|
148
|
+
# @param params [Hash]
|
149
|
+
# A hash of parameters to send to Phaxio. This action takes no unique parameters.
|
150
|
+
# @return [Phaxio::Resource::PortOrder]
|
151
|
+
# @raise [Phaxio::Error::PhaxioError]
|
152
|
+
# @see https://www.phaxio.com/docs/api/v2/port_orders/get_port_order
|
153
|
+
def get id, params = {}
|
154
|
+
response = Client.request :get, port_order_endpoint(id.to_i), params
|
155
|
+
response_record response
|
156
|
+
end
|
157
|
+
alias :retrieve :get
|
158
|
+
alias :find :get
|
159
|
+
|
160
|
+
private
|
161
|
+
|
162
|
+
def port_orders_endpoint
|
163
|
+
PORT_ORDERS_PATH
|
164
|
+
end
|
165
|
+
|
166
|
+
def port_order_endpoint id
|
167
|
+
"#{PORT_ORDERS_PATH}/#{id}"
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
@@ -46,7 +46,7 @@ module Phaxio
|
|
46
46
|
# @return [Phaxio::Resource::Collection<Phaxio::Resources::AreaCode>] A collection of
|
47
47
|
# AreaCode objects.
|
48
48
|
# @raise [Phaxio::Error::PhaxioError]
|
49
|
-
# @see https://www.phaxio.com/docs/api/v2/public/list_area_codes
|
49
|
+
# @see https://www.phaxio.com/docs/api/v2.1/public/list_area_codes
|
50
50
|
def list params = {}
|
51
51
|
response = Client.request :get, available_area_codes_endpoint, params
|
52
52
|
AreaCode.response_collection response
|
@@ -36,7 +36,7 @@ module Phaxio
|
|
36
36
|
# @return [Phaxio::Resource::Collection<Phaxio::Resources::Country>]
|
37
37
|
# A collection of supported countries.
|
38
38
|
# @raise Phaxio::Error::PhaxioError
|
39
|
-
# @see https://www.phaxio.com/docs/api/v2/public/list_countries
|
39
|
+
# @see https://www.phaxio.com/docs/api/v2.1/public/list_countries
|
40
40
|
def list params = {}
|
41
41
|
response = Client.request :get, supported_countries_endpoint, params
|
42
42
|
Country.response_collection response
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module Phaxio
|
2
|
+
module Resources
|
3
|
+
# Provides utilities for working with webhooks.
|
4
|
+
# @see https://www.phaxio.com/docs/api/v2.1/faxes/send_webhook
|
5
|
+
# @see https://www.phaxio.com/docs/api/v2.1/faxes/receive_webhooks
|
6
|
+
class Webhook
|
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 webhook URL used in this request.
|
17
|
+
# @param params [Hash]
|
18
|
+
# The parameters received with the webhook, excluding files.
|
19
|
+
# @param files [Array<File>]
|
20
|
+
# The files received with the webhook, 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
|
+
webhook_data = "#{url}#{params_string}#{files_string}"
|
35
|
+
OpenSSL::HMAC.hexdigest(DIGEST, webhook_token, webhook_data)
|
36
|
+
end
|
37
|
+
|
38
|
+
def webhook_token
|
39
|
+
Phaxio.webhook_token or raise(Error::PhaxioError, 'No webhook 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
|
data/lib/phaxio/version.rb
CHANGED
data/lib/phaxio.rb
CHANGED
@@ -17,7 +17,10 @@ Dir[File.expand_path(File.join('..', 'phaxio', 'helpers', '*.rb'), __FILE__)].ea
|
|
17
17
|
require file
|
18
18
|
end
|
19
19
|
|
20
|
-
%w[
|
20
|
+
%w[
|
21
|
+
fax_recipient fax account callback webhook phax_code phone_number public ata
|
22
|
+
port_number_note port_number port_order
|
23
|
+
].each do |filename|
|
21
24
|
require File.expand_path(File.join('..', 'phaxio', 'resources', filename), __FILE__)
|
22
25
|
end
|
23
26
|
|
@@ -29,11 +32,13 @@ module Phaxio
|
|
29
32
|
# @see Config.api_key
|
30
33
|
# @!attribute api_secret
|
31
34
|
# @see Config.api_secret
|
35
|
+
# @!attribute webhook_token
|
36
|
+
# @see Config.webhook_token
|
32
37
|
# @!attribute callback_token
|
33
|
-
# @see Config.
|
38
|
+
# @see Config.webhook_token
|
34
39
|
# @!attribute api_endpoint
|
35
40
|
# @see Config.api_endpoint
|
36
|
-
%w(api_key api_secret callback_token api_endpoint).each do |config_attribute|
|
41
|
+
%w(api_key api_secret webhook_token callback_token api_endpoint).each do |config_attribute|
|
37
42
|
# Define getters
|
38
43
|
define_method(config_attribute) do
|
39
44
|
Config.public_send config_attribute
|
@@ -45,5 +50,9 @@ module Phaxio
|
|
45
50
|
Config.public_send setter, value
|
46
51
|
end
|
47
52
|
end
|
53
|
+
|
54
|
+
# for backwards compatibility
|
55
|
+
alias callback_token webhook_token
|
56
|
+
alias callback_token= webhook_token=
|
48
57
|
end
|
49
58
|
end
|
data/spec/phaxio_spec.rb
CHANGED
@@ -13,8 +13,14 @@ RSpec.describe Phaxio do
|
|
13
13
|
expect(subject.api_secret).to eq('test-api-secret')
|
14
14
|
end
|
15
15
|
|
16
|
-
it 'sets the
|
16
|
+
it 'sets the webhook token' do
|
17
|
+
subject.webhook_token = 'test-webhook-token'
|
18
|
+
expect(subject.webhook_token).to eq('test-webhook-token')
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'sets and gets the webhook token as callback_token' do
|
17
22
|
subject.callback_token = 'test-callback-token'
|
18
23
|
expect(subject.callback_token).to eq('test-callback-token')
|
24
|
+
expect(subject.webhook_token).to eq('test-callback-token')
|
19
25
|
end
|
20
26
|
end
|
@@ -1,16 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
RSpec.describe Account do
|
4
|
-
describe 'getting account information' do
|
4
|
+
describe 'getting account information', vcr: 'account/get' do
|
5
5
|
let(:action) { Account.get params }
|
6
6
|
let(:params) { {} }
|
7
7
|
|
8
|
-
around do |example|
|
9
|
-
VCR.use_cassette('resources/account/status') do
|
10
|
-
example.run
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
8
|
it 'sends the request to Phaxio' do
|
15
9
|
expect_api_request :get, 'account/status', params
|
16
10
|
action
|
@@ -0,0 +1,207 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Ata do
|
4
|
+
describe Ata::Reference, vcr: 'ata/reference' do
|
5
|
+
let(:reference) { Ata::Reference.new ata_id }
|
6
|
+
let(:ata_id) { Ata.create(name: 'Test ATA').id }
|
7
|
+
|
8
|
+
describe '#get' do
|
9
|
+
it 'returns information about the referenced ATA' do
|
10
|
+
result = reference.get
|
11
|
+
expect(result).to be_a(Ata)
|
12
|
+
expect(result.name).to eq('Test ATA')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe Ata::ProvisioningURLs, vcr: 'ata/provisioning_urls' do
|
18
|
+
let(:provisioning_urls) { Ata.provisioning_urls }
|
19
|
+
|
20
|
+
describe '#urls' do
|
21
|
+
it 'returns the full hash of provisioning URLS' do
|
22
|
+
expect(provisioning_urls.urls).to be_a(Hash)
|
23
|
+
expect(provisioning_urls.urls.keys).to match_array([
|
24
|
+
'OBi',
|
25
|
+
'Grandstream',
|
26
|
+
'Netgen',
|
27
|
+
])
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#grandstream' do
|
32
|
+
it 'returns the grandstream provisioning URL' do
|
33
|
+
url = provisioning_urls.urls['Grandstream']
|
34
|
+
expect(provisioning_urls.grandstream).to eq(url)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe '#obi' do
|
39
|
+
it 'returns the obi provisioning URL' do
|
40
|
+
url = provisioning_urls.urls['OBi']
|
41
|
+
expect(provisioning_urls.obi).to eq(url)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe '#netgen' do
|
46
|
+
it 'returns the netgen provisioning url' do
|
47
|
+
url = provisioning_urls.urls['Netgen']
|
48
|
+
expect(provisioning_urls.netgen).to eq(url)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe 'getting a list of ATAs', vcr: 'ata/list' do
|
54
|
+
let(:action) { Ata.list params }
|
55
|
+
let(:params) { {} }
|
56
|
+
|
57
|
+
it 'sends the request to phaxio' do
|
58
|
+
expect_api_request :get, 'atas', params
|
59
|
+
action
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'returns a collection of ATAs' do
|
63
|
+
result = action
|
64
|
+
expect(result).to be_a(Ata::Collection)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe 'creating an ATA', vcr: 'ata/create' do
|
69
|
+
let(:action) { Ata.create params }
|
70
|
+
let(:params) { {name: 'Test ATA'} }
|
71
|
+
|
72
|
+
it 'sends the request to phaxio' do
|
73
|
+
expect_api_request :post, 'atas', name: 'Test ATA'
|
74
|
+
action
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'returns information about the created ATA' do
|
78
|
+
result = action
|
79
|
+
expect(result).to be_a(Ata)
|
80
|
+
expect(result.name).to eq('Test ATA')
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe 'getting information about an ATA', vcr: 'ata/get' do
|
85
|
+
let(:action) { Ata.get ata_id, params }
|
86
|
+
let(:ata_id) { Ata.create(name: 'Test ATA').id }
|
87
|
+
let(:params) { {} }
|
88
|
+
|
89
|
+
it 'sends the request to phaxio' do
|
90
|
+
expect_api_request :get, "atas/#{ata_id}", params
|
91
|
+
action
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'returns information about the ATA' do
|
95
|
+
result = action
|
96
|
+
expect(result).to be_a(Ata)
|
97
|
+
expect(result.name).to eq('Test ATA')
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe 'updating an ATA', vcr: 'ata/update' do
|
102
|
+
let(:action) { Ata.update ata_id, params }
|
103
|
+
let(:ata_id) { Ata.create(name: 'Test ATA').id }
|
104
|
+
let(:params) { {name: 'New Name'} }
|
105
|
+
|
106
|
+
it 'sends the request to phaxio' do
|
107
|
+
expect_api_request :patch, "atas/#{ata_id}", params
|
108
|
+
action
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'returns information about the updated ATA' do
|
112
|
+
result = action
|
113
|
+
expect(result).to be_a(Ata)
|
114
|
+
expect(result.name).to eq('New Name')
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
describe 'regenerating ATA credentials', vcr: 'ata/regenerate' do
|
119
|
+
let(:action) { Ata.regenerate_credentials ata_id, params }
|
120
|
+
let(:ata) { Ata.create(name: 'Test ATA') }
|
121
|
+
let(:ata_id) { ata.id }
|
122
|
+
let(:params) { {} }
|
123
|
+
|
124
|
+
it 'sends the request to phaxio' do
|
125
|
+
expect_api_request :patch, "atas/#{ata_id}/regenerate_credentials", params
|
126
|
+
action
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'returns information about the ATA' do
|
130
|
+
original_username = ata.username
|
131
|
+
# some actions don't return full creds; creation does, but run a sanity check just in case
|
132
|
+
expect(original_username).to_not be_nil
|
133
|
+
result = action
|
134
|
+
expect(result).to be_a(Ata)
|
135
|
+
expect(result.username).to_not eq(original_username)
|
136
|
+
expect(result.username).to_not be_nil
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
describe 'deleting an ATA', vcr: 'ata/delete' do
|
141
|
+
let(:action) { Ata.delete ata_id, params }
|
142
|
+
let(:ata_id) { Ata.create(name: 'Test ATA').id }
|
143
|
+
let(:params) { {} }
|
144
|
+
|
145
|
+
it 'sends the request to phaxio' do
|
146
|
+
expect_api_request :delete, "atas/#{ata_id}", params
|
147
|
+
action
|
148
|
+
end
|
149
|
+
|
150
|
+
it 'returns a reference to the deleted ATA' do
|
151
|
+
result = action
|
152
|
+
expect(result).to be_a(Ata::Reference)
|
153
|
+
expect(result.id).to eq(ata_id)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
describe 'adding a phone number to an ATA', vcr: 'ata/add_phone_number' do
|
158
|
+
let(:action) { Ata.add_phone_number ata_id, TEST_NUMBER, params }
|
159
|
+
let(:ata_id) { Ata.create(name: 'Test ATA').id }
|
160
|
+
let(:params) { {} }
|
161
|
+
|
162
|
+
it 'sends the request to phaxio' do
|
163
|
+
expect_api_request :post, "atas/#{ata_id}/phone_numbers/#{TEST_NUMBER}", params
|
164
|
+
action
|
165
|
+
end
|
166
|
+
|
167
|
+
it 'returns a reference to the added phone number' do
|
168
|
+
result = action
|
169
|
+
expect(result).to be_a(PhoneNumber::Reference)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
describe 'removing a phone number from an ATA', vcr: 'ata/remove_phone_number' do
|
174
|
+
let(:action) { Ata.remove_phone_number ata_id, TEST_NUMBER, params }
|
175
|
+
let(:ata_id) { Ata.create(name: 'Test ATA').id }
|
176
|
+
let(:params) { {} }
|
177
|
+
|
178
|
+
before do
|
179
|
+
Ata.add_phone_number ata_id, TEST_NUMBER
|
180
|
+
end
|
181
|
+
|
182
|
+
it 'sends the request to phaxio' do
|
183
|
+
expect_api_request :delete, "atas/#{ata_id}/phone_numbers/#{TEST_NUMBER}", params
|
184
|
+
action
|
185
|
+
end
|
186
|
+
|
187
|
+
it 'returns a reference to the removed phone number' do
|
188
|
+
result = action
|
189
|
+
expect(result).to be_a(PhoneNumber::Reference)
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
describe 'listing provisioning URLs for an ATA', vcr: 'ata/provisioning_urls' do
|
194
|
+
let(:action) { Ata.provisioning_urls params }
|
195
|
+
let(:params) { {} }
|
196
|
+
|
197
|
+
it 'sends the request to phaxio' do
|
198
|
+
expect_api_request :get, "atas/provisioning_urls", params
|
199
|
+
action
|
200
|
+
end
|
201
|
+
|
202
|
+
it 'returns a set of provisioning URLs' do
|
203
|
+
response = action
|
204
|
+
expect(response).to be_a(Ata::ProvisioningURLs)
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|