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.
- checksums.yaml +7 -0
- data/LICENSE +28 -0
- data/README.md +132 -0
- data/lib/message_media_webhooks.rb +39 -0
- data/lib/message_media_webhooks/api_helper.rb +272 -0
- data/lib/message_media_webhooks/configuration.rb +28 -0
- data/lib/message_media_webhooks/controllers/base_controller.rb +55 -0
- data/lib/message_media_webhooks/controllers/webhooks_controller.rb +369 -0
- data/lib/message_media_webhooks/exceptions/api_exception.rb +16 -0
- data/lib/message_media_webhooks/exceptions/create_webhook_400_response_exception.rb +25 -0
- data/lib/message_media_webhooks/exceptions/retrieve_webhook_400_response_exception.rb +26 -0
- data/lib/message_media_webhooks/exceptions/update_webhook_400_response_exception.rb +25 -0
- data/lib/message_media_webhooks/http/auth/basic_auth.rb +20 -0
- data/lib/message_media_webhooks/http/faraday_client.rb +54 -0
- data/lib/message_media_webhooks/http/http_call_back.rb +20 -0
- data/lib/message_media_webhooks/http/http_client.rb +90 -0
- data/lib/message_media_webhooks/http/http_context.rb +16 -0
- data/lib/message_media_webhooks/http/http_method_enum.rb +9 -0
- data/lib/message_media_webhooks/http/http_request.rb +46 -0
- data/lib/message_media_webhooks/http/http_response.rb +19 -0
- data/lib/message_media_webhooks/message_media_webhooks_client.rb +26 -0
- data/lib/message_media_webhooks/models/base_model.rb +32 -0
- data/lib/message_media_webhooks/models/create_webhook_request.rb +76 -0
- data/lib/message_media_webhooks/models/update_webhook_request.rb +67 -0
- data/test/controllers/controller_test_base.rb +30 -0
- data/test/controllers/test_webhooks_controller.rb +56 -0
- data/test/http_response_catcher.rb +16 -0
- data/test/test_helper.rb +91 -0
- 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
|
+
|
data/test/test_helper.rb
ADDED
@@ -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: []
|