twilio-ruby 3.11.5 → 5.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.
Files changed (435) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -1
  3. data/.rubocop.yml +21 -0
  4. data/.rubocop_todo.yml +187 -0
  5. data/.travis.yml +10 -10
  6. data/AUTHORS.md +21 -0
  7. data/CHANGES.md +351 -0
  8. data/Gemfile +8 -1
  9. data/{LICENSE → LICENSE.md} +13 -11
  10. data/Makefile +15 -3
  11. data/README.md +90 -95
  12. data/Rakefile +59 -7
  13. data/VERSIONS.md +64 -0
  14. data/examples/examples.rb +62 -49
  15. data/examples/{print-call-log.rb → print_call_log.rb} +7 -7
  16. data/lib/rack/twilio_webhook_authentication.rb +46 -0
  17. data/lib/twilio-ruby/framework/domain.rb +34 -0
  18. data/lib/twilio-ruby/framework/error.rb +30 -0
  19. data/lib/twilio-ruby/framework/helper.rb +9 -0
  20. data/lib/twilio-ruby/framework/page.rb +101 -0
  21. data/lib/twilio-ruby/framework/resource.rb +21 -0
  22. data/lib/twilio-ruby/framework/serialize.rb +70 -0
  23. data/lib/twilio-ruby/framework/twilio_response.rb +15 -0
  24. data/lib/twilio-ruby/framework/values.rb +7 -0
  25. data/lib/twilio-ruby/framework/version.rb +164 -0
  26. data/lib/twilio-ruby/http/http_client.rb +46 -0
  27. data/lib/twilio-ruby/jwt/access_token.rb +232 -0
  28. data/lib/twilio-ruby/jwt/client_capability.rb +102 -0
  29. data/lib/twilio-ruby/jwt/jwt.rb +50 -0
  30. data/lib/twilio-ruby/jwt/task_router.rb +174 -0
  31. data/lib/twilio-ruby/rest/accounts/v1/credential/public_key.rb +370 -0
  32. data/lib/twilio-ruby/rest/accounts/v1/credential.rb +105 -0
  33. data/lib/twilio-ruby/rest/accounts/v1.rb +39 -0
  34. data/lib/twilio-ruby/rest/accounts.rb +36 -9
  35. data/lib/twilio-ruby/rest/api/v2010/account/address/dependent_phone_number.rb +265 -0
  36. data/lib/twilio-ruby/rest/api/v2010/account/address.rb +509 -0
  37. data/lib/twilio-ruby/rest/api/v2010/account/application.rb +620 -0
  38. data/lib/twilio-ruby/rest/api/v2010/account/authorized_connect_app.rb +331 -0
  39. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/local.rb +389 -0
  40. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/mobile.rb +389 -0
  41. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/toll_free.rb +389 -0
  42. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number.rb +370 -0
  43. data/lib/twilio-ruby/rest/api/v2010/account/call/feedback.rb +296 -0
  44. data/lib/twilio-ruby/rest/api/v2010/account/call/feedback_summary.rb +317 -0
  45. data/lib/twilio-ruby/rest/api/v2010/account/call/notification.rb +427 -0
  46. data/lib/twilio-ruby/rest/api/v2010/account/call/recording.rb +379 -0
  47. data/lib/twilio-ruby/rest/api/v2010/account/call.rb +799 -0
  48. data/lib/twilio-ruby/rest/api/v2010/account/conference/participant.rb +515 -0
  49. data/lib/twilio-ruby/rest/api/v2010/account/conference.rb +455 -0
  50. data/lib/twilio-ruby/rest/api/v2010/account/connect_app.rb +413 -0
  51. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/local.rb +445 -0
  52. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/mobile.rb +445 -0
  53. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/toll_free.rb +445 -0
  54. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number.rb +786 -0
  55. data/lib/twilio-ruby/rest/api/v2010/account/key.rb +336 -0
  56. data/lib/twilio-ruby/rest/api/v2010/account/message/feedback.rb +165 -0
  57. data/lib/twilio-ruby/rest/api/v2010/account/message/media.rb +355 -0
  58. data/lib/twilio-ruby/rest/api/v2010/account/message.rb +583 -0
  59. data/lib/twilio-ruby/rest/api/v2010/account/new_key.rb +153 -0
  60. data/lib/twilio-ruby/rest/api/v2010/account/new_signing_key.rb +153 -0
  61. data/lib/twilio-ruby/rest/api/v2010/account/notification.rb +418 -0
  62. data/lib/twilio-ruby/rest/api/v2010/account/outgoing_caller_id.rb +377 -0
  63. data/lib/twilio-ruby/rest/api/v2010/account/queue/member.rb +345 -0
  64. data/lib/twilio-ruby/rest/api/v2010/account/queue.rb +438 -0
  65. data/lib/twilio-ruby/rest/api/v2010/account/recording/add_on_result/payload.rb +378 -0
  66. data/lib/twilio-ruby/rest/api/v2010/account/recording/add_on_result.rb +397 -0
  67. data/lib/twilio-ruby/rest/api/v2010/account/recording/transcription.rb +375 -0
  68. data/lib/twilio-ruby/rest/api/v2010/account/recording.rb +479 -0
  69. data/lib/twilio-ruby/rest/api/v2010/account/short_code.rb +430 -0
  70. data/lib/twilio-ruby/rest/api/v2010/account/signing_key.rb +336 -0
  71. data/lib/twilio-ruby/rest/api/v2010/account/sip/credential_list/credential.rb +395 -0
  72. data/lib/twilio-ruby/rest/api/v2010/account/sip/credential_list.rb +419 -0
  73. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/credential_list_mapping.rb +361 -0
  74. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/ip_access_control_list_mapping.rb +361 -0
  75. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain.rb +570 -0
  76. data/lib/twilio-ruby/rest/api/v2010/account/sip/ip_access_control_list/ip_address.rb +406 -0
  77. data/lib/twilio-ruby/rest/api/v2010/account/sip/ip_access_control_list.rb +424 -0
  78. data/lib/twilio-ruby/rest/api/v2010/account/sip.rb +174 -0
  79. data/lib/twilio-ruby/rest/api/v2010/account/token.rb +168 -0
  80. data/lib/twilio-ruby/rest/api/v2010/account/transcription.rb +366 -0
  81. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/all_time.rb +304 -0
  82. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/daily.rb +304 -0
  83. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/last_month.rb +304 -0
  84. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/monthly.rb +304 -0
  85. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/this_month.rb +304 -0
  86. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/today.rb +304 -0
  87. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/yearly.rb +304 -0
  88. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/yesterday.rb +304 -0
  89. data/lib/twilio-ruby/rest/api/v2010/account/usage/record.rb +418 -0
  90. data/lib/twilio-ruby/rest/api/v2010/account/usage/trigger.rb +507 -0
  91. data/lib/twilio-ruby/rest/api/v2010/account/usage.rb +127 -0
  92. data/lib/twilio-ruby/rest/api/v2010/account/validation_request.rb +161 -0
  93. data/lib/twilio-ruby/rest/api/v2010/account.rb +1098 -0
  94. data/lib/twilio-ruby/rest/api/v2010.rb +147 -0
  95. data/lib/twilio-ruby/rest/api.rb +234 -0
  96. data/lib/twilio-ruby/rest/chat/v1/credential.rb +403 -0
  97. data/lib/twilio-ruby/rest/chat/v1/service/channel/invite.rb +386 -0
  98. data/lib/twilio-ruby/rest/chat/v1/service/channel/member.rb +431 -0
  99. data/lib/twilio-ruby/rest/chat/v1/service/channel/message.rb +447 -0
  100. data/lib/twilio-ruby/rest/chat/v1/service/channel.rb +554 -0
  101. data/lib/twilio-ruby/rest/chat/v1/service/role.rb +396 -0
  102. data/lib/twilio-ruby/rest/chat/v1/service/user/user_channel.rb +244 -0
  103. data/lib/twilio-ruby/rest/chat/v1/service/user.rb +467 -0
  104. data/lib/twilio-ruby/rest/chat/v1/service.rb +935 -0
  105. data/lib/twilio-ruby/rest/chat/v1.rb +56 -0
  106. data/lib/twilio-ruby/rest/chat/v2/credential.rb +403 -0
  107. data/lib/twilio-ruby/rest/chat/v2/service/channel/invite.rb +386 -0
  108. data/lib/twilio-ruby/rest/chat/v2/service/channel/member.rb +431 -0
  109. data/lib/twilio-ruby/rest/chat/v2/service/channel/message.rb +447 -0
  110. data/lib/twilio-ruby/rest/chat/v2/service/channel.rb +554 -0
  111. data/lib/twilio-ruby/rest/chat/v2/service/role.rb +396 -0
  112. data/lib/twilio-ruby/rest/chat/v2/service/user/user_channel.rb +244 -0
  113. data/lib/twilio-ruby/rest/chat/v2/service/user.rb +467 -0
  114. data/lib/twilio-ruby/rest/chat/v2/service.rb +688 -0
  115. data/lib/twilio-ruby/rest/chat/v2.rb +56 -0
  116. data/lib/twilio-ruby/rest/chat.rb +59 -0
  117. data/lib/twilio-ruby/rest/client.rb +307 -215
  118. data/lib/twilio-ruby/rest/ip_messaging/v1/credential.rb +403 -0
  119. data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel/invite.rb +386 -0
  120. data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel/member.rb +431 -0
  121. data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel/message.rb +447 -0
  122. data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel.rb +554 -0
  123. data/lib/twilio-ruby/rest/ip_messaging/v1/service/role.rb +396 -0
  124. data/lib/twilio-ruby/rest/ip_messaging/v1/service/user/user_channel.rb +244 -0
  125. data/lib/twilio-ruby/rest/ip_messaging/v1/service/user.rb +467 -0
  126. data/lib/twilio-ruby/rest/ip_messaging/v1/service.rb +935 -0
  127. data/lib/twilio-ruby/rest/ip_messaging/v1.rb +56 -0
  128. data/lib/twilio-ruby/rest/ip_messaging/v2/credential.rb +403 -0
  129. data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel/invite.rb +386 -0
  130. data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel/member.rb +431 -0
  131. data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel/message.rb +447 -0
  132. data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel.rb +554 -0
  133. data/lib/twilio-ruby/rest/ip_messaging/v2/service/role.rb +396 -0
  134. data/lib/twilio-ruby/rest/ip_messaging/v2/service/user/user_channel.rb +244 -0
  135. data/lib/twilio-ruby/rest/ip_messaging/v2/service/user.rb +467 -0
  136. data/lib/twilio-ruby/rest/ip_messaging/v2/service.rb +688 -0
  137. data/lib/twilio-ruby/rest/ip_messaging/v2.rb +56 -0
  138. data/lib/twilio-ruby/rest/ip_messaging.rb +59 -0
  139. data/lib/twilio-ruby/rest/lookups/v1/phone_number.rb +224 -0
  140. data/lib/twilio-ruby/rest/lookups/v1.rb +41 -0
  141. data/lib/twilio-ruby/rest/lookups.rb +44 -0
  142. data/lib/twilio-ruby/rest/monitor/v1/alert.rb +398 -0
  143. data/lib/twilio-ruby/rest/monitor/v1/event.rb +381 -0
  144. data/lib/twilio-ruby/rest/monitor/v1.rb +56 -0
  145. data/lib/twilio-ruby/rest/monitor.rb +52 -0
  146. data/lib/twilio-ruby/rest/pricing/v1/messaging/country.rb +291 -0
  147. data/lib/twilio-ruby/rest/pricing/v1/messaging.rb +129 -0
  148. data/lib/twilio-ruby/rest/pricing/v1/phone_number/country.rb +284 -0
  149. data/lib/twilio-ruby/rest/pricing/v1/phone_number.rb +129 -0
  150. data/lib/twilio-ruby/rest/pricing/v1/voice/country.rb +291 -0
  151. data/lib/twilio-ruby/rest/pricing/v1/voice/number.rb +208 -0
  152. data/lib/twilio-ruby/rest/pricing/v1/voice.rb +150 -0
  153. data/lib/twilio-ruby/rest/pricing/v1.rb +65 -0
  154. data/lib/twilio-ruby/rest/pricing.rb +54 -0
  155. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/activity.rb +399 -0
  156. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/event.rb +418 -0
  157. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task/reservation.rb +461 -0
  158. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task.rb +584 -0
  159. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_channel.rb +315 -0
  160. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queue_statistics.rb +230 -0
  161. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queues_statistics.rb +243 -0
  162. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue.rb +527 -0
  163. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/reservation.rb +461 -0
  164. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/worker_channel.rb +406 -0
  165. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/worker_statistics.rb +223 -0
  166. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/workers_statistics.rb +226 -0
  167. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker.rb +585 -0
  168. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workflow/workflow_statistics.rb +230 -0
  169. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workflow.rb +475 -0
  170. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workspace_statistics.rb +212 -0
  171. data/lib/twilio-ruby/rest/taskrouter/v1/workspace.rb +712 -0
  172. data/lib/twilio-ruby/rest/taskrouter/v1.rb +41 -0
  173. data/lib/twilio-ruby/rest/taskrouter.rb +44 -0
  174. data/lib/twilio-ruby/rest/trunking/v1/trunk/credential_list.rb +345 -0
  175. data/lib/twilio-ruby/rest/trunking/v1/trunk/ip_access_control_list.rb +345 -0
  176. data/lib/twilio-ruby/rest/trunking/v1/trunk/origination_url.rb +430 -0
  177. data/lib/twilio-ruby/rest/trunking/v1/trunk/phone_number.rb +478 -0
  178. data/lib/twilio-ruby/rest/trunking/v1/trunk.rb +577 -0
  179. data/lib/twilio-ruby/rest/trunking/v1.rb +41 -0
  180. data/lib/twilio-ruby/rest/trunking.rb +44 -0
  181. data/lib/twilio-ruby/rest/video/v1/recording.rb +382 -0
  182. data/lib/twilio-ruby/rest/video/v1/room/recording.rb +381 -0
  183. data/lib/twilio-ruby/rest/video/v1/room.rb +485 -0
  184. data/lib/twilio-ruby/rest/video/v1.rb +56 -0
  185. data/lib/twilio-ruby/rest/video.rb +52 -0
  186. data/lib/twilio-ruby/security/request_validator.rb +54 -0
  187. data/lib/twilio-ruby/twiml/messaging_response.rb +141 -0
  188. data/lib/twilio-ruby/twiml/twiml.rb +69 -0
  189. data/lib/twilio-ruby/twiml/voice_response.rb +916 -0
  190. data/lib/twilio-ruby/util/configuration.rb +7 -0
  191. data/lib/twilio-ruby/util.rb +1 -1
  192. data/lib/twilio-ruby/version.rb +1 -1
  193. data/lib/twilio-ruby.rb +52 -49
  194. data/spec/framework/serialize_spec.rb +59 -0
  195. data/spec/holodeck/holodeck.rb +61 -0
  196. data/spec/holodeck/hologram.rb +4 -0
  197. data/spec/integration/accounts/v1/credential/public_key_spec.rb +226 -0
  198. data/spec/integration/accounts/v1/credential_spec.rb +10 -0
  199. data/spec/integration/api/v2010/account/address/dependent_phone_number_spec.rb +90 -0
  200. data/spec/integration/api/v2010/account/address_spec.rb +267 -0
  201. data/spec/integration/api/v2010/account/application_spec.rb +286 -0
  202. data/spec/integration/api/v2010/account/authorized_connect_app_spec.rb +137 -0
  203. data/spec/integration/api/v2010/account/available_phone_number/local_spec.rb +101 -0
  204. data/spec/integration/api/v2010/account/available_phone_number/mobile_spec.rb +100 -0
  205. data/spec/integration/api/v2010/account/available_phone_number/toll_free_spec.rb +100 -0
  206. data/spec/integration/api/v2010/account/available_phone_number_spec.rb +128 -0
  207. data/spec/integration/api/v2010/account/call/feedback_spec.rb +141 -0
  208. data/spec/integration/api/v2010/account/call/feedback_summary_spec.rb +149 -0
  209. data/spec/integration/api/v2010/account/call/notification_spec.rb +179 -0
  210. data/spec/integration/api/v2010/account/call/recording_spec.rb +178 -0
  211. data/spec/integration/api/v2010/account/call_spec.rb +319 -0
  212. data/spec/integration/api/v2010/account/conference/participant_spec.rb +283 -0
  213. data/spec/integration/api/v2010/account/conference_spec.rb +174 -0
  214. data/spec/integration/api/v2010/account/connect_app_spec.rb +177 -0
  215. data/spec/integration/api/v2010/account/incoming_phone_number/local_spec.rb +181 -0
  216. data/spec/integration/api/v2010/account/incoming_phone_number/mobile_spec.rb +181 -0
  217. data/spec/integration/api/v2010/account/incoming_phone_number/toll_free_spec.rb +181 -0
  218. data/spec/integration/api/v2010/account/incoming_phone_number_spec.rb +331 -0
  219. data/spec/integration/api/v2010/account/key_spec.rb +178 -0
  220. data/spec/integration/api/v2010/account/message/feedback_spec.rb +48 -0
  221. data/spec/integration/api/v2010/account/message/media_spec.rb +162 -0
  222. data/spec/integration/api/v2010/account/message_spec.rb +297 -0
  223. data/spec/integration/api/v2010/account/new_key_spec.rb +45 -0
  224. data/spec/integration/api/v2010/account/new_signing_key_spec.rb +45 -0
  225. data/spec/integration/api/v2010/account/notification_spec.rb +172 -0
  226. data/spec/integration/api/v2010/account/outgoing_caller_id_spec.rb +193 -0
  227. data/spec/integration/api/v2010/account/queue/member_spec.rb +170 -0
  228. data/spec/integration/api/v2010/account/queue_spec.rb +242 -0
  229. data/spec/integration/api/v2010/account/recording/add_on_result/payload_spec.rb +175 -0
  230. data/spec/integration/api/v2010/account/recording/add_on_result_spec.rb +166 -0
  231. data/spec/integration/api/v2010/account/recording/transcription_spec.rb +174 -0
  232. data/spec/integration/api/v2010/account/recording_spec.rb +179 -0
  233. data/spec/integration/api/v2010/account/short_code_spec.rb +180 -0
  234. data/spec/integration/api/v2010/account/signing_key_spec.rb +178 -0
  235. data/spec/integration/api/v2010/account/sip/credential_list/credential_spec.rb +257 -0
  236. data/spec/integration/api/v2010/account/sip/credential_list_spec.rb +246 -0
  237. data/spec/integration/api/v2010/account/sip/domain/credential_list_mapping_spec.rb +210 -0
  238. data/spec/integration/api/v2010/account/sip/domain/ip_access_control_list_mapping_spec.rb +220 -0
  239. data/spec/integration/api/v2010/account/sip/domain_spec.rb +283 -0
  240. data/spec/integration/api/v2010/account/sip/ip_access_control_list/ip_address_spec.rb +261 -0
  241. data/spec/integration/api/v2010/account/sip/ip_access_control_list_spec.rb +256 -0
  242. data/spec/integration/api/v2010/account/sip_spec.rb +10 -0
  243. data/spec/integration/api/v2010/account/token_spec.rb +56 -0
  244. data/spec/integration/api/v2010/account/transcription_spec.rb +167 -0
  245. data/spec/integration/api/v2010/account/usage/record/all_time_spec.rb +111 -0
  246. data/spec/integration/api/v2010/account/usage/record/daily_spec.rb +111 -0
  247. data/spec/integration/api/v2010/account/usage/record/last_month_spec.rb +111 -0
  248. data/spec/integration/api/v2010/account/usage/record/monthly_spec.rb +111 -0
  249. data/spec/integration/api/v2010/account/usage/record/this_month_spec.rb +111 -0
  250. data/spec/integration/api/v2010/account/usage/record/today_spec.rb +111 -0
  251. data/spec/integration/api/v2010/account/usage/record/yearly_spec.rb +111 -0
  252. data/spec/integration/api/v2010/account/usage/record/yesterday_spec.rb +111 -0
  253. data/spec/integration/api/v2010/account/usage/record_spec.rb +108 -0
  254. data/spec/integration/api/v2010/account/usage/trigger_spec.rb +283 -0
  255. data/spec/integration/api/v2010/account/usage_spec.rb +10 -0
  256. data/spec/integration/api/v2010/account/validation_request_spec.rb +48 -0
  257. data/spec/integration/api/v2010/account_spec.rb +254 -0
  258. data/spec/integration/chat/v1/credential_spec.rb +223 -0
  259. data/spec/integration/chat/v1/service/channel/invite_spec.rb +210 -0
  260. data/spec/integration/chat/v1/service/channel/member_spec.rb +284 -0
  261. data/spec/integration/chat/v1/service/channel/message_spec.rb +294 -0
  262. data/spec/integration/chat/v1/service/channel_spec.rb +275 -0
  263. data/spec/integration/chat/v1/service/role_spec.rb +263 -0
  264. data/spec/integration/chat/v1/service/user/user_channel_spec.rb +92 -0
  265. data/spec/integration/chat/v1/service/user_spec.rb +266 -0
  266. data/spec/integration/chat/v1/service_spec.rb +299 -0
  267. data/spec/integration/chat/v2/credential_spec.rb +223 -0
  268. data/spec/integration/chat/v2/service/channel/invite_spec.rb +210 -0
  269. data/spec/integration/chat/v2/service/channel/member_spec.rb +284 -0
  270. data/spec/integration/chat/v2/service/channel/message_spec.rb +294 -0
  271. data/spec/integration/chat/v2/service/channel_spec.rb +275 -0
  272. data/spec/integration/chat/v2/service/role_spec.rb +263 -0
  273. data/spec/integration/chat/v2/service/user/user_channel_spec.rb +92 -0
  274. data/spec/integration/chat/v2/service/user_spec.rb +266 -0
  275. data/spec/integration/chat/v2/service_spec.rb +325 -0
  276. data/spec/integration/ip_messaging/v1/credential_spec.rb +223 -0
  277. data/spec/integration/ip_messaging/v1/service/channel/invite_spec.rb +210 -0
  278. data/spec/integration/ip_messaging/v1/service/channel/member_spec.rb +284 -0
  279. data/spec/integration/ip_messaging/v1/service/channel/message_spec.rb +294 -0
  280. data/spec/integration/ip_messaging/v1/service/channel_spec.rb +275 -0
  281. data/spec/integration/ip_messaging/v1/service/role_spec.rb +263 -0
  282. data/spec/integration/ip_messaging/v1/service/user/user_channel_spec.rb +92 -0
  283. data/spec/integration/ip_messaging/v1/service/user_spec.rb +266 -0
  284. data/spec/integration/ip_messaging/v1/service_spec.rb +299 -0
  285. data/spec/integration/ip_messaging/v2/credential_spec.rb +223 -0
  286. data/spec/integration/ip_messaging/v2/service/channel/invite_spec.rb +210 -0
  287. data/spec/integration/ip_messaging/v2/service/channel/member_spec.rb +284 -0
  288. data/spec/integration/ip_messaging/v2/service/channel/message_spec.rb +294 -0
  289. data/spec/integration/ip_messaging/v2/service/channel_spec.rb +275 -0
  290. data/spec/integration/ip_messaging/v2/service/role_spec.rb +263 -0
  291. data/spec/integration/ip_messaging/v2/service/user/user_channel_spec.rb +92 -0
  292. data/spec/integration/ip_messaging/v2/service/user_spec.rb +266 -0
  293. data/spec/integration/ip_messaging/v2/service_spec.rb +325 -0
  294. data/spec/integration/lookups/v1/phone_number_spec.rb +60 -0
  295. data/spec/integration/monitor/v1/alert_spec.rb +161 -0
  296. data/spec/integration/monitor/v1/event_spec.rb +148 -0
  297. data/spec/integration/pricing/v1/messaging/country_spec.rb +137 -0
  298. data/spec/integration/pricing/v1/messaging_spec.rb +10 -0
  299. data/spec/integration/pricing/v1/phone_number/country_spec.rb +128 -0
  300. data/spec/integration/pricing/v1/phone_number_spec.rb +10 -0
  301. data/spec/integration/pricing/v1/voice/country_spec.rb +266 -0
  302. data/spec/integration/pricing/v1/voice/number_spec.rb +54 -0
  303. data/spec/integration/pricing/v1/voice_spec.rb +10 -0
  304. data/spec/integration/taskrouter/v1/workspace/activity_spec.rb +236 -0
  305. data/spec/integration/taskrouter/v1/workspace/event_spec.rb +157 -0
  306. data/spec/integration/taskrouter/v1/workspace/task/reservation_spec.rb +192 -0
  307. data/spec/integration/taskrouter/v1/workspace/task_channel_spec.rb +127 -0
  308. data/spec/integration/taskrouter/v1/workspace/task_queue/task_queue_statistics_spec.rb +106 -0
  309. data/spec/integration/taskrouter/v1/workspace/task_queue/task_queues_statistics_spec.rb +144 -0
  310. data/spec/integration/taskrouter/v1/workspace/task_queue_spec.rb +292 -0
  311. data/spec/integration/taskrouter/v1/workspace/task_spec.rb +324 -0
  312. data/spec/integration/taskrouter/v1/workspace/worker/reservation_spec.rb +192 -0
  313. data/spec/integration/taskrouter/v1/workspace/worker/worker_channel_spec.rb +201 -0
  314. data/spec/integration/taskrouter/v1/workspace/worker/worker_statistics_spec.rb +107 -0
  315. data/spec/integration/taskrouter/v1/workspace/worker/workers_statistics_spec.rb +141 -0
  316. data/spec/integration/taskrouter/v1/workspace/worker_spec.rb +282 -0
  317. data/spec/integration/taskrouter/v1/workspace/workflow/workflow_statistics_spec.rb +69 -0
  318. data/spec/integration/taskrouter/v1/workspace/workflow_spec.rb +265 -0
  319. data/spec/integration/taskrouter/v1/workspace/workspace_statistics_spec.rb +103 -0
  320. data/spec/integration/taskrouter/v1/workspace_spec.rb +287 -0
  321. data/spec/integration/trunking/v1/trunk/credential_list_spec.rb +192 -0
  322. data/spec/integration/trunking/v1/trunk/ip_access_control_list_spec.rb +192 -0
  323. data/spec/integration/trunking/v1/trunk/origination_url_spec.rb +250 -0
  324. data/spec/integration/trunking/v1/trunk/phone_number_spec.rb +267 -0
  325. data/spec/integration/trunking/v1/trunk_spec.rb +276 -0
  326. data/spec/integration/video/v1/recording_spec.rb +165 -0
  327. data/spec/integration/video/v1/room/recording_spec.rb +146 -0
  328. data/spec/integration/video/v1/room_spec.rb +237 -0
  329. data/spec/jwt/access_token_spec.rb +130 -0
  330. data/spec/jwt/client_capability_spec.rb +104 -0
  331. data/spec/jwt/task_router_spec.rb +172 -0
  332. data/spec/rack/twilio_webhook_authentication_spec.rb +106 -0
  333. data/spec/security/request_validator_spec.rb +113 -0
  334. data/spec/spec_helper.rb +29 -3
  335. data/spec/support/fakeweb.rb +2 -0
  336. data/spec/twilio_spec.rb +15 -0
  337. data/spec/twiml/messaging_response_spec.rb +90 -0
  338. data/spec/twiml/voice_response_spec.rb +474 -0
  339. data/spec/util/configuration_spec.rb +15 -0
  340. data/spec/util/url_encode_spec.rb +2 -2
  341. data/twilio-ruby.gemspec +32 -26
  342. metadata +502 -152
  343. data/CHANGES +0 -47
  344. data/docs/Makefile +0 -130
  345. data/docs/_themes/LICENSE +0 -45
  346. data/docs/_themes/README.rst +0 -25
  347. data/docs/_themes/flask_theme_support.py +0 -86
  348. data/docs/_themes/kr/layout.html +0 -32
  349. data/docs/_themes/kr/relations.html +0 -19
  350. data/docs/_themes/kr/static/flasky.css_t +0 -469
  351. data/docs/_themes/kr/static/small_flask.css +0 -70
  352. data/docs/_themes/kr/theme.conf +0 -7
  353. data/docs/_themes/kr_small/layout.html +0 -22
  354. data/docs/_themes/kr_small/static/flasky.css_t +0 -287
  355. data/docs/_themes/kr_small/theme.conf +0 -10
  356. data/docs/changelog.rst +0 -1
  357. data/docs/conf.py +0 -266
  358. data/docs/faq.rst +0 -42
  359. data/docs/getting-started.rst +0 -91
  360. data/docs/index.rst +0 -109
  361. data/docs/make.bat +0 -170
  362. data/docs/src/pip-delete-this-directory.txt +0 -5
  363. data/docs/usage/accounts.rst +0 -89
  364. data/docs/usage/applications.rst +0 -108
  365. data/docs/usage/basics.rst +0 -102
  366. data/docs/usage/caller-ids.rst +0 -45
  367. data/docs/usage/conferences.rst +0 -108
  368. data/docs/usage/errors.rst +0 -29
  369. data/docs/usage/messages.rst +0 -109
  370. data/docs/usage/notifications.rst +0 -70
  371. data/docs/usage/phone-calls.rst +0 -166
  372. data/docs/usage/phone-numbers.rst +0 -174
  373. data/docs/usage/queues.rst +0 -112
  374. data/docs/usage/recordings.rst +0 -96
  375. data/docs/usage/sip.rst +0 -103
  376. data/docs/usage/token-generation.rst +0 -81
  377. data/docs/usage/transcriptions.rst +0 -31
  378. data/docs/usage/twiml.rst +0 -69
  379. data/docs/usage/validation.rst +0 -71
  380. data/lib/twilio-ruby/rest/applications.rb +0 -6
  381. data/lib/twilio-ruby/rest/authorized_connect_apps.rb +0 -6
  382. data/lib/twilio-ruby/rest/available_phone_numbers/country.rb +0 -10
  383. data/lib/twilio-ruby/rest/available_phone_numbers/local.rb +0 -11
  384. data/lib/twilio-ruby/rest/available_phone_numbers/mobile.rb +0 -11
  385. data/lib/twilio-ruby/rest/available_phone_numbers/toll_free.rb +0 -11
  386. data/lib/twilio-ruby/rest/available_phone_numbers.rb +0 -13
  387. data/lib/twilio-ruby/rest/calls.rb +0 -28
  388. data/lib/twilio-ruby/rest/conferences/participants.rb +0 -23
  389. data/lib/twilio-ruby/rest/conferences.rb +0 -12
  390. data/lib/twilio-ruby/rest/connect_apps.rb +0 -6
  391. data/lib/twilio-ruby/rest/errors.rb +0 -14
  392. data/lib/twilio-ruby/rest/incoming_phone_numbers/local.rb +0 -13
  393. data/lib/twilio-ruby/rest/incoming_phone_numbers/mobile.rb +0 -13
  394. data/lib/twilio-ruby/rest/incoming_phone_numbers/toll_free.rb +0 -13
  395. data/lib/twilio-ruby/rest/incoming_phone_numbers.rb +0 -17
  396. data/lib/twilio-ruby/rest/instance_resource.rb +0 -101
  397. data/lib/twilio-ruby/rest/list_resource.rb +0 -110
  398. data/lib/twilio-ruby/rest/media.rb +0 -14
  399. data/lib/twilio-ruby/rest/messages.rb +0 -17
  400. data/lib/twilio-ruby/rest/notifications.rb +0 -6
  401. data/lib/twilio-ruby/rest/outgoing_caller_ids.rb +0 -25
  402. data/lib/twilio-ruby/rest/queues/members.rb +0 -29
  403. data/lib/twilio-ruby/rest/queues.rb +0 -12
  404. data/lib/twilio-ruby/rest/recordings.rb +0 -35
  405. data/lib/twilio-ruby/rest/sandbox.rb +0 -5
  406. data/lib/twilio-ruby/rest/sip/credential_lists/credentials.rb +0 -6
  407. data/lib/twilio-ruby/rest/sip/credential_lists.rb +0 -11
  408. data/lib/twilio-ruby/rest/sip/domains/credential_list_mappings.rb +0 -6
  409. data/lib/twilio-ruby/rest/sip/domains/ip_access_control_list_mappings.rb +0 -6
  410. data/lib/twilio-ruby/rest/sip/domains.rb +0 -12
  411. data/lib/twilio-ruby/rest/sip/ip_access_control_lists/ip_addresses.rb +0 -6
  412. data/lib/twilio-ruby/rest/sip/ip_access_control_lists.rb +0 -11
  413. data/lib/twilio-ruby/rest/sip.rb +0 -12
  414. data/lib/twilio-ruby/rest/sms/messages.rb +0 -15
  415. data/lib/twilio-ruby/rest/sms/short_codes.rb +0 -8
  416. data/lib/twilio-ruby/rest/sms.rb +0 -11
  417. data/lib/twilio-ruby/rest/transcriptions.rb +0 -6
  418. data/lib/twilio-ruby/rest/usage/records.rb +0 -21
  419. data/lib/twilio-ruby/rest/usage/triggers.rb +0 -12
  420. data/lib/twilio-ruby/rest/usage.rb +0 -10
  421. data/lib/twilio-ruby/rest/utils.rb +0 -25
  422. data/lib/twilio-ruby/twiml/response.rb +0 -15
  423. data/lib/twilio-ruby/util/capability.rb +0 -61
  424. data/lib/twilio-ruby/util/request_validator.rb +0 -22
  425. data/spec/rest/account_spec.rb +0 -58
  426. data/spec/rest/call_spec.rb +0 -18
  427. data/spec/rest/client_spec.rb +0 -100
  428. data/spec/rest/conference_spec.rb +0 -9
  429. data/spec/rest/instance_resource_spec.rb +0 -15
  430. data/spec/rest/message_spec.rb +0 -12
  431. data/spec/rest/numbers_spec.rb +0 -46
  432. data/spec/rest/queue_spec.rb +0 -9
  433. data/spec/rest/recording_spec.rb +0 -9
  434. data/spec/util/capability_spec.rb +0 -137
  435. data/spec/util/request_validator_spec.rb +0 -65
@@ -0,0 +1,474 @@
1
+ require 'spec_helper'
2
+
3
+ describe Twilio::TwiML::VoiceResponse do
4
+ context 'Testing Response' do
5
+ it 'should allow empty response' do
6
+ r = Twilio::TwiML::VoiceResponse.new
7
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response/>')
8
+ end
9
+
10
+ it 'should allow populated response' do
11
+ r = Twilio::TwiML::VoiceResponse.new
12
+ r.hangup
13
+ r.leave
14
+ r.sms('twilio sms', to: '+11234567890', from: '+10987654321')
15
+
16
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Hangup/><Leave/><Sms from="+10987654321" to="+11234567890">twilio sms</Sms></Response>')
17
+ end
18
+
19
+ it 'should allow chaining' do
20
+ r = Twilio::TwiML::VoiceResponse.new.hangup.leave.sms(
21
+ 'twilio sms',
22
+ to: '+11234567890',
23
+ from: '+10987654321'
24
+ )
25
+
26
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Hangup/><Leave/><Sms from="+10987654321" to="+11234567890">twilio sms</Sms></Response>')
27
+ end
28
+
29
+ it 'should allow nesting' do
30
+ response = Twilio::TwiML::VoiceResponse.new do |r|
31
+ r.hangup
32
+ r.leave
33
+ r.sms('twilio sms', to: '+11234567890', from: '+10987654321')
34
+ end
35
+ expect(response.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Hangup/><Leave/><Sms from="+10987654321" to="+11234567890">twilio sms</Sms></Response>')
36
+ end
37
+ end
38
+
39
+ context 'Testing Say' do
40
+ it 'should allow empty say' do
41
+ r = Twilio::TwiML::VoiceResponse.new
42
+ r.say ''
43
+
44
+ # For Ruby 2.0, 2.1, 2.2 both opening and closing tags are generated
45
+ # Ruby 2.4 generates an empty tag
46
+ expect(r.to_s)
47
+ .to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Say></Say></Response>')
48
+ .or(eq('<?xml version="1.0" encoding="UTF-8"?><Response><Say/></Response>'))
49
+ end
50
+
51
+ it 'should allow populated say' do
52
+ r = Twilio::TwiML::VoiceResponse.new
53
+ r.say 'Hello World'
54
+
55
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Say>Hello World</Say></Response>')
56
+ end
57
+
58
+ it 'should allow unicode say' do
59
+ r = Twilio::TwiML::VoiceResponse.new
60
+ r.say 'nécessaire et d\'autres'
61
+
62
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Say>nécessaire et d\'autres</Say></Response>')
63
+ end
64
+
65
+ it 'should allow looping' do
66
+ r = Twilio::TwiML::VoiceResponse.new
67
+ r.say 'Hello Monkey', loop: 3
68
+
69
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Say loop="3">Hello Monkey</Say></Response>')
70
+ end
71
+
72
+ it 'should allow languages' do
73
+ r = Twilio::TwiML::VoiceResponse.new
74
+ r.say 'Hello Monkey', language: 'en-gb'
75
+
76
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Say language="en-gb">Hello Monkey</Say></Response>')
77
+ end
78
+
79
+ it 'should allow all attributes' do
80
+ r = Twilio::TwiML::VoiceResponse.new
81
+ r.say 'Hello Monkey', loop: 3, voice: 'man', language: 'fr'
82
+
83
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Say language="fr" loop="3" voice="man">Hello Monkey</Say></Response>')
84
+ end
85
+ end
86
+
87
+ context 'Testing Play' do
88
+ it 'should allow empty play' do
89
+ r = Twilio::TwiML::VoiceResponse.new
90
+ r.play
91
+
92
+ # For Ruby 2.0, 2.1, 2.2 both opening and closing tags are generated
93
+ # Ruby 2.4 generates an empty tag
94
+ expect(r.to_s)
95
+ .to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Play></Play></Response>')
96
+ .or(eq('<?xml version="1.0" encoding="UTF-8"?><Response><Play/></Response>'))
97
+ end
98
+
99
+ it 'should play hello' do
100
+ r = Twilio::TwiML::VoiceResponse.new
101
+ r.play(url: 'http://hellomonkey.mp3')
102
+
103
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Play>http://hellomonkey.mp3</Play></Response>')
104
+ end
105
+
106
+ it 'should play hello on loop' do
107
+ r = Twilio::TwiML::VoiceResponse.new
108
+ r.play(url: 'http://hellomonkey.mp3', loop: 3)
109
+
110
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Play loop="3">http://hellomonkey.mp3</Play></Response>')
111
+ end
112
+
113
+ it 'should play digits' do
114
+ r = Twilio::TwiML::VoiceResponse.new
115
+ r.play(digits: 'w123')
116
+
117
+ # For Ruby 2.0, 2.1, 2.2 both opening and closing tags are generated
118
+ # Ruby 2.4 generates an empty tag
119
+ expect(r.to_s)
120
+ .to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Play digits="w123"></Play></Response>')
121
+ .or(eq('<?xml version="1.0" encoding="UTF-8"?><Response><Play digits="w123"/></Response>'))
122
+ end
123
+ end
124
+
125
+ context 'Testing Record' do
126
+ it 'should allow empty record' do
127
+ r = Twilio::TwiML::VoiceResponse.new
128
+ r.record
129
+
130
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Record/></Response>')
131
+ end
132
+
133
+ it 'should allow action and method' do
134
+ r = Twilio::TwiML::VoiceResponse.new
135
+ r.record(action: 'example.com', method: 'GET')
136
+
137
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Record action="example.com" method="GET"/></Response>')
138
+ end
139
+
140
+ it 'should allow max_length, finish_on_key, and timeout' do
141
+ r = Twilio::TwiML::VoiceResponse.new
142
+ r.record(timeout: 4, finish_on_key: '#', max_length: 30)
143
+
144
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Record finishOnKey="#" maxLength="30" timeout="4"/></Response>')
145
+ end
146
+
147
+ it 'should allow transcribe' do
148
+ r = Twilio::TwiML::VoiceResponse.new
149
+ r.record(transcribe_callback: 'example.com')
150
+
151
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Record transcribeCallback="example.com"/></Response>')
152
+ end
153
+ end
154
+
155
+ context 'Testing Redirect' do
156
+ it 'should allow empty redirect' do
157
+ r = Twilio::TwiML::VoiceResponse.new
158
+ r.redirect ''
159
+
160
+ # For Ruby 2.0, 2.1, 2.2 both opening and closing tags are generated
161
+ # Ruby 2.4 generates an empty tag
162
+ expect(r.to_s)
163
+ .to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Redirect></Redirect></Response>')
164
+ .or(eq('<?xml version="1.0" encoding="UTF-8"?><Response><Redirect/></Response>'))
165
+ end
166
+
167
+ it 'should allow method' do
168
+ r = Twilio::TwiML::VoiceResponse.new
169
+ r.redirect('example.com', method: 'POST')
170
+
171
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Redirect method="POST">example.com</Redirect></Response>')
172
+ end
173
+
174
+ it 'should allow method and params' do
175
+ r = Twilio::TwiML::VoiceResponse.new
176
+ r.redirect('example.com?id=34&action=hey', method: 'POST')
177
+
178
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Redirect method="POST">example.com?id=34&amp;action=hey</Redirect></Response>')
179
+ end
180
+ end
181
+
182
+ context 'Testing Hangup' do
183
+ it 'should allow hangup' do
184
+ r = Twilio::TwiML::VoiceResponse.new
185
+ r.hangup
186
+
187
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Hangup/></Response>')
188
+ end
189
+ end
190
+
191
+ context 'Testing Leave' do
192
+ it 'should allow leave' do
193
+ r = Twilio::TwiML::VoiceResponse.new
194
+ r.leave
195
+
196
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Leave/></Response>')
197
+ end
198
+ end
199
+
200
+ context 'Testing Reject' do
201
+ it 'should reject with a default reason' do
202
+ r = Twilio::TwiML::VoiceResponse.new
203
+ r.reject
204
+
205
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Reject/></Response>')
206
+ end
207
+ end
208
+
209
+ context 'Testing SMS' do
210
+ it 'should allow empty SMS' do
211
+ r = Twilio::TwiML::VoiceResponse.new
212
+ r.sms ''
213
+
214
+ # For Ruby 2.0, 2.1, 2.2 both opening and closing tags are generated
215
+ # Ruby 2.4 generates an empty tag
216
+ expect(r.to_s)
217
+ .to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Sms></Sms></Response>')
218
+ .or(eq('<?xml version="1.0" encoding="UTF-8"?><Response><Sms/></Response>'))
219
+ end
220
+
221
+ it 'should allow SMS body' do
222
+ r = Twilio::TwiML::VoiceResponse.new
223
+ r.sms 'Hello, World'
224
+
225
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Sms>Hello, World</Sms></Response>')
226
+ end
227
+
228
+ it 'should allow to, from, action, and status_callback' do
229
+ r = Twilio::TwiML::VoiceResponse.new
230
+ r.sms('Hello, World', to: 1_231_231_234, from: 3_453_453_456, status_callback: 'example.com?id=34&action=hey')
231
+
232
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Sms from="3453453456" statusCallback="example.com?id=34&amp;action=hey" to="1231231234">Hello, World</Sms></Response>')
233
+ end
234
+
235
+ it 'should allow action and method' do
236
+ r = Twilio::TwiML::VoiceResponse.new
237
+ r.sms('Hello', method: 'POST', action: 'example.com?id=34&action=hey')
238
+
239
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Sms action="example.com?id=34&amp;action=hey" method="POST">Hello</Sms></Response>')
240
+ end
241
+ end
242
+
243
+ context 'Testing Conference' do
244
+ it 'should allow basic conferencing' do
245
+ d = Twilio::TwiML::Dial.new
246
+ d.conference(
247
+ 'TestConferenceAttributes',
248
+ beep: false,
249
+ wait_url: '',
250
+ start_conference_on_enter: true,
251
+ end_conference_on_exit: true
252
+ )
253
+
254
+ r = Twilio::TwiML::VoiceResponse.new
255
+ r.append(d)
256
+
257
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Conference beep="false" endConferenceOnExit="true" startConferenceOnEnter="true" waitUrl="">TestConferenceAttributes</Conference></Dial></Response>')
258
+ end
259
+
260
+ it 'should allow muted conferencing' do
261
+ d = Twilio::TwiML::Dial.new
262
+ d.conference(
263
+ 'TestConferenceMutedAttribute',
264
+ beep: false,
265
+ muted: true,
266
+ wait_url: '',
267
+ start_conference_on_enter: true,
268
+ end_conference_on_exit: true
269
+ )
270
+
271
+ r = Twilio::TwiML::VoiceResponse.new
272
+ r.append(d)
273
+
274
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Conference beep="false" endConferenceOnExit="true" muted="true" startConferenceOnEnter="true" waitUrl="">TestConferenceMutedAttribute</Conference></Dial></Response>')
275
+ end
276
+ end
277
+
278
+ context 'Testing Queue' do
279
+ it 'should allow queues in VoiceResponse' do
280
+ d = Twilio::TwiML::Dial.new
281
+ d.queue('TestQueueAttribute', url: '', method: 'GET')
282
+
283
+ r = Twilio::TwiML::VoiceResponse.new
284
+ r.append(d)
285
+
286
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Queue method="GET" url="">TestQueueAttribute</Queue></Dial></Response>')
287
+ end
288
+ end
289
+
290
+ context 'Testing Echo' do
291
+ it 'should allow VoiceResponse Echo' do
292
+ r = Twilio::TwiML::VoiceResponse.new
293
+ r.echo
294
+
295
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Echo/></Response>')
296
+ end
297
+ end
298
+
299
+ context 'Testing Enqueue' do
300
+ it 'should allow VoiceResponse.enqueue' do
301
+ r = Twilio::TwiML::VoiceResponse.new
302
+ r.enqueue(
303
+ 'TestEnqueueAttribute',
304
+ action: 'act',
305
+ method: 'GET',
306
+ wait_url: 'wait',
307
+ wait_url_method: 'POST'
308
+ )
309
+
310
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Enqueue action="act" method="GET" waitUrl="wait" waitUrlMethod="POST">TestEnqueueAttribute</Enqueue></Response>')
311
+ end
312
+
313
+ it 'should allow Enqueue.task and appending Enqueue' do
314
+ e = Twilio::TwiML::Enqueue.new(nil, workflow_sid: '123123123')
315
+ e.task('{"account_sid": "AC123123123"}')
316
+
317
+ r = Twilio::TwiML::VoiceResponse.new
318
+ r.append(e)
319
+
320
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Enqueue workflowSid="123123123"><Task>{"account_sid": "AC123123123"}</Task></Enqueue></Response>')
321
+ end
322
+
323
+ it 'should allow Enqueue.task with a dictionary and appending Enqueue' do
324
+ e = Twilio::TwiML::Enqueue.new(nil, workflow_sid: '123123123')
325
+ e.task({ account_sid: 'AC123123123' })
326
+
327
+ r = Twilio::TwiML::VoiceResponse.new
328
+ r.append(e)
329
+
330
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Enqueue workflowSid="123123123"><Task>{"account_sid":"AC123123123"}</Task></Enqueue></Response>')
331
+ end
332
+ end
333
+
334
+ context 'Testing Dial' do
335
+ it 'should allow VoiceResponse.dial' do
336
+ r = Twilio::TwiML::VoiceResponse.new
337
+ r.dial(number: '1231231234')
338
+
339
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial>1231231234</Dial></Response>')
340
+ end
341
+
342
+ it 'should allow Dial.sim' do
343
+ d = Twilio::TwiML::Dial.new
344
+ d.sim '123123123'
345
+
346
+ r = Twilio::TwiML::VoiceResponse.new
347
+ r.append(d)
348
+
349
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Sim>123123123</Sim></Dial></Response>')
350
+ end
351
+
352
+ it 'should allow Dial.sip' do
353
+ d = Twilio::TwiML::Dial.new
354
+ d.sip 'foo@example.com'
355
+
356
+ r = Twilio::TwiML::VoiceResponse.new
357
+ r.append(d)
358
+
359
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Sip>foo@example.com</Sip></Dial></Response>')
360
+ end
361
+
362
+ it 'should allow Dial.sip with username, password' do
363
+ d = Twilio::TwiML::Dial.new
364
+ d.sip('foo@example.com', username: 'foo', password: 'bar')
365
+
366
+ r = Twilio::TwiML::VoiceResponse.new
367
+ r.append(d)
368
+
369
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Sip password="bar" username="foo">foo@example.com</Sip></Dial></Response>')
370
+ end
371
+
372
+ it 'should allow Dial.number' do
373
+ d = Twilio::TwiML::Dial.new
374
+ d.number '1231231234'
375
+
376
+ r = Twilio::TwiML::VoiceResponse.new
377
+ r.append(d)
378
+
379
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Number>1231231234</Number></Dial></Response>')
380
+ end
381
+
382
+ it 'should allow Dial.number with params' do
383
+ d = Twilio::TwiML::Dial.new
384
+ d.number('1231231234', status_callback: 'http://example.com', status_callback_event: 'initiated completed')
385
+
386
+ r = Twilio::TwiML::VoiceResponse.new
387
+ r.append(d)
388
+
389
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Number statusCallback="http://example.com" statusCallbackEvent="initiated completed">1231231234</Number></Dial></Response>')
390
+ end
391
+
392
+ it 'should allow Dial.conference' do
393
+ d = Twilio::TwiML::Dial.new
394
+ d.conference 'My Room'
395
+
396
+ r = Twilio::TwiML::VoiceResponse.new
397
+ r.append(d)
398
+
399
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Conference>My Room</Conference></Dial></Response>')
400
+ end
401
+
402
+ it 'should allow Dial.queue' do
403
+ d = Twilio::TwiML::Dial.new
404
+ d.queue 'The Cute Queue'
405
+
406
+ r = Twilio::TwiML::VoiceResponse.new
407
+ r.append(d)
408
+
409
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Queue>The Cute Queue</Queue></Dial></Response>')
410
+ end
411
+
412
+ it 'should allow empty Dial.client' do
413
+ d = Twilio::TwiML::Dial.new
414
+ d.client ''
415
+
416
+ r = Twilio::TwiML::VoiceResponse.new
417
+ r.append(d)
418
+
419
+ # For Ruby 2.0, 2.1, 2.2 both opening and closing tags are generated
420
+ # Ruby 2.4 generates an empty tag
421
+ expect(r.to_s)
422
+ .to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Client></Client></Dial></Response>')
423
+ .or(eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Client/></Dial></Response>'))
424
+ end
425
+
426
+ it 'should allow populated Dial.client' do
427
+ d = Twilio::TwiML::Dial.new
428
+ d.client 'alice'
429
+
430
+ r = Twilio::TwiML::VoiceResponse.new
431
+ r.append(d)
432
+
433
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Client>alice</Client></Dial></Response>')
434
+ end
435
+ end
436
+
437
+ context 'Testing Gather' do
438
+ it 'should allow empty Gather' do
439
+ r = Twilio::TwiML::VoiceResponse.new
440
+ r.gather
441
+
442
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Gather/></Response>')
443
+ end
444
+
445
+ it 'should allow Gather.say' do
446
+ g = Twilio::TwiML::Gather.new
447
+ g.say 'Hello'
448
+
449
+ r = Twilio::TwiML::VoiceResponse.new
450
+ r.append(g)
451
+
452
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Gather><Say>Hello</Say></Gather></Response>')
453
+ end
454
+
455
+ it 'should allow nested play and pause' do
456
+ g = Twilio::TwiML::Gather.new
457
+ g.say 'Hey'
458
+ g.play(url: 'hey.mp3')
459
+ g.pause
460
+
461
+ r = Twilio::TwiML::VoiceResponse.new
462
+ r.append(g)
463
+
464
+ expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?>' \
465
+ '<Response>' \
466
+ '<Gather>' \
467
+ '<Say>Hey</Say>' \
468
+ '<Play>hey.mp3</Play>' \
469
+ '<Pause/>' \
470
+ '</Gather>' \
471
+ '</Response>')
472
+ end
473
+ end
474
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe Twilio::Util::Configuration do
4
+ it 'should have an account sid attribute' do
5
+ config = Twilio::Util::Configuration.new
6
+ config.account_sid = 'someSid'
7
+ expect(config.account_sid).to eq('someSid')
8
+ end
9
+
10
+ it 'should have an auth token attribute' do
11
+ config = Twilio::Util::Configuration.new
12
+ config.auth_token = 'someToken'
13
+ expect(config.auth_token).to eq('someToken')
14
+ end
15
+ end
@@ -5,8 +5,8 @@ describe Twilio::Util do
5
5
 
6
6
  it 'should parse a Date object' do
7
7
  today = Time.now
8
- url = url_encode({'DateSent>' => today})
8
+ url = url_encode('DateSent>' => today)
9
9
 
10
- url.should == "DateSent%3E=#{today.strftime('%Y-%m-%d')}"
10
+ expect(url).to eq("DateSent%3E=#{today.strftime('%Y-%m-%d')}")
11
11
  end
12
12
  end
data/twilio-ruby.gemspec CHANGED
@@ -1,33 +1,39 @@
1
- require './lib/twilio-ruby/version'
1
+ # coding: utf-8
2
2
 
3
- Gem::Specification.new do |s|
4
- s.name = 'twilio-ruby'
5
- s.version = Twilio::VERSION
6
- s.author = 'Andrew Benton'
7
- s.email = 'andrew@twilio.com'
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'twilio-ruby/version'
8
6
 
9
- s.description = 'A simple library for communicating with the Twilio REST API, building TwiML, and generating Twilio Client Capability Tokens'
10
- s.summary = 'A simple library for communicating with the Twilio REST API, building TwiML, and generating Twilio Client Capability Tokens'
11
- s.homepage = 'http://github.com/twilio/twilio-ruby'
12
- s.license = 'MIT'
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'twilio-ruby'
9
+ spec.version = Twilio::VERSION
10
+ spec.authors = ['Twilio API Team']
11
+ spec.summary = 'A simple library for communicating with the Twilio REST API, '\
12
+ 'building TwiML, and generating Twilio JWT Capability Tokens'
13
+ spec.description = 'A simple library for communicating with the Twilio REST API, '\
14
+ 'building TwiML, and generating Twilio JWT Capability Tokens'
15
+ spec.homepage = 'http://github.com/twilio/twilio-ruby'
16
+ spec.license = 'MIT'
17
+ spec.metadata['yard.run'] = 'yri' # use "yard" to build full HTML docs.
13
18
 
14
- s.platform = Gem::Platform::RUBY
15
- s.require_paths = %w[lib]
16
- s.files = `git ls-files`.split("\n")
17
- s.test_files = Dir['spec/**/*.rb']
19
+ spec.files = `git ls-files -z`.split("\x0")
20
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
21
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
22
+ spec.require_paths = ['lib']
23
+ spec.required_ruby_version = '>= 2.0.0'
24
+ spec.extra_rdoc_files = ['README.md', 'LICENSE.md']
25
+ spec.rdoc_options = ['--line-numbers', '--inline-source', '--title', 'twilio-ruby', '--main', 'README.md']
18
26
 
19
- s.add_dependency('multi_json', '>= 1.3.0')
20
- s.add_dependency('builder', '>= 2.1.2')
21
- s.add_dependency('jwt', '>= 0.1.2')
22
- s.add_dependency('jruby-openssl') if RUBY_PLATFORM == 'java'
27
+ spec.add_dependency('libxml-ruby', '3.0.0')
28
+ spec.add_dependency('jwt', '~> 1.5')
29
+ spec.add_dependency('faraday', '~>0.9')
30
+ spec.add_dependency('jruby-openssl') if RUBY_PLATFORM == 'java'
23
31
  # Workaround for RBX <= 2.2.1, should be fixed in next version
24
- s.add_dependency('rubysl') if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
32
+ spec.add_dependency('rubysl') if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
25
33
 
26
- s.add_development_dependency 'rake', '~> 0.9.0'
27
- s.add_development_dependency 'rspec', '~> 2.6.0'
28
- s.add_development_dependency 'fakeweb', '~> 1.3.0'
29
- s.add_development_dependency 'rack', '~> 1.3.0'
30
-
31
- s.extra_rdoc_files = ['README.md', 'LICENSE']
32
- s.rdoc_options = ['--line-numbers', '--inline-source', '--title', 'twilio-ruby', '--main', 'README.md']
34
+ spec.add_development_dependency 'bundler', '~> 1.5'
35
+ spec.add_development_dependency 'rubocop', '~> 0.49.1'
36
+ spec.add_development_dependency 'yard', '~> 0.9.9'
37
+ spec.extra_rdoc_files = ['README.md', 'LICENSE.md']
38
+ spec.rdoc_options = ['--line-numbers', '--inline-source', '--title', 'twilio-ruby', '--main', 'README.md']
33
39
  end