messagebird-rest 1.3.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 (44) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +67 -17
  3. data/lib/messagebird.rb +16 -7
  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 +420 -73
  10. data/lib/messagebird/contact.rb +33 -0
  11. data/lib/messagebird/contact_reference.rb +9 -0
  12. data/lib/messagebird/conversation.rb +44 -0
  13. data/lib/messagebird/conversation_channel.rb +18 -0
  14. data/lib/messagebird/conversation_client.rb +22 -0
  15. data/lib/messagebird/conversation_message.rb +10 -0
  16. data/lib/messagebird/conversation_webhook.rb +9 -0
  17. data/lib/messagebird/custom_details.rb +10 -0
  18. data/lib/messagebird/error.rb +2 -0
  19. data/lib/messagebird/group.rb +23 -0
  20. data/lib/messagebird/group_reference.rb +9 -0
  21. data/lib/messagebird/hlr.rb +8 -6
  22. data/lib/messagebird/http_client.rb +95 -0
  23. data/lib/messagebird/list.rb +24 -0
  24. data/lib/messagebird/lookup.rb +7 -5
  25. data/lib/messagebird/message.rb +9 -7
  26. data/lib/messagebird/message_reference.rb +9 -0
  27. data/lib/messagebird/number.rb +18 -0
  28. data/lib/messagebird/number_client.rb +22 -0
  29. data/lib/messagebird/recipient.rb +6 -3
  30. data/lib/messagebird/signed_request.rb +50 -0
  31. data/lib/messagebird/verify.rb +20 -0
  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 -7
  43. metadata +85 -15
  44. data/lib/messagebird/otp.rb +0 -18
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'net/https'
4
+ require 'uri'
5
+ require 'pp'
6
+ require 'json'
7
+ require 'messagebird/http_client'
8
+
9
+ module MessageBird
10
+ class NumberClient < HttpClient
11
+ ENDPOINT = 'https://numbers.messagebird.com/v1/'
12
+
13
+ def endpoint
14
+ ENDPOINT
15
+ end
16
+
17
+ def prepare_request(request, params = {})
18
+ request.body = params.to_json
19
+ request
20
+ end
21
+ end
22
+ end
@@ -1,11 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'messagebird/base'
2
4
 
3
5
  module MessageBird
4
6
  class Recipient < MessageBird::Base
5
- attr_accessor :recipient, :status, :statusDatetime
7
+ attr_accessor :recipient, :status
8
+ attr_reader :status_date_time
6
9
 
7
- def statusDatetime=(value)
8
- @statusDatetime = value_to_time(value)
10
+ def status_date_time=(value)
11
+ @status_date_time = value_to_time(value)
9
12
  end
10
13
  end
11
14
  end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'base64'
4
+ require 'digest'
5
+ require 'time'
6
+
7
+ module MessageBird
8
+ class ValidationException < TypeError
9
+ end
10
+
11
+ class SignedRequest
12
+ def initialize(query_parameters, signature, request_timestamp, body)
13
+ unless query_parameters.is_a? Hash
14
+ raise ValidationException, 'The "query_parameters" value is invalid.'
15
+ end
16
+ unless signature.is_a? String
17
+ raise ValidationException, 'The "signature" value is invalid.'
18
+ end
19
+ unless request_timestamp.is_a? Integer
20
+ raise ValidationException, 'The "request_timestamp" value is invalid.'
21
+ end
22
+ unless body.is_a? String
23
+ raise ValidationException, 'The "body" value is invalid.'
24
+ end
25
+
26
+ @query_parameters = query_parameters
27
+ @signature = signature
28
+ @request_timestamp = request_timestamp
29
+ @body = body
30
+ end
31
+
32
+ def verify(signing_key)
33
+ calculated_signature = OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), signing_key, build_payload)
34
+ expected_signature = Base64.decode64(@signature)
35
+ calculated_signature.bytes == expected_signature.bytes
36
+ end
37
+
38
+ def build_payload
39
+ parts = []
40
+ parts.push(@request_timestamp)
41
+ parts.push(URI.encode_www_form(@query_parameters.sort))
42
+ parts.push(Digest::SHA256.new.digest(@body))
43
+ parts.join("\n")
44
+ end
45
+
46
+ def recent?(offset = 10)
47
+ (Time.now.getutc.to_i - @request_timestamp) < offset
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'time'
4
+
5
+ require 'messagebird/base'
6
+
7
+ module MessageBird
8
+ class Verify < MessageBird::Base
9
+ attr_accessor :id, :recipient, :reference, :status, :href
10
+ attr_reader :created_datetime, :valid_until_date_time
11
+
12
+ def created_datetime=(value)
13
+ @created_datetime = value_to_time(value)
14
+ end
15
+
16
+ def valid_until_date_time=(value)
17
+ @valid_until_date_time = value_to_time(value)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MessageBird
4
+ module Version
5
+ STRING = '2.0.0'
6
+ end
7
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MessageBird
4
+ module Voice
5
+ class Base < MessageBird::Base
6
+ def initialize(json)
7
+ params = json.include?('data') ? json['data'].first : json
8
+ super(params)
9
+ handle_links(json['_links'])
10
+ end
11
+
12
+ # intentional empty method, objects may not want to deal with _links
13
+ def handle_links(json) end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'messagebird/voice/base'
4
+ require 'messagebird/voice/webhook'
5
+
6
+ module MessageBird
7
+ module Voice
8
+ class Call < MessageBird::Base
9
+ attr_accessor :id, :status, :source, :destination, :created_at, :updated_at, :ended_at, :call_flow
10
+ attr_reader :webhook
11
+
12
+ def initialize(json)
13
+ params = json.include?('data') ? json['data'].first : json
14
+ super(params)
15
+ end
16
+
17
+ def webhook=(webhook)
18
+ @webhook = Voice::Webhook.new(webhook)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'messagebird/voice/base'
4
+
5
+ module MessageBird
6
+ module Voice
7
+ class CallLeg < MessageBird::Voice::Base
8
+ attr_accessor :id, :call_id, :source, :destination, :status, :direction, :cost, :currency, :duration, :created_at, :updated_at, :answered_at, :ended_at
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'messagebird/voice/base'
4
+
5
+ module MessageBird
6
+ module Voice
7
+ class CallLegRecording < MessageBird::Voice::Base
8
+ # default attributes from the API
9
+ attr_accessor :id, :format, :type, :leg_id, :status, :duration
10
+ attr_accessor :created_at, :updated_at
11
+
12
+ # further processed attributes for convenience
13
+ attr_accessor :_links, :uri
14
+ # Grab the URI to the downloadable file and provide it as a direct attribute
15
+ def handle_links(links_object)
16
+ @uri = links_object['file']
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'net/https'
4
+ require 'uri'
5
+ require 'json'
6
+ require 'messagebird/http_client'
7
+
8
+ module MessageBird
9
+ class VoiceClient < HttpClient
10
+ ENDPOINT = 'https://voice.messagebird.com/'
11
+
12
+ def endpoint
13
+ ENDPOINT
14
+ end
15
+
16
+ def prepare_request(request, params = {})
17
+ request['Content-Type'] = 'application/json'
18
+ request.body = params.to_json
19
+ request
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'messagebird/list'
4
+
5
+ module MessageBird
6
+ module Voice
7
+ class List < List
8
+ attr_accessor :per_page, :current_page, :page_count, :total_count
9
+ PER_PAGE = 20
10
+ CURRENT_PAGE = 1
11
+ def data=(value)
12
+ # Call List API retruns data object instead of items
13
+ # to make it consistence with the rest of the SDK we shall
14
+ # propagate it to items= method
15
+ self.items = value.nil? ? [] : value
16
+ end
17
+
18
+ # map the pagination data to root level properties
19
+ def pagination=(value)
20
+ map_hash_elements_to_self(value)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'messagebird/base'
4
+
5
+ module MessageBird
6
+ module Voice
7
+ class Transcription < MessageBird::Voice::Base
8
+ attr_accessor :id, :recording_id, :error, :created_at, :updated_at, :_links, :uri
9
+
10
+ def handle_links(links_object)
11
+ @uri = links_object['file']
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'messagebird/voice/base'
4
+
5
+ module MessageBird
6
+ module Voice
7
+ class Webhook < MessageBird::Voice::Base
8
+ attr_accessor :id, :url, :token, :created_at, :updated_at
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'net/https'
4
+ require 'uri'
5
+ require 'json'
6
+ require 'messagebird/http_client'
7
+
8
+ module MessageBird
9
+ class VoiceClient < HttpClient
10
+ attr_reader :endpoint
11
+
12
+ BASE_ENDPOINT = 'https://voice.messagebird.com/'
13
+
14
+ def initialize(access_key)
15
+ super(access_key)
16
+ @endpoint = BASE_ENDPOINT
17
+ end
18
+
19
+ def prepare_request(request, params = {})
20
+ request['Content-Type'] = 'application/json'
21
+ request.body = params.to_json
22
+ request
23
+ end
24
+ end
25
+ end
@@ -1,18 +1,19 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'messagebird/base'
2
4
  require 'messagebird/recipient'
3
5
 
4
6
  module MessageBird
5
7
  class VoiceMessage < MessageBird::Base
6
- attr_accessor :id, :href, :originator, :body, :reference, :language, :voice, :repeat,
7
- :ifMachine, :scheduledDatetime, :createdDatetime, :recipients
8
-
8
+ attr_accessor :id, :href, :originator, :body, :reference, :language, :voice, :repeat, :if_machine
9
+ attr_reader :scheduled_date_time, :created_datetime, :recipients
9
10
 
10
- def scheduledDatetime=(value)
11
- @scheduledDatetime = value_to_time(value)
11
+ def scheduled_date_time=(value)
12
+ @scheduled_date_time = value_to_time(value)
12
13
  end
13
14
 
14
- def createdDatetime=(value)
15
- @createdDatetime = value_to_time(value)
15
+ def created_datetime=(value)
16
+ @created_datetime = value_to_time(value)
16
17
  end
17
18
 
18
19
  def recipients=(json)
metadata CHANGED
@@ -1,56 +1,126 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: messagebird-rest
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maurice Nonnekes
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-24 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2021-05-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 3.10.0
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 3.10.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubocop
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.77.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.77.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: webmock
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 3.7.5
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 3.7.5
13
55
  description: A simple REST API for MessageBird in Ruby
14
56
  email: maurice@messagebird.com
15
57
  executables: []
16
58
  extensions: []
17
59
  extra_rdoc_files: []
18
60
  files:
61
+ - LICENSE
62
+ - README.md
63
+ - lib/messagebird.rb
19
64
  - lib/messagebird/balance.rb
20
65
  - lib/messagebird/base.rb
66
+ - lib/messagebird/call_flow.rb
67
+ - lib/messagebird/call_flow/step.rb
68
+ - lib/messagebird/callflow.rb
21
69
  - lib/messagebird/client.rb
70
+ - lib/messagebird/contact.rb
71
+ - lib/messagebird/contact_reference.rb
72
+ - lib/messagebird/conversation.rb
73
+ - lib/messagebird/conversation_channel.rb
74
+ - lib/messagebird/conversation_client.rb
75
+ - lib/messagebird/conversation_message.rb
76
+ - lib/messagebird/conversation_webhook.rb
77
+ - lib/messagebird/custom_details.rb
22
78
  - lib/messagebird/error.rb
79
+ - lib/messagebird/group.rb
80
+ - lib/messagebird/group_reference.rb
23
81
  - lib/messagebird/hlr.rb
82
+ - lib/messagebird/http_client.rb
83
+ - lib/messagebird/list.rb
24
84
  - lib/messagebird/lookup.rb
25
85
  - lib/messagebird/message.rb
26
- - lib/messagebird/otp.rb
86
+ - lib/messagebird/message_reference.rb
87
+ - lib/messagebird/number.rb
88
+ - lib/messagebird/number_client.rb
27
89
  - lib/messagebird/recipient.rb
90
+ - lib/messagebird/signed_request.rb
91
+ - lib/messagebird/verify.rb
92
+ - lib/messagebird/version.rb
93
+ - lib/messagebird/voice/base.rb
94
+ - lib/messagebird/voice/call.rb
95
+ - lib/messagebird/voice/call_leg.rb
96
+ - lib/messagebird/voice/call_leg_recording.rb
97
+ - lib/messagebird/voice/client.rb
98
+ - lib/messagebird/voice/list.rb
99
+ - lib/messagebird/voice/transcription.rb
100
+ - lib/messagebird/voice/webhook.rb
101
+ - lib/messagebird/voice_client.rb
28
102
  - lib/messagebird/voicemessage.rb
29
- - lib/messagebird.rb
30
- - LICENSE
31
- - README.md
32
103
  homepage: https://github.com/messagebird/ruby-rest-api
33
104
  licenses:
34
105
  - BSD-2-Clause
35
106
  metadata: {}
36
- post_install_message:
107
+ post_install_message:
37
108
  rdoc_options: []
38
109
  require_paths:
39
110
  - lib
40
111
  required_ruby_version: !ruby/object:Gem::Requirement
41
112
  requirements:
42
- - - '>='
113
+ - - ">="
43
114
  - !ruby/object:Gem::Version
44
- version: '0'
115
+ version: 1.9.3
45
116
  required_rubygems_version: !ruby/object:Gem::Requirement
46
117
  requirements:
47
- - - '>='
118
+ - - ">="
48
119
  - !ruby/object:Gem::Version
49
120
  version: '0'
50
121
  requirements: []
51
- rubyforge_project:
52
- rubygems_version: 2.0.14.1
53
- signing_key:
122
+ rubygems_version: 3.2.15
123
+ signing_key:
54
124
  specification_version: 4
55
125
  summary: MessageBird's REST API
56
126
  test_files: []