twilio-ruby 5.3.1 → 5.4.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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +17 -0
  3. data/README.md +2 -2
  4. data/lib/rack/twilio_webhook_authentication.rb +46 -0
  5. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/local.rb +10 -1
  6. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/mobile.rb +10 -1
  7. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/toll_free.rb +10 -1
  8. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number.rb +22 -3
  9. data/lib/twilio-ruby/rest/api/v2010/account/message.rb +3 -1
  10. data/lib/twilio-ruby/rest/client.rb +7 -0
  11. data/lib/twilio-ruby/rest/preview/hosted_numbers/authorization_document.rb +417 -0
  12. data/lib/twilio-ruby/rest/preview/hosted_numbers/hosted_number_order.rb +8 -7
  13. data/lib/twilio-ruby/rest/preview/hosted_numbers.rb +16 -0
  14. data/lib/twilio-ruby/rest/preview.rb +9 -0
  15. data/lib/twilio-ruby/rest/proxy/v1/service/phone_number.rb +384 -0
  16. data/lib/twilio-ruby/rest/proxy/v1/service/session/interaction.rb +456 -0
  17. data/lib/twilio-ruby/rest/proxy/v1/service/session/participant/message_interaction.rb +465 -0
  18. data/lib/twilio-ruby/rest/proxy/v1/service/session/participant.rb +541 -0
  19. data/lib/twilio-ruby/rest/proxy/v1/service/session.rb +578 -0
  20. data/lib/twilio-ruby/rest/proxy/v1/service/short_code.rb +377 -0
  21. data/lib/twilio-ruby/rest/proxy/v1/service.rb +509 -0
  22. data/lib/twilio-ruby/rest/proxy/v1.rb +41 -0
  23. data/lib/twilio-ruby/rest/proxy.rb +44 -0
  24. data/lib/twilio-ruby/rest/wireless/v1/sim.rb +7 -0
  25. data/lib/twilio-ruby/security/request_validator.rb +1 -1
  26. data/lib/twilio-ruby/twiml/messaging_response.rb +5 -5
  27. data/lib/twilio-ruby/twiml/voice_response.rb +9 -7
  28. data/lib/twilio-ruby/util/configuration.rb +0 -3
  29. data/lib/twilio-ruby/version.rb +1 -1
  30. data/lib/twilio-ruby.rb +1 -0
  31. data/spec/integration/api/v2010/account/incoming_phone_number/local_spec.rb +2 -0
  32. data/spec/integration/api/v2010/account/incoming_phone_number/mobile_spec.rb +2 -0
  33. data/spec/integration/api/v2010/account/incoming_phone_number/toll_free_spec.rb +2 -0
  34. data/spec/integration/api/v2010/account/incoming_phone_number_spec.rb +4 -0
  35. data/spec/integration/preview/hosted_numbers/authorization_document_spec.rb +211 -0
  36. data/spec/integration/preview/hosted_numbers/hosted_number_order_spec.rb +35 -4
  37. data/spec/integration/proxy/v1/service/phone_number_spec.rb +176 -0
  38. data/spec/integration/proxy/v1/service/session/interaction_spec.rb +104 -0
  39. data/spec/integration/proxy/v1/service/session/participant/message_interaction_spec.rb +164 -0
  40. data/spec/integration/proxy/v1/service/session/participant_spec.rb +232 -0
  41. data/spec/integration/proxy/v1/service/session_spec.rb +225 -0
  42. data/spec/integration/proxy/v1/service/short_code_spec.rb +173 -0
  43. data/spec/integration/proxy/v1/service_spec.rb +200 -0
  44. data/spec/integration/wireless/v1/sim_spec.rb +6 -3
  45. data/spec/rack/twilio_webhook_authentication_spec.rb +106 -0
  46. data/spec/security/request_validator_spec.rb +28 -0
  47. data/spec/twiml/messaging_response_spec.rb +6 -6
  48. metadata +31 -2
@@ -0,0 +1,377 @@
1
+ ##
2
+ # This code was generated by
3
+ # \ / _ _ _| _ _
4
+ # | (_)\/(_)(_|\/| |(/_ v1.0.0
5
+ # / /
6
+
7
+ module Twilio
8
+ module REST
9
+ class Proxy < Domain
10
+ class V1 < Version
11
+ class ServiceContext < InstanceContext
12
+ ##
13
+ # PLEASE NOTE that this class contains beta products that are subject to change. Use them with caution.
14
+ class ShortCodeList < ListResource
15
+ ##
16
+ # Initialize the ShortCodeList
17
+ # @param [Version] version Version that contains the resource
18
+ # @param [String] service_sid The unique SID identifier of the Service.
19
+ # @return [ShortCodeList] ShortCodeList
20
+ def initialize(version, service_sid: nil)
21
+ super(version)
22
+
23
+ # Path Solution
24
+ @solution = {
25
+ service_sid: service_sid
26
+ }
27
+ @uri = "/Services/#{@solution[:service_sid]}/ShortCodes"
28
+ end
29
+
30
+ ##
31
+ # Retrieve a single page of ShortCodeInstance records from the API.
32
+ # Request is executed immediately.
33
+ # @param [String] sid A 34 character string that uniquely identifies this Short
34
+ # Code.
35
+ # @return [ShortCodeInstance] Newly created ShortCodeInstance
36
+ def create(sid: nil)
37
+ data = Twilio::Values.of({
38
+ 'Sid' => sid,
39
+ })
40
+
41
+ payload = @version.create(
42
+ 'POST',
43
+ @uri,
44
+ data: data
45
+ )
46
+
47
+ ShortCodeInstance.new(
48
+ @version,
49
+ payload,
50
+ service_sid: @solution[:service_sid],
51
+ )
52
+ end
53
+
54
+ ##
55
+ # Lists ShortCodeInstance records from the API as a list.
56
+ # Unlike stream(), this operation is eager and will load `limit` records into
57
+ # memory before returning.
58
+ # @param [Integer] limit Upper limit for the number of records to return. stream()
59
+ # guarantees to never return more than limit. Default is no limit
60
+ # @param [Integer] page_size Number of records to fetch per request, when
61
+ # not set will use the default value of 50 records. If no page_size is defined
62
+ # but a limit is defined, stream() will attempt to read the limit with the most
63
+ # efficient page size, i.e. min(limit, 1000)
64
+ # @return [Array] Array of up to limit results
65
+ def list(limit: nil, page_size: nil)
66
+ self.stream(
67
+ limit: limit,
68
+ page_size: page_size
69
+ ).entries
70
+ end
71
+
72
+ ##
73
+ # Streams ShortCodeInstance records from the API as an Enumerable.
74
+ # This operation lazily loads records as efficiently as possible until the limit
75
+ # is reached.
76
+ # @param [Integer] limit Upper limit for the number of records to return. stream()
77
+ # guarantees to never return more than limit. Default is no limit.
78
+ # @param [Integer] page_size Number of records to fetch per request, when
79
+ # not set will use the default value of 50 records. If no page_size is defined
80
+ # but a limit is defined, stream() will attempt to read the limit with the most
81
+ # efficient page size, i.e. min(limit, 1000)
82
+ # @return [Enumerable] Enumerable that will yield up to limit results
83
+ def stream(limit: nil, page_size: nil)
84
+ limits = @version.read_limits(limit, page_size)
85
+
86
+ page = self.page(
87
+ page_size: limits[:page_size],
88
+ )
89
+
90
+ @version.stream(page, limit: limits[:limit], page_limit: limits[:page_limit])
91
+ end
92
+
93
+ ##
94
+ # When passed a block, yields ShortCodeInstance records from the API.
95
+ # This operation lazily loads records as efficiently as possible until the limit
96
+ # is reached.
97
+ def each
98
+ limits = @version.read_limits
99
+
100
+ page = self.page(
101
+ page_size: limits[:page_size],
102
+ )
103
+
104
+ @version.stream(page,
105
+ limit: limits[:limit],
106
+ page_limit: limits[:page_limit]).each {|x| yield x}
107
+ end
108
+
109
+ ##
110
+ # Retrieve a single page of ShortCodeInstance records from the API.
111
+ # Request is executed immediately.
112
+ # @param [String] page_token PageToken provided by the API
113
+ # @param [Integer] page_number Page Number, this value is simply for client state
114
+ # @param [Integer] page_size Number of records to return, defaults to 50
115
+ # @return [Page] Page of ShortCodeInstance
116
+ def page(page_token: :unset, page_number: :unset, page_size: :unset)
117
+ params = Twilio::Values.of({
118
+ 'PageToken' => page_token,
119
+ 'Page' => page_number,
120
+ 'PageSize' => page_size,
121
+ })
122
+ response = @version.page(
123
+ 'GET',
124
+ @uri,
125
+ params
126
+ )
127
+ ShortCodePage.new(@version, response, @solution)
128
+ end
129
+
130
+ ##
131
+ # Retrieve a single page of ShortCodeInstance records from the API.
132
+ # Request is executed immediately.
133
+ # @param [String] target_url API-generated URL for the requested results page
134
+ # @return [Page] Page of ShortCodeInstance
135
+ def get_page(target_url)
136
+ response = @version.domain.request(
137
+ 'GET',
138
+ target_url
139
+ )
140
+ ShortCodePage.new(@version, response, @solution)
141
+ end
142
+
143
+ ##
144
+ # Provide a user friendly representation
145
+ def to_s
146
+ '#<Twilio.Proxy.V1.ShortCodeList>'
147
+ end
148
+ end
149
+
150
+ ##
151
+ # PLEASE NOTE that this class contains beta products that are subject to change. Use them with caution.
152
+ class ShortCodePage < Page
153
+ ##
154
+ # Initialize the ShortCodePage
155
+ # @param [Version] version Version that contains the resource
156
+ # @param [Response] response Response from the API
157
+ # @param [Hash] solution Path solution for the resource
158
+ # @return [ShortCodePage] ShortCodePage
159
+ def initialize(version, response, solution)
160
+ super(version, response)
161
+
162
+ # Path Solution
163
+ @solution = solution
164
+ end
165
+
166
+ ##
167
+ # Build an instance of ShortCodeInstance
168
+ # @param [Hash] payload Payload response from the API
169
+ # @return [ShortCodeInstance] ShortCodeInstance
170
+ def get_instance(payload)
171
+ ShortCodeInstance.new(
172
+ @version,
173
+ payload,
174
+ service_sid: @solution[:service_sid],
175
+ )
176
+ end
177
+
178
+ ##
179
+ # Provide a user friendly representation
180
+ def to_s
181
+ '<Twilio.Proxy.V1.ShortCodePage>'
182
+ end
183
+ end
184
+
185
+ ##
186
+ # PLEASE NOTE that this class contains beta products that are subject to change. Use them with caution.
187
+ class ShortCodeContext < InstanceContext
188
+ ##
189
+ # Initialize the ShortCodeContext
190
+ # @param [Version] version Version that contains the resource
191
+ # @param [String] service_sid The unique SID identifier of the Service.
192
+ # @param [String] sid A 34 character string that uniquely identifies this Short
193
+ # Code.
194
+ # @return [ShortCodeContext] ShortCodeContext
195
+ def initialize(version, service_sid, sid)
196
+ super(version)
197
+
198
+ # Path Solution
199
+ @solution = {
200
+ service_sid: service_sid,
201
+ sid: sid,
202
+ }
203
+ @uri = "/Services/#{@solution[:service_sid]}/ShortCodes/#{@solution[:sid]}"
204
+ end
205
+
206
+ ##
207
+ # Deletes the ShortCodeInstance
208
+ # @return [Boolean] true if delete succeeds, true otherwise
209
+ def delete
210
+ @version.delete('delete', @uri)
211
+ end
212
+
213
+ ##
214
+ # Fetch a ShortCodeInstance
215
+ # @return [ShortCodeInstance] Fetched ShortCodeInstance
216
+ def fetch
217
+ params = Twilio::Values.of({})
218
+
219
+ payload = @version.fetch(
220
+ 'GET',
221
+ @uri,
222
+ params,
223
+ )
224
+
225
+ ShortCodeInstance.new(
226
+ @version,
227
+ payload,
228
+ service_sid: @solution[:service_sid],
229
+ sid: @solution[:sid],
230
+ )
231
+ end
232
+
233
+ ##
234
+ # Provide a user friendly representation
235
+ def to_s
236
+ context = @solution.map {|k, v| "#{k}: #{v}"}.join(',')
237
+ "#<Twilio.Proxy.V1.ShortCodeContext #{context}>"
238
+ end
239
+ end
240
+
241
+ ##
242
+ # PLEASE NOTE that this class contains beta products that are subject to change. Use them with caution.
243
+ class ShortCodeInstance < InstanceResource
244
+ ##
245
+ # Initialize the ShortCodeInstance
246
+ # @param [Version] version Version that contains the resource
247
+ # @param [Hash] payload payload that contains response from Twilio
248
+ # @param [String] service_sid The unique SID identifier of the Service.
249
+ # @param [String] sid A 34 character string that uniquely identifies this Short
250
+ # Code.
251
+ # @return [ShortCodeInstance] ShortCodeInstance
252
+ def initialize(version, payload, service_sid: nil, sid: nil)
253
+ super(version)
254
+
255
+ # Marshaled Properties
256
+ @properties = {
257
+ 'sid' => payload['sid'],
258
+ 'account_sid' => payload['account_sid'],
259
+ 'service_sid' => payload['service_sid'],
260
+ 'date_created' => Twilio.deserialize_iso8601_datetime(payload['date_created']),
261
+ 'date_updated' => Twilio.deserialize_iso8601_datetime(payload['date_updated']),
262
+ 'short_code' => payload['short_code'],
263
+ 'iso_country' => payload['iso_country'],
264
+ 'capabilities' => payload['capabilities'],
265
+ 'url' => payload['url'],
266
+ }
267
+
268
+ # Context
269
+ @instance_context = nil
270
+ @params = {
271
+ 'service_sid' => service_sid,
272
+ 'sid' => sid || @properties['sid'],
273
+ }
274
+ end
275
+
276
+ ##
277
+ # Generate an instance context for the instance, the context is capable of
278
+ # performing various actions. All instance actions are proxied to the context
279
+ # @return [ShortCodeContext] ShortCodeContext for this ShortCodeInstance
280
+ def context
281
+ unless @instance_context
282
+ @instance_context = ShortCodeContext.new(
283
+ @version,
284
+ @params['service_sid'],
285
+ @params['sid'],
286
+ )
287
+ end
288
+ @instance_context
289
+ end
290
+
291
+ ##
292
+ # @return [String] A string that uniquely identifies this Short Code.
293
+ def sid
294
+ @properties['sid']
295
+ end
296
+
297
+ ##
298
+ # @return [String] Account Sid.
299
+ def account_sid
300
+ @properties['account_sid']
301
+ end
302
+
303
+ ##
304
+ # @return [String] Service Sid.
305
+ def service_sid
306
+ @properties['service_sid']
307
+ end
308
+
309
+ ##
310
+ # @return [Time] The date this Short Code was created
311
+ def date_created
312
+ @properties['date_created']
313
+ end
314
+
315
+ ##
316
+ # @return [Time] The date this Short Code was updated
317
+ def date_updated
318
+ @properties['date_updated']
319
+ end
320
+
321
+ ##
322
+ # @return [String] Shortcode.
323
+ def short_code
324
+ @properties['short_code']
325
+ end
326
+
327
+ ##
328
+ # @return [String] ISO Country Code,
329
+ def iso_country
330
+ @properties['iso_country']
331
+ end
332
+
333
+ ##
334
+ # @return [Hash] Nested resource URLs.
335
+ def capabilities
336
+ @properties['capabilities']
337
+ end
338
+
339
+ ##
340
+ # @return [String] The URL of this resource.
341
+ def url
342
+ @properties['url']
343
+ end
344
+
345
+ ##
346
+ # Deletes the ShortCodeInstance
347
+ # @return [Boolean] true if delete succeeds, true otherwise
348
+ def delete
349
+ context.delete
350
+ end
351
+
352
+ ##
353
+ # Fetch a ShortCodeInstance
354
+ # @return [ShortCodeInstance] Fetched ShortCodeInstance
355
+ def fetch
356
+ context.fetch
357
+ end
358
+
359
+ ##
360
+ # Provide a user friendly representation
361
+ def to_s
362
+ values = @params.map{|k, v| "#{k}: #{v}"}.join(" ")
363
+ "<Twilio.Proxy.V1.ShortCodeInstance #{values}>"
364
+ end
365
+
366
+ ##
367
+ # Provide a detailed, user friendly representation
368
+ def inspect
369
+ values = @properties.map{|k, v| "#{k}: #{v}"}.join(" ")
370
+ "<Twilio.Proxy.V1.ShortCodeInstance #{values}>"
371
+ end
372
+ end
373
+ end
374
+ end
375
+ end
376
+ end
377
+ end
@@ -0,0 +1,509 @@
1
+ ##
2
+ # This code was generated by
3
+ # \ / _ _ _| _ _
4
+ # | (_)\/(_)(_|\/| |(/_ v1.0.0
5
+ # / /
6
+
7
+ module Twilio
8
+ module REST
9
+ class Proxy < Domain
10
+ class V1 < Version
11
+ ##
12
+ # PLEASE NOTE that this class contains beta products that are subject to change. Use them with caution.
13
+ class ServiceList < ListResource
14
+ ##
15
+ # Initialize the ServiceList
16
+ # @param [Version] version Version that contains the resource
17
+ # @return [ServiceList] ServiceList
18
+ def initialize(version)
19
+ super(version)
20
+
21
+ # Path Solution
22
+ @solution = {}
23
+ @uri = "/Services"
24
+ end
25
+
26
+ ##
27
+ # Lists ServiceInstance records from the API as a list.
28
+ # Unlike stream(), this operation is eager and will load `limit` records into
29
+ # memory before returning.
30
+ # @param [Integer] limit Upper limit for the number of records to return. stream()
31
+ # guarantees to never return more than limit. Default is no limit
32
+ # @param [Integer] page_size Number of records to fetch per request, when
33
+ # not set will use the default value of 50 records. If no page_size is defined
34
+ # but a limit is defined, stream() will attempt to read the limit with the most
35
+ # efficient page size, i.e. min(limit, 1000)
36
+ # @return [Array] Array of up to limit results
37
+ def list(limit: nil, page_size: nil)
38
+ self.stream(
39
+ limit: limit,
40
+ page_size: page_size
41
+ ).entries
42
+ end
43
+
44
+ ##
45
+ # Streams ServiceInstance records from the API as an Enumerable.
46
+ # This operation lazily loads records as efficiently as possible until the limit
47
+ # is reached.
48
+ # @param [Integer] limit Upper limit for the number of records to return. stream()
49
+ # guarantees to never return more than limit. Default is no limit.
50
+ # @param [Integer] page_size Number of records to fetch per request, when
51
+ # not set will use the default value of 50 records. If no page_size is defined
52
+ # but a limit is defined, stream() will attempt to read the limit with the most
53
+ # efficient page size, i.e. min(limit, 1000)
54
+ # @return [Enumerable] Enumerable that will yield up to limit results
55
+ def stream(limit: nil, page_size: nil)
56
+ limits = @version.read_limits(limit, page_size)
57
+
58
+ page = self.page(
59
+ page_size: limits[:page_size],
60
+ )
61
+
62
+ @version.stream(page, limit: limits[:limit], page_limit: limits[:page_limit])
63
+ end
64
+
65
+ ##
66
+ # When passed a block, yields ServiceInstance records from the API.
67
+ # This operation lazily loads records as efficiently as possible until the limit
68
+ # is reached.
69
+ def each
70
+ limits = @version.read_limits
71
+
72
+ page = self.page(
73
+ page_size: limits[:page_size],
74
+ )
75
+
76
+ @version.stream(page,
77
+ limit: limits[:limit],
78
+ page_limit: limits[:page_limit]).each {|x| yield x}
79
+ end
80
+
81
+ ##
82
+ # Retrieve a single page of ServiceInstance records from the API.
83
+ # Request is executed immediately.
84
+ # @param [String] page_token PageToken provided by the API
85
+ # @param [Integer] page_number Page Number, this value is simply for client state
86
+ # @param [Integer] page_size Number of records to return, defaults to 50
87
+ # @return [Page] Page of ServiceInstance
88
+ def page(page_token: :unset, page_number: :unset, page_size: :unset)
89
+ params = Twilio::Values.of({
90
+ 'PageToken' => page_token,
91
+ 'Page' => page_number,
92
+ 'PageSize' => page_size,
93
+ })
94
+ response = @version.page(
95
+ 'GET',
96
+ @uri,
97
+ params
98
+ )
99
+ ServicePage.new(@version, response, @solution)
100
+ end
101
+
102
+ ##
103
+ # Retrieve a single page of ServiceInstance records from the API.
104
+ # Request is executed immediately.
105
+ # @param [String] target_url API-generated URL for the requested results page
106
+ # @return [Page] Page of ServiceInstance
107
+ def get_page(target_url)
108
+ response = @version.domain.request(
109
+ 'GET',
110
+ target_url
111
+ )
112
+ ServicePage.new(@version, response, @solution)
113
+ end
114
+
115
+ ##
116
+ # Retrieve a single page of ServiceInstance records from the API.
117
+ # Request is executed immediately.
118
+ # @param [String] friendly_name A human readable description of this resource, up
119
+ # to 64 characters.
120
+ # @param [String] default_ttl The default Time to Live for a Session, in seconds.
121
+ # @param [String] callback_url The URL Twilio will send callbacks to.
122
+ # @return [ServiceInstance] Newly created ServiceInstance
123
+ def create(friendly_name: :unset, default_ttl: :unset, callback_url: :unset)
124
+ data = Twilio::Values.of({
125
+ 'FriendlyName' => friendly_name,
126
+ 'DefaultTtl' => default_ttl,
127
+ 'CallbackUrl' => callback_url,
128
+ })
129
+
130
+ payload = @version.create(
131
+ 'POST',
132
+ @uri,
133
+ data: data
134
+ )
135
+
136
+ ServiceInstance.new(
137
+ @version,
138
+ payload,
139
+ )
140
+ end
141
+
142
+ ##
143
+ # Provide a user friendly representation
144
+ def to_s
145
+ '#<Twilio.Proxy.V1.ServiceList>'
146
+ end
147
+ end
148
+
149
+ ##
150
+ # PLEASE NOTE that this class contains beta products that are subject to change. Use them with caution.
151
+ class ServicePage < Page
152
+ ##
153
+ # Initialize the ServicePage
154
+ # @param [Version] version Version that contains the resource
155
+ # @param [Response] response Response from the API
156
+ # @param [Hash] solution Path solution for the resource
157
+ # @return [ServicePage] ServicePage
158
+ def initialize(version, response, solution)
159
+ super(version, response)
160
+
161
+ # Path Solution
162
+ @solution = solution
163
+ end
164
+
165
+ ##
166
+ # Build an instance of ServiceInstance
167
+ # @param [Hash] payload Payload response from the API
168
+ # @return [ServiceInstance] ServiceInstance
169
+ def get_instance(payload)
170
+ ServiceInstance.new(
171
+ @version,
172
+ payload,
173
+ )
174
+ end
175
+
176
+ ##
177
+ # Provide a user friendly representation
178
+ def to_s
179
+ '<Twilio.Proxy.V1.ServicePage>'
180
+ end
181
+ end
182
+
183
+ ##
184
+ # PLEASE NOTE that this class contains beta products that are subject to change. Use them with caution.
185
+ class ServiceContext < InstanceContext
186
+ ##
187
+ # Initialize the ServiceContext
188
+ # @param [Version] version Version that contains the resource
189
+ # @param [String] sid A 34 character string that uniquely identifies this Service.
190
+ # @return [ServiceContext] ServiceContext
191
+ def initialize(version, sid)
192
+ super(version)
193
+
194
+ # Path Solution
195
+ @solution = {
196
+ sid: sid,
197
+ }
198
+ @uri = "/Services/#{@solution[:sid]}"
199
+
200
+ # Dependents
201
+ @sessions = nil
202
+ @phone_numbers = nil
203
+ @short_codes = nil
204
+ end
205
+
206
+ ##
207
+ # Fetch a ServiceInstance
208
+ # @return [ServiceInstance] Fetched ServiceInstance
209
+ def fetch
210
+ params = Twilio::Values.of({})
211
+
212
+ payload = @version.fetch(
213
+ 'GET',
214
+ @uri,
215
+ params,
216
+ )
217
+
218
+ ServiceInstance.new(
219
+ @version,
220
+ payload,
221
+ sid: @solution[:sid],
222
+ )
223
+ end
224
+
225
+ ##
226
+ # Deletes the ServiceInstance
227
+ # @return [Boolean] true if delete succeeds, true otherwise
228
+ def delete
229
+ @version.delete('delete', @uri)
230
+ end
231
+
232
+ ##
233
+ # Update the ServiceInstance
234
+ # @param [String] friendly_name A human readable description of this resource, up
235
+ # to 64 characters.
236
+ # @param [String] default_ttl The default Time to Live for a Session, in seconds.
237
+ # @param [String] callback_url The URL Twilio will send callbacks to.
238
+ # @return [ServiceInstance] Updated ServiceInstance
239
+ def update(friendly_name: :unset, default_ttl: :unset, callback_url: :unset)
240
+ data = Twilio::Values.of({
241
+ 'FriendlyName' => friendly_name,
242
+ 'DefaultTtl' => default_ttl,
243
+ 'CallbackUrl' => callback_url,
244
+ })
245
+
246
+ payload = @version.update(
247
+ 'POST',
248
+ @uri,
249
+ data: data,
250
+ )
251
+
252
+ ServiceInstance.new(
253
+ @version,
254
+ payload,
255
+ sid: @solution[:sid],
256
+ )
257
+ end
258
+
259
+ ##
260
+ # Access the sessions
261
+ # @return [SessionList]
262
+ # @return [SessionContext] if sid was passed.
263
+ def sessions(sid=:unset)
264
+ raise ArgumentError, 'sid cannot be nil' if sid.nil?
265
+
266
+ if sid != :unset
267
+ return SessionContext.new(
268
+ @version,
269
+ @solution[:sid],
270
+ sid,
271
+ )
272
+ end
273
+
274
+ unless @sessions
275
+ @sessions = SessionList.new(
276
+ @version,
277
+ service_sid: @solution[:sid],
278
+ )
279
+ end
280
+
281
+ @sessions
282
+ end
283
+
284
+ ##
285
+ # Access the phone_numbers
286
+ # @return [PhoneNumberList]
287
+ # @return [PhoneNumberContext] if sid was passed.
288
+ def phone_numbers(sid=:unset)
289
+ raise ArgumentError, 'sid cannot be nil' if sid.nil?
290
+
291
+ if sid != :unset
292
+ return PhoneNumberContext.new(
293
+ @version,
294
+ @solution[:sid],
295
+ sid,
296
+ )
297
+ end
298
+
299
+ unless @phone_numbers
300
+ @phone_numbers = PhoneNumberList.new(
301
+ @version,
302
+ service_sid: @solution[:sid],
303
+ )
304
+ end
305
+
306
+ @phone_numbers
307
+ end
308
+
309
+ ##
310
+ # Access the short_codes
311
+ # @return [ShortCodeList]
312
+ # @return [ShortCodeContext] if sid was passed.
313
+ def short_codes(sid=:unset)
314
+ raise ArgumentError, 'sid cannot be nil' if sid.nil?
315
+
316
+ if sid != :unset
317
+ return ShortCodeContext.new(
318
+ @version,
319
+ @solution[:sid],
320
+ sid,
321
+ )
322
+ end
323
+
324
+ unless @short_codes
325
+ @short_codes = ShortCodeList.new(
326
+ @version,
327
+ service_sid: @solution[:sid],
328
+ )
329
+ end
330
+
331
+ @short_codes
332
+ end
333
+
334
+ ##
335
+ # Provide a user friendly representation
336
+ def to_s
337
+ context = @solution.map {|k, v| "#{k}: #{v}"}.join(',')
338
+ "#<Twilio.Proxy.V1.ServiceContext #{context}>"
339
+ end
340
+ end
341
+
342
+ ##
343
+ # PLEASE NOTE that this class contains beta products that are subject to change. Use them with caution.
344
+ class ServiceInstance < InstanceResource
345
+ ##
346
+ # Initialize the ServiceInstance
347
+ # @param [Version] version Version that contains the resource
348
+ # @param [Hash] payload payload that contains response from Twilio
349
+ # @param [String] sid A 34 character string that uniquely identifies this Service.
350
+ # @return [ServiceInstance] ServiceInstance
351
+ def initialize(version, payload, sid: nil)
352
+ super(version)
353
+
354
+ # Marshaled Properties
355
+ @properties = {
356
+ 'sid' => payload['sid'],
357
+ 'friendly_name' => payload['friendly_name'],
358
+ 'account_sid' => payload['account_sid'],
359
+ 'callback_url' => payload['callback_url'],
360
+ 'default_ttl' => payload['default_ttl'].to_i,
361
+ 'date_created' => Twilio.deserialize_iso8601_datetime(payload['date_created']),
362
+ 'date_updated' => Twilio.deserialize_iso8601_datetime(payload['date_updated']),
363
+ 'url' => payload['url'],
364
+ 'links' => payload['links'],
365
+ }
366
+
367
+ # Context
368
+ @instance_context = nil
369
+ @params = {
370
+ 'sid' => sid || @properties['sid'],
371
+ }
372
+ end
373
+
374
+ ##
375
+ # Generate an instance context for the instance, the context is capable of
376
+ # performing various actions. All instance actions are proxied to the context
377
+ # @return [ServiceContext] ServiceContext for this ServiceInstance
378
+ def context
379
+ unless @instance_context
380
+ @instance_context = ServiceContext.new(
381
+ @version,
382
+ @params['sid'],
383
+ )
384
+ end
385
+ @instance_context
386
+ end
387
+
388
+ ##
389
+ # @return [String] A string that uniquely identifies this Service.
390
+ def sid
391
+ @properties['sid']
392
+ end
393
+
394
+ ##
395
+ # @return [String] A human readable description of this resource.
396
+ def friendly_name
397
+ @properties['friendly_name']
398
+ end
399
+
400
+ ##
401
+ # @return [String] Account Sid.
402
+ def account_sid
403
+ @properties['account_sid']
404
+ end
405
+
406
+ ##
407
+ # @return [String] URL Twilio will send callbacks to
408
+ def callback_url
409
+ @properties['callback_url']
410
+ end
411
+
412
+ ##
413
+ # @return [String] Default TTL for a Session, in seconds.
414
+ def default_ttl
415
+ @properties['default_ttl']
416
+ end
417
+
418
+ ##
419
+ # @return [Time] The date this Service was created
420
+ def date_created
421
+ @properties['date_created']
422
+ end
423
+
424
+ ##
425
+ # @return [Time] The date this Service was updated
426
+ def date_updated
427
+ @properties['date_updated']
428
+ end
429
+
430
+ ##
431
+ # @return [String] The URL of this resource.
432
+ def url
433
+ @properties['url']
434
+ end
435
+
436
+ ##
437
+ # @return [String] Nested resource URLs.
438
+ def links
439
+ @properties['links']
440
+ end
441
+
442
+ ##
443
+ # Fetch a ServiceInstance
444
+ # @return [ServiceInstance] Fetched ServiceInstance
445
+ def fetch
446
+ context.fetch
447
+ end
448
+
449
+ ##
450
+ # Deletes the ServiceInstance
451
+ # @return [Boolean] true if delete succeeds, true otherwise
452
+ def delete
453
+ context.delete
454
+ end
455
+
456
+ ##
457
+ # Update the ServiceInstance
458
+ # @param [String] friendly_name A human readable description of this resource, up
459
+ # to 64 characters.
460
+ # @param [String] default_ttl The default Time to Live for a Session, in seconds.
461
+ # @param [String] callback_url The URL Twilio will send callbacks to.
462
+ # @return [ServiceInstance] Updated ServiceInstance
463
+ def update(friendly_name: :unset, default_ttl: :unset, callback_url: :unset)
464
+ context.update(
465
+ friendly_name: friendly_name,
466
+ default_ttl: default_ttl,
467
+ callback_url: callback_url,
468
+ )
469
+ end
470
+
471
+ ##
472
+ # Access the sessions
473
+ # @return [sessions] sessions
474
+ def sessions
475
+ context.sessions
476
+ end
477
+
478
+ ##
479
+ # Access the phone_numbers
480
+ # @return [phone_numbers] phone_numbers
481
+ def phone_numbers
482
+ context.phone_numbers
483
+ end
484
+
485
+ ##
486
+ # Access the short_codes
487
+ # @return [short_codes] short_codes
488
+ def short_codes
489
+ context.short_codes
490
+ end
491
+
492
+ ##
493
+ # Provide a user friendly representation
494
+ def to_s
495
+ values = @params.map{|k, v| "#{k}: #{v}"}.join(" ")
496
+ "<Twilio.Proxy.V1.ServiceInstance #{values}>"
497
+ end
498
+
499
+ ##
500
+ # Provide a detailed, user friendly representation
501
+ def inspect
502
+ values = @properties.map{|k, v| "#{k}: #{v}"}.join(" ")
503
+ "<Twilio.Proxy.V1.ServiceInstance #{values}>"
504
+ end
505
+ end
506
+ end
507
+ end
508
+ end
509
+ end