twilio 2.9.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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