twilio 2.9.0 → 3.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 (81) hide show
  1. data/.gitignore +4 -1
  2. data/CHANGELOG.rdoc +27 -0
  3. data/Gemfile +4 -0
  4. data/README.rdoc +16 -6
  5. data/Rakefile +6 -46
  6. data/lib/twilio.rb +21 -6
  7. data/lib/twilio/account.rb +1 -1
  8. data/lib/twilio/available_phone_numbers.rb +56 -0
  9. data/lib/twilio/call.rb +4 -4
  10. data/lib/twilio/conference.rb +6 -6
  11. data/lib/twilio/incoming_phone_number.rb +16 -2
  12. data/lib/twilio/notification.rb +2 -2
  13. data/lib/twilio/outgoing_caller_id.rb +5 -4
  14. data/lib/twilio/recording.rb +2 -2
  15. data/lib/twilio/sms.rb +2 -2
  16. data/lib/twilio/twilio_object.rb +8 -5
  17. data/lib/twilio/version.rb +3 -0
  18. data/spec/fixtures/xml/account.xml +23 -0
  19. data/{test → spec}/fixtures/xml/account_renamed.xml +0 -0
  20. data/spec/fixtures/xml/available_phone_numbers_local.xml +26 -0
  21. data/spec/fixtures/xml/available_phone_numbers_local_search.xml +15 -0
  22. data/spec/fixtures/xml/available_phone_numbers_toll_free.xml +14 -0
  23. data/spec/fixtures/xml/available_phone_numbers_toll_free_search.xml +10 -0
  24. data/{test → spec}/fixtures/xml/call.xml +0 -0
  25. data/{test → spec}/fixtures/xml/call_new.xml +0 -0
  26. data/{test → spec}/fixtures/xml/call_redirected.xml +0 -0
  27. data/{test → spec}/fixtures/xml/calls.xml +0 -0
  28. data/{test → spec}/fixtures/xml/conference.xml +1 -1
  29. data/{test → spec}/fixtures/xml/conference_participant.xml +0 -0
  30. data/{test → spec}/fixtures/xml/conference_participant_muted.xml +0 -0
  31. data/{test → spec}/fixtures/xml/conference_participants.xml +0 -0
  32. data/{test → spec}/fixtures/xml/conferences.xml +0 -0
  33. data/{test → spec}/fixtures/xml/incoming_phone_number.xml +0 -0
  34. data/{test → spec}/fixtures/xml/incoming_phone_numbers.xml +0 -0
  35. data/{test → spec}/fixtures/xml/notification.xml +0 -0
  36. data/{test → spec}/fixtures/xml/notifications.xml +0 -0
  37. data/{test → spec}/fixtures/xml/outgoing_caller_id.xml +0 -0
  38. data/{test → spec}/fixtures/xml/outgoing_caller_id_new.xml +0 -0
  39. data/{test → spec}/fixtures/xml/outgoing_caller_ids.xml +0 -0
  40. data/{test → spec}/fixtures/xml/recording.xml +0 -0
  41. data/{test → spec}/fixtures/xml/recordings.xml +0 -0
  42. data/{test → spec}/fixtures/xml/sms.xml +0 -0
  43. data/{test → spec}/fixtures/xml/sms_messages.xml +0 -0
  44. data/{test → spec}/fixtures/xml/sms_new.xml +0 -0
  45. data/{test → spec}/fixtures/xml/sms_new_with_callback.xml +0 -0
  46. data/{test → spec}/fixtures/xml/transcription.xml +0 -0
  47. data/{test → spec}/fixtures/xml/transcriptions.xml +0 -0
  48. data/{test → spec}/fixtures/yml/verb_responses.yml +0 -0
  49. data/spec/spec_helper.rb +17 -0
  50. data/spec/support/twilio_helpers.rb +52 -0
  51. data/spec/twilio/account_spec.rb +21 -0
  52. data/spec/twilio/available_phone_numbers_spec.rb +53 -0
  53. data/spec/twilio/call_spec.rb +64 -0
  54. data/spec/twilio/conference_spec.rb +58 -0
  55. data/spec/twilio/incoming_phone_number_spec.rb +42 -0
  56. data/spec/twilio/live_connection_spec.rb +21 -0
  57. data/spec/twilio/notification_spec.rb +29 -0
  58. data/spec/twilio/outgoing_caller_id_spec.rb +43 -0
  59. data/spec/twilio/recording_spec.rb +44 -0
  60. data/spec/twilio/sms_spec.rb +36 -0
  61. data/spec/twilio/verb_spec.rb +235 -0
  62. data/twilio.gemspec +23 -111
  63. metadata +164 -82
  64. data/VERSION.yml +0 -5
  65. data/lib/twilio/connection.rb +0 -24
  66. data/lib/twilio/local_phone_number.rb +0 -26
  67. data/lib/twilio/toll_free_phone_number.rb +0 -26
  68. data/test/fixtures/xml/account.xml +0 -11
  69. data/test/test_helper.rb +0 -33
  70. data/test/twilio/account_test.rb +0 -28
  71. data/test/twilio/call_test.rb +0 -66
  72. data/test/twilio/conference_test.rb +0 -46
  73. data/test/twilio/connection_test.rb +0 -25
  74. data/test/twilio/incoming_phone_number_test.rb +0 -31
  75. data/test/twilio/local_phone_number_test.rb +0 -37
  76. data/test/twilio/notification_test.rb +0 -35
  77. data/test/twilio/outgoing_caller_id_test.rb +0 -45
  78. data/test/twilio/recording_test.rb +0 -47
  79. data/test/twilio/sms_test.rb +0 -27
  80. data/test/twilio/toll_free_phone_number_test.rb +0 -38
  81. data/test/twilio/verb_test.rb +0 -244
@@ -0,0 +1,15 @@
1
+ <TwilioResponse>
2
+ <AvailablePhoneNumbers uri="/2010-04-01/Accounts/ACde6f1e11047ebd6fe7a55f120be3a900/AvailablePhoneNumbers/US/Local?Contains=510555****">
3
+ <AvailablePhoneNumber>
4
+ <FriendlyName>(510) 555-1214</FriendlyName>
5
+ <PhoneNumber>+15105551214</PhoneNumber>
6
+ <Lata>722</Lata>
7
+ <RateCenter>OKLD0349T</RateCenter>
8
+ <Latitude>37.806940</Latitude>
9
+ <Longitude>-122.270360</Longitude>
10
+ <Region>CA</Region>
11
+ <PostalCode>94612</PostalCode>
12
+ <IsoCountry>US</IsoCountry>
13
+ </AvailablePhoneNumber>
14
+ </AvailablePhoneNumbers>
15
+ </TwilioResponse>
@@ -0,0 +1,14 @@
1
+ <TwilioResponse>
2
+ <AvailablePhoneNumbers uri="/2010-04-01/Accounts/ACde6f1e11047ebd6fe7a55f120be3a900/AvailablePhoneNumbers/US/TollFree">
3
+ <AvailablePhoneNumber>
4
+ <FriendlyName>(866) 583-8815</FriendlyName>
5
+ <PhoneNumber>+18665838815</PhoneNumber>
6
+ <IsoCountry>US</IsoCountry>
7
+ </AvailablePhoneNumber>
8
+ <AvailablePhoneNumber>
9
+ <FriendlyName>(866) 583-0795</FriendlyName>
10
+ <PhoneNumber>+18665830795</PhoneNumber>
11
+ <IsoCountry>US</IsoCountry>
12
+ </AvailablePhoneNumber>
13
+ </AvailablePhoneNumbers>
14
+ </TwilioResponse>
@@ -0,0 +1,10 @@
1
+ <TwilioResponse>
2
+ <AvailablePhoneNumbers uri="/2010-04-01/Accounts/ACde6f1e11047ebd6fe7a55f120be3a900/AvailablePhoneNumbers/US/TollFree?Contains=STORM">
3
+ <AvailablePhoneNumber>
4
+ <FriendlyName>(866) 557-8676</FriendlyName>
5
+ <PhoneNumber>+18665578676</PhoneNumber>
6
+ <IsoCountry>US</IsoCountry>
7
+ </AvailablePhoneNumber>
8
+ </AvailablePhoneNumbers>
9
+ </TwilioResponse>
10
+
File without changes
File without changes
File without changes
@@ -1,6 +1,6 @@
1
1
  <TwilioResponse>
2
2
  <Conference>
3
- <Sid>CFd0a50bbe038c437e87f6c82db8f37f21</Sid>
3
+ <Sid>CF9f2ead1ae43cdabeab102fa30d938378</Sid>
4
4
  <AccountSid>mysid</AccountSid>
5
5
  <FriendlyName>1234</FriendlyName>
6
6
  <Status>2</Status>
File without changes
File without changes
@@ -0,0 +1,17 @@
1
+ require 'bundler'
2
+ Bundler.setup
3
+
4
+ require 'twilio'
5
+
6
+ require 'support/twilio_helpers'
7
+ require 'webmock/rspec'
8
+
9
+ RSpec.configure do |config|
10
+ config.include TwilioHelpers
11
+ config.before(:suite) do
12
+ WebMock.disable_net_connect!
13
+ end
14
+ config.after(:suite) do
15
+ WebMock.allow_net_connect!
16
+ end
17
+ end
@@ -0,0 +1,52 @@
1
+ module TwilioHelpers #:nodoc:
2
+
3
+ def stub_http_request(http_method, fixture_name, *opts)
4
+ if opts
5
+ request_options = opts.pop if opts.last.is_a?(Hash)
6
+ resource = opts.pop
7
+ end
8
+
9
+ fake_response = fixture(fixture_name)
10
+ url = twilio_url(resource)
11
+
12
+ if request_options
13
+ stub_request(http_method, url).with(request_options).to_return(:body => fake_response)
14
+ else
15
+ stub_request(http_method, url).to_return(:body => fake_response)
16
+ end
17
+
18
+ return fake_response, url
19
+ end
20
+
21
+ def stub_get(fixture, *opts)
22
+ stub_http_request(:get, fixture, *opts)
23
+ end
24
+
25
+ def stub_post(fixture, *opts)
26
+ stub_http_request(:post, fixture, *opts)
27
+ end
28
+
29
+ def stub_put(fixture, *opts)
30
+ stub_http_request(:put, fixture, *opts)
31
+ end
32
+
33
+ def stub_delete(fixture, *opts)
34
+ stub_http_request(:delete, fixture, *opts)
35
+ end
36
+
37
+ def verb_response(verb)
38
+ path = File.join(File.dirname(__FILE__), "../fixtures/yml/verb_responses.yml")
39
+ YAML.load_file(path)[verb.to_s]['response']
40
+ end
41
+
42
+ private
43
+
44
+ def twilio_url(url=nil)
45
+ "https://mysid:mytoken@api.twilio.com:443/2010-04-01/Accounts/mysid#{'/' + url if url}"
46
+ end
47
+
48
+ def fixture(filename)
49
+ path = File.join(File.dirname(__FILE__), "../fixtures/xml/#{filename}.xml")
50
+ File.read path
51
+ end
52
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Account' do
4
+ before(:all) do
5
+ Twilio.connect('mysid', 'mytoken')
6
+ end
7
+
8
+ it "gets an account" do
9
+ response, url = stub_get(:account)
10
+
11
+ Twilio::Account.get.should == response
12
+ WebMock.should have_requested(:get, twilio_url)
13
+ end
14
+
15
+ it "updates name" do
16
+ response, url = stub_put(:account_renamed)
17
+
18
+ Twilio::Account.update_name('Bubba').should == response
19
+ WebMock.should have_requested(:put, twilio_url).with(:body => {:FriendlyName => 'Bubba'})
20
+ end
21
+ end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Available Phone Numbers" do
4
+ before(:all) do
5
+ Twilio.connect('mysid', 'mytoken')
6
+ end
7
+
8
+ context "Local Number" do
9
+ it "is searchable" do
10
+ response, url = stub_get(:available_phone_numbers_local, 'AvailablePhoneNumbers/US/Local')
11
+
12
+ Twilio::AvailablePhoneNumbers.search_local.should == response
13
+ WebMock.should have_requested(:get, url)
14
+ end
15
+
16
+ it "is searchable by area code" do
17
+ response, url = stub_get(:available_phone_numbers_local_search, 'AvailablePhoneNumbers/US/Local?AreaCode=510')
18
+
19
+ Twilio::AvailablePhoneNumbers.search_local(:area_code => 510).should == response
20
+ WebMock.should have_requested(:get, url)
21
+ end
22
+
23
+ it "is searchable by postal code" do
24
+ response, url = stub_get(:available_phone_numbers_local_search, 'AvailablePhoneNumbers/US/Local?InPostalCode=94612')
25
+
26
+ Twilio::AvailablePhoneNumbers.search_local(:postal_code => 94612).should == response
27
+ WebMock.should have_requested(:get, url)
28
+ end
29
+
30
+ it "is searchable using multiple parameters" do
31
+ response, url = stub_get(:available_phone_numbers_local_search, 'AvailablePhoneNumbers/US/Local?NearLatLong=37.806940%2C-122.270360&InRateCenter=OKLD0349T&NearNumber=15105551213&Distance=50&InRegion=CA&InLata=722&Contains=510555****')
32
+
33
+ Twilio::AvailablePhoneNumbers.search_local(:in_region => 'CA', :contains => '510555****', :near_lat_long => '37.806940,-122.270360', :near_number => '15105551213', :in_lata => 722, :in_rate_center => 'OKLD0349T', :distance => 50).should == response
34
+ WebMock.should have_requested(:get, url)
35
+ end
36
+ end
37
+
38
+ context "Toll-free Number" do
39
+ it "is searchable" do
40
+ response, url = stub_get(:available_phone_numbers_toll_free, 'AvailablePhoneNumbers/US/TollFree')
41
+
42
+ Twilio::AvailablePhoneNumbers.search_toll_free.should == response
43
+ WebMock.should have_requested(:get, url)
44
+ end
45
+
46
+ it "is searchable as a vanity number" do
47
+ response, url = stub_get(:available_phone_numbers_toll_free_search, 'AvailablePhoneNumbers/US/TollFree?Contains=STORM')
48
+
49
+ Twilio::AvailablePhoneNumbers.search_toll_free(:contains => 'STORM').should == response
50
+ WebMock.should have_requested(:get, url)
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Call" do
4
+ before(:all) do
5
+ Twilio.connect('mysid', 'mytoken')
6
+ @call_sid = 'CA42ed11f93dc08b952027ffbc406d0868'
7
+ end
8
+
9
+ it "can be made" do
10
+ response, url = stub_post(:call_new, 'Calls')
11
+
12
+ Twilio::Call.make('4158675309', '4155551212', 'http://localhost:3000/call_handler').should == response
13
+ WebMock.should have_requested(:post, url)
14
+ end
15
+
16
+ it "can be redirected" do
17
+ response, url = stub_post(:call_redirected, "Calls/#{@call_sid}")
18
+
19
+ Twilio::Call.redirect(@call_sid, 'http://localhost:3000/redirect_handler').should == response
20
+ WebMock.should have_requested(:post, url)
21
+ end
22
+
23
+ it "gets a list of calls" do
24
+ response, url = stub_get(:calls, 'Calls')
25
+
26
+ Twilio::Call.list.should == response
27
+ WebMock.should have_requested(:get, url)
28
+ end
29
+
30
+ it "gets a specific call" do
31
+ response, url = stub_get(:calls, "Calls/#{@call_sid}")
32
+
33
+ Twilio::Call.get(@call_sid).should == response
34
+ WebMock.should have_requested(:get, url)
35
+ end
36
+
37
+ it "gets a list of call segments" do
38
+ response, url = stub_get(:calls, "Calls/#{@call_sid}/Segments")
39
+
40
+ Twilio::Call.segments(@call_sid).should == response
41
+ WebMock.should have_requested(:get, url)
42
+ end
43
+
44
+ it "gets a specific call segment" do
45
+ response, url = stub_get(:calls, "Calls/#{@call_sid}/Segments/abc123")
46
+
47
+ Twilio::Call.segments(@call_sid, 'abc123').should == response
48
+ WebMock.should have_requested(:get, url)
49
+ end
50
+
51
+ it "gets a list of call recordings" do
52
+ response, url = stub_get(:recordings, "Calls/#{@call_sid}/Recordings")
53
+
54
+ Twilio::Call.recordings(@call_sid).should == response
55
+ WebMock.should have_requested(:get, url)
56
+ end
57
+
58
+ it "gets a list of call notifications" do
59
+ response, url = stub_get(:notifications, "Calls/#{@call_sid}/Notifications")
60
+
61
+ Twilio::Call.notifications(@call_sid).should == response
62
+ WebMock.should have_requested(:get, url)
63
+ end
64
+ end
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Conference" do
4
+ before(:all) do
5
+ Twilio.connect('mysid', 'mytoken')
6
+ @conference_sid = 'CF9f2ead1ae43cdabeab102fa30d938378'
7
+ @call_sid = 'CA9ae8e040497c0598481c2031a154919e'
8
+ end
9
+
10
+ it "gets a list of conferences" do
11
+ response, url = stub_get(:conferences, 'Conferences')
12
+
13
+ Twilio::Conference.list.should == response
14
+ WebMock.should have_requested(:get, url)
15
+ end
16
+
17
+ it "gets a specific conference" do
18
+ response, url = stub_get(:conference, "Conferences/#{@conference_sid}")
19
+
20
+ Twilio::Conference.get(@conference_sid).should == response
21
+ WebMock.should have_requested(:get, url)
22
+ end
23
+
24
+ it "gets a list of participants" do
25
+ response, url = stub_get(:conference_participants, "Conferences/#{@conference_sid}/Participants")
26
+
27
+ Twilio::Conference.participants(@conference_sid).should == response
28
+ WebMock.should have_requested(:get, url)
29
+ end
30
+
31
+ it "gets a specific participant" do
32
+ response, url = stub_get(:conference_participant, "Conferences/#{@conference_sid}/Participants/#{@call_sid}")
33
+
34
+ Twilio::Conference.participant(@conference_sid, @call_sid).should == response
35
+ WebMock.should have_requested(:get, url)
36
+ end
37
+
38
+ it "can mute a particant" do
39
+ response, url = stub_post(:conference_participant_muted, "Conferences/#{@conference_sid}/Participants/#{@call_sid}", :body => 'Muted=true')
40
+
41
+ Twilio::Conference.mute_participant(@conference_sid, @call_sid).should == response
42
+ WebMock.should have_requested(:post, url)
43
+ end
44
+
45
+ it "can unmute a participant" do
46
+ response, url = stub_post(:conference_participant, "Conferences/#{@conference_sid}/Participants/#{@call_sid}", :body => 'Muted=false')
47
+
48
+ Twilio::Conference.unmute_participant(@conference_sid, @call_sid).should == response
49
+ WebMock.should have_requested(:post, url)
50
+ end
51
+
52
+ it "can be kicked" do
53
+ response, url = stub_delete(:conference_participant, "Conferences/#{@conference_sid}/Participants/#{@call_sid}")
54
+
55
+ Twilio::Conference.kick_participant(@conference_sid, @call_sid).should == response
56
+ WebMock.should have_requested(:delete, url)
57
+ end
58
+ end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Incoming Phone Number" do
4
+ before(:all) do
5
+ Twilio.connect('mysid', 'mytoken')
6
+ @incoming_sid = 'PNe536dfda7c6184afab78d980cb8cdf43'
7
+ end
8
+
9
+ it "gets a specific phone number" do
10
+ response, url = stub_get(:incoming_phone_number, "IncomingPhoneNumbers/#{@incoming_sid}")
11
+
12
+ Twilio::IncomingPhoneNumber.get(@incoming_sid).should == response
13
+ WebMock.should have_requested(:get, url)
14
+ end
15
+
16
+ it "gets a list of phone numbers" do
17
+ response, url = stub_get(:incoming_phone_numbers, 'IncomingPhoneNumbers')
18
+
19
+ Twilio::IncomingPhoneNumber.list.should == response
20
+ WebMock.should have_requested(:get, url)
21
+ end
22
+
23
+ context "creating" do
24
+ it "is created" do
25
+ response, url = stub_post(:incoming_phone_number, 'IncomingPhoneNumbers')
26
+
27
+ Twilio::IncomingPhoneNumber.create(:PhoneNumber => '8055551212').should == response
28
+ WebMock.should have_requested(:post, url)
29
+ end
30
+
31
+ it "raises an exception if PhoneNumber or AreaCode are not set" do
32
+ expect { Twilio::IncomingPhoneNumber.create(:FriendlyName => 'Booyah') }.to raise_exception
33
+ end
34
+ end
35
+
36
+ it "is deleted" do
37
+ response, url = stub_delete(:incoming_phone_number, "IncomingPhoneNumbers/#{@incoming_sid}")
38
+
39
+ Twilio::IncomingPhoneNumber.delete(@incoming_sid).should == response
40
+ WebMock.should have_requested(:delete, url)
41
+ end
42
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ # uncomment and add your own tests here
4
+ =begin
5
+ describe "testing with a live connection" do
6
+ before(:all) do
7
+ WebMock.allow_net_connect!
8
+ @sid = 'abc123'
9
+ @token = '123'
10
+ Twilio.connect(@sid, @token)
11
+ end
12
+
13
+ after(:all) do
14
+ WebMock.disable_net_connect!
15
+ end
16
+
17
+ it "gets real account" do
18
+ Twilio::Account.get.should include("TwilioResponse")
19
+ end
20
+ end
21
+ =end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Notification" do
4
+ before(:all) do
5
+ Twilio.connect('mysid', 'mytoken')
6
+ @notification_sid = 'NO1fb7086ceb85caed2265f17d7bf7981c'
7
+ end
8
+
9
+ it "gets a list of notifications" do
10
+ response, url = stub_get(:notifications, 'Notifications')
11
+
12
+ Twilio::Notification.list.should == response
13
+ WebMock.should have_requested(:get, url)
14
+ end
15
+
16
+ it "gets a specific notification" do
17
+ response, url = stub_get(:notification, "Notifications/#{@notification_sid}")
18
+
19
+ Twilio::Notification.get(@notification_sid).should == response
20
+ WebMock.should have_requested(:get, url)
21
+ end
22
+
23
+ it "is deleted" do
24
+ response, url = stub_delete(:notification, "Notifications/#{@notification_sid}")
25
+
26
+ Twilio::Notification.delete(@notification_sid).should == response
27
+ WebMock.should have_requested(:delete, url)
28
+ end
29
+ end