onlyoffice_iredmail_helper 0.2.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/lib/onlyoffice_iredmail_helper.rb +249 -0
- data/lib/onlyoffice_iredmail_helper/mail_getters.rb +61 -0
- data/lib/onlyoffice_iredmail_helper/mailboxes_methods.rb +40 -0
- data/lib/onlyoffice_iredmail_helper/message_methods.rb +17 -0
- data/lib/onlyoffice_iredmail_helper/name.rb +6 -0
- data/lib/onlyoffice_iredmail_helper/version.rb +6 -0
- metadata +223 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 9871762acd906ea08deb24f3f27ad70a705a77381dc78efe717a2c3fa543a644
|
|
4
|
+
data.tar.gz: d6ec13250ef152c8bc686947358c328b60c3124ccc94172134a58840c2d9bf33
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 0b9640e4a34616eba140e99dd20f1e25438fbc1a5c09cce770b25f9a5d713af922e965ee8f50453f25d5ec81a306d06ba0b53cad193fe853680970b1ca7239e2
|
|
7
|
+
data.tar.gz: e0cb81aaca023ab6c20f9e3640b27ec4d5ae56140b68ba7010b33902f35ecb3a4265674771d7d86e3185834d307978e9d8fc63caa4fd05ea01c60733d036a8ef
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'date'
|
|
4
|
+
require 'mail'
|
|
5
|
+
require 'net/imap'
|
|
6
|
+
require 'net/smtp'
|
|
7
|
+
require 'onlyoffice_logger_helper'
|
|
8
|
+
require 'time'
|
|
9
|
+
require 'yaml'
|
|
10
|
+
require_relative 'onlyoffice_iredmail_helper/mailboxes_methods'
|
|
11
|
+
require_relative 'onlyoffice_iredmail_helper/mail_getters'
|
|
12
|
+
require_relative 'onlyoffice_iredmail_helper/message_methods'
|
|
13
|
+
require_relative 'onlyoffice_iredmail_helper/version'
|
|
14
|
+
|
|
15
|
+
# Namespace of Gem
|
|
16
|
+
module OnlyofficeIredmailHelper
|
|
17
|
+
# Class for working with mail
|
|
18
|
+
class IredMailHelper
|
|
19
|
+
include MailboxesMethods
|
|
20
|
+
include MailGetters
|
|
21
|
+
include MessageMethods
|
|
22
|
+
attr_reader :username
|
|
23
|
+
|
|
24
|
+
def initialize(options = {})
|
|
25
|
+
read_defaults
|
|
26
|
+
@domainname = options[:domainname] || @default_domain
|
|
27
|
+
@username = options[:username] || @default_user
|
|
28
|
+
@password = options[:password] || @default_password
|
|
29
|
+
@subject = options[:subject] || @default_subject
|
|
30
|
+
@body = options[:body]
|
|
31
|
+
@mailbox_for_archive = 'checked'
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# @return [String] inspect info
|
|
35
|
+
def inspect
|
|
36
|
+
"IredMailHelper domain: #{@domainname}, " \
|
|
37
|
+
"user: #{@username}, " \
|
|
38
|
+
"subject: #{@subject}"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Login to email via IMAP
|
|
42
|
+
# @return [nil]
|
|
43
|
+
def login
|
|
44
|
+
@imap = Net::IMAP.new(@domainname)
|
|
45
|
+
@imap.authenticate('LOGIN', @username, @password)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Form a email string
|
|
49
|
+
# @param msg_data [Hash] params
|
|
50
|
+
# @return [String] formed mail message
|
|
51
|
+
def create_msg(msg_data = {})
|
|
52
|
+
<<~END_OF_MESSAGE
|
|
53
|
+
From: #{@username}
|
|
54
|
+
To: #{msg_data[:mailto]}
|
|
55
|
+
Subject: #{msg_data[:subject]}
|
|
56
|
+
Date: #{Time.now.rfc2822}
|
|
57
|
+
Message-Id: "#{Digest::SHA2.hexdigest(Time.now.to_i.to_s)}@#{@username.split('@').last}"
|
|
58
|
+
|
|
59
|
+
#{msg_data[:body]}
|
|
60
|
+
END_OF_MESSAGE
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Send mail
|
|
64
|
+
# @param options [Hash] hash with params
|
|
65
|
+
# @return [nil]
|
|
66
|
+
def send_mail(options = {})
|
|
67
|
+
options[:subject] ||= @default_subject
|
|
68
|
+
options[:body] ||= @default_body
|
|
69
|
+
options[:mailto] ||= @default_user
|
|
70
|
+
smtp = Net::SMTP.start(@domainname, 25, @username, @username, @password, :login)
|
|
71
|
+
smtp.send_message create_msg(options), @username, options[:mailto]
|
|
72
|
+
smtp.finish
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Delete all messages in inbox
|
|
76
|
+
# @return [nil]
|
|
77
|
+
def delete_all_messages
|
|
78
|
+
login
|
|
79
|
+
@imap.select('INBOX')
|
|
80
|
+
@imap.store(@imap.search(['ALL']), '+FLAGS', [:Deleted]) unless @imap.search(['ALL']).empty?
|
|
81
|
+
OnlyofficeLoggerHelper.log('Delete all messages')
|
|
82
|
+
close
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Delete email by subject
|
|
86
|
+
# @param subject [String] email title
|
|
87
|
+
# @return [nil]
|
|
88
|
+
def delete_email_by_subject(subject)
|
|
89
|
+
login
|
|
90
|
+
@imap.select('INBOX')
|
|
91
|
+
id_emails = @imap.search(['SUBJECT', subject.dup.force_encoding('ascii-8bit')])
|
|
92
|
+
@imap.store(id_emails, '+FLAGS', [:Deleted]) unless id_emails.empty?
|
|
93
|
+
close
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Get email
|
|
97
|
+
# @param options [Hash] options of get
|
|
98
|
+
# @param times [Integer] count to check
|
|
99
|
+
# @return [Hash] mail
|
|
100
|
+
def mail_by_subject(options = {}, times = 300)
|
|
101
|
+
login
|
|
102
|
+
@imap.select('INBOX')
|
|
103
|
+
start_time = Time.now
|
|
104
|
+
while Time.now - start_time < times
|
|
105
|
+
get_emails_search_or_new(options).each do |message_id|
|
|
106
|
+
mail = get_mail_data(message_id)
|
|
107
|
+
mail_subject_found = mail[:subject].to_s.upcase
|
|
108
|
+
mail_subject_to_be_found = options[:subject].to_s.upcase
|
|
109
|
+
next unless mail_subject_found.include? mail_subject_to_be_found
|
|
110
|
+
|
|
111
|
+
if options[:move_out]
|
|
112
|
+
move_out_message(message_id)
|
|
113
|
+
else
|
|
114
|
+
mark_message_as_seen(message_id)
|
|
115
|
+
end
|
|
116
|
+
return mail
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
nil
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Check if message exists by params
|
|
123
|
+
# @param options [Hash] options of get
|
|
124
|
+
# @param times [Integer] count to check
|
|
125
|
+
# @return [True, False] result of check
|
|
126
|
+
def check_email_by_subject(options = {}, times = 300, move_out = false)
|
|
127
|
+
login
|
|
128
|
+
@imap.select('INBOX')
|
|
129
|
+
start_time = Time.now
|
|
130
|
+
while Time.now - start_time < times
|
|
131
|
+
get_emails_search_or_new(options).each do |message_id|
|
|
132
|
+
string_found = get_mail_data(message_id, options[:search])[:subject].to_s.upcase.gsub(/\s+/, ' ')
|
|
133
|
+
string_to_be_found = options[:subject].to_s.upcase.gsub(/\s+/, ' ')
|
|
134
|
+
next unless string_found.include? string_to_be_found
|
|
135
|
+
|
|
136
|
+
if move_out
|
|
137
|
+
move_out_message(message_id)
|
|
138
|
+
else
|
|
139
|
+
mark_message_as_seen(message_id)
|
|
140
|
+
end
|
|
141
|
+
return true
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
false
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# Get email by subject
|
|
148
|
+
# @param options [Hash] options of get
|
|
149
|
+
# @param times [Integer] count to check
|
|
150
|
+
# @param move_out [True, False] should message to move out
|
|
151
|
+
# @return [Hash] mail
|
|
152
|
+
def get_email_by_subject(options = {}, times = 300, move_out = false)
|
|
153
|
+
login
|
|
154
|
+
@imap.select('INBOX')
|
|
155
|
+
start_time = Time.now
|
|
156
|
+
while Time.now - start_time < times
|
|
157
|
+
get_emails_search_or_new(options).each do |message_id|
|
|
158
|
+
mail = get_mail_data(message_id)
|
|
159
|
+
string_found = mail[:subject].to_s.upcase.gsub(/\s+/, ' ')
|
|
160
|
+
string_to_be_found = options[:subject].to_s.upcase.gsub(/\s+/, ' ')
|
|
161
|
+
next unless string_found.include? string_to_be_found
|
|
162
|
+
|
|
163
|
+
if move_out
|
|
164
|
+
move_out_message(message_id)
|
|
165
|
+
else
|
|
166
|
+
mark_message_as_seen(message_id)
|
|
167
|
+
end
|
|
168
|
+
return mail
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
nil
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
private
|
|
175
|
+
|
|
176
|
+
# Correct close of mail account
|
|
177
|
+
# @return [Void]
|
|
178
|
+
def close
|
|
179
|
+
@imap.close
|
|
180
|
+
@imap.logout
|
|
181
|
+
@imap.disconnect
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
# Move out message to `checked` directory
|
|
185
|
+
# @param message_id [String] id of message
|
|
186
|
+
# @return [Void]
|
|
187
|
+
def move_out_message(message_id)
|
|
188
|
+
create_mailbox(@mailbox_for_archive) unless mailboxes.include?(@mailbox_for_archive)
|
|
189
|
+
|
|
190
|
+
login
|
|
191
|
+
@imap.select('INBOX')
|
|
192
|
+
@imap.copy(message_id, @mailbox_for_archive)
|
|
193
|
+
@imap.store(message_id, '+FLAGS', [:Deleted])
|
|
194
|
+
@imap.expunge
|
|
195
|
+
close
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
# Get email list via search or all unseen
|
|
199
|
+
# @param options [Hash] options to search
|
|
200
|
+
# @return [Array<Mail>] list of mails
|
|
201
|
+
def get_emails_search_or_new(options)
|
|
202
|
+
if options[:search]
|
|
203
|
+
@imap.search([(options[:search_type] || 'BODY').to_s.upcase, options[:search]])
|
|
204
|
+
else
|
|
205
|
+
@imap.search(['UNSEEN'])
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
# Get mail data by mail id
|
|
210
|
+
# @param message_id [Integer] id of message
|
|
211
|
+
# @param search [String] param to search
|
|
212
|
+
# @return [Hash] found data
|
|
213
|
+
def get_mail_data(message_id, search = nil)
|
|
214
|
+
msg = @imap.fetch(message_id, 'RFC822')[0].attr['RFC822']
|
|
215
|
+
mail = Mail.read_from_string(msg)
|
|
216
|
+
subject = mail.subject.force_encoding('utf-8')
|
|
217
|
+
body = mail.text_part
|
|
218
|
+
body = body.body.to_s.gsub(/\s+/, ' ').strip.force_encoding('utf-8') if body
|
|
219
|
+
html_body = mail.html_part
|
|
220
|
+
html_body = html_body.body.to_s.gsub(/\s+/, ' ').strip.force_encoding('utf-8') if html_body
|
|
221
|
+
mark_message_as_seen(message_id, close_connection: false) unless search
|
|
222
|
+
{ subject: subject, body: body, html_body: html_body }
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
# Get S3 key and S3 private key
|
|
226
|
+
# @return [Array <String>] list of keys
|
|
227
|
+
def read_defaults
|
|
228
|
+
return if read_env_defaults
|
|
229
|
+
|
|
230
|
+
yaml = YAML.load_file("#{Dir.home}/.gem-onlyoffice_iredmail_helper/config.yml")
|
|
231
|
+
@default_domain = yaml['domain']
|
|
232
|
+
@default_user = yaml['user']
|
|
233
|
+
@default_password = yaml['password'].to_s
|
|
234
|
+
@default_subject = yaml['subject']
|
|
235
|
+
rescue Errno::ENOENT
|
|
236
|
+
raise Errno::ENOENT, 'No config found. Please create ~/.gem-onlyoffice_iredmail_helper/config.yml'
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
# Read keys from env variables
|
|
240
|
+
def read_env_defaults
|
|
241
|
+
return false unless ENV['IREDMAIL_PASSWORD']
|
|
242
|
+
|
|
243
|
+
@default_domain = ENV['IREDMAIL_DOMAIN']
|
|
244
|
+
@default_user = ENV['IREDMAIL_USER']
|
|
245
|
+
@default_password = ENV['IREDMAIL_PASSWORD'].to_s
|
|
246
|
+
@default_subject = ENV['IREDMAIL_SUBJECT']
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module OnlyofficeIredmailHelper
|
|
4
|
+
# Modules to get mail by different parameters
|
|
5
|
+
module MailGetters
|
|
6
|
+
# Search email by specific date and message title
|
|
7
|
+
# @param date [Date] date to search
|
|
8
|
+
# @param subject [String] check if message is start_with this string
|
|
9
|
+
# @param timeout [Integer] How much time to wait in seconds
|
|
10
|
+
# @param range [Integer] range in days to extend specified date
|
|
11
|
+
# @return [Hash, False] mail data and false is none found
|
|
12
|
+
def email_by_date_and_title(date: Date.today,
|
|
13
|
+
subject: nil,
|
|
14
|
+
timeout: 300,
|
|
15
|
+
move_out: true,
|
|
16
|
+
range: 1)
|
|
17
|
+
start_date = (date - range).strftime('%d-%b-%Y')
|
|
18
|
+
end_date = (date + range).strftime('%d-%b-%Y')
|
|
19
|
+
|
|
20
|
+
login
|
|
21
|
+
@imap.select('INBOX')
|
|
22
|
+
start_time = Time.now
|
|
23
|
+
while (Time.now - start_time) < timeout
|
|
24
|
+
@imap.search(['SINCE', start_date, 'BEFORE', end_date]).each do |message_id|
|
|
25
|
+
mail_data = get_mail_data(message_id)
|
|
26
|
+
next unless mail_data[:subject].start_with?(subject)
|
|
27
|
+
|
|
28
|
+
if move_out
|
|
29
|
+
move_out_message(message_id)
|
|
30
|
+
else
|
|
31
|
+
mark_message_as_seen(message_id)
|
|
32
|
+
end
|
|
33
|
+
return mail_data
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
false
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Get email text body by subject
|
|
40
|
+
# @param options [Hash] options of get
|
|
41
|
+
# @param times [Integer] count to check
|
|
42
|
+
# @return [String] text body
|
|
43
|
+
def get_text_body_email_by_subject(options = {}, times = 300)
|
|
44
|
+
mail = mail_by_subject(options, times)
|
|
45
|
+
return nil unless mail
|
|
46
|
+
|
|
47
|
+
mail[:body]
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Get email html body by subject
|
|
51
|
+
# @param options [Hash] options of get
|
|
52
|
+
# @param times [Integer] count to check
|
|
53
|
+
# @return [String] html body
|
|
54
|
+
def get_html_body_email_by_subject(options = {}, times = 300)
|
|
55
|
+
mail = mail_by_subject(options, times)
|
|
56
|
+
return nil unless mail
|
|
57
|
+
|
|
58
|
+
mail[:html_body]
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module OnlyofficeIredmailHelper
|
|
4
|
+
# Methods for working with Mail account Mailboxes
|
|
5
|
+
module MailboxesMethods
|
|
6
|
+
# @return [Array<String>] list of folder names
|
|
7
|
+
def mailboxes
|
|
8
|
+
login
|
|
9
|
+
@imap.select('INBOX')
|
|
10
|
+
folders = @imap.list('%', '%').map(&:name)
|
|
11
|
+
close
|
|
12
|
+
OnlyofficeLoggerHelper.log("Get list of mailboxes: #{folders}")
|
|
13
|
+
folders
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Create new mailbox with name
|
|
17
|
+
# @param name [String] name of folder
|
|
18
|
+
# @return [nil]
|
|
19
|
+
def create_mailbox(name)
|
|
20
|
+
login
|
|
21
|
+
@imap.select('INBOX')
|
|
22
|
+
@imap.create(name)
|
|
23
|
+
close
|
|
24
|
+
OnlyofficeLoggerHelper.log("Created new mailbox: #{name}")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Delete mailbox with name
|
|
28
|
+
# @param name [String] name of folder
|
|
29
|
+
# @return [nil]
|
|
30
|
+
def delete_mailbox(name)
|
|
31
|
+
raise("There is no mailbox #{name} to delete") unless mailboxes.include?(name)
|
|
32
|
+
|
|
33
|
+
login
|
|
34
|
+
@imap.select('INBOX')
|
|
35
|
+
@imap.delete(name)
|
|
36
|
+
close
|
|
37
|
+
OnlyofficeLoggerHelper.log("Delete mailbox by name: #{name}")
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module OnlyofficeIredmailHelper
|
|
4
|
+
# Methods to work with messages
|
|
5
|
+
module MessageMethods
|
|
6
|
+
# Mark message as seen
|
|
7
|
+
# @param message_id [Integer] message to mark
|
|
8
|
+
# @param close_connection [True, False] should connection be closed
|
|
9
|
+
# @return [nil]
|
|
10
|
+
def mark_message_as_seen(message_id, close_connection: true)
|
|
11
|
+
login
|
|
12
|
+
@imap.select('INBOX')
|
|
13
|
+
@imap.store(message_id, '+FLAGS', [:Seen])
|
|
14
|
+
close if close_connection
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: onlyoffice_iredmail_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: 2020-09-17 00:00:00.000000000 Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
name: mail
|
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
|
17
|
+
requirements:
|
|
18
|
+
- - "~>"
|
|
19
|
+
- !ruby/object:Gem::Version
|
|
20
|
+
version: '2'
|
|
21
|
+
type: :runtime
|
|
22
|
+
prerelease: false
|
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
24
|
+
requirements:
|
|
25
|
+
- - "~>"
|
|
26
|
+
- !ruby/object:Gem::Version
|
|
27
|
+
version: '2'
|
|
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: codecov
|
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
|
45
|
+
requirements:
|
|
46
|
+
- - '='
|
|
47
|
+
- !ruby/object:Gem::Version
|
|
48
|
+
version: 0.2.11
|
|
49
|
+
type: :development
|
|
50
|
+
prerelease: false
|
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
52
|
+
requirements:
|
|
53
|
+
- - '='
|
|
54
|
+
- !ruby/object:Gem::Version
|
|
55
|
+
version: 0.2.11
|
|
56
|
+
- !ruby/object:Gem::Dependency
|
|
57
|
+
name: overcommit
|
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
|
59
|
+
requirements:
|
|
60
|
+
- - '='
|
|
61
|
+
- !ruby/object:Gem::Version
|
|
62
|
+
version: 0.55.0
|
|
63
|
+
type: :development
|
|
64
|
+
prerelease: false
|
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
66
|
+
requirements:
|
|
67
|
+
- - '='
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
version: 0.55.0
|
|
70
|
+
- !ruby/object:Gem::Dependency
|
|
71
|
+
name: rake
|
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
|
73
|
+
requirements:
|
|
74
|
+
- - '='
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
version: 13.0.1
|
|
77
|
+
type: :development
|
|
78
|
+
prerelease: false
|
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
80
|
+
requirements:
|
|
81
|
+
- - '='
|
|
82
|
+
- !ruby/object:Gem::Version
|
|
83
|
+
version: 13.0.1
|
|
84
|
+
- !ruby/object:Gem::Dependency
|
|
85
|
+
name: rspec
|
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
|
87
|
+
requirements:
|
|
88
|
+
- - '='
|
|
89
|
+
- !ruby/object:Gem::Version
|
|
90
|
+
version: 3.9.0
|
|
91
|
+
type: :development
|
|
92
|
+
prerelease: false
|
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
94
|
+
requirements:
|
|
95
|
+
- - '='
|
|
96
|
+
- !ruby/object:Gem::Version
|
|
97
|
+
version: 3.9.0
|
|
98
|
+
- !ruby/object:Gem::Dependency
|
|
99
|
+
name: rubocop
|
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
|
101
|
+
requirements:
|
|
102
|
+
- - '='
|
|
103
|
+
- !ruby/object:Gem::Version
|
|
104
|
+
version: 0.91.0
|
|
105
|
+
type: :development
|
|
106
|
+
prerelease: false
|
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
108
|
+
requirements:
|
|
109
|
+
- - '='
|
|
110
|
+
- !ruby/object:Gem::Version
|
|
111
|
+
version: 0.91.0
|
|
112
|
+
- !ruby/object:Gem::Dependency
|
|
113
|
+
name: rubocop-performance
|
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
|
115
|
+
requirements:
|
|
116
|
+
- - '='
|
|
117
|
+
- !ruby/object:Gem::Version
|
|
118
|
+
version: 1.8.0
|
|
119
|
+
type: :development
|
|
120
|
+
prerelease: false
|
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
122
|
+
requirements:
|
|
123
|
+
- - '='
|
|
124
|
+
- !ruby/object:Gem::Version
|
|
125
|
+
version: 1.8.0
|
|
126
|
+
- !ruby/object:Gem::Dependency
|
|
127
|
+
name: rubocop-rake
|
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
|
129
|
+
requirements:
|
|
130
|
+
- - '='
|
|
131
|
+
- !ruby/object:Gem::Version
|
|
132
|
+
version: 0.5.1
|
|
133
|
+
type: :development
|
|
134
|
+
prerelease: false
|
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
136
|
+
requirements:
|
|
137
|
+
- - '='
|
|
138
|
+
- !ruby/object:Gem::Version
|
|
139
|
+
version: 0.5.1
|
|
140
|
+
- !ruby/object:Gem::Dependency
|
|
141
|
+
name: rubocop-rspec
|
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
|
143
|
+
requirements:
|
|
144
|
+
- - '='
|
|
145
|
+
- !ruby/object:Gem::Version
|
|
146
|
+
version: 1.43.2
|
|
147
|
+
type: :development
|
|
148
|
+
prerelease: false
|
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
150
|
+
requirements:
|
|
151
|
+
- - '='
|
|
152
|
+
- !ruby/object:Gem::Version
|
|
153
|
+
version: 1.43.2
|
|
154
|
+
- !ruby/object:Gem::Dependency
|
|
155
|
+
name: simplecov
|
|
156
|
+
requirement: !ruby/object:Gem::Requirement
|
|
157
|
+
requirements:
|
|
158
|
+
- - '='
|
|
159
|
+
- !ruby/object:Gem::Version
|
|
160
|
+
version: 0.19.0
|
|
161
|
+
type: :development
|
|
162
|
+
prerelease: false
|
|
163
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
164
|
+
requirements:
|
|
165
|
+
- - '='
|
|
166
|
+
- !ruby/object:Gem::Version
|
|
167
|
+
version: 0.19.0
|
|
168
|
+
- !ruby/object:Gem::Dependency
|
|
169
|
+
name: yard
|
|
170
|
+
requirement: !ruby/object:Gem::Requirement
|
|
171
|
+
requirements:
|
|
172
|
+
- - '='
|
|
173
|
+
- !ruby/object:Gem::Version
|
|
174
|
+
version: 0.9.25
|
|
175
|
+
type: :development
|
|
176
|
+
prerelease: false
|
|
177
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
178
|
+
requirements:
|
|
179
|
+
- - '='
|
|
180
|
+
- !ruby/object:Gem::Version
|
|
181
|
+
version: 0.9.25
|
|
182
|
+
description: ONLYOFFICE Helper Gem for iRedMail. Used in QA
|
|
183
|
+
email:
|
|
184
|
+
- shockwavenn@gmail.com
|
|
185
|
+
executables: []
|
|
186
|
+
extensions: []
|
|
187
|
+
extra_rdoc_files: []
|
|
188
|
+
files:
|
|
189
|
+
- lib/onlyoffice_iredmail_helper.rb
|
|
190
|
+
- lib/onlyoffice_iredmail_helper/mail_getters.rb
|
|
191
|
+
- lib/onlyoffice_iredmail_helper/mailboxes_methods.rb
|
|
192
|
+
- lib/onlyoffice_iredmail_helper/message_methods.rb
|
|
193
|
+
- lib/onlyoffice_iredmail_helper/name.rb
|
|
194
|
+
- lib/onlyoffice_iredmail_helper/version.rb
|
|
195
|
+
homepage: https://github.com/ONLYOFFICE-QA/onlyoffice_iredmail_helper
|
|
196
|
+
licenses:
|
|
197
|
+
- AGPL-3.0
|
|
198
|
+
metadata:
|
|
199
|
+
bug_tracker_uri: https://github.com/ONLYOFFICE-QA/onlyoffice_iredmail_helper/issues
|
|
200
|
+
changelog_uri: https://github.com/ONLYOFFICE-QA/onlyoffice_iredmail_helper/blob/master/CHANGELOG.md
|
|
201
|
+
documentation_uri: https://www.rubydoc.info/gems/onlyoffice_iredmail_helper
|
|
202
|
+
homepage_uri: https://github.com/ONLYOFFICE-QA/onlyoffice_iredmail_helper
|
|
203
|
+
source_code_uri: https://github.com/ONLYOFFICE-QA/onlyoffice_iredmail_helper
|
|
204
|
+
post_install_message:
|
|
205
|
+
rdoc_options: []
|
|
206
|
+
require_paths:
|
|
207
|
+
- lib
|
|
208
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
209
|
+
requirements:
|
|
210
|
+
- - ">="
|
|
211
|
+
- !ruby/object:Gem::Version
|
|
212
|
+
version: '2.5'
|
|
213
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
214
|
+
requirements:
|
|
215
|
+
- - ">="
|
|
216
|
+
- !ruby/object:Gem::Version
|
|
217
|
+
version: '0'
|
|
218
|
+
requirements: []
|
|
219
|
+
rubygems_version: 3.1.2
|
|
220
|
+
signing_key:
|
|
221
|
+
specification_version: 4
|
|
222
|
+
summary: ONLYOFFICE Helper Gem for iRedMail
|
|
223
|
+
test_files: []
|