twilio 2.6.0 → 2.7.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.
data/README.rdoc CHANGED
@@ -46,5 +46,6 @@ Copyright (c) 2009 Phil Misiowiec, Webficient LLC. See LICENSE for details.
46
46
 
47
47
  == Contributors
48
48
 
49
- Alex K Wolfe
49
+ Kyle Daigle
50
50
  Jonathan Rudenberg
51
+ Alex K Wolfe
data/Rakefile CHANGED
@@ -5,9 +5,10 @@ begin
5
5
  Jeweler::Tasks.new do |gem|
6
6
  gem.name = "twilio"
7
7
  gem.summary = %Q{Twilio API Client}
8
+ gem.description = %Q{Twilio API wrapper}
8
9
  gem.email = "github@webficient.com"
9
10
  gem.homepage = "http://github.com/webficient/twilio"
10
- gem.authors = ["Phil Misiowiec", "Alex K Wolfe"]
11
+ gem.authors = ["Phil Misiowiec", "Jonathan Rudenberg", "Alex K Wolfe", "Kyle Daigle"]
11
12
  gem.add_dependency 'builder', '>= 2.1.2'
12
13
  gem.add_dependency 'httparty', '>= 0.4.3'
13
14
  end
data/VERSION.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  :patch: 0
3
3
  :major: 2
4
- :minor: 6
4
+ :minor: 7
5
5
  :build:
data/lib/twilio.rb CHANGED
@@ -26,6 +26,7 @@ require 'builder'
26
26
  require 'twilio/twilio_object'
27
27
  require 'twilio/account'
28
28
  require 'twilio/call'
29
+ require 'twilio/sms'
29
30
  require 'twilio/connection'
30
31
  require 'twilio/incoming_phone_number'
31
32
  require 'twilio/local_phone_number'
data/lib/twilio/sms.rb ADDED
@@ -0,0 +1,21 @@
1
+ module Twilio
2
+ # An SMS message resource represents an Inbound or Outbound SMS message. When someone sends a text message from
3
+ # or to your application, either via the REST API, or during a call via the verb, an SMS message resource is created.
4
+ class Sms < TwilioObject
5
+ # Example:
6
+ # Twilio.connect('my_twilio_sid', 'my_auth_token')
7
+ # Twilio::Sms.message(CALLER_ID, user_number, 'This is my simple SMS message')
8
+ def message(from, to, body)
9
+ Twilio.post("/SMS/Messages", :body => {:From => from, :To => to, :Body => body})
10
+ end
11
+
12
+ def list(optional = {})
13
+ Twilio.get("/SMS/Messages", :query => optional)
14
+ end
15
+
16
+ def get(sms_message_sid)
17
+ Twilio.get("/SMS/Messages/#{sms_message_sid}")
18
+ end
19
+
20
+ end
21
+ end
data/lib/twilio/verb.rb CHANGED
@@ -15,28 +15,28 @@ module Twilio
15
15
  # }
16
16
  # verb.response
17
17
  class Verb
18
-
18
+
19
19
  attr_reader :response
20
-
20
+
21
21
  class << self
22
22
  def method_missing(method_id, *args) #:nodoc:
23
23
  v = Verb.new
24
24
  v.send(method_id, *args)
25
25
  end
26
26
  end
27
-
27
+
28
28
  def initialize(&block)
29
29
  @xml = Builder::XmlMarkup.new
30
30
  @xml.instruct!
31
-
31
+
32
32
  if block_given?
33
33
  @chain = true
34
34
  @response = @xml.Response { block.call(self) }
35
35
  end
36
36
  end
37
-
38
- # The Say verb converts text to speech that is read back to the caller.
39
- # Say is useful for dynamic text that is difficult to prerecord.
37
+
38
+ # The Say verb converts text to speech that is read back to the caller.
39
+ # Say is useful for dynamic text that is difficult to prerecord.
40
40
  #
41
41
  # Examples:
42
42
  # Twilio::Verb.say 'The time is 9:35 PM.'
@@ -47,7 +47,7 @@ module Twilio
47
47
  #
48
48
  # Twilio::Verb.say 'Your PIN is 1234', :loop => 4
49
49
  # Twilio::Verb.say 'Your PIN is 1 2 3 4', :loop => 4
50
- #
50
+ #
51
51
  # If you need a longer pause between each loop, instead of explicitly calling the Pause
52
52
  # verb within a block, you can set the convenient pause option:
53
53
  #
@@ -69,7 +69,7 @@ module Twilio
69
69
  raise ArgumentError, 'say expects String or Hash argument'
70
70
  end
71
71
  end
72
-
72
+
73
73
  output {
74
74
  if options[:pause]
75
75
  loop_with_pause(options[:loop], @xml) do
@@ -80,8 +80,8 @@ module Twilio
80
80
  end
81
81
  }
82
82
  end
83
-
84
- # The Play verb plays an audio URL back to the caller.
83
+
84
+ # The Play verb plays an audio URL back to the caller.
85
85
  # Examples:
86
86
  # Twilio::Verb.play 'http://foo.com/cowbell.mp3'
87
87
  # Twilio::Verb.play 'http://foo.com/cowbell.mp3', :loop => 3
@@ -113,13 +113,13 @@ module Twilio
113
113
  end
114
114
  else
115
115
  @xml.Play(options[:audio_url], :loop => options[:loop])
116
- end
116
+ end
117
117
  }
118
118
  end
119
-
120
- # The Gather verb collects digits entered by a caller into their telephone keypad.
121
- # When the caller is done entering data, Twilio submits that data to a provided URL,
122
- # as either a HTTP GET or POST request, just like a web browser submits data from an HTML form.
119
+
120
+ # The Gather verb collects digits entered by a caller into their telephone keypad.
121
+ # When the caller is done entering data, Twilio submits that data to a provided URL,
122
+ # as either a HTTP GET or POST request, just like a web browser submits data from an HTML form.
123
123
  #
124
124
  # Options (see http://www.twilio.com/docs/api_reference/TwiML/gather) are passed in as a hash
125
125
  #
@@ -140,18 +140,18 @@ module Twilio
140
140
  # verb.response # represents the final xml output
141
141
  def gather(*args, &block)
142
142
  options = args.shift || {}
143
- output {
143
+ output {
144
144
  if block_given?
145
145
  @xml.Gather(options) { block.call}
146
146
  else
147
- @xml.Gather(options)
147
+ @xml.Gather(options)
148
148
  end
149
149
  }
150
150
  end
151
-
151
+
152
152
  #play, say, pause
153
-
154
- # The Record verb records the caller's voice and returns a URL that links to a file
153
+
154
+ # The Record verb records the caller's voice and returns a URL that links to a file
155
155
  # containing the audio recording.
156
156
  #
157
157
  # Options (see http://www.twilio.com/docs/api_reference/TwiML/record) are passed in as a hash
@@ -165,15 +165,15 @@ module Twilio
165
165
  options = args.shift
166
166
  output { @xml.Record(options) }
167
167
  end
168
-
169
- # The Dial verb connects the current caller to an another phone. If the called party picks up,
170
- # the two parties are connected and can communicate until one hangs up. If the called party does
168
+
169
+ # The Dial verb connects the current caller to an another phone. If the called party picks up,
170
+ # the two parties are connected and can communicate until one hangs up. If the called party does
171
171
  # not pick up, if a busy signal is received, or the number doesn't exist, the dial verb will finish.
172
172
  #
173
- # If an action verb is provided, Twilio will submit the outcome of the call attempt to the action URL.
173
+ # If an action verb is provided, Twilio will submit the outcome of the call attempt to the action URL.
174
174
  # If no action is provided, Dial will fall through to the next verb in the document.
175
175
  #
176
- # Note: this is different than the behavior of Record and Gather. Dial does not submit back to the
176
+ # Note: this is different than the behavior of Record and Gather. Dial does not submit back to the
177
177
  # current document URL if no action is provided.
178
178
  #
179
179
  # Options (see http://www.twilio.com/docs/api_reference/TwiML/dial) are passed in as a hash
@@ -206,16 +206,16 @@ module Twilio
206
206
  raise ArgumentError, 'dial expects String or Hash argument'
207
207
  end
208
208
  end
209
-
210
- output {
209
+
210
+ output {
211
211
  if block_given?
212
212
  @xml.Dial(options) { block.call }
213
213
  else
214
- @xml.Dial(number_to_dial, options)
214
+ @xml.Dial(number_to_dial, options)
215
215
  end
216
216
  }
217
217
  end
218
-
218
+
219
219
  # The <Dial> verb's <Conference> noun allows you to connect to a conference room.
220
220
  # Much like how the <Number> noun allows you to connect to another phone number,
221
221
  # the <Conference> noun allows you to connect to a named conference room and talk
@@ -243,12 +243,12 @@ module Twilio
243
243
  raise ArgumentError, 'conference expects String or Hash argument'
244
244
  end
245
245
  end
246
-
246
+
247
247
  output { @xml.Conference(conference_name, options)}
248
248
  end
249
-
250
- # The Pause (secondary) verb waits silently for a number of seconds.
251
- # It is normally chained with other verbs.
249
+
250
+ # The Pause (secondary) verb waits silently for a number of seconds.
251
+ # It is normally chained with other verbs.
252
252
  #
253
253
  # Options (see http://www.twilio.com/docs/api_reference/TwiML/pause) are passed in as a hash
254
254
  #
@@ -263,7 +263,7 @@ module Twilio
263
263
  options = args.shift
264
264
  output { @xml.Pause(options) }
265
265
  end
266
-
266
+
267
267
  # The Redirect (secondary) verb transfers control to a different URL.
268
268
  # It is normally chained with other verbs.
269
269
  #
@@ -288,12 +288,38 @@ module Twilio
288
288
  raise ArgumentError, 'dial expects String or Hash argument'
289
289
  end
290
290
  end
291
-
291
+
292
292
  output { @xml.Redirect(redirect_to_url, options) }
293
293
  end
294
-
295
- # The Hangup (secondary) verb ends the call.
296
- #
294
+
295
+ # The <Sms> verb sends a SMS message to a phone number.
296
+ #
297
+ # Options (see http://www.twilio.com/docs/api/2008-08-01/twiml/sms/sms) ars passed in as a hash
298
+ #
299
+ # Examples:
300
+ # verb = Twilio::Verb.new { |v|
301
+ # v.sms 'Meet at South Street'
302
+ # }
303
+ #
304
+ def sms(*args)
305
+ message = ''
306
+ options = {}
307
+ args.each do |arg|
308
+ case arg
309
+ when String
310
+ message = arg
311
+ when Hash
312
+ options.merge!(arg)
313
+ else
314
+ raise ArgumentError, 'sms expects STring or Hash argument'
315
+ end
316
+ end
317
+
318
+ output { @xml.Sms(message, options) }
319
+ end
320
+
321
+ # The Hangup (secondary) verb ends the call.
322
+ #
297
323
  # Examples:
298
324
  # If your response is only a hangup:
299
325
  #
@@ -309,7 +335,7 @@ module Twilio
309
335
  def hangup
310
336
  output { @xml.Hangup }
311
337
  end
312
-
338
+
313
339
  # The Number element specifies a phone number. The number element has two optional attributes: sendDigits and url.
314
340
  # Number elements can only be nested in Dial verbs
315
341
  def number(*args)
@@ -325,18 +351,18 @@ module Twilio
325
351
  raise ArgumentError, 'dial expects String or Hash argument'
326
352
  end
327
353
  end
328
-
354
+
329
355
  output { @xml.Number(number_to_dial, options) }
330
356
  end
331
-
357
+
332
358
  private
333
-
359
+
334
360
  def output
335
361
  @chain ? yield : @xml.Response { yield }
336
- end
337
-
362
+ end
363
+
338
364
  def loop_with_pause(loop_count, xml, &verb_action)
339
- last_iteration = loop_count-1
365
+ last_iteration = loop_count-1
340
366
  loop_count.times do |i|
341
367
  yield verb_action
342
368
  xml.Pause unless i == last_iteration
@@ -0,0 +1,14 @@
1
+ <TwilioResponse>
2
+ <SMSMessage>
3
+ <Sid>SM872fb94e3b358913777cdb313f25b46f</Sid>
4
+ <DateCreated>Sun, 04 Oct 2009 03:48:08 -0700</DateCreated>
5
+ <DateUpdated>Sun, 04 Oct 2009 03:48:10 -0700</DateUpdated>
6
+ <DateSent>Sun, 04 Oct 2009 03:48:10 -0700</DateSent>
7
+ <AccountSid>AC5ea872f6da5a21de157d80997a64bd33</AccountSid>
8
+ <To>4158675309</To>
9
+ <From>6505551212</From>
10
+ <Body>Hi there Jenny! Why didn't you call me back?</Body>
11
+ <Status>sent</Status>
12
+ <Flags>2</Flags>
13
+ </SMSMessage>
14
+ </TwilioResponse>
@@ -0,0 +1,29 @@
1
+ <TwilioResponse>
2
+ <SMSMessages page="0" numpages="2" pagesize="50" total="69" start="0"
3
+ end="49">
4
+ <SMSMessage>
5
+ <Sid>SM872fb94e3b358913777cdb313f25b46f</Sid>
6
+ <DateCreated>Sun, 04 Oct 2009 03:48:08 -0700</DateCreated>
7
+ <DateUpdated>Sun, 04 Oct 2009 03:48:10 -0700</DateUpdated>
8
+ <DateSent>Sun, 04 Oct 2009 03:48:10 -0700</DateSent>
9
+ <AccountSid>AC5ea872f6da5a21de157d80997a64bd33</AccountSid>
10
+ <To>4158675309</To>
11
+ <From>6505551212</From>
12
+ <Body>Hi there Jenny! Want to grab dinner?</Body>
13
+ <Status>sent</Status>
14
+ <Flags>2</Flags>
15
+ </SMSMessage>
16
+ <SMSMessage>
17
+ <Sid>SM47dfd824add482e1fee25ee3ce216113</Sid>
18
+ <DateCreated>Sun, 04 Oct 2009 03:48:07 -0700</DateCreated>
19
+ <DateUpdated>Sun, 04 Oct 2009 03:48:07 -0700</DateUpdated>
20
+ <DateSent>Sun, 04 Oct 2009 03:48:07 -0700</DateSent>
21
+ <AccountSid>AC5ea872f6da5a21de157d80997a64bd33</AccountSid>
22
+ <To>6505551212</To>
23
+ <From>4158675309</From>
24
+ <Body>The judge said you can't text me anymore.</Body>
25
+ <Status>sent</Status>
26
+ <Flags>1</Flags>
27
+ </SMSMessage>
28
+ </SMSMessages>
29
+ </TwilioResponse>
@@ -0,0 +1,14 @@
1
+ <TwilioResponse>
2
+ <SMSMessage>
3
+ <Sid>SM872fb94e3b358913777cdb313f25b46f</Sid>
4
+ <DateCreated>Sun, 04 Oct 2009 03:48:08 -0700</DateCreated>
5
+ <DateUpdated>Sun, 04 Oct 2009 03:48:10 -0700</DateUpdated>
6
+ <DateSent>Sun, 04 Oct 2009 03:48:10 -0700</DateSent>
7
+ <AccountSid>AC5ea872f6da5a21de157d80997a64bd33</AccountSid>
8
+ <To>5558675309</To>
9
+ <From>4155551212</From>
10
+ <Body>Hi Jenny! Want to grab dinner?</Body>
11
+ <Status>sent</Status>
12
+ <Flags>2</Flags>
13
+ </SMSMessage>
14
+ </TwilioResponse>
@@ -0,0 +1,23 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class SmsTest < Test::Unit::TestCase #:nodoc: all
4
+ context "A call" do
5
+ setup do
6
+ Twilio.connect('mysid', 'mytoken')
7
+ end
8
+
9
+ should "be messaged" do
10
+ assert_equal stub_response(:post, :sms_new, :resource => 'SMS/Messages'),
11
+ Twilio::Sms.message('4155551212', '5558675309', 'Hi Jenny! Want to grab dinner?')
12
+ end
13
+
14
+ should "be retrievable as a list" do
15
+ assert_equal stub_response(:get, :sms_messages, :resource => 'SMS/Messages'), Twilio::Sms.list
16
+ end
17
+
18
+ should "retrieve an individual sms" do
19
+ assert_equal stub_response(:get, :sms, :resource => 'SMS/Messages/SM872fb94e3b358913777cdb313f25b46f'),
20
+ Twilio::Sms.get('SM872fb94e3b358913777cdb313f25b46f')
21
+ end
22
+ end
23
+ end
@@ -3,30 +3,30 @@ require File.dirname(__FILE__) + '/../test_helper'
3
3
  class VerbTest < Test::Unit::TestCase #:nodoc: all
4
4
  context "A Twilio Verb" do
5
5
  should "say 'hi'" do
6
- assert_match %r{<Say( loop="1"| language="en"| voice="man"){3}>hi</Say>},
6
+ assert_match %r{<Say( loop="1"| language="en"| voice="man"){3}>hi</Say>},
7
7
  Twilio::Verb.say('hi')
8
8
  end
9
9
 
10
10
  should "say 'hi' with female voice" do
11
- assert_match %r{<Say( loop="1"| language="en"| voice="woman"){3}>hi</Say>},
11
+ assert_match %r{<Say( loop="1"| language="en"| voice="woman"){3}>hi</Say>},
12
12
  Twilio::Verb.say('hi', :voice => 'woman')
13
13
  end
14
-
14
+
15
15
  should "say 'hola' in Spanish with female voice" do
16
16
  assert_match %r{<Say( loop="1"| language="es"| voice="woman"){3}>hola</Say>},
17
17
  Twilio::Verb.say('hola', :voice => 'woman', :language => 'es')
18
18
  end
19
-
19
+
20
20
  should "say 'hi' three times" do
21
- assert_match %r{<Say( loop="3"| language="en"| voice="man"){3}>hi</Say>},
21
+ assert_match %r{<Say( loop="3"| language="en"| voice="man"){3}>hi</Say>},
22
22
  Twilio::Verb.say('hi', :loop => 3)
23
23
  end
24
-
24
+
25
25
  should "say 'hi' three times with pause" do
26
26
  assert_match %r{<Say( language="en"| voice="man"){2}>hi</Say><Pause/><Say( language="en"| voice="man"){2}>hi</Say><Pause/><Say( language="en"| voice="man"){2}>hi</Say>},
27
27
  Twilio::Verb.say('hi', :loop => 3, :pause => true)
28
28
  end
29
-
29
+
30
30
  should "say 'hi' with pause and say 'bye'" do
31
31
  verb = Twilio::Verb.new { |v|
32
32
  v.say 'hi', :loop => 1
@@ -35,7 +35,7 @@ class VerbTest < Test::Unit::TestCase #:nodoc: all
35
35
  }
36
36
  assert_match %r{<Say( loop="1"| language="en"| voice="man"){3}>hi</Say><Pause></Pause><Say( loop="1"| language="en"| voice="man"){3}>bye</Say>}, verb.response
37
37
  end
38
-
38
+
39
39
  should "say 'hi' with 2 second pause and say 'bye'" do
40
40
  verb = Twilio::Verb.new { |v|
41
41
  v.say 'hi'
@@ -44,53 +44,53 @@ class VerbTest < Test::Unit::TestCase #:nodoc: all
44
44
  }
45
45
  assert_match %r{<Say( loop="1"| language="en"| voice="man"){3}>hi</Say><Pause length="2"/><Say( loop="1"| language="en"| voice="man"){3}>bye</Say>}, verb.response
46
46
  end
47
-
47
+
48
48
  should "play mp3 response" do
49
49
  assert_equal verb_response(:play_mp3), Twilio::Verb.play('http://foo.com/cowbell.mp3')
50
50
  end
51
-
51
+
52
52
  should "play mp3 response two times" do
53
53
  assert_equal verb_response(:play_mp3_two_times), Twilio::Verb.play('http://foo.com/cowbell.mp3', :loop => 2)
54
54
  end
55
-
55
+
56
56
  should "play mp3 response two times with pause" do
57
- assert_equal verb_response(:play_mp3_two_times_with_pause),
57
+ assert_equal verb_response(:play_mp3_two_times_with_pause),
58
58
  Twilio::Verb.play('http://foo.com/cowbell.mp3', :loop => 2, :pause => true)
59
59
  end
60
-
60
+
61
61
  should "gather" do
62
62
  assert_equal verb_response(:gather), Twilio::Verb.gather
63
63
  end
64
-
64
+
65
65
  should "gather with action" do
66
66
  assert_equal verb_response(:gather_with_action), Twilio::Verb.gather(:action => 'http://foobar.com')
67
67
  end
68
-
68
+
69
69
  should "gather with GET method" do
70
70
  assert_equal verb_response(:gather_with_get_method), Twilio::Verb.gather(:method => 'GET')
71
71
  end
72
-
72
+
73
73
  should "gather with timeout" do
74
74
  assert_equal verb_response(:gather_with_timeout), Twilio::Verb.gather(:timeout => 10)
75
75
  end
76
-
76
+
77
77
  should "gather with finish key" do
78
78
  assert_equal verb_response(:gather_with_finish_key), Twilio::Verb.gather(:finishOnKey => '*')
79
79
  end
80
-
80
+
81
81
  should "gather with num digits" do
82
82
  assert_equal verb_response(:gather_with_num_digits), Twilio::Verb.gather(:numDigits => 5)
83
83
  end
84
-
84
+
85
85
  should "gather with all options set" do
86
- verb_response = Twilio::Verb.gather :action => 'http://foobar.com',
87
- :finishOnKey => '*',
88
- :method => 'GET',
86
+ verb_response = Twilio::Verb.gather :action => 'http://foobar.com',
87
+ :finishOnKey => '*',
88
+ :method => 'GET',
89
89
  :numDigits => 5,
90
- :timeout => 10
90
+ :timeout => 10
91
91
  assert_match %r{<Gather( finishOnKey="\*"| action="http://foobar.com"| method="GET"| numDigits="5"| timeout="10"){5}/>}, verb_response
92
92
  end
93
-
93
+
94
94
  should "gather and say instructions" do
95
95
  verb = Twilio::Verb.new { |v|
96
96
  v.gather {
@@ -100,7 +100,7 @@ class VerbTest < Test::Unit::TestCase #:nodoc: all
100
100
  }
101
101
  assert_match %r{<Gather><Say( loop="1"| language="en"| voice="man"){3}>Please enter your account number followed by the pound sign</Say></Gather><Say( loop="1"| language="en"| voice="man"){3}>We didn't receive any input. Goodbye!</Say>}, verb.response
102
102
  end
103
-
103
+
104
104
  should "gather with timeout and say instructions" do
105
105
  verb = Twilio::Verb.new { |v|
106
106
  v.gather(:timeout => 10) {
@@ -110,69 +110,69 @@ class VerbTest < Test::Unit::TestCase #:nodoc: all
110
110
  }
111
111
  assert_match %r{<Gather timeout="10"><Say( loop="1"| language="en"| voice="man"){3}>Please enter your account number followed by the pound sign</Say></Gather><Say( loop="1"| language="en"| voice="man"){3}>We didn't receive any input. Goodbye!</Say>}, verb.response
112
112
  end
113
-
113
+
114
114
  should "record" do
115
115
  assert_equal verb_response(:record), Twilio::Verb.record
116
116
  end
117
-
117
+
118
118
  should "record with action" do
119
119
  assert_equal verb_response(:record_with_action), Twilio::Verb.record(:action => 'http://foobar.com')
120
120
  end
121
-
121
+
122
122
  should "record with GET method" do
123
123
  assert_equal verb_response(:record_with_get_method), Twilio::Verb.record(:method => 'GET')
124
124
  end
125
-
125
+
126
126
  should "record with timeout" do
127
127
  assert_equal verb_response(:record_with_timeout), Twilio::Verb.record(:timeout => 10)
128
128
  end
129
-
129
+
130
130
  should "record with finish key" do
131
131
  assert_equal verb_response(:record_with_finish_key), Twilio::Verb.record(:finishOnKey => '*')
132
132
  end
133
-
133
+
134
134
  should "record with max length" do
135
- assert_equal verb_response(:record_with_max_length), Twilio::Verb.record(:maxLength => 1800)
135
+ assert_equal verb_response(:record_with_max_length), Twilio::Verb.record(:maxLength => 1800)
136
136
  end
137
-
137
+
138
138
  should "record with transcribe" do
139
139
  assert_match %r{<Record( transcribe="true"| transcribeCallback="/handle_transcribe"){2}/>},
140
140
  Twilio::Verb.record(:transcribe => true, :transcribeCallback => '/handle_transcribe')
141
141
  end
142
-
142
+
143
143
  should "dial" do
144
144
  assert_equal verb_response(:dial), Twilio::Verb.dial('415-123-4567')
145
145
  end
146
-
146
+
147
147
  should "dial with action" do
148
148
  assert_equal verb_response(:dial_with_action), Twilio::Verb.dial('415-123-4567', :action => 'http://foobar.com')
149
149
  end
150
-
150
+
151
151
  should "dial with GET method" do
152
152
  assert_equal verb_response(:dial_with_get_method), Twilio::Verb.dial('415-123-4567', :method => 'GET')
153
153
  end
154
-
154
+
155
155
  should "dial with timeout" do
156
156
  assert_equal verb_response(:dial_with_timeout), Twilio::Verb.dial('415-123-4567', :timeout => 10)
157
157
  end
158
-
158
+
159
159
  should "dial with hangup on star" do
160
160
  assert_equal verb_response(:dial_with_hangup_on_star), Twilio::Verb.dial('415-123-4567', :hangupOnStar => true)
161
161
  end
162
-
162
+
163
163
  should "dial with time limit" do
164
164
  assert_equal verb_response(:dial_with_time_limit), Twilio::Verb.dial('415-123-4567', :timeLimit => 3600)
165
165
  end
166
-
166
+
167
167
  should "dial with caller id" do
168
168
  assert_equal verb_response(:dial_with_caller_id), Twilio::Verb.dial('415-123-4567', :callerId => '858-987-6543')
169
169
  end
170
-
170
+
171
171
  should "dial with timeout and caller id" do
172
172
  assert_match %r{<Dial( timeout="10"| callerId="858-987-6543"){2}>415-123-4567</Dial>},
173
173
  Twilio::Verb.dial('415-123-4567', :timeout => 10, :callerId => '858-987-6543')
174
174
  end
175
-
175
+
176
176
  should "dial with redirect" do
177
177
  verb = Twilio::Verb.new { |v|
178
178
  v.dial '415-123-4567'
@@ -180,7 +180,7 @@ class VerbTest < Test::Unit::TestCase #:nodoc: all
180
180
  }
181
181
  assert_equal verb_response(:dial_with_redirect), verb.response
182
182
  end
183
-
183
+
184
184
  should "dial with number and send digits" do
185
185
  verb = Twilio::Verb.new { |v|
186
186
  v.dial {
@@ -189,7 +189,7 @@ class VerbTest < Test::Unit::TestCase #:nodoc: all
189
189
  }
190
190
  assert_equal verb_response(:dial_with_number_and_send_digits), verb.response
191
191
  end
192
-
192
+
193
193
  should "dial multiple numbers" do
194
194
  verb = Twilio::Verb.new { |v|
195
195
  v.dial {
@@ -200,7 +200,7 @@ class VerbTest < Test::Unit::TestCase #:nodoc: all
200
200
  }
201
201
  assert_equal verb_response(:dial_multiple_numbers), verb.response
202
202
  end
203
-
203
+
204
204
  should "dial a conference" do
205
205
  verb = Twilio::Verb.new { |v|
206
206
  v.dial {
@@ -209,7 +209,7 @@ class VerbTest < Test::Unit::TestCase #:nodoc: all
209
209
  }
210
210
  assert_equal verb_response(:dial_conference), verb.response
211
211
  end
212
-
212
+
213
213
  should "dial a muted conference" do
214
214
  verb = Twilio::Verb.new { |v|
215
215
  v.dial {
@@ -218,11 +218,11 @@ class VerbTest < Test::Unit::TestCase #:nodoc: all
218
218
  }
219
219
  assert_equal verb_response(:dial_muted_conference), verb.response
220
220
  end
221
-
221
+
222
222
  should "hangup" do
223
223
  assert_equal verb_response(:hangup), Twilio::Verb.hangup
224
224
  end
225
-
225
+
226
226
  should "say hi and hangup" do
227
227
  verb = Twilio::Verb.new { |v|
228
228
  v.say 'hi'
@@ -231,5 +231,14 @@ class VerbTest < Test::Unit::TestCase #:nodoc: all
231
231
  assert_match %r{<Say( loop="1"| language="en"| voice="man"){3}>hi</Say><Hangup/>},
232
232
  verb.response
233
233
  end
234
+
235
+ should "send a simple SMS message" do
236
+ verb = Twilio::Verb.new { |v|
237
+ v.sms 'Join us at the bar', :to => "8005554321", :from => "9006661111", :action => "/smsService", :method => "GET"
238
+ }
239
+
240
+ assert_match %r{<Sms( to="8005554321"| from="9006661111"| action="/smsService"| method="GET"){4}>Join us at the bar</Sms>},
241
+ verb.response
242
+ end
234
243
  end
235
244
  end
data/twilio.gemspec CHANGED
@@ -5,11 +5,12 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{twilio}
8
- s.version = "2.6.0"
8
+ s.version = "2.7.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Phil Misiowiec", "Alex K Wolfe"]
12
- s.date = %q{2010-02-11}
11
+ s.authors = ["Phil Misiowiec", "Jonathan Rudenberg", "Alex K Wolfe", "Kyle Daigle"]
12
+ s.date = %q{2010-02-12}
13
+ s.description = %q{Twilio API wrapper}
13
14
  s.email = %q{github@webficient.com}
14
15
  s.extra_rdoc_files = [
15
16
  "LICENSE",
@@ -31,6 +32,7 @@ Gem::Specification.new do |s|
31
32
  "lib/twilio/notification.rb",
32
33
  "lib/twilio/outgoing_caller_id.rb",
33
34
  "lib/twilio/recording.rb",
35
+ "lib/twilio/sms.rb",
34
36
  "lib/twilio/toll_free_phone_number.rb",
35
37
  "lib/twilio/twilio_object.rb",
36
38
  "lib/twilio/verb.rb",
@@ -54,6 +56,9 @@ Gem::Specification.new do |s|
54
56
  "test/fixtures/xml/outgoing_caller_ids.xml",
55
57
  "test/fixtures/xml/recording.xml",
56
58
  "test/fixtures/xml/recordings.xml",
59
+ "test/fixtures/xml/sms.xml",
60
+ "test/fixtures/xml/sms_messages.xml",
61
+ "test/fixtures/xml/sms_new.xml",
57
62
  "test/fixtures/xml/transcription.xml",
58
63
  "test/fixtures/xml/transcriptions.xml",
59
64
  "test/fixtures/yml/verb_responses.yml",
@@ -67,6 +72,7 @@ Gem::Specification.new do |s|
67
72
  "test/twilio/notification_test.rb",
68
73
  "test/twilio/outgoing_caller_id_test.rb",
69
74
  "test/twilio/recording_test.rb",
75
+ "test/twilio/sms_test.rb",
70
76
  "test/twilio/toll_free_phone_number_test.rb",
71
77
  "test/twilio/verb_test.rb",
72
78
  "twilio.gemspec"
@@ -87,6 +93,7 @@ Gem::Specification.new do |s|
87
93
  "test/twilio/notification_test.rb",
88
94
  "test/twilio/outgoing_caller_id_test.rb",
89
95
  "test/twilio/recording_test.rb",
96
+ "test/twilio/sms_test.rb",
90
97
  "test/twilio/toll_free_phone_number_test.rb",
91
98
  "test/twilio/verb_test.rb"
92
99
  ]
metadata CHANGED
@@ -1,16 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twilio
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.0
4
+ version: 2.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Phil Misiowiec
8
+ - Jonathan Rudenberg
8
9
  - Alex K Wolfe
10
+ - Kyle Daigle
9
11
  autorequire:
10
12
  bindir: bin
11
13
  cert_chain: []
12
14
 
13
- date: 2010-02-11 00:00:00 -08:00
15
+ date: 2010-02-12 00:00:00 -08:00
14
16
  default_executable:
15
17
  dependencies:
16
18
  - !ruby/object:Gem::Dependency
@@ -33,7 +35,7 @@ dependencies:
33
35
  - !ruby/object:Gem::Version
34
36
  version: 0.4.3
35
37
  version:
36
- description:
38
+ description: Twilio API wrapper
37
39
  email: github@webficient.com
38
40
  executables: []
39
41
 
@@ -58,6 +60,7 @@ files:
58
60
  - lib/twilio/notification.rb
59
61
  - lib/twilio/outgoing_caller_id.rb
60
62
  - lib/twilio/recording.rb
63
+ - lib/twilio/sms.rb
61
64
  - lib/twilio/toll_free_phone_number.rb
62
65
  - lib/twilio/twilio_object.rb
63
66
  - lib/twilio/verb.rb
@@ -81,6 +84,9 @@ files:
81
84
  - test/fixtures/xml/outgoing_caller_ids.xml
82
85
  - test/fixtures/xml/recording.xml
83
86
  - test/fixtures/xml/recordings.xml
87
+ - test/fixtures/xml/sms.xml
88
+ - test/fixtures/xml/sms_messages.xml
89
+ - test/fixtures/xml/sms_new.xml
84
90
  - test/fixtures/xml/transcription.xml
85
91
  - test/fixtures/xml/transcriptions.xml
86
92
  - test/fixtures/yml/verb_responses.yml
@@ -94,6 +100,7 @@ files:
94
100
  - test/twilio/notification_test.rb
95
101
  - test/twilio/outgoing_caller_id_test.rb
96
102
  - test/twilio/recording_test.rb
103
+ - test/twilio/sms_test.rb
97
104
  - test/twilio/toll_free_phone_number_test.rb
98
105
  - test/twilio/verb_test.rb
99
106
  - twilio.gemspec
@@ -136,5 +143,6 @@ test_files:
136
143
  - test/twilio/notification_test.rb
137
144
  - test/twilio/outgoing_caller_id_test.rb
138
145
  - test/twilio/recording_test.rb
146
+ - test/twilio/sms_test.rb
139
147
  - test/twilio/toll_free_phone_number_test.rb
140
148
  - test/twilio/verb_test.rb