messagemedia_webhooks_sdk 1.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 (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: []