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
data/Makefile CHANGED
@@ -1,13 +1,25 @@
1
+ .PHONY: test lint-changed lint
2
+
3
+ CHANGED_RUBY_FILES = $(shell git status --porcelain | grep ".rb" | awk -F ' ' '{print $2}' | tr '\n' ' ')
4
+
1
5
  install:
2
- gem build twilio-ruby.gemspec
3
- gem install twilio-ruby-*.gem
6
+ bundle install; bundle exec rake install
4
7
 
5
8
  test-install:
6
9
  bundle install
7
10
 
8
- test:
11
+ test: lint
9
12
  bundle exec rake spec
10
13
 
14
+ docs:
15
+ yard doc
16
+
17
+ lint:
18
+ rubocop --cache true --parallel
19
+
11
20
  authors:
12
21
  echo "Authors\n=======\n\nA huge thanks to all of our contributors:\n\n" > AUTHORS.md
13
22
  git log --raw | grep "^Author: " | cut -d ' ' -f2- | cut -d '<' -f1 | sed 's/^/- /' | sort | uniq >> AUTHORS.md
23
+
24
+ gem:
25
+ bundle exec rake build | sed -e 's/.*pkg/pkg/g' | sed -e "s/\.$$//g" | xargs gem push
data/README.md CHANGED
@@ -1,18 +1,23 @@
1
- [![Build Status](https://travis-ci.org/twilio/twilio-ruby.png?branch=master)](https://travis-ci.org/twilio/twilio-ruby)
2
- [![Gem Version](https://badge.fury.io/rb/twilio-ruby.png)](http://badge.fury.io/rb/twilio-ruby)
3
-
4
1
  # twilio-ruby
5
2
 
6
- A module for using the Twilio REST API and generating valid
7
- [TwiML](http://www.twilio.com/docs/api/twiml/ "TwiML - Twilio Markup Language").
8
- [Click here to read the full documentation.][documentation]
3
+ [![Build Status](http://img.shields.io/travis/twilio/twilio-ruby.svg)][travis]
4
+ [![Gem Version](http://img.shields.io/gem/v/twilio-ruby.svg)][gem]
5
+ [![Code Quality](http://img.shields.io/codeclimate/github/twilio/twilio-ruby.svg)][codeclimate]
6
+
7
+ A module for using the Twilio REST API and generating valid [TwiML](http://www.twilio.com/docs/api/twiml/ "TwiML - Twilio Markup Language"). [Click here to read the full documentation.][documentation]
8
+
9
+ ## Installation
10
+
11
+ To install using [Bundler][bundler] grab the latest stable version:
9
12
 
10
- ## Install
13
+ ```ruby
14
+ gem 'twilio-ruby', '~> 5.0.0.rc26'
15
+ ```
11
16
 
12
- Via rubygems.org:
17
+ To manually install `twilio-ruby` via [Rubygems][rubygems] simply gem install:
13
18
 
14
19
  ```bash
15
- gem install twilio-ruby
20
+ gem install twilio-ruby -v 5.0.0.rc26
16
21
  ```
17
22
 
18
23
  To build and install the development branch yourself from the latest source:
@@ -23,12 +28,20 @@ cd twilio-ruby
23
28
  make install
24
29
  ```
25
30
 
26
- ## Getting Started With REST
31
+ ### Migration from 4.x
32
+ [Upgrade Guide][upgrade]
33
+
34
+ ## Documentation
35
+ [Here][documentation]
36
+
37
+ ## Feedback
38
+ During the Release Candidate period of this library, please leave all feedback and issues in the [Github Issues][issues] for `twilio-ruby`.
39
+
40
+ ## Getting Started
27
41
 
28
42
  ### Setup Work
29
43
 
30
- ``` ruby
31
- require 'rubygems' # not necessary with ruby 1.9 but included for completeness
44
+ ```ruby
32
45
  require 'twilio-ruby'
33
46
 
34
47
  # put your own credentials here
@@ -37,71 +50,42 @@ auth_token = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
37
50
 
38
51
  # set up a client to talk to the Twilio REST API
39
52
  @client = Twilio::REST::Client.new account_sid, auth_token
40
- ```
41
53
 
42
- ### Send an SMS
54
+ # alternatively, you can preconfigure the client like so
55
+ Twilio.configure do |config|
56
+ config.account_sid = account_sid
57
+ config.auth_token = auth_token
58
+ end
43
59
 
44
- ``` ruby
45
- @client.account.messages.create(
46
- :from => '+14159341234',
47
- :to => '+16105557069',
48
- :body => 'Hey there!'
49
- )
60
+ # and then you can create a new client without parameters
61
+ @client = Twilio::REST::Client.new
50
62
  ```
51
63
 
52
- ### Send an MMS
64
+ ### Make a Call
53
65
 
54
- ``` ruby
55
- @client.account.messages.create(
56
- :from => '+14159341234',
57
- :to => '+16105557069',
58
- :body => 'Hey there!',
59
- :media_url => 'http://example.com/smileyface.jpg',
66
+ ```ruby
67
+ @client.api.account.calls.create(
68
+ from: '+14159341234',
69
+ to: '+16105557069',
70
+ url: 'http://example.com'
60
71
  )
61
72
  ```
62
73
 
63
- ### Do Some Stuff With Calls
74
+ ### Send an SMS
64
75
 
65
- ``` ruby
66
- # make a new outgoing call
67
- @call = @client.account.calls.create(
68
- :from => '+14159341234',
69
- :to => '+18004567890',
70
- :url => 'http://example.com/call-handler',
76
+ ```ruby
77
+ @client.api.account.messages.create(
78
+ from: '+14159341234',
79
+ to: '+16105557069',
80
+ body: 'Hey there!'
71
81
  )
72
-
73
- # hangup a ringing call, but don't touch it if it's connected
74
- @call.cancel
75
-
76
- # if you have the call sid, you can fetch a call object via:
77
- @call = @client.account.calls.get('CA386025c9bf5d6052a1d1ea42b4d16662')
78
-
79
- # redirect an in-progress call
80
- @call.redirect_to('http://example.com/call-redirect')
81
-
82
- # hangup a call, no matter whether it is ringing or connected
83
- @call.hangup
84
82
  ```
85
83
 
86
- ### List Calls after a certain time
87
-
88
- ``` ruby
89
- # list calls made or received on or after May 13, 2013
90
- @client.account.calls.list("start_time>" => "2013-05-13") # Notice we omit the "=" in the "start_time>=" parameter because it is automatically added
91
- ```
92
-
93
- ### Buy a Phone Number
94
-
95
- ``` ruby
96
- # print some available numbers
97
- @numbers = @client.account.available_phone_numbers.get('US').local.list(
98
- :contains => 'AWESOME'
99
- )
100
- @numbers.each {|num| puts num.phone_number}
84
+ ### Customizing your HTTP Client
85
+ twilio-ruby uses [Faraday][faraday] to make HTTP requests. You can tell Twilio::REST::Client to use any of the Faraday adapters like so:
101
86
 
102
- # buy the first one
103
- @number = @numbers[0].phone_number
104
- @client.account.incoming_phone_numbers.create(:phone_number => @number)
87
+ ```ruby
88
+ @client.http_client.adapter = :typhoeus
105
89
  ```
106
90
 
107
91
  ## Getting Started With Client Capability Tokens
@@ -109,25 +93,27 @@ auth_token = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
109
93
  If you just need to generate a Capability Token for use with Twilio Client, you
110
94
  can do this:
111
95
 
112
- ``` ruby
113
- require 'rubygems' # not necessary with ruby 1.9 but included for completeness
96
+ ```ruby
114
97
  require 'twilio-ruby'
115
98
 
116
99
  # put your own account credentials here:
117
- account_sid = 'AC043dcf9844e13758bc3a36a84c29761'
118
- auth_token = '62ea81de3a5b413254eb263595357c69'
100
+ account_sid = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
101
+ auth_token = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
119
102
 
120
103
  # set up
121
- capability = Twilio::Util::Capability.new account_sid, auth_token
104
+ capability = Twilio::JWT::ClientCapability.new account_sid, auth_token
105
+
122
106
 
123
107
  # allow outgoing calls to an application
124
- capability.allow_client_outgoing 'AP89a0180a1a4ddf1da954efca349b7a20'
108
+ outgoingScope = Twilio::JWT::ClientCapability::OutgoingClientScope.new 'AP11111111111111111111111111111111'
109
+ capability.add_scope(outgoingScope)
125
110
 
126
111
  # allow incoming calls to 'andrew'
127
- capability.allow_client_incoming 'andrew'
112
+ incomingScope = Twilio::JWT::ClientCapability::IncomingClientScope.new 'tom'
113
+ capability.add_scope(incomingScope)
128
114
 
129
115
  # generate the token string
130
- @token = capability.generate
116
+ @token = capability.to_s
131
117
  ```
132
118
 
133
119
  There is a slightly more detailed document in the [Capability][capability]
@@ -135,28 +121,26 @@ section of the wiki.
135
121
 
136
122
  ## Getting Started With TwiML
137
123
 
138
- TwiML support is based on the [builder][builder] library. You can construct a
124
+ TwiML support is based on the [Builder][builder] library. You can construct a
139
125
  TwiML response like this:
140
126
 
141
- ``` ruby
142
- require 'rubygems' # not necessary with ruby 1.9 but included for completeness
127
+ ```ruby
143
128
  require 'twilio-ruby'
144
129
 
145
- # build up a response
146
- response = Twilio::TwiML::Response.new do |r|
147
- r.Say 'hello there', :voice => 'alice'
148
- r.Dial :callerId => '+14159992222' do |d|
149
- d.Client 'jenny'
130
+ response = Twilio::TwiML::VoiceResponse.new do |r|
131
+ r.say('hello there', voice: 'alice')
132
+ r.dial(caller_id: '+14159992222') do |d|
133
+ d.client 'jenny'
150
134
  end
151
135
  end
152
136
 
153
137
  # print the result
154
- puts response.text
138
+ puts response.to_s
155
139
  ```
156
140
 
157
141
  This will print the following (except for the whitespace):
158
142
 
159
- ```
143
+ ```xml
160
144
  <?xml version="1.0" encoding="UTF-8"?>
161
145
  <Response>
162
146
  <Say voice="alice">hello there</Say>
@@ -166,16 +150,27 @@ This will print the following (except for the whitespace):
166
150
  </Response>
167
151
  ```
168
152
 
169
- ## More Information
170
-
171
- There are more detailed examples in the included [examples][examples]
172
- directory.
173
-
174
- The [upgrade guide][upgrade] is available in the [twilio-ruby github wiki][wiki].
175
-
176
- [capability]:https://github.com/twilio/twilio-ruby/wiki/Capability
177
- [builder]:http://builder.rubyforge.org/
178
- [examples]:https://github.com/twilio/twilio-ruby/blob/master/examples
179
- [documentation]:http://twilio-ruby.readthedocs.org/en/latest
180
- [upgrade]:https://github.com/twilio/twilio-ruby/wiki/UpgradeGuide
181
- [wiki]:https://github.com/twilio/twilio-ruby/wiki
153
+ ## Supported Ruby Versions
154
+
155
+ This library supports and is [tested against][travis] the following Ruby
156
+ implementations:
157
+
158
+ - Ruby 2.4.0
159
+ - Ruby 2.3.0
160
+ - Ruby 2.2.0
161
+ - Ruby 2.1.0
162
+ - Ruby 2.0.0
163
+
164
+ [capability]: https://github.com/twilio/twilio-ruby/wiki/Capability
165
+ [builder]: http://builder.rubyforge.org/
166
+ [examples]: https://github.com/twilio/twilio-ruby/blob/master/examples
167
+ [documentation]: http://twilio.github.io/twilio-ruby
168
+ [wiki]: https://github.com/twilio/twilio-ruby/wiki
169
+ [bundler]: http://bundler.io
170
+ [rubygems]: http://rubygems.org
171
+ [gem]: https://rubygems.org/gems/twilio
172
+ [travis]: http://travis-ci.org/twilio/twilio-ruby
173
+ [codeclimate]: https://codeclimate.com/github/twilio/twilio-ruby
174
+ [upgrade]: https://github.com/twilio/twilio-ruby/wiki/Ruby-Version-5.x-Upgrade-Guide
175
+ [issues]: https://github.com/twilio/twilio-ruby/issues
176
+ [faraday]: https://github.com/lostisland/faraday
data/Rakefile CHANGED
@@ -1,12 +1,64 @@
1
- require 'rubygems'
2
- require 'rubygems/package_task'
1
+ require 'bundler'
2
+ Bundler.setup
3
+ Bundler::GemHelper.install_tasks
4
+
3
5
  require 'rspec/core/rake_task'
6
+ desc 'Run all specs'
7
+ RSpec::Core::RakeTask.new(:spec)
4
8
 
5
- spec = eval(File.read('twilio-ruby.gemspec'))
9
+ task default: :spec
10
+ task test: :spec
6
11
 
7
- Gem::PackageTask.new(spec) do |p|
8
- p.gem_spec = spec
12
+ task :authors do
13
+ `make authors`
9
14
  end
10
15
 
11
- RSpec::Core::RakeTask.new
12
- task :default => :spec
16
+ task :deploy, [:version] => [:spec, :authors] do |t, args|
17
+ current_version = Twilio::VERSION
18
+
19
+ if args.version.nil?
20
+ version = Twilio::VERSION
21
+ version_parts = version.split('.')
22
+ increment = version_parts.pop
23
+ increment_prefix = increment.split(/\d/)[0]
24
+
25
+ increment = increment[increment_prefix.length..-1] if increment_prefix
26
+
27
+ increment = increment.to_i + 1
28
+ increment = "#{increment_prefix}#{increment}" if increment_prefix
29
+
30
+ version = [*version_parts, increment].join('.')
31
+ else
32
+ version = args.version
33
+ end
34
+
35
+ puts("Deploying #{version}")
36
+
37
+ # Update version.rb
38
+ version_file = <<SRC
39
+ module Twilio
40
+ VERSION = '#{version}'
41
+ end
42
+ SRC
43
+ File.write('lib/twilio-ruby/version.rb', version_file)
44
+
45
+ # Update README.md
46
+ current_readme = File.read('README.md')
47
+ new_readme = current_readme.gsub(Regexp.new(current_version.gsub('.', '\.')), version)
48
+ File.write('README.md', new_readme)
49
+
50
+ # Make a git commit
51
+ `git commit -am "Bumping to version #{version}"`
52
+
53
+ # Do the gem deployment
54
+ `make gem`
55
+
56
+ # Push the branch back up
57
+ `git push`
58
+
59
+ # Tag the branch
60
+ `git tag #{version}`
61
+
62
+ # Push the tags
63
+ `git push --tags`
64
+ end
data/VERSIONS.md ADDED
@@ -0,0 +1,64 @@
1
+ # Versioning Strategy
2
+
3
+ `twilio-ruby` uses a modified version of [Semantic Versioning][semver] for all
4
+ changes to the helper library. It is strongly encouraged that you pin at least
5
+ the major version and potentially the minor version to avoid pulling in breaking
6
+ changes.
7
+
8
+ Semantic Versions take the form of `MAJOR`.`MINOR`.`PATCH`
9
+
10
+ When bugs are fixed in the library in a backwards compatible way, the `PATCH`
11
+ level will be incremented by one. When new features are added to the library
12
+ in a backwards compatible way, the `PATCH` level will be incremented by one.
13
+ `PATCH` changes should _not_ break your code and are generally safe for upgrade.
14
+
15
+ When a new large feature set comes online or a small breaking change is
16
+ introduced, the `MINOR` version will be incremented by one and the `PATCH`
17
+ version reset to zero. `MINOR` changes _may_ require some amount of manual code
18
+ change for upgrade. These backwards-incompatible changes will generally be limited
19
+ to a small number of function signature changes.
20
+
21
+ The `MAJOR` version is used to indicate the family of technology represented by
22
+ the helper library. It increased from `4.x.x` to `5.x.x` when Twilio moved to
23
+ auto generation of helper libraries. Breaking changes that requires extensive
24
+ reworking of code (like the `4.x.x` to `5.x.x` upgrade) will case the `MAJOR`
25
+ version to be incremented by one, the `MINOR` and `PATCH` versions will be reset
26
+ to zero. Twilio understands that this can be very disruptive, we will only
27
+ introduce this type of breaking change when absolutely necessary. New `MAJOR`
28
+ versions will be communicated in advance with `Release Candidates` and a
29
+ schedule.
30
+
31
+ ## Supported Versions
32
+
33
+ `twilio-ruby` follows an evergreen model of support. New features and
34
+ functionality will only be added to the current version. The current version -
35
+ 1 will continue to be supported with bugfixes and security updates, but no new
36
+ features.
37
+
38
+ ## Edge Features (alpha Branch)
39
+
40
+ Twilio frequently rolls out new features in public and private beta periods.
41
+ Twilio strives to ship early and often and bake customer feedback back into our
42
+ products. To support that mission, the `twilio-ruby` helper library has an
43
+ `Edge` version based of the `alpha` branch. This version is identified with an
44
+ `alpha` metadata tag on the version number.
45
+
46
+ The way the `Edge` artifact is created is by playing the `Edge` features on top
47
+ of our stable artifact. The `Edge` artifact will always have the same version
48
+ number as the stable artifact it was created from, but with an `alpha` suffix.
49
+
50
+ For example, `5.0.0-alpha-1` is the `5.0.0` branch with `Edge` features included.
51
+ If there is a change to one of the `Edge` features we may regenerate the `Edge`
52
+ artifact and release a new `5.0.0-alpha-2`, new `Edge` artifacts simply increment
53
+ the number after the `alpha` suffix. All `Edge` features are considered
54
+ unstable and a backwards incompatible change in an `Edge` feature will not cause
55
+ any version change so you should take care when upgrading from one `alpha`
56
+ version to another.
57
+
58
+ Once an `Edge` feature has matured it will be considered `Mainline` and included
59
+ in the stable artifact, with a `MAJOR` or `MINOR` version bump.
60
+
61
+ To use an `Edge` artifact in your Ruby project you will have to make sure that
62
+ you pin the artifact with `alpha` stability in your `pom.xml`.
63
+
64
+ [semver]: http://semver.org/
data/examples/examples.rb CHANGED
@@ -1,124 +1,137 @@
1
- # examples version 3
1
+ # examples version
2
2
 
3
- @account_sid = 'AC043dcf9844e04758bc3a36a84c29761'
4
- @auth_token = '62ea81de3a5b414154eb263595357c69'
3
+ @account_sid = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
4
+ @auth_token = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
5
5
  # set up a client
6
6
  @client = Twilio::REST::Client.new(@account_sid, @auth_token)
7
7
 
8
8
  ################ ACCOUNTS ################
9
9
 
10
10
  # shortcut to grab your account object (account_sid is inferred from the client's auth credentials)
11
- @account = @client.account
11
+ @account = @client.api.account
12
12
 
13
13
  # list your (sub)accounts
14
- @client.accounts.list
14
+ @accounts = @client.api.accounts.each do |account|
15
+ puts(account)
16
+ end
15
17
 
16
18
  # grab an account instance resource if you know the sid
17
- @account = @client.accounts.get(@account_sid)
18
- # http round trip happens here
19
- puts @account.friendly_name
19
+ @account = @client.api.accounts(account_sid).fetch
20
+ puts(@account.friendly_name)
20
21
 
21
22
  # update an account's friendly name
22
- @client.accounts.get(@account_sid).update(:friendly_name => 'A Fabulous Friendly Name')
23
+ @client.api.accounts(account_sid).update(friendly_name: 'A Fabulous Friendly Name')
23
24
 
24
25
  ################ CALLS ################
25
26
 
26
27
  # print a list of calls (all parameters optional)
27
- @account.calls.list({:page => 0, :page_size => 1000, :start_time => '2010-09-01'}).each do |call|
28
+ @client.calls.list(limit: 10, start_time: '2010-09-01').each do |call|
28
29
  puts call.sid
29
30
  end
30
31
 
31
32
  # get a particular call and list its recording urls
32
- @account.calls.get('CAXXXXXXX').recordings.list.each do |r|
33
+ @client.calls('CAXXXXXXX').recordings.each do |r|
33
34
  puts r.wav
34
35
  end
35
36
 
36
37
  # make a new outgoing call. returns a call object just like calls.get
37
- @call = @account.calls.create({:from => '+14159341234', :to => '+18004567890', :url => 'http://example.com/call-handler'})
38
+ @call = @client.calls.create(
39
+ from: '+14159341234',
40
+ to: '+18004567890',
41
+ url: 'http://example.com/call-handler'
42
+ )
38
43
 
39
44
  # cancel the call if not already in progress
40
- @account.calls.get(@call.sid).update({:status => 'canceled'})
41
- # or equivalently
42
- @call.update({:status => 'canceled'})
43
- # or simply
44
- @call.cancel
45
+ @client.calls(@call.sid).update(status: 'canceled')
45
46
 
46
47
  # redirect and then terminate a call
47
- @account.calls.get('CA386025c9bf5d6052a1d1ea42b4d16662').update({:url => 'http://example.com/call-redirect'})
48
- @account.calls.get('CA386025c9bf5d6052a1d1ea42b4d16662').update({:status => 'completed'})
49
- # or, use the aliases...
50
- @call.redirect_to('http://example.com/call-redirect')
51
- @call.hangup
48
+ @call = client.calls('CAXXXXXXX')
49
+ @call.update(url: 'http://example.com/call-redirect')
50
+ @call.update(status: 'completed')
52
51
 
53
52
  ################ SMS MESSAGES ################
54
53
 
55
- # print a list of messages
56
- @account.messages.list({:date_sent => '2010-09-01'}).each do |message|
57
- puts message.body
54
+ @client.messages.list(date_sent: '2010-09-01').each do |message|
55
+ puts message.date_created
58
56
  end
59
57
 
60
58
  # print a particular sms message
61
- puts @account.messages.get('SMXXXXXXXX').body
59
+ puts @client.messages('SMXXXXXXXX').fetch.body
62
60
 
63
61
  # send an sms
64
- @account.messages.create(:from => '+14159341234', :to => '+16105557069', :body => 'Hey there!')
62
+ @client.messages.create(
63
+ from: '+14159341234',
64
+ to: '+16105557069',
65
+ body: 'Hey there!'
66
+ )
65
67
 
66
68
  # send an mms
67
- @account.messages.create(:from => '+14159341234', :to => '+16105557069', :media_urls => 'http://example.com/media.png')
69
+ @client.messages.create(
70
+ from: '+14159341234',
71
+ to: '+16105557069',
72
+ media_urls: 'http://example.com/media.png'
73
+ )
68
74
 
69
75
  ################ PHONE NUMBERS ################
70
76
 
71
77
  # get a list of supported country codes
72
- @account.available_phone_numbers.list
78
+ @client.available_phone_numbers.list
73
79
 
74
80
  # print some available numbers
75
- @numbers = @account.available_phone_numbers.get('US').local.list({:contains => 'AWESOME'})
76
- @numbers.each {|num| puts num.phone_number}
81
+ @client.available_phone_numbers('US').local.list.each do |num|
82
+ puts num
83
+ end
84
+
85
+ @numbers = @client.available_phone_numbers('US').local.list(area_code: '908')
86
+ @numbers.each { |num| puts num.phone_number }
77
87
 
78
88
  # buy the first one
79
- @account.incoming_phone_numbers.create(:phone_number => @numbers[0].phone_number)
89
+ @client.incoming_phone_numbers.create(phone_number: @numbers[0].phone_number)
80
90
 
81
91
  # update an existing phone number's voice url
82
- @account.incoming_phone_numbers.get('PNdba508c5616a7f5e141789f44f022cc3').update({:voice_url => 'http://example.com/voice'})
92
+ @client.incoming_phone_numbers('PNxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx').update(voice_url: 'http://example.com/voice')
83
93
 
84
94
  # decommission an existing phone number
85
- numbers = @account.incoming_phone_numbers.list(:friendly_name => 'A Fabulous Friendly Name')
86
- numbers[0].delete
95
+ numbers = @client.incoming_phone_numbers.list(friendly_name: 'A Fabulous Friendly Name')
96
+ number = numbers[0].sid
97
+ @client.incoming_phone_numbers(number).delete
98
+
87
99
  ################ CONFERENCES ################
88
100
 
89
101
  # get a particular conference's participants object and stash it
90
- @participants = @account.conferences.get('CFbbe46ff1274e283f7e3ac1df0072ab39').participants
102
+ conference = @client.conferences('CFxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx').fetch
103
+ @participants = conference.participants
91
104
 
92
105
  # list participants
93
- @participants.list.each do |p|
106
+ @participants.each do |p|
94
107
  puts p.sid
95
108
  end
96
109
 
97
110
  # update a conference participant
98
- @participants.get('CA386025c9bf5d6052a1d1ea42b4d16662').update({:muted => 'true'})
99
- # or an easier way
100
- @participants.get('CA386025c9bf5d6052a1d1ea42b4d16662').mute
101
-
102
- # and, since we're lazy loading, this would only incur one http request
103
- @account.conferences.get('CFbbe46ff1274e283f7e3ac1df0072ab39').participants.get('CA386025c9bf5d6052a1d1ea42b4d16662').update({:muted => 'true'})
111
+ @client
112
+ .conferences('CFxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
113
+ .participants('CAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
114
+ .update(muted: 'true')
104
115
 
105
116
  ################ QUEUES ###################
106
117
 
107
118
  # create a new queue
108
- @queue = @account.queues.create(:friendly_name => 'MyQueue', :max_size => 50)
119
+ @queue = @client.queues.create(friendly_name: 'MyQueue', max_size: 50)
109
120
 
110
121
  # get a list of queues for this account
111
- @queues = @account.queues.list
122
+ @queues = @client.queues.list
112
123
 
113
124
  # get a particular queue and its members
114
- @queue = @account.queues.get("QQb6765b0458714964970a73dcaf55efd1")
125
+ @queue = @client.queues('QQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx').fetch
115
126
  @members = @queue.members
116
127
 
117
- #list members
128
+ # list members
118
129
  @members.list.each do |m|
119
130
  puts m.wait_time
120
131
  end
121
132
 
122
133
  # dequeue a particular user and run twiml at a specific url
123
- @member = @members.get('CA386025c9bf5d6052a1d1ea42b4d16662')
124
- @member.dequeue('http://myapp.com/deque')
134
+ @client
135
+ .queues('QQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
136
+ .members('CAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
137
+ .update(url: 'http://myapp.com/deque', method: 'POST')
@@ -1,4 +1,3 @@
1
- require 'rubygems'
2
1
  require 'twilio-ruby'
3
2
 
4
3
  # print a list of all phone calls, what phone number each was to/from, and how
@@ -7,18 +6,19 @@ require 'twilio-ruby'
7
6
  # put your Twilio credentials here. you can find your AccountSid and AuthToken
8
7
  # at the top of your account dashboard page located at:
9
8
  # https://www.twilio.com/user/account
10
- account_sid = 'AC043dcf9844e04758bc3a36a84c29761'
11
- auth_token = '62ea81de3a5b414154eb263595357c69'
9
+ account_sid = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
10
+ auth_token = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
12
11
 
13
12
  # set up a client
14
13
  client = Twilio::REST::Client.new(account_sid, auth_token)
15
14
 
16
- calls = client.account.calls.list
15
+ calls = client.calls.page
17
16
 
18
- begin
17
+ loop do
19
18
  calls.each do |call|
20
19
  price = call.price || '0.00' # since apparently prices can be nil...
21
- puts call.sid + "\t" + call.from + "\t" + call.to + "\t" + price
20
+ puts call.sid + "\t" + call.from + "\t" + call.to + "\t" + price.to_s
22
21
  end
23
22
  calls = calls.next_page
24
- end while not calls.empty?
23
+ break if calls.nil?
24
+ end