twilio-ruby 5.0.0.rc21 → 5.0.0.rc22

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 (238) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +3 -0
  3. data/lib/twilio-ruby.rb +7 -3
  4. data/lib/twilio-ruby/framework/domain.rb +5 -1
  5. data/lib/twilio-ruby/framework/page.rb +4 -4
  6. data/lib/twilio-ruby/framework/serialize.rb +3 -2
  7. data/lib/twilio-ruby/framework/values.rb +7 -0
  8. data/lib/twilio-ruby/framework/version.rb +4 -6
  9. data/lib/twilio-ruby/jwt/access_token.rb +160 -134
  10. data/lib/twilio-ruby/jwt/client_capability.rb +98 -0
  11. data/lib/twilio-ruby/jwt/jwt.rb +56 -0
  12. data/lib/twilio-ruby/jwt/task_router.rb +108 -139
  13. data/lib/twilio-ruby/rest/accounts.rb +1 -1
  14. data/lib/twilio-ruby/rest/accounts/v1/credential.rb +1 -1
  15. data/lib/twilio-ruby/rest/accounts/v1/credential/public_key.rb +30 -17
  16. data/lib/twilio-ruby/rest/api.rb +2 -2
  17. data/lib/twilio-ruby/rest/api/v2010/account.rb +31 -18
  18. data/lib/twilio-ruby/rest/api/v2010/account/address.rb +32 -19
  19. data/lib/twilio-ruby/rest/api/v2010/account/address/dependent_phone_number.rb +18 -5
  20. data/lib/twilio-ruby/rest/api/v2010/account/application.rb +32 -19
  21. data/lib/twilio-ruby/rest/api/v2010/account/authorized_connect_app.rb +20 -7
  22. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number.rb +20 -7
  23. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/local.rb +20 -7
  24. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/mobile.rb +20 -7
  25. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/toll_free.rb +20 -7
  26. data/lib/twilio-ruby/rest/api/v2010/account/call.rb +33 -20
  27. data/lib/twilio-ruby/rest/api/v2010/account/call/feedback.rb +13 -13
  28. data/lib/twilio-ruby/rest/api/v2010/account/call/feedback_summary.rb +8 -8
  29. data/lib/twilio-ruby/rest/api/v2010/account/call/notification.rb +23 -10
  30. data/lib/twilio-ruby/rest/api/v2010/account/call/recording.rb +23 -10
  31. data/lib/twilio-ruby/rest/api/v2010/account/conference.rb +27 -14
  32. data/lib/twilio-ruby/rest/api/v2010/account/conference/participant.rb +32 -19
  33. data/lib/twilio-ruby/rest/api/v2010/account/connect_app.rb +25 -12
  34. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number.rb +32 -19
  35. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/assigned_add_on.rb +24 -11
  36. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/assigned_add_on/assigned_add_on_extension.rb +20 -7
  37. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/local.rb +24 -11
  38. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/mobile.rb +24 -11
  39. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/toll_free.rb +24 -11
  40. data/lib/twilio-ruby/rest/api/v2010/account/key.rb +26 -13
  41. data/lib/twilio-ruby/rest/api/v2010/account/message.rb +30 -17
  42. data/lib/twilio-ruby/rest/api/v2010/account/message/feedback.rb +5 -5
  43. data/lib/twilio-ruby/rest/api/v2010/account/message/media.rb +23 -10
  44. data/lib/twilio-ruby/rest/api/v2010/account/new_key.rb +5 -5
  45. data/lib/twilio-ruby/rest/api/v2010/account/new_signing_key.rb +5 -5
  46. data/lib/twilio-ruby/rest/api/v2010/account/notification.rb +23 -10
  47. data/lib/twilio-ruby/rest/api/v2010/account/outgoing_caller_id.rb +28 -15
  48. data/lib/twilio-ruby/rest/api/v2010/account/queue.rb +30 -17
  49. data/lib/twilio-ruby/rest/api/v2010/account/queue/member.rb +23 -10
  50. data/lib/twilio-ruby/rest/api/v2010/account/recording.rb +23 -10
  51. data/lib/twilio-ruby/rest/api/v2010/account/recording/add_on_result.rb +21 -8
  52. data/lib/twilio-ruby/rest/api/v2010/account/recording/add_on_result/payload.rb +21 -8
  53. data/lib/twilio-ruby/rest/api/v2010/account/recording/transcription.rb +21 -8
  54. data/lib/twilio-ruby/rest/api/v2010/account/short_code.rb +27 -14
  55. data/lib/twilio-ruby/rest/api/v2010/account/signing_key.rb +26 -13
  56. data/lib/twilio-ruby/rest/api/v2010/account/sip.rb +1 -1
  57. data/lib/twilio-ruby/rest/api/v2010/account/sip/credential_list.rb +27 -14
  58. data/lib/twilio-ruby/rest/api/v2010/account/sip/credential_list/credential.rb +29 -16
  59. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain.rb +30 -17
  60. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/credential_list_mapping.rb +24 -11
  61. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/ip_access_control_list_mapping.rb +24 -11
  62. data/lib/twilio-ruby/rest/api/v2010/account/sip/ip_access_control_list.rb +27 -14
  63. data/lib/twilio-ruby/rest/api/v2010/account/sip/ip_access_control_list/ip_address.rb +29 -16
  64. data/lib/twilio-ruby/rest/api/v2010/account/token.rb +5 -5
  65. data/lib/twilio-ruby/rest/api/v2010/account/transcription.rb +21 -8
  66. data/lib/twilio-ruby/rest/api/v2010/account/usage.rb +1 -1
  67. data/lib/twilio-ruby/rest/api/v2010/account/usage/record.rb +20 -7
  68. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/all_time.rb +20 -7
  69. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/daily.rb +20 -7
  70. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/last_month.rb +20 -7
  71. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/monthly.rb +20 -7
  72. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/this_month.rb +20 -7
  73. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/today.rb +20 -7
  74. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/yearly.rb +20 -7
  75. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/yesterday.rb +20 -7
  76. data/lib/twilio-ruby/rest/api/v2010/account/usage/trigger.rb +32 -19
  77. data/lib/twilio-ruby/rest/api/v2010/account/validation_request.rb +5 -5
  78. data/lib/twilio-ruby/rest/chat.rb +4 -4
  79. data/lib/twilio-ruby/rest/chat/v1/credential.rb +30 -17
  80. data/lib/twilio-ruby/rest/chat/v1/service.rb +29 -16
  81. data/lib/twilio-ruby/rest/chat/v1/service/channel.rb +32 -19
  82. data/lib/twilio-ruby/rest/chat/v1/service/channel/invite.rb +27 -14
  83. data/lib/twilio-ruby/rest/chat/v1/service/channel/member.rb +32 -19
  84. data/lib/twilio-ruby/rest/chat/v1/service/channel/message.rb +32 -19
  85. data/lib/twilio-ruby/rest/chat/v1/service/role.rb +27 -14
  86. data/lib/twilio-ruby/rest/chat/v1/service/user.rb +30 -17
  87. data/lib/twilio-ruby/rest/chat/v1/service/user/user_channel.rb +18 -5
  88. data/lib/twilio-ruby/rest/chat/v2/credential.rb +30 -17
  89. data/lib/twilio-ruby/rest/chat/v2/service.rb +29 -16
  90. data/lib/twilio-ruby/rest/chat/v2/service/channel.rb +32 -19
  91. data/lib/twilio-ruby/rest/chat/v2/service/channel/invite.rb +27 -14
  92. data/lib/twilio-ruby/rest/chat/v2/service/channel/member.rb +32 -19
  93. data/lib/twilio-ruby/rest/chat/v2/service/channel/message.rb +32 -19
  94. data/lib/twilio-ruby/rest/chat/v2/service/role.rb +27 -14
  95. data/lib/twilio-ruby/rest/chat/v2/service/user.rb +30 -17
  96. data/lib/twilio-ruby/rest/chat/v2/service/user/user_channel.rb +18 -5
  97. data/lib/twilio-ruby/rest/fax.rb +2 -2
  98. data/lib/twilio-ruby/rest/fax/v1/fax.rb +32 -19
  99. data/lib/twilio-ruby/rest/fax/v1/fax/fax_media.rb +21 -8
  100. data/lib/twilio-ruby/rest/ip_messaging.rb +4 -4
  101. data/lib/twilio-ruby/rest/ip_messaging/v1/credential.rb +30 -17
  102. data/lib/twilio-ruby/rest/ip_messaging/v1/service.rb +29 -16
  103. data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel.rb +32 -19
  104. data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel/invite.rb +27 -14
  105. data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel/member.rb +32 -19
  106. data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel/message.rb +32 -19
  107. data/lib/twilio-ruby/rest/ip_messaging/v1/service/role.rb +27 -14
  108. data/lib/twilio-ruby/rest/ip_messaging/v1/service/user.rb +30 -17
  109. data/lib/twilio-ruby/rest/ip_messaging/v1/service/user/user_channel.rb +18 -5
  110. data/lib/twilio-ruby/rest/ip_messaging/v2/credential.rb +30 -17
  111. data/lib/twilio-ruby/rest/ip_messaging/v2/service.rb +29 -16
  112. data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel.rb +32 -19
  113. data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel/invite.rb +27 -14
  114. data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel/member.rb +32 -19
  115. data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel/message.rb +32 -19
  116. data/lib/twilio-ruby/rest/ip_messaging/v2/service/role.rb +27 -14
  117. data/lib/twilio-ruby/rest/ip_messaging/v2/service/user.rb +30 -17
  118. data/lib/twilio-ruby/rest/ip_messaging/v2/service/user/user_channel.rb +18 -5
  119. data/lib/twilio-ruby/rest/lookups.rb +2 -2
  120. data/lib/twilio-ruby/rest/lookups/v1/phone_number.rb +6 -6
  121. data/lib/twilio-ruby/rest/messaging.rb +2 -2
  122. data/lib/twilio-ruby/rest/messaging/v1/service.rb +30 -17
  123. data/lib/twilio-ruby/rest/messaging/v1/service/alpha_sender.rb +24 -11
  124. data/lib/twilio-ruby/rest/messaging/v1/service/phone_number.rb +24 -11
  125. data/lib/twilio-ruby/rest/messaging/v1/service/short_code.rb +24 -11
  126. data/lib/twilio-ruby/rest/monitor.rb +4 -4
  127. data/lib/twilio-ruby/rest/monitor/v1/alert.rb +23 -10
  128. data/lib/twilio-ruby/rest/monitor/v1/event.rb +22 -9
  129. data/lib/twilio-ruby/rest/notify.rb +4 -4
  130. data/lib/twilio-ruby/rest/notify/v1/credential.rb +30 -17
  131. data/lib/twilio-ruby/rest/notify/v1/service.rb +32 -19
  132. data/lib/twilio-ruby/rest/notify/v1/service/binding.rb +27 -14
  133. data/lib/twilio-ruby/rest/notify/v1/service/notification.rb +5 -5
  134. data/lib/twilio-ruby/rest/notify/v1/service/segment.rb +18 -5
  135. data/lib/twilio-ruby/rest/notify/v1/service/user.rb +27 -14
  136. data/lib/twilio-ruby/rest/notify/v1/service/user/segment_memberships.rb +7 -7
  137. data/lib/twilio-ruby/rest/notify/v1/service/user/user_binding.rb +27 -14
  138. data/lib/twilio-ruby/rest/preview.rb +18 -18
  139. data/lib/twilio-ruby/rest/preview/bulk_exports/export.rb +3 -3
  140. data/lib/twilio-ruby/rest/preview/bulk_exports/export/day.rb +18 -5
  141. data/lib/twilio-ruby/rest/preview/bulk_exports/export_configuration.rb +8 -8
  142. data/lib/twilio-ruby/rest/preview/hosted_numbers/hosted_number_order.rb +32 -19
  143. data/lib/twilio-ruby/rest/preview/marketplace/available_add_on.rb +20 -7
  144. data/lib/twilio-ruby/rest/preview/marketplace/available_add_on/available_add_on_extension.rb +20 -7
  145. data/lib/twilio-ruby/rest/preview/marketplace/installed_add_on.rb +30 -17
  146. data/lib/twilio-ruby/rest/preview/marketplace/installed_add_on/installed_add_on_extension.rb +23 -10
  147. data/lib/twilio-ruby/rest/preview/proxy/service.rb +30 -17
  148. data/lib/twilio-ruby/rest/preview/proxy/service/phone_number.rb +24 -11
  149. data/lib/twilio-ruby/rest/preview/proxy/service/session.rb +32 -19
  150. data/lib/twilio-ruby/rest/preview/proxy/service/session/interaction.rb +22 -9
  151. data/lib/twilio-ruby/rest/preview/proxy/service/session/participant.rb +32 -19
  152. data/lib/twilio-ruby/rest/preview/proxy/service/session/participant/message_interaction.rb +24 -11
  153. data/lib/twilio-ruby/rest/preview/proxy/service/short_code.rb +24 -11
  154. data/lib/twilio-ruby/rest/preview/sync/service.rb +30 -17
  155. data/lib/twilio-ruby/rest/preview/sync/service/document.rb +28 -15
  156. data/lib/twilio-ruby/rest/preview/sync/service/document/document_permission.rb +24 -11
  157. data/lib/twilio-ruby/rest/preview/sync/service/sync_list.rb +25 -12
  158. data/lib/twilio-ruby/rest/preview/sync/service/sync_list/sync_list_item.rb +29 -16
  159. data/lib/twilio-ruby/rest/preview/sync/service/sync_list/sync_list_permission.rb +24 -11
  160. data/lib/twilio-ruby/rest/preview/sync/service/sync_map.rb +25 -12
  161. data/lib/twilio-ruby/rest/preview/sync/service/sync_map/sync_map_item.rb +29 -16
  162. data/lib/twilio-ruby/rest/preview/sync/service/sync_map/sync_map_permission.rb +24 -11
  163. data/lib/twilio-ruby/rest/preview/wireless/command.rb +26 -13
  164. data/lib/twilio-ruby/rest/preview/wireless/rate_plan.rb +30 -17
  165. data/lib/twilio-ruby/rest/preview/wireless/sim.rb +28 -15
  166. data/lib/twilio-ruby/rest/preview/wireless/sim/usage.rb +6 -6
  167. data/lib/twilio-ruby/rest/pricing.rb +3 -3
  168. data/lib/twilio-ruby/rest/pricing/v1/messaging.rb +1 -1
  169. data/lib/twilio-ruby/rest/pricing/v1/messaging/country.rb +20 -7
  170. data/lib/twilio-ruby/rest/pricing/v1/phone_number.rb +1 -1
  171. data/lib/twilio-ruby/rest/pricing/v1/phone_number/country.rb +20 -7
  172. data/lib/twilio-ruby/rest/pricing/v1/voice.rb +1 -1
  173. data/lib/twilio-ruby/rest/pricing/v1/voice/country.rb +20 -7
  174. data/lib/twilio-ruby/rest/pricing/v1/voice/number.rb +3 -3
  175. data/lib/twilio-ruby/rest/sync.rb +2 -2
  176. data/lib/twilio-ruby/rest/sync/v1/service.rb +30 -17
  177. data/lib/twilio-ruby/rest/sync/v1/service/document.rb +28 -15
  178. data/lib/twilio-ruby/rest/sync/v1/service/document/document_permission.rb +24 -11
  179. data/lib/twilio-ruby/rest/sync/v1/service/sync_list.rb +25 -12
  180. data/lib/twilio-ruby/rest/sync/v1/service/sync_list/sync_list_item.rb +29 -16
  181. data/lib/twilio-ruby/rest/sync/v1/service/sync_list/sync_list_permission.rb +24 -11
  182. data/lib/twilio-ruby/rest/sync/v1/service/sync_map.rb +25 -12
  183. data/lib/twilio-ruby/rest/sync/v1/service/sync_map/sync_map_item.rb +29 -16
  184. data/lib/twilio-ruby/rest/sync/v1/service/sync_map/sync_map_permission.rb +24 -11
  185. data/lib/twilio-ruby/rest/taskrouter.rb +2 -2
  186. data/lib/twilio-ruby/rest/taskrouter/v1/workspace.rb +33 -20
  187. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/activity.rb +32 -19
  188. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/event.rb +22 -9
  189. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task.rb +32 -19
  190. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task/reservation.rb +27 -14
  191. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_channel.rb +20 -7
  192. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue.rb +33 -20
  193. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queue_statistics.rb +6 -6
  194. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queues_statistics.rb +20 -7
  195. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker.rb +33 -20
  196. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/reservation.rb +27 -14
  197. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/worker_channel.rb +25 -12
  198. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/worker_statistics.rb +6 -6
  199. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/workers_statistics.rb +6 -6
  200. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workflow.rb +33 -20
  201. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workflow/workflow_statistics.rb +6 -6
  202. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workspace_statistics.rb +6 -6
  203. data/lib/twilio-ruby/rest/trunking.rb +2 -2
  204. data/lib/twilio-ruby/rest/trunking/v1/trunk.rb +30 -17
  205. data/lib/twilio-ruby/rest/trunking/v1/trunk/credential_list.rb +24 -11
  206. data/lib/twilio-ruby/rest/trunking/v1/trunk/ip_access_control_list.rb +24 -11
  207. data/lib/twilio-ruby/rest/trunking/v1/trunk/origination_url.rb +29 -16
  208. data/lib/twilio-ruby/rest/trunking/v1/trunk/phone_number.rb +24 -11
  209. data/lib/twilio-ruby/rest/video.rb +4 -4
  210. data/lib/twilio-ruby/rest/video/v1/recording.rb +23 -10
  211. data/lib/twilio-ruby/rest/video/v1/room.rb +29 -16
  212. data/lib/twilio-ruby/rest/video/v1/room/recording.rb +20 -7
  213. data/lib/twilio-ruby/rest/wireless.rb +6 -6
  214. data/lib/twilio-ruby/rest/wireless/v1/command.rb +26 -13
  215. data/lib/twilio-ruby/rest/wireless/v1/rate_plan.rb +30 -17
  216. data/lib/twilio-ruby/rest/wireless/v1/sim.rb +27 -14
  217. data/lib/twilio-ruby/rest/wireless/v1/sim/usage_record.rb +20 -7
  218. data/lib/twilio-ruby/twiml/messaging_response.rb +147 -0
  219. data/lib/twilio-ruby/twiml/twiml.rb +77 -0
  220. data/lib/twilio-ruby/twiml/voice_response.rb +925 -0
  221. data/lib/twilio-ruby/version.rb +1 -1
  222. data/spec/holodeck/hologram.rb +0 -1
  223. data/spec/jwt/access_token_spec.rb +126 -182
  224. data/spec/jwt/client_capability_spec.rb +104 -0
  225. data/spec/jwt/task_router_spec.rb +164 -97
  226. data/spec/twiml/messaging_response_spec.rb +62 -0
  227. data/spec/twiml/voice_response_spec.rb +452 -0
  228. data/twilio-ruby.gemspec +4 -2
  229. metadata +36 -23
  230. data/lib/twilio-ruby/compatibility/v2010/account/call/feedback.rb +0 -15
  231. data/lib/twilio-ruby/compatibility/v2010/account/queue/member.rb +0 -23
  232. data/lib/twilio-ruby/jwt/capability.rb +0 -64
  233. data/lib/twilio-ruby/twiml/response.rb +0 -16
  234. data/spec/jwt/capability_spec.rb +0 -186
  235. data/spec/jwt/task_router_taskqueue_spec.rb +0 -111
  236. data/spec/jwt/task_router_worker_spec.rb +0 -146
  237. data/spec/jwt/task_router_workspace_spec.rb +0 -110
  238. data/spec/twiml/twiml_response_spec.rb +0 -47
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d37f870e4dc93660634ee065e3d21804db16b380
4
- data.tar.gz: 95b5156b35166aaa495bfd9955a2af205568f072
3
+ metadata.gz: a2c8e79906d6c2b919f79c6c601c75481bb66342
4
+ data.tar.gz: e69a750e5a9a7c9d53bc6b189aee4e6c7c63101f
5
5
  SHA512:
6
- metadata.gz: 5adc69016e3495368a5df9d08b39b61102317b5fdb86fad9689b34bb22c9f12387b0322b240c46e24efc18695b54afafbbd124af07b0b9adc2451ea1ab4d0025
7
- data.tar.gz: 162a06e0b7d8e35971977cdff185219f17b824bd346bdc6e4c884fba909741e3552b92fd8ce2e6f29b879033c91354d939b8048faa5b257761f46a19e4ce58f1
6
+ metadata.gz: 7e875e788a5b26e9977069c54ff33cf15d08164561c221ecd1326819c97dcf795c20f5e7a8bd9c2f04f9d315511f7e6cffa1a1e01c536a05a7b08d8c0ca50d7b
7
+ data.tar.gz: 3aac6f5e112aae1202b67e5a71b21c84900d57fb735ee537a4eae948200f521f519908e686e247abeadfea223a60da130a0ce03dea56852a2ab6a5836c774d49
data/Makefile CHANGED
@@ -7,6 +7,9 @@ test-install:
7
7
  test:
8
8
  bundle exec rake spec
9
9
 
10
+ docs:
11
+ yard doc
12
+
10
13
  authors:
11
14
  echo "Authors\n=======\n\nA huge thanks to all of our contributors:\n\n" > AUTHORS.md
12
15
  git log --raw | grep "^Author: " | cut -d ' ' -f2- | cut -d '<' -f1 | sed 's/^/- /' | sort | uniq >> AUTHORS.md
data/lib/twilio-ruby.rb CHANGED
@@ -1,24 +1,28 @@
1
1
  require 'net/http'
2
2
  require 'net/https'
3
- require 'builder'
3
+ require 'libxml'
4
4
  require 'cgi'
5
5
  require 'openssl'
6
6
  require 'base64'
7
7
  require 'forwardable'
8
8
  require 'jwt'
9
9
  require 'time'
10
+ require 'json'
10
11
 
11
12
  require 'twilio-ruby/version' unless defined?(Twilio::VERSION)
12
13
  require 'rack/twilio_webhook_authentication'
13
14
 
14
15
  require 'twilio-ruby/util'
16
+ require 'twilio-ruby/jwt/jwt'
15
17
  require 'twilio-ruby/jwt/access_token'
16
- require 'twilio-ruby/jwt/capability'
18
+ require 'twilio-ruby/jwt/client_capability'
17
19
  require 'twilio-ruby/jwt/task_router'
18
20
  require 'twilio-ruby/security/request_validator'
19
21
  require 'twilio-ruby/util/configuration'
20
22
 
21
- require 'twilio-ruby/twiml/response'
23
+ require 'twilio-ruby/twiml/twiml'
24
+ require 'twilio-ruby/twiml/voice_response'
25
+ require 'twilio-ruby/twiml/messaging_response'
22
26
 
23
27
  Dir[File.dirname(__FILE__) + '/twilio-ruby/http/**/*.rb'].each do |file|
24
28
  require file
@@ -15,7 +15,11 @@ module Twilio
15
15
  end
16
16
 
17
17
  def request(method, uri, params={}, data={}, headers={}, auth=nil, timeout=nil)
18
- url = self.absolute_url(uri)
18
+ if uri.match(/^http/)
19
+ url = uri
20
+ else
21
+ url = self.absolute_url(uri)
22
+ end
19
23
 
20
24
  @client.request(
21
25
  @host,
@@ -50,9 +50,9 @@ module Twilio
50
50
 
51
51
  def previous_page_url
52
52
  if @payload['meta'] && @payload['meta']['previous_page_url']
53
- return URI.parse(@payload['meta']['previous_page_url']).request_uri
53
+ return @version.domain.absolute_url(URI.parse(@payload['meta']['previous_page_url']).request_uri)
54
54
  elsif @payload['previous_page_uri']
55
- return @payload['previous_page_uri']
55
+ return @version.domain.absolute_url(@payload['previous_page_uri'])
56
56
  end
57
57
 
58
58
  nil
@@ -60,9 +60,9 @@ module Twilio
60
60
 
61
61
  def next_page_url
62
62
  if @payload['meta'] && @payload['meta']['next_page_url']
63
- return URI.parse(@payload['meta']['next_page_url']).request_uri
63
+ return @version.domain.absolute_url(URI.parse(@payload['meta']['next_page_url']).request_uri)
64
64
  elsif @payload['next_page_uri']
65
- return @payload['next_page_uri']
65
+ return @version.domain.absolute_url(@payload['next_page_uri'])
66
66
  end
67
67
 
68
68
  nil
@@ -1,6 +1,8 @@
1
1
  module Twilio
2
2
  def self.serialize_iso8601(date)
3
- if date
3
+ if date.eql?(:unset)
4
+ date
5
+ elsif date
4
6
  date.iso8601
5
7
  end
6
8
  end
@@ -19,7 +21,6 @@ module Twilio
19
21
 
20
22
  def self.serialize_object(object)
21
23
  if object.is_a?(Hash) or object.is_a?(Array)
22
- require 'json'
23
24
  JSON.generate(object)
24
25
  else
25
26
  object
@@ -0,0 +1,7 @@
1
+ module Twilio
2
+ class Values
3
+ def self.of(hash)
4
+ hash.delete_if { |_,v| v.eql?(:unset)}
5
+ end
6
+ end
7
+ end
@@ -1,7 +1,6 @@
1
1
  module Twilio
2
2
  module REST
3
3
  class Version
4
- MAX_PAGE_SIZE = 1000
5
4
 
6
5
  attr_accessor :domain
7
6
 
@@ -12,11 +11,10 @@ module Twilio
12
11
  @page = page
13
12
  @limit = limit
14
13
  @page_limit = page_limit
15
-
16
14
  end
17
15
 
18
16
  def each
19
- current_record = 1
17
+ current_record = 0
20
18
  current_page = 1
21
19
 
22
20
  while @page
@@ -50,7 +48,7 @@ module Twilio
50
48
  def request(method, uri, params={}, data={}, headers={}, auth=nil, timeout=nil)
51
49
  url = self.relative_uri(uri)
52
50
  params = params.delete_if {|k,v| v.nil?}
53
- data = data.delete_if {|k,v| v.nil?}
51
+ data = data
54
52
  @domain.request(
55
53
  method,
56
54
  url,
@@ -74,7 +72,7 @@ module Twilio
74
72
  code = response.body['code']
75
73
  end
76
74
 
77
- return Twilio::REST::RestError.new(message, code, response.status_code)
75
+ Twilio::REST::RestError.new(message, code, response.status_code)
78
76
  end
79
77
 
80
78
  def fetch(method, uri, params={}, data={}, headers={}, auth=nil, timeout=nil)
@@ -136,7 +134,7 @@ module Twilio
136
134
 
137
135
  unless limit.nil?
138
136
  # If there is no user-specified page_size, pick the most network efficient size
139
- page_size ||= [limit, MAX_PAGE_SIZE].min
137
+ page_size = limit
140
138
  page_limit = (limit / page_size.to_f).ceil
141
139
  end
142
140
 
@@ -1,221 +1,247 @@
1
1
  module Twilio
2
2
  module JWT
3
- class AccessToken
3
+ class AccessToken < BaseJWT
4
4
  attr_accessor :account_sid,
5
5
  :signing_key_id,
6
6
  :secret,
7
- :ttl,
8
7
  :identity,
9
- :nbf
10
-
11
- def initialize(account_sid, key_sid, secret, ttl=3600, identity=nil, nbf=nil)
8
+ :grants,
9
+ :nbf,
10
+ :ttl,
11
+ :valid_until
12
+
13
+ def initialize(account_sid, signing_key_sid, secret, grants=[], identity: nil, nbf: nil, ttl: 3600, valid_until: nil)
14
+ super(secret_key: secret,
15
+ issuer: signing_key_sid,
16
+ subject: account_sid,
17
+ nbf: nbf,
18
+ ttl: ttl,
19
+ valid_until: valid_until)
12
20
  @account_sid = account_sid
13
- @key_sid = key_sid
21
+ @signing_key_sid = signing_key_sid
14
22
  @secret = secret
15
- @ttl = ttl
16
23
  @identity = identity
17
24
  @nbf = nbf
18
- @grants = []
25
+ @grants = grants
26
+ @ttl = ttl
27
+ @valid_until = valid_until
19
28
  end
20
29
 
21
30
  def add_grant(grant)
22
31
  @grants.push(grant)
23
32
  end
24
33
 
25
- def to_jwt(algorithm='HS256')
26
- now = Time.now.to_i - 1
27
- headers = {
28
- cty: 'twilio-fpa;v=1'
29
- }
34
+ def to_s
35
+ to_jwt
36
+ end
30
37
 
38
+ protected
39
+ def _generate_payload
40
+ now = Time.now.to_i
31
41
  grants = {}
32
42
  if @identity
33
43
  grants[:identity] = @identity
34
44
  end
35
45
 
36
- @grants.each { |grant| grants[grant.key] = grant.payload }
46
+ @grants.each { |grant| grants[grant._key] = grant._generate_payload } unless @grants.empty?
37
47
 
38
48
  payload = {
39
- jti: "#{@key_sid}-#{now}",
40
- iss: @key_sid,
41
- sub: @account_sid,
42
- exp: now + @ttl,
49
+ jti: "#{@signing_key_sid}-#{now}",
43
50
  grants: grants
44
51
  }
45
52
 
46
- payload[:nbf] = @nbf unless @nbf.nil?
47
-
48
- ::JWT.encode payload, @secret, algorithm, headers
53
+ payload
49
54
  end
50
55
 
51
- def to_s
52
- to_jwt
56
+ protected
57
+ def _generate_headers
58
+ headers = {
59
+ cty: 'twilio-fpa;v=1'
60
+ }
61
+
62
+ headers
53
63
  end
64
+ end
54
65
 
55
- class IpMessagingGrant
56
- attr_accessor :service_sid,
57
- :endpoint_id,
58
- :deployment_role_sid,
59
- :push_credential_sid
66
+ module AccessTokenGrant
67
+ def _key
68
+ fail NotImplementedError
69
+ end
60
70
 
61
- def key
62
- 'ip_messaging'
63
- end
71
+ def _generate_payload
72
+ fail NotImplementedError
73
+ end
64
74
 
65
- def payload
66
- payload = {}
75
+ end
67
76
 
68
- if service_sid
69
- payload[:service_sid] = service_sid
70
- end
77
+ class IpMessagingGrant
78
+ include AccessTokenGrant
79
+ attr_accessor :service_sid,
80
+ :endpoint_id,
81
+ :deployment_role_sid,
82
+ :push_credential_sid
71
83
 
72
- if endpoint_id
73
- payload[:endpoint_id] = endpoint_id
74
- end
75
84
 
76
- if deployment_role_sid
77
- payload[:deployment_role_sid] = deployment_role_sid
78
- end
85
+ def _key
86
+ 'ip_messaging'
87
+ end
79
88
 
80
- if push_credential_sid
81
- payload[:push_credential_sid] = push_credential_sid
82
- end
89
+ def _generate_payload
90
+ payload = {}
83
91
 
84
- payload
92
+ if service_sid
93
+ payload[:service_sid] = service_sid
85
94
  end
86
95
 
87
- end
96
+ if endpoint_id
97
+ payload[:endpoint_id] = endpoint_id
98
+ end
88
99
 
89
- class VoiceGrant
90
- attr_accessor :outgoing_application_sid,
91
- :outgoing_application_params,
92
- :push_credential_sid,
93
- :endpoint_id
100
+ if deployment_role_sid
101
+ payload[:deployment_role_sid] = deployment_role_sid
102
+ end
94
103
 
95
- def key
96
- 'voice'
104
+ if push_credential_sid
105
+ payload[:push_credential_sid] = push_credential_sid
97
106
  end
98
107
 
99
- def payload
100
- payload = {}
108
+ payload
109
+ end
101
110
 
102
- if outgoing_application_sid
103
- outgoing = {}
104
- outgoing[:application_sid] = outgoing_application_sid
105
- if outgoing_application_params
106
- outgoing[:params] = outgoing_application_params
107
- end
111
+ end
108
112
 
109
- payload[:outgoing] = outgoing
110
- end
113
+ class VoiceGrant
114
+ include AccessTokenGrant
115
+ attr_accessor :outgoing_application_sid,
116
+ :outgoing_application_params,
117
+ :push_credential_sid,
118
+ :endpoint_id
111
119
 
112
- if push_credential_sid
113
- payload[:push_credential_sid] = push_credential_sid
114
- end
120
+ def _key
121
+ 'voice'
122
+ end
123
+
124
+ def _generate_payload
125
+ payload = {}
115
126
 
116
- if endpoint_id
117
- payload[:endpoint_id] = endpoint_id
127
+ if outgoing_application_sid
128
+ outgoing = {}
129
+ outgoing[:application_sid] = outgoing_application_sid
130
+ if outgoing_application_params
131
+ outgoing[:params] = outgoing_application_params
118
132
  end
119
133
 
120
- payload
134
+ payload[:outgoing] = outgoing
121
135
  end
122
- end
123
136
 
124
- class SyncGrant
125
- attr_accessor :service_sid,
126
- :endpoint_id
127
-
128
- def key
129
- 'data_sync'
137
+ if push_credential_sid
138
+ payload[:push_credential_sid] = push_credential_sid
139
+ end
130
140
 
141
+ if endpoint_id
142
+ payload[:endpoint_id] = endpoint_id
131
143
  end
132
144
 
133
- def payload
134
- payload = {}
145
+ payload
146
+ end
147
+ end
135
148
 
136
- if service_sid
137
- payload['service_sid'] = service_sid
138
- end
139
- if endpoint_id
140
- payload['endpoint_id'] = endpoint_id
141
- end
149
+ class SyncGrant
150
+ include AccessTokenGrant
151
+ attr_accessor :service_sid,
152
+ :endpoint_id
153
+
154
+ def _key
155
+ 'data_sync'
142
156
 
143
- payload
144
- end
145
157
  end
146
158
 
147
- class ConversationsGrant
148
- attr_accessor :configuration_profile_sid
159
+ def _generate_payload
160
+ payload = {}
149
161
 
150
- def key
151
- 'rtc'
162
+ if service_sid
163
+ payload['service_sid'] = service_sid
164
+ end
165
+ if endpoint_id
166
+ payload['endpoint_id'] = endpoint_id
152
167
  end
153
168
 
154
- def payload
155
- payload = {}
169
+ payload
170
+ end
171
+ end
156
172
 
157
- if configuration_profile_sid
158
- payload[:configuration_profile_sid] = configuration_profile_sid
159
- end
173
+ class ConversationsGrant
174
+ include AccessTokenGrant
175
+ attr_accessor :configuration_profile_sid
160
176
 
161
- payload
162
- end
177
+ def _key
178
+ 'rtc'
179
+ end
163
180
 
164
- class << self
165
- extend Gem::Deprecate
166
- deprecate :new, 'VideoGrant.new', 2017, 5
167
- end
168
-
181
+ def _generate_payload
182
+ payload = {}
169
183
 
184
+ if configuration_profile_sid
185
+ payload[:configuration_profile_sid] = configuration_profile_sid
186
+ end
187
+
188
+ payload
170
189
  end
171
190
 
172
- class VideoGrant
173
- attr_accessor :room
191
+ class << self
192
+ extend Gem::Deprecate
193
+ deprecate :new, 'VideoGrant.new', 2017, 5
194
+ end
174
195
 
175
- def key
176
- 'video'
177
- end
178
196
 
179
- def payload
180
- payload = {}
197
+ end
181
198
 
182
- if room
183
- payload[:room] = room
184
- end
199
+ class VideoGrant
200
+ include AccessTokenGrant
201
+ attr_accessor :room
185
202
 
186
- payload
187
- end
203
+ def _key
204
+ 'video'
188
205
  end
189
206
 
190
- class TaskRouterGrant
191
- attr_accessor :workspace_sid,
192
- :worker_sid,
193
- :role
207
+ def _generate_payload
208
+ payload = {}
194
209
 
195
- def key
196
- 'task_router'
210
+ if room
211
+ payload[:room] = room
197
212
  end
198
213
 
199
- def payload
200
- payload = {}
214
+ payload
215
+ end
216
+ end
201
217
 
202
- if workspace_sid
203
- payload[:workspace_sid] = workspace_sid
204
- end
218
+ class TaskRouterGrant
219
+ include AccessTokenGrant
220
+ attr_accessor :workspace_sid,
221
+ :worker_sid,
222
+ :role
205
223
 
206
- if worker_sid
207
- payload[:worker_sid] = worker_sid
208
- end
224
+ def _key
225
+ 'task_router'
226
+ end
209
227
 
210
- if role
211
- payload[:role] = role
212
- end
228
+ def _generate_payload
229
+ payload = {}
213
230
 
214
- payload
231
+ if workspace_sid
232
+ payload[:workspace_sid] = workspace_sid
215
233
  end
216
- end
217
234
 
235
+ if worker_sid
236
+ payload[:worker_sid] = worker_sid
237
+ end
238
+
239
+ if role
240
+ payload[:role] = role
241
+ end
218
242
 
243
+ payload
244
+ end
219
245
  end
220
246
  end
221
247
  end