voiceml 0.9.2 → 0.9.3

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.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +17 -13
  3. data/lib/voiceml/client.rb +53 -13
  4. data/lib/voiceml/errors.rb +15 -2
  5. data/lib/voiceml/models/accounts.rb +47 -3
  6. data/lib/voiceml/models/applications.rb +6 -0
  7. data/lib/voiceml/models/assistants_v1.rb +40 -0
  8. data/lib/voiceml/models/calls.rb +4 -0
  9. data/lib/voiceml/models/common.rb +35 -4
  10. data/lib/voiceml/models/conferences.rb +8 -0
  11. data/lib/voiceml/models/conversations_v1.rb +131 -29
  12. data/lib/voiceml/models/diagnostics.rb +33 -12
  13. data/lib/voiceml/models/exports.rb +58 -0
  14. data/lib/voiceml/models/incoming_phone_numbers.rb +4 -0
  15. data/lib/voiceml/models/media.rb +4 -0
  16. data/lib/voiceml/models/messages.rb +29 -0
  17. data/lib/voiceml/models/messaging_v1.rb +35 -2
  18. data/lib/voiceml/models/monitor_v1.rb +54 -0
  19. data/lib/voiceml/models/notifications.rb +2 -0
  20. data/lib/voiceml/models/outgoing_caller_ids.rb +6 -0
  21. data/lib/voiceml/models/payments.rb +2 -0
  22. data/lib/voiceml/models/pricing.rb +38 -4
  23. data/lib/voiceml/models/queues.rb +8 -0
  24. data/lib/voiceml/models/recordings.rb +5 -1
  25. data/lib/voiceml/models/routes_v2.rb +6 -2
  26. data/lib/voiceml/models/sip.rb +34 -6
  27. data/lib/voiceml/models/sip_registrations.rb +49 -0
  28. data/lib/voiceml/models/siprec.rb +5 -17
  29. data/lib/voiceml/models/streams.rb +4 -16
  30. data/lib/voiceml/models/transcriptions.rb +35 -4
  31. data/lib/voiceml/models/usage_records.rb +48 -0
  32. data/lib/voiceml/models/user_defined_messages.rb +2 -0
  33. data/lib/voiceml/models/voice_v1.rb +29 -19
  34. data/lib/voiceml/request_validator.rb +125 -0
  35. data/lib/voiceml/resources/accounts.rb +75 -0
  36. data/lib/voiceml/resources/applications.rb +3 -1
  37. data/lib/voiceml/resources/assistants_v1.rb +53 -77
  38. data/lib/voiceml/resources/base.rb +138 -16
  39. data/lib/voiceml/resources/calls.rb +34 -49
  40. data/lib/voiceml/resources/conferences.rb +26 -5
  41. data/lib/voiceml/resources/conversations_v1.rb +147 -172
  42. data/lib/voiceml/resources/diagnostics.rb +20 -35
  43. data/lib/voiceml/resources/exports.rb +36 -0
  44. data/lib/voiceml/resources/incoming_phone_numbers.rb +53 -32
  45. data/lib/voiceml/resources/messages.rb +79 -15
  46. data/lib/voiceml/resources/messaging_v1.rb +47 -13
  47. data/lib/voiceml/resources/monitor_v1.rb +68 -0
  48. data/lib/voiceml/resources/notifications.rb +1 -1
  49. data/lib/voiceml/resources/outgoing_caller_ids.rb +77 -0
  50. data/lib/voiceml/resources/pricing.rb +13 -5
  51. data/lib/voiceml/resources/queues.rb +6 -5
  52. data/lib/voiceml/resources/recordings.rb +39 -5
  53. data/lib/voiceml/resources/routes_v2.rb +10 -4
  54. data/lib/voiceml/resources/sip.rb +30 -11
  55. data/lib/voiceml/resources/transcriptions.rb +40 -0
  56. data/lib/voiceml/resources/usage_records.rb +51 -0
  57. data/lib/voiceml/resources/voice_v1.rb +31 -38
  58. data/lib/voiceml/transport.rb +277 -230
  59. data/lib/voiceml/version.rb +1 -1
  60. data/lib/voiceml.rb +14 -15
  61. metadata +18 -6
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'uri'
3
+ require_relative "base"
4
4
 
5
5
  require_relative '../models/pricing'
6
6
 
@@ -42,6 +42,8 @@ module VoiceML
42
42
 
43
43
  # `.../Countries` list + per-country fetch. `model` is the fetch body class.
44
44
  class PricingCountriesResource
45
+ include V1Pages
46
+ include FieldMapping
45
47
  def initialize(transport, base_path, model)
46
48
  @transport = transport
47
49
  @base = base_path
@@ -55,25 +57,29 @@ module VoiceML
55
57
  end
56
58
 
57
59
  def fetch(iso_country)
58
- @model.from_hash(@transport.request(:get, "#{@base}/#{iso_country}"))
60
+ @model.from_hash(@transport.request(:get, "#{@base}/#{encode_path_segment(iso_country)}"))
59
61
  end
60
62
  end
61
63
 
62
64
  # `/v1/Voice/Numbers/{Number}` — single-number fetch.
63
65
  class PricingV1VoiceNumbersResource
66
+ include V1Pages
67
+ include FieldMapping
64
68
  def initialize(transport)
65
69
  @transport = transport
66
70
  end
67
71
 
68
72
  def fetch(number)
69
73
  PricingVoiceNumber.from_hash(
70
- @transport.request(:get, "/v1/Voice/Numbers/#{URI.encode_www_form_component(number)}")
74
+ @transport.request(:get, "/v1/Voice/Numbers/#{encode_path_segment(number)}")
71
75
  )
72
76
  end
73
77
  end
74
78
 
75
79
  # `/v2/Voice/Numbers/{Destination}` — origin-aware single-number fetch.
76
80
  class PricingV2VoiceNumbersResource
81
+ include V1Pages
82
+ include FieldMapping
77
83
  def initialize(transport)
78
84
  @transport = transport
79
85
  end
@@ -82,7 +88,7 @@ module VoiceML
82
88
  params = {}
83
89
  params['OriginationNumber'] = origination_number unless origination_number.nil?
84
90
  PricingVoiceNumberV2.from_hash(
85
- @transport.request(:get, "/v2/Voice/Numbers/#{URI.encode_www_form_component(destination_number)}",
91
+ @transport.request(:get, "/v2/Voice/Numbers/#{encode_path_segment(destination_number)}",
86
92
  params: params)
87
93
  )
88
94
  end
@@ -90,6 +96,8 @@ module VoiceML
90
96
 
91
97
  # `/v2/Trunking/Numbers/{Destination}` — origin-aware single-number fetch.
92
98
  class PricingV2TrunkingNumbersResource
99
+ include V1Pages
100
+ include FieldMapping
93
101
  def initialize(transport)
94
102
  @transport = transport
95
103
  end
@@ -98,7 +106,7 @@ module VoiceML
98
106
  params = {}
99
107
  params['OriginationNumber'] = origination_number unless origination_number.nil?
100
108
  PricingTrunkingNumber.from_hash(
101
- @transport.request(:get, "/v2/Trunking/Numbers/#{URI.encode_www_form_component(destination_number)}",
109
+ @transport.request(:get, "/v2/Trunking/Numbers/#{encode_path_segment(destination_number)}",
102
110
  params: params)
103
111
  )
104
112
  end
@@ -47,12 +47,13 @@ module VoiceML
47
47
  def each(**kwargs, &block)
48
48
  return enum_for(:each, **kwargs) unless block
49
49
 
50
- page_num = kwargs.delete(:page) || 0
50
+ page = list(**kwargs)
51
51
  loop do
52
- chunk = list(**kwargs, page: page_num)
53
- chunk.queues.each(&block)
54
- break if chunk.next_page_uri.nil? || chunk.next_page_uri.empty? || chunk.queues.empty?
55
- page_num += 1
52
+ page.queues.each(&block)
53
+ nxt = next_page(page)
54
+ break if nxt.nil?
55
+
56
+ page = nxt
56
57
  end
57
58
  end
58
59
 
@@ -2,6 +2,7 @@
2
2
 
3
3
  require_relative 'base'
4
4
  require_relative '../models/recordings'
5
+ require_relative '../models/transcriptions'
5
6
 
6
7
  module VoiceML
7
8
  # Account-scoped `/Recordings` operations.
@@ -26,6 +27,15 @@ module VoiceML
26
27
  'IncludeSoftDeleted' => :include_soft_deleted
27
28
  }.freeze
28
29
 
30
+ LIST_TRANSCRIPTIONS_FIELDS = {
31
+ 'DateCreated' => :date_created,
32
+ 'DateCreated<' => :date_created_lt,
33
+ 'DateCreated>' => :date_created_gt,
34
+ 'Page' => :page,
35
+ 'PageSize' => :page_size,
36
+ 'PageToken' => :page_token
37
+ }.freeze
38
+
29
39
  # @return [VoiceML::RecordingList]
30
40
  def list(**kwargs)
31
41
  RecordingList.from_hash(
@@ -38,12 +48,13 @@ module VoiceML
38
48
  def each(**kwargs, &block)
39
49
  return enum_for(:each, **kwargs) unless block
40
50
 
41
- page_num = kwargs.delete(:page) || 0
51
+ page = list(**kwargs)
42
52
  loop do
43
- chunk = list(**kwargs, page: page_num)
44
- chunk.recordings.each(&block)
45
- break if chunk.next_page_uri.nil? || chunk.next_page_uri.empty? || chunk.recordings.empty?
46
- page_num += 1
53
+ page.recordings.each(&block)
54
+ nxt = next_page(page)
55
+ break if nxt.nil?
56
+
57
+ page = nxt
47
58
  end
48
59
  end
49
60
 
@@ -85,5 +96,28 @@ module VoiceML
85
96
  @transport.request(:delete, path('Recordings', recording_sid))
86
97
  nil
87
98
  end
99
+
100
+ # --- Recording-scoped stored transcriptions ---
101
+
102
+ # @return [VoiceML::TranscriptionList]
103
+ def list_transcriptions(recording_sid, **kwargs)
104
+ TranscriptionList.from_hash(
105
+ @transport.request(:get, path('Recordings', recording_sid, 'Transcriptions'),
106
+ params: form_params(LIST_TRANSCRIPTIONS_FIELDS, kwargs))
107
+ )
108
+ end
109
+
110
+ # @return [VoiceML::Transcription]
111
+ def get_transcription(recording_sid, sid)
112
+ Transcription.from_hash(
113
+ @transport.request(:get, path('Recordings', recording_sid, 'Transcriptions', sid))
114
+ )
115
+ end
116
+
117
+ # @return [nil]
118
+ def delete_transcription(recording_sid, sid)
119
+ @transport.request(:delete, path('Recordings', recording_sid, 'Transcriptions', sid))
120
+ nil
121
+ end
88
122
  end
89
123
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'base'
4
+
3
5
  require_relative '../models/routes_v2'
4
6
 
5
7
  module VoiceML
@@ -16,38 +18,42 @@ module VoiceML
16
18
  # Operations on /v2/SipDomains/{SipDomain}. Keyed by domain name; account
17
19
  # is resolved from HTTP Basic auth.
18
20
  class RoutesV2SipDomainsResource
21
+ include V1Pages
22
+ include FieldMapping
19
23
  def initialize(transport)
20
24
  @transport = transport
21
25
  end
22
26
 
23
27
  def fetch(domain_name)
24
- RoutesV2SipDomain.from_hash(@transport.request(:get, "/v2/SipDomains/#{domain_name}"))
28
+ RoutesV2SipDomain.from_hash(@transport.request(:get, "/v2/SipDomains/#{encode_path_segment(domain_name)}"))
25
29
  end
26
30
 
27
31
  def update(domain_name, voice_region: nil, friendly_name: nil)
28
32
  form = {}
29
33
  form['VoiceRegion'] = voice_region unless voice_region.nil?
30
34
  form['FriendlyName'] = friendly_name unless friendly_name.nil?
31
- RoutesV2SipDomain.from_hash(@transport.request(:post, "/v2/SipDomains/#{domain_name}", form: form))
35
+ RoutesV2SipDomain.from_hash(@transport.request(:post, "/v2/SipDomains/#{encode_path_segment(domain_name)}", form: form))
32
36
  end
33
37
  end
34
38
 
35
39
  # Operations on /v2/PhoneNumbers/{PhoneNumber}. Keyed by E.164 phone number or
36
40
  # its PN sid; account resolved from HTTP Basic auth.
37
41
  class RoutesV2PhoneNumbersResource
42
+ include V1Pages
43
+ include FieldMapping
38
44
  def initialize(transport)
39
45
  @transport = transport
40
46
  end
41
47
 
42
48
  def fetch(phone_number)
43
- RoutesV2PhoneNumber.from_hash(@transport.request(:get, "/v2/PhoneNumbers/#{phone_number}"))
49
+ RoutesV2PhoneNumber.from_hash(@transport.request(:get, "/v2/PhoneNumbers/#{encode_path_segment(phone_number)}"))
44
50
  end
45
51
 
46
52
  def update(phone_number, voice_region: nil, friendly_name: nil)
47
53
  form = {}
48
54
  form['VoiceRegion'] = voice_region unless voice_region.nil?
49
55
  form['FriendlyName'] = friendly_name unless friendly_name.nil?
50
- RoutesV2PhoneNumber.from_hash(@transport.request(:post, "/v2/PhoneNumbers/#{phone_number}", form: form))
56
+ RoutesV2PhoneNumber.from_hash(@transport.request(:post, "/v2/PhoneNumbers/#{encode_path_segment(phone_number)}", form: form))
51
57
  end
52
58
  end
53
59
  end
@@ -2,16 +2,18 @@
2
2
 
3
3
  require_relative 'base'
4
4
  require_relative '../models/sip'
5
+ require_relative '../models/sip_registrations'
5
6
 
6
7
  module VoiceML
7
8
  # `client.sip` — top-level SIP Trunking holder.
8
9
  class SipResource
9
- attr_reader :domains, :credential_lists, :ip_access_control_lists
10
+ attr_reader :domains, :credential_lists, :ip_access_control_lists, :registrations
10
11
 
11
12
  def initialize(transport)
12
13
  @domains = SipDomainsResource.new(transport)
13
14
  @credential_lists = SipCredentialListsResource.new(transport)
14
15
  @ip_access_control_lists = SipIpAccessControlListsResource.new(transport)
16
+ @registrations = SipRegistrationsResource.new(transport)
15
17
  end
16
18
  end
17
19
 
@@ -33,9 +35,10 @@ module VoiceML
33
35
  }.freeze
34
36
 
35
37
  PAGE_FIELDS = { 'Page' => :page, 'PageSize' => :page_size, 'PageToken' => :page_token }.freeze
38
+ LIST_FIELDS = { 'FriendlyName' => :friendly_name, 'Page' => :page, 'PageSize' => :page_size, 'PageToken' => :page_token }.freeze
36
39
 
37
40
  def list(**kwargs)
38
- SipDomainList.new(@transport.request(:get, path('SIP', 'Domains'), params: form_params(PAGE_FIELDS, kwargs)))
41
+ SipDomainList.new(@transport.request(:get, path('SIP', 'Domains'), params: form_params(LIST_FIELDS, kwargs)))
39
42
  end
40
43
 
41
44
  def create(domain_name:, **kwargs)
@@ -130,12 +133,14 @@ module VoiceML
130
133
  # /SIP/CredentialLists + /Credentials sub-resource.
131
134
  class SipCredentialListsResource < BaseResource
132
135
  PAGE_FIELDS = { 'Page' => :page, 'PageSize' => :page_size, 'PageToken' => :page_token }.freeze
136
+ LIST_FIELDS = { 'FriendlyName' => :friendly_name, 'Page' => :page, 'PageSize' => :page_size, 'PageToken' => :page_token }.freeze
133
137
 
134
138
  def list(**kwargs)
135
- SipCredentialListList.new(@transport.request(:get, path('SIP', 'CredentialLists'), params: form_params(PAGE_FIELDS, kwargs)))
139
+ SipCredentialListList.new(@transport.request(:get, path('SIP', 'CredentialLists'), params: form_params(LIST_FIELDS, kwargs)))
136
140
  end
137
- def create(friendly_name:)
138
- SipCredentialList.from_hash(@transport.request(:post, path('SIP', 'CredentialLists'), form: { 'FriendlyName' => friendly_name }))
141
+ def create(friendly_name: nil)
142
+ form = friendly_name.nil? ? {} : { 'FriendlyName' => friendly_name }
143
+ SipCredentialList.from_hash(@transport.request(:post, path('SIP', 'CredentialLists'), form: form))
139
144
  end
140
145
  def fetch(credential_list_sid)
141
146
  SipCredentialList.from_hash(@transport.request(:get, path('SIP', 'CredentialLists', credential_list_sid)))
@@ -158,8 +163,9 @@ module VoiceML
158
163
  def fetch_credential(credential_list_sid, credential_sid)
159
164
  SipCredential.from_hash(@transport.request(:get, path('SIP', 'CredentialLists', credential_list_sid, 'Credentials', credential_sid)))
160
165
  end
161
- def update_credential(credential_list_sid, credential_sid, password:)
162
- SipCredential.from_hash(@transport.request(:post, path('SIP', 'CredentialLists', credential_list_sid, 'Credentials', credential_sid), form: { 'Password' => password }))
166
+ def update_credential(credential_list_sid, credential_sid, password: nil)
167
+ form = password.nil? ? {} : { 'Password' => password }
168
+ SipCredential.from_hash(@transport.request(:post, path('SIP', 'CredentialLists', credential_list_sid, 'Credentials', credential_sid), form: form))
163
169
  end
164
170
  def delete_credential(credential_list_sid, credential_sid)
165
171
  @transport.request(:delete, path('SIP', 'CredentialLists', credential_list_sid, 'Credentials', credential_sid)); nil
@@ -169,13 +175,15 @@ module VoiceML
169
175
  # /SIP/IpAccessControlLists + /IpAddresses sub-resource.
170
176
  class SipIpAccessControlListsResource < BaseResource
171
177
  PAGE_FIELDS = { 'Page' => :page, 'PageSize' => :page_size, 'PageToken' => :page_token }.freeze
178
+ LIST_FIELDS = { 'FriendlyName' => :friendly_name, 'Page' => :page, 'PageSize' => :page_size, 'PageToken' => :page_token }.freeze
172
179
  IP_FIELDS = { 'FriendlyName' => :friendly_name, 'IpAddress' => :ip_address, 'CidrPrefixLength' => :cidr_prefix_length }.freeze
173
180
 
174
181
  def list(**kwargs)
175
- SipIpAccessControlListList.new(@transport.request(:get, path('SIP', 'IpAccessControlLists'), params: form_params(PAGE_FIELDS, kwargs)))
182
+ SipIpAccessControlListList.new(@transport.request(:get, path('SIP', 'IpAccessControlLists'), params: form_params(LIST_FIELDS, kwargs)))
176
183
  end
177
- def create(friendly_name:)
178
- SipIpAccessControlList.from_hash(@transport.request(:post, path('SIP', 'IpAccessControlLists'), form: { 'FriendlyName' => friendly_name }))
184
+ def create(friendly_name: nil)
185
+ form = friendly_name.nil? ? {} : { 'FriendlyName' => friendly_name }
186
+ SipIpAccessControlList.from_hash(@transport.request(:post, path('SIP', 'IpAccessControlLists'), form: form))
179
187
  end
180
188
  def fetch(acl_sid)
181
189
  SipIpAccessControlList.from_hash(@transport.request(:get, path('SIP', 'IpAccessControlLists', acl_sid)))
@@ -190,7 +198,7 @@ module VoiceML
190
198
 
191
199
  # /IpAddresses sub-resource
192
200
  def list_ip_addresses(acl_sid, **kwargs)
193
- SipIpAddressList.new(@transport.request(:get, path('SIP', 'IpAccessControlLists', acl_sid, 'IpAddresses'), params: form_params(PAGE_FIELDS, kwargs)))
201
+ SipIpAddressList.new(@transport.request(:get, path('SIP', 'IpAccessControlLists', acl_sid, 'IpAddresses'), params: form_params(LIST_FIELDS, kwargs)))
194
202
  end
195
203
  def create_ip_address(acl_sid, friendly_name:, ip_address:, cidr_prefix_length: nil)
196
204
  form = { 'FriendlyName' => friendly_name, 'IpAddress' => ip_address }
@@ -207,4 +215,15 @@ module VoiceML
207
215
  @transport.request(:delete, path('SIP', 'IpAccessControlLists', acl_sid, 'IpAddresses', ip_address_sid)); nil
208
216
  end
209
217
  end
218
+
219
+ # /SIP/Registrations — live registrations on the tenant's SIP Domains.
220
+ class SipRegistrationsResource < BaseResource
221
+ LIST_FIELDS = { 'Page' => :page, 'PageSize' => :page_size, 'PageToken' => :page_token }.freeze
222
+
223
+ # @return [VoiceML::SipRegistrationList]
224
+ def list(**kwargs)
225
+ SipRegistrationList.new(@transport.request(:get, path('SIP', 'Registrations'),
226
+ params: form_params(LIST_FIELDS, kwargs)))
227
+ end
228
+ end
210
229
  end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+ require_relative '../models/transcriptions'
5
+
6
+ module VoiceML
7
+ # Operations on the account-wide `/Transcriptions` — stored transcriptions
8
+ # across all recordings. Per-recording access lives on
9
+ # {VoiceML::RecordingsResource}; live-call start/stop on
10
+ # {VoiceML::CallsResource}.
11
+ class TranscriptionsResource < BaseResource
12
+ LIST_FIELDS = {
13
+ 'DateCreated' => :date_created,
14
+ 'DateCreated<' => :date_created_lt,
15
+ 'DateCreated>' => :date_created_gt,
16
+ 'Page' => :page,
17
+ 'PageSize' => :page_size,
18
+ 'PageToken' => :page_token
19
+ }.freeze
20
+
21
+ # @return [VoiceML::TranscriptionList]
22
+ def list(**kwargs)
23
+ TranscriptionList.from_hash(
24
+ @transport.request(:get, path('Transcriptions'),
25
+ params: form_params(LIST_FIELDS, kwargs))
26
+ )
27
+ end
28
+
29
+ # @return [VoiceML::Transcription]
30
+ def fetch(sid)
31
+ Transcription.from_hash(@transport.request(:get, path('Transcriptions', sid)))
32
+ end
33
+
34
+ # @return [nil]
35
+ def delete(sid)
36
+ @transport.request(:delete, path('Transcriptions', sid))
37
+ nil
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+ require_relative '../models/usage_records'
5
+
6
+ module VoiceML
7
+ # Operations on `/Usage/Records` — usage buckets over the account, with the
8
+ # nine fixed windows (`AllTime`, `Daily`, `LastMonth`, `Monthly`,
9
+ # `ThisMonth`, `Today`, `Yearly`, `Yesterday`) the API offers.
10
+ class UsageRecordsResource < BaseResource
11
+ LIST_FIELDS = {
12
+ 'Category' => :category,
13
+ 'StartDate' => :start_date,
14
+ 'EndDate' => :end_date,
15
+ 'IncludeSubaccounts' => :include_subaccounts,
16
+ 'Page' => :page,
17
+ 'PageSize' => :page_size,
18
+ 'PageToken' => :page_token
19
+ }.freeze
20
+
21
+ WINDOWS = {
22
+ all_time: 'AllTime',
23
+ daily: 'Daily',
24
+ last_month: 'LastMonth',
25
+ monthly: 'Monthly',
26
+ this_month: 'ThisMonth',
27
+ today: 'Today',
28
+ yearly: 'Yearly',
29
+ yesterday: 'Yesterday'
30
+ }.freeze
31
+
32
+ # @return [VoiceML::UsageRecordList]
33
+ def list(**kwargs)
34
+ UsageRecordList.from_hash(
35
+ @transport.request(:get, path('Usage', 'Records'),
36
+ params: form_params(LIST_FIELDS, kwargs))
37
+ )
38
+ end
39
+
40
+ WINDOWS.each do |ruby_name, segment|
41
+ # @!method list_all_time(**kwargs)
42
+ # @return [VoiceML::UsageRecordList]
43
+ define_method("list_#{ruby_name}") do |**kwargs|
44
+ UsageRecordList.from_hash(
45
+ @transport.request(:get, path('Usage', 'Records', segment),
46
+ params: form_params(LIST_FIELDS, kwargs))
47
+ )
48
+ end
49
+ end
50
+ end
51
+ end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'base'
4
+
3
5
  require_relative '../models/voice_v1'
4
6
 
5
7
  module VoiceML
@@ -20,6 +22,8 @@ module VoiceML
20
22
 
21
23
  # /v1/IpRecords + /v1/IpRecords/{Sid}
22
24
  class VoiceV1IpRecordsResource
25
+ include V1Pages
26
+ include FieldMapping
23
27
  def initialize(transport)
24
28
  @transport = transport
25
29
  end
@@ -38,23 +42,25 @@ module VoiceML
38
42
  end
39
43
 
40
44
  def fetch(sid)
41
- VoiceV1IpRecord.from_hash(@transport.request(:get, "/v1/IpRecords/#{sid}"))
45
+ VoiceV1IpRecord.from_hash(@transport.request(:get, "/v1/IpRecords/#{encode_path_segment(sid)}"))
42
46
  end
43
47
 
44
48
  def update(sid, friendly_name: nil)
45
49
  form = {}
46
50
  form['FriendlyName'] = friendly_name unless friendly_name.nil?
47
- VoiceV1IpRecord.from_hash(@transport.request(:post, "/v1/IpRecords/#{sid}", form: form))
51
+ VoiceV1IpRecord.from_hash(@transport.request(:post, "/v1/IpRecords/#{encode_path_segment(sid)}", form: form))
48
52
  end
49
53
 
50
54
  def delete(sid)
51
- @transport.request(:delete, "/v1/IpRecords/#{sid}")
55
+ @transport.request(:delete, "/v1/IpRecords/#{encode_path_segment(sid)}")
52
56
  nil
53
57
  end
54
58
  end
55
59
 
56
60
  # /v1/SourceIpMappings + /v1/SourceIpMappings/{Sid}
57
61
  class VoiceV1SourceIpMappingsResource
62
+ include V1Pages
63
+ include FieldMapping
58
64
  def initialize(transport)
59
65
  @transport = transport
60
66
  end
@@ -71,22 +77,24 @@ module VoiceML
71
77
  end
72
78
 
73
79
  def fetch(sid)
74
- VoiceV1SourceIpMapping.from_hash(@transport.request(:get, "/v1/SourceIpMappings/#{sid}"))
80
+ VoiceV1SourceIpMapping.from_hash(@transport.request(:get, "/v1/SourceIpMappings/#{encode_path_segment(sid)}"))
75
81
  end
76
82
 
77
83
  def update(sid, sip_domain_sid:)
78
84
  form = { 'SipDomainSid' => sip_domain_sid }
79
- VoiceV1SourceIpMapping.from_hash(@transport.request(:post, "/v1/SourceIpMappings/#{sid}", form: form))
85
+ VoiceV1SourceIpMapping.from_hash(@transport.request(:post, "/v1/SourceIpMappings/#{encode_path_segment(sid)}", form: form))
80
86
  end
81
87
 
82
88
  def delete(sid)
83
- @transport.request(:delete, "/v1/SourceIpMappings/#{sid}")
89
+ @transport.request(:delete, "/v1/SourceIpMappings/#{encode_path_segment(sid)}")
84
90
  nil
85
91
  end
86
92
  end
87
93
 
88
94
  # /v1/ByocTrunks + /v1/ByocTrunks/{Sid}
89
95
  class VoiceV1ByocTrunksResource
96
+ include V1Pages
97
+ include FieldMapping
90
98
  TRUNK_FIELDS = {
91
99
  'FriendlyName' => :friendly_name,
92
100
  'VoiceUrl' => :voice_url,
@@ -111,38 +119,28 @@ module VoiceML
111
119
  end
112
120
 
113
121
  def create(**kwargs)
114
- VoiceV1ByocTrunk.from_hash(@transport.request(:post, '/v1/ByocTrunks', form: build_form(kwargs)))
122
+ VoiceV1ByocTrunk.from_hash(@transport.request(:post, '/v1/ByocTrunks', form: form_params(TRUNK_FIELDS, kwargs)))
115
123
  end
116
124
 
117
125
  def fetch(sid)
118
- VoiceV1ByocTrunk.from_hash(@transport.request(:get, "/v1/ByocTrunks/#{sid}"))
126
+ VoiceV1ByocTrunk.from_hash(@transport.request(:get, "/v1/ByocTrunks/#{encode_path_segment(sid)}"))
119
127
  end
120
128
 
121
129
  def update(sid, **kwargs)
122
- VoiceV1ByocTrunk.from_hash(@transport.request(:post, "/v1/ByocTrunks/#{sid}", form: build_form(kwargs)))
130
+ VoiceV1ByocTrunk.from_hash(@transport.request(:post, "/v1/ByocTrunks/#{encode_path_segment(sid)}", form: form_params(TRUNK_FIELDS, kwargs)))
123
131
  end
124
132
 
125
133
  def delete(sid)
126
- @transport.request(:delete, "/v1/ByocTrunks/#{sid}")
134
+ @transport.request(:delete, "/v1/ByocTrunks/#{encode_path_segment(sid)}")
127
135
  nil
128
136
  end
129
137
 
130
- private
131
-
132
- def build_form(kwargs)
133
- out = {}
134
- TRUNK_FIELDS.each do |wire, k|
135
- value = kwargs[k]
136
- next if value.nil?
137
-
138
- out[wire] = value
139
- end
140
- out
141
- end
142
138
  end
143
139
 
144
140
  # /v1/ConnectionPolicies + /v1/ConnectionPolicies/{Sid} + nested /Targets
145
141
  class VoiceV1ConnectionPoliciesResource
142
+ include V1Pages
143
+ include FieldMapping
146
144
  TARGET_FIELDS = {
147
145
  'Target' => :target,
148
146
  'FriendlyName' => :friendly_name,
@@ -168,17 +166,17 @@ module VoiceML
168
166
  end
169
167
 
170
168
  def fetch(sid)
171
- VoiceV1ConnectionPolicy.from_hash(@transport.request(:get, "/v1/ConnectionPolicies/#{sid}"))
169
+ VoiceV1ConnectionPolicy.from_hash(@transport.request(:get, "/v1/ConnectionPolicies/#{encode_path_segment(sid)}"))
172
170
  end
173
171
 
174
172
  def update(sid, friendly_name: nil)
175
173
  form = {}
176
174
  form['FriendlyName'] = friendly_name unless friendly_name.nil?
177
- VoiceV1ConnectionPolicy.from_hash(@transport.request(:post, "/v1/ConnectionPolicies/#{sid}", form: form))
175
+ VoiceV1ConnectionPolicy.from_hash(@transport.request(:post, "/v1/ConnectionPolicies/#{encode_path_segment(sid)}", form: form))
178
176
  end
179
177
 
180
178
  def delete(sid)
181
- @transport.request(:delete, "/v1/ConnectionPolicies/#{sid}")
179
+ @transport.request(:delete, "/v1/ConnectionPolicies/#{encode_path_segment(sid)}")
182
180
  nil
183
181
  end
184
182
 
@@ -187,52 +185,47 @@ module VoiceML
187
185
  params = {}
188
186
  params['PageSize'] = page_size unless page_size.nil?
189
187
  VoiceV1ConnectionPolicyTargetList.new(
190
- @transport.request(:get, "/v1/ConnectionPolicies/#{connection_policy_sid}/Targets", params: params)
188
+ @transport.request(:get, "/v1/ConnectionPolicies/#{encode_path_segment(connection_policy_sid)}/Targets", params: params)
191
189
  )
192
190
  end
193
191
 
194
192
  def create_target(connection_policy_sid, target:, friendly_name: nil, priority: nil, weight: nil, enabled: nil)
195
193
  kwargs = { target: target, friendly_name: friendly_name, priority: priority, weight: weight, enabled: enabled }
196
194
  VoiceV1ConnectionPolicyTarget.from_hash(
197
- @transport.request(:post, "/v1/ConnectionPolicies/#{connection_policy_sid}/Targets",
195
+ @transport.request(:post, "/v1/ConnectionPolicies/#{encode_path_segment(connection_policy_sid)}/Targets",
198
196
  form: build_target_form(kwargs))
199
197
  )
200
198
  end
201
199
 
202
200
  def fetch_target(connection_policy_sid, sid)
203
201
  VoiceV1ConnectionPolicyTarget.from_hash(
204
- @transport.request(:get, "/v1/ConnectionPolicies/#{connection_policy_sid}/Targets/#{sid}")
202
+ @transport.request(:get, "/v1/ConnectionPolicies/#{encode_path_segment(connection_policy_sid)}/Targets/#{encode_path_segment(sid)}")
205
203
  )
206
204
  end
207
205
 
208
206
  def update_target(connection_policy_sid, sid, **kwargs)
209
207
  VoiceV1ConnectionPolicyTarget.from_hash(
210
- @transport.request(:post, "/v1/ConnectionPolicies/#{connection_policy_sid}/Targets/#{sid}",
208
+ @transport.request(:post, "/v1/ConnectionPolicies/#{encode_path_segment(connection_policy_sid)}/Targets/#{encode_path_segment(sid)}",
211
209
  form: build_target_form(kwargs))
212
210
  )
213
211
  end
214
212
 
215
213
  def delete_target(connection_policy_sid, sid)
216
- @transport.request(:delete, "/v1/ConnectionPolicies/#{connection_policy_sid}/Targets/#{sid}")
214
+ @transport.request(:delete, "/v1/ConnectionPolicies/#{encode_path_segment(connection_policy_sid)}/Targets/#{encode_path_segment(sid)}")
217
215
  nil
218
216
  end
219
217
 
220
218
  private
221
219
 
222
220
  def build_target_form(kwargs)
223
- out = {}
224
- TARGET_FIELDS.each do |wire, k|
225
- value = kwargs[k]
226
- next if value.nil?
227
-
228
- out[wire] = value
229
- end
230
- out
221
+ form_params(TARGET_FIELDS, kwargs)
231
222
  end
232
223
  end
233
224
 
234
225
  # /v1/Settings — DialingPermissions inheritance toggle (singleton).
235
226
  class VoiceV1DialingPermissionsResource
227
+ include V1Pages
228
+ include FieldMapping
236
229
  def initialize(transport)
237
230
  @transport = transport
238
231
  end