mailinator_client 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,221 @@
1
+ # The MIT License (MIT)
2
+ #
3
+ # Copyright (c) 2020 Manybrain, Inc.
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in all
13
+ # copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ # SOFTWARE.
22
+
23
+ require "json"
24
+
25
+ module MailinatorClient
26
+
27
+ # Class containing all the actions for the Rules Resource
28
+ class Rules
29
+
30
+ def initialize(client)
31
+ @client = client
32
+ end
33
+
34
+ # Creates a Rule. Note that in the examples, ":domain_id" can be one of your private domains.
35
+ #
36
+ # Authentication:
37
+ # The client must be configured with a valid api
38
+ # access token to call this action.
39
+ #
40
+ # Parameters:
41
+ # * {string} domainId - The Domain name or the Domain id
42
+ # * {string} ruleToPost - The Rule object (https://manybrain.github.io/m8rdocs/#create-rule)
43
+ #
44
+ # Responses:
45
+ # * Rule (https://manybrain.github.io/m8rdocs/#create-rule)
46
+ def create_rule(params = {})
47
+ params = Utils.symbolize_hash_keys(params)
48
+ query_params = { }
49
+ headers = {}
50
+ body = nil
51
+
52
+ raise ArgumentError.new("domain id is required") unless params.has_key?(:domainId)
53
+ raise ArgumentError.new("ruleToPost is required") unless params.has_key?(:ruleToPost)
54
+
55
+ body = params[:ruleToPost] if params.has_key?(:ruleToPost)
56
+
57
+ path = "/domains/#{params[:domainId]}/rules"
58
+
59
+ @client.request(
60
+ method: :post,
61
+ path: path,
62
+ query: query_params,
63
+ headers: headers,
64
+ body: body)
65
+ end
66
+
67
+ # Enables an existing Rule
68
+ #
69
+ # Authentication:
70
+ # The client must be configured with a valid api
71
+ # access token to call this action.
72
+ #
73
+ # Parameters:
74
+ # * {string} domainId - The Domain name or the Domain id
75
+ # * {string} ruleId - The Rule id
76
+ #
77
+ # Responses:
78
+ # * Status (https://manybrain.github.io/m8rdocs/#enable-rule)
79
+ def enable_rule(params = {})
80
+ params = Utils.symbolize_hash_keys(params)
81
+ query_params = { }
82
+ headers = {}
83
+ body = nil
84
+
85
+ raise ArgumentError.new("domain id is required") unless params.has_key?(:domainId)
86
+ raise ArgumentError.new("rule id is required") unless params.has_key?(:ruleId)
87
+
88
+ path = "/domains/#{params[:domainId]}/rules/#{params[:ruleId]}/enable"
89
+
90
+ @client.request(
91
+ method: :put,
92
+ path: path,
93
+ query: query_params,
94
+ headers: headers,
95
+ body: body)
96
+ end
97
+
98
+ # Disables an existing Rule
99
+ #
100
+ # Authentication:
101
+ # The client must be configured with a valid api
102
+ # access token to call this action.
103
+ #
104
+ # Parameters:
105
+ # * {string} domainId - The Domain name or the Domain id
106
+ # * {string} ruleId - The Rule id
107
+ #
108
+ # Responses:
109
+ # * Status (https://manybrain.github.io/m8rdocs/#disable-rule)
110
+ def disable_rule(params = {})
111
+ params = Utils.symbolize_hash_keys(params)
112
+ query_params = { }
113
+ headers = {}
114
+ body = nil
115
+
116
+ raise ArgumentError.new("domain id is required") unless params.has_key?(:domainId)
117
+ raise ArgumentError.new("rule id is required") unless params.has_key?(:ruleId)
118
+
119
+ path = "/domains/#{params[:domainId]}/rules/#{params[:ruleId]}/disable"
120
+
121
+ @client.request(
122
+ method: :put,
123
+ path: path,
124
+ query: query_params,
125
+ headers: headers,
126
+ body: body)
127
+ end
128
+
129
+ # Fetches all Rules for a Domain.
130
+ #
131
+ # Authentication:
132
+ # The client must be configured with a valid api
133
+ # access token to call this action.
134
+ #
135
+ # Parameters:
136
+ # * {string} domainId - The Domain name or the Domain id
137
+ #
138
+ # Responses:
139
+ # * Collection of rules (https://manybrain.github.io/m8rdocs/#get-all-rules)
140
+ def get_all_rules(params = {})
141
+ params = Utils.symbolize_hash_keys(params)
142
+ query_params = { }
143
+ headers = {}
144
+ body = nil
145
+
146
+ raise ArgumentError.new("domain id is required") unless params.has_key?(:domainId)
147
+
148
+ path = "/domains/#{params[:domainId]}/rules"
149
+
150
+ @client.request(
151
+ method: :get,
152
+ path: path,
153
+ query: query_params,
154
+ headers: headers,
155
+ body: body)
156
+ end
157
+
158
+ # Fetches a specific rule for a Domain.
159
+ #
160
+ # Authentication:
161
+ # The client must be configured with a valid api
162
+ # access token to call this action.
163
+ #
164
+ # Parameters:
165
+ # * {string} domainId - The Domain name or the Domain id
166
+ # * {string} ruleId - The Domain name or the Rule id
167
+ #
168
+ # Responses:
169
+ # * Rule (https://manybrain.github.io/m8rdocs/#get-rule)
170
+ def get_rule(params = {})
171
+ params = Utils.symbolize_hash_keys(params)
172
+ query_params = { }
173
+ headers = {}
174
+ body = nil
175
+
176
+ raise ArgumentError.new("domain id is required") unless params.has_key?(:domainId)
177
+ raise ArgumentError.new("rule id is required") unless params.has_key?(:ruleId)
178
+
179
+ path = "/domains/#{params[:domainId]}/rules/#{params[:ruleId]}"
180
+
181
+ @client.request(
182
+ method: :get,
183
+ path: path,
184
+ query: query_params,
185
+ headers: headers,
186
+ body: body)
187
+ end
188
+
189
+ # Deletes a specific rule for a Domain.
190
+ #
191
+ # Authentication:
192
+ # The client must be configured with a valid api
193
+ # access token to call this action.
194
+ #
195
+ # Parameters:
196
+ # * {string} domainId - The Domain name or the Domain id
197
+ # * {string} ruleId - The Rule id
198
+ #
199
+ # Responses:
200
+ # * Status (https://manybrain.github.io/m8rdocs/#delete-rule)
201
+ def delete_rule(params = {})
202
+ params = Utils.symbolize_hash_keys(params)
203
+ query_params = { }
204
+ headers = {}
205
+ body = nil
206
+
207
+ raise ArgumentError.new("domain id is required") unless params.has_key?(:domainId)
208
+ raise ArgumentError.new("rule id is required") unless params.has_key?(:ruleId)
209
+
210
+ path = "/domains/#{params[:domainId]}/rules/#{params[:ruleId]}"
211
+
212
+ @client.request(
213
+ method: :delete,
214
+ path: path,
215
+ query: query_params,
216
+ headers: headers,
217
+ body: body)
218
+ end
219
+
220
+ end
221
+ end
@@ -0,0 +1,82 @@
1
+ # The MIT License (MIT)
2
+ #
3
+ # Copyright (c) 2020 Manybrain, Inc.
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in all
13
+ # copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ # SOFTWARE.
22
+
23
+ require "json"
24
+
25
+ module MailinatorClient
26
+
27
+ # Class containing all the actions for the Stats Resource
28
+ class Stats
29
+
30
+ def initialize(client)
31
+ @client = client
32
+ end
33
+
34
+ # Retrieves stats of team
35
+ #
36
+ # Authentication:
37
+ # The client must be configured with a valid api
38
+ # access token to call this action.
39
+ #
40
+ # Responses:
41
+ # * Collection of team stats (https://manybrain.github.io/m8rdocs/#get-all-domains)
42
+ def get_team_stats()
43
+ query_params = { }
44
+ headers = {}
45
+ body = nil
46
+
47
+ path = "/team/stats"
48
+
49
+ @client.request(
50
+ method: :get,
51
+ path: path,
52
+ query: query_params,
53
+ headers: headers,
54
+ body: body)
55
+ end
56
+
57
+ # Retrieves team info
58
+ #
59
+ # Authentication:
60
+ # The client must be configured with a valid api
61
+ # access token to call this action.
62
+ #
63
+ # Responses:
64
+ # * Team info (https://manybrain.github.io/m8rdocs/#stats-api)
65
+ def get_team(params = {})
66
+ params = Utils.symbolize_hash_keys(params)
67
+ query_params = { }
68
+ headers = {}
69
+ body = nil
70
+
71
+ path = "/team"
72
+
73
+ @client.request(
74
+ method: :get,
75
+ path: path,
76
+ query: query_params,
77
+ headers: headers,
78
+ body: body)
79
+ end
80
+
81
+ end
82
+ end
@@ -0,0 +1,44 @@
1
+ # The MIT License (MIT)
2
+ #
3
+ # Copyright (c) 2020 Manybrain, Inc.
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in all
13
+ # copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ # SOFTWARE.
22
+
23
+ module MailinatorClient
24
+ class Utils
25
+ def self.symbolize_hash_keys(hash)
26
+ Hash[hash.dup.map { |k, v| [k.to_sym, v] }]
27
+ end
28
+
29
+ def self.fix_query_arrays(value)
30
+ if value.respond_to?(:to_ary)
31
+ value = value.to_ary.map.with_index.to_a.to_h.invert
32
+ end
33
+
34
+ if value.respond_to?(:to_hash)
35
+ value = value.to_hash
36
+ value.each do |k, v|
37
+ value[k] = fix_query_arrays(v)
38
+ end
39
+ end
40
+
41
+ value
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,25 @@
1
+ # The MIT License (MIT)
2
+ #
3
+ # Copyright (c) 2020 Manybrain, Inc.
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in all
13
+ # copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ # SOFTWARE.
22
+
23
+ module MailinatorClient
24
+ VERSION = "1.0.1"
25
+ end
@@ -0,0 +1,25 @@
1
+ $LOAD_PATH.push(File.expand_path("../lib", __FILE__))
2
+ require "mailinator_client/version"
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.name = "mailinator_client"
6
+ gem.authors = ["Marian Melnychuk"]
7
+ gem.email = ["marian.melnychuk@gmail.com"]
8
+ gem.summary = %q{Provides a simple ruby wrapper around the Mailinator REST API}
9
+ gem.description = %q{Easily use the Mailinator through its REST API with Ruby}
10
+ gem.homepage = "https://github.com/manybrain/mailinator-ruby-client"
11
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
+ gem.files = `git ls-files`.split("\n")
13
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ gem.require_paths = ["lib"]
15
+ gem.version = MailinatorClient::VERSION
16
+ gem.licenses = ["MIT"]
17
+
18
+ gem.required_ruby_version = ">= 2.1"
19
+
20
+ gem.add_dependency "httparty", "~> 0.14.0"
21
+
22
+ gem.add_development_dependency "minitest", "~> 5.9"
23
+ gem.add_development_dependency "rake", "~> 12"
24
+ gem.add_development_dependency "webmock", "~> 2.3"
25
+ end
@@ -0,0 +1,132 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/test_helper")
2
+
3
+ class MailinatorClientApiTest < MiniTest::Test
4
+
5
+ describe "test api functionality" do
6
+ before do
7
+ @auth_token = "MAILINATOR_TEST_API_TOKEN"
8
+ @inboxAll = "*"
9
+ @inbox = "MAILINATOR_TEST_INBOX"
10
+ @teamSMSNumber = "MAILINATOR_TEST_PHONE_NUMBER"
11
+ @messageIdWithAttachment = "MAILINATOR_TEST_MESSAGE_WITH_ATTACHMENT_ID"
12
+ @attachmentId = "MAILINATOR_TEST_ATTACHMENT_ID"
13
+ @deleteDomain = "MAILINATOR_TEST_DELETE_DOMAIN"
14
+ end
15
+
16
+ it "should correctly do manipulation with mailinator data" do
17
+
18
+ client = MailinatorClient::Client.new(auth_token: @auth_token)
19
+
20
+ response = client.domains.get_domains
21
+ assert response != nil, "Expected get domains response to not be nil"
22
+ assert response["domains"] != nil, "Expected response domains to not be nil"
23
+ @domain = response["domains"][0]
24
+ @domainId = @domain["_id"]
25
+ @domainName = @domain["name"]
26
+
27
+ response = client.domains.get_domain(domainId:@domainId)
28
+ assert response != nil, "Expected get domain response to not be nil"
29
+
30
+ ruleToPost = {
31
+ name: "RuleName",
32
+ priority: 15,
33
+ description: "Description",
34
+ conditions: [
35
+ {
36
+ operation: "PREFIX",
37
+ condition_data: {
38
+ field: "to",
39
+ value: "raul"
40
+ }
41
+ }
42
+ ],
43
+ enabled: true,
44
+ match: "ANY",
45
+ actions: [
46
+ {
47
+ action: "WEBHOOK",
48
+ action_data: {
49
+ url: "https://www.google.com"
50
+ }
51
+ }
52
+ ]
53
+ }
54
+
55
+ response = client.rules.create_rule(domainId:@domainId, ruleToPost: ruleToPost)
56
+ assert response != nil, "Expected get create rule response to not be nil"
57
+ assert response["_id"] != nil, "Expected response rule id to not be nil"
58
+
59
+ response = client.rules.get_all_rules(domainId:@domainId)
60
+ assert response != nil, "Expected get all rules response to not be nil"
61
+ assert response["rules"] != nil, "Expected response rules to not be nil"
62
+ @rule = response["rules"][0]
63
+ @ruleId = @rule["_id"]
64
+
65
+ response = client.rules.enable_rule(domainId:@domainId, ruleId: @ruleId)
66
+ assert response != nil, "Expected enable rule response to not be nil"
67
+ assert response["status"] == "ok", "Expected enable rule response to be ok"
68
+
69
+ response = client.rules.disable_rule(domainId:@domainId, ruleId: @ruleId)
70
+ assert response != nil, "Expected disable rule response to not be nil"
71
+ assert response["status"] == "ok", "Expected disable rule response to be ok"
72
+
73
+ response = client.rules.get_rule(domainId:@domainId, ruleId: @ruleId)
74
+ assert response != nil, "Expected disable rule response to not be nil"
75
+ assert response["_id"] != nil, "Expected get rule response to not be nil"
76
+
77
+ response = client.rules.delete_rule(domainId:@deleteDomain, ruleId: @ruleId)
78
+ assert response != nil, "Expected delete rule response to not be nil"
79
+ assert response["status"] == "ok", "Expected delete rule response to be ok"
80
+
81
+ response = client.messages.fetch_inbox(domain:@domainName, inbox: @inboxAll, skip: 0, limit: 50, sort: "ascending", decodeSubject: false)
82
+ assert response != nil, "Expected fetch inbox response to not be nil"
83
+ assert response["msgs"] != nil, "Expected response fetch inbox messages to not be nil"
84
+ @message = response["msgs"][0]
85
+ @messageId = @message["id"]
86
+
87
+ response = client.messages.fetch_message(domain:@domainName, inbox: @inboxAll, messageId: @messageId)
88
+ assert response != nil, "Expected fetch message response to not be nil"
89
+
90
+ response = client.messages.fetch_sms_message(domain:@domainName, inbox: @inboxAll, teamSmsNumber: @teamSMSNumber)
91
+ assert response != nil, "Expected fetch sms message response to not be nil"
92
+
93
+ response = client.messages.fetch_attachments(domain:@domainName, inbox: @inbox, messageId: @messageIdWithAttachment)
94
+ assert response != nil, "Expected fetch attachments response to not be nil"
95
+
96
+ response = client.messages.fetch_attachment(domain:@domainName, inbox: @inbox, messageId: @messageIdWithAttachment, attachmentId: @attachmentId)
97
+ assert response != nil, "Expected fetch attachment response to not be nil"
98
+
99
+ response = client.messages.fetch_message_links(domain:@domainName, inbox: @inboxAll, messageId: @messageId)
100
+ assert response != nil, "Expected fetch message links response to not be nil"
101
+ assert response["links"] != nil, "Expected fetch message links links response to not be nil"
102
+
103
+ response = client.messages.delete_message(domain:@deleteDomain, inbox: @inbox, messageId: @messageId)
104
+ assert response != nil, "Expected delete message response to not be nil"
105
+ assert response["status"] == "ok", "Expected delete message response to be ok"
106
+
107
+ response = client.messages.delete_all_inbox_messages(domain:@deleteDomain, inbox: @inbox)
108
+ assert response != nil, "Expected delete all inbox messages response to not be nil"
109
+ assert response["status"] == "ok", "Expected delete all inbox messages response to be ok"
110
+
111
+ response = client.messages.delete_all_domain_messages(domain:@deleteDomain)
112
+ assert response != nil, "Expected delete all domain messages response to not be nil"
113
+ assert response["status"] == "ok", "Expected delete all domain messages response to be ok"
114
+
115
+ messageToPost = {
116
+ subject:"Testing ruby message",
117
+ from:"test_email_ruby@test.com",
118
+ text:"I love Ruby!"
119
+ }
120
+ response = client.messages.inject_message(domain:@domainName, inbox: @inboxAll, messageToPost: messageToPost)
121
+ assert response != nil, "Expected inject message response to not be nil"
122
+ assert response["status"] == "ok", "Expected inject message response to be ok"
123
+
124
+ response = client.stats.get_team_stats
125
+ assert response != nil, "Expected response to not be nil"
126
+ assert response["stats"] != nil, "Expected response stats to not be nil"
127
+
128
+ response = client.stats.get_team
129
+ assert response != nil, "Expected response to not be nil"
130
+ end
131
+ end
132
+ end