onlyoffice_gmail_helper 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: a72371e5187dc5f9ea6b6cd938c77d0f3288f9c44b6399dd71fd392aa6eb1441
4
+ data.tar.gz: 13668d6d4485109a04a6449275f81acb6eb57fcaa2b1c581bbc5baf1f426fcde
5
+ SHA512:
6
+ metadata.gz: a4da08cf22fda03b870d5d18d4bdca3a86c763b00415eec83adae9e75e9f633f6c6abe2dda795bd26561f49041bd3b6b07bbc61e8f089a6e84502d7b48fb44d2
7
+ data.tar.gz: baf3cf12a74db4fbdbfcc55c814b469c78c631264187398aba19fad5eba5728fe38373b8c86c30eab29217a6159e3fbf3686c32b6f2178f89aea83baf9bb9dd6
@@ -0,0 +1,502 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'gmail'
4
+ require 'onlyoffice_logger_helper'
5
+ require 'onlyoffice_gmail_helper/email_account'
6
+ require 'onlyoffice_gmail_helper/mail_message'
7
+ require 'onlyoffice_gmail_helper/version'
8
+
9
+ # Override object class
10
+ class Object
11
+ # @return [Date] format date for imap
12
+ def to_imap_date
13
+ Date.parse(to_s).strftime('%d-%b-%Y')
14
+ end
15
+ end
16
+
17
+ # Monkey patch IMAP to fix https://bugs.ruby-lang.org/issues/14750
18
+ # TODO: Remove after release of fix as stable version
19
+ module Net
20
+ # Imap main class
21
+ class IMAP
22
+ # override bugged method
23
+ alias send_literal_bug_14750 send_literal
24
+
25
+ # Override for but 14750
26
+ def send_literal(str, tag = nil)
27
+ if RUBY_VERSION.start_with?('2.5', '2.6')
28
+ send_literal_bug_14750(str, tag)
29
+ else
30
+ send_literal_bug_14750(str)
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+ # Helper module for GMail
37
+ module OnlyofficeGmailHelper
38
+ # Main class of gem
39
+ class Gmail_helper
40
+ # @return [Gmail] gmail object
41
+ attr_accessor :gmail
42
+ # @return [String] user name
43
+ attr_accessor :user
44
+ # @return [String] user password
45
+ attr_accessor :password
46
+ # @return [Integer] default timeout for operation
47
+ attr_accessor :timeout_for_mail
48
+ # @return [String] default label
49
+ attr_accessor :label
50
+
51
+ def initialize(user = EmailAccount::GMAIL_DEFAULT.login, password = EmailAccount::GMAIL_DEFAULT.password, timeout_for_mail = 10, label = nil)
52
+ @user = user
53
+ @password = password
54
+ @gmail = Gmail.new(user, password)
55
+ @imap = @gmail.instance_variable_get(:@imap)
56
+ @timeout_for_mail = timeout_for_mail
57
+ @label = label
58
+ end
59
+
60
+ # Select mailbox
61
+ # @return [nil]
62
+ def mailbox
63
+ if @label
64
+ if @label == :inbox
65
+ @gmail.inbox
66
+ else
67
+ @gmail.mailbox(@label)
68
+ end
69
+ else
70
+ @gmail.mailbox('[Gmail]/All Mail')
71
+ end
72
+ end
73
+
74
+ # Perform logout
75
+ # @return [nil]
76
+ def logout
77
+ @gmail.logout
78
+ @imap.disconnect until @imap.disconnected?
79
+ rescue StandardError
80
+ Exception
81
+ end
82
+
83
+ # Refresh connection data
84
+ # @return [nil]
85
+ def refresh
86
+ logout
87
+ @gmail = Gmail.new(@user, @password)
88
+ end
89
+
90
+ # Wait until unread message exists
91
+ # @param [String] title message to wait
92
+ # @param [Integer] timeout to wait
93
+ # @param [Integer] period sleep between tries
94
+ # @return [MailMessage] found message
95
+ def wait_until_unread_message(title,
96
+ timeout = @timeout_for_mail, period = 60)
97
+ counter = 0
98
+ message_found = false
99
+ while counter < timeout && !message_found
100
+ @gmail.inbox.emails.each do |current_mail|
101
+ next unless current_mail.subject.include?(title)
102
+
103
+ message = MailMessage.new(current_mail.subject,
104
+ current_mail.html_part.body)
105
+ return message
106
+ end
107
+ sleep period
108
+ refresh
109
+ end
110
+ raise "Message with title: #{title} not found for #{timeout * 60} seconds"
111
+ end
112
+
113
+ # Get body message by title
114
+ # @param [String] current_portal_full portal name to search
115
+ # @param [String] title1 title to filter
116
+ # @param [String] title2 title to filter
117
+ # @param [Boolean] delete this message
118
+ # @param [Boolean] _to_mail unused
119
+ # @return [MailMessage] found message
120
+ def get_body_message_by_title_from_mail(current_portal_full, title1 = 'Welcome to ONLYOFFICE™ Portal!', title2 = 'Добро пожаловать на портал TeamLab!', delete = true, _to_mail = nil)
121
+ mail_not_found = true
122
+ attempt = 0
123
+ while mail_not_found
124
+ messages_array = mailbox.emails(:unread, search: current_portal_full.to_s)
125
+ messages_array.each do |current_mail|
126
+ current_subject = current_mail.message.subject
127
+ a = current_subject.include? title1
128
+ b = current_subject.include? title2
129
+ if a || b
130
+ current_subject = begin
131
+ current_mail.html_part.body.decoded.force_encoding('utf-8').encode('UTF-8')
132
+ rescue StandardError
133
+ Exception
134
+ end
135
+ current_mail.delete! if current_subject == 'Welcome to Your TeamLab Portal!'
136
+ if current_subject.include? current_portal_full
137
+ current_mail.delete! if delete
138
+ return current_subject
139
+ end
140
+ else
141
+ raise "Message with title: #{title1} not found after #{attempt} attempt" if attempt == 10
142
+
143
+ sleep 10
144
+ attempt += 1
145
+ current_mail.delete! if delete
146
+ end
147
+ end
148
+ end
149
+ end
150
+
151
+ # Get mail body by title
152
+ # @param [String] portal_address to filter
153
+ # @param [String] subject to find
154
+ # @param [Integer] time to wait
155
+ # @param [Boolean] delete if needed
156
+ # @return [MailMessage] found message
157
+ def get_body_message_by_title(portal_address, subject, time = 300, delete = true)
158
+ start_time = Time.now
159
+ flags = block_given? ? yield : { search: portal_address.to_s }
160
+ while Time.now - start_time < time
161
+ messages_array = mailbox.emails(:unread, flags)
162
+ messages_array.each do |current_mail|
163
+ next unless message_found?(current_mail.message.subject, subject)
164
+
165
+ body = begin
166
+ current_mail.html_part.body.decoded.force_encoding('utf-8').encode('UTF-8')
167
+ rescue StandardError
168
+ Exception
169
+ end
170
+ current_mail.delete! if delete
171
+ return body
172
+ end
173
+ end
174
+ nil
175
+ end
176
+
177
+ # @return [Array<Message>] list of underad messages
178
+ def get_unread_messages
179
+ refresh
180
+ array_of_mail = []
181
+ mailbox.emails(:unread).reverse_each do |current_mail|
182
+ current_title = current_mail.message.subject
183
+ current_subject = begin
184
+ current_mail.html_part.body.decoded
185
+ .force_encoding('utf-8').encode('UTF-8')
186
+ rescue StandardError
187
+ Exception
188
+ end
189
+ current_mail.mark(:unread)
190
+ reply_to = current_mail.reply_to[0] unless current_mail.reply_to == []
191
+ array_of_mail << MailMessage.new(current_title,
192
+ current_subject,
193
+ reply_to)
194
+ end
195
+ array_of_mail
196
+ end
197
+
198
+ # received mail in format "Thu, 23 Jan 2014 15:34:57 +0400". Day of week may\may not be present
199
+ # @param [String] date_str original string
200
+ # @return [Hash] date
201
+ def get_current_date(date_str)
202
+ data_arr = date_str.split.reverse
203
+ { day: data_arr[4].to_i, hour: data_arr[1].split(':')[0].to_i, minute: data_arr[1].split(':')[1].to_i }
204
+ end
205
+
206
+ # Check unread messages for message
207
+ # @param [String] mail_message to find
208
+ # @return [Boolean] result
209
+ def check_unread_messages_for_message(mail_message)
210
+ messages = get_unread_messages
211
+ timer = 0
212
+ message_found = false
213
+ while timer < @timeout_for_mail && message_found == false
214
+ messages.each do |current_unread_mail|
215
+ # p current_unread_mail
216
+ if current_unread_mail == mail_message
217
+ delete_messages(current_unread_mail)
218
+ return true
219
+ end
220
+ end
221
+ messages = get_unread_messages
222
+ timer += 1
223
+ end
224
+ false
225
+ end
226
+
227
+ # Check message for message with portal
228
+ # @param [String] message title
229
+ # @param [String] current_portal_full_name name
230
+ # @param [Integer] times to wait
231
+ # @return [Boolean] is messag found
232
+ def check_messages_for_message_with_portal_address(message, current_portal_full_name, times: 300)
233
+ times.times do
234
+ messages_array = mailbox.emails(:unread, search: current_portal_full_name.to_s)
235
+ messages_array.each do |current_mail|
236
+ next unless message_found?(current_mail.message.subject, message.title)
237
+
238
+ OnlyofficeLoggerHelper.log('Email successfully found and removed')
239
+ current_mail.delete!
240
+ return true
241
+ end
242
+ sleep 1
243
+ end
244
+ false
245
+ end
246
+
247
+ # Delete message with portal address
248
+ # @param [String] message title to delete
249
+ # @param [String] current_portal_full_name to delete
250
+ # @return [nil]
251
+ def delete_message_with_portal_address(message, current_portal_full_name)
252
+ 300.times do
253
+ messages_array = mailbox.emails(:unread, search: current_portal_full_name.to_s)
254
+ messages_array.each do |current_mail|
255
+ if message.title == current_mail.message.subject
256
+ current_mail.delete!
257
+ return true
258
+ else
259
+ begin
260
+ current_mail.mark(:unread)
261
+ rescue StandardError
262
+ Exception
263
+ end
264
+ end
265
+ end
266
+ end
267
+ end
268
+
269
+ # Delete specific message
270
+ # @param [String] message title to delete
271
+ # @return [nil]
272
+ def delete_messages(message)
273
+ message = [message] unless message.is_a?(Array)
274
+ message.each do |message_to_delete|
275
+ mailbox.emails(:unread).each do |current_mail|
276
+ if message_to_delete.title == current_mail.message.subject
277
+ current_mail.delete!
278
+ else
279
+ begin
280
+ current_mail.mark(:unread)
281
+ rescue StandardError
282
+ Exception
283
+ end
284
+ end
285
+ end
286
+ end
287
+ end
288
+
289
+ # Delete all messsages
290
+ # @return [nil]
291
+ def delete_all_messages
292
+ OnlyofficeLoggerHelper.log("Start deleting all messaged on mail: #{@user}")
293
+ mailbox.emails.each(&:delete!)
294
+ @gmail.logout
295
+ OnlyofficeLoggerHelper.log("Finished deleting all messaged on mail: #{@user}")
296
+ end
297
+
298
+ # Archive all inbox
299
+ # @return [nil]
300
+ def archive_inbox
301
+ OnlyofficeLoggerHelper.log("Start achieving all messaged in inbox on mail: #{@user}")
302
+ @gmail.inbox.emails.each(&:archive!) if mail_inbox_count.nonzero?
303
+ OnlyofficeLoggerHelper.log("Finished achieving all messaged in inbox on mail: #{@user}")
304
+ end
305
+
306
+ # @param [String] contain_string message to delete
307
+ # @return [nil]
308
+ def delete_all_message_contains(contain_string)
309
+ OnlyofficeLoggerHelper.log("Messages containing #{contain_string} will be deleted")
310
+ messages_array = mailbox.emails(:unread, search: contain_string)
311
+ messages_array.each(&:delete!)
312
+ end
313
+
314
+ # Reply to mail
315
+ # @param [String] mail_to_reply
316
+ # @param [String] reply_body to do
317
+ # @return [nil]
318
+ def reply_mail(mail_to_reply, reply_body)
319
+ messages = get_unread_messages
320
+ timer = 0
321
+ message_found = false
322
+ while timer < @timeout_for_mail && message_found == false
323
+ messages.each do |current_unread_mail|
324
+ next unless current_unread_mail == mail_to_reply
325
+
326
+ email = @gmail.compose do
327
+ to("#{current_unread_mail.reply_to.mailbox}@#{current_unread_mail.reply_to.host}".to_s)
328
+ subject "Re: #{current_unread_mail.title}"
329
+ body reply_body
330
+ end
331
+ email.deliver!
332
+ delete_messages(current_unread_mail)
333
+ return true
334
+ end
335
+ messages = get_unread_messages
336
+ timer += 1
337
+ end
338
+ false
339
+ end
340
+
341
+ # Send mail
342
+ # @param [String] email to send
343
+ # @param [String] title to send
344
+ # @param [String] body to send
345
+ # @param [String] attachment to send
346
+ # @return [nil]
347
+ def send_mail(email, title, body, attachment = nil)
348
+ email = @gmail.compose do
349
+ to email
350
+ subject title
351
+ body body
352
+ add_file attachment unless attachment.nil?
353
+ end
354
+ email.deliver!
355
+ OnlyofficeLoggerHelper.log("send_mail(#{email}, #{title}, #{body}, #{attachment})")
356
+ end
357
+
358
+ # Send notification
359
+ # @param [String] email to send
360
+ # @param [String] test_name - name of test
361
+ # @param [String] error - error to send
362
+ # @param [String] mail_title to send
363
+ # @return [nil]
364
+ def send_notification(email, test_name, error, mail_title = 'Teamlab Daily Check')
365
+ body = "Fail in #{test_name}\n" \
366
+ "Error text: \n\t #{error}"
367
+ send_mail(email, mail_title, body)
368
+ end
369
+
370
+ # @return [Integer] count message in inbox
371
+ def mail_inbox_count
372
+ count = @gmail.inbox.emails.count
373
+ OnlyofficeLoggerHelper.log("#{count} mails in inbox of #{@user}")
374
+ count
375
+ end
376
+
377
+ # List all mail in label with date
378
+ # @param [String] string label
379
+ # @param [Date] date_start to find
380
+ # @param [Date] date_end to find
381
+ # @param [String] to whom message send
382
+ # @return [Array<MailMessage>] list of results
383
+ def mail_in_label_with_date(string, date_start, date_end, to = nil)
384
+ array_of_mail = []
385
+ @gmail.mailbox(string).emails(after: date_start, before: date_end, to: to).each do |current_mail|
386
+ current_title = current_mail.message.subject
387
+ current_subject = begin
388
+ current_mail.html_part.body.decoded
389
+ .force_encoding('utf-8').encode('UTF-8')
390
+ rescue StandardError
391
+ Exception
392
+ end
393
+ reply_to = current_mail.reply_to[0] unless current_mail.reply_to.nil?
394
+ array_of_mail << MailMessage.new(current_title,
395
+ current_subject,
396
+ reply_to, Time.parse(current_mail.date))
397
+ end
398
+ array_of_mail
399
+ end
400
+
401
+ # Delete all mail from sender
402
+ # @param [String] string messanger
403
+ # @return [nil]
404
+ def delete_from_sender(string)
405
+ mailbox.emails(from: string).each(&:delete!)
406
+ end
407
+
408
+ # Mark all messages as unread
409
+ # @return [nil]
410
+ def mark_all_unread
411
+ mailbox.emails.each do |current_mail|
412
+ current_mail.mark(:unread)
413
+ end
414
+ end
415
+
416
+ # Send mail test result
417
+ # @param [String] mail to send
418
+ # @param [String] title to send
419
+ # @param [Array<String>] array_results test data
420
+ # @return [nil]
421
+ def send_mail_test_result(mail, title, array_results)
422
+ body = ''
423
+ array_results.each do |current_result|
424
+ current_result[1] = 'OK' if current_result[1].nil?
425
+ body = "#{body}#{current_result[0]}\t#{current_result[1]}\n"
426
+ end
427
+
428
+ if mail.is_a?(Array)
429
+ mail.each do |current_mail_user|
430
+ email = @gmail.compose do
431
+ to current_mail_user
432
+ subject title
433
+ body body
434
+ end
435
+ email.deliver!
436
+ end
437
+ else
438
+ email = @gmail.compose do
439
+ to mail
440
+ subject title
441
+ body body
442
+ end
443
+ email.deliver!
444
+ end
445
+ end
446
+
447
+ # If not returning nested levels please change content of file
448
+ # +/home/#{user}/.rvm/gems/#{gemset}/gems/gmail-0.4.0/lib/gmail/labels.rb+
449
+ # to content of that file: https://github.com/jgrevich/gmail/blob/6ed88950bd631696aeb1bc4b9133b03d1ae4055f/lib/gmail/labels.rb
450
+ # @return [Array<String>] list of all labels
451
+ def get_labels
452
+ @gmail.labels.all
453
+ end
454
+
455
+ # Get list of unread mails with tags
456
+ # @return [Array<MailMessage>] result
457
+ def get_unread_mails_with_tags
458
+ refresh
459
+ array_of_mail = []
460
+ mailbox.emails(:unread).each do |current_mail|
461
+ current_title = current_mail.message.subject
462
+ current_subject = begin
463
+ current_mail.html_part.body.decoded.force_encoding('utf-8').encode('UTF-8')
464
+ rescue StandardError
465
+ Exception
466
+ end
467
+ current_mail.mark(:unread)
468
+ reply_to = current_mail.reply_to[0] unless current_mail.reply_to.nil?
469
+ current_tag = current_mail
470
+ array_of_mail << MailMessage.new(current_title, current_subject, reply_to, current_tag)
471
+ end
472
+ array_of_mail
473
+ end
474
+
475
+ # Get body by email subject
476
+ # @param [String] subject to get
477
+ # @param [String] portal_name to filter
478
+ # @return [String] body
479
+ def get_body_by_subject_email(subject, portal_name)
480
+ p 'get_body_by_subject_email'
481
+ 300.times do |current|
482
+ p "current time: #{current}"
483
+ messages_array = mailbox.emails(:unread, search: portal_name.to_s)
484
+ messages_array.each do |current_mail|
485
+ current_subject = current_mail.message.subject
486
+ p "current_subject: #{current_subject}"
487
+ if message_found?(current_subject, subject)
488
+ body_text = current_mail.message.text_part.body.decoded.force_encoding('utf-8').encode('UTF-8').gsub(/\s+/, ' ').strip
489
+ return body_text
490
+ end
491
+ end
492
+ end
493
+ nil
494
+ end
495
+
496
+ private
497
+
498
+ def message_found?(given, needed)
499
+ given.to_s.upcase.include? needed.to_s.upcase
500
+ end
501
+ end
502
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'email_account/mail_account'
4
+
5
+ module OnlyofficeGmailHelper
6
+ # Class for storing default mail accounts
7
+ class EmailAccount
8
+ # Read default values for account
9
+ # @return [Hash] result
10
+ def self.read_defaults
11
+ return read_env_defaults if read_env_defaults
12
+
13
+ yaml = YAML.load_file("#{Dir.home}/.gem-onlyoffice_gmail_helper/config.yml")
14
+ { user: yaml['user'], password: yaml['password'] }
15
+ rescue Errno::ENOENT
16
+ raise Errno::ENOENT, 'No config found. Please create ~/.gem-onlyoffice_gmail_helper/config.yml'
17
+ end
18
+
19
+ # Read keys from env variables
20
+ # @return [Hash]
21
+ def self.read_env_defaults
22
+ return false unless ENV['GMAIL_USER'] && ENV['GMAIL_PASSWORD']
23
+
24
+ { user: ENV['GMAIL_USER'], password: ENV['GMAIL_PASSWORD'] }
25
+ end
26
+
27
+ # @return [MailAccount] default account
28
+ GMAIL_DEFAULT = MailAccount.new(read_defaults[:user], read_defaults[:password])
29
+ end
30
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OnlyofficeGmailHelper
4
+ # Class for storing mail account data
5
+ class MailAccount
6
+ # @return [String] user name
7
+ attr_accessor :username
8
+ alias login username
9
+ # @return [String] user password
10
+ attr_accessor :password
11
+
12
+ def initialize(user, pass)
13
+ @username = user
14
+ @password = pass
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OnlyofficeGmailHelper
4
+ # Class for working with single message
5
+ class MailMessage
6
+ # @return [String] mail title
7
+ attr_accessor :title
8
+ # @return [String] mail content
9
+ attr_accessor :content
10
+ # @return [String] reply to field
11
+ attr_accessor :reply_to
12
+ # @return [String] date field
13
+ attr_accessor :date
14
+ # @return [String] tags field
15
+ attr_accessor :tags
16
+
17
+ def initialize(title, content = nil, reply_to = nil, date = nil, tags = nil)
18
+ @title = title
19
+ @content = content
20
+ @reply_to = reply_to
21
+ unless @content.nil? && !content.is_a?(Regexp)
22
+ begin
23
+ @content.delete!("\n")
24
+ rescue StandardError
25
+ Exception
26
+ end
27
+ begin
28
+ @content.gsub!("\r\n", '')
29
+ rescue StandardError
30
+ Exception
31
+ end
32
+ begin
33
+ @content.gsub!("\n\n", '')
34
+ rescue StandardError
35
+ Exception
36
+ end
37
+ begin
38
+ @content.gsub!('&#8220;', '"')
39
+ rescue StandardError
40
+ Exception
41
+ end
42
+ begin
43
+ @content.gsub!('&#8221;', '"')
44
+ rescue StandardError
45
+ Exception
46
+ end
47
+ begin
48
+ @content.tr!("\r", ' ')
49
+ rescue StandardError
50
+ Exception
51
+ end
52
+ end
53
+ @date = date
54
+ @tags = tags
55
+ end
56
+
57
+ # Compare message with other
58
+ # @param [MailMessage] other to compare
59
+ # @return [Boolean] result
60
+ def ==(other)
61
+ compare_title = (title.delete("\n") == other.title.delete("\n"))
62
+ compare_body = true
63
+ compare_body = false if (StaticDataTeamLab.check_email_body if defined?(StaticDataTeamLab.check_email_body)) && compare_title && (other.content =~ content).nonzero?
64
+ compare_title && compare_body
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Main namespace of gem
4
+ module OnlyofficeGmailHelper
5
+ # @return [String] name of gem
6
+ NAME = 'onlyoffice_gmail_helper'
7
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OnlyofficeGmailHelper
4
+ # @return [String] versio of gem
5
+ VERSION = '0.2.0'
6
+ end
metadata ADDED
@@ -0,0 +1,215 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: onlyoffice_gmail_helper
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - ONLYOFFICE
8
+ - Pavel Lobashov
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2021-01-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: gmail
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '0.6'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '0.6'
28
+ - !ruby/object:Gem::Dependency
29
+ name: onlyoffice_logger_helper
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '1'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '1'
42
+ - !ruby/object:Gem::Dependency
43
+ name: overcommit
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: rake
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '13'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '13'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rspec
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '3'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '3'
84
+ - !ruby/object:Gem::Dependency
85
+ name: rubocop
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '1'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '1'
98
+ - !ruby/object:Gem::Dependency
99
+ name: rubocop-performance
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: '1'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: '1'
112
+ - !ruby/object:Gem::Dependency
113
+ name: rubocop-rake
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - "~>"
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - "~>"
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rubocop-rspec
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: '2'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: '2'
140
+ - !ruby/object:Gem::Dependency
141
+ name: simplecov
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - "~>"
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ - !ruby/object:Gem::Dependency
155
+ name: yard
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - "~>"
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ version: 0.9.20
164
+ type: :development
165
+ prerelease: false
166
+ version_requirements: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - "~>"
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: 0.9.20
174
+ description: ONLYOFFICE Helper Gem for GMail. Used in QA
175
+ email:
176
+ - shockwavenn@gmail.com
177
+ executables: []
178
+ extensions: []
179
+ extra_rdoc_files: []
180
+ files:
181
+ - lib/onlyoffice_gmail_helper.rb
182
+ - lib/onlyoffice_gmail_helper/email_account.rb
183
+ - lib/onlyoffice_gmail_helper/email_account/mail_account.rb
184
+ - lib/onlyoffice_gmail_helper/mail_message.rb
185
+ - lib/onlyoffice_gmail_helper/name.rb
186
+ - lib/onlyoffice_gmail_helper/version.rb
187
+ homepage: https://github.com/ONLYOFFICE-QA/onlyoffice_gmail_helper
188
+ licenses:
189
+ - AGPL-3.0
190
+ metadata:
191
+ bug_tracker_uri: https://github.com/ONLYOFFICE-QA/onlyoffice_gmail_helper/issues
192
+ changelog_uri: https://github.com/ONLYOFFICE-QA/onlyoffice_gmail_helper/blob/master/CHANGELOG.md
193
+ documentation_uri: https://www.rubydoc.info/gems/onlyoffice_gmail_helper
194
+ homepage_uri: https://github.com/ONLYOFFICE-QA/onlyoffice_gmail_helper
195
+ source_code_uri: https://github.com/ONLYOFFICE-QA/onlyoffice_gmail_helper
196
+ post_install_message:
197
+ rdoc_options: []
198
+ require_paths:
199
+ - lib
200
+ required_ruby_version: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - ">="
203
+ - !ruby/object:Gem::Version
204
+ version: '2.5'
205
+ required_rubygems_version: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - ">="
208
+ - !ruby/object:Gem::Version
209
+ version: '0'
210
+ requirements: []
211
+ rubygems_version: 3.1.4
212
+ signing_key:
213
+ specification_version: 4
214
+ summary: ONLYOFFICE Helper Gem for GMail
215
+ test_files: []