onlyoffice_iredmail_helper 0.2.1 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0e74825ff4765edfd4366de74a790cba2cc02da5af7d8c0ebc837306fd6aff2b
4
- data.tar.gz: 713bf750990f35c858ea73e6c79919dbc66952a39943140eb35b164fab213395
3
+ metadata.gz: aee7216a8ce608e7e08e4b625f0257abe4390bdf25587be65ec8c37a88d42911
4
+ data.tar.gz: e0aa9ec14113d81cdab2c1f879d59b9c4ff2b8d637ea2363684d93b79ae365df
5
5
  SHA512:
6
- metadata.gz: c89ff66486363120c32aff5c92c5f9729caf7ab0a897605bfa66404aee6057e00bc3de70f9a9aeea75b5a28eba42c777db55521a4ed9de3a183fad97c66e1bb9
7
- data.tar.gz: 35a00878f246327b96bdc8300b59126c0b0c93e87c9df83143ea964c902b1e3c05e9bd63736d959ca0d230450f273d32d861a171fa254c85c3b4c32c28f6f897
6
+ metadata.gz: 776d866b181e61ce9e1254096766f6578b9617a2fbd9f4f6c155de41bb9acf99f034330789109daf4ae21cf9c2dcb5ee425a070de6463f8977c6db38d3d5707e
7
+ data.tar.gz: 10eb89d22588e0275d83a7aeb1ee48600ffa9699817239a3396b16c25d22483a5d75636dc0bd34761de3196cc6e0a7488f54a9a0403d37b7777b560cf072ba4a
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OnlyofficeIredmailHelper
4
+ # Methods to delete messages
5
+ module DeleteMethods
6
+ # Delete all messages in inbox
7
+ # @return [nil]
8
+ def delete_all_messages
9
+ login
10
+ @imap.select('INBOX')
11
+ @imap.store(@imap.search(['ALL']), '+FLAGS', [:Deleted]) unless @imap.search(['ALL']).empty?
12
+ OnlyofficeLoggerHelper.log('Delete all messages')
13
+ close
14
+ end
15
+
16
+ # Delete email by subject
17
+ # @param subject [String] email title
18
+ # @return [nil]
19
+ def delete_email_by_subject(subject)
20
+ login
21
+ @imap.select('INBOX')
22
+ id_emails = @imap.search(['SUBJECT', subject.dup.force_encoding('ascii-8bit')])
23
+ @imap.store(id_emails, '+FLAGS', [:Deleted]) unless id_emails.empty?
24
+ close
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OnlyofficeIredmailHelper
4
+ # Methods to login and logout
5
+ module LoginMethods
6
+ # Login to email via IMAP
7
+ # @return [nil]
8
+ def login
9
+ return if @imap
10
+
11
+ @imap = Net::IMAP.new(@domainname)
12
+ @imap.authenticate('LOGIN', @username, @password)
13
+ end
14
+
15
+ private
16
+
17
+ # Correct close of mail account
18
+ # @return [Void]
19
+ def close
20
+ @imap.close
21
+ @imap.logout
22
+ @imap.disconnect
23
+ @imap = nil
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OnlyofficeIredmailHelper
4
+ # Methods to move message
5
+ module MoveMessageMethods
6
+ private
7
+
8
+ # Move out message to `checked` directory
9
+ # @param message_id [String] id of message
10
+ # @return [Void]
11
+ def move_out_message(message_id)
12
+ create_mailbox(@mailbox_for_archive) unless mailboxes.include?(@mailbox_for_archive)
13
+
14
+ login
15
+ @imap.select('INBOX')
16
+ @imap.copy(message_id, @mailbox_for_archive)
17
+ @imap.store(message_id, '+FLAGS', [:Deleted])
18
+ @imap.expunge
19
+ close
20
+ end
21
+
22
+ # Should message be moved out or marked as seen
23
+ # @param [String] message_id message to handle
24
+ # @param [Boolean] move_out should it be moved
25
+ # @return [Void]
26
+ def move_out_or_mark_seen(message_id, move_out)
27
+ if move_out
28
+ move_out_message(message_id)
29
+ else
30
+ mark_message_as_seen(message_id)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OnlyofficeIredmailHelper
4
+ # Methods to read default values
5
+ module ReadDefaultsMethods
6
+ private
7
+
8
+ # Get S3 key and S3 private key
9
+ # @return [Array <String>] list of keys
10
+ def read_defaults
11
+ return if read_env_defaults
12
+
13
+ yaml = YAML.load_file("#{Dir.home}/.gem-onlyoffice_iredmail_helper/config.yml")
14
+ @default_domain = yaml['domain']
15
+ @default_user = yaml['user']
16
+ @default_password = yaml['password'].to_s
17
+ @default_subject = yaml['subject']
18
+ rescue Errno::ENOENT
19
+ raise Errno::ENOENT, 'No config found. Please create ~/.gem-onlyoffice_iredmail_helper/config.yml'
20
+ end
21
+
22
+ # Read keys from env variables
23
+ def read_env_defaults
24
+ return false unless ENV['IREDMAIL_PASSWORD']
25
+
26
+ @default_domain = ENV['IREDMAIL_DOMAIN']
27
+ @default_user = ENV['IREDMAIL_USER']
28
+ @default_password = ENV['IREDMAIL_PASSWORD'].to_s
29
+ @default_subject = ENV['IREDMAIL_SUBJECT']
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OnlyofficeIredmailHelper
4
+ # Methods to send message
5
+ module SendMessageMethods
6
+ # Form a email string
7
+ # @param msg_data [Hash] params
8
+ # @return [String] formed mail message
9
+ def create_msg(msg_data = {})
10
+ <<~END_OF_MESSAGE
11
+ From: #{@username}
12
+ To: #{msg_data[:mailto]}
13
+ Subject: #{msg_data[:subject]}
14
+ Date: #{Time.now.rfc2822}
15
+ Message-Id: "#{Digest::SHA2.hexdigest(Time.now.to_i.to_s)}@#{@username.split('@').last}"
16
+
17
+ #{msg_data[:body]}
18
+ END_OF_MESSAGE
19
+ end
20
+
21
+ # Send mail
22
+ # @param options [Hash] hash with params
23
+ # @return [nil]
24
+ def send_mail(options = {})
25
+ options[:subject] ||= @default_subject
26
+ options[:body] ||= @default_body
27
+ options[:mailto] ||= @default_user
28
+ smtp = Net::SMTP.start(@domainname, 25, @username, @username, @password, :login)
29
+ smtp.send_message create_msg(options), @username, options[:mailto]
30
+ smtp.finish
31
+ end
32
+ end
33
+ end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module OnlyofficeIredmailHelper
4
4
  # [String] version of gem
5
- VERSION = '0.2.1'
5
+ VERSION = '0.3.0'
6
6
  end
@@ -7,18 +7,28 @@ require 'net/smtp'
7
7
  require 'onlyoffice_logger_helper'
8
8
  require 'time'
9
9
  require 'yaml'
10
+ require_relative 'onlyoffice_iredmail_helper/delete_methods'
11
+ require_relative 'onlyoffice_iredmail_helper/login_methods'
10
12
  require_relative 'onlyoffice_iredmail_helper/mailboxes_methods'
11
13
  require_relative 'onlyoffice_iredmail_helper/mail_getters'
12
14
  require_relative 'onlyoffice_iredmail_helper/message_methods'
15
+ require_relative 'onlyoffice_iredmail_helper/move_message_methods'
16
+ require_relative 'onlyoffice_iredmail_helper/read_defaults_methods'
17
+ require_relative 'onlyoffice_iredmail_helper/send_message_methods'
13
18
  require_relative 'onlyoffice_iredmail_helper/version'
14
19
 
15
20
  # Namespace of Gem
16
21
  module OnlyofficeIredmailHelper
17
22
  # Class for working with mail
18
23
  class IredMailHelper
24
+ include DeleteMethods
25
+ include LoginMethods
19
26
  include MailboxesMethods
20
27
  include MailGetters
21
28
  include MessageMethods
29
+ include MoveMessageMethods
30
+ include ReadDefaultsMethods
31
+ include SendMessageMethods
22
32
  attr_reader :username
23
33
 
24
34
  def initialize(options = {})
@@ -34,65 +44,8 @@ module OnlyofficeIredmailHelper
34
44
  # @return [String] inspect info
35
45
  def inspect
36
46
  "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
- return if @imap
45
-
46
- @imap = Net::IMAP.new(@domainname)
47
- @imap.authenticate('LOGIN', @username, @password)
48
- end
49
-
50
- # Form a email string
51
- # @param msg_data [Hash] params
52
- # @return [String] formed mail message
53
- def create_msg(msg_data = {})
54
- <<~END_OF_MESSAGE
55
- From: #{@username}
56
- To: #{msg_data[:mailto]}
57
- Subject: #{msg_data[:subject]}
58
- Date: #{Time.now.rfc2822}
59
- Message-Id: "#{Digest::SHA2.hexdigest(Time.now.to_i.to_s)}@#{@username.split('@').last}"
60
-
61
- #{msg_data[:body]}
62
- END_OF_MESSAGE
63
- end
64
-
65
- # Send mail
66
- # @param options [Hash] hash with params
67
- # @return [nil]
68
- def send_mail(options = {})
69
- options[:subject] ||= @default_subject
70
- options[:body] ||= @default_body
71
- options[:mailto] ||= @default_user
72
- smtp = Net::SMTP.start(@domainname, 25, @username, @username, @password, :login)
73
- smtp.send_message create_msg(options), @username, options[:mailto]
74
- smtp.finish
75
- end
76
-
77
- # Delete all messages in inbox
78
- # @return [nil]
79
- def delete_all_messages
80
- login
81
- @imap.select('INBOX')
82
- @imap.store(@imap.search(['ALL']), '+FLAGS', [:Deleted]) unless @imap.search(['ALL']).empty?
83
- OnlyofficeLoggerHelper.log('Delete all messages')
84
- close
85
- end
86
-
87
- # Delete email by subject
88
- # @param subject [String] email title
89
- # @return [nil]
90
- def delete_email_by_subject(subject)
91
- login
92
- @imap.select('INBOX')
93
- id_emails = @imap.search(['SUBJECT', subject.dup.force_encoding('ascii-8bit')])
94
- @imap.store(id_emails, '+FLAGS', [:Deleted]) unless id_emails.empty?
95
- close
47
+ "user: #{@username}, " \
48
+ "subject: #{@subject}"
96
49
  end
97
50
 
98
51
  # Get email
@@ -110,11 +63,7 @@ module OnlyofficeIredmailHelper
110
63
  mail_subject_to_be_found = options[:subject].to_s.upcase
111
64
  next unless mail_subject_found.include? mail_subject_to_be_found
112
65
 
113
- if options[:move_out]
114
- move_out_message(message_id)
115
- else
116
- mark_message_as_seen(message_id)
117
- end
66
+ move_out_or_mark_seen(message_id, options[:move_out])
118
67
  return mail
119
68
  end
120
69
  end
@@ -135,11 +84,7 @@ module OnlyofficeIredmailHelper
135
84
  string_to_be_found = options[:subject].to_s.upcase.gsub(/\s+/, ' ')
136
85
  next unless string_found.include? string_to_be_found
137
86
 
138
- if move_out
139
- move_out_message(message_id)
140
- else
141
- mark_message_as_seen(message_id)
142
- end
87
+ move_out_or_mark_seen(message_id, move_out)
143
88
  return true
144
89
  end
145
90
  end
@@ -162,11 +107,7 @@ module OnlyofficeIredmailHelper
162
107
  string_to_be_found = options[:subject].to_s.upcase.gsub(/\s+/, ' ')
163
108
  next unless string_found.include? string_to_be_found
164
109
 
165
- if move_out
166
- move_out_message(message_id)
167
- else
168
- mark_message_as_seen(message_id)
169
- end
110
+ move_out_or_mark_seen(message_id, move_out)
170
111
  return mail
171
112
  end
172
113
  end
@@ -175,35 +116,16 @@ module OnlyofficeIredmailHelper
175
116
 
176
117
  private
177
118
 
178
- # Correct close of mail account
179
- # @return [Void]
180
- def close
181
- @imap.close
182
- @imap.logout
183
- @imap.disconnect
184
- @imap = nil
185
- end
186
-
187
- # Move out message to `checked` directory
188
- # @param message_id [String] id of message
189
- # @return [Void]
190
- def move_out_message(message_id)
191
- create_mailbox(@mailbox_for_archive) unless mailboxes.include?(@mailbox_for_archive)
192
-
193
- login
194
- @imap.select('INBOX')
195
- @imap.copy(message_id, @mailbox_for_archive)
196
- @imap.store(message_id, '+FLAGS', [:Deleted])
197
- @imap.expunge
198
- close
199
- end
200
-
201
119
  # Get email list via search or all unseen
202
120
  # @param options [Hash] options to search
121
+ # @option options [String] :search call search by this string
122
+ # @option options [Boolean] :include_read should messages marked as read included
203
123
  # @return [Array<Mail>] list of mails
204
124
  def get_emails_search_or_new(options)
205
125
  if options[:search]
206
126
  @imap.search([(options[:search_type] || 'BODY').to_s.upcase, options[:search]])
127
+ elsif options[:include_read]
128
+ @imap.search(['ALL'])
207
129
  else
208
130
  @imap.search(['UNSEEN'])
209
131
  end
@@ -224,29 +146,5 @@ module OnlyofficeIredmailHelper
224
146
  mark_message_as_seen(message_id, close_connection: false) unless search
225
147
  { subject: subject, body: body, html_body: html_body }
226
148
  end
227
-
228
- # Get S3 key and S3 private key
229
- # @return [Array <String>] list of keys
230
- def read_defaults
231
- return if read_env_defaults
232
-
233
- yaml = YAML.load_file("#{Dir.home}/.gem-onlyoffice_iredmail_helper/config.yml")
234
- @default_domain = yaml['domain']
235
- @default_user = yaml['user']
236
- @default_password = yaml['password'].to_s
237
- @default_subject = yaml['subject']
238
- rescue Errno::ENOENT
239
- raise Errno::ENOENT, 'No config found. Please create ~/.gem-onlyoffice_iredmail_helper/config.yml'
240
- end
241
-
242
- # Read keys from env variables
243
- def read_env_defaults
244
- return false unless ENV['IREDMAIL_PASSWORD']
245
-
246
- @default_domain = ENV['IREDMAIL_DOMAIN']
247
- @default_user = ENV['IREDMAIL_USER']
248
- @default_password = ENV['IREDMAIL_PASSWORD'].to_s
249
- @default_subject = ENV['IREDMAIL_SUBJECT']
250
- end
251
149
  end
252
150
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: onlyoffice_iredmail_helper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ONLYOFFICE
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-09-17 00:00:00.000000000 Z
12
+ date: 2021-11-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mail
@@ -39,146 +39,138 @@ dependencies:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
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
42
  - !ruby/object:Gem::Dependency
57
43
  name: overcommit
58
44
  requirement: !ruby/object:Gem::Requirement
59
45
  requirements:
60
- - - '='
46
+ - - "~>"
61
47
  - !ruby/object:Gem::Version
62
- version: 0.55.0
48
+ version: '0'
63
49
  type: :development
64
50
  prerelease: false
65
51
  version_requirements: !ruby/object:Gem::Requirement
66
52
  requirements:
67
- - - '='
53
+ - - "~>"
68
54
  - !ruby/object:Gem::Version
69
- version: 0.55.0
55
+ version: '0'
70
56
  - !ruby/object:Gem::Dependency
71
57
  name: rake
72
58
  requirement: !ruby/object:Gem::Requirement
73
59
  requirements:
74
- - - '='
60
+ - - "~>"
75
61
  - !ruby/object:Gem::Version
76
- version: 13.0.1
62
+ version: '13'
77
63
  type: :development
78
64
  prerelease: false
79
65
  version_requirements: !ruby/object:Gem::Requirement
80
66
  requirements:
81
- - - '='
67
+ - - "~>"
82
68
  - !ruby/object:Gem::Version
83
- version: 13.0.1
69
+ version: '13'
84
70
  - !ruby/object:Gem::Dependency
85
71
  name: rspec
86
72
  requirement: !ruby/object:Gem::Requirement
87
73
  requirements:
88
- - - '='
74
+ - - "~>"
89
75
  - !ruby/object:Gem::Version
90
- version: 3.9.0
76
+ version: '3'
91
77
  type: :development
92
78
  prerelease: false
93
79
  version_requirements: !ruby/object:Gem::Requirement
94
80
  requirements:
95
- - - '='
81
+ - - "~>"
96
82
  - !ruby/object:Gem::Version
97
- version: 3.9.0
83
+ version: '3'
98
84
  - !ruby/object:Gem::Dependency
99
85
  name: rubocop
100
86
  requirement: !ruby/object:Gem::Requirement
101
87
  requirements:
102
- - - '='
88
+ - - "~>"
103
89
  - !ruby/object:Gem::Version
104
- version: 0.91.0
90
+ version: '1'
105
91
  type: :development
106
92
  prerelease: false
107
93
  version_requirements: !ruby/object:Gem::Requirement
108
94
  requirements:
109
- - - '='
95
+ - - "~>"
110
96
  - !ruby/object:Gem::Version
111
- version: 0.91.0
97
+ version: '1'
112
98
  - !ruby/object:Gem::Dependency
113
99
  name: rubocop-performance
114
100
  requirement: !ruby/object:Gem::Requirement
115
101
  requirements:
116
- - - '='
102
+ - - "~>"
117
103
  - !ruby/object:Gem::Version
118
- version: 1.8.0
104
+ version: '1'
119
105
  type: :development
120
106
  prerelease: false
121
107
  version_requirements: !ruby/object:Gem::Requirement
122
108
  requirements:
123
- - - '='
109
+ - - "~>"
124
110
  - !ruby/object:Gem::Version
125
- version: 1.8.0
111
+ version: '1'
126
112
  - !ruby/object:Gem::Dependency
127
113
  name: rubocop-rake
128
114
  requirement: !ruby/object:Gem::Requirement
129
115
  requirements:
130
- - - '='
116
+ - - "~>"
131
117
  - !ruby/object:Gem::Version
132
- version: 0.5.1
118
+ version: '0'
133
119
  type: :development
134
120
  prerelease: false
135
121
  version_requirements: !ruby/object:Gem::Requirement
136
122
  requirements:
137
- - - '='
123
+ - - "~>"
138
124
  - !ruby/object:Gem::Version
139
- version: 0.5.1
125
+ version: '0'
140
126
  - !ruby/object:Gem::Dependency
141
127
  name: rubocop-rspec
142
128
  requirement: !ruby/object:Gem::Requirement
143
129
  requirements:
144
- - - '='
130
+ - - "~>"
145
131
  - !ruby/object:Gem::Version
146
- version: 1.43.2
132
+ version: '2'
147
133
  type: :development
148
134
  prerelease: false
149
135
  version_requirements: !ruby/object:Gem::Requirement
150
136
  requirements:
151
- - - '='
137
+ - - "~>"
152
138
  - !ruby/object:Gem::Version
153
- version: 1.43.2
139
+ version: '2'
154
140
  - !ruby/object:Gem::Dependency
155
- name: simplecov
141
+ name: simplecov-cobertura
156
142
  requirement: !ruby/object:Gem::Requirement
157
143
  requirements:
158
- - - '='
144
+ - - "~>"
159
145
  - !ruby/object:Gem::Version
160
- version: 0.19.0
146
+ version: '2'
161
147
  type: :development
162
148
  prerelease: false
163
149
  version_requirements: !ruby/object:Gem::Requirement
164
150
  requirements:
165
- - - '='
151
+ - - "~>"
166
152
  - !ruby/object:Gem::Version
167
- version: 0.19.0
153
+ version: '2'
168
154
  - !ruby/object:Gem::Dependency
169
155
  name: yard
170
156
  requirement: !ruby/object:Gem::Requirement
171
157
  requirements:
172
- - - '='
158
+ - - "~>"
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ - - ">="
173
162
  - !ruby/object:Gem::Version
174
- version: 0.9.25
163
+ version: 0.9.20
175
164
  type: :development
176
165
  prerelease: false
177
166
  version_requirements: !ruby/object:Gem::Requirement
178
167
  requirements:
179
- - - '='
168
+ - - "~>"
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ - - ">="
180
172
  - !ruby/object:Gem::Version
181
- version: 0.9.25
173
+ version: 0.9.20
182
174
  description: ONLYOFFICE Helper Gem for iRedMail. Used in QA
183
175
  email:
184
176
  - shockwavenn@gmail.com
@@ -187,10 +179,15 @@ extensions: []
187
179
  extra_rdoc_files: []
188
180
  files:
189
181
  - lib/onlyoffice_iredmail_helper.rb
182
+ - lib/onlyoffice_iredmail_helper/delete_methods.rb
183
+ - lib/onlyoffice_iredmail_helper/login_methods.rb
190
184
  - lib/onlyoffice_iredmail_helper/mail_getters.rb
191
185
  - lib/onlyoffice_iredmail_helper/mailboxes_methods.rb
192
186
  - lib/onlyoffice_iredmail_helper/message_methods.rb
187
+ - lib/onlyoffice_iredmail_helper/move_message_methods.rb
193
188
  - lib/onlyoffice_iredmail_helper/name.rb
189
+ - lib/onlyoffice_iredmail_helper/read_defaults_methods.rb
190
+ - lib/onlyoffice_iredmail_helper/send_message_methods.rb
194
191
  - lib/onlyoffice_iredmail_helper/version.rb
195
192
  homepage: https://github.com/ONLYOFFICE-QA/onlyoffice_iredmail_helper
196
193
  licenses:
@@ -201,6 +198,7 @@ metadata:
201
198
  documentation_uri: https://www.rubydoc.info/gems/onlyoffice_iredmail_helper
202
199
  homepage_uri: https://github.com/ONLYOFFICE-QA/onlyoffice_iredmail_helper
203
200
  source_code_uri: https://github.com/ONLYOFFICE-QA/onlyoffice_iredmail_helper
201
+ rubygems_mfa_required: 'true'
204
202
  post_install_message:
205
203
  rdoc_options: []
206
204
  require_paths:
@@ -216,7 +214,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
216
214
  - !ruby/object:Gem::Version
217
215
  version: '0'
218
216
  requirements: []
219
- rubygems_version: 3.1.4
217
+ rubygems_version: 3.2.29
220
218
  signing_key:
221
219
  specification_version: 4
222
220
  summary: ONLYOFFICE Helper Gem for iRedMail