mailosaur 5.0.20 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0ac89c532d7f0519c3a2d620af601b75e7b83dffc3df92e842acb7de6610d2a1
4
- data.tar.gz: f1dc7d047492d560f764fbf3f3ac7937e26a29f4ce163c744f017562cbba4e33
3
+ metadata.gz: ec06119b13b80148c1afc565e3aa3645d3784c2aec0772da7d2d43443b37cc18
4
+ data.tar.gz: d2fc23557ffab91c12b3bad70942212395f0d16beaf00feecf5f8914a8d77635
5
5
  SHA512:
6
- metadata.gz: fc72c693120dc3a6730d96c7666a4100bd000a6ef237470df762737cc0bfb00a6b7979e5be9ba273e11a92dd8ab68e19a14dd42a83d6ed2ea9d14fe7d78e7eec
7
- data.tar.gz: 8c6982baaee8c5c733ed3816440340a746606512acf1f0d1e523aca08f11129ffab06481ffef676f484273952460f86caa8b2fec529f959489e08f9d63322810
6
+ metadata.gz: 8c1212d6c8b230bb1944cd8066fd3498278206ddaae60c44844fc531ec11ddf9a6b800a34ce55403190f0fe873b51ffe30925904e4d7dd580ed7854ea18c2cf7
7
+ data.tar.gz: 6497b4bb404036491fe89bb5a3fb1e2c6ea81ae8e339e0ed986c69c0286a3852ffd535e97446c95a7ee765481782693c7d5a7ab69a78fb1f4b7a89400f516bca
@@ -12,6 +12,33 @@ module Mailosaur
12
12
  # @return [Connection] the client connection.
13
13
  attr_reader :conn
14
14
 
15
+ #
16
+ # Retrieve a message using search criteria
17
+ #
18
+ # Returns as soon as a message matching the specified search criteria is
19
+ # found. This is the most efficient method of looking up a message.
20
+ #
21
+ # @param server [String] The identifier of the server hosting the message.
22
+ # @param criteria [SearchCriteria] The search criteria to use in order to find
23
+ # a match.
24
+ # @param timeout [Integer] Specify how long to wait for a matching result
25
+ # (in milliseconds).
26
+ # @param received_after [DateTime] Limits results to only messages received
27
+ # after this date/time.
28
+ #
29
+ # @return [Message] operation results.
30
+ #
31
+ def get(server, criteria, timeout:10000, received_after:DateTime.now - (1.0/24))
32
+ # Defaults timeout to 10s, receivedAfter to 1h
33
+ if server.length > 8
34
+ raise Mailosaur::MailosaurError.new('Use get_by_id to retrieve a message using its identifier', nil)
35
+ end
36
+
37
+ result = search(server, criteria, timeout:timeout, received_after:received_after)
38
+ return get_by_id(result.items[0].id)
39
+ end
40
+
41
+
15
42
  #
16
43
  # Retrieve a message
17
44
  #
@@ -22,7 +49,7 @@ module Mailosaur
22
49
  #
23
50
  # @return [Message] operation results.
24
51
  #
25
- def get(id)
52
+ def get_by_id(id)
26
53
  response = conn.get 'api/messages/' + id
27
54
 
28
55
  unless response.status == 200
@@ -121,49 +148,51 @@ module Mailosaur
121
148
  # pagination.
122
149
  # @param items_per_page [Integer] A limit on the number of results to be
123
150
  # returned per page. Can be set between 1 and 1000 items, the default is 50.
151
+ # @param timeout [Integer] Specify how long to wait for a matching result
152
+ # (in milliseconds).
153
+ # @param received_after [DateTime] Limits results to only messages received
154
+ # after this date/time.
124
155
  #
125
156
  # @return [MessageListResult] operation results.
126
157
  #
127
- def search(server, criteria, page:nil, items_per_page:nil)
158
+ def search(server, criteria, page:nil, items_per_page:nil, timeout:nil, received_after:nil)
128
159
  url = 'api/messages/search?server=' + server
129
- url += page ? '&page=' + page : ''
130
- url += items_per_page ? '&itemsPerPage=' + items_per_page : ''
131
-
132
- response = conn.post url, criteria.to_json
133
-
134
- unless response.status == 200
135
- error_model = JSON.load(response.body)
136
- mailosaur_error = Mailosaur::MailosaurError.new('Operation returned an invalid status code \'' + response.status.to_s + '\'', error_model)
137
- raise mailosaur_error
138
- end
139
-
140
- model = JSON.load(response.body)
141
- Mailosaur::Models::MessageListResult.new(model)
142
- end
143
-
144
- #
145
- # Wait for a specific message
146
- #
147
- # Returns as soon as a message matching the specified search criteria is found.
148
- # This is the most efficient method of looking up a message.
149
- #
150
- # @param server [String] The identifier of the server hosting the message.
151
- # @param criteria [SearchCriteria] The search criteria to use in order to find
152
- # a match.
153
- #
154
- # @return [Message] operation results.
155
- #
156
- def wait_for(server, criteria)
157
- response = conn.post 'api/messages/await?server=' + server, criteria.to_json
158
-
159
- unless response.status == 200
160
- error_model = JSON.load(response.body)
161
- mailosaur_error = Mailosaur::MailosaurError.new('Operation returned an invalid status code \'' + response.status.to_s + '\'', error_model)
162
- raise mailosaur_error
160
+ url += page ? '&page=' + page.to_s : ''
161
+ url += items_per_page ? '&itemsPerPage=' + items_per_page.to_s : ''
162
+ url += received_after ? '&receivedAfter=' + received_after.iso8601 : ''
163
+
164
+ poll_count = 0
165
+ start_time = Time.now.to_f
166
+
167
+ loop do
168
+ response = conn.post url, criteria.to_json
169
+
170
+ unless response.status == 200
171
+ error_model = JSON.load(response.body)
172
+ mailosaur_error = Mailosaur::MailosaurError.new('Operation returned an invalid status code \'' + response.status.to_s + '\'', error_model)
173
+ raise mailosaur_error
174
+ end
175
+
176
+ model = JSON.load(response.body)
177
+ if timeout.to_i == 0 || model['items'].length != 0
178
+ return Mailosaur::Models::MessageListResult.new(model)
179
+ end
180
+
181
+ delay_pattern = (response.headers['x-ms-delay'] || '1000').split(',').map{ |x| x.to_i }
182
+
183
+ delay = poll_count >= delay_pattern.length ?
184
+ delay_pattern[delay_pattern.length - 1] :
185
+ delay_pattern[poll_count]
186
+
187
+ poll_count += 1
188
+
189
+ ## Stop if timeout will be exceeded
190
+ if ((1000 * (Time.now.to_f - start_time).to_i) + delay) > timeout
191
+ raise Mailosaur::MailosaurError.new('No matching messages were found in time', nil)
192
+ end
193
+
194
+ sleep (delay / 1000)
163
195
  end
164
-
165
- model = JSON.load(response.body)
166
- Mailosaur::Models::Message.new(model)
167
196
  end
168
197
  end
169
198
  end
@@ -1,3 +1,3 @@
1
1
  module Mailosaur
2
- VERSION = '5.0.20'
2
+ VERSION = '6.0.0'
3
3
  end
@@ -6,6 +6,7 @@ require 'securerandom'
6
6
  require 'time'
7
7
  require 'faraday'
8
8
  require 'Mailosaur/module_definition'
9
+ require 'Mailosaur/version'
9
10
 
10
11
  module Mailosaur
11
12
  autoload :Analysis, 'Mailosaur/analysis.rb'
@@ -33,7 +34,7 @@ module Mailosaur
33
34
  autoload :ServerListResult, 'Mailosaur/models/server_list_result.rb'
34
35
  autoload :SpamFilterResults, 'Mailosaur/models/spam_filter_results.rb'
35
36
  autoload :ServerCreateOptions, 'Mailosaur/models/server_create_options.rb'
36
- autoload :BaseModel, 'Mailosaur/models/base_model.rb'
37
+ autoload :BaseModel, 'Mailosaur/models/base_model.rb'
37
38
  end
38
39
 
39
40
  class MailosaurClient
@@ -58,7 +59,7 @@ autoload :BaseModel, 'Mailosaur/mod
58
59
  conn = Faraday.new(base_url || 'https://mailosaur.com/', {
59
60
  :headers => {
60
61
  :content_type => 'application/json; charset=utf-8',
61
- :user_agent => 'mailosaur-ruby/5.0.20'
62
+ :user_agent => 'mailosaur-ruby/' + Mailosaur::VERSION
62
63
  }
63
64
  })
64
65
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mailosaur
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.20
4
+ version: 6.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mailosaur Ltd
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-13 00:00:00.000000000 Z
11
+ date: 2019-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -184,7 +184,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
184
184
  - !ruby/object:Gem::Version
185
185
  version: '0'
186
186
  requirements: []
187
- rubygems_version: 3.0.3
187
+ rubygems_version: 3.0.4
188
188
  signing_key:
189
189
  specification_version: 4
190
190
  summary: Ruby client library for Mailosaur