webficient-twilio 2.1.0 → 2.2.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
@@ -1,23 +1,41 @@
1
- = twilio
1
+ = Twilio Gem
2
2
 
3
- This wrapper defines each of the interfaces currently supported by Twilio REST API.
3
+ The Twilio gem provides two major pieces of functionality: (1) a Ruby wrapper for the Twilio REST API and (2) response handlers based on the Twilio Markup XML (TwiML).
4
4
 
5
- Sample Usage:
5
+ See http://www.twilio.com/docs/index for Twilio's API documentation.
6
+
7
+ For an overview of the Twilio Gem and a sample use case, check out http://www.webficient.com/2009/06/22/hello-this-is-your-rails-app-calling-you.
8
+
9
+ == Calling the Twilio REST API
6
10
 
7
11
  First create a connection object:
8
12
 
9
13
  c = Twilio::Connection.new('my_twilio_sid', 'my_auth_token')
10
14
 
11
15
  Now instantiate other objects by passing in the connection:
12
-
13
- a = Twilio::Account.new(c)
14
- a.update_name('sparky')
15
16
 
16
17
  call = Twilio::Call.new(c)
17
18
  call.make('1234567890', '9876543210', 'http://mysite.com/connected_call')
18
19
 
19
20
  recording = Twilio::Recording.new(c)
20
21
  recording.list
22
+
23
+ == Responding to Twilio
24
+
25
+ When Twilio calls your application URL, your response must use the Twilio Markup XML (http://www.twilio.com/docs/api_reference/TwiML/). The Twilio gem makes this very easy
26
+ by providing a Twilio Verb class.
27
+
28
+ For example, in a Ruby on Rails application, you could do the following inside a controller class:
29
+
30
+ Twilio::Verb.dial('415-123-4567')
31
+
32
+ and you can nest multiple verbs inside a block:
33
+
34
+ verb = Twilio::Verb.new { |v|
35
+ v.say("The time is #{Time.now}")
36
+ v.hangup
37
+ }
38
+ verb.response
21
39
 
22
40
  == Copyright
23
41
 
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
- :minor: 1
3
2
  :patch: 0
4
3
  :major: 2
4
+ :minor: 2
data/lib/twilio/verb.rb CHANGED
@@ -3,11 +3,11 @@ module Twilio
3
3
  # There are 5 primary verbs (say, play, gather, record, dial) and 3 secondary (hangup, pause, redirect).
4
4
  # Verbs can be chained and, in some cases, nested.
5
5
  #
6
- # If your response consists of a single verb, you can use the inline form of a new verb instance:
6
+ # If your response consists of a single verb, you can call a Verb class method:
7
7
  #
8
- # Twilio::Verb.new.say('The time is 9:35 PM.')
8
+ # Twilio::Verb.say('The time is 9:35 PM.')
9
9
  #
10
- # But if you need to chain several verbs together, just wrap them in a block and call the 'response' attribute:
10
+ # But if you need to chain several verbs together, just wrap them in an instance block and call the 'response' attribute:
11
11
  #
12
12
  # verb = Twilio::Verb.new { |v|
13
13
  # v.dial('415-123-4567')
@@ -17,6 +17,13 @@ module Twilio
17
17
  class Verb
18
18
 
19
19
  attr_reader :response
20
+
21
+ class << self
22
+ def method_missing(method_id, *args) #:nodoc:
23
+ v = Verb.new
24
+ v.send(method_id, *args)
25
+ end
26
+ end
20
27
 
21
28
  def initialize(&block)
22
29
  @xml = Builder::XmlMarkup.new
@@ -32,24 +39,24 @@ module Twilio
32
39
  # Say is useful for dynamic text that is difficult to prerecord.
33
40
  #
34
41
  # Examples:
35
- # Twilio::Verb.new.say('The time is 9:35 PM.')
36
- # Twilio::Verb.new.say('The time is 9:35 PM.', :loop => 3)
42
+ # Twilio::Verb.say('The time is 9:35 PM.')
43
+ # Twilio::Verb.say('The time is 9:35 PM.', :loop => 3)
37
44
  #
38
45
  # With numbers, 12345 will be spoken as "twelve thousand three hundred forty five" while
39
46
  # 1 2 3 4 5 will be spoken as "one two three four five."
40
47
  #
41
- # Twilio::Verb.new.say('Your PIN is 1234', :loop => 4)
42
- # Twilio::Verb.new.say('Your PIN is 1 2 3 4', :loop => 4)
48
+ # Twilio::Verb.say('Your PIN is 1234', :loop => 4)
49
+ # Twilio::Verb.say('Your PIN is 1 2 3 4', :loop => 4)
43
50
  #
44
51
  # If you need a longer pause between each loop, instead of explicitly calling the Pause
45
52
  # verb within a block, you can set the convenient pause option:
46
53
  #
47
- # Twilio::Verb.new.say('Your PIN is 1 2 3 4', :loop => 4, :pause => true)
54
+ # Twilio::Verb.say('Your PIN is 1 2 3 4', :loop => 4, :pause => true)
48
55
  #
49
56
  # Options (see http://www.twilio.com/docs/api_reference/TwiML/say) are passed in as a hash:
50
57
  #
51
- # Twilio::Verb.new.say('The time is 9:35 PM.', :voice => 'woman')
52
- # Twilio::Verb.new.say('The time is 9:35 PM.', {:voice => 'woman', :language => 'es'})
58
+ # Twilio::Verb.say('The time is 9:35 PM.', :voice => 'woman')
59
+ # Twilio::Verb.say('The time is 9:35 PM.', {:voice => 'woman', :language => 'es'})
53
60
  def say(*args)
54
61
  options = {:voice => 'man', :language => 'en', :loop => 1}
55
62
  args.each do |arg|
@@ -76,13 +83,13 @@ module Twilio
76
83
 
77
84
  # The Play verb plays an audio URL back to the caller.
78
85
  # Examples:
79
- # Twilio::Verb.new.play('http://foo.com/cowbell.mp3')
80
- # Twilio::Verb.new.play('http://foo.com/cowbell.mp3', :loop => 3)
86
+ # Twilio::Verb.play('http://foo.com/cowbell.mp3')
87
+ # Twilio::Verb.play('http://foo.com/cowbell.mp3', :loop => 3)
81
88
  #
82
89
  # If you need a longer pause between each loop, instead of explicitly calling the Pause
83
90
  # verb within a block, you can set the convenient pause option:
84
91
  #
85
- # Twilio::Verb.new.play('http://foo.com/cowbell.mp3', :loop => 3, :pause => true)
92
+ # Twilio::Verb.play('http://foo.com/cowbell.mp3', :loop => 3, :pause => true)
86
93
  #
87
94
  # Options (see http://www.twilio.com/docs/api_reference/TwiML/play) are passed in as a hash,
88
95
  # but only 'loop' is currently supported.
@@ -117,10 +124,10 @@ module Twilio
117
124
  # Options (see http://www.twilio.com/docs/api_reference/TwiML/gather) are passed in as a hash
118
125
  #
119
126
  # Examples:
120
- # Twilio::Verb.new.gather
121
- # Twilio::Verb.new.gather(:action => 'http://foobar.com')
122
- # Twilio::Verb.new.gather(:finishOnKey => '*')
123
- # Twilio::Verb.new.gather(:action => 'http://foobar.com', :finishOnKey => '*')
127
+ # Twilio::Verb.gather
128
+ # Twilio::Verb.gather(:action => 'http://foobar.com')
129
+ # Twilio::Verb.gather(:finishOnKey => '*')
130
+ # Twilio::Verb.gather(:action => 'http://foobar.com', :finishOnKey => '*')
124
131
  #
125
132
  # Gather also lets you nest the Play, Say, and Pause verbs:
126
133
  #
@@ -150,10 +157,10 @@ module Twilio
150
157
  # Options (see http://www.twilio.com/docs/api_reference/TwiML/record) are passed in as a hash
151
158
  #
152
159
  # Examples:
153
- # Twilio::Verb.new.record
154
- # Twilio::Verb.new.record(:action => 'http://foobar.com')
155
- # Twilio::Verb.new.record(:finishOnKey => '*')
156
- # Twilio::Verb.new.record(:transcribe => true, :transcribeCallback => '/handle_transcribe')
160
+ # Twilio::Verb.record
161
+ # Twilio::Verb.record(:action => 'http://foobar.com')
162
+ # Twilio::Verb.record(:finishOnKey => '*')
163
+ # Twilio::Verb.record(:transcribe => true, :transcribeCallback => '/handle_transcribe')
157
164
  def record(*args)
158
165
  options = args.shift
159
166
  output { @xml.Record(options) }
@@ -172,9 +179,9 @@ module Twilio
172
179
  # Options (see http://www.twilio.com/docs/api_reference/TwiML/dial) are passed in as a hash
173
180
  #
174
181
  # Examples:
175
- # Twilio::Verb.new.dial('415-123-4567')
176
- # Twilio::Verb.new.dial('415-123-4567', :action => 'http://foobar.com')
177
- # Twilio::Verb.new.dial('415-123-4567', {:timeout => 10, :callerId => '858-987-6543'})
182
+ # Twilio::Verb.dial('415-123-4567')
183
+ # Twilio::Verb.dial('415-123-4567', :action => 'http://foobar.com')
184
+ # Twilio::Verb.dial('415-123-4567', {:timeout => 10, :callerId => '858-987-6543'})
178
185
  #
179
186
  # Twilio also supports an alternate form in which a Number object is nested inside Dial:
180
187
  #
@@ -259,7 +266,7 @@ module Twilio
259
266
  # Examples:
260
267
  # If your response is only a hangup:
261
268
  #
262
- # Twilio::Verb.new.hangup
269
+ # Twilio::Verb.hangup
263
270
  #
264
271
  # If your response is chained:
265
272
  #
@@ -104,7 +104,7 @@ dial_with_caller_id:
104
104
  response: <?xml version="1.0" encoding="UTF-8"?><Response><Dial callerId="858-987-6543">415-123-4567</Dial></Response>
105
105
 
106
106
  dial_with_timeout_and_caller_id:
107
- response: <?xml version="1.0" encoding="UTF-8"?><Response><Dial timeout="10" callerId="858-987-6543">415-123-4567</Dial></Response>
107
+ response: <?xml version="1.0" encoding="UTF-8"?><Response><Dial callerId="858-987-6543" timeout="10">415-123-4567</Dial></Response>
108
108
 
109
109
  dial_with_redirect:
110
110
  response: <?xml version="1.0" encoding="UTF-8"?><Response><Dial>415-123-4567</Dial><Redirect>http://www.foo.com/nextInstructions</Redirect></Response>
@@ -3,23 +3,23 @@ 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_equal verb_response(:say_hi), Twilio::Verb.new.say('hi')
6
+ assert_equal verb_response(:say_hi), Twilio::Verb.say('hi')
7
7
  end
8
8
 
9
9
  should "say 'hi' with female voice" do
10
- assert_equal verb_response(:say_hi_with_female_voice), Twilio::Verb.new.say('hi', :voice => 'woman')
10
+ assert_equal verb_response(:say_hi_with_female_voice), Twilio::Verb.say('hi', :voice => 'woman')
11
11
  end
12
12
 
13
13
  should "say 'hola' in Spanish with female voice" do
14
- assert_equal verb_response(:say_hi_in_spanish_with_female_voice), Twilio::Verb.new.say('hola', {:voice => 'woman', :language => 'es'})
14
+ assert_equal verb_response(:say_hi_in_spanish_with_female_voice), Twilio::Verb.say('hola', {:voice => 'woman', :language => 'es'})
15
15
  end
16
16
 
17
17
  should "say 'hi' three times" do
18
- assert_equal verb_response(:say_hi_three_times), Twilio::Verb.new.say('hi', :loop => 3)
18
+ assert_equal verb_response(:say_hi_three_times), Twilio::Verb.say('hi', :loop => 3)
19
19
  end
20
20
 
21
21
  should "say 'hi' three times with pause" do
22
- assert_equal verb_response(:say_hi_three_times_with_pause), Twilio::Verb.new.say('hi', :loop => 3, :pause => true)
22
+ assert_equal verb_response(:say_hi_three_times_with_pause), Twilio::Verb.say('hi', :loop => 3, :pause => true)
23
23
  end
24
24
 
25
25
  should "say 'hi' with pause and say 'bye'" do
@@ -41,43 +41,43 @@ class VerbTest < Test::Unit::TestCase #:nodoc: all
41
41
  end
42
42
 
43
43
  should "play mp3 response" do
44
- assert_equal verb_response(:play_mp3), Twilio::Verb.new.play('http://foo.com/cowbell.mp3')
44
+ assert_equal verb_response(:play_mp3), Twilio::Verb.play('http://foo.com/cowbell.mp3')
45
45
  end
46
46
 
47
47
  should "play mp3 response two times" do
48
- assert_equal verb_response(:play_mp3_two_times), Twilio::Verb.new.play('http://foo.com/cowbell.mp3', :loop => 2)
48
+ assert_equal verb_response(:play_mp3_two_times), Twilio::Verb.play('http://foo.com/cowbell.mp3', :loop => 2)
49
49
  end
50
50
 
51
51
  should "play mp3 response two times with pause" do
52
- assert_equal verb_response(:play_mp3_two_times_with_pause), Twilio::Verb.new.play('http://foo.com/cowbell.mp3', :loop => 2, :pause => true)
52
+ assert_equal verb_response(:play_mp3_two_times_with_pause), Twilio::Verb.play('http://foo.com/cowbell.mp3', :loop => 2, :pause => true)
53
53
  end
54
54
 
55
55
  should "gather" do
56
- assert_equal verb_response(:gather), Twilio::Verb.new.gather
56
+ assert_equal verb_response(:gather), Twilio::Verb.gather
57
57
  end
58
58
 
59
59
  should "gather with action" do
60
- assert_equal verb_response(:gather_with_action), Twilio::Verb.new.gather(:action => 'http://foobar.com')
60
+ assert_equal verb_response(:gather_with_action), Twilio::Verb.gather(:action => 'http://foobar.com')
61
61
  end
62
62
 
63
63
  should "gather with GET method" do
64
- assert_equal verb_response(:gather_with_get_method), Twilio::Verb.new.gather(:method => 'GET')
64
+ assert_equal verb_response(:gather_with_get_method), Twilio::Verb.gather(:method => 'GET')
65
65
  end
66
66
 
67
67
  should "gather with timeout" do
68
- assert_equal verb_response(:gather_with_timeout), Twilio::Verb.new.gather(:timeout => 10)
68
+ assert_equal verb_response(:gather_with_timeout), Twilio::Verb.gather(:timeout => 10)
69
69
  end
70
70
 
71
71
  should "gather with finish key" do
72
- assert_equal verb_response(:gather_with_finish_key), Twilio::Verb.new.gather(:finishOnKey => '*')
72
+ assert_equal verb_response(:gather_with_finish_key), Twilio::Verb.gather(:finishOnKey => '*')
73
73
  end
74
74
 
75
75
  should "gather with num digits" do
76
- assert_equal verb_response(:gather_with_num_digits), Twilio::Verb.new.gather(:numDigits => 5)
76
+ assert_equal verb_response(:gather_with_num_digits), Twilio::Verb.gather(:numDigits => 5)
77
77
  end
78
78
 
79
79
  should "gather with all options set" do
80
- assert_equal verb_response(:gather_with_all_options_set), Twilio::Verb.new.gather(:action => 'http://foobar.com', :method => 'GET', :timeout => 10, :finishOnKey => '*', :numDigits => 5)
80
+ assert_equal verb_response(:gather_with_all_options_set), Twilio::Verb.gather(:action => 'http://foobar.com', :method => 'GET', :timeout => 10, :finishOnKey => '*', :numDigits => 5)
81
81
  end
82
82
 
83
83
  should "gather and say instructions" do
@@ -101,63 +101,63 @@ class VerbTest < Test::Unit::TestCase #:nodoc: all
101
101
  end
102
102
 
103
103
  should "record" do
104
- assert_equal verb_response(:record), Twilio::Verb.new.record
104
+ assert_equal verb_response(:record), Twilio::Verb.record
105
105
  end
106
106
 
107
107
  should "record with action" do
108
- assert_equal verb_response(:record_with_action), Twilio::Verb.new.record(:action => 'http://foobar.com')
108
+ assert_equal verb_response(:record_with_action), Twilio::Verb.record(:action => 'http://foobar.com')
109
109
  end
110
110
 
111
111
  should "record with GET method" do
112
- assert_equal verb_response(:record_with_get_method), Twilio::Verb.new.record(:method => 'GET')
112
+ assert_equal verb_response(:record_with_get_method), Twilio::Verb.record(:method => 'GET')
113
113
  end
114
114
 
115
115
  should "record with timeout" do
116
- assert_equal verb_response(:record_with_timeout), Twilio::Verb.new.record(:timeout => 10)
116
+ assert_equal verb_response(:record_with_timeout), Twilio::Verb.record(:timeout => 10)
117
117
  end
118
118
 
119
119
  should "record with finish key" do
120
- assert_equal verb_response(:record_with_finish_key), Twilio::Verb.new.record(:finishOnKey => '*')
120
+ assert_equal verb_response(:record_with_finish_key), Twilio::Verb.record(:finishOnKey => '*')
121
121
  end
122
122
 
123
123
  should "record with max length" do
124
- assert_equal verb_response(:record_with_max_length), Twilio::Verb.new.record(:maxLength => 1800)
124
+ assert_equal verb_response(:record_with_max_length), Twilio::Verb.record(:maxLength => 1800)
125
125
  end
126
126
 
127
127
  should "record with transcribe" do
128
- assert_equal verb_response(:record_with_transcribe), Twilio::Verb.new.record(:transcribe => true, :transcribeCallback => '/handle_transcribe')
128
+ assert_equal verb_response(:record_with_transcribe), Twilio::Verb.record(:transcribe => true, :transcribeCallback => '/handle_transcribe')
129
129
  end
130
130
 
131
131
  should "dial" do
132
- assert_equal verb_response(:dial), Twilio::Verb.new.dial('415-123-4567')
132
+ assert_equal verb_response(:dial), Twilio::Verb.dial('415-123-4567')
133
133
  end
134
134
 
135
135
  should "dial with action" do
136
- assert_equal verb_response(:dial_with_action), Twilio::Verb.new.dial('415-123-4567', :action => 'http://foobar.com')
136
+ assert_equal verb_response(:dial_with_action), Twilio::Verb.dial('415-123-4567', :action => 'http://foobar.com')
137
137
  end
138
138
 
139
139
  should "dial with GET method" do
140
- assert_equal verb_response(:dial_with_get_method), Twilio::Verb.new.dial('415-123-4567', :method => 'GET')
140
+ assert_equal verb_response(:dial_with_get_method), Twilio::Verb.dial('415-123-4567', :method => 'GET')
141
141
  end
142
142
 
143
143
  should "dial with timeout" do
144
- assert_equal verb_response(:dial_with_timeout), Twilio::Verb.new.dial('415-123-4567', :timeout => 10)
144
+ assert_equal verb_response(:dial_with_timeout), Twilio::Verb.dial('415-123-4567', :timeout => 10)
145
145
  end
146
146
 
147
147
  should "dial with hangup on star" do
148
- assert_equal verb_response(:dial_with_hangup_on_star), Twilio::Verb.new.dial('415-123-4567', :hangupOnStar => true)
148
+ assert_equal verb_response(:dial_with_hangup_on_star), Twilio::Verb.dial('415-123-4567', :hangupOnStar => true)
149
149
  end
150
150
 
151
151
  should "dial with time limit" do
152
- assert_equal verb_response(:dial_with_time_limit), Twilio::Verb.new.dial('415-123-4567', :timeLimit => 3600)
152
+ assert_equal verb_response(:dial_with_time_limit), Twilio::Verb.dial('415-123-4567', :timeLimit => 3600)
153
153
  end
154
154
 
155
155
  should "dial with caller id" do
156
- assert_equal verb_response(:dial_with_caller_id), Twilio::Verb.new.dial('415-123-4567', :callerId => '858-987-6543')
156
+ assert_equal verb_response(:dial_with_caller_id), Twilio::Verb.dial('415-123-4567', :callerId => '858-987-6543')
157
157
  end
158
158
 
159
159
  should "dial with timeout and caller id" do
160
- assert_equal verb_response(:dial_with_timeout_and_caller_id), Twilio::Verb.new.dial('415-123-4567', {:timeout => 10, :callerId => '858-987-6543'})
160
+ assert_equal verb_response(:dial_with_timeout_and_caller_id), Twilio::Verb.dial('415-123-4567', {:timeout => 10, :callerId => '858-987-6543'})
161
161
  end
162
162
 
163
163
  should "dial with redirect" do
@@ -189,7 +189,7 @@ class VerbTest < Test::Unit::TestCase #:nodoc: all
189
189
  end
190
190
 
191
191
  should "hangup" do
192
- assert_equal verb_response(:hangup), Twilio::Verb.new.hangup
192
+ assert_equal verb_response(:hangup), Twilio::Verb.hangup
193
193
  end
194
194
 
195
195
  should "say hi and hangup" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webficient-twilio
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Phil Misiowiec