twilio-ruby 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +8 -0
- data/examples.rb +93 -0
- data/lib/twilio-ruby.rb +36 -0
- data/lib/twilio-ruby/accounts/account.rb +10 -0
- data/lib/twilio-ruby/accounts/accounts.rb +3 -0
- data/lib/twilio-ruby/available_phone_numbers/available_phone_number.rb +3 -0
- data/lib/twilio-ruby/available_phone_numbers/available_phone_numbers.rb +9 -0
- data/lib/twilio-ruby/available_phone_numbers/country.rb +8 -0
- data/lib/twilio-ruby/available_phone_numbers/local.rb +9 -0
- data/lib/twilio-ruby/available_phone_numbers/toll_free.rb +9 -0
- data/lib/twilio-ruby/calls/call.rb +20 -0
- data/lib/twilio-ruby/calls/calls.rb +7 -0
- data/lib/twilio-ruby/client.rb +61 -0
- data/lib/twilio-ruby/conferences/conference.rb +8 -0
- data/lib/twilio-ruby/conferences/conferences.rb +3 -0
- data/lib/twilio-ruby/conferences/participant.rb +15 -0
- data/lib/twilio-ruby/conferences/participants.rb +3 -0
- data/lib/twilio-ruby/incoming_phone_numbers/incoming_phone_number.rb +3 -0
- data/lib/twilio-ruby/incoming_phone_numbers/incoming_phone_numbers.rb +7 -0
- data/lib/twilio-ruby/instance_resource.rb +53 -0
- data/lib/twilio-ruby/list_resource.rb +33 -0
- data/lib/twilio-ruby/notifications/notification.rb +3 -0
- data/lib/twilio-ruby/notifications/notifications.rb +3 -0
- data/lib/twilio-ruby/outgoing_caller_ids/outgoing_caller_id.rb +3 -0
- data/lib/twilio-ruby/outgoing_caller_ids/outgoing_caller_ids.rb +7 -0
- data/lib/twilio-ruby/recordings/recording.rb +10 -0
- data/lib/twilio-ruby/recordings/recordings.rb +3 -0
- data/lib/twilio-ruby/sandbox/sandbox.rb +3 -0
- data/lib/twilio-ruby/sms_messages/sms_message.rb +3 -0
- data/lib/twilio-ruby/sms_messages/sms_messages.rb +7 -0
- data/lib/twilio-ruby/transcriptions/transcription.rb +3 -0
- data/lib/twilio-ruby/transcriptions/transcriptions.rb +3 -0
- data/lib/twilio-ruby/utils.rb +23 -0
- data/lib/twilio-ruby/verb.rb +5 -0
- data/test/test_twilio.rb +6 -0
- data/test/twilio_spec.rb +139 -0
- metadata +134 -0
data/Rakefile
ADDED
data/examples.rb
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
# examples version 3
|
2
|
+
|
3
|
+
@account_sid = 'AC043dcf9844e04758bc3a36a84c29761'
|
4
|
+
@auth_token = '62ea81de3a5b414154eb263595357c69'
|
5
|
+
# set up a client, without any http requests
|
6
|
+
@client = Twilio::Client.new(@account_sid, @auth_token)
|
7
|
+
|
8
|
+
################ ACCOUNTS ################
|
9
|
+
|
10
|
+
# grab an account instance resource (no http request)
|
11
|
+
@account = @client.accounts.get(@account_sid)
|
12
|
+
# http round trip happens here
|
13
|
+
puts @account.friendly_name
|
14
|
+
|
15
|
+
# update an account's friendly name (only one http request, for the POST)
|
16
|
+
@client.accounts.get(@account_sid).update(:friendly_name => 'A Fabulous Friendly Name')
|
17
|
+
|
18
|
+
# shortcut to grab your account object (account_sid is inferred from the client's auth credentials)
|
19
|
+
@account = @client.account
|
20
|
+
|
21
|
+
################ CALLS ################
|
22
|
+
|
23
|
+
# print a list of calls (all parameters optional, single http req)
|
24
|
+
@account.calls.list({:page => 0, :page_size => 1000, :start_time => '2010-09-01'}).each do |call|
|
25
|
+
puts call.sid
|
26
|
+
end
|
27
|
+
|
28
|
+
# get a particular call and list its recordings (one http req, for each())
|
29
|
+
@account.calls.get('CAXXXXXXX').recordings.list.each do {|r| puts r.sid}
|
30
|
+
|
31
|
+
# make a new outgoing call (this is the same type of object we get
|
32
|
+
# from calls.get, except this has attributes since we made an http request)
|
33
|
+
@call = @account.calls.create({:from => '+14159341234', :to => '+18004567890', :url => 'http://myapp.com/call-handler'})
|
34
|
+
|
35
|
+
# cancel the call if not already in progress (single http request)
|
36
|
+
@account.calls.get(@call.sid).update({:status => 'canceled'})
|
37
|
+
# or equivalently (single http request)
|
38
|
+
@call.update({:status => 'canceled'})
|
39
|
+
# or simply
|
40
|
+
@call.cancel
|
41
|
+
|
42
|
+
# redirect and then terminate a call (each one http request)
|
43
|
+
@account.calls.get('CA386025c9bf5d6052a1d1ea42b4d16662').update({:url => 'http://myapp.com/call-redirect'})
|
44
|
+
@account.calls.get('CA386025c9bf5d6052a1d1ea42b4d16662').update({:status => 'completed'}) # formerly @call.hangup
|
45
|
+
# or, use the aliases...
|
46
|
+
@call.redirect_to('http://myapp.com/call-redirect')
|
47
|
+
@call.hangup
|
48
|
+
|
49
|
+
################ SMS MESSAGES ################
|
50
|
+
|
51
|
+
# print a list of sms messages (one http request)
|
52
|
+
@account.sms_messages.list({:date_sent => '2010-09-01'}).each do |sms|
|
53
|
+
puts sms.body
|
54
|
+
end
|
55
|
+
|
56
|
+
# print a particular sms message (one http request)
|
57
|
+
puts @account.sms_messages.get('SMXXXXXXXX').body
|
58
|
+
|
59
|
+
# send an sms
|
60
|
+
@account.sms_messages.create(:from => '+14159341234', :to => '+16105557069', :body => 'Hey there!')
|
61
|
+
# or, an alias
|
62
|
+
@account.sms_messages.send('+14159341234', '+16105557069', 'Hey there!')
|
63
|
+
|
64
|
+
################ PHONE NUMBERS ################
|
65
|
+
|
66
|
+
# get a list of supported country codes (api currently doesn't support this)
|
67
|
+
@account.available_phone_numbers.list
|
68
|
+
|
69
|
+
# print some available numbers (only one http request)
|
70
|
+
@numbers = @account.available_phone_numbers.get('US').local.list({:contains => 'AWESOME'})
|
71
|
+
@numbers.each {|num| puts num.phone_number}
|
72
|
+
|
73
|
+
# buy the first one (one http request)
|
74
|
+
@account.incoming_phone_numbers.create(:phone_number => @numbers[0].phone_number)
|
75
|
+
|
76
|
+
# update an existing phone number's voice url (one http request)
|
77
|
+
@account.incoming_phone_numbers.get('PNdba508c5616a7f5e141789f44f022cc3').update({:voice_url => 'http://myapp.com/voice'})
|
78
|
+
|
79
|
+
################ CONFERENCES ################
|
80
|
+
|
81
|
+
# get a particular conference's participants object and stash it (should be zero http requests)
|
82
|
+
@participants = @account.conferences.get('CFbbe46ff1274e283f7e3ac1df0072ab39').participants
|
83
|
+
|
84
|
+
# list participants (http request here)
|
85
|
+
@participants.list.each do {|p| puts p.sid}
|
86
|
+
|
87
|
+
# update a conference participant
|
88
|
+
@participants.get('CA386025c9bf5d6052a1d1ea42b4d16662').update({:muted => 'true'})
|
89
|
+
# or an easier way
|
90
|
+
@participants.get('CA386025c9bf5d6052a1d1ea42b4d16662').mute
|
91
|
+
|
92
|
+
# and, since we're lazy loading, this would only incur one http request
|
93
|
+
@account.conferences.get('CFbbe46ff1274e283f7e3ac1df0072ab39').participants.get('CA386025c9bf5d6052a1d1ea42b4d16662').update({:muted => 'true'})
|
data/lib/twilio-ruby.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'net/https'
|
3
|
+
require 'builder'
|
4
|
+
require 'crack'
|
5
|
+
require 'cgi'
|
6
|
+
|
7
|
+
require 'twilio-ruby/utils'
|
8
|
+
require 'twilio-ruby/list_resource'
|
9
|
+
require 'twilio-ruby/instance_resource'
|
10
|
+
require 'twilio-ruby/sandbox/sandbox'
|
11
|
+
require 'twilio-ruby/accounts/account'
|
12
|
+
require 'twilio-ruby/accounts/accounts'
|
13
|
+
require 'twilio-ruby/calls/call'
|
14
|
+
require 'twilio-ruby/calls/calls'
|
15
|
+
require 'twilio-ruby/sms_messages/sms_message'
|
16
|
+
require 'twilio-ruby/sms_messages/sms_messages'
|
17
|
+
require 'twilio-ruby/outgoing_caller_ids/outgoing_caller_id'
|
18
|
+
require 'twilio-ruby/outgoing_caller_ids/outgoing_caller_ids'
|
19
|
+
require 'twilio-ruby/incoming_phone_numbers/incoming_phone_number'
|
20
|
+
require 'twilio-ruby/incoming_phone_numbers/incoming_phone_numbers'
|
21
|
+
require 'twilio-ruby/available_phone_numbers/available_phone_number'
|
22
|
+
require 'twilio-ruby/available_phone_numbers/available_phone_numbers'
|
23
|
+
require 'twilio-ruby/available_phone_numbers/country'
|
24
|
+
require 'twilio-ruby/available_phone_numbers/local'
|
25
|
+
require 'twilio-ruby/available_phone_numbers/toll_free'
|
26
|
+
require 'twilio-ruby/conferences/conference'
|
27
|
+
require 'twilio-ruby/conferences/conferences'
|
28
|
+
require 'twilio-ruby/conferences/participant'
|
29
|
+
require 'twilio-ruby/conferences/participants'
|
30
|
+
require 'twilio-ruby/recordings/recording'
|
31
|
+
require 'twilio-ruby/recordings/recordings'
|
32
|
+
require 'twilio-ruby/transcriptions/transcription'
|
33
|
+
require 'twilio-ruby/transcriptions/transcriptions'
|
34
|
+
require 'twilio-ruby/notifications/notification'
|
35
|
+
require 'twilio-ruby/notifications/notifications'
|
36
|
+
require 'twilio-ruby/client'
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module Twilio
|
2
|
+
class Account < InstanceResource
|
3
|
+
def initialize(uri, client, params={})
|
4
|
+
super uri, client, params
|
5
|
+
resource :sandbox, :available_phone_numbers, :incoming_phone_numbers,
|
6
|
+
:calls, :outgoing_caller_ids, :conferences, :sms_messages, :recordings,
|
7
|
+
:transcriptions, :notifications
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Twilio
|
2
|
+
class Call < InstanceResource
|
3
|
+
def initialize(uri, client, params={})
|
4
|
+
super uri, client, params
|
5
|
+
resource :recordings, :transcriptions
|
6
|
+
end
|
7
|
+
|
8
|
+
def redirect_to(url)
|
9
|
+
update :url => url
|
10
|
+
end
|
11
|
+
|
12
|
+
def cancel
|
13
|
+
update :status => 'canceled'
|
14
|
+
end
|
15
|
+
|
16
|
+
def hangup
|
17
|
+
update :status => 'completed'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Twilio
|
2
|
+
class Client
|
3
|
+
include Utils
|
4
|
+
|
5
|
+
attr_reader :api_version, :domain, :account_sid, :account, :accounts
|
6
|
+
|
7
|
+
def initialize(account_sid, auth_token, api_version='2010-04-01',
|
8
|
+
domain='api.twilio.com', proxy=nil)
|
9
|
+
@account_sid = account_sid
|
10
|
+
@auth_token = auth_token
|
11
|
+
@api_version = api_version
|
12
|
+
set_up_connection_to domain, proxy
|
13
|
+
set_up_subresources
|
14
|
+
end
|
15
|
+
|
16
|
+
# Define some helper methods for sending HTTP requests
|
17
|
+
[:get, :put, :post, :delete].each do |method|
|
18
|
+
method_class = Net::HTTP.const_get method.to_s.capitalize
|
19
|
+
define_method method do |uri, *args|
|
20
|
+
uri += '.json'
|
21
|
+
params = (args[0] && args[0] != {}) ? twilify(args[0]) : nil
|
22
|
+
uri += "?#{url_encode(params)}" if params && method == :get
|
23
|
+
request = method_class.new uri
|
24
|
+
request.basic_auth @account_sid, @auth_token
|
25
|
+
request.form_data = params if params && [:post, :put].include?(method)
|
26
|
+
puts "DEBUG: Request Path ==> "+request.path
|
27
|
+
puts "DEBUG: Request Body ==> "+request.body if request.body
|
28
|
+
http_response = @connection.request request
|
29
|
+
object = Crack::JSON.parse http_response.body if http_response.body
|
30
|
+
raise object['message'] unless http_response.kind_of? Net::HTTPSuccess
|
31
|
+
object
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def request(uri, method, params={})
|
36
|
+
send method.downcase.to_sym, uri, params
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def set_up_connection_to(domain, proxy)
|
42
|
+
@connection = Net::HTTP.new domain, 443
|
43
|
+
@connection.use_ssl = true
|
44
|
+
# Don't check the server cert. Ideally this is configurable, in case an
|
45
|
+
# app wants to verify that it is actually talking to the real Twilio.
|
46
|
+
@connection.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
47
|
+
end
|
48
|
+
|
49
|
+
def set_up_subresources
|
50
|
+
accounts_uri = "/#{@api_version}/Accounts"
|
51
|
+
# Set up a special handle to grab the account.
|
52
|
+
@account = Twilio::Account.new "#{accounts_uri}/#{@account_sid}", self
|
53
|
+
# Set up the accounts subresource.
|
54
|
+
@accounts = Twilio::Accounts.new accounts_uri, self
|
55
|
+
end
|
56
|
+
|
57
|
+
def url_encode(hash)
|
58
|
+
hash.to_a.map {|pair| pair.map {|e| CGI.escape e.to_s}.join '='}.join '&'
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Twilio
|
2
|
+
class InstanceResource
|
3
|
+
include Utils
|
4
|
+
|
5
|
+
def initialize(uri, client, params={})
|
6
|
+
@uri, @client = uri, client
|
7
|
+
set_up_properties_from params
|
8
|
+
end
|
9
|
+
|
10
|
+
def update(params={})
|
11
|
+
raise "Can't update a resource without a Twilio::Client" unless @client
|
12
|
+
response = @client.post @uri, params
|
13
|
+
set_up_properties_from response
|
14
|
+
self
|
15
|
+
end
|
16
|
+
|
17
|
+
def delete
|
18
|
+
raise "Can't delete a resource without a Twilio::Client" unless @client
|
19
|
+
@client.delete @uri
|
20
|
+
end
|
21
|
+
|
22
|
+
def method_missing(method, *args)
|
23
|
+
super if @updated
|
24
|
+
response = @client.get @uri
|
25
|
+
set_up_properties_from response
|
26
|
+
self.send method, *args
|
27
|
+
end
|
28
|
+
|
29
|
+
protected
|
30
|
+
|
31
|
+
def set_up_properties_from(hash)
|
32
|
+
eigenclass = class << self; self; end
|
33
|
+
hash.each do |p,v|
|
34
|
+
property = detwilify p
|
35
|
+
unless ['uri', 'client', 'updated'].include? property
|
36
|
+
eigenclass.send :define_method, property.to_sym, &lambda {v}
|
37
|
+
end
|
38
|
+
end
|
39
|
+
@updated = !hash.keys.empty?
|
40
|
+
end
|
41
|
+
|
42
|
+
def resource(*resources)
|
43
|
+
resources.each do |r|
|
44
|
+
resource = twilify r
|
45
|
+
relative_uri = r == :sms_messages ? 'SMS/Messages' : resource
|
46
|
+
instance_variable_set("@#{r}",
|
47
|
+
Twilio.const_get(resource).new("#{@uri}/#{relative_uri}", @client))
|
48
|
+
end
|
49
|
+
self.class.instance_eval {attr_reader *resources}
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Twilio
|
2
|
+
class ListResource
|
3
|
+
include Utils
|
4
|
+
|
5
|
+
def initialize(uri, client)
|
6
|
+
@resource_name = self.class.name.split('::')[-1]
|
7
|
+
@instance_class = Twilio.const_get @resource_name.chop
|
8
|
+
@uri, @client = uri, client
|
9
|
+
end
|
10
|
+
|
11
|
+
# Grab a list of this kind of resource and return it as an array.
|
12
|
+
def list(params={})
|
13
|
+
raise "Can't get a resource list without a Twilio::Client" unless @client
|
14
|
+
response = @client.get @uri, params
|
15
|
+
resources = response[detwilify(@resource_name)]
|
16
|
+
resources.map do |resource|
|
17
|
+
@instance_class.new "#{@uri}/#{resource['sid']}", @client, resource
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Return an empty instance resource object with the proper URI.
|
22
|
+
def get(sid)
|
23
|
+
@instance_class.new "#{@uri}/#{sid}", @client
|
24
|
+
end
|
25
|
+
|
26
|
+
# Return a newly created resource.
|
27
|
+
def create(params={})
|
28
|
+
raise "Can't create a resource without a Twilio::Client" unless @client
|
29
|
+
response = @client.post @uri, params
|
30
|
+
@instance_class.new "#{@uri}/#{response['sid']}", @client, response
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Twilio
|
2
|
+
module Utils
|
3
|
+
|
4
|
+
def twilify(something)
|
5
|
+
if something.is_a? Hash
|
6
|
+
Hash[*something.to_a.map {|a| [twilify(a[0]).to_sym, a[1]]}.flatten]
|
7
|
+
else
|
8
|
+
something.to_s.split('_').map do |s|
|
9
|
+
[s[0,1].capitalize, s[1..-1]].join
|
10
|
+
end.join
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def detwilify(something)
|
15
|
+
if something.is_a? Hash
|
16
|
+
Hash[*something.to_a.map {|pair| [detwilify(pair[0]).to_sym, pair[1]]}.flatten]
|
17
|
+
else
|
18
|
+
something.to_s.gsub(/[A-Z][a-z]*/) {|s| "_#{s.downcase}"}.gsub(/^_/, '')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
data/test/test_twilio.rb
ADDED
data/test/twilio_spec.rb
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'twilio-ruby'
|
3
|
+
require 'fakeweb'
|
4
|
+
|
5
|
+
describe Twilio::Client do
|
6
|
+
before :all do
|
7
|
+
FakeWeb.register_uri(:any, %r/http:\/\/api.twilio.com\//, :body => '{"message": "You tried to reach Twilio"}')
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should set up a Twilio::Client' do
|
11
|
+
twilio = Twilio::Client.new('someSid', 'someToken', 'api-version')
|
12
|
+
twilio.account_sid.should == 'someSid'
|
13
|
+
twilio.instance_variable_get('@auth_token').should == 'someToken'
|
14
|
+
twilio.api_version.should == 'api-version'
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should set up the proper default http ssl connection' do
|
18
|
+
twilio = Twilio::Client.new('someSid', 'someToken')
|
19
|
+
twilio.instance_variable_get('@connection').address.should == 'api.twilio.com'
|
20
|
+
twilio.instance_variable_get('@connection').port.should == 443
|
21
|
+
twilio.instance_variable_get('@connection').use_ssl?.should == true
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should set up the proper http ssl connection when a different domain is given' do
|
25
|
+
twilio = Twilio::Client.new('someSid', 'someToken', '2008-08-01', 'api.faketwilio.com')
|
26
|
+
twilio.instance_variable_get('@connection').address.should == 'api.faketwilio.com'
|
27
|
+
twilio.instance_variable_get('@connection').port.should == 443
|
28
|
+
twilio.instance_variable_get('@connection').use_ssl?.should == true
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should set up an accounts resources object' do
|
32
|
+
twilio = Twilio::Client.new('someSid', 'someToken')
|
33
|
+
twilio.respond_to?(:accounts).should == true
|
34
|
+
twilio.accounts.instance_variable_get('@uri').should == '/2010-04-01/Accounts'
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should set up an account object with the given sid' do
|
38
|
+
twilio = Twilio::Client.new('someSid', 'someToken')
|
39
|
+
twilio.respond_to?(:account).should == true
|
40
|
+
twilio.account.instance_variable_get('@uri').should == '/2010-04-01/Accounts/someSid'
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should convert all parameter names to Twilio-style names' do
|
44
|
+
twilio = Twilio::Client.new('someSid', 'someToken')
|
45
|
+
untwilified = {:sms_url => 'someUrl', 'voiceFallbackUrl' => 'anotherUrl',
|
46
|
+
'Status_callback' => 'yetAnotherUrl'}
|
47
|
+
twilified = {:SmsUrl => 'someUrl', :VoiceFallbackUrl => 'anotherUrl',
|
48
|
+
:StatusCallback => 'yetAnotherUrl'}
|
49
|
+
twilio.instance_eval do
|
50
|
+
twilify(untwilified).should == twilified
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe Twilio::Account do
|
56
|
+
it 'should set up an incoming phone numbers resources object' do
|
57
|
+
account = Twilio::Account.new('someUri', 'someClient')
|
58
|
+
account.respond_to?(:incoming_phone_numbers).should == true
|
59
|
+
account.incoming_phone_numbers.instance_variable_get('@uri').should == 'someUri/IncomingPhoneNumbers'
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'should set up an available phone numbers resources object' do
|
63
|
+
account = Twilio::Account.new('someUri', 'someClient')
|
64
|
+
account.respond_to?(:available_phone_numbers).should == true
|
65
|
+
account.available_phone_numbers.instance_variable_get('@uri').should == 'someUri/AvailablePhoneNumbers'
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'should set up an outgoing caller ids resources object' do
|
69
|
+
account = Twilio::Account.new('someUri', 'someClient')
|
70
|
+
account.respond_to?(:outgoing_caller_ids).should == true
|
71
|
+
account.outgoing_caller_ids.instance_variable_get('@uri').should == 'someUri/OutgoingCallerIds'
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'should set up a calls resources object' do
|
75
|
+
account = Twilio::Account.new('someUri', 'someClient')
|
76
|
+
account.respond_to?(:calls).should == true
|
77
|
+
account.calls.instance_variable_get('@uri').should == 'someUri/Calls'
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'should set up a conferences resources object' do
|
81
|
+
account = Twilio::Account.new('someUri', 'someClient')
|
82
|
+
account.respond_to?(:conferences).should == true
|
83
|
+
account.conferences.instance_variable_get('@uri').should == 'someUri/Conferences'
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'should set up a sms messages resources object' do
|
87
|
+
account = Twilio::Account.new('someUri', 'someClient')
|
88
|
+
account.respond_to?(:sms_messages).should == true
|
89
|
+
account.sms_messages.instance_variable_get('@uri').should == 'someUri/SMS/Messages'
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'should set up a recordings resources object' do
|
93
|
+
account = Twilio::Account.new('someUri', 'someClient')
|
94
|
+
account.respond_to?(:recordings).should == true
|
95
|
+
account.recordings.instance_variable_get('@uri').should == 'someUri/Recordings'
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'should set up a transcriptions resources object' do
|
99
|
+
account = Twilio::Account.new('someUri', 'someClient')
|
100
|
+
account.respond_to?(:transcriptions).should == true
|
101
|
+
account.transcriptions.instance_variable_get('@uri').should == 'someUri/Transcriptions'
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'should set up a notifications resources object' do
|
105
|
+
account = Twilio::Account.new('someUri', 'someClient')
|
106
|
+
account.respond_to?(:notifications).should == true
|
107
|
+
account.notifications.instance_variable_get('@uri').should == 'someUri/Notifications'
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe Twilio::Call do
|
112
|
+
it 'should set up a recordings resources object' do
|
113
|
+
call = Twilio::Call.new('someUri', 'someClient')
|
114
|
+
call.respond_to?(:recordings).should == true
|
115
|
+
call.recordings.instance_variable_get('@uri').should == 'someUri/Recordings'
|
116
|
+
end
|
117
|
+
|
118
|
+
it 'should set up a recordings resources object' do
|
119
|
+
call = Twilio::Call.new('someUri', 'someClient')
|
120
|
+
call.respond_to?(:transcriptions).should == true
|
121
|
+
call.transcriptions.instance_variable_get('@uri').should == 'someUri/Transcriptions'
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
describe Twilio::Conference do
|
126
|
+
it 'should set up a participants resources object' do
|
127
|
+
call = Twilio::Conference.new('someUri', 'someClient')
|
128
|
+
call.respond_to?(:participants).should == true
|
129
|
+
call.participants.instance_variable_get('@uri').should == 'someUri/Participants'
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
describe Twilio::Recording do
|
134
|
+
it 'should set up a transcriptions resources object' do
|
135
|
+
call = Twilio::Recording.new('someUri', 'someClient')
|
136
|
+
call.respond_to?(:transcriptions).should == true
|
137
|
+
call.transcriptions.instance_variable_get('@uri').should == 'someUri/Transcriptions'
|
138
|
+
end
|
139
|
+
end
|
metadata
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: twilio-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 25
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Andrew Benton
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-01-31 00:00:00 -08:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: builder
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 15
|
30
|
+
segments:
|
31
|
+
- 2
|
32
|
+
- 1
|
33
|
+
- 2
|
34
|
+
version: 2.1.2
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: crack
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 11
|
46
|
+
segments:
|
47
|
+
- 0
|
48
|
+
- 1
|
49
|
+
- 8
|
50
|
+
version: 0.1.8
|
51
|
+
type: :runtime
|
52
|
+
version_requirements: *id002
|
53
|
+
description: A simple library for communicating with the Twilio REST API
|
54
|
+
email: andrewmbenton@gmail.com
|
55
|
+
executables: []
|
56
|
+
|
57
|
+
extensions: []
|
58
|
+
|
59
|
+
extra_rdoc_files: []
|
60
|
+
|
61
|
+
files:
|
62
|
+
- lib/twilio-ruby.rb
|
63
|
+
- lib/twilio-ruby/sms_messages/sms_message.rb
|
64
|
+
- lib/twilio-ruby/sms_messages/sms_messages.rb
|
65
|
+
- lib/twilio-ruby/client.rb
|
66
|
+
- lib/twilio-ruby/verb.rb
|
67
|
+
- lib/twilio-ruby/list_resource.rb
|
68
|
+
- lib/twilio-ruby/incoming_phone_numbers/incoming_phone_number.rb
|
69
|
+
- lib/twilio-ruby/incoming_phone_numbers/incoming_phone_numbers.rb
|
70
|
+
- lib/twilio-ruby/conferences/participant.rb
|
71
|
+
- lib/twilio-ruby/conferences/conference.rb
|
72
|
+
- lib/twilio-ruby/conferences/conferences.rb
|
73
|
+
- lib/twilio-ruby/conferences/participants.rb
|
74
|
+
- lib/twilio-ruby/transcriptions/transcriptions.rb
|
75
|
+
- lib/twilio-ruby/transcriptions/transcription.rb
|
76
|
+
- lib/twilio-ruby/calls/call.rb
|
77
|
+
- lib/twilio-ruby/calls/calls.rb
|
78
|
+
- lib/twilio-ruby/utils.rb
|
79
|
+
- lib/twilio-ruby/accounts/accounts.rb
|
80
|
+
- lib/twilio-ruby/accounts/account.rb
|
81
|
+
- lib/twilio-ruby/recordings/recording.rb
|
82
|
+
- lib/twilio-ruby/recordings/recordings.rb
|
83
|
+
- lib/twilio-ruby/notifications/notification.rb
|
84
|
+
- lib/twilio-ruby/notifications/notifications.rb
|
85
|
+
- lib/twilio-ruby/outgoing_caller_ids/outgoing_caller_id.rb
|
86
|
+
- lib/twilio-ruby/outgoing_caller_ids/outgoing_caller_ids.rb
|
87
|
+
- lib/twilio-ruby/available_phone_numbers/country.rb
|
88
|
+
- lib/twilio-ruby/available_phone_numbers/local.rb
|
89
|
+
- lib/twilio-ruby/available_phone_numbers/available_phone_number.rb
|
90
|
+
- lib/twilio-ruby/available_phone_numbers/available_phone_numbers.rb
|
91
|
+
- lib/twilio-ruby/available_phone_numbers/toll_free.rb
|
92
|
+
- lib/twilio-ruby/sandbox/sandbox.rb
|
93
|
+
- lib/twilio-ruby/instance_resource.rb
|
94
|
+
- test/twilio_spec.rb
|
95
|
+
- test/test_twilio.rb
|
96
|
+
- examples.rb
|
97
|
+
- Rakefile
|
98
|
+
has_rdoc: true
|
99
|
+
homepage: http://github.com/andrewmbenton/twilio-ruby
|
100
|
+
licenses: []
|
101
|
+
|
102
|
+
post_install_message:
|
103
|
+
rdoc_options: []
|
104
|
+
|
105
|
+
require_paths:
|
106
|
+
- lib
|
107
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
108
|
+
none: false
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
hash: 3
|
113
|
+
segments:
|
114
|
+
- 0
|
115
|
+
version: "0"
|
116
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
117
|
+
none: false
|
118
|
+
requirements:
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
hash: 3
|
122
|
+
segments:
|
123
|
+
- 0
|
124
|
+
version: "0"
|
125
|
+
requirements: []
|
126
|
+
|
127
|
+
rubyforge_project:
|
128
|
+
rubygems_version: 1.4.2
|
129
|
+
signing_key:
|
130
|
+
specification_version: 3
|
131
|
+
summary: A simple library for communicating with the Twilio REST API
|
132
|
+
test_files:
|
133
|
+
- test/twilio_spec.rb
|
134
|
+
- test/test_twilio.rb
|