twilio-ruby 4.8.0 → 4.8.1.edge

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +0 -35
  3. data/lib/twilio-ruby.rb +13 -1
  4. data/lib/twilio-ruby/rest/conversations/completed.rb +13 -0
  5. data/lib/twilio-ruby/rest/conversations/conversations.rb +23 -0
  6. data/lib/twilio-ruby/rest/conversations/in_progress.rb +13 -0
  7. data/lib/twilio-ruby/rest/conversations/participants.rb +8 -0
  8. data/lib/twilio-ruby/rest/conversations_client.rb +99 -0
  9. data/lib/twilio-ruby/rest/ip-messaging/channels.rb +14 -0
  10. data/lib/twilio-ruby/rest/ip-messaging/credentials.rb +22 -0
  11. data/lib/twilio-ruby/rest/ip-messaging/members.rb +8 -0
  12. data/lib/twilio-ruby/rest/ip-messaging/messages.rb +8 -0
  13. data/lib/twilio-ruby/rest/ip-messaging/roles.rb +8 -0
  14. data/lib/twilio-ruby/rest/ip-messaging/services.rb +22 -0
  15. data/lib/twilio-ruby/rest/ip-messaging/users.rb +8 -0
  16. data/lib/twilio-ruby/rest/ip_messaging_client.rb +100 -0
  17. data/lib/twilio-ruby/rest/list_resource.rb +4 -3
  18. data/lib/twilio-ruby/rest/next_gen_list_resource.rb +3 -2
  19. data/lib/twilio-ruby/rest/pricing_client.rb +1 -1
  20. data/lib/twilio-ruby/rest/trunking_client.rb +2 -2
  21. data/lib/twilio-ruby/rest/utils.rb +12 -1
  22. data/lib/twilio-ruby/util/access_token.rb +2 -11
  23. data/lib/twilio-ruby/version.rb +1 -1
  24. data/spec/conversations/conversations_spec.rb +61 -0
  25. data/spec/rest/conversations_client_spec.rb +13 -0
  26. data/spec/rest/ip-messaging/channel_spec.rb +21 -0
  27. data/spec/rest/ip-messaging/service_spec.rb +30 -0
  28. data/spec/rest/ip_messaging_client_spec.rb +21 -0
  29. data/spec/rest/pricing_client_spec.rb +0 -15
  30. data/spec/util/access_token_spec.rb +12 -31
  31. metadata +43 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1039025067aafec54048cf0bf4ed28b884cc5242
4
- data.tar.gz: 8238a181bcd6831902601e943102b468dcc08832
3
+ metadata.gz: 99af0197f2e2d5f984f35d47c2f00ac3f8f1fd73
4
+ data.tar.gz: 04023f824163efdd211e7dff700f62ff92009bb8
5
5
  SHA512:
6
- metadata.gz: e5d9e4dd3a04bdb3283c9f56bbc33fe9d0dc23cc5726a062570c197722518c97573258b39d323cdfe6ab5376ce19b7dcd4102d90b26de8f00ad1d76c91859d8d
7
- data.tar.gz: 31a0c13dad6d659a8fc1577d4f1802f78042b1eb10b3f4d971680ca694d6e89b7a5c5832cbe48de3f2a9a6484a223f7bda3949cff907a00fb02967c9579a3089
6
+ metadata.gz: 97e8f813b10b0fca3378355ab9c8ad93d6b3349e41715a97a1b99772f96aecc4b86b8618b0b5ffe1e8e9ad04c58c0453235c2af3f3da5122a86f5b4c83f0ae76
7
+ data.tar.gz: 574d64d43111b2a7657ff5593bb7f39dc437240baeb2b1c207c326acaf46aa4ca7574523d5af81b66c372bbd8fea5b4d107bb8dd02f89783d39405a95988caa4
data/CHANGES.md CHANGED
@@ -1,41 +1,6 @@
1
1
  twilio-ruby changelog
2
2
  =====================
3
3
 
4
- Version 4.8.0
5
- -------------
6
-
7
- Release December 8, 2015
8
-
9
- - Make nbf optional
10
-
11
- Version 4.7.0
12
- -------------
13
-
14
- Release December 3, 2015
15
-
16
- - Add access tokens
17
-
18
- Version 4.6.2
19
- -------------
20
-
21
- Release November 19, 2015
22
-
23
- - Fix Pricing Messages
24
-
25
- Version 4.6.1
26
- -------------
27
-
28
- Release November 10, 2015
29
-
30
- - Fix TrunkingClient references
31
-
32
- Version 4.6.0
33
- -------------
34
-
35
- Release October 28, 2015
36
-
37
- - Add /Keys endpoint
38
-
39
4
  Version 4.4.0
40
5
  -------------
41
6
 
@@ -36,6 +36,17 @@ require 'twilio-ruby/rest/pricing/phone_numbers'
36
36
  require 'twilio-ruby/rest/pricing/voice/numbers'
37
37
  require 'twilio-ruby/rest/pricing/voice'
38
38
  require 'twilio-ruby/rest/pricing/messaging'
39
+ require 'twilio-ruby/rest/conversations/in_progress'
40
+ require 'twilio-ruby/rest/conversations/completed'
41
+ require 'twilio-ruby/rest/conversations/conversations'
42
+ require 'twilio-ruby/rest/conversations/participants'
43
+ require 'twilio-ruby/rest/ip-messaging/services'
44
+ require 'twilio-ruby/rest/ip-messaging/channels'
45
+ require 'twilio-ruby/rest/ip-messaging/members'
46
+ require 'twilio-ruby/rest/ip-messaging/messages'
47
+ require 'twilio-ruby/rest/ip-messaging/roles'
48
+ require 'twilio-ruby/rest/ip-messaging/users'
49
+ require 'twilio-ruby/rest/ip-messaging/credentials'
39
50
  require 'twilio-ruby/rest/sms'
40
51
  require 'twilio-ruby/rest/sms/short_codes'
41
52
  require 'twilio-ruby/rest/sms/messages'
@@ -97,11 +108,12 @@ require 'twilio-ruby/rest/notifications'
97
108
  require 'twilio-ruby/rest/addresses'
98
109
  require 'twilio-ruby/rest/addresses/dependent_phone_numbers'
99
110
  require 'twilio-ruby/rest/client'
111
+ require 'twilio-ruby/rest/conversations_client'
100
112
  require 'twilio-ruby/rest/task_router_client'
101
- require 'twilio-ruby/rest/trunking_client'
102
113
  require 'twilio-ruby/rest/lookups_client'
103
114
  require 'twilio-ruby/rest/pricing_client'
104
115
  require 'twilio-ruby/rest/monitor_client'
116
+ require 'twilio-ruby/rest/ip_messaging_client'
105
117
  require 'rack/twilio_webhook_authentication'
106
118
 
107
119
  module Twilio
@@ -0,0 +1,13 @@
1
+ module Twilio
2
+ module REST
3
+ module Conversations
4
+ class Completed < NextGenListResource
5
+ def initialize(path, client)
6
+ @path, @client = path, client
7
+ @instance_class = Twilio::REST::Conversations::Conversation
8
+ @instance_id_key = 'sid'
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,23 @@
1
+ module Twilio
2
+ module REST
3
+ module Conversations
4
+ class Conversations < NextGenListResource
5
+ def initialize(path, client)
6
+ @path, @client = path, client
7
+ @submodule = :Conversations
8
+ freeze_path
9
+ resource :in_progress,
10
+ :completed
11
+ end
12
+ end
13
+
14
+ class Conversation < InstanceResource
15
+ def initialize(path, client, params={})
16
+ super
17
+ @submodule = :Conversations
18
+ resource :participants
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,13 @@
1
+ module Twilio
2
+ module REST
3
+ module Conversations
4
+ class InProgress < NextGenListResource
5
+ def initialize(path, client)
6
+ @path, @client = path, client
7
+ @instance_class = Twilio::REST::Conversations::Conversation
8
+ @instance_id_key = 'sid'
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,8 @@
1
+ module Twilio
2
+ module REST
3
+ module Conversations
4
+ class Participants < NextGenListResource; end
5
+ class Participant < InstanceResource; end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,99 @@
1
+ require 'twilio-ruby/rest/base_client'
2
+ module Twilio
3
+ module REST
4
+ class ConversationsClient < BaseClient
5
+ API_VERSION = 'v1'
6
+
7
+ attr_reader :conversations
8
+
9
+ host 'conversations.twilio.com'
10
+
11
+ ##
12
+ # Instantiate a new HTTP Conversations client to talk to Twilio. The parameters
13
+ # +account_sid+, +auth_token+ are required, unless you have configured
14
+ # them already using the block configure syntax, and used to generate the
15
+ # HTTP basic auth header in each request. The +options+ parameter is a
16
+ # hash of connection configuration options. the following keys are
17
+ # supported:
18
+ #
19
+ # === <tt>host: 'conversations.twilio.com'</tt>
20
+ #
21
+ # The domain to which you'd like the client to make HTTP requests. Useful
22
+ # for testing. Defaults to 'conversations.twilio.com'.
23
+ #
24
+ # === <tt>port: 443</tt>
25
+ #
26
+ # The port on which to connect to the above domain. Defaults to 443 and
27
+ # should be left that way except in testing environments.
28
+ #
29
+ # === <tt>use_ssl: true</tt>
30
+ #
31
+ # Declare whether ssl should be used for connections to the above domain.
32
+ # Defaults to true and should be left alone except when testing.
33
+ #
34
+ # === <tt>ssl_verify_peer: true</tt>
35
+ #
36
+ # Declare whether to verify the host's ssl cert when setting up the
37
+ # connection to the above domain. Defaults to true, but can be turned off
38
+ # to avoid ssl certificate verification failures in environments without
39
+ # the necessary ca certificates.
40
+ #
41
+ # === <tt>ssl_ca_file: '/path/to/ca/file'</tt>
42
+ #
43
+ # Specify the path to the certificate authority bundle you'd like to use
44
+ # to verify Twilio's SSL certificate on each request. If not specified, a
45
+ # certificate bundle extraced from Firefox is packaged with the gem and
46
+ # used by default.
47
+ #
48
+ # === <tt>timeout: 30</tt>
49
+ #
50
+ # Set the time in seconds to wait before timing out the HTTP request.
51
+ # Defaults to 30 seconds. If you aren't fetching giant pages of call or
52
+ # SMS logs you can safely decrease this to something like 3 seconds or
53
+ # lower. In paricular if you are sending SMS you can set this to 1 second
54
+ # or less and swallow the exception if you don't care about the response.
55
+ #
56
+ # === <tt>proxy_addr: 'proxy.host.domain'</tt>
57
+ #
58
+ # The domain of a proxy through which you'd like the client to make HTTP
59
+ # requests. Defaults to nil.
60
+ #
61
+ # === <tt>proxy_port: 3128</tt>
62
+ #
63
+ # The port on which to connect to the above proxy. Defaults to nil.
64
+ #
65
+ # === <tt>proxy_user: 'username'</tt>
66
+ #
67
+ # The user name to use for authentication with the proxy. Defaults to nil.
68
+ #
69
+ # === <tt>proxy_pass: 'password'</tt>
70
+ #
71
+ # The password to use for authentication with the proxy. Defaults to nil.
72
+ #
73
+ # === <tt>retry_limit: 1</tt>
74
+ #
75
+ # The number of times to retry a request that has failed before throwing
76
+ # an exception. Defaults to one.
77
+ def inspect # :nodoc:
78
+ "<Twilio::REST::ConversationsClient @account_sid=#{@account_sid}>"
79
+ end
80
+
81
+ protected
82
+
83
+ ##
84
+ # Create subresource properties
85
+ def set_up_subresources # :doc:
86
+ @conversations = Twilio::REST::Conversations::Conversations.new "/#{API_VERSION}/Conversations", self
87
+ end
88
+
89
+ ##
90
+ # Builds up full request path
91
+ def build_full_path(path, params, method)
92
+ path = path.dup
93
+ path << "?#{url_encode(params)}" if method == :get && !params.empty?
94
+ path
95
+ end
96
+
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,14 @@
1
+ module Twilio
2
+ module REST
3
+ module IpMessaging
4
+ class Channels < NextGenListResource; end
5
+ class Channel < InstanceResource
6
+ def initialize(path, client, params={})
7
+ super
8
+ resource :messages,
9
+ :members
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,22 @@
1
+ module Twilio
2
+ module REST
3
+ module IpMessaging
4
+ class Credentials < NextGenListResource
5
+ def initialize(path, client)
6
+ @path, @client = path, client
7
+ @submodule = :IpMessaging
8
+ end
9
+ end
10
+
11
+ class Credential < InstanceResource
12
+ def initialize(path, client, params={})
13
+ super
14
+ @submodule = :IpMessaging
15
+ resource :channels,
16
+ :users,
17
+ :roles
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,8 @@
1
+ module Twilio
2
+ module REST
3
+ module IpMessaging
4
+ class Members < NextGenListResource; end
5
+ class Member < InstanceResource; end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module Twilio
2
+ module REST
3
+ module IpMessaging
4
+ class Messages < NextGenListResource; end
5
+ class Message < InstanceResource; end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module Twilio
2
+ module REST
3
+ module IpMessaging
4
+ class Roles < NextGenListResource; end
5
+ class Role < InstanceResource; end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,22 @@
1
+ module Twilio
2
+ module REST
3
+ module IpMessaging
4
+ class Services < NextGenListResource
5
+ def initialize(path, client)
6
+ @path, @client = path, client
7
+ @submodule = :IpMessaging
8
+ end
9
+ end
10
+
11
+ class Service < InstanceResource
12
+ def initialize(path, client, params={})
13
+ super
14
+ @submodule = :IpMessaging
15
+ resource :channels,
16
+ :users,
17
+ :roles
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,8 @@
1
+ module Twilio
2
+ module REST
3
+ module IpMessaging
4
+ class Users < NextGenListResource; end
5
+ class User < InstanceResource; end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,100 @@
1
+ require 'twilio-ruby/rest/base_client'
2
+ module Twilio
3
+ module REST
4
+ class IpMessagingClient < BaseClient
5
+ API_VERSION = 'v1'
6
+
7
+ attr_reader :services, :credentials
8
+
9
+ host 'ip-messaging.twilio.com'
10
+
11
+ ##
12
+ # Instantiate a new HTTP Conversations client to talk to Twilio. The parameters
13
+ # +account_sid+, +auth_token+ are required, unless you have configured
14
+ # them already using the block configure syntax, and used to generate the
15
+ # HTTP basic auth header in each request. The +options+ parameter is a
16
+ # hash of connection configuration options. the following keys are
17
+ # supported:
18
+ #
19
+ # === <tt>host: 'ip-messaging.twilio.com'</tt>
20
+ #
21
+ # The domain to which you'd like the client to make HTTP requests. Useful
22
+ # for testing. Defaults to 'ip-messaging.twilio.com'.
23
+ #
24
+ # === <tt>port: 443</tt>
25
+ #
26
+ # The port on which to connect to the above domain. Defaults to 443 and
27
+ # should be left that way except in testing environments.
28
+ #
29
+ # === <tt>use_ssl: true</tt>
30
+ #
31
+ # Declare whether ssl should be used for connections to the above domain.
32
+ # Defaults to true and should be left alone except when testing.
33
+ #
34
+ # === <tt>ssl_verify_peer: true</tt>
35
+ #
36
+ # Declare whether to verify the host's ssl cert when setting up the
37
+ # connection to the above domain. Defaults to true, but can be turned off
38
+ # to avoid ssl certificate verification failures in environments without
39
+ # the necessary ca certificates.
40
+ #
41
+ # === <tt>ssl_ca_file: '/path/to/ca/file'</tt>
42
+ #
43
+ # Specify the path to the certificate authority bundle you'd like to use
44
+ # to verify Twilio's SSL certificate on each request. If not specified, a
45
+ # certificate bundle extraced from Firefox is packaged with the gem and
46
+ # used by default.
47
+ #
48
+ # === <tt>timeout: 30</tt>
49
+ #
50
+ # Set the time in seconds to wait before timing out the HTTP request.
51
+ # Defaults to 30 seconds. If you aren't fetching giant pages of call or
52
+ # SMS logs you can safely decrease this to something like 3 seconds or
53
+ # lower. In paricular if you are sending SMS you can set this to 1 second
54
+ # or less and swallow the exception if you don't care about the response.
55
+ #
56
+ # === <tt>proxy_addr: 'proxy.host.domain'</tt>
57
+ #
58
+ # The domain of a proxy through which you'd like the client to make HTTP
59
+ # requests. Defaults to nil.
60
+ #
61
+ # === <tt>proxy_port: 3128</tt>
62
+ #
63
+ # The port on which to connect to the above proxy. Defaults to nil.
64
+ #
65
+ # === <tt>proxy_user: 'username'</tt>
66
+ #
67
+ # The user name to use for authentication with the proxy. Defaults to nil.
68
+ #
69
+ # === <tt>proxy_pass: 'password'</tt>
70
+ #
71
+ # The password to use for authentication with the proxy. Defaults to nil.
72
+ #
73
+ # === <tt>retry_limit: 1</tt>
74
+ #
75
+ # The number of times to retry a request that has failed before throwing
76
+ # an exception. Defaults to one.
77
+ def inspect # :nodoc:
78
+ "<Twilio::REST::IpMessagingClient @account_sid=#{@account_sid}>"
79
+ end
80
+
81
+ protected
82
+
83
+ ##
84
+ # Create subresource properties
85
+ def set_up_subresources # :doc:
86
+ @services = Twilio::REST::IpMessaging::Services.new "/#{API_VERSION}/Services", self
87
+ @credentials = Twilio::REST::IpMessaging::Credentials.new "/#{API_VERSION}/Credentials", self
88
+ end
89
+
90
+ ##
91
+ # Builds up full request path
92
+ def build_full_path(path, params, method)
93
+ path = path.dup
94
+ path << "?#{url_encode(params)}" if method == :get && !params.empty?
95
+ path
96
+ end
97
+
98
+ end
99
+ end
100
+ end
@@ -10,7 +10,7 @@ module Twilio
10
10
  'Countries' => 'Country',
11
11
  'Feedback' => 'FeedbackInstance',
12
12
  'IpAddresses' => 'IpAddress',
13
- 'Media' => 'MediaInstance',
13
+ 'Media' => 'MediaInstance'
14
14
  }
15
15
  @path, @client = path, client
16
16
  resource_name = self.class.name.split('::')[-1]
@@ -46,7 +46,8 @@ module Twilio
46
46
  raise "Can't get a resource list without a REST Client" unless @client
47
47
  response = @client.get @path, params, full_path
48
48
  resources = response[@list_key]
49
- path = full_path ? @path.split('.')[0] : @path
49
+ path = @frozen_path ? @frozen_path : @path
50
+ path = full_path ? path.split('.')[0] : path
50
51
  resource_list = resources.map do |resource|
51
52
  @instance_class.new "#{path}/#{resource[@instance_id_key]}", @client,
52
53
  resource
@@ -80,7 +81,7 @@ module Twilio
80
81
  # attribute of the returned instance resource object, such as
81
82
  # its #date_created or #voice_url attributes.
82
83
  def get(sid)
83
- @instance_class.new "#{@path}/#{sid}", @client
84
+ @instance_class.new "#{@frozen_path || @path}/#{sid}", @client
84
85
  end
85
86
  alias :find :get # for the ActiveRecord lovers
86
87
 
@@ -4,11 +4,12 @@ module Twilio
4
4
  def list(params={}, full_path=false)
5
5
  raise "Can't get a resource list without a REST Client" unless @client
6
6
  response = @client.get @path, params, full_path
7
- list_key = response['meta']['key']
7
+ list_key = response['meta']['key'] if response['meta']
8
8
  raise "Couldn't find a list key in response meta" unless list_key
9
9
  resources = response[list_key]
10
+ path = @frozen_path ? @frozen_path : @path
10
11
  resource_list = resources.map do |resource|
11
- @instance_class.new "#{@path}/#{resource[@instance_id_key]}", @client,
12
+ @instance_class.new "#{path}/#{resource[@instance_id_key]}", @client,
12
13
  resource
13
14
  end
14
15
  client, list_class = @client, self.class
@@ -8,7 +8,7 @@ module Twilio
8
8
 
9
9
  API_VERSION = 'v1'
10
10
 
11
- attr_reader :voice, :phone_numbers, :messaging
11
+ attr_reader :voice, :phone_numbers
12
12
 
13
13
  host 'pricing.twilio.com'
14
14
 
@@ -89,9 +89,9 @@ module Twilio
89
89
  protected
90
90
 
91
91
  ##
92
- # Set up +trunks+ attribute.
92
+ # Set up +voice+ and +phone_numbers+ attributes.
93
93
  def set_up_subresources # :doc:
94
- @trunks = Twilio::REST::Trunking::Trunks.new "/#{API_VERSION}/Trunks", self
94
+ @voice = Twilio::REST::Trunking::Trunks.new "/#{API_VERSION}/Trunks", self
95
95
  end
96
96
 
97
97
  ##
@@ -19,6 +19,13 @@ module Twilio
19
19
 
20
20
  protected
21
21
 
22
+ # Freeze the base list path.
23
+ # Used on list resources so filters (such as /Local) do not affect the
24
+ # instance resource path.
25
+ def freeze_path
26
+ @frozen_path = @path
27
+ end
28
+
22
29
  def resource(*resources)
23
30
  custom_resource_names = { sms: 'SMS', sip: 'SIP' }
24
31
  resources.each do |r|
@@ -31,7 +38,11 @@ module Twilio
31
38
  Twilio::REST.const_get(@submodule)
32
39
  end
33
40
  resource_class = enclosing_module.const_get resource
34
- instance_variable_set("@#{r}", resource_class.new(path, @client))
41
+ resource_object = resource_class.new(path, @client)
42
+ instance_variable_set("@#{r}", resource_object)
43
+ if @frozen_path
44
+ resource_object.instance_variable_set(:@frozen_path, @frozen_path)
45
+ end
35
46
  end
36
47
  self.class.instance_eval { attr_reader *resources }
37
48
  end
@@ -1,20 +1,12 @@
1
1
  module Twilio
2
2
  module Util
3
3
  class AccessToken
4
- attr_accessor :account_sid,
5
- :signing_key_id,
6
- :secret,
7
- :ttl,
8
- :identity,
9
- :nbf
10
-
11
- def initialize(account_sid, signing_key_id, secret, ttl=3600, identity=nil, nbf=nil)
4
+ def initialize(account_sid, signing_key_id, secret, ttl=3600, identity=nil)
12
5
  @account_sid = account_sid
13
6
  @signing_key_sid = signing_key_id
14
7
  @secret = secret
15
8
  @ttl = ttl
16
9
  @identity = identity
17
- @nbf = nbf
18
10
  @grants = []
19
11
  end
20
12
 
@@ -40,11 +32,10 @@ module Twilio
40
32
  'jti' => "#{@signing_key_sid}-#{now}",
41
33
  'iss' => @signing_key_sid,
42
34
  'sub' => @account_sid,
35
+ 'nbf' => now,
43
36
  'exp' => now + @ttl,
44
37
  'grants' => grants
45
38
  }
46
- payload['nbf'] = @nbf unless @nbf.nil?
47
-
48
39
  JWT.encode payload, @secret, algorithm, headers
49
40
  end
50
41
 
@@ -1,3 +1,3 @@
1
1
  module Twilio
2
- VERSION = '4.8.0'
2
+ VERSION = '4.8.1.edge'
3
3
  end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe Twilio::REST::Conversations::Conversations do
4
+
5
+ it 'creates an in_progress property' do
6
+ client = Twilio::REST::ConversationsClient.new 'otherSid', 'otherToken'
7
+ conversations = Twilio::REST::Conversations::Conversations.new '/v1/Conversations', client
8
+ expect(conversations).to respond_to(:in_progress)
9
+ end
10
+
11
+ it 'creates a completed property' do
12
+ client = Twilio::REST::ConversationsClient.new 'otherSid', 'otherToken'
13
+ conversations = Twilio::REST::Conversations::Conversations.new '/v1/Conversations', client
14
+ expect(conversations).to respond_to(:completed)
15
+ end
16
+
17
+ end
18
+
19
+ describe Twilio::REST::Conversations::InProgress do
20
+ it 'gets constructed by conversations' do
21
+ client = Twilio::REST::ConversationsClient.new 'otherSid', 'otherToken'
22
+ conversations = Twilio::REST::Conversations::Conversations.new '/v1/Conversations', client
23
+ expect(conversations.in_progress.instance_variable_get('@path')).to eq('/v1/Conversations/InProgress')
24
+ end
25
+ it 'uses Conversation as its instance class' do
26
+ client = Twilio::REST::ConversationsClient.new 'otherSid', 'otherToken'
27
+ conversations = Twilio::REST::Conversations::Conversations.new '/v1/Conversations', client
28
+ expect(conversations.in_progress.instance_variable_get('@instance_class')).to eq(Twilio::REST::Conversations::Conversation)
29
+ end
30
+ end
31
+
32
+ describe Twilio::REST::Conversations::Completed do
33
+ it 'gets constructed by conversations' do
34
+ client = Twilio::REST::ConversationsClient.new 'otherSid', 'otherToken'
35
+ conversations = Twilio::REST::Conversations::Conversations.new '/v1/Conversations', client
36
+ expect(conversations.completed.instance_variable_get('@path')).to eq('/v1/Conversations/Completed')
37
+ end
38
+ it 'uses Conversation as its instance class' do
39
+ client = Twilio::REST::ConversationsClient.new 'otherSid', 'otherToken'
40
+ conversations = Twilio::REST::Conversations::Conversations.new '/v1/Conversations', client
41
+ expect(conversations.completed.instance_variable_get('@instance_class')).to eq(Twilio::REST::Conversations::Conversation)
42
+ end
43
+ end
44
+
45
+ describe Twilio::REST::Conversations::Conversation do
46
+ it 'has correct path when fetched from /InProgress' do
47
+ client = Twilio::REST::ConversationsClient.new 'otherSid', 'otherToken'
48
+ conversation = client.conversations.in_progress.get('CA123')
49
+ expect(conversation.instance_variable_get('@path')).to eq('/v1/Conversations/CA123')
50
+ end
51
+ it 'has correct path when fetched from /Completed' do
52
+ client = Twilio::REST::ConversationsClient.new 'otherSid', 'otherToken'
53
+ conversation = client.conversations.completed.get('CA123')
54
+ expect(conversation.instance_variable_get('@path')).to eq('/v1/Conversations/CA123')
55
+ end
56
+ it 'sets up participants subresource' do
57
+ client = Twilio::REST::ConversationsClient.new 'otherSid', 'otherToken'
58
+ conversation = Twilio::REST::Conversations::Conversation.new '/v1/Conversations/CA123', client
59
+ expect(conversation).to respond_to(:participants)
60
+ end
61
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Twilio::REST::ConversationsClient do
4
+ before do
5
+ @client = Twilio::REST::ConversationsClient.new('AC123', 'foobar')
6
+ end
7
+
8
+ it 'should set up an conversations resources object' do
9
+ expect(@client).to respond_to(:conversations)
10
+ expect(@client.conversations.instance_variable_get('@path')).to eq('/v1/Conversations')
11
+ end
12
+
13
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe Twilio::REST::IpMessaging::Channels do
4
+ it 'sets up a members resources object' do
5
+ client = Twilio::REST::IpMessagingClient.new 'otherSid', 'otherToken'
6
+ service = Twilio::REST::IpMessaging::Channel.new '/v1/Services/1/Channels/1', client
7
+ expect(service).to respond_to(:members)
8
+ expect(service.members.instance_variable_get('@path')).to eq(
9
+ '/v1/Services/1/Channels/1/Members'
10
+ )
11
+ end
12
+
13
+ it 'sets up a messages resources object' do
14
+ client = Twilio::REST::IpMessagingClient.new 'otherSid', 'otherToken'
15
+ service = Twilio::REST::IpMessaging::Channel.new '/v1/Services/1/Channels/1', client
16
+ expect(service).to respond_to(:messages)
17
+ expect(service.messages.instance_variable_get('@path')).to eq(
18
+ '/v1/Services/1/Channels/1/Messages'
19
+ )
20
+ end
21
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe Twilio::REST::IpMessaging::Services do
4
+ it 'sets up a channels resources object' do
5
+ client = Twilio::REST::IpMessagingClient.new 'otherSid', 'otherToken'
6
+ service = Twilio::REST::IpMessaging::Service.new '/v1/Services', client
7
+ expect(service).to respond_to(:channels)
8
+ expect(service.channels.instance_variable_get('@path')).to eq(
9
+ '/v1/Services/Channels'
10
+ )
11
+ end
12
+
13
+ it 'sets up a roles resources object' do
14
+ client = Twilio::REST::IpMessagingClient.new 'otherSid', 'otherToken'
15
+ service = Twilio::REST::IpMessaging::Service.new '/v1/Services', client
16
+ expect(service).to respond_to(:roles)
17
+ expect(service.roles.instance_variable_get('@path')).to eq(
18
+ '/v1/Services/Roles'
19
+ )
20
+ end
21
+
22
+ it 'sets up a users resources object' do
23
+ client = Twilio::REST::IpMessagingClient.new 'otherSid', 'otherToken'
24
+ service = Twilio::REST::IpMessaging::Service.new '/v1/Services', client
25
+ expect(service).to respond_to(:users)
26
+ expect(service.users.instance_variable_get('@path')).to eq(
27
+ '/v1/Services/Users'
28
+ )
29
+ end
30
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe Twilio::REST::IpMessagingClient do
4
+ before do
5
+ @client = Twilio::REST::IpMessagingClient.new('AC123', 'foobar')
6
+ end
7
+
8
+ it 'should set up a services resources object' do
9
+ expect(@client).to respond_to(:services)
10
+ expect(@client.services.instance_variable_get('@path')).to eq(
11
+ '/v1/Services'
12
+ )
13
+ end
14
+
15
+ it 'should set up a credentials resources object' do
16
+ expect(@client).to respond_to(:credentials)
17
+ expect(@client.credentials.instance_variable_get('@path')).to eq(
18
+ '/v1/Credentials'
19
+ )
20
+ end
21
+ end
@@ -42,19 +42,4 @@ describe Twilio::REST::PricingClient do
42
42
  '/v1/PhoneNumbers/Countries'
43
43
  )
44
44
  end
45
-
46
- it 'should set up a messaging resources object' do
47
- expect(@client).to respond_to(:messaging)
48
- expect(@client.messaging.instance_variable_get('@path')).to eq(
49
- '/v1/Messaging'
50
- )
51
- end
52
-
53
- it 'should set up the country list resource on messaging' do
54
- messaging = @client.messaging
55
- expect(messaging).to respond_to(:countries)
56
- expect(messaging.countries.instance_variable_get('@path')).to eq(
57
- '/v1/Messaging/Countries'
58
- )
59
- end
60
45
  end
@@ -8,37 +8,15 @@ describe Twilio::Util::AccessToken do
8
8
  expect(token).not_to be_nil
9
9
  payload, header = JWT.decode token, 'secret'
10
10
 
11
- expect(payload['iss']).to eq('SK123')
12
- expect(payload['sub']).to eq('AC123')
13
- expect(payload['exp']).not_to be_nil
14
- expect(payload['exp']).to be >= Time.now.to_i
15
- expect(payload['jti']).not_to be_nil
16
- expect(payload['jti']).to start_with payload['iss']
17
- expect(payload['grants']).not_to be_nil
18
- expect(payload['grants'].count).to eq(0)
19
- end
20
-
21
- it 'should generate a nbf' do
22
- now = Time.now.to_i
23
- scat = Twilio::Util::AccessToken.new 'AC123', 'SK123','secret'
24
- scat.identity = 'abc'
25
- scat.nbf = now
26
-
27
- token = scat.to_s
28
- expect(token).not_to be_nil
29
- payload, header = JWT.decode token, 'secret'
30
-
31
11
  expect(payload['iss']).to eq('SK123')
32
12
  expect(payload['sub']).to eq('AC123')
33
13
  expect(payload['nbf']).not_to be_nil
34
- expect(payload['nbf']).to eq(now)
35
14
  expect(payload['exp']).not_to be_nil
36
- expect(payload['exp']).to be >= Time.now.to_i
15
+ expect(payload['nbf'] + 3600).to eq(payload['exp'])
37
16
  expect(payload['jti']).not_to be_nil
38
- expect(payload['jti']).to start_with payload['iss']
17
+ expect("#{payload['iss']}-#{payload['nbf']}").to eq(payload['jti'])
39
18
  expect(payload['grants']).not_to be_nil
40
- expect(payload['grants'].count).to eq(1)
41
- expect(payload['grants']['identity']).to eq('abc')
19
+ expect(payload['grants'].count).to eq(0)
42
20
  end
43
21
 
44
22
  it 'should be able to add conversation grant' do
@@ -51,10 +29,11 @@ describe Twilio::Util::AccessToken do
51
29
 
52
30
  expect(payload['iss']).to eq('SK123')
53
31
  expect(payload['sub']).to eq('AC123')
32
+ expect(payload['nbf']).not_to be_nil
54
33
  expect(payload['exp']).not_to be_nil
55
- expect(payload['exp']).to be >= Time.now.to_i
34
+ expect(payload['nbf'] + 3600).to eq(payload['exp'])
56
35
  expect(payload['jti']).not_to be_nil
57
- expect(payload['jti']).to start_with payload['iss']
36
+ expect("#{payload['iss']}-#{payload['nbf']}").to eq(payload['jti'])
58
37
  expect(payload['grants']).not_to be_nil
59
38
  expect(payload['grants'].count).to eq(1)
60
39
  expect(payload['grants']['rtc']).not_to be_nil
@@ -70,10 +49,11 @@ describe Twilio::Util::AccessToken do
70
49
 
71
50
  expect(payload['iss']).to eq('SK123')
72
51
  expect(payload['sub']).to eq('AC123')
52
+ expect(payload['nbf']).not_to be_nil
73
53
  expect(payload['exp']).not_to be_nil
74
- expect(payload['exp']).to be >= Time.now.to_i
54
+ expect(payload['nbf'] + 3600).to eq(payload['exp'])
75
55
  expect(payload['jti']).not_to be_nil
76
- expect(payload['jti']).to start_with payload['iss']
56
+ expect("#{payload['iss']}-#{payload['nbf']}").to eq(payload['jti'])
77
57
  expect(payload['grants']).not_to be_nil
78
58
  expect(payload['grants'].count).to eq(1)
79
59
  expect(payload['grants']['ip_messaging']).not_to be_nil
@@ -90,10 +70,11 @@ describe Twilio::Util::AccessToken do
90
70
 
91
71
  expect(payload['iss']).to eq('SK123')
92
72
  expect(payload['sub']).to eq('AC123')
73
+ expect(payload['nbf']).not_to be_nil
93
74
  expect(payload['exp']).not_to be_nil
94
- expect(payload['exp']).to be >= Time.now.to_i
75
+ expect(payload['nbf'] + 3600).to eq(payload['exp'])
95
76
  expect(payload['jti']).not_to be_nil
96
- expect(payload['jti']).to start_with payload['iss']
77
+ expect("#{payload['iss']}-#{payload['nbf']}").to eq(payload['jti'])
97
78
  expect(payload['grants']).not_to be_nil
98
79
  expect(payload['grants'].count).to eq(2)
99
80
  expect(payload['grants']['rtc']).not_to be_nil
metadata CHANGED
@@ -1,69 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twilio-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.8.0
4
+ version: 4.8.1.edge
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Benton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-09 00:00:00.000000000 Z
11
+ date: 2015-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_json
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.3.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.3.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: builder
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: 2.1.2
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: 2.1.2
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: jwt
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
47
  version: '1.0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: '1.5'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.5'
69
69
  description: A simple library for communicating with the Twilio REST API, building
@@ -76,8 +76,8 @@ extra_rdoc_files:
76
76
  - README.md
77
77
  - LICENSE.md
78
78
  files:
79
- - ".gitignore"
80
- - ".travis.yml"
79
+ - .gitignore
80
+ - .travis.yml
81
81
  - AUTHORS.md
82
82
  - CHANGES.md
83
83
  - Gemfile
@@ -150,12 +150,25 @@ files:
150
150
  - lib/twilio-ruby/rest/conferences.rb
151
151
  - lib/twilio-ruby/rest/conferences/participants.rb
152
152
  - lib/twilio-ruby/rest/connect_apps.rb
153
+ - lib/twilio-ruby/rest/conversations/completed.rb
154
+ - lib/twilio-ruby/rest/conversations/conversations.rb
155
+ - lib/twilio-ruby/rest/conversations/in_progress.rb
156
+ - lib/twilio-ruby/rest/conversations/participants.rb
157
+ - lib/twilio-ruby/rest/conversations_client.rb
153
158
  - lib/twilio-ruby/rest/errors.rb
154
159
  - lib/twilio-ruby/rest/incoming_phone_numbers.rb
155
160
  - lib/twilio-ruby/rest/incoming_phone_numbers/local.rb
156
161
  - lib/twilio-ruby/rest/incoming_phone_numbers/mobile.rb
157
162
  - lib/twilio-ruby/rest/incoming_phone_numbers/toll_free.rb
158
163
  - lib/twilio-ruby/rest/instance_resource.rb
164
+ - lib/twilio-ruby/rest/ip-messaging/channels.rb
165
+ - lib/twilio-ruby/rest/ip-messaging/credentials.rb
166
+ - lib/twilio-ruby/rest/ip-messaging/members.rb
167
+ - lib/twilio-ruby/rest/ip-messaging/messages.rb
168
+ - lib/twilio-ruby/rest/ip-messaging/roles.rb
169
+ - lib/twilio-ruby/rest/ip-messaging/services.rb
170
+ - lib/twilio-ruby/rest/ip-messaging/users.rb
171
+ - lib/twilio-ruby/rest/ip_messaging_client.rb
159
172
  - lib/twilio-ruby/rest/keys.rb
160
173
  - lib/twilio-ruby/rest/list_resource.rb
161
174
  - lib/twilio-ruby/rest/lookups/phone_numbers.rb
@@ -227,6 +240,7 @@ files:
227
240
  - lib/twilio-ruby/util/configuration.rb
228
241
  - lib/twilio-ruby/util/request_validator.rb
229
242
  - lib/twilio-ruby/version.rb
243
+ - spec/conversations/conversations_spec.rb
230
244
  - spec/rack/twilio_webhook_authentication_spec.rb
231
245
  - spec/rest/account_spec.rb
232
246
  - spec/rest/address_spec.rb
@@ -235,7 +249,11 @@ files:
235
249
  - spec/rest/call_spec.rb
236
250
  - spec/rest/client_spec.rb
237
251
  - spec/rest/conference_spec.rb
252
+ - spec/rest/conversations_client_spec.rb
238
253
  - spec/rest/instance_resource_spec.rb
254
+ - spec/rest/ip-messaging/channel_spec.rb
255
+ - spec/rest/ip-messaging/service_spec.rb
256
+ - spec/rest/ip_messaging_client_spec.rb
239
257
  - spec/rest/key_spec.rb
240
258
  - spec/rest/lookups/phone_number_spec.rb
241
259
  - spec/rest/message_spec.rb
@@ -273,32 +291,33 @@ licenses:
273
291
  metadata: {}
274
292
  post_install_message:
275
293
  rdoc_options:
276
- - "--line-numbers"
277
- - "--inline-source"
278
- - "--title"
294
+ - --line-numbers
295
+ - --inline-source
296
+ - --title
279
297
  - twilio-ruby
280
- - "--main"
298
+ - --main
281
299
  - README.md
282
300
  require_paths:
283
301
  - lib
284
302
  required_ruby_version: !ruby/object:Gem::Requirement
285
303
  requirements:
286
- - - ">="
304
+ - - '>='
287
305
  - !ruby/object:Gem::Version
288
306
  version: 1.9.3
289
307
  required_rubygems_version: !ruby/object:Gem::Requirement
290
308
  requirements:
291
- - - ">="
309
+ - - '>'
292
310
  - !ruby/object:Gem::Version
293
- version: '0'
311
+ version: 1.3.1
294
312
  requirements: []
295
313
  rubyforge_project:
296
- rubygems_version: 2.4.8
314
+ rubygems_version: 2.0.14
297
315
  signing_key:
298
316
  specification_version: 4
299
317
  summary: A simple library for communicating with the Twilio REST API, building TwiML,
300
318
  and generating Twilio Client Capability Tokens
301
319
  test_files:
320
+ - spec/conversations/conversations_spec.rb
302
321
  - spec/rack/twilio_webhook_authentication_spec.rb
303
322
  - spec/rest/account_spec.rb
304
323
  - spec/rest/address_spec.rb
@@ -307,7 +326,11 @@ test_files:
307
326
  - spec/rest/call_spec.rb
308
327
  - spec/rest/client_spec.rb
309
328
  - spec/rest/conference_spec.rb
329
+ - spec/rest/conversations_client_spec.rb
310
330
  - spec/rest/instance_resource_spec.rb
331
+ - spec/rest/ip-messaging/channel_spec.rb
332
+ - spec/rest/ip-messaging/service_spec.rb
333
+ - spec/rest/ip_messaging_client_spec.rb
311
334
  - spec/rest/key_spec.rb
312
335
  - spec/rest/lookups/phone_number_spec.rb
313
336
  - spec/rest/message_spec.rb