messagebird-rest 1.4.2 → 2.0.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.
Files changed (43) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +56 -8
  3. data/lib/messagebird.rb +10 -5
  4. data/lib/messagebird/balance.rb +2 -0
  5. data/lib/messagebird/base.rb +12 -7
  6. data/lib/messagebird/call_flow.rb +22 -0
  7. data/lib/messagebird/call_flow/step.rb +9 -0
  8. data/lib/messagebird/callflow.rb +60 -0
  9. data/lib/messagebird/client.rb +290 -85
  10. data/lib/messagebird/contact.rb +10 -8
  11. data/lib/messagebird/contact_reference.rb +3 -1
  12. data/lib/messagebird/conversation.rb +16 -14
  13. data/lib/messagebird/conversation_channel.rb +8 -7
  14. data/lib/messagebird/conversation_client.rb +9 -6
  15. data/lib/messagebird/conversation_message.rb +6 -5
  16. data/lib/messagebird/conversation_webhook.rb +4 -2
  17. data/lib/messagebird/custom_details.rb +2 -0
  18. data/lib/messagebird/error.rb +2 -0
  19. data/lib/messagebird/group.rb +7 -5
  20. data/lib/messagebird/group_reference.rb +3 -1
  21. data/lib/messagebird/hlr.rb +7 -5
  22. data/lib/messagebird/http_client.rb +34 -34
  23. data/lib/messagebird/list.rb +4 -2
  24. data/lib/messagebird/lookup.rb +7 -5
  25. data/lib/messagebird/message.rb +7 -5
  26. data/lib/messagebird/message_reference.rb +3 -1
  27. data/lib/messagebird/number.rb +18 -0
  28. data/lib/messagebird/number_client.rb +22 -0
  29. data/lib/messagebird/recipient.rb +5 -3
  30. data/lib/messagebird/signed_request.rb +24 -21
  31. data/lib/messagebird/verify.rb +7 -5
  32. data/lib/messagebird/version.rb +7 -0
  33. data/lib/messagebird/voice/base.rb +16 -0
  34. data/lib/messagebird/voice/call.rb +22 -0
  35. data/lib/messagebird/voice/call_leg.rb +11 -0
  36. data/lib/messagebird/voice/call_leg_recording.rb +20 -0
  37. data/lib/messagebird/voice/client.rb +22 -0
  38. data/lib/messagebird/voice/list.rb +24 -0
  39. data/lib/messagebird/voice/transcription.rb +15 -0
  40. data/lib/messagebird/voice/webhook.rb +11 -0
  41. data/lib/messagebird/voice_client.rb +25 -0
  42. data/lib/messagebird/voicemessage.rb +8 -6
  43. metadata +52 -10
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'messagebird/base'
2
4
  require 'messagebird/custom_details'
3
5
  require 'messagebird/group_reference'
@@ -5,11 +7,11 @@ require 'messagebird/message_reference'
5
7
 
6
8
  module MessageBird
7
9
  class Contact < MessageBird::Base
8
- attr_accessor :id, :href, :msisdn, :firstName, :lastName
9
- attr_reader :customDetails, :groups, :messages, :createdDatetime, :updatedDatetime
10
+ attr_accessor :id, :href, :msisdn, :first_name, :last_name
11
+ attr_reader :custom_details, :groups, :messages, :created_datetime, :updated_datetime
10
12
 
11
- def customDetails=(value)
12
- @customDetails = MessageBird::CustomDetails.new(value)
13
+ def custom_details=(value)
14
+ @custom_details = MessageBird::CustomDetails.new(value)
13
15
  end
14
16
 
15
17
  def groups=(value)
@@ -20,12 +22,12 @@ module MessageBird
20
22
  @messages = MessageBird::MessageReference.new(value)
21
23
  end
22
24
 
23
- def createdDatetime=(value)
24
- @createdDatetime = value_to_time(value)
25
+ def created_datetime=(value)
26
+ @created_datetime = value_to_time(value)
25
27
  end
26
28
 
27
- def updatedDatetime=(value)
28
- @updatedDatetime = value_to_time(value)
29
+ def updated_datetime=(value)
30
+ @updated_datetime = value_to_time(value)
29
31
  end
30
32
  end
31
33
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'messagebird/base'
2
4
 
3
5
  module MessageBird
4
6
  class ContactReference < MessageBird::Base
5
- attr_accessor :href, :totalCount
7
+ attr_accessor :href, :total_count
6
8
  end
7
9
  end
@@ -1,12 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'messagebird/base'
2
4
  require 'messagebird/contact'
3
5
  require 'messagebird/conversation_channel'
4
6
 
5
- module MessageBird
7
+ module MessageBird
6
8
  class Conversation < MessageBird::Base
7
- attr_accessor :id, :status, :lastUsedChannelId, :contactId
8
- attr_reader :contact, :channels, :messages, :createdDatetime,
9
- :updatedDatetime, :lastReceivedDatetime
9
+ attr_accessor :id, :status, :last_used_channel_id, :contact_id
10
+ attr_reader :contact, :channels, :messages, :created_datetime,
11
+ :updated_datetime, :last_received_datetime
10
12
 
11
13
  CONVERSATION_STATUS_ACTIVE = 'active'
12
14
  CONVERSATION_STATUS_ARCHIVED = 'archived'
@@ -24,19 +26,19 @@ module MessageBird
24
26
  end
25
27
 
26
28
  def messages=(value)
27
- @messages = MessageBird::MessageReference.new(value)
29
+ @messages = MessageBird::MessageReference.new(value)
28
30
  end
29
-
30
- def createdDatetime=(value)
31
- @createdDatetime = value_to_time(value)
31
+
32
+ def created_datetime=(value)
33
+ @created_datetime = value_to_time(value)
32
34
  end
33
35
 
34
- def updatedDatetime=(value)
35
- @updatedDatetime = value_to_time(value)
36
+ def updated_datetime=(value)
37
+ @updated_datetime = value_to_time(value)
36
38
  end
37
39
 
38
- def lastReceivedDatetime=(value)
39
- @lastReceivedDatetime = value_to_time(value)
40
+ def last_received_datetime=(value)
41
+ @last_received_datetime = value_to_time(value)
40
42
  end
41
- end
42
- end
43
+ end
44
+ end
@@ -1,17 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'messagebird/base'
2
4
 
3
5
  module MessageBird
4
6
  class ConversationChannel < MessageBird::Base
5
- attr_accessor :id, :name, :platformId, :status
6
- attr_reader :createdDatetime, :updatedDatetime
7
+ attr_accessor :id, :name, :platform_id, :status
8
+ attr_reader :created_datetime, :updated_datetime
7
9
 
8
- def createdDatetime=(value)
9
- @createdDatetime = value_to_time(value)
10
+ def created_datetime=(value)
11
+ @created_datetime = value_to_time(value)
10
12
  end
11
13
 
12
- def updatedDatetime=(value)
13
- @updatedDatetime = value_to_time(value)
14
+ def updated_datetime=(value)
15
+ @updated_datetime = value_to_time(value)
14
16
  end
15
-
16
17
  end
17
18
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'net/https'
2
4
  require 'uri'
3
5
  require 'json'
@@ -5,15 +7,16 @@ require 'messagebird/http_client'
5
7
 
6
8
  module MessageBird
7
9
  class ConversationClient < HttpClient
8
- ENDPOINT = 'https://conversations.messagebird.com/v1/'
9
-
10
- def endpoint()
11
- ENDPOINT
12
- end
10
+ ENDPOINT = 'https://conversations.messagebird.com/v1/'
13
11
 
14
- def prepare_request(request, params={})
12
+ def prepare_request(request, params = {})
13
+ request['Content-Type'] = 'application/json'
15
14
  request.body = params.to_json
16
15
  request
17
16
  end
18
17
  end
18
+
19
+ def endpoint
20
+ ENDPOINT
21
+ end
19
22
  end
@@ -1,9 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'messagebird/base'
2
4
 
3
- module MessageBird
5
+ module MessageBird
4
6
  class ConversationMessage < MessageBird::Base
5
- attr_accessor :id, :conversationId, :channelId, :direction, :status,
6
- :type, :content, :createdDatetime, :updatedDatetime, :fallback
7
-
7
+ attr_accessor :id, :conversation_id, :channel_id, :direction, :status,
8
+ :type, :content, :created_datetime, :updated_datetime, :fallback
8
9
  end
9
- end
10
+ end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'messagebird/base'
2
4
 
3
- module MessageBird
5
+ module MessageBird
4
6
  class ConversationWebhook < MessageBird::Base
5
- attr_accessor :id, :events, :channelId, :url, :status, :createdDatetime, :updatedDatetime
7
+ attr_accessor :id, :events, :channel_id, :url, :status, :created_datetime, :updated_datetime
6
8
  end
7
9
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'messagebird/base'
2
4
 
3
5
  module MessageBird
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'messagebird/base'
2
4
 
3
5
  module MessageBird
@@ -1,21 +1,23 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'messagebird/base'
2
4
  require 'messagebird/contact_reference'
3
5
 
4
6
  module MessageBird
5
7
  class Group < MessageBird::Base
6
8
  attr_accessor :id, :href, :name
7
- attr_reader :contacts, :createdDatetime, :updatedDatetime
9
+ attr_reader :contacts, :created_datetime, :updated_datetime
8
10
 
9
11
  def contacts=(value)
10
12
  @contacts = MessageBird::ContactReference.new(value)
11
13
  end
12
14
 
13
- def createdDatetime=(value)
14
- @createdDatetime = value_to_time(value)
15
+ def created_datetime=(value)
16
+ @created_datetime = value_to_time(value)
15
17
  end
16
18
 
17
- def updatedDatetime=(value)
18
- @updatedDatetime = value_to_time(value)
19
+ def updated_datetime=(value)
20
+ @updated_datetime = value_to_time(value)
19
21
  end
20
22
  end
21
23
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'messagebird/base'
2
4
 
3
5
  module MessageBird
4
6
  class GroupReference < MessageBird::Base
5
- attr_accessor :href, :totalCount
7
+ attr_accessor :href, :total_count
6
8
  end
7
9
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'time'
2
4
 
3
5
  require 'messagebird/base'
@@ -5,14 +7,14 @@ require 'messagebird/base'
5
7
  module MessageBird
6
8
  class HLR < MessageBird::Base
7
9
  attr_accessor :id, :href, :msisdn, :network, :reference, :status, :details
8
- attr_reader :createdDatetime, :statusDatetime
10
+ attr_reader :created_datetime, :status_datetime
9
11
 
10
- def createdDatetime=(value)
11
- @createdDatetime = value_to_time(value)
12
+ def created_datetime=(value)
13
+ @created_datetime = value_to_time(value)
12
14
  end
13
15
 
14
- def statusDatetime=(value)
15
- @statusDatetime = value_to_time(value)
16
+ def status_datetime=(value)
17
+ @status_datetime = value_to_time(value)
16
18
  end
17
19
  end
18
20
  end
@@ -1,36 +1,41 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'net/https'
2
4
  require 'uri'
3
5
 
4
6
  module MessageBird
5
-
6
- class InvalidPhoneNumberException < TypeError; end
7
+ class ServerException < StandardError; end
7
8
  class InvalidResponseException < StandardError; end
8
9
  class MethodNotAllowedException < ArgumentError; end
9
10
 
10
11
  class HttpClient
11
12
  attr_reader :access_key
12
13
 
14
+ VALID_RESPONSE_CODES = [200, 201, 202, 204, 401, 404, 405, 422].freeze
13
15
  ENDPOINT = 'https://rest.messagebird.com/'
16
+ SUBMIT_METHODS = [:patch, :post, :put].freeze
17
+ ALLOWED_METHODS = SUBMIT_METHODS.dup + [:get, :delete].freeze
14
18
 
15
19
  def initialize(access_key)
16
20
  @access_key = access_key
17
21
  end
18
22
 
19
- def endpoint()
23
+ def endpoint
20
24
  ENDPOINT
21
25
  end
22
26
 
23
- def request(method, path, params={}, check_json=true)
24
- uri = URI.join(endpoint, path)
25
-
26
- # Set up the HTTP object.
27
+ def build_http_client(uri)
27
28
  http = Net::HTTP.new(uri.host, uri.port)
28
29
  http.use_ssl = true
29
30
 
30
- unless ENV['DEBUG_MB_HTTP_CLIENT'].nil?
31
- http.set_debug_output($stdout)
32
- end
31
+ http.set_debug_output($stdout) unless ENV['DEBUG_MB_HTTP_CLIENT'].nil?
32
+
33
+ http
34
+ end
33
35
 
36
+ def request(method, path, params = {}, check_json = true)
37
+ uri = URI.join(endpoint, path)
38
+ http = build_http_client(uri)
34
39
  request = build_request(method, uri, params)
35
40
 
36
41
  # Execute the request and fetch the response.
@@ -42,44 +47,41 @@ module MessageBird
42
47
  response.body
43
48
  end
44
49
 
45
- def prepare_request(request, params={})
46
- request.set_form_data(params)
50
+ def request_block(method, path, params = {}, &block)
51
+ uri = URI.join(endpoint, path)
52
+ http = build_http_client(uri)
53
+ request = build_request(method, uri, params)
54
+
55
+ http.request(request, block)
56
+ end
57
+
58
+ def prepare_request(request, params = {})
59
+ request.set_form_data(params)
60
+
47
61
  request
48
62
  end
49
63
 
50
- def build_request(method, uri, params={})
64
+ def build_request(method, uri, params = {})
51
65
  # Construct the HTTP request.
52
- case method
53
- when :delete
54
- request = Net::HTTP::Delete.new(uri.request_uri)
55
- when :get
56
- request = Net::HTTP::Get.new(uri.request_uri)
57
- when :patch
58
- request = Net::HTTP::Patch.new(uri.request_uri)
59
- when :post
60
- request = Net::HTTP::Post.new(uri.request_uri)
61
- else
62
- raise MethodNotAllowedException
63
- end
66
+ raise MethodNotAllowedException unless ALLOWED_METHODS.include?(method)
67
+
68
+ request = Class.const_get("Net::HTTP::#{method.to_s.capitalize}").new(uri.request_uri)
64
69
 
65
70
  request['Accept'] = 'application/json'
66
71
  request['Authorization'] = "AccessKey #{@access_key}"
67
- request['User-Agent'] = "MessageBird/ApiClient/#{CLIENT_VERSION} Ruby/#{RUBY_VERSION}"
72
+ request['User-Agent'] = "MessageBird/ApiClient/#{Version::STRING} Ruby/#{RUBY_VERSION}"
68
73
 
69
- if [:patch, :post].include?(method) && !params.empty?
74
+ if SUBMIT_METHODS.include?(method) && !params.empty?
70
75
  prepare_request(request, params)
71
76
  end
77
+
72
78
  request
73
79
  end
74
80
 
75
81
  # Throw an exception if the response code is not one we expect from the
76
82
  # MessageBird API.
77
83
  def assert_valid_response_code(code)
78
- # InvalidPhoneNumberException does not make a lot of sense here, but it's
79
- # needed to maintain backwards compatibility. See issue:
80
- # https://github.com/messagebird/ruby-rest-api/issues/17
81
- expected_codes = [200, 201, 202, 204, 401, 404, 405, 422]
82
- raise InvalidPhoneNumberException, 'Unknown response from server' unless expected_codes.include? code
84
+ raise ServerException, 'Unknown response from server' unless VALID_RESPONSE_CODES.include? code
83
85
  end
84
86
 
85
87
  # Throw an exception if the response's content type is not JSON. This only
@@ -89,7 +91,5 @@ module MessageBird
89
91
  # for equality: some API's may append the charset to this header.
90
92
  raise InvalidResponseException, 'Response is not JSON' unless content_type.start_with? 'application/json'
91
93
  end
92
-
93
94
  end
94
-
95
95
  end
@@ -1,7 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'messagebird/base'
2
4
 
3
5
  class List < MessageBird::Base
4
- attr_accessor :offset, :limit, :count, :totalCount, :links, :items
6
+ attr_accessor :offset, :limit, :count, :total_count, :links
7
+ attr_reader :items
5
8
 
6
9
  # type will be used to create objects for the items, e.g.
7
10
  # List.new(Contact, {}).
@@ -18,5 +21,4 @@ class List < MessageBird::Base
18
21
  def [](index)
19
22
  @items[index]
20
23
  end
21
-
22
24
  end
@@ -1,18 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'time'
2
4
 
3
5
  require 'messagebird/base'
4
6
 
5
7
  module MessageBird
6
8
  class Lookup < MessageBird::Base
7
- attr_accessor :href, :countryCode, :countryPrefix, :phoneNumber, :type
9
+ attr_accessor :href, :country_code, :country_prefix, :phone_number, :type
8
10
  attr_reader :formats, :hlr
9
11
 
10
- def formats=(newFormats)
11
- @formats = Formats.new(newFormats)
12
+ def formats=(new_formats)
13
+ @formats = Formats.new(new_formats)
12
14
  end
13
15
 
14
- def hlr=(newHLR)
15
- @hlr = HLR.new(newHLR)
16
+ def hlr=(new_hlr)
17
+ @hlr = HLR.new(new_hlr)
16
18
  end
17
19
  end
18
20
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'messagebird/base'
2
4
  require 'messagebird/recipient'
3
5
 
@@ -5,14 +7,14 @@ module MessageBird
5
7
  class Message < MessageBird::Base
6
8
  attr_accessor :id, :href, :direction, :type, :originator, :body, :reference,
7
9
  :validity, :gateway, :typeDetails, :datacoding, :mclass
8
- attr_reader :scheduledDatetime, :createdDatetime, :recipients
10
+ attr_reader :scheduled_date_time, :created_datetime, :recipients
9
11
 
10
- def scheduledDatetime=(value)
11
- @scheduledDatetime = value_to_time(value)
12
+ def scheduled_date_time=(value)
13
+ @scheduled_date_time = value_to_time(value)
12
14
  end
13
15
 
14
- def createdDatetime=(value)
15
- @createdDatetime = value_to_time(value)
16
+ def created_datetime=(value)
17
+ @created_datetime = value_to_time(value)
16
18
  end
17
19
 
18
20
  def recipients=(json)