twilio-ruby 0.0.4 → 0.1.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/lib/twilio-ruby.rb +33 -30
- data/lib/twilio-ruby/rest/accounts/account.rb +12 -0
- data/lib/twilio-ruby/rest/accounts/accounts.rb +5 -0
- data/lib/twilio-ruby/rest/available_phone_numbers/available_phone_number.rb +5 -0
- data/lib/twilio-ruby/rest/available_phone_numbers/available_phone_numbers.rb +11 -0
- data/lib/twilio-ruby/rest/available_phone_numbers/country.rb +10 -0
- data/lib/twilio-ruby/rest/available_phone_numbers/local.rb +11 -0
- data/lib/twilio-ruby/rest/available_phone_numbers/toll_free.rb +11 -0
- data/lib/twilio-ruby/rest/calls/call.rb +22 -0
- data/lib/twilio-ruby/rest/calls/calls.rb +10 -0
- data/lib/twilio-ruby/rest/client.rb +61 -0
- data/lib/twilio-ruby/rest/conferences/conference.rb +10 -0
- data/lib/twilio-ruby/rest/conferences/conferences.rb +5 -0
- data/lib/twilio-ruby/rest/conferences/participant.rb +17 -0
- data/lib/twilio-ruby/rest/conferences/participants.rb +5 -0
- data/lib/twilio-ruby/rest/incoming_phone_numbers/incoming_phone_number.rb +5 -0
- data/lib/twilio-ruby/rest/incoming_phone_numbers/incoming_phone_numbers.rb +9 -0
- data/lib/twilio-ruby/rest/instance_resource.rb +55 -0
- data/lib/twilio-ruby/rest/list_resource.rb +35 -0
- data/lib/twilio-ruby/rest/notifications/notification.rb +5 -0
- data/lib/twilio-ruby/rest/notifications/notifications.rb +5 -0
- data/lib/twilio-ruby/rest/outgoing_caller_ids/outgoing_caller_id.rb +5 -0
- data/lib/twilio-ruby/rest/outgoing_caller_ids/outgoing_caller_ids.rb +9 -0
- data/lib/twilio-ruby/rest/recordings/recording.rb +12 -0
- data/lib/twilio-ruby/rest/recordings/recordings.rb +5 -0
- data/lib/twilio-ruby/rest/sandbox/sandbox.rb +5 -0
- data/lib/twilio-ruby/rest/sms_messages/sms_message.rb +5 -0
- data/lib/twilio-ruby/rest/sms_messages/sms_messages.rb +9 -0
- data/lib/twilio-ruby/rest/transcriptions/transcription.rb +5 -0
- data/lib/twilio-ruby/rest/transcriptions/transcriptions.rb +5 -0
- data/lib/twilio-ruby/rest/utils.rb +32 -0
- data/lib/twilio-ruby/{verb.rb → twiml/verb.rb} +0 -0
- metadata +36 -36
- data/lib/twilio-ruby/accounts/account.rb +0 -10
- data/lib/twilio-ruby/accounts/accounts.rb +0 -3
- data/lib/twilio-ruby/available_phone_numbers/available_phone_number.rb +0 -3
- data/lib/twilio-ruby/available_phone_numbers/available_phone_numbers.rb +0 -9
- data/lib/twilio-ruby/available_phone_numbers/country.rb +0 -8
- data/lib/twilio-ruby/available_phone_numbers/local.rb +0 -9
- data/lib/twilio-ruby/available_phone_numbers/toll_free.rb +0 -9
- data/lib/twilio-ruby/calls/call.rb +0 -20
- data/lib/twilio-ruby/calls/calls.rb +0 -7
- data/lib/twilio-ruby/client.rb +0 -59
- data/lib/twilio-ruby/conferences/conference.rb +0 -8
- data/lib/twilio-ruby/conferences/conferences.rb +0 -3
- data/lib/twilio-ruby/conferences/participant.rb +0 -15
- data/lib/twilio-ruby/conferences/participants.rb +0 -3
- data/lib/twilio-ruby/incoming_phone_numbers/incoming_phone_number.rb +0 -3
- data/lib/twilio-ruby/incoming_phone_numbers/incoming_phone_numbers.rb +0 -7
- data/lib/twilio-ruby/instance_resource.rb +0 -53
- data/lib/twilio-ruby/list_resource.rb +0 -33
- data/lib/twilio-ruby/notifications/notification.rb +0 -3
- data/lib/twilio-ruby/notifications/notifications.rb +0 -3
- data/lib/twilio-ruby/outgoing_caller_ids/outgoing_caller_id.rb +0 -3
- data/lib/twilio-ruby/outgoing_caller_ids/outgoing_caller_ids.rb +0 -7
- data/lib/twilio-ruby/recordings/recording.rb +0 -10
- data/lib/twilio-ruby/recordings/recordings.rb +0 -3
- data/lib/twilio-ruby/sandbox/sandbox.rb +0 -3
- data/lib/twilio-ruby/sms_messages/sms_message.rb +0 -3
- data/lib/twilio-ruby/sms_messages/sms_messages.rb +0 -7
- data/lib/twilio-ruby/transcriptions/transcription.rb +0 -3
- data/lib/twilio-ruby/transcriptions/transcriptions.rb +0 -3
- data/lib/twilio-ruby/utils.rb +0 -23
data/lib/twilio-ruby.rb
CHANGED
@@ -3,34 +3,37 @@ require 'net/https'
|
|
3
3
|
require 'builder'
|
4
4
|
require 'crack'
|
5
5
|
require 'cgi'
|
6
|
+
require 'openssl'
|
7
|
+
require 'base64'
|
6
8
|
|
7
|
-
|
8
|
-
require 'twilio-ruby/
|
9
|
-
require 'twilio-ruby/
|
10
|
-
require 'twilio-ruby/
|
11
|
-
require 'twilio-ruby/
|
12
|
-
require 'twilio-ruby/accounts/
|
13
|
-
require 'twilio-ruby/
|
14
|
-
require 'twilio-ruby/calls/
|
15
|
-
require 'twilio-ruby/
|
16
|
-
require 'twilio-ruby/sms_messages/
|
17
|
-
require 'twilio-ruby/
|
18
|
-
require 'twilio-ruby/outgoing_caller_ids/
|
19
|
-
require 'twilio-ruby/
|
20
|
-
require 'twilio-ruby/incoming_phone_numbers/
|
21
|
-
require 'twilio-ruby/
|
22
|
-
require 'twilio-ruby/available_phone_numbers/
|
23
|
-
require 'twilio-ruby/available_phone_numbers/
|
24
|
-
require 'twilio-ruby/available_phone_numbers/
|
25
|
-
require 'twilio-ruby/available_phone_numbers/
|
26
|
-
require 'twilio-ruby/
|
27
|
-
require 'twilio-ruby/conferences/
|
28
|
-
require 'twilio-ruby/conferences/
|
29
|
-
require 'twilio-ruby/conferences/
|
30
|
-
require 'twilio-ruby/
|
31
|
-
require 'twilio-ruby/recordings/
|
32
|
-
require 'twilio-ruby/
|
33
|
-
require 'twilio-ruby/transcriptions/
|
34
|
-
require 'twilio-ruby/
|
35
|
-
require 'twilio-ruby/notifications/
|
36
|
-
require 'twilio-ruby/
|
9
|
+
|
10
|
+
require 'twilio-ruby/rest/utils'
|
11
|
+
require 'twilio-ruby/rest/list_resource'
|
12
|
+
require 'twilio-ruby/rest/instance_resource'
|
13
|
+
require 'twilio-ruby/rest/sandbox/sandbox'
|
14
|
+
require 'twilio-ruby/rest/accounts/account'
|
15
|
+
require 'twilio-ruby/rest/accounts/accounts'
|
16
|
+
require 'twilio-ruby/rest/calls/call'
|
17
|
+
require 'twilio-ruby/rest/calls/calls'
|
18
|
+
require 'twilio-ruby/rest/sms_messages/sms_message'
|
19
|
+
require 'twilio-ruby/rest/sms_messages/sms_messages'
|
20
|
+
require 'twilio-ruby/rest/outgoing_caller_ids/outgoing_caller_id'
|
21
|
+
require 'twilio-ruby/rest/outgoing_caller_ids/outgoing_caller_ids'
|
22
|
+
require 'twilio-ruby/rest/incoming_phone_numbers/incoming_phone_number'
|
23
|
+
require 'twilio-ruby/rest/incoming_phone_numbers/incoming_phone_numbers'
|
24
|
+
require 'twilio-ruby/rest/available_phone_numbers/available_phone_number'
|
25
|
+
require 'twilio-ruby/rest/available_phone_numbers/available_phone_numbers'
|
26
|
+
require 'twilio-ruby/rest/available_phone_numbers/country'
|
27
|
+
require 'twilio-ruby/rest/available_phone_numbers/local'
|
28
|
+
require 'twilio-ruby/rest/available_phone_numbers/toll_free'
|
29
|
+
require 'twilio-ruby/rest/conferences/conference'
|
30
|
+
require 'twilio-ruby/rest/conferences/conferences'
|
31
|
+
require 'twilio-ruby/rest/conferences/participant'
|
32
|
+
require 'twilio-ruby/rest/conferences/participants'
|
33
|
+
require 'twilio-ruby/rest/recordings/recording'
|
34
|
+
require 'twilio-ruby/rest/recordings/recordings'
|
35
|
+
require 'twilio-ruby/rest/transcriptions/transcription'
|
36
|
+
require 'twilio-ruby/rest/transcriptions/transcriptions'
|
37
|
+
require 'twilio-ruby/rest/notifications/notification'
|
38
|
+
require 'twilio-ruby/rest/notifications/notifications'
|
39
|
+
require 'twilio-ruby/rest/client'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Twilio
|
2
|
+
module REST
|
3
|
+
class Account < InstanceResource
|
4
|
+
def initialize(uri, client, params={})
|
5
|
+
super uri, client, params
|
6
|
+
resource :sandbox, :available_phone_numbers, :incoming_phone_numbers,
|
7
|
+
:calls, :outgoing_caller_ids, :conferences, :sms_messages, :recordings,
|
8
|
+
:transcriptions, :notifications
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Twilio
|
2
|
+
module REST
|
3
|
+
class Call < InstanceResource
|
4
|
+
def initialize(uri, client, params={})
|
5
|
+
super uri, client, params
|
6
|
+
resource :recordings, :transcriptions
|
7
|
+
end
|
8
|
+
|
9
|
+
def redirect_to(url)
|
10
|
+
update :url => url
|
11
|
+
end
|
12
|
+
|
13
|
+
def cancel
|
14
|
+
update :status => 'canceled'
|
15
|
+
end
|
16
|
+
|
17
|
+
def hangup
|
18
|
+
update :status => 'completed'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Twilio
|
2
|
+
module REST
|
3
|
+
class Client
|
4
|
+
include Utils
|
5
|
+
|
6
|
+
attr_reader :api_version, :domain, :account_sid, :account, :accounts
|
7
|
+
|
8
|
+
def initialize(account_sid, auth_token, api_version='2010-04-01',
|
9
|
+
domain='api.twilio.com', proxy=nil)
|
10
|
+
@account_sid = account_sid
|
11
|
+
@auth_token = auth_token
|
12
|
+
@api_version = api_version
|
13
|
+
set_up_connection_to domain, proxy
|
14
|
+
set_up_subresources
|
15
|
+
end
|
16
|
+
|
17
|
+
# Define some helper methods for sending HTTP requests
|
18
|
+
[:get, :put, :post, :delete].each do |method|
|
19
|
+
method_class = Net::HTTP.const_get method.to_s.capitalize
|
20
|
+
define_method method do |uri, *args|
|
21
|
+
uri += '.json'
|
22
|
+
params = (args[0] && args[0] != {}) ? twilify(args[0]) : nil
|
23
|
+
uri += "?#{url_encode(params)}" if params && method == :get
|
24
|
+
request = method_class.new uri
|
25
|
+
request.basic_auth @account_sid, @auth_token
|
26
|
+
request.form_data = params if params && [:post, :put].include?(method)
|
27
|
+
http_response = @connection.request request
|
28
|
+
object = Crack::JSON.parse http_response.body if http_response.body
|
29
|
+
raise object['message'] unless http_response.kind_of? Net::HTTPSuccess
|
30
|
+
object
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def request(uri, method, params={})
|
35
|
+
send method.downcase.to_sym, uri, params
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def set_up_connection_to(domain, proxy)
|
41
|
+
@connection = Net::HTTP.new domain, 443
|
42
|
+
@connection.use_ssl = true
|
43
|
+
# Don't check the server cert. Ideally this is configurable, in case an
|
44
|
+
# app wants to verify that it is actually talking to the real Twilio.
|
45
|
+
@connection.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
46
|
+
end
|
47
|
+
|
48
|
+
def set_up_subresources
|
49
|
+
accounts_uri = "/#{@api_version}/Accounts"
|
50
|
+
# Set up a special handle to grab the account.
|
51
|
+
@account = Twilio::REST::Account.new "#{accounts_uri}/#{@account_sid}", self
|
52
|
+
# Set up the accounts subresource.
|
53
|
+
@accounts = Twilio::REST::Accounts.new accounts_uri, self
|
54
|
+
end
|
55
|
+
|
56
|
+
def url_encode(hash)
|
57
|
+
hash.to_a.map {|pair| pair.map {|e| CGI.escape e.to_s}.join '='}.join '&'
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Twilio
|
2
|
+
module REST
|
3
|
+
class InstanceResource
|
4
|
+
include Utils
|
5
|
+
|
6
|
+
def initialize(uri, client, params={})
|
7
|
+
@uri, @client = uri, client
|
8
|
+
set_up_properties_from params
|
9
|
+
end
|
10
|
+
|
11
|
+
def update(params={})
|
12
|
+
raise "Can't update a resource without a Twilio::Client" unless @client
|
13
|
+
response = @client.post @uri, params
|
14
|
+
set_up_properties_from response
|
15
|
+
self
|
16
|
+
end
|
17
|
+
|
18
|
+
def delete
|
19
|
+
raise "Can't delete a resource without a Twilio::Client" unless @client
|
20
|
+
@client.delete @uri
|
21
|
+
end
|
22
|
+
|
23
|
+
def method_missing(method, *args)
|
24
|
+
super if @updated
|
25
|
+
response = @client.get @uri
|
26
|
+
set_up_properties_from response
|
27
|
+
self.send method, *args
|
28
|
+
end
|
29
|
+
|
30
|
+
protected
|
31
|
+
|
32
|
+
def set_up_properties_from(hash)
|
33
|
+
eigenclass = class << self; self; end
|
34
|
+
hash.each do |p,v|
|
35
|
+
property = detwilify p
|
36
|
+
unless ['uri', 'client', 'updated'].include? property
|
37
|
+
eigenclass.send :define_method, property.to_sym, &lambda {v}
|
38
|
+
end
|
39
|
+
end
|
40
|
+
@updated = !hash.keys.empty?
|
41
|
+
end
|
42
|
+
|
43
|
+
def resource(*resources)
|
44
|
+
resources.each do |r|
|
45
|
+
resource = twilify r
|
46
|
+
relative_uri = r == :sms_messages ? 'SMS/Messages' : resource
|
47
|
+
instance_variable_set("@#{r}",
|
48
|
+
Twilio::REST.const_get(resource).new("#{@uri}/#{relative_uri}", @client))
|
49
|
+
end
|
50
|
+
self.class.instance_eval {attr_reader *resources}
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Twilio
|
2
|
+
module REST
|
3
|
+
class ListResource
|
4
|
+
include Utils
|
5
|
+
|
6
|
+
def initialize(uri, client)
|
7
|
+
@resource_name = self.class.name.split('::')[-1]
|
8
|
+
@instance_class = Twilio::REST.const_get @resource_name.chop
|
9
|
+
@uri, @client = uri, client
|
10
|
+
end
|
11
|
+
|
12
|
+
# Grab a list of this kind of resource and return it as an array.
|
13
|
+
def list(params={})
|
14
|
+
raise "Can't get a resource list without a Twilio::Client" unless @client
|
15
|
+
response = @client.get @uri, params
|
16
|
+
resources = response[detwilify(@resource_name)]
|
17
|
+
resources.map do |resource|
|
18
|
+
@instance_class.new "#{@uri}/#{resource['sid']}", @client, resource
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# Return an empty instance resource object with the proper URI.
|
23
|
+
def get(sid)
|
24
|
+
@instance_class.new "#{@uri}/#{sid}", @client
|
25
|
+
end
|
26
|
+
|
27
|
+
# Return a newly created resource.
|
28
|
+
def create(params={})
|
29
|
+
raise "Can't create a resource without a Twilio::Client" unless @client
|
30
|
+
response = @client.post @uri, params
|
31
|
+
@instance_class.new "#{@uri}/#{response['sid']}", @client, response
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Twilio
|
2
|
+
module REST
|
3
|
+
module Utils
|
4
|
+
|
5
|
+
def twilify(something)
|
6
|
+
if something.is_a? Hash
|
7
|
+
Hash[*something.to_a.map {|a| [twilify(a[0]).to_sym, a[1]]}.flatten]
|
8
|
+
else
|
9
|
+
something.to_s.split('_').map do |s|
|
10
|
+
[s[0,1].capitalize, s[1..-1]].join
|
11
|
+
end.join
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def detwilify(something)
|
16
|
+
if something.is_a? Hash
|
17
|
+
Hash[*something.to_a.map {|pair| [detwilify(pair[0]).to_sym, pair[1]]}.flatten]
|
18
|
+
else
|
19
|
+
something.to_s.gsub(/[A-Z][a-z]*/) {|s| "_#{s.downcase}"}.gsub(/^_/, '')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.validate(auth_token, signature, url, params={})
|
24
|
+
data = url + params.sort.to_s
|
25
|
+
digest = OpenSSL::Digest::Digest.new('sha1')
|
26
|
+
expected = Base64.encode64(OpenSSL::HMAC.digest(digest, auth_token, data)).strip
|
27
|
+
return expected == signature
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
File without changes
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: twilio-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.4
|
10
|
+
version: 0.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Andrew Benton
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-02-15 00:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -60,37 +60,37 @@ extra_rdoc_files: []
|
|
60
60
|
|
61
61
|
files:
|
62
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/
|
67
|
-
- lib/twilio-ruby/
|
68
|
-
- lib/twilio-ruby/incoming_phone_numbers/
|
69
|
-
- lib/twilio-ruby/
|
70
|
-
- lib/twilio-ruby/conferences/
|
71
|
-
- lib/twilio-ruby/conferences/
|
72
|
-
- lib/twilio-ruby/conferences/
|
73
|
-
- lib/twilio-ruby/
|
74
|
-
- lib/twilio-ruby/transcriptions/
|
75
|
-
- lib/twilio-ruby/
|
76
|
-
- lib/twilio-ruby/calls/
|
77
|
-
- lib/twilio-ruby/
|
78
|
-
- lib/twilio-ruby/
|
79
|
-
- lib/twilio-ruby/accounts/
|
80
|
-
- lib/twilio-ruby/
|
81
|
-
- lib/twilio-ruby/recordings/
|
82
|
-
- lib/twilio-ruby/
|
83
|
-
- lib/twilio-ruby/notifications/
|
84
|
-
- lib/twilio-ruby/
|
85
|
-
- lib/twilio-ruby/outgoing_caller_ids/
|
86
|
-
- lib/twilio-ruby/
|
87
|
-
- lib/twilio-ruby/available_phone_numbers/
|
88
|
-
- lib/twilio-ruby/available_phone_numbers/
|
89
|
-
- lib/twilio-ruby/available_phone_numbers/
|
90
|
-
- lib/twilio-ruby/available_phone_numbers/
|
91
|
-
- lib/twilio-ruby/
|
92
|
-
- lib/twilio-ruby/
|
93
|
-
- lib/twilio-ruby/
|
63
|
+
- lib/twilio-ruby/rest/sms_messages/sms_message.rb
|
64
|
+
- lib/twilio-ruby/rest/sms_messages/sms_messages.rb
|
65
|
+
- lib/twilio-ruby/rest/client.rb
|
66
|
+
- lib/twilio-ruby/rest/list_resource.rb
|
67
|
+
- lib/twilio-ruby/rest/incoming_phone_numbers/incoming_phone_number.rb
|
68
|
+
- lib/twilio-ruby/rest/incoming_phone_numbers/incoming_phone_numbers.rb
|
69
|
+
- lib/twilio-ruby/rest/conferences/participant.rb
|
70
|
+
- lib/twilio-ruby/rest/conferences/conference.rb
|
71
|
+
- lib/twilio-ruby/rest/conferences/conferences.rb
|
72
|
+
- lib/twilio-ruby/rest/conferences/participants.rb
|
73
|
+
- lib/twilio-ruby/rest/transcriptions/transcriptions.rb
|
74
|
+
- lib/twilio-ruby/rest/transcriptions/transcription.rb
|
75
|
+
- lib/twilio-ruby/rest/calls/call.rb
|
76
|
+
- lib/twilio-ruby/rest/calls/calls.rb
|
77
|
+
- lib/twilio-ruby/rest/utils.rb
|
78
|
+
- lib/twilio-ruby/rest/accounts/accounts.rb
|
79
|
+
- lib/twilio-ruby/rest/accounts/account.rb
|
80
|
+
- lib/twilio-ruby/rest/recordings/recording.rb
|
81
|
+
- lib/twilio-ruby/rest/recordings/recordings.rb
|
82
|
+
- lib/twilio-ruby/rest/notifications/notification.rb
|
83
|
+
- lib/twilio-ruby/rest/notifications/notifications.rb
|
84
|
+
- lib/twilio-ruby/rest/outgoing_caller_ids/outgoing_caller_id.rb
|
85
|
+
- lib/twilio-ruby/rest/outgoing_caller_ids/outgoing_caller_ids.rb
|
86
|
+
- lib/twilio-ruby/rest/available_phone_numbers/country.rb
|
87
|
+
- lib/twilio-ruby/rest/available_phone_numbers/local.rb
|
88
|
+
- lib/twilio-ruby/rest/available_phone_numbers/available_phone_number.rb
|
89
|
+
- lib/twilio-ruby/rest/available_phone_numbers/available_phone_numbers.rb
|
90
|
+
- lib/twilio-ruby/rest/available_phone_numbers/toll_free.rb
|
91
|
+
- lib/twilio-ruby/rest/sandbox/sandbox.rb
|
92
|
+
- lib/twilio-ruby/rest/instance_resource.rb
|
93
|
+
- lib/twilio-ruby/twiml/verb.rb
|
94
94
|
- test/twilio_spec.rb
|
95
95
|
- test/test_twilio.rb
|
96
96
|
- examples.rb
|
@@ -125,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
125
125
|
requirements: []
|
126
126
|
|
127
127
|
rubyforge_project:
|
128
|
-
rubygems_version: 1.
|
128
|
+
rubygems_version: 1.5.0
|
129
129
|
signing_key:
|
130
130
|
specification_version: 3
|
131
131
|
summary: A simple library for communicating with the Twilio REST API
|
@@ -1,10 +0,0 @@
|
|
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
|
@@ -1,20 +0,0 @@
|
|
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
|
data/lib/twilio-ruby/client.rb
DELETED
@@ -1,59 +0,0 @@
|
|
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
|
-
http_response = @connection.request request
|
27
|
-
object = Crack::JSON.parse http_response.body if http_response.body
|
28
|
-
raise object['message'] unless http_response.kind_of? Net::HTTPSuccess
|
29
|
-
object
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def request(uri, method, params={})
|
34
|
-
send method.downcase.to_sym, uri, params
|
35
|
-
end
|
36
|
-
|
37
|
-
private
|
38
|
-
|
39
|
-
def set_up_connection_to(domain, proxy)
|
40
|
-
@connection = Net::HTTP.new domain, 443
|
41
|
-
@connection.use_ssl = true
|
42
|
-
# Don't check the server cert. Ideally this is configurable, in case an
|
43
|
-
# app wants to verify that it is actually talking to the real Twilio.
|
44
|
-
@connection.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
45
|
-
end
|
46
|
-
|
47
|
-
def set_up_subresources
|
48
|
-
accounts_uri = "/#{@api_version}/Accounts"
|
49
|
-
# Set up a special handle to grab the account.
|
50
|
-
@account = Twilio::Account.new "#{accounts_uri}/#{@account_sid}", self
|
51
|
-
# Set up the accounts subresource.
|
52
|
-
@accounts = Twilio::Accounts.new accounts_uri, self
|
53
|
-
end
|
54
|
-
|
55
|
-
def url_encode(hash)
|
56
|
-
hash.to_a.map {|pair| pair.map {|e| CGI.escape e.to_s}.join '='}.join '&'
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
@@ -1,53 +0,0 @@
|
|
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
|
@@ -1,33 +0,0 @@
|
|
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
|
data/lib/twilio-ruby/utils.rb
DELETED
@@ -1,23 +0,0 @@
|
|
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
|