twilio-ruby 5.0.0.alpha1 → 5.0.0.rc2

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 (493) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +11 -2
  3. data/AUTHORS.md +32 -46
  4. data/CHANGES.md +1 -124
  5. data/Gemfile +2 -2
  6. data/LICENSE.md +12 -12
  7. data/Makefile +2 -15
  8. data/README.md +37 -29
  9. data/Rakefile +0 -54
  10. data/examples/examples.rb +57 -46
  11. data/examples/{print_call_log.rb → print-call-log.rb} +7 -7
  12. data/lib/rack/twilio_webhook_authentication.rb +6 -5
  13. data/lib/twilio-ruby.rb +16 -17
  14. data/lib/twilio-ruby/compatibility/v2010/account/call/feedback.rb +15 -0
  15. data/lib/twilio-ruby/compatibility/v2010/account/queue/member.rb +23 -0
  16. data/lib/twilio-ruby/framework/domain.rb +2 -2
  17. data/lib/twilio-ruby/framework/exception.rb +14 -0
  18. data/lib/twilio-ruby/framework/helper.rb +1 -1
  19. data/lib/twilio-ruby/framework/page.rb +30 -28
  20. data/lib/twilio-ruby/framework/resource.rb +2 -2
  21. data/lib/twilio-ruby/framework/serialize.rb +7 -58
  22. data/lib/twilio-ruby/framework/twilio_response.rb +1 -1
  23. data/lib/twilio-ruby/framework/version.rb +48 -43
  24. data/lib/twilio-ruby/http/http_client.rb +8 -8
  25. data/lib/twilio-ruby/rest/api.rb +33 -141
  26. data/lib/twilio-ruby/rest/api/v2010.rb +31 -50
  27. data/lib/twilio-ruby/rest/api/v2010/account.rb +239 -389
  28. data/lib/twilio-ruby/rest/api/v2010/account/address.rb +122 -145
  29. data/lib/twilio-ruby/rest/api/v2010/account/address/dependent_phone_number.rb +56 -76
  30. data/lib/twilio-ruby/rest/api/v2010/account/application.rb +127 -144
  31. data/lib/twilio-ruby/rest/api/v2010/account/authorized_connect_app.rb +83 -85
  32. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number.rb +97 -92
  33. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/local.rb +77 -142
  34. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/mobile.rb +77 -142
  35. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/toll_free.rb +77 -142
  36. data/lib/twilio-ruby/rest/api/v2010/account/call.rb +184 -232
  37. data/lib/twilio-ruby/rest/api/v2010/account/call/feedback.rb +84 -73
  38. data/lib/twilio-ruby/rest/api/v2010/account/call/feedback_summary.rb +80 -85
  39. data/lib/twilio-ruby/rest/api/v2010/account/call/notification.rb +115 -126
  40. data/lib/twilio-ruby/rest/api/v2010/account/call/recording.rb +99 -114
  41. data/lib/twilio-ruby/rest/api/v2010/account/conference.rb +112 -150
  42. data/lib/twilio-ruby/rest/api/v2010/account/conference/participant.rb +109 -228
  43. data/lib/twilio-ruby/rest/api/v2010/account/connect_app.rb +98 -101
  44. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number.rb +164 -287
  45. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/local.rb +90 -152
  46. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/mobile.rb +90 -152
  47. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/toll_free.rb +90 -152
  48. data/lib/twilio-ruby/rest/api/v2010/account/message.rb +138 -195
  49. data/lib/twilio-ruby/rest/api/v2010/account/message/media.rb +100 -90
  50. data/lib/twilio-ruby/rest/api/v2010/account/notification.rb +106 -118
  51. data/lib/twilio-ruby/rest/api/v2010/account/outgoing_caller_id.rb +105 -96
  52. data/lib/twilio-ruby/rest/api/v2010/account/queue.rb +117 -119
  53. data/lib/twilio-ruby/rest/api/v2010/account/queue/member.rb +95 -84
  54. data/lib/twilio-ruby/rest/api/v2010/account/recording.rb +103 -194
  55. data/lib/twilio-ruby/rest/api/v2010/account/recording/transcription.rb +93 -100
  56. data/lib/twilio-ruby/rest/api/v2010/account/sandbox.rb +304 -0
  57. data/lib/twilio-ruby/rest/api/v2010/account/sip.rb +30 -42
  58. data/lib/twilio-ruby/rest/api/v2010/account/sip/credential_list.rb +113 -111
  59. data/lib/twilio-ruby/rest/api/v2010/account/sip/credential_list/credential.rb +115 -104
  60. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain.rb +133 -159
  61. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/credential_list_mapping.rb +96 -94
  62. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/ip_access_control_list_mapping.rb +96 -94
  63. data/lib/twilio-ruby/rest/api/v2010/account/sip/ip_access_control_list.rb +114 -111
  64. data/lib/twilio-ruby/rest/api/v2010/account/sip/ip_access_control_list/ip_address.rb +113 -108
  65. data/lib/twilio-ruby/rest/api/v2010/account/sms.rb +140 -0
  66. data/lib/twilio-ruby/rest/api/v2010/account/sms/short_code.rb +431 -0
  67. data/lib/twilio-ruby/rest/api/v2010/account/sms/sms_message.rb +467 -0
  68. data/lib/twilio-ruby/rest/api/v2010/account/token.rb +34 -41
  69. data/lib/twilio-ruby/rest/api/v2010/account/transcription.rb +90 -98
  70. data/lib/twilio-ruby/rest/api/v2010/account/usage.rb +24 -21
  71. data/lib/twilio-ruby/rest/api/v2010/account/usage/record.rb +118 -139
  72. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/all_time.rb +62 -106
  73. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/daily.rb +62 -106
  74. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/last_month.rb +62 -106
  75. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/monthly.rb +62 -106
  76. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/this_month.rb +62 -106
  77. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/today.rb +62 -106
  78. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/yearly.rb +62 -106
  79. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/yesterday.rb +62 -106
  80. data/lib/twilio-ruby/rest/api/v2010/account/usage/trigger.rb +124 -130
  81. data/lib/twilio-ruby/rest/api/v2010/account/validation_request.rb +31 -35
  82. data/lib/twilio-ruby/rest/client.rb +88 -249
  83. data/lib/twilio-ruby/rest/{accounts.rb → conversations.rb} +14 -16
  84. data/lib/twilio-ruby/rest/conversations/v1.rb +35 -0
  85. data/lib/twilio-ruby/rest/conversations/v1/conversation.rb +270 -0
  86. data/lib/twilio-ruby/rest/{notify/v1/service/segment.rb → conversations/v1/conversation/completed.rb} +101 -101
  87. data/lib/twilio-ruby/rest/{preview/bulk_exports/export/day.rb → conversations/v1/conversation/in_progress.rb} +109 -95
  88. data/lib/twilio-ruby/rest/{messaging/v1/service/phone_number.rb → conversations/v1/conversation/participant.rb} +171 -178
  89. data/lib/twilio-ruby/rest/ip_messaging.rb +11 -26
  90. data/lib/twilio-ruby/rest/ip_messaging/v1.rb +7 -19
  91. data/lib/twilio-ruby/rest/ip_messaging/v1/credential.rb +112 -113
  92. data/lib/twilio-ruby/rest/ip_messaging/v1/service.rb +131 -542
  93. data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel.rb +132 -194
  94. data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel/member.rb +103 -159
  95. data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel/message.rb +102 -183
  96. data/lib/twilio-ruby/rest/ip_messaging/v1/service/role.rb +112 -107
  97. data/lib/twilio-ruby/rest/ip_messaging/v1/service/user.rb +113 -186
  98. data/lib/twilio-ruby/rest/lookups.rb +8 -12
  99. data/lib/twilio-ruby/rest/lookups/v1.rb +7 -13
  100. data/lib/twilio-ruby/rest/lookups/v1/phone_number.rb +54 -71
  101. data/lib/twilio-ruby/rest/monitor.rb +11 -19
  102. data/lib/twilio-ruby/rest/monitor/v1.rb +7 -19
  103. data/lib/twilio-ruby/rest/monitor/v1/alert.rb +133 -121
  104. data/lib/twilio-ruby/rest/monitor/v1/event.rb +127 -116
  105. data/lib/twilio-ruby/rest/pricing.rb +11 -17
  106. data/lib/twilio-ruby/rest/pricing/v1.rb +9 -21
  107. data/lib/twilio-ruby/rest/pricing/v1/messaging.rb +23 -27
  108. data/lib/twilio-ruby/rest/pricing/v1/messaging/country.rb +74 -71
  109. data/lib/twilio-ruby/rest/pricing/v1/phone_number.rb +23 -27
  110. data/lib/twilio-ruby/rest/pricing/v1/phone_number/country.rb +79 -69
  111. data/lib/twilio-ruby/rest/pricing/v1/voice.rb +27 -33
  112. data/lib/twilio-ruby/rest/pricing/v1/voice/country.rb +74 -71
  113. data/lib/twilio-ruby/rest/pricing/v1/voice/number.rb +52 -47
  114. data/lib/twilio-ruby/rest/taskrouter.rb +8 -12
  115. data/lib/twilio-ruby/rest/taskrouter/v1.rb +5 -11
  116. data/lib/twilio-ruby/rest/taskrouter/v1/workspace.rb +153 -260
  117. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/activity.rb +114 -115
  118. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/event.rb +101 -105
  119. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task.rb +139 -216
  120. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task/reservation.rb +106 -194
  121. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue.rb +145 -187
  122. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queue_statistics.rb +65 -57
  123. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queues_statistics.rb +57 -62
  124. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker.rb +135 -217
  125. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/worker_statistics.rb +60 -54
  126. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/workers_statistics.rb +56 -52
  127. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workflow.rb +123 -140
  128. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workflow/workflow_statistics.rb +61 -57
  129. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workspace_statistics.rb +72 -52
  130. data/lib/twilio-ruby/rest/trunking.rb +8 -12
  131. data/lib/twilio-ruby/rest/trunking/v1.rb +5 -11
  132. data/lib/twilio-ruby/rest/trunking/v1/trunk.rb +134 -157
  133. data/lib/twilio-ruby/rest/trunking/v1/trunk/credential_list.rb +93 -89
  134. data/lib/twilio-ruby/rest/trunking/v1/trunk/ip_access_control_list.rb +93 -89
  135. data/lib/twilio-ruby/rest/trunking/v1/trunk/origination_url.rb +111 -114
  136. data/lib/twilio-ruby/rest/trunking/v1/trunk/phone_number.rb +112 -146
  137. data/lib/twilio-ruby/task_router.rb +0 -0
  138. data/lib/twilio-ruby/task_router/capability.rb +87 -0
  139. data/lib/twilio-ruby/twiml/response.rb +16 -0
  140. data/lib/twilio-ruby/util.rb +1 -1
  141. data/lib/twilio-ruby/util/access_token.rb +70 -0
  142. data/lib/twilio-ruby/util/capability.rb +64 -0
  143. data/lib/twilio-ruby/util/client_config.rb +29 -0
  144. data/lib/twilio-ruby/{security → util}/request_validator.rb +4 -21
  145. data/lib/twilio-ruby/version.rb +1 -1
  146. data/spec/holodeck/holodeck.rb +6 -6
  147. data/spec/holodeck/hologram.rb +1 -0
  148. data/spec/integration/api/v2010/account/address/dependent_phone_number_spec.rb +8 -8
  149. data/spec/integration/api/v2010/account/address_spec.rb +29 -37
  150. data/spec/integration/api/v2010/account/application_spec.rb +29 -29
  151. data/spec/integration/api/v2010/account/authorized_connect_app_spec.rb +13 -13
  152. data/spec/integration/api/v2010/account/available_phone_number/local_spec.rb +8 -9
  153. data/spec/integration/api/v2010/account/available_phone_number/mobile_spec.rb +8 -9
  154. data/spec/integration/api/v2010/account/available_phone_number/toll_free_spec.rb +8 -9
  155. data/spec/integration/api/v2010/account/available_phone_number_spec.rb +13 -13
  156. data/spec/integration/api/v2010/account/call/feedback_spec.rb +17 -17
  157. data/spec/integration/api/v2010/account/call/feedback_summary_spec.rb +19 -19
  158. data/spec/integration/api/v2010/account/call/notification_spec.rb +18 -18
  159. data/spec/integration/api/v2010/account/call/recording_spec.rb +20 -32
  160. data/spec/integration/api/v2010/account/call_spec.rb +29 -29
  161. data/spec/integration/api/v2010/account/conference/participant_spec.rb +35 -107
  162. data/spec/integration/api/v2010/account/conference_spec.rb +19 -58
  163. data/spec/integration/api/v2010/account/connect_app_spec.rb +18 -18
  164. data/spec/integration/api/v2010/account/incoming_phone_number/local_spec.rb +14 -16
  165. data/spec/integration/api/v2010/account/incoming_phone_number/mobile_spec.rb +14 -16
  166. data/spec/integration/api/v2010/account/incoming_phone_number/toll_free_spec.rb +14 -16
  167. data/spec/integration/api/v2010/account/incoming_phone_number_spec.rb +29 -41
  168. data/spec/integration/api/v2010/account/message/media_spec.rb +18 -18
  169. data/spec/integration/api/v2010/account/message_spec.rb +35 -41
  170. data/spec/integration/api/v2010/account/notification_spec.rb +18 -18
  171. data/spec/integration/api/v2010/account/outgoing_caller_id_spec.rb +23 -23
  172. data/spec/integration/api/v2010/account/queue/member_spec.rb +18 -18
  173. data/spec/integration/api/v2010/account/queue_spec.rb +32 -35
  174. data/spec/integration/api/v2010/account/recording/transcription_spec.rb +18 -18
  175. data/spec/integration/api/v2010/account/recording_spec.rb +21 -42
  176. data/spec/integration/api/v2010/account/sandbox_spec.rb +99 -0
  177. data/spec/integration/api/v2010/account/sip/credential_list/credential_spec.rb +36 -32
  178. data/spec/integration/api/v2010/account/sip/credential_list_spec.rb +29 -29
  179. data/spec/integration/api/v2010/account/sip/domain/credential_list_mapping_spec.rb +24 -24
  180. data/spec/integration/api/v2010/account/sip/domain/ip_access_control_list_mapping_spec.rb +24 -24
  181. data/spec/integration/api/v2010/account/sip/domain_spec.rb +29 -29
  182. data/spec/integration/api/v2010/account/sip/ip_access_control_list/ip_address_spec.rb +36 -32
  183. data/spec/integration/api/v2010/account/sip/ip_access_control_list_spec.rb +29 -29
  184. data/spec/integration/api/v2010/account/sip_spec.rb +1 -1
  185. data/spec/integration/api/v2010/account/{short_code_spec.rb → sms/short_code_spec.rb} +25 -18
  186. data/spec/integration/api/v2010/account/sms/sms_message_spec.rb +275 -0
  187. data/spec/integration/{accounts/v1/credential_spec.rb → api/v2010/account/sms_spec.rb} +2 -2
  188. data/spec/integration/api/v2010/account/token_spec.rb +7 -7
  189. data/spec/integration/api/v2010/account/transcription_spec.rb +18 -18
  190. data/spec/integration/api/v2010/account/usage/record/all_time_spec.rb +8 -8
  191. data/spec/integration/api/v2010/account/usage/record/daily_spec.rb +8 -8
  192. data/spec/integration/api/v2010/account/usage/record/last_month_spec.rb +8 -8
  193. data/spec/integration/api/v2010/account/usage/record/monthly_spec.rb +8 -8
  194. data/spec/integration/api/v2010/account/usage/record/this_month_spec.rb +8 -8
  195. data/spec/integration/api/v2010/account/usage/record/today_spec.rb +8 -8
  196. data/spec/integration/api/v2010/account/usage/record/yearly_spec.rb +8 -8
  197. data/spec/integration/api/v2010/account/usage/record/yesterday_spec.rb +8 -8
  198. data/spec/integration/api/v2010/account/usage/record_spec.rb +8 -8
  199. data/spec/integration/api/v2010/account/usage/trigger_spec.rb +32 -32
  200. data/spec/integration/api/v2010/account/usage_spec.rb +1 -1
  201. data/spec/integration/api/v2010/account/validation_request_spec.rb +4 -24
  202. data/spec/integration/api/v2010/account_spec.rb +28 -24
  203. data/spec/integration/conversations/v1/conversation/completed_spec.rb +89 -0
  204. data/spec/integration/conversations/v1/conversation/in_progress_spec.rb +89 -0
  205. data/spec/integration/conversations/v1/conversation/participant_spec.rb +174 -0
  206. data/spec/integration/conversations/v1/conversation_spec.rb +49 -0
  207. data/spec/integration/ip_messaging/v1/credential_spec.rb +24 -155
  208. data/spec/integration/ip_messaging/v1/service/channel/member_spec.rb +13 -217
  209. data/spec/integration/ip_messaging/v1/service/channel/message_spec.rb +10 -241
  210. data/spec/integration/ip_messaging/v1/service/channel_spec.rb +23 -205
  211. data/spec/integration/ip_messaging/v1/service/role_spec.rb +19 -184
  212. data/spec/integration/ip_messaging/v1/service/user_spec.rb +24 -194
  213. data/spec/integration/ip_messaging/v1/service_spec.rb +17 -229
  214. data/spec/integration/lookups/v1/phone_number_spec.rb +6 -17
  215. data/spec/integration/monitor/v1/alert_spec.rb +60 -60
  216. data/spec/integration/monitor/v1/event_spec.rb +13 -13
  217. data/spec/integration/pricing/v1/messaging/country_spec.rb +7 -103
  218. data/spec/integration/pricing/v1/messaging_spec.rb +1 -1
  219. data/spec/integration/pricing/v1/phone_number/country_spec.rb +13 -13
  220. data/spec/integration/pricing/v1/phone_number_spec.rb +1 -1
  221. data/spec/integration/pricing/v1/voice/country_spec.rb +13 -13
  222. data/spec/integration/pricing/v1/voice/number_spec.rb +6 -6
  223. data/spec/integration/pricing/v1/voice_spec.rb +1 -1
  224. data/spec/integration/taskrouter/v1/workspace/activity_spec.rb +38 -34
  225. data/spec/integration/taskrouter/v1/workspace/event_spec.rb +13 -13
  226. data/spec/integration/taskrouter/v1/workspace/task/reservation_spec.rb +24 -21
  227. data/spec/integration/taskrouter/v1/workspace/task_queue/task_queue_statistics_spec.rb +11 -13
  228. data/spec/integration/taskrouter/v1/workspace/task_queue/task_queues_statistics_spec.rb +17 -18
  229. data/spec/integration/taskrouter/v1/workspace/task_queue_spec.rb +41 -57
  230. data/spec/integration/taskrouter/v1/workspace/task_spec.rb +50 -113
  231. data/spec/integration/taskrouter/v1/workspace/worker/worker_statistics_spec.rb +6 -7
  232. data/spec/integration/taskrouter/v1/workspace/worker/workers_statistics_spec.rb +6 -7
  233. data/spec/integration/taskrouter/v1/workspace/worker_spec.rb +68 -96
  234. data/spec/integration/taskrouter/v1/workspace/workflow/workflow_statistics_spec.rb +12 -14
  235. data/spec/integration/taskrouter/v1/workspace/workflow_spec.rb +43 -54
  236. data/spec/integration/taskrouter/v1/workspace/workspace_statistics_spec.rb +9 -11
  237. data/spec/integration/taskrouter/v1/workspace_spec.rb +51 -71
  238. data/spec/integration/trunking/v1/trunk/credential_list_spec.rb +24 -24
  239. data/spec/integration/trunking/v1/trunk/ip_access_control_list_spec.rb +66 -66
  240. data/spec/integration/trunking/v1/trunk/origination_url_spec.rb +28 -28
  241. data/spec/integration/trunking/v1/trunk/phone_number_spec.rb +23 -23
  242. data/spec/integration/trunking/v1/trunk_spec.rb +28 -28
  243. data/spec/rack/twilio_webhook_authentication_spec.rb +23 -19
  244. data/spec/spec_helper.rb +2 -2
  245. data/spec/support/fakeweb.rb +1 -1
  246. data/spec/task_router_spec.rb +114 -0
  247. data/spec/util/access_token_spec.rb +103 -0
  248. data/spec/util/capability_spec.rb +186 -0
  249. data/spec/util/client_config_spec.rb +21 -0
  250. data/spec/{security → util}/request_validator_spec.rb +5 -5
  251. data/twilio-ruby.gemspec +8 -12
  252. metadata +90 -416
  253. data/.rubocop.yml +0 -21
  254. data/.rubocop_todo.yml +0 -187
  255. data/VERSIONS.md +0 -64
  256. data/lib/twilio-ruby/framework/error.rb +0 -30
  257. data/lib/twilio-ruby/framework/values.rb +0 -7
  258. data/lib/twilio-ruby/jwt/access_token.rb +0 -232
  259. data/lib/twilio-ruby/jwt/client_capability.rb +0 -102
  260. data/lib/twilio-ruby/jwt/jwt.rb +0 -50
  261. data/lib/twilio-ruby/jwt/task_router.rb +0 -174
  262. data/lib/twilio-ruby/rest/accounts/v1.rb +0 -39
  263. data/lib/twilio-ruby/rest/accounts/v1/credential.rb +0 -105
  264. data/lib/twilio-ruby/rest/accounts/v1/credential/public_key.rb +0 -370
  265. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/assigned_add_on.rb +0 -431
  266. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/assigned_add_on/assigned_add_on_extension.rb +0 -350
  267. data/lib/twilio-ruby/rest/api/v2010/account/key.rb +0 -336
  268. data/lib/twilio-ruby/rest/api/v2010/account/message/feedback.rb +0 -165
  269. data/lib/twilio-ruby/rest/api/v2010/account/new_key.rb +0 -153
  270. data/lib/twilio-ruby/rest/api/v2010/account/new_signing_key.rb +0 -153
  271. data/lib/twilio-ruby/rest/api/v2010/account/recording/add_on_result.rb +0 -397
  272. data/lib/twilio-ruby/rest/api/v2010/account/recording/add_on_result/payload.rb +0 -378
  273. data/lib/twilio-ruby/rest/api/v2010/account/short_code.rb +0 -430
  274. data/lib/twilio-ruby/rest/api/v2010/account/signing_key.rb +0 -336
  275. data/lib/twilio-ruby/rest/chat.rb +0 -59
  276. data/lib/twilio-ruby/rest/chat/v1.rb +0 -56
  277. data/lib/twilio-ruby/rest/chat/v1/credential.rb +0 -403
  278. data/lib/twilio-ruby/rest/chat/v1/service.rb +0 -935
  279. data/lib/twilio-ruby/rest/chat/v1/service/channel.rb +0 -554
  280. data/lib/twilio-ruby/rest/chat/v1/service/channel/invite.rb +0 -386
  281. data/lib/twilio-ruby/rest/chat/v1/service/channel/member.rb +0 -431
  282. data/lib/twilio-ruby/rest/chat/v1/service/channel/message.rb +0 -447
  283. data/lib/twilio-ruby/rest/chat/v1/service/role.rb +0 -396
  284. data/lib/twilio-ruby/rest/chat/v1/service/user.rb +0 -467
  285. data/lib/twilio-ruby/rest/chat/v1/service/user/user_channel.rb +0 -244
  286. data/lib/twilio-ruby/rest/chat/v2.rb +0 -56
  287. data/lib/twilio-ruby/rest/chat/v2/credential.rb +0 -403
  288. data/lib/twilio-ruby/rest/chat/v2/service.rb +0 -688
  289. data/lib/twilio-ruby/rest/chat/v2/service/channel.rb +0 -554
  290. data/lib/twilio-ruby/rest/chat/v2/service/channel/invite.rb +0 -386
  291. data/lib/twilio-ruby/rest/chat/v2/service/channel/member.rb +0 -431
  292. data/lib/twilio-ruby/rest/chat/v2/service/channel/message.rb +0 -447
  293. data/lib/twilio-ruby/rest/chat/v2/service/role.rb +0 -396
  294. data/lib/twilio-ruby/rest/chat/v2/service/user.rb +0 -467
  295. data/lib/twilio-ruby/rest/chat/v2/service/user/user_channel.rb +0 -244
  296. data/lib/twilio-ruby/rest/fax.rb +0 -44
  297. data/lib/twilio-ruby/rest/fax/v1.rb +0 -41
  298. data/lib/twilio-ruby/rest/fax/v1/fax.rb +0 -541
  299. data/lib/twilio-ruby/rest/fax/v1/fax/fax_media.rb +0 -326
  300. data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel/invite.rb +0 -386
  301. data/lib/twilio-ruby/rest/ip_messaging/v1/service/user/user_channel.rb +0 -244
  302. data/lib/twilio-ruby/rest/ip_messaging/v2.rb +0 -56
  303. data/lib/twilio-ruby/rest/ip_messaging/v2/credential.rb +0 -403
  304. data/lib/twilio-ruby/rest/ip_messaging/v2/service.rb +0 -688
  305. data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel.rb +0 -554
  306. data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel/invite.rb +0 -386
  307. data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel/member.rb +0 -431
  308. data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel/message.rb +0 -447
  309. data/lib/twilio-ruby/rest/ip_messaging/v2/service/role.rb +0 -396
  310. data/lib/twilio-ruby/rest/ip_messaging/v2/service/user.rb +0 -467
  311. data/lib/twilio-ruby/rest/ip_messaging/v2/service/user/user_channel.rb +0 -244
  312. data/lib/twilio-ruby/rest/messaging.rb +0 -44
  313. data/lib/twilio-ruby/rest/messaging/v1.rb +0 -41
  314. data/lib/twilio-ruby/rest/messaging/v1/service.rb +0 -637
  315. data/lib/twilio-ruby/rest/messaging/v1/service/alpha_sender.rb +0 -352
  316. data/lib/twilio-ruby/rest/messaging/v1/service/short_code.rb +0 -359
  317. data/lib/twilio-ruby/rest/notify.rb +0 -52
  318. data/lib/twilio-ruby/rest/notify/v1.rb +0 -56
  319. data/lib/twilio-ruby/rest/notify/v1/credential.rb +0 -403
  320. data/lib/twilio-ruby/rest/notify/v1/service.rb +0 -639
  321. data/lib/twilio-ruby/rest/notify/v1/service/binding.rb +0 -430
  322. data/lib/twilio-ruby/rest/notify/v1/service/notification.rb +0 -288
  323. data/lib/twilio-ruby/rest/notify/v1/service/user.rb +0 -445
  324. data/lib/twilio-ruby/rest/notify/v1/service/user/segment_memberships.rb +0 -254
  325. data/lib/twilio-ruby/rest/notify/v1/service/user/user_binding.rb +0 -434
  326. data/lib/twilio-ruby/rest/preview.rb +0 -145
  327. data/lib/twilio-ruby/rest/preview/bulk_exports.rb +0 -56
  328. data/lib/twilio-ruby/rest/preview/bulk_exports/export.rb +0 -203
  329. data/lib/twilio-ruby/rest/preview/bulk_exports/export_configuration.rb +0 -243
  330. data/lib/twilio-ruby/rest/preview/hosted_numbers.rb +0 -42
  331. data/lib/twilio-ruby/rest/preview/hosted_numbers/hosted_number_order.rb +0 -557
  332. data/lib/twilio-ruby/rest/preview/marketplace.rb +0 -58
  333. data/lib/twilio-ruby/rest/preview/marketplace/available_add_on.rb +0 -333
  334. data/lib/twilio-ruby/rest/preview/marketplace/available_add_on/available_add_on_extension.rb +0 -301
  335. data/lib/twilio-ruby/rest/preview/marketplace/installed_add_on.rb +0 -440
  336. data/lib/twilio-ruby/rest/preview/marketplace/installed_add_on/installed_add_on_extension.rb +0 -341
  337. data/lib/twilio-ruby/rest/preview/proxy.rb +0 -41
  338. data/lib/twilio-ruby/rest/preview/proxy/service.rb +0 -500
  339. data/lib/twilio-ruby/rest/preview/proxy/service/phone_number.rb +0 -359
  340. data/lib/twilio-ruby/rest/preview/proxy/service/session.rb +0 -536
  341. data/lib/twilio-ruby/rest/preview/proxy/service/session/interaction.rb +0 -429
  342. data/lib/twilio-ruby/rest/preview/proxy/service/session/participant.rb +0 -506
  343. data/lib/twilio-ruby/rest/preview/proxy/service/session/participant/message_interaction.rb +0 -452
  344. data/lib/twilio-ruby/rest/preview/proxy/service/short_code.rb +0 -359
  345. data/lib/twilio-ruby/rest/preview/sync.rb +0 -41
  346. data/lib/twilio-ruby/rest/preview/sync/service.rb +0 -504
  347. data/lib/twilio-ruby/rest/preview/sync/service/document.rb +0 -445
  348. data/lib/twilio-ruby/rest/preview/sync/service/document/document_permission.rb +0 -395
  349. data/lib/twilio-ruby/rest/preview/sync/service/sync_list.rb +0 -438
  350. data/lib/twilio-ruby/rest/preview/sync/service/sync_list/sync_list_item.rb +0 -430
  351. data/lib/twilio-ruby/rest/preview/sync/service/sync_list/sync_list_permission.rb +0 -395
  352. data/lib/twilio-ruby/rest/preview/sync/service/sync_map.rb +0 -438
  353. data/lib/twilio-ruby/rest/preview/sync/service/sync_map/sync_map_item.rb +0 -432
  354. data/lib/twilio-ruby/rest/preview/sync/service/sync_map/sync_map_permission.rb +0 -395
  355. data/lib/twilio-ruby/rest/preview/wireless.rb +0 -71
  356. data/lib/twilio-ruby/rest/preview/wireless/command.rb +0 -382
  357. data/lib/twilio-ruby/rest/preview/wireless/rate_plan.rb +0 -435
  358. data/lib/twilio-ruby/rest/preview/wireless/sim.rb +0 -544
  359. data/lib/twilio-ruby/rest/preview/wireless/sim/usage.rb +0 -236
  360. data/lib/twilio-ruby/rest/sync.rb +0 -44
  361. data/lib/twilio-ruby/rest/sync/v1.rb +0 -41
  362. data/lib/twilio-ruby/rest/sync/v1/service.rb +0 -504
  363. data/lib/twilio-ruby/rest/sync/v1/service/document.rb +0 -445
  364. data/lib/twilio-ruby/rest/sync/v1/service/document/document_permission.rb +0 -395
  365. data/lib/twilio-ruby/rest/sync/v1/service/sync_list.rb +0 -438
  366. data/lib/twilio-ruby/rest/sync/v1/service/sync_list/sync_list_item.rb +0 -430
  367. data/lib/twilio-ruby/rest/sync/v1/service/sync_list/sync_list_permission.rb +0 -395
  368. data/lib/twilio-ruby/rest/sync/v1/service/sync_map.rb +0 -438
  369. data/lib/twilio-ruby/rest/sync/v1/service/sync_map/sync_map_item.rb +0 -432
  370. data/lib/twilio-ruby/rest/sync/v1/service/sync_map/sync_map_permission.rb +0 -395
  371. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_channel.rb +0 -315
  372. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/reservation.rb +0 -461
  373. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/worker_channel.rb +0 -406
  374. data/lib/twilio-ruby/rest/video.rb +0 -52
  375. data/lib/twilio-ruby/rest/video/v1.rb +0 -56
  376. data/lib/twilio-ruby/rest/video/v1/recording.rb +0 -382
  377. data/lib/twilio-ruby/rest/video/v1/room.rb +0 -485
  378. data/lib/twilio-ruby/rest/video/v1/room/recording.rb +0 -381
  379. data/lib/twilio-ruby/rest/wireless.rb +0 -60
  380. data/lib/twilio-ruby/rest/wireless/v1.rb +0 -71
  381. data/lib/twilio-ruby/rest/wireless/v1/command.rb +0 -367
  382. data/lib/twilio-ruby/rest/wireless/v1/rate_plan.rb +0 -452
  383. data/lib/twilio-ruby/rest/wireless/v1/sim.rb +0 -548
  384. data/lib/twilio-ruby/rest/wireless/v1/sim/usage_record.rb +0 -235
  385. data/lib/twilio-ruby/twiml/messaging_response.rb +0 -141
  386. data/lib/twilio-ruby/twiml/twiml.rb +0 -69
  387. data/lib/twilio-ruby/twiml/voice_response.rb +0 -916
  388. data/spec/framework/serialize_spec.rb +0 -59
  389. data/spec/integration/accounts/v1/credential/public_key_spec.rb +0 -226
  390. data/spec/integration/api/v2010/account/incoming_phone_number/assigned_add_on/assigned_add_on_extension_spec.rb +0 -135
  391. data/spec/integration/api/v2010/account/incoming_phone_number/assigned_add_on_spec.rb +0 -223
  392. data/spec/integration/api/v2010/account/key_spec.rb +0 -178
  393. data/spec/integration/api/v2010/account/message/feedback_spec.rb +0 -48
  394. data/spec/integration/api/v2010/account/new_key_spec.rb +0 -45
  395. data/spec/integration/api/v2010/account/new_signing_key_spec.rb +0 -45
  396. data/spec/integration/api/v2010/account/recording/add_on_result/payload_spec.rb +0 -175
  397. data/spec/integration/api/v2010/account/recording/add_on_result_spec.rb +0 -166
  398. data/spec/integration/api/v2010/account/signing_key_spec.rb +0 -178
  399. data/spec/integration/chat/v1/credential_spec.rb +0 -223
  400. data/spec/integration/chat/v1/service/channel/invite_spec.rb +0 -210
  401. data/spec/integration/chat/v1/service/channel/member_spec.rb +0 -284
  402. data/spec/integration/chat/v1/service/channel/message_spec.rb +0 -294
  403. data/spec/integration/chat/v1/service/channel_spec.rb +0 -275
  404. data/spec/integration/chat/v1/service/role_spec.rb +0 -263
  405. data/spec/integration/chat/v1/service/user/user_channel_spec.rb +0 -92
  406. data/spec/integration/chat/v1/service/user_spec.rb +0 -266
  407. data/spec/integration/chat/v1/service_spec.rb +0 -299
  408. data/spec/integration/chat/v2/credential_spec.rb +0 -223
  409. data/spec/integration/chat/v2/service/channel/invite_spec.rb +0 -210
  410. data/spec/integration/chat/v2/service/channel/member_spec.rb +0 -284
  411. data/spec/integration/chat/v2/service/channel/message_spec.rb +0 -294
  412. data/spec/integration/chat/v2/service/channel_spec.rb +0 -275
  413. data/spec/integration/chat/v2/service/role_spec.rb +0 -263
  414. data/spec/integration/chat/v2/service/user/user_channel_spec.rb +0 -92
  415. data/spec/integration/chat/v2/service/user_spec.rb +0 -266
  416. data/spec/integration/chat/v2/service_spec.rb +0 -325
  417. data/spec/integration/fax/v1/fax/fax_media_spec.rb +0 -126
  418. data/spec/integration/fax/v1/fax_spec.rb +0 -272
  419. data/spec/integration/ip_messaging/v1/service/channel/invite_spec.rb +0 -210
  420. data/spec/integration/ip_messaging/v1/service/user/user_channel_spec.rb +0 -92
  421. data/spec/integration/ip_messaging/v2/credential_spec.rb +0 -223
  422. data/spec/integration/ip_messaging/v2/service/channel/invite_spec.rb +0 -210
  423. data/spec/integration/ip_messaging/v2/service/channel/member_spec.rb +0 -284
  424. data/spec/integration/ip_messaging/v2/service/channel/message_spec.rb +0 -294
  425. data/spec/integration/ip_messaging/v2/service/channel_spec.rb +0 -275
  426. data/spec/integration/ip_messaging/v2/service/role_spec.rb +0 -263
  427. data/spec/integration/ip_messaging/v2/service/user/user_channel_spec.rb +0 -92
  428. data/spec/integration/ip_messaging/v2/service/user_spec.rb +0 -266
  429. data/spec/integration/ip_messaging/v2/service_spec.rb +0 -325
  430. data/spec/integration/messaging/v1/service/alpha_sender_spec.rb +0 -170
  431. data/spec/integration/messaging/v1/service/phone_number_spec.rb +0 -201
  432. data/spec/integration/messaging/v1/service/short_code_spec.rb +0 -173
  433. data/spec/integration/messaging/v1/service_spec.rb +0 -263
  434. data/spec/integration/notify/v1/credential_spec.rb +0 -223
  435. data/spec/integration/notify/v1/service/binding_spec.rb +0 -227
  436. data/spec/integration/notify/v1/service/notification_spec.rb +0 -97
  437. data/spec/integration/notify/v1/service/segment_spec.rb +0 -84
  438. data/spec/integration/notify/v1/service/user/segment_memberships_spec.rb +0 -118
  439. data/spec/integration/notify/v1/service/user/user_binding_spec.rb +0 -269
  440. data/spec/integration/notify/v1/service/user_spec.rb +0 -213
  441. data/spec/integration/notify/v1/service_spec.rb +0 -280
  442. data/spec/integration/preview/bulk_exports/export/day_spec.rb +0 -56
  443. data/spec/integration/preview/bulk_exports/export_configuration_spec.rb +0 -79
  444. data/spec/integration/preview/bulk_exports/export_spec.rb +0 -43
  445. data/spec/integration/preview/hosted_numbers/hosted_number_order_spec.rb +0 -280
  446. data/spec/integration/preview/marketplace/available_add_on/available_add_on_extension_spec.rb +0 -121
  447. data/spec/integration/preview/marketplace/available_add_on_spec.rb +0 -142
  448. data/spec/integration/preview/marketplace/installed_add_on/installed_add_on_extension_spec.rb +0 -164
  449. data/spec/integration/preview/marketplace/installed_add_on_spec.rb +0 -252
  450. data/spec/integration/preview/proxy/service/phone_number_spec.rb +0 -173
  451. data/spec/integration/preview/proxy/service/session/interaction_spec.rb +0 -104
  452. data/spec/integration/preview/proxy/service/session/participant/message_interaction_spec.rb +0 -164
  453. data/spec/integration/preview/proxy/service/session/participant_spec.rb +0 -226
  454. data/spec/integration/preview/proxy/service/session_spec.rb +0 -216
  455. data/spec/integration/preview/proxy/service/short_code_spec.rb +0 -173
  456. data/spec/integration/preview/proxy/service_spec.rb +0 -200
  457. data/spec/integration/preview/sync/service/document/document_permission_spec.rb +0 -206
  458. data/spec/integration/preview/sync/service/document_spec.rb +0 -254
  459. data/spec/integration/preview/sync/service/sync_list/sync_list_item_spec.rb +0 -256
  460. data/spec/integration/preview/sync/service/sync_list/sync_list_permission_spec.rb +0 -206
  461. data/spec/integration/preview/sync/service/sync_list_spec.rb +0 -207
  462. data/spec/integration/preview/sync/service/sync_map/sync_map_item_spec.rb +0 -257
  463. data/spec/integration/preview/sync/service/sync_map/sync_map_permission_spec.rb +0 -206
  464. data/spec/integration/preview/sync/service/sync_map_spec.rb +0 -207
  465. data/spec/integration/preview/sync/service_spec.rb +0 -244
  466. data/spec/integration/preview/wireless/command_spec.rb +0 -169
  467. data/spec/integration/preview/wireless/rate_plan_spec.rb +0 -260
  468. data/spec/integration/preview/wireless/sim/usage_spec.rb +0 -49
  469. data/spec/integration/preview/wireless/sim_spec.rb +0 -208
  470. data/spec/integration/sync/v1/service/document/document_permission_spec.rb +0 -206
  471. data/spec/integration/sync/v1/service/document_spec.rb +0 -254
  472. data/spec/integration/sync/v1/service/sync_list/sync_list_item_spec.rb +0 -256
  473. data/spec/integration/sync/v1/service/sync_list/sync_list_permission_spec.rb +0 -206
  474. data/spec/integration/sync/v1/service/sync_list_spec.rb +0 -207
  475. data/spec/integration/sync/v1/service/sync_map/sync_map_item_spec.rb +0 -257
  476. data/spec/integration/sync/v1/service/sync_map/sync_map_permission_spec.rb +0 -206
  477. data/spec/integration/sync/v1/service/sync_map_spec.rb +0 -207
  478. data/spec/integration/sync/v1/service_spec.rb +0 -244
  479. data/spec/integration/taskrouter/v1/workspace/task_channel_spec.rb +0 -127
  480. data/spec/integration/taskrouter/v1/workspace/worker/reservation_spec.rb +0 -192
  481. data/spec/integration/taskrouter/v1/workspace/worker/worker_channel_spec.rb +0 -201
  482. data/spec/integration/video/v1/recording_spec.rb +0 -165
  483. data/spec/integration/video/v1/room/recording_spec.rb +0 -146
  484. data/spec/integration/video/v1/room_spec.rb +0 -237
  485. data/spec/integration/wireless/v1/command_spec.rb +0 -166
  486. data/spec/integration/wireless/v1/rate_plan_spec.rb +0 -268
  487. data/spec/integration/wireless/v1/sim/usage_record_spec.rb +0 -65
  488. data/spec/integration/wireless/v1/sim_spec.rb +0 -208
  489. data/spec/jwt/access_token_spec.rb +0 -130
  490. data/spec/jwt/client_capability_spec.rb +0 -104
  491. data/spec/jwt/task_router_spec.rb +0 -172
  492. data/spec/twiml/messaging_response_spec.rb +0 -90
  493. data/spec/twiml/voice_response_spec.rb +0 -474
File without changes
@@ -0,0 +1,87 @@
1
+ module Twilio
2
+ module TaskRouter
3
+ class Capability
4
+
5
+ TASK_ROUTER_BASE_URL = 'https://taskrouter.twilio.com'
6
+ TASK_ROUTER_VERSION = 'v1'
7
+ TASK_ROUTER_WEBSOCKET_BASE_URL = 'https://event-bridge.twilio.com/v1/wschannels'
8
+
9
+ REQUIRED = {required: true}
10
+ OPTIONAL = {required: false}
11
+
12
+ def initialize(account_sid, auth_token, workspace_sid, worker_sid)
13
+ @account_sid = account_sid
14
+ @auth_token = auth_token
15
+ @workspace_sid = workspace_sid
16
+ @worker_sid = worker_sid
17
+ @policies = []
18
+ allow_websocket_requests
19
+ allow_activity_list_fetch
20
+ end
21
+
22
+ def workspace_url
23
+ "#{TASK_ROUTER_BASE_URL}/#{TASK_ROUTER_VERSION}/Workspaces/#{@workspace_sid}"
24
+ end
25
+
26
+ def worker_url
27
+ "#{workspace_url}/Workers/#{@worker_sid}"
28
+ end
29
+
30
+ def allow_worker_activity_updates
31
+ add_policy(worker_url, "POST", nil, {ActivitySid: REQUIRED})
32
+ end
33
+
34
+ def allow_worker_fetch_attributes
35
+ add_policy(worker_url, "GET")
36
+ end
37
+
38
+ def allow_task_reservation_updates
39
+ task_url = "#{workspace_url}/Tasks/**"
40
+ add_policy(task_url, "POST", nil, {ReservationStatus: REQUIRED})
41
+ end
42
+
43
+ def add_policy(url, method, query_filters = nil, post_filters = nil, allowed = true)
44
+ policy = {
45
+ url: url,
46
+ method: method,
47
+ query_filter: query_filters || {},
48
+ post_filter: post_filters || {},
49
+ allow: allowed
50
+ }
51
+
52
+ @policies.push(policy)
53
+ end
54
+
55
+ def generate_token(ttl = 3600)
56
+ payload = {
57
+ iss: @account_sid,
58
+ exp: (Time.now.to_i + ttl),
59
+ version: @version,
60
+ friendly_name: @worker_sid,
61
+ policies: @policies,
62
+ account_sid: @account_sid,
63
+ worker_sid: @worker_sid,
64
+ channel: @worker_sid,
65
+ workspace_sid: @workspace_sid
66
+ }
67
+
68
+ JWT.encode payload, @auth_token
69
+ end
70
+
71
+ protected
72
+
73
+ def allow_websocket_requests
74
+ worker_url = "#{TASK_ROUTER_WEBSOCKET_BASE_URL}/#{@account_sid}/#{@worker_sid}"
75
+ ['GET', 'POST'].each do |meth|
76
+ add_policy(worker_url, meth)
77
+ end
78
+ end
79
+
80
+ def allow_activity_list_fetch
81
+ url = "#{workspace_url}/Activities"
82
+ add_policy(url, 'GET')
83
+ end
84
+
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,16 @@
1
+ module Twilio
2
+ module TwiML
3
+ class Response
4
+
5
+ attr_reader :text
6
+ alias_method :to_xml , :text
7
+
8
+ def initialize(&block)
9
+ xml = Builder::XmlMarkup.new
10
+ xml.instruct!
11
+ @text = xml.Response &block
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -1,7 +1,7 @@
1
1
  module Twilio
2
2
  module Util
3
3
  def url_encode(hash)
4
- hash.to_a.map { |p| p.map { |e| CGI.escape get_string(e) }.join '=' }.join '&'
4
+ hash.to_a.map {|p| p.map {|e| CGI.escape get_string(e)}.join '='}.join '&'
5
5
  end
6
6
 
7
7
  def get_string(obj)
@@ -0,0 +1,70 @@
1
+ module Twilio
2
+ module Util
3
+ class AccessToken
4
+ def initialize(signing_key_id, account_sid, secret, ttl=3600)
5
+ @signing_key_sid = signing_key_id
6
+ @account_sid = account_sid
7
+ @secret = secret
8
+ @ttl = ttl
9
+ @grants = []
10
+ end
11
+
12
+ def add_grant(resource, actions=Action::ALL)
13
+ actions = [*actions]
14
+ @grants.push({"res" => resource, "act" => actions})
15
+ self
16
+ end
17
+
18
+ def add_endpoint_grant(endpoint, actions=[Action::Client::LISTEN, Action::Client::INVITE])
19
+ resource = "sip:#{endpoint}@#{@account_sid}.endpoint.twilio.com"
20
+ add_grant resource, actions
21
+ end
22
+
23
+ def add_rest_grant(uri, actions=Action::ALL)
24
+ uri = uri[1..-1] if uri[0] == '/'
25
+ resource = "https://api.twilio.com/2010-04-01/Accounts/#{@account_sid}/#{uri}"
26
+ add_grant resource, actions
27
+ end
28
+
29
+ def enable_nts()
30
+ add_rest_grant('/Tokens', Action::HTTP::POST)
31
+ end
32
+
33
+ def as_jwt()
34
+ now = Time.now.to_i - 1
35
+ headers = {
36
+ 'cty' => 'twilio-sat;v=1'
37
+ }
38
+ payload = {
39
+ 'jti' => "#{@signing_key_sid}-#{now}",
40
+ 'iss' => @signing_key_sid,
41
+ 'sub' => @account_sid,
42
+ 'nbf' => now,
43
+ 'exp' => now + @ttl,
44
+ 'grants' => @grants
45
+ }
46
+ JWT.encode payload, @secret, 'HS256', headers
47
+ end
48
+
49
+ def to_s
50
+ as_jwt
51
+ end
52
+ end
53
+
54
+ class Action
55
+ ALL='*'
56
+
57
+ class HTTP
58
+ DELETE='DELETE'
59
+ GET='GET'
60
+ POST='POST'
61
+ PUT='PUT'
62
+ end
63
+
64
+ class Client
65
+ LISTEN='listen'
66
+ INVITE='invite'
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,64 @@
1
+ module Twilio
2
+ module Util
3
+ class Capability
4
+
5
+ include Twilio::Util
6
+
7
+ def initialize(account_sid = nil, auth_token = nil)
8
+ @account_sid = account_sid || Twilio.account_sid
9
+ @auth_token = auth_token || Twilio.auth_token
10
+ if @account_sid.nil? || @auth_token.nil?
11
+ raise ArgumentError, 'Account SID and auth token are required'
12
+ end
13
+ @capabilities = []
14
+ end
15
+
16
+ def allow_client_incoming(client_name)
17
+ @client_name = client_name # stash for use in outgoing
18
+ scope_params = { 'clientName' => client_name }
19
+ @capabilities << scope_uri_for('client', 'incoming', scope_params)
20
+ end
21
+
22
+ def allow_client_outgoing(app_sid, params = {})
23
+ @allow_client_outgoing = true
24
+ @outgoing_scope_params = { 'appSid' => app_sid }
25
+ unless params.empty?
26
+ @outgoing_scope_params['appParams'] = url_encode params
27
+ end
28
+ end
29
+
30
+ def allow_event_stream(filters = {})
31
+ scope_params = { 'path' => '/2010-04-01/Events' }
32
+ scope_params['params'] = filters unless filters.empty?
33
+ @capabilities << scope_uri_for('stream', 'subscribe', scope_params)
34
+ end
35
+
36
+ def scope_uri_for(service, privilege, params = {})
37
+ scope_uri = "scope:#{service}:#{privilege}"
38
+ scope_uri << "?#{url_encode(params)}" unless params.empty?
39
+ end
40
+
41
+ def generate(ttl = 3600)
42
+
43
+ capabilities = @capabilities.clone # we need a local copy to work on
44
+
45
+ # build the outgoing scope lazily so that we can use @client_name
46
+ if @allow_client_outgoing
47
+ params = @outgoing_scope_params
48
+ params.merge!('clientName' => @client_name) if @client_name
49
+ capabilities << scope_uri_for('client', 'outgoing', params)
50
+ end
51
+
52
+ payload = {
53
+ 'scope' => capabilities.join(' '),
54
+ 'iss' => @account_sid,
55
+ 'exp' => (Time.now.to_i + ttl),
56
+ }
57
+
58
+ JWT.encode payload, @auth_token
59
+
60
+ end
61
+
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,29 @@
1
+ module Twilio
2
+ module Util
3
+ class ClientConfig
4
+ DEFAULTS = {
5
+ host: 'api.twilio.com',
6
+ port: 443,
7
+ use_ssl: true,
8
+ ssl_verify_peer: true,
9
+ ssl_ca_file: File.dirname(__FILE__) + '/../../../conf/cacert.pem',
10
+ timeout: 30,
11
+ proxy_addr: nil,
12
+ proxy_port: nil,
13
+ proxy_user: nil,
14
+ proxy_pass: nil,
15
+ retry_limit: 1
16
+ }
17
+
18
+ DEFAULTS.each_key do |attribute|
19
+ attr_accessor attribute
20
+ end
21
+
22
+ def initialize(opts={})
23
+ DEFAULTS.each do |attribute, value|
24
+ send("#{attribute}=".to_sym, opts.fetch(attribute, value))
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,14 +1,14 @@
1
1
  module Twilio
2
- module Security
2
+ module Util
3
3
  class RequestValidator
4
+
4
5
  def initialize(auth_token = nil)
5
6
  @auth_token = auth_token || Twilio.auth_token
6
7
  raise ArgumentError, 'Auth token is required' if @auth_token.nil?
7
8
  end
8
9
 
9
10
  def validate(url, params, signature)
10
- params_hash = params_to_hash(params)
11
- expected = build_signature_for(url, params_hash)
11
+ expected = build_signature_for url, params
12
12
  secure_compare(expected, signature)
13
13
  end
14
14
 
@@ -30,24 +30,7 @@ module Twilio
30
30
 
31
31
  res = 0
32
32
  b.each_byte { |byte| res |= byte ^ l.shift }
33
- res.zero?
34
- end
35
-
36
- # `ActionController::Parameters` no longer, as of Rails 5, inherits
37
- # from `Hash` so the `sort` method, used above in `build_signature_for`
38
- # is deprecated.
39
- #
40
- # `to_unsafe_h` was introduced in Rails 4.2.1, before then it is still
41
- # possible to sort on an ActionController::Parameters object.
42
- #
43
- # We use `to_unsafe_h` as `to_h` returns a hash of the permitted
44
- # parameters only and we need all the parameters to create the signature.
45
- def params_to_hash(params)
46
- if params.respond_to?(:to_unsafe_h)
47
- params.to_unsafe_h
48
- else
49
- params
50
- end
33
+ res == 0
51
34
  end
52
35
  end
53
36
  end
@@ -1,3 +1,3 @@
1
1
  module Twilio
2
- VERSION = '5.0.0.alpha1'.freeze
2
+ VERSION = '5.0.0.rc2'
3
3
  end
@@ -21,10 +21,10 @@ class Holodeck
21
21
  end
22
22
 
23
23
  def ==(other)
24
- method.casecmp(other.method.upcase).zero? &&
25
- url == other.url &&
26
- params == other.params &&
27
- data == other.data
24
+ method.upcase == other.method.upcase &&
25
+ url == other.url &&
26
+ params == other.params &&
27
+ data == other.data
28
28
  end
29
29
 
30
30
  def to_s
@@ -43,7 +43,7 @@ class Holodeck
43
43
  @response = response
44
44
  end
45
45
 
46
- def request(host, port, method, url, params = {}, data = {}, headers = {}, auth = nil, _timeout = nil)
46
+ def request(host, port, method, url, params={}, data={}, headers={}, auth=nil, timeout=nil)
47
47
  @requests << Request.new(
48
48
  method: method,
49
49
  url: url,
@@ -52,7 +52,7 @@ class Holodeck
52
52
  headers: headers,
53
53
  auth: auth
54
54
  )
55
- @response
55
+ return @response
56
56
  end
57
57
 
58
58
  def has_request?(request)
@@ -1,3 +1,4 @@
1
+ require 'json'
1
2
  require 'uri'
2
3
 
3
4
  class Hologram
@@ -2,20 +2,20 @@
2
2
  # This code was generated by
3
3
  # \ / _ _ _| _ _
4
4
  # | (_)\/(_)(_|\/| |(/_ v1.0.0
5
- # / /
5
+ # / /
6
6
 
7
7
  require 'spec_helper.rb'
8
8
 
9
9
  describe 'DependentPhoneNumber' do
10
10
  it "can read" do
11
11
  @holodeck.mock(Twilio::TwilioResponse.new(500, ''))
12
-
12
+
13
13
  expect {
14
14
  @client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
15
15
  .addresses("ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
16
16
  .dependent_phone_numbers.list()
17
- }.to raise_exception(Twilio::REST::TwilioError)
18
-
17
+ }.to raise_exception(Twilio::REST::TwilioException)
18
+
19
19
  values = {}
20
20
  expect(
21
21
  @holodeck.has_request?(Holodeck::Request.new(
@@ -57,11 +57,11 @@ describe 'DependentPhoneNumber' do
57
57
  }
58
58
  ]
59
59
  ))
60
-
60
+
61
61
  actual = @client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
62
62
  .addresses("ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
63
63
  .dependent_phone_numbers.list()
64
-
64
+
65
65
  expect(actual).to_not eq(nil)
66
66
  end
67
67
 
@@ -80,11 +80,11 @@ describe 'DependentPhoneNumber' do
80
80
  }
81
81
  ]
82
82
  ))
83
-
83
+
84
84
  actual = @client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
85
85
  .addresses("ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
86
86
  .dependent_phone_numbers.list()
87
-
87
+
88
88
  expect(actual).to_not eq(nil)
89
89
  end
90
90
  end
@@ -2,19 +2,19 @@
2
2
  # This code was generated by
3
3
  # \ / _ _ _| _ _
4
4
  # | (_)\/(_)(_|\/| |(/_ v1.0.0
5
- # / /
5
+ # / /
6
6
 
7
7
  require 'spec_helper.rb'
8
8
 
9
9
  describe 'Address' do
10
10
  it "can create" do
11
11
  @holodeck.mock(Twilio::TwilioResponse.new(500, ''))
12
-
12
+
13
13
  expect {
14
14
  @client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
15
15
  .addresses.create(customer_name: "customer_name", street: "street", city: "city", region: "region", postal_code: "postal_code", iso_country: "US")
16
- }.to raise_exception(Twilio::REST::TwilioError)
17
-
16
+ }.to raise_exception(Twilio::REST::TwilioException)
17
+
18
18
  values = {
19
19
  'CustomerName' => "customer_name",
20
20
  'Street' => "street",
@@ -33,7 +33,7 @@ describe 'Address' do
33
33
 
34
34
  it "receives create responses" do
35
35
  @holodeck.mock(Twilio::TwilioResponse.new(
36
- 201,
36
+ 200,
37
37
  %q[
38
38
  {
39
39
  "account_sid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
@@ -41,33 +41,31 @@ describe 'Address' do
41
41
  "customer_name": "name",
42
42
  "date_created": "Tue, 18 Aug 2015 17:07:30 +0000",
43
43
  "date_updated": "Tue, 18 Aug 2015 17:07:30 +0000",
44
- "emergency_enabled": false,
45
44
  "friendly_name": null,
46
45
  "iso_country": "US",
47
46
  "postal_code": "94019",
48
47
  "region": "CA",
49
48
  "sid": "ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
50
49
  "street": "4th",
51
- "validated": false,
52
50
  "uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Addresses/ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json"
53
51
  }
54
52
  ]
55
53
  ))
56
-
54
+
57
55
  actual = @client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
58
56
  .addresses.create(customer_name: "customer_name", street: "street", city: "city", region: "region", postal_code: "postal_code", iso_country: "US")
59
-
57
+
60
58
  expect(actual).to_not eq(nil)
61
59
  end
62
60
 
63
61
  it "can delete" do
64
62
  @holodeck.mock(Twilio::TwilioResponse.new(500, ''))
65
-
63
+
66
64
  expect {
67
65
  @client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
68
66
  .addresses("ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa").delete()
69
- }.to raise_exception(Twilio::REST::TwilioError)
70
-
67
+ }.to raise_exception(Twilio::REST::TwilioException)
68
+
71
69
  values = {}
72
70
  expect(
73
71
  @holodeck.has_request?(Holodeck::Request.new(
@@ -81,21 +79,21 @@ describe 'Address' do
81
79
  204,
82
80
  nil,
83
81
  ))
84
-
82
+
85
83
  actual = @client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
86
84
  .addresses("ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa").delete()
87
-
85
+
88
86
  expect(actual).to eq(true)
89
87
  end
90
88
 
91
89
  it "can fetch" do
92
90
  @holodeck.mock(Twilio::TwilioResponse.new(500, ''))
93
-
91
+
94
92
  expect {
95
93
  @client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
96
94
  .addresses("ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa").fetch()
97
- }.to raise_exception(Twilio::REST::TwilioError)
98
-
95
+ }.to raise_exception(Twilio::REST::TwilioException)
96
+
99
97
  values = {}
100
98
  expect(
101
99
  @holodeck.has_request?(Holodeck::Request.new(
@@ -114,33 +112,31 @@ describe 'Address' do
114
112
  "customer_name": "name",
115
113
  "date_created": "Tue, 18 Aug 2015 17:07:30 +0000",
116
114
  "date_updated": "Tue, 18 Aug 2015 17:07:30 +0000",
117
- "emergency_enabled": false,
118
115
  "friendly_name": null,
119
116
  "iso_country": "US",
120
117
  "postal_code": "94019",
121
118
  "region": "CA",
122
119
  "sid": "ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
123
120
  "street": "4th",
124
- "validated": false,
125
121
  "uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Addresses/ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json"
126
122
  }
127
123
  ]
128
124
  ))
129
-
125
+
130
126
  actual = @client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
131
127
  .addresses("ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa").fetch()
132
-
128
+
133
129
  expect(actual).to_not eq(nil)
134
130
  end
135
131
 
136
132
  it "can update" do
137
133
  @holodeck.mock(Twilio::TwilioResponse.new(500, ''))
138
-
134
+
139
135
  expect {
140
136
  @client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
141
137
  .addresses("ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa").update()
142
- }.to raise_exception(Twilio::REST::TwilioError)
143
-
138
+ }.to raise_exception(Twilio::REST::TwilioException)
139
+
144
140
  values = {}
145
141
  expect(
146
142
  @holodeck.has_request?(Holodeck::Request.new(
@@ -159,33 +155,31 @@ describe 'Address' do
159
155
  "customer_name": "name",
160
156
  "date_created": "Tue, 18 Aug 2015 17:07:30 +0000",
161
157
  "date_updated": "Tue, 18 Aug 2015 17:07:30 +0000",
162
- "emergency_enabled": false,
163
158
  "friendly_name": null,
164
159
  "iso_country": "US",
165
160
  "postal_code": "94019",
166
161
  "region": "CA",
167
162
  "sid": "ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
168
163
  "street": "4th",
169
- "validated": false,
170
164
  "uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Addresses/ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json"
171
165
  }
172
166
  ]
173
167
  ))
174
-
168
+
175
169
  actual = @client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
176
170
  .addresses("ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa").update()
177
-
171
+
178
172
  expect(actual).to_not eq(nil)
179
173
  end
180
174
 
181
175
  it "can read" do
182
176
  @holodeck.mock(Twilio::TwilioResponse.new(500, ''))
183
-
177
+
184
178
  expect {
185
179
  @client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
186
180
  .addresses.list()
187
- }.to raise_exception(Twilio::REST::TwilioError)
188
-
181
+ }.to raise_exception(Twilio::REST::TwilioException)
182
+
189
183
  values = {}
190
184
  expect(
191
185
  @holodeck.has_request?(Holodeck::Request.new(
@@ -206,14 +200,12 @@ describe 'Address' do
206
200
  "customer_name": "name",
207
201
  "date_created": "Tue, 18 Aug 2015 17:07:30 +0000",
208
202
  "date_updated": "Tue, 18 Aug 2015 17:07:30 +0000",
209
- "emergency_enabled": false,
210
203
  "friendly_name": null,
211
204
  "iso_country": "US",
212
205
  "postal_code": "94019",
213
206
  "region": "CA",
214
207
  "sid": "ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
215
208
  "street": "4th",
216
- "validated": false,
217
209
  "uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Addresses/ADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json"
218
210
  }
219
211
  ],
@@ -231,10 +223,10 @@ describe 'Address' do
231
223
  }
232
224
  ]
233
225
  ))
234
-
226
+
235
227
  actual = @client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
236
228
  .addresses.list()
237
-
229
+
238
230
  expect(actual).to_not eq(nil)
239
231
  end
240
232
 
@@ -258,10 +250,10 @@ describe 'Address' do
258
250
  }
259
251
  ]
260
252
  ))
261
-
253
+
262
254
  actual = @client.api.v2010.accounts("ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") \
263
255
  .addresses.list()
264
-
256
+
265
257
  expect(actual).to_not eq(nil)
266
258
  end
267
259
  end