messagemedia_webhooks_sdk 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +28 -0
  3. data/README.md +132 -0
  4. data/lib/message_media_webhooks.rb +39 -0
  5. data/lib/message_media_webhooks/api_helper.rb +272 -0
  6. data/lib/message_media_webhooks/configuration.rb +28 -0
  7. data/lib/message_media_webhooks/controllers/base_controller.rb +55 -0
  8. data/lib/message_media_webhooks/controllers/webhooks_controller.rb +369 -0
  9. data/lib/message_media_webhooks/exceptions/api_exception.rb +16 -0
  10. data/lib/message_media_webhooks/exceptions/create_webhook_400_response_exception.rb +25 -0
  11. data/lib/message_media_webhooks/exceptions/retrieve_webhook_400_response_exception.rb +26 -0
  12. data/lib/message_media_webhooks/exceptions/update_webhook_400_response_exception.rb +25 -0
  13. data/lib/message_media_webhooks/http/auth/basic_auth.rb +20 -0
  14. data/lib/message_media_webhooks/http/faraday_client.rb +54 -0
  15. data/lib/message_media_webhooks/http/http_call_back.rb +20 -0
  16. data/lib/message_media_webhooks/http/http_client.rb +90 -0
  17. data/lib/message_media_webhooks/http/http_context.rb +16 -0
  18. data/lib/message_media_webhooks/http/http_method_enum.rb +9 -0
  19. data/lib/message_media_webhooks/http/http_request.rb +46 -0
  20. data/lib/message_media_webhooks/http/http_response.rb +19 -0
  21. data/lib/message_media_webhooks/message_media_webhooks_client.rb +26 -0
  22. data/lib/message_media_webhooks/models/base_model.rb +32 -0
  23. data/lib/message_media_webhooks/models/create_webhook_request.rb +76 -0
  24. data/lib/message_media_webhooks/models/update_webhook_request.rb +67 -0
  25. data/test/controllers/controller_test_base.rb +30 -0
  26. data/test/controllers/test_webhooks_controller.rb +56 -0
  27. data/test/http_response_catcher.rb +16 -0
  28. data/test/test_helper.rb +91 -0
  29. metadata +155 -0
@@ -0,0 +1,76 @@
1
+
2
+ module MessageMediaWebhooks
3
+ # CreateWebhookRequest Model.
4
+ class CreateWebhookRequest < BaseModel
5
+ # TODO: Write general description for this method
6
+ # @return [String]
7
+ attr_accessor :url
8
+
9
+ # TODO: Write general description for this method
10
+ # @return [String]
11
+ attr_accessor :method
12
+
13
+ # TODO: Write general description for this method
14
+ # @return [String]
15
+ attr_accessor :encoding
16
+
17
+ # TODO: Write general description for this method
18
+ # @return [Object]
19
+ attr_accessor :headers
20
+
21
+ # TODO: Write general description for this method
22
+ # @return [List of String]
23
+ attr_accessor :events
24
+
25
+ # TODO: Write general description for this method
26
+ # @return [String]
27
+ attr_accessor :template
28
+
29
+ # A mapping from model property names to API property names.
30
+ def self.names
31
+ @_hash = {} if @_hash.nil?
32
+ @_hash['url'] = 'url'
33
+ @_hash['method'] = 'method'
34
+ @_hash['encoding'] = 'encoding'
35
+ @_hash['headers'] = 'headers'
36
+ @_hash['events'] = 'events'
37
+ @_hash['template'] = 'template'
38
+ @_hash
39
+ end
40
+
41
+ def initialize(url = nil,
42
+ method = nil,
43
+ encoding = nil,
44
+ headers = nil,
45
+ events = nil,
46
+ template = nil)
47
+ @url = url
48
+ @method = method
49
+ @encoding = encoding
50
+ @headers = headers
51
+ @events = events
52
+ @template = template
53
+ end
54
+
55
+ # Creates an instance of the object from a hash.
56
+ def self.from_hash(hash)
57
+ return nil unless hash
58
+
59
+ # Extract variables from the hash.
60
+ url = hash['url']
61
+ method = hash['method']
62
+ encoding = hash['encoding']
63
+ headers = hash['headers']
64
+ events = hash['events']
65
+ template = hash['template']
66
+
67
+ # Create object from extracted values.
68
+ CreateWebhookRequest.new(url,
69
+ method,
70
+ encoding,
71
+ headers,
72
+ events,
73
+ template)
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,67 @@
1
+
2
+ module MessageMediaWebhooks
3
+ # UpdateWebhookRequest Model.
4
+ class UpdateWebhookRequest < BaseModel
5
+ # TODO: Write general description for this method
6
+ # @return [String]
7
+ attr_accessor :url
8
+
9
+ # TODO: Write general description for this method
10
+ # @return [String]
11
+ attr_accessor :method
12
+
13
+ # TODO: Write general description for this method
14
+ # @return [String]
15
+ attr_accessor :encoding
16
+
17
+ # TODO: Write general description for this method
18
+ # @return [List of String]
19
+ attr_accessor :events
20
+
21
+ # TODO: Write general description for this method
22
+ # @return [String]
23
+ attr_accessor :template
24
+
25
+ # A mapping from model property names to API property names.
26
+ def self.names
27
+ @_hash = {} if @_hash.nil?
28
+ @_hash['url'] = 'url'
29
+ @_hash['method'] = 'method'
30
+ @_hash['encoding'] = 'encoding'
31
+ @_hash['events'] = 'events'
32
+ @_hash['template'] = 'template'
33
+ @_hash
34
+ end
35
+
36
+ def initialize(url = nil,
37
+ method = nil,
38
+ encoding = nil,
39
+ events = nil,
40
+ template = nil)
41
+ @url = url
42
+ @method = method
43
+ @encoding = encoding
44
+ @events = events
45
+ @template = template
46
+ end
47
+
48
+ # Creates an instance of the object from a hash.
49
+ def self.from_hash(hash)
50
+ return nil unless hash
51
+
52
+ # Extract variables from the hash.
53
+ url = hash['url']
54
+ method = hash['method']
55
+ encoding = hash['encoding']
56
+ events = hash['events']
57
+ template = hash['template']
58
+
59
+ # Create object from extracted values.
60
+ UpdateWebhookRequest.new(url,
61
+ method,
62
+ encoding,
63
+ events,
64
+ template)
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,30 @@
1
+
2
+ require 'json'
3
+ require 'test/unit'
4
+ require 'message_media_webhooks.rb'
5
+ require_relative '../test_helper.rb'
6
+ require_relative '../http_response_catcher.rb'
7
+
8
+ class ControllerTestBase < Test::Unit::TestCase
9
+ include MessageMediaWebhooks
10
+
11
+ class << self
12
+ attr_accessor :controller
13
+ end
14
+
15
+ # Called only once for a test class before any test has executed.
16
+ def self.startup
17
+ @@api_client = MessageMediaWebhooksClient.new
18
+ @@request_timeout = 30
19
+ @@assert_precision = 0.01
20
+
21
+ Configuration.basic_auth_user_name = ENV['MessageMediaApiTestsKey']
22
+ Configuration.basic_auth_password = ENV['MessageMediaApiTestsSecret']
23
+ end
24
+
25
+ # Called once before every test case.
26
+ def setup
27
+ @response_catcher = HttpResponseCatcher.new
28
+ self.class.controller.http_call_back = @response_catcher
29
+ end
30
+ end
@@ -0,0 +1,56 @@
1
+
2
+ require_relative 'controller_test_base'
3
+
4
+ class WebhooksControllerTests < ControllerTestBase
5
+ # Called only once for the class before any test has executed
6
+ def self.startup
7
+ self.controller = @@api_client.webhooks
8
+ end
9
+
10
+ # Delete a webhook that was previously created for the connected account.
11
+ #A webhook can be cancelled by appending the UUID of the webhook to the endpoint and submitting a DELETE request to the /webhooks/messages endpoint.
12
+ #*Note: Only pre-created webhooks can be deleted. If an invalid or non existent webhook ID parameter is specified in the request, then a HTTP 404 Not Found response will be returned.*
13
+ def test_delete_webhook_1()
14
+ # Parameters for the API call
15
+ webhook_id = 'a7f11bb0-f299-4861-a5ca-9b29d04bc5ad'
16
+
17
+ # Perform the API call through the SDK function
18
+ self.class.controller.delete_webhook(webhook_id)
19
+
20
+ # Test response code
21
+ assert_equal(@response_catcher.response.status_code, 204)
22
+ end
23
+
24
+ # Update a webhook. You can update individual attributes or all of them by submitting a PATCH request to the /webhooks/messages endpoint (the same endpoint used above to delete a webhook)
25
+ #A successful request to the retrieve webhook endpoint will return a response body as follows:
26
+ #```
27
+ #{
28
+ # "url": "https://webhook.com",
29
+ # "method": "POST",
30
+ # "id": "04442623-0961-464e-9cbc-ec50804e0413",
31
+ # "encoding": "JSON",
32
+ # "events": [
33
+ # "RECEIVED_SMS"
34
+ # ],
35
+ # "headers": {},
36
+ # "template": "{\"id\":\"$mtId\", \"status\":\"$statusCode\"}"
37
+ #}
38
+ #```
39
+ #*Note: Only pre-created webhooks can be deleted. If an invalid or non existent webhook ID parameter is specified in the request, then a HTTP 404 Not Found response will be returned.*
40
+ def test_update_webhook_1()
41
+ # Parameters for the API call
42
+ webhook_id = 'a7f11bb0-f299-4861-a5ca-9b29d04bc5ad'
43
+ body = UpdateWebhookRequest.from_hash(JSON.parse(
44
+ '{"url":"https://myurl.com","method":"POST","encoding":"FORM_ENCODED","event'\
45
+ 's":["ENROUTE_DR"],"template":"{\\"id\\":\\"$mtId\\", \\"status\\":\\"$statu'\
46
+ 'sCode\\"}"}'
47
+ ))
48
+
49
+ # Perform the API call through the SDK function
50
+ result = self.class.controller.update_webhook(webhook_id, body)
51
+
52
+ # Test response code
53
+ assert_equal(@response_catcher.response.status_code, 200)
54
+ end
55
+
56
+ end
@@ -0,0 +1,16 @@
1
+ # This file was automatically generated for MessageMedia by APIMATIC v2.0 ( https://apimatic.io ).
2
+
3
+ class HttpResponseCatcher < MessageMediaWebhooks::HttpCallBack
4
+ attr_accessor :response
5
+
6
+ def on_before_request(request)
7
+ end
8
+
9
+ # Catching the response
10
+ def on_after_response(context)
11
+ @response = context.response
12
+ end
13
+ end
14
+
15
+
16
+
@@ -0,0 +1,91 @@
1
+ # This file was automatically generated for MessageMedia by APIMATIC v2.0 ( https://apimatic.io ).
2
+
3
+ require 'tempfile'
4
+ require 'open-uri'
5
+
6
+ class TestHelper
7
+
8
+ @cache = Hash.new
9
+
10
+ # Class method to compare the received headers with the expected headers.
11
+ # @param [Hash] A hash of expected headers (keys in lower case).
12
+ # @param [Hash] A hash of received headers.
13
+ # @param [Boolean, optional] A flag which determines if we allow extra headers.
14
+ def self.match_headers(expected_headers,
15
+ received_headers,
16
+ allow_extra: true)
17
+ return false if ((received_headers.length < expected_headers.length) ||
18
+ ((allow_extra == false) && (received_headers.length > expected_headers.length)))
19
+
20
+ received_headers = Hash[received_headers.map{|k, v| [k.to_s.downcase, v]}]
21
+ expected_headers.each do |e_key, e_value|
22
+ return false unless received_headers.key?(e_key)
23
+ return false if ((e_value != nil) &&
24
+ (e_value != received_headers[e_key]))
25
+ end
26
+
27
+ return true
28
+ end
29
+
30
+ # Class method to compare the received body with the expected body.
31
+ # @param [Dynamic] The expected body.
32
+ # @param [Dynamic] The received body.
33
+ # @param [Boolean, optional] A flag which determines if we check values in dictionaries.
34
+ # @param [Boolean, optional] A flag which determines if we check the order of array elements.
35
+ # @param [Boolean, optional] A flag which determines if we check the count of array elements.
36
+ def self.match_body(expected_body,
37
+ received_body,
38
+ check_values: false,
39
+ check_order: false,
40
+ check_count: false)
41
+ if expected_body.instance_of? Hash
42
+ return false unless received_body.instance_of? Hash
43
+ for key in expected_body.keys
44
+ return false unless received_body.keys.include? key
45
+ if check_values or expected_body[key].instance_of? Hash
46
+ return false unless TestHelper.match_body(expected_body[key],
47
+ received_body[key],
48
+ check_values: check_values,
49
+ check_order: check_order,
50
+ check_count: check_count)
51
+ end
52
+ end
53
+ elsif expected_body.instance_of? Array
54
+ return False unless received_body.instance_of? Array
55
+ if check_count == true && (expected_body.length != received_body.length)
56
+ return false
57
+ else
58
+ previous_matches = Array.new
59
+ expected_body.each.with_index do |expected_element, i|
60
+ matches = (received_body.map.with_index do |received_element, j|
61
+ j if TestHelper.match_body(expected_element,
62
+ received_element,
63
+ check_values: check_values,
64
+ check_order: check_order,
65
+ check_count: check_count)
66
+ end).compact
67
+ return false if matches.length == 0
68
+ if check_order == true
69
+ return false if (i != 0 && matches.map{|x| previous_matches.map{|y| y > x}.all?}.all?)
70
+ previous_matches = matches
71
+ end
72
+ end
73
+ end
74
+ elsif expected_body != received_body
75
+ return false
76
+ end
77
+ return true
78
+ end
79
+
80
+ # Class method which takes a URL, downloads the file (if not already downloaded
81
+ # for this test session) and returns the path of the file.
82
+ # @param [String] The URL of the required file.
83
+ def self.get_file(url)
84
+ unless @cache.keys.include? url
85
+ @cache[url] = Tempfile.new('APIMatic')
86
+ @cache[url].binmode
87
+ @cache[url].write(open(url, {ssl_ca_cert: Certifi.where}).read)
88
+ end
89
+ return @cache[url].path
90
+ end
91
+ end
metadata ADDED
@@ -0,0 +1,155 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: messagemedia_webhooks_sdk
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - MessageMedia Developers
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-05-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: logging
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.10.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.10.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: test-unit
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 3.1.5
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 3.1.5
55
+ - !ruby/object:Gem::Dependency
56
+ name: certifi
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2016.9'
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 2016.09.26
65
+ type: :runtime
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '2016.9'
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 2016.09.26
75
+ - !ruby/object:Gem::Dependency
76
+ name: faraday-http-cache
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '1.2'
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: 1.2.2
85
+ type: :runtime
86
+ prerelease: false
87
+ version_requirements: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: '1.2'
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: 1.2.2
95
+ description: The MessageMedia Webhooks allows you to subscribe to one or several events
96
+ and when one of those events is triggered, an HTTP request is sent to the URL of
97
+ your choice along with the message or payload. In simpler terms, it allows applications
98
+ to "speak" to one another and get notified automatically when something new happens.
99
+ email: developers@messagemedia.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - LICENSE
105
+ - README.md
106
+ - lib/message_media_webhooks.rb
107
+ - lib/message_media_webhooks/api_helper.rb
108
+ - lib/message_media_webhooks/configuration.rb
109
+ - lib/message_media_webhooks/controllers/base_controller.rb
110
+ - lib/message_media_webhooks/controllers/webhooks_controller.rb
111
+ - lib/message_media_webhooks/exceptions/api_exception.rb
112
+ - lib/message_media_webhooks/exceptions/create_webhook_400_response_exception.rb
113
+ - lib/message_media_webhooks/exceptions/retrieve_webhook_400_response_exception.rb
114
+ - lib/message_media_webhooks/exceptions/update_webhook_400_response_exception.rb
115
+ - lib/message_media_webhooks/http/auth/basic_auth.rb
116
+ - lib/message_media_webhooks/http/faraday_client.rb
117
+ - lib/message_media_webhooks/http/http_call_back.rb
118
+ - lib/message_media_webhooks/http/http_client.rb
119
+ - lib/message_media_webhooks/http/http_context.rb
120
+ - lib/message_media_webhooks/http/http_method_enum.rb
121
+ - lib/message_media_webhooks/http/http_request.rb
122
+ - lib/message_media_webhooks/http/http_response.rb
123
+ - lib/message_media_webhooks/message_media_webhooks_client.rb
124
+ - lib/message_media_webhooks/models/base_model.rb
125
+ - lib/message_media_webhooks/models/create_webhook_request.rb
126
+ - lib/message_media_webhooks/models/update_webhook_request.rb
127
+ - test/controllers/controller_test_base.rb
128
+ - test/controllers/test_webhooks_controller.rb
129
+ - test/http_response_catcher.rb
130
+ - test/test_helper.rb
131
+ homepage: https://developers.messagemedia.com
132
+ licenses:
133
+ - Apache-2.0
134
+ metadata: {}
135
+ post_install_message:
136
+ rdoc_options: []
137
+ require_paths:
138
+ - lib
139
+ required_ruby_version: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - "~>"
142
+ - !ruby/object:Gem::Version
143
+ version: '2.0'
144
+ required_rubygems_version: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ version: '0'
149
+ requirements: []
150
+ rubyforge_project:
151
+ rubygems_version: 2.5.2
152
+ signing_key:
153
+ specification_version: 4
154
+ summary: message_media_webhooks
155
+ test_files: []