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
@@ -1,25 +0,0 @@
1
- module Twilio
2
- module REST
3
- module Utils
4
-
5
- def twilify(something)
6
- if something.is_a? Hash
7
- Hash[*something.to_a.map! {|a| [twilify(a[0]).to_sym, a[1]]}.flatten(1)]
8
- else
9
- something.to_s.split('_').map! do |s|
10
- [s[0,1].capitalize, s[1..-1]].join
11
- end.join
12
- end
13
- end
14
-
15
- def detwilify(something)
16
- if something.is_a? Hash
17
- Hash[*something.to_a.map! {|pair| [detwilify(pair[0]).to_sym, pair[1]]}.flatten]
18
- else
19
- something.to_s.gsub(/[A-Z][a-z]*/) {|s| "_#{s.downcase}"}.gsub(/^_/, '')
20
- end
21
- end
22
-
23
- end
24
- end
25
- end
@@ -1,15 +0,0 @@
1
- module Twilio
2
- module TwiML
3
- class Response
4
-
5
- attr_reader :text
6
-
7
- def initialize(&block)
8
- xml = Builder::XmlMarkup.new
9
- xml.instruct!
10
- @text = xml.Response &block
11
- end
12
-
13
- end
14
- end
15
- end
@@ -1,61 +0,0 @@
1
- module Twilio
2
- module Util
3
- class Capability
4
-
5
- include Twilio::Util
6
-
7
- def initialize(account_sid, auth_token)
8
- @account_sid = account_sid
9
- @auth_token = auth_token
10
- @capabilities = []
11
- end
12
-
13
- def allow_client_incoming(client_name)
14
- @client_name = client_name # stash for use in outgoing
15
- scope_params = {'clientName' => client_name}
16
- @capabilities << scope_uri_for('client', 'incoming', scope_params)
17
- end
18
-
19
- def allow_client_outgoing(app_sid, params = {})
20
- @allow_client_outgoing = true
21
- @outgoing_scope_params = {'appSid' => app_sid}
22
- unless params.empty?
23
- @outgoing_scope_params['appParams'] = url_encode params
24
- end
25
- end
26
-
27
- def allow_event_stream(filters = {})
28
- scope_params = {'path' => '/2010-04-01/Events'}
29
- scope_params['params'] = filters unless filters.empty?
30
- @capabilities << scope_uri_for('stream', 'subscribe', scope_params)
31
- end
32
-
33
- def scope_uri_for(service, privilege, params = {})
34
- scope_uri = "scope:#{service}:#{privilege}"
35
- scope_uri << "?#{url_encode(params)}" unless params.empty?
36
- end
37
-
38
- def generate(ttl = 3600)
39
-
40
- capabilities = @capabilities.clone # we need a local copy to work on
41
-
42
- # build the outgoing scope lazily so that we can use @client_name
43
- if @allow_client_outgoing
44
- params = @outgoing_scope_params
45
- params.merge!({'clientName' => @client_name}) if @client_name
46
- capabilities << scope_uri_for('client', 'outgoing', params)
47
- end
48
-
49
- payload = {
50
- 'scope' => capabilities.join(' '),
51
- 'iss' => @account_sid,
52
- 'exp' => (Time.now.to_i + ttl),
53
- }
54
-
55
- JWT.encode payload, @auth_token
56
-
57
- end
58
-
59
- end
60
- end
61
- end
@@ -1,22 +0,0 @@
1
- module Twilio
2
- module Util
3
- class RequestValidator
4
-
5
- def initialize(auth_token)
6
- @auth_token = auth_token
7
- end
8
-
9
- def validate(url, params, signature)
10
- expected = build_signature_for url, params
11
- expected == signature
12
- end
13
-
14
- def build_signature_for(url, params)
15
- data = url + params.sort.join
16
- digest = OpenSSL::Digest.new('sha1')
17
- Base64.encode64(OpenSSL::HMAC.digest(digest, @auth_token, data)).strip
18
- end
19
-
20
- end
21
- end
22
- end
@@ -1,58 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Twilio::REST::Account do
4
-
5
- before do
6
- @account = Twilio::REST::Account.new('someUri', 'someClient')
7
- end
8
-
9
- it 'sets up incoming phone numbers resources object' do
10
- @account.should respond_to(:incoming_phone_numbers)
11
- @account.incoming_phone_numbers.instance_variable_get('@path').should == 'someUri/IncomingPhoneNumbers'
12
- end
13
-
14
- it 'sets up an available phone numbers resources object' do
15
- @account.should respond_to(:available_phone_numbers)
16
- @account.available_phone_numbers.instance_variable_get('@path').should == 'someUri/AvailablePhoneNumbers'
17
- end
18
-
19
- it 'sets up an outgoing caller ids resources object' do
20
- @account.should respond_to(:outgoing_caller_ids)
21
- @account.outgoing_caller_ids.instance_variable_get('@path').should == 'someUri/OutgoingCallerIds'
22
- end
23
-
24
- it 'sets up a calls resources object' do
25
- @account.should respond_to(:calls)
26
- @account.calls.instance_variable_get('@path').should == 'someUri/Calls'
27
- end
28
-
29
- it 'sets up a conferences resources object' do
30
- @account.should respond_to(:conferences)
31
- @account.conferences.instance_variable_get('@path').should == 'someUri/Conferences'
32
- end
33
-
34
- it 'sets up a queues resources object' do
35
- @account.should respond_to(:queues)
36
- @account.queues.instance_variable_get('@path').should == 'someUri/Queues'
37
- end
38
-
39
- it 'sets up a sms resource object' do
40
- @account.should respond_to(:sms)
41
- @account.sms.instance_variable_get('@path').should == 'someUri/SMS'
42
- end
43
-
44
- it 'sets up a recordings resources object' do
45
- @account.should respond_to(:recordings)
46
- @account.recordings.instance_variable_get('@path').should == 'someUri/Recordings'
47
- end
48
-
49
- it 'sets up a transcriptions resources object' do
50
- @account.should respond_to(:transcriptions)
51
- @account.transcriptions.instance_variable_get('@path').should == 'someUri/Transcriptions'
52
- end
53
-
54
- it 'sets up a notifications resources object' do
55
- @account.should respond_to(:notifications)
56
- @account.notifications.instance_variable_get('@path').should == 'someUri/Notifications'
57
- end
58
- end
@@ -1,18 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Twilio::REST::Call do
4
-
5
- before do
6
- @call = Twilio::REST::Call.new('someUri', 'someClient')
7
- end
8
-
9
- it 'sets up a recordings resources object' do
10
- @call.should respond_to(:recordings)
11
- @call.recordings.instance_variable_get('@path').should == 'someUri/Recordings'
12
- end
13
-
14
- it 'sets up a notifications resources object' do
15
- @call.should respond_to(:notifications)
16
- @call.notifications.instance_variable_get('@path').should == 'someUri/Notifications'
17
- end
18
- end
@@ -1,100 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Twilio::REST::Client do
4
- it 'should not raise an error if the response body is empty' do
5
- FakeWeb.register_uri(:any, %r/api\.twilio\.com/, :body => '')
6
- twilio = Twilio::REST::Client.new('someSid', 'someToken')
7
- Twilio::REST::IncomingPhoneNumber.new('/phone_number', twilio).delete
8
- end
9
-
10
- it 'should not raise an error if the response body is nil' do
11
- response = double(:response, :body => nil)
12
- connection = double(:connection, :request => response)
13
- twilio = Twilio::REST::Client.new('someSid', 'someToken')
14
- twilio.instance_variable_set(:@connection, connection)
15
- Twilio::REST::IncomingPhoneNumber.new('/phone_number', twilio).delete
16
- end
17
-
18
- it 'should set up a new client instance with the given sid and token' do
19
- twilio = Twilio::REST::Client.new('someSid', 'someToken')
20
- twilio.account_sid.should == 'someSid'
21
- twilio.instance_variable_get('@auth_token').should == 'someToken'
22
- end
23
-
24
- it 'should set up the proper default http ssl connection' do
25
- twilio = Twilio::REST::Client.new('someSid', 'someToken')
26
- connection = twilio.instance_variable_get('@connection')
27
- connection.address.should == 'api.twilio.com'
28
- connection.port.should == 443
29
- connection.use_ssl?.should == true
30
- end
31
-
32
- it 'should set up the requested ssl verification ca_file if provided' do
33
- twilio = Twilio::REST::Client.new('someSid', 'someToken', :ssl_ca_file => '/path/to/ca/file')
34
- connection = twilio.instance_variable_get('@connection')
35
- connection.ca_file.should == '/path/to/ca/file'
36
- end
37
-
38
- it 'should set up the proper http ssl connection when a different domain is given' do
39
- twilio = Twilio::REST::Client.new('someSid', 'someToken', :host => 'api.faketwilio.com')
40
- connection = twilio.instance_variable_get('@connection')
41
- connection.address.should == 'api.faketwilio.com'
42
- connection.port.should == 443
43
- connection.use_ssl?.should == true
44
- end
45
-
46
- it 'should adjust the open and read timeouts on the underlying Net::HTTP object when asked' do
47
- timeout = rand(30)
48
- twilio = Twilio::REST::Client.new('someSid', 'someToken', :timeout => timeout)
49
- connection = twilio.instance_variable_get('@connection')
50
- connection.port.should == 443
51
- connection.use_ssl?.should == true
52
- connection.open_timeout.should == timeout
53
- connection.read_timeout.should == timeout
54
- end
55
-
56
- it 'should set up the proper http ssl connection when a proxy_host is given' do
57
- twilio = Twilio::REST::Client.new('someSid', 'someToken', :host => 'api.faketwilio.com', :proxy_addr => 'localhost')
58
- connection = twilio.instance_variable_get('@connection')
59
- connection.proxy?.should == true
60
- connection.proxy_address.should == 'localhost'
61
- connection.proxy_port.should == 80
62
- connection.address.should == 'api.faketwilio.com'
63
- connection.port.should == 443
64
- connection.use_ssl?.should == true
65
- end
66
-
67
- it 'should set up the proper http ssl connection when a proxy_host and proxy_port are given' do
68
- twilio = Twilio::REST::Client.new('someSid', 'someToken', :host => 'api.faketwilio.com', :proxy_addr => 'localhost', :proxy_port => 13128)
69
- connection = twilio.instance_variable_get('@connection')
70
- connection.proxy?.should == true
71
- connection.proxy_address.should == 'localhost'
72
- connection.proxy_port.should == 13128
73
- connection.address.should == 'api.faketwilio.com'
74
- connection.port.should == 443
75
- connection.use_ssl?.should == true
76
- end
77
-
78
- it 'should set up an accounts resources object' do
79
- twilio = Twilio::REST::Client.new('someSid', 'someToken')
80
- twilio.should respond_to(:accounts)
81
- twilio.accounts.instance_variable_get('@path').should == '/2010-04-01/Accounts'
82
- end
83
-
84
- it 'should set up an account object with the given sid' do
85
- twilio = Twilio::REST::Client.new('someSid', 'someToken')
86
- twilio.should respond_to(:account)
87
- twilio.account.instance_variable_get('@path').should == '/2010-04-01/Accounts/someSid'
88
- end
89
-
90
- it 'should convert all parameter names to Twilio-style names' do
91
- twilio = Twilio::REST::Client.new('someSid', 'someToken')
92
- untwilified = {:sms_url => 'someUrl', 'voiceFallbackUrl' => 'anotherUrl',
93
- 'Status_callback' => 'yetAnotherUrl'}
94
- twilified = {:SmsUrl => 'someUrl', :VoiceFallbackUrl => 'anotherUrl',
95
- :StatusCallback => 'yetAnotherUrl'}
96
- twilio.instance_eval do
97
- twilify(untwilified).should == twilified
98
- end
99
- end
100
- end
@@ -1,9 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Twilio::REST::Conference do
4
- it 'should set up a participants resources object' do
5
- conference = Twilio::REST::Conference.new('someUri', 'someClient')
6
- conference.should respond_to(:participants)
7
- conference.participants.instance_variable_get('@path').should == 'someUri/Participants'
8
- end
9
- end
@@ -1,15 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Twilio::REST::InstanceResource do
4
- it 'should set up an internal reference to the uri and client' do
5
- resource = Twilio::REST::InstanceResource.new('some/uri', 'someClient')
6
- resource.instance_variable_get('@path').should == 'some/uri'
7
- resource.instance_variable_get('@client').should == 'someClient'
8
- end
9
-
10
- it 'should set up object properties if passed' do
11
- params = {'SomeKey' => 'someValue'}
12
- resource = Twilio::REST::InstanceResource.new('uri', 'client', params)
13
- resource.some_key.should == 'someValue'
14
- end
15
- end
@@ -1,12 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Twilio::REST::Message do
4
- before do
5
- @message = Twilio::REST::Message.new('someUri', 'someClient')
6
- end
7
-
8
- it 'sets up a media resources object' do
9
- @message.should respond_to(:media)
10
- @message.media.instance_variable_get('@path').should == 'someUri/Media'
11
- end
12
- end
@@ -1,46 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Twilio::REST::Country do
4
-
5
- before do
6
- @country = Twilio::REST::Country.new('someUri', 'someClient')
7
- end
8
-
9
- it 'sets up a local resources object' do
10
- @country.should respond_to(:local)
11
- @country.local.instance_variable_get('@path').should == 'someUri/Local'
12
- end
13
-
14
- it 'sets up a toll_free resources object' do
15
- @country.should respond_to(:toll_free)
16
- @country.toll_free.instance_variable_get('@path').should == 'someUri/TollFree'
17
- end
18
-
19
- it 'sets up a mobile resources object' do
20
- @country.should respond_to(:mobile)
21
- @country.mobile.instance_variable_get('@path').should == 'someUri/Mobile'
22
- end
23
-
24
- end
25
-
26
- describe Twilio::REST::NumberType do
27
-
28
- before do
29
- @incoming_phone_numbers = Twilio::REST::IncomingPhoneNumbers.new('someUri', 'someClient')
30
- end
31
-
32
- it 'sets up a local resources object' do
33
- @incoming_phone_numbers.should respond_to(:local)
34
- @incoming_phone_numbers.local.instance_variable_get('@path').should == 'someUri/Local'
35
- end
36
-
37
- it 'sets up a toll_free resources object' do
38
- @incoming_phone_numbers.should respond_to(:toll_free)
39
- @incoming_phone_numbers.toll_free.instance_variable_get('@path').should == 'someUri/TollFree'
40
- end
41
-
42
- it 'sets up a mobile resources object' do
43
- @incoming_phone_numbers.should respond_to(:mobile)
44
- @incoming_phone_numbers.mobile.instance_variable_get('@path').should == 'someUri/Mobile'
45
- end
46
- end
@@ -1,9 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Twilio::REST::Queue do
4
- it 'should set up a members resources object' do
5
- queue = Twilio::REST::Queue.new('someUri', 'someClient')
6
- queue.should respond_to(:members)
7
- queue.members.instance_variable_get('@path').should == 'someUri/Members'
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Twilio::REST::Recording do
4
- it 'should set up a transcriptions resources object' do
5
- call = Twilio::REST::Recording.new('someUri', 'someClient')
6
- call.should respond_to(:transcriptions)
7
- call.transcriptions.instance_variable_get('@path').should == 'someUri/Transcriptions'
8
- end
9
- end
@@ -1,137 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Twilio::Util::Capability do
4
- before :each do
5
- @capability = Twilio::Util::Capability.new 'myAccountSid', 'myAuthToken'
6
- end
7
-
8
- def queries(q)
9
- q.scan(/scope:client:(incoming|outgoing)\?(\S+)/).map{|(type, query)| [type, Rack::Utils.parse_query(query)]}
10
- end
11
-
12
- it 'should return a valid jwt when #generate is called' do
13
- token = @capability.generate
14
- decoded = JWT.decode token, 'myAuthToken'
15
- decoded['scope'].should_not be_nil
16
- decoded['iss'].should_not be_nil
17
- decoded['exp'].should_not be_nil
18
- end
19
-
20
- it 'should properly set the iss key in the payload' do
21
- token = @capability.generate
22
- decoded = JWT.decode token, 'myAuthToken'
23
- decoded['iss'].should == 'myAccountSid'
24
- end
25
-
26
- it 'should properly set the exp key based on the default hour ttl' do
27
- seconds = Time.now.to_i
28
- token = @capability.generate
29
- decoded = JWT.decode token, 'myAuthToken'
30
- decoded['exp'].should == seconds + 3600
31
- end
32
-
33
- it 'should properly set the exp key based on the ttl passed to #generate' do
34
- ttl = rand 10000
35
- seconds = Time.now.to_i
36
- token = @capability.generate ttl
37
- decoded = JWT.decode token, 'myAuthToken'
38
- decoded['exp'].should == seconds + ttl
39
- end
40
-
41
- it 'should generate a proper incoming client scope string' do
42
- @capability.allow_client_incoming 'andrew'
43
- token = @capability.generate
44
- decoded = JWT.decode token, 'myAuthToken'
45
- queries(decoded['scope']).should == [['incoming', {'clientName' => 'andrew'}]]
46
- end
47
-
48
- it 'should generate multiple proper incoming client scope strings' do
49
- @capability.allow_client_incoming 'andrew'
50
- @capability.allow_client_incoming 'bridget'
51
- token = @capability.generate
52
- decoded = JWT.decode token, 'myAuthToken'
53
- queries(decoded['scope']).should == [
54
- ['incoming', {'clientName' => 'andrew'}],
55
- ['incoming', {'clientName' => 'bridget'}]
56
- ]
57
- end
58
-
59
- it 'should generate a proper outgoing client scope string' do
60
- @capability.allow_client_outgoing 'myAppSid'
61
- token = @capability.generate
62
- decoded = JWT.decode token, 'myAuthToken'
63
- queries(decoded['scope']).should == [['outgoing', {'appSid' => 'myAppSid'}]]
64
- end
65
-
66
- it 'should generate a proper outgoing client scope string with parameters' do
67
- app_params_hash = {'key' => 'a value', :foo => 'bar/baz'}
68
- @capability.allow_client_outgoing 'myAppSid', app_params_hash
69
- app_params = @capability.instance_eval {url_encode(app_params_hash)}
70
- params_hash = {'appSid' => 'myAppSid', 'appParams' => app_params}
71
- @capability.instance_eval {url_encode(params_hash)}
72
- token = @capability.generate
73
- decoded = JWT.decode token, 'myAuthToken'
74
- queries(decoded['scope']).should == [['outgoing', params_hash]]
75
- end
76
-
77
- it 'should generate a proper outgoing client scope string based on the ' +
78
- 'client name when calling #allow_client_incoming first' do
79
- @capability.allow_client_incoming 'andrew'
80
- @capability.allow_client_outgoing 'myAppSid'
81
- token = @capability.generate
82
- decoded = JWT.decode token, 'myAuthToken'
83
- queries(decoded['scope']).should == [
84
- ['incoming', {'clientName' => 'andrew'}],
85
- ['outgoing', {'clientName' => 'andrew', 'appSid' => 'myAppSid'}]
86
- ]
87
- end
88
-
89
- it 'should generate a proper outgoing client scope string based on the ' +
90
- 'client name when calling #allow_client_incoming second' do
91
- @capability.allow_client_outgoing 'myAppSid'
92
- @capability.allow_client_incoming 'andrew'
93
- token = @capability.generate
94
- decoded = JWT.decode token, 'myAuthToken'
95
- queries(decoded['scope']).should == [["incoming", {"clientName"=>"andrew"}], ["outgoing", {"clientName"=>"andrew", "appSid"=>"myAppSid"}]]
96
- end
97
-
98
- it 'should generate a proper outgoing client scope string with parameters ' +
99
- 'and a client name when calling #allow_client_incoming first' do
100
- @capability.allow_client_incoming 'andrew'
101
- app_params_hash = {'key' => 'a value', :foo => 'bar/baz'}
102
- @capability.allow_client_outgoing 'myAppSid', app_params_hash
103
- app_params = @capability.instance_eval {url_encode(app_params_hash)}
104
- params_hash = {'appSid' => 'myAppSid', 'appParams' => app_params, 'clientName' => 'andrew'}
105
- @capability.instance_eval {url_encode(params_hash)}
106
- token = @capability.generate
107
- decoded = JWT.decode token, 'myAuthToken'
108
- scopes = queries(decoded['scope'])
109
- scopes.shift.should == ["incoming", {"clientName"=>"andrew"}]
110
- scope = scopes.shift
111
- scope.first.should == 'outgoing'
112
- Rack::Utils.parse_query(scope.last['appParams']).should == {'key' => 'a value', 'foo' => 'bar/baz'}
113
- scope.last["clientName"].should == "andrew"
114
- scope.last["appSid"].should == "myAppSid"
115
- scopes.should be_empty
116
- end
117
-
118
- it 'should generate a proper outgoing client scope string with parameters ' +
119
- 'and a client name when calling #allow_client_incoming second' do
120
- app_params_hash = {'key' => 'a value', :foo => 'bar/baz'}
121
- @capability.allow_client_outgoing 'myAppSid', app_params_hash
122
- @capability.allow_client_incoming 'andrew'
123
- app_params = @capability.instance_eval {url_encode(app_params_hash)}
124
- params_hash = {'appSid' => 'myAppSid', 'appParams' => app_params, 'clientName' => 'andrew'}
125
- @capability.instance_eval {url_encode(params_hash)}
126
- token = @capability.generate
127
- decoded = JWT.decode token, 'myAuthToken'
128
- scopes = queries(decoded['scope'])
129
- scopes.shift.should == ["incoming", {"clientName"=>"andrew"}]
130
- scope = scopes.shift
131
- scope.first.should == 'outgoing'
132
- Rack::Utils.parse_query(scope.last['appParams']).should == {'key' => 'a value', 'foo' => 'bar/baz'}
133
- scope.last["clientName"].should == "andrew"
134
- scope.last["appSid"].should == "myAppSid"
135
- scopes.should be_empty
136
- end
137
- end
@@ -1,65 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Twilio::Util::RequestValidator do
4
- it 'should properly validate a Twilio Voice request' do
5
- token = '2bd9e9638872de601313dc77410d3b23'
6
- validator = Twilio::Util::RequestValidator.new token
7
- url = 'http://twiliotests.heroku.com/validate/voice'
8
- params = {
9
- 'ToState' => 'California',
10
- 'CalledState' => 'California',
11
- 'Direction' => 'inbound',
12
- 'FromState' => 'CA',
13
- 'AccountSid' => 'ACba8bc05eacf94afdae398e642c9cc32d',
14
- 'Caller' => '+14153595711',
15
- 'CallerZip' => '94108',
16
- 'CallerCountry' => 'US',
17
- 'From' => '+14153595711',
18
- 'FromCity' => 'SAN FRANCISCO',
19
- 'CallerCity' => 'SAN FRANCISCO',
20
- 'To' => '+14157669926',
21
- 'FromZip' => '94108',
22
- 'FromCountry' => 'US',
23
- 'ToCity' => '',
24
- 'CallStatus' => 'ringing',
25
- 'CalledCity' => '',
26
- 'CallerState' => 'CA',
27
- 'CalledZip' => '',
28
- 'ToZip' => '',
29
- 'ToCountry' => 'US',
30
- 'CallSid' => 'CA136d09cd59a3c0ec8dbff44da5c03f31',
31
- 'CalledCountry' => 'US',
32
- 'Called' => '+14157669926',
33
- 'ApiVersion' => '2010-04-01',
34
- 'ApplicationSid' => 'AP44efecad51364e80b133bb7c07eb8204'
35
- }
36
- signature = 'oVb2kXoVy8GEfwBDjR8bk/ZZ6eA='
37
- validator.validate(url, params, signature).should == true
38
- end
39
-
40
- it 'should properly validate a Twilio SMS request' do
41
- token = '2bd9e9638872de601313dc77410d3b23'
42
- validator = Twilio::Util::RequestValidator.new token
43
- url = 'http://twiliotests.heroku.com/validate/sms'
44
- params = {
45
- 'ToState' => 'CA',
46
- 'FromState' => 'CA',
47
- 'AccountSid' => 'ACba8bc05eacf94afdae398e642c9cc32d',
48
- 'SmsMessageSid' => 'SM2003cbd5e6a3701999aa3e5f20ff2787',
49
- 'Body' => 'Orly',
50
- 'From' => '+14159354345',
51
- 'FromCity' => 'SAN FRANCISCO',
52
- 'SmsStatus' => 'received',
53
- 'FromZip' => '94107',
54
- 'FromCountry' => 'US',
55
- 'To' => '+14158141819',
56
- 'ToCity' => 'SAN FRANCISCO',
57
- 'ToZip' => '94105',
58
- 'ToCountry' => 'US',
59
- 'ApiVersion' => '2010-04-01',
60
- 'SmsSid' => 'SM2003cbd5e6a3701999aa3e5f20ff2787'
61
- }
62
- signature = 'mxeiv65lEe0b8L6LdVw2jgJi8yw='
63
- validator.validate(url, params, signature).should == true
64
- end
65
- end