omah 0.9.0 → 0.9.4
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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/omah.rb +143 -138
- data.tar.gz.sig +0 -0
- metadata +35 -50
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1b29960de678baaa04b089b86091f22d62c3595a64f5304d23d32488a4333ee
|
4
|
+
data.tar.gz: b347eabaa96a1e72ff664d081ac70fc29d9adaea59746b3b602990d4a53c1ad3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 73585b352b0c63c2d959eb62f45954b55d1a673be0cd15b0b7c91d782ea918095689c437b73c1b82cb997b4b0be01c90427aba723e2220e634ecc368c7f7b1e5
|
7
|
+
data.tar.gz: ead2fe673624b908532e9caa6c2ecbf2884205778a100085e3a59e5031cdf04cbd3a127ff180739c8491b2d9a9a3373a900a148cad03302924c10e61c5c7fb4f
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/lib/omah.rb
CHANGED
@@ -3,7 +3,6 @@
|
|
3
3
|
# file: omah.rb
|
4
4
|
# title: Offline Mail Helper
|
5
5
|
|
6
|
-
require 'zip'
|
7
6
|
require 'nokorexi'
|
8
7
|
require 'dynarex-daily'
|
9
8
|
require 'novowels'
|
@@ -12,9 +11,11 @@ module Library
|
|
12
11
|
|
13
12
|
def fetch_file(filename)
|
14
13
|
|
15
|
-
lib = File.dirname(__FILE__)
|
16
|
-
File.read
|
17
|
-
|
14
|
+
#lib = File.dirname(__FILE__)
|
15
|
+
#File.read filename
|
16
|
+
lib = 'http://a0.jamesrobertson.me.uk/rorb/r/ruby/omah/'
|
17
|
+
URI.open(File.join(lib, filename),
|
18
|
+
'UserAgent' => 'Omah'){|x| x.read }
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
@@ -22,14 +23,14 @@ class Omah
|
|
22
23
|
|
23
24
|
include Library
|
24
25
|
include RXFHelperModule
|
25
|
-
|
26
|
+
|
26
27
|
def initialize(user: 'user', filepath: '.', \
|
27
|
-
options: {xslt: 'listing.xsl', url_base: 'http://localhost/' },
|
28
|
+
options: {xslt: 'listing.xsl', url_base: 'http://localhost/' },
|
28
29
|
plugins: [], webpath: '/email', debug: false)
|
29
30
|
|
30
|
-
|
31
|
+
|
31
32
|
puts 'inside Omah::initialize' if @debug
|
32
|
-
|
33
|
+
|
33
34
|
@user = user
|
34
35
|
@xslt = options[:xslt]
|
35
36
|
@css = options[:css]
|
@@ -41,128 +42,137 @@ class Omah
|
|
41
42
|
@debug = debug
|
42
43
|
|
43
44
|
puts 'Omah::initialize filepath: ' + filepath.inspect if @debug
|
44
|
-
|
45
|
+
|
45
46
|
FileX.chdir filepath
|
46
47
|
|
47
48
|
puts 'Omah::initialize making directory ' + @filepath_user if @debug
|
48
|
-
FileX.mkdir_p @filepath_user
|
49
|
+
FileX.mkdir_p @filepath_user
|
49
50
|
|
50
51
|
FileX.chdir @filepath_user
|
51
|
-
|
52
|
-
dailyfile = 'dynarexdaily.xml'
|
53
|
-
|
52
|
+
|
53
|
+
dailyfile = File.join(@filepath_user, 'dynarexdaily.xml')
|
54
|
+
|
54
55
|
x = if FileX.exists? dailyfile then dailyfile
|
55
56
|
|
56
57
|
else
|
57
|
-
|
58
|
+
|
58
59
|
'messages[date, prev_date, next_date]/message(msg_id, tags, from, ' + \
|
59
60
|
'to, subject, date, txt_filepath, html_filepath, attachment1, ' + \
|
60
|
-
'attachment2, attachment3)'
|
61
|
+
'attachment2, attachment3, attachments)'
|
61
62
|
|
62
63
|
end
|
63
64
|
|
64
65
|
puts 'Omah::initialize before DynarexDaily' if @debug
|
65
|
-
@dd = DynarexDaily.new x, dir_archive: :yearly
|
66
|
+
@dd = DynarexDaily.new x, dir_archive: :yearly, debug: @debug
|
66
67
|
puts 'Omah::initialize after DynarexDaily' if @debug
|
67
68
|
# is it a new day?
|
68
|
-
|
69
|
+
|
69
70
|
if @dd.records.empty? then
|
70
|
-
|
71
|
-
date_yesterday =
|
72
|
-
|
73
|
-
|
71
|
+
|
72
|
+
date_yesterday = File.join(@filepath_user,
|
73
|
+
(Date.today - 1).strftime("%Y/%b/%d").downcase)
|
74
|
+
|
75
|
+
@dd.prev_date = File.join(@webpath_user,
|
76
|
+
(Date.today - 1).strftime("%Y/%b/%d").downcase)
|
77
|
+
|
74
78
|
# add the next_day field value to the previous day file
|
75
|
-
|
79
|
+
|
76
80
|
file_yesterday = date_yesterday + '/index.xml'
|
77
81
|
|
78
82
|
if FileX.exists? file_yesterday then
|
79
|
-
|
83
|
+
|
80
84
|
dx_yesterday = Dynarex.new file_yesterday
|
81
|
-
dx_yesterday.next_date = File.join(@webpath_user,
|
85
|
+
dx_yesterday.next_date = File.join(@webpath_user,
|
82
86
|
(Date.today).strftime("%Y/%b/%d").downcase)
|
83
87
|
dx_yesterday.xslt = options[:archive_xsl] if options[:archive_xsl]
|
84
88
|
dx_yesterday.save
|
85
89
|
end
|
86
|
-
|
90
|
+
|
87
91
|
end
|
88
|
-
|
92
|
+
|
89
93
|
# intialize plugins
|
90
|
-
|
94
|
+
|
91
95
|
puts 'Omah::initialize before plugins' if @debug
|
92
|
-
|
96
|
+
|
93
97
|
@plugins = plugins.inject([]) do |r, plugin|
|
94
|
-
|
98
|
+
|
95
99
|
name, settings = plugin
|
96
|
-
|
100
|
+
|
97
101
|
puts 'Omah::initialize plugin: ' + name.inspect if @debug
|
98
|
-
|
102
|
+
|
99
103
|
return r if settings[:active] == false and !settings[:active]
|
100
|
-
|
104
|
+
|
101
105
|
klass_name = 'OmahPlugin' + name.to_s.split(/[-_]/)\
|
102
106
|
.map{|x| x.capitalize}.join
|
103
107
|
|
104
|
-
r << Kernel.const_get(klass_name).new(settings: settings,
|
108
|
+
r << Kernel.const_get(klass_name).new(settings: settings,
|
105
109
|
variables: @variables, debug: @debug)
|
106
110
|
|
107
|
-
end
|
111
|
+
end
|
108
112
|
|
109
113
|
end
|
110
114
|
|
111
115
|
def store(messages)
|
112
116
|
|
113
|
-
messages.each.with_index do |
|
117
|
+
messages.each.with_index do |x,i|
|
114
118
|
|
115
|
-
|
116
|
-
subject = msg[:subject] || ''
|
117
|
-
|
118
|
-
title = subject.gsub(/\W+/,'-')[0,30].sub(/^-/,'').sub(/-$/,'')
|
119
|
+
email, msg = x
|
119
120
|
|
120
|
-
|
121
|
+
begin
|
121
122
|
|
122
|
-
|
123
|
+
puts "i: %d msg: %s" % [i, msg] if @debug
|
124
|
+
subject = msg[:subject] || ''
|
123
125
|
|
124
|
-
|
126
|
+
title = subject.gsub(/\W+/,'-')[0,30].sub(/^-/,'').sub(/-$/,'')
|
125
127
|
|
126
|
-
|
128
|
+
a = @dd.all.select {|x| x.subject == subject}
|
127
129
|
|
128
|
-
|
130
|
+
ordinal = a.any? ? '.' + a.length.to_s : ''
|
129
131
|
|
130
|
-
|
132
|
+
x_file = title + ordinal
|
131
133
|
|
132
|
-
|
134
|
+
id = msg[:msg_id]
|
133
135
|
|
134
|
-
|
135
|
-
puts 'Omah::store before mkdir_p path: ' + path.inspect if @debug
|
136
|
-
FileX.mkdir_p path
|
136
|
+
next if @dd.find_by_msg_id id
|
137
137
|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
138
|
+
path = archive()
|
139
|
+
|
140
|
+
x_filepath = File.join(path, x_file)
|
141
|
+
|
142
|
+
puts 'FileX.pwd ' + FileX.pwd if @debug
|
143
|
+
puts 'Omah::store before mkdir_p path: ' + path.inspect if @debug
|
144
|
+
FileX.mkdir_p path
|
145
|
+
|
146
|
+
if msg[:raw_source] then
|
147
|
+
FileX.write File.join(@filepath_user, x_filepath + '.eml'), \
|
148
|
+
msg[:raw_source]
|
149
|
+
end
|
150
|
+
|
151
|
+
header = %i(from to subject).inject({}) {|r,x| r.merge(x => msg[x]) }
|
152
|
+
filepath = File.join(@filepath_user, x_filepath + '.kvx')
|
153
|
+
Kvx.new(header, debug: false).save filepath
|
154
|
+
|
155
|
+
txt_filepath = x_filepath + '.txt'
|
156
|
+
FileX.write File.join(@filepath_user, txt_filepath), \
|
157
|
+
text_sanitiser(msg[:body_text].to_s)
|
158
|
+
|
159
|
+
html_filepath = x_filepath + '.html'
|
160
|
+
FileX.write File.join(@filepath_user, html_filepath), \
|
161
|
+
html_sanitiser(msg[:body_html].to_s)
|
162
|
+
|
163
|
+
parts_path = []
|
164
|
+
|
165
|
+
h = msg.merge(txt_filepath: txt_filepath, \
|
166
|
+
html_filepath: html_filepath)
|
167
|
+
|
168
|
+
# save the attachments
|
169
|
+
if msg[:attachments].length > 0 then
|
170
|
+
|
171
|
+
attachment_path = File.join(path, title + ordinal)
|
172
|
+
FileX.mkdir_p attachment_path
|
173
|
+
|
174
|
+
msg[:attachments][0..2].each.with_index do |x, i|
|
142
175
|
|
143
|
-
header = %i(from to subject).inject({}) {|r,x| r.merge(x => msg[x]) }
|
144
|
-
Kvx.new(header).save File.join(@filepath_user, x_filepath + '.kvx')
|
145
|
-
|
146
|
-
txt_filepath = x_filepath + '.txt'
|
147
|
-
FileX.write File.join(@filepath_user, txt_filepath), \
|
148
|
-
text_sanitiser(msg[:body_text].to_s)
|
149
|
-
|
150
|
-
html_filepath = x_filepath + '.html'
|
151
|
-
FileX.write File.join(@filepath_user, html_filepath), \
|
152
|
-
html_sanitiser(msg[:body_html].to_s)
|
153
|
-
|
154
|
-
parts_path = []
|
155
|
-
|
156
|
-
# save the attachments
|
157
|
-
if msg[:attachments].length > 0 then
|
158
|
-
|
159
|
-
attachment_path = File.join(path, title + ordinal)
|
160
|
-
FileX.mkdir_p attachment_path
|
161
|
-
|
162
|
-
if msg[:attachments].length < 4 then
|
163
|
-
|
164
|
-
msg[:attachments].each.with_index do |x, i|
|
165
|
-
|
166
176
|
name, buffer = x
|
167
177
|
parts_path[i] = File.join(attachment_path, name.gsub('/',''))
|
168
178
|
begin
|
@@ -170,40 +180,27 @@ class Omah
|
|
170
180
|
rescue
|
171
181
|
puts ($!)
|
172
182
|
end
|
173
|
-
|
183
|
+
|
174
184
|
end
|
175
|
-
|
176
|
-
else
|
177
|
-
|
178
|
-
# make a zip file and add the attachments to it
|
179
|
-
|
180
|
-
zipfile = File.join(@filepath_user, attachment_path,
|
181
|
-
title[0,12].downcase + '.zip')
|
182
|
-
parts_path[0] = zipfile
|
183
|
-
|
184
|
-
FileX.zip zipfile, msg[:attachments]
|
185
|
-
|
186
|
-
end
|
187
|
-
|
188
185
|
|
189
|
-
|
190
|
-
|
191
|
-
msg.delete :attachments
|
186
|
+
h[:attachments] = msg[:attachments].map(&:first)
|
192
187
|
|
193
|
-
h = msg.merge(txt_filepath: txt_filepath, \
|
194
|
-
html_filepath: html_filepath)
|
195
|
-
parts_path.each.with_index do |path, i|
|
196
|
-
h.merge!("attachment#{i+1}" => @webpath_user + '/' + path)
|
197
|
-
end
|
198
|
-
|
199
|
-
if parts_path.any? then
|
200
|
-
|
201
|
-
attachments = parts_path.map do |path|
|
202
|
-
"<li><a href='%s'>%s</a></li>" % [@webpath_user + '/' + path,
|
203
|
-
File.basename(path)]
|
204
188
|
end
|
205
|
-
|
206
|
-
|
189
|
+
|
190
|
+
msg.delete :attachments
|
191
|
+
|
192
|
+
parts_path.each.with_index do |path, i|
|
193
|
+
h.merge!("attachment#{i+1}" => @webpath_user + '/' + path)
|
194
|
+
end
|
195
|
+
|
196
|
+
if parts_path.any? then
|
197
|
+
|
198
|
+
attachments = parts_path.map do |path|
|
199
|
+
"<li><a href='%s'>%s</a></li>" % [@webpath_user + '/' + path,
|
200
|
+
File.basename(path)]
|
201
|
+
end
|
202
|
+
|
203
|
+
|
207
204
|
html_page= %Q(
|
208
205
|
<html>
|
209
206
|
<head>
|
@@ -212,7 +209,7 @@ html_page= %Q(
|
|
212
209
|
<style></style>
|
213
210
|
</head>
|
214
211
|
<body>
|
215
|
-
<iframe src='../#{File.basename(html_filepath)}'></iframe>
|
212
|
+
<iframe src='../#{File.basename(html_filepath)}'></iframe>
|
216
213
|
<h2>attachments</h2>
|
217
214
|
<ul>
|
218
215
|
#{attachments.join("\n")}
|
@@ -221,69 +218,77 @@ html_page= %Q(
|
|
221
218
|
</html>
|
222
219
|
)
|
223
220
|
|
224
|
-
|
225
|
-
|
226
|
-
|
221
|
+
FileX.write File.join(attachment_path, 'index.html'), html_page
|
222
|
+
h[:html_filepath] = File.join(attachment_path, 'index.html')
|
223
|
+
end
|
224
|
+
|
225
|
+
h[:link] = File.join(@url_base, @webpath_user, html_filepath)
|
226
|
+
|
227
|
+
@plugins.each {|x| x.on_newmessage(h) if x.respond_to? :on_newmessage }
|
228
|
+
|
229
|
+
@dd.create h
|
227
230
|
|
228
|
-
h[:link] = File.join(@url_base, @webpath_user, html_filepath)
|
229
231
|
|
230
|
-
|
231
|
-
|
232
|
-
|
232
|
+
# remove the message from the server
|
233
|
+
#jr250918 email.delete
|
234
|
+
|
235
|
+
rescue
|
236
|
+
puts 'Omah::store warning: ' + ($!).inspect
|
237
|
+
end
|
233
238
|
|
234
239
|
end
|
235
|
-
|
240
|
+
|
236
241
|
if @xslt then
|
237
|
-
|
242
|
+
|
238
243
|
unless FileX.exists? @xslt then
|
239
244
|
FileX.write File.expand_path(@xslt), fetch_file(@xslt)
|
240
245
|
FileX.write File.expand_path(@css), fetch_file(@css) if @css and \
|
241
246
|
not FileX.exists? @css
|
242
247
|
end
|
243
|
-
|
248
|
+
|
244
249
|
@dd.xslt = @xslt
|
245
250
|
|
246
251
|
end
|
247
|
-
|
248
|
-
|
252
|
+
|
253
|
+
|
249
254
|
doc = @dd.to_doc
|
250
255
|
|
251
256
|
doc.root.xpath('records/message').each do |message|
|
252
|
-
|
257
|
+
|
253
258
|
classify message.element('from')
|
254
259
|
classify message.element('to')
|
255
|
-
|
260
|
+
|
256
261
|
end
|
257
262
|
|
258
|
-
@plugins.each do |x|
|
263
|
+
@plugins.each do |x|
|
259
264
|
x.on_newmail(messages, doc) if x.respond_to? :on_newmail
|
260
265
|
end
|
261
|
-
|
266
|
+
|
262
267
|
FileX.write File.join(@filepath_user, 'dynarexdaily.xml'), \
|
263
268
|
doc.xml(pretty: true)
|
264
|
-
|
269
|
+
|
265
270
|
end
|
266
|
-
|
271
|
+
|
267
272
|
private
|
268
|
-
|
273
|
+
|
269
274
|
def archive()
|
270
|
-
|
275
|
+
|
271
276
|
t = Time.now
|
272
277
|
path = File.join ['archive', t.year.to_s, \
|
273
278
|
Date::MONTHNAMES[t.month].downcase[0..2], t.day.to_s]
|
274
279
|
|
275
|
-
end
|
276
|
-
|
280
|
+
end
|
281
|
+
|
277
282
|
def classify(e)
|
278
|
-
|
279
|
-
s = e.text.to_s
|
283
|
+
|
284
|
+
s = e.text.to_s
|
280
285
|
return if s.empty?
|
281
|
-
|
286
|
+
|
282
287
|
e.attributes[:css_class] = NoVowels.compact(s.gsub(/\W+/,''))
|
283
|
-
end
|
288
|
+
end
|
284
289
|
|
285
290
|
def html_sanitiser(s)
|
286
|
-
# Parsing HTML has proved problematic either way. Instead we will just
|
291
|
+
# Parsing HTML has proved problematic either way. Instead we will just
|
287
292
|
# return whatever is given.
|
288
293
|
=begin
|
289
294
|
begin
|
@@ -296,12 +301,12 @@ html_page= %Q(
|
|
296
301
|
=end
|
297
302
|
s
|
298
303
|
end
|
299
|
-
|
304
|
+
|
300
305
|
|
301
306
|
def text_sanitiser(s)
|
302
|
-
# Parsing HTML has proved problematic either way. Instead we will just
|
307
|
+
# Parsing HTML has proved problematic either way. Instead we will just
|
303
308
|
# return whatever is given.
|
304
|
-
=begin
|
309
|
+
=begin
|
305
310
|
begin
|
306
311
|
Rexle.new "<root>#{s}</root>"
|
307
312
|
s2 = s
|
@@ -312,6 +317,6 @@ html_page= %Q(
|
|
312
317
|
=end
|
313
318
|
s
|
314
319
|
end
|
315
|
-
|
320
|
+
|
316
321
|
|
317
322
|
end
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omah
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -10,27 +10,32 @@ bindir: bin
|
|
10
10
|
cert_chain:
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
13
|
+
MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
|
14
|
+
YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjExMTE4MTE0MTM3WhcN
|
15
|
+
MjIxMTE4MTE0MTM3WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
|
16
|
+
cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCdnMRf
|
17
|
+
xtV4IAaB2Ev1nAT/IZsvOs0a/oCgv/+CFyuZxDhpTF+znJRAlBW8pMSOxmQ0/V04
|
18
|
+
owAW7+4lt/RkAZyUbgUqnWDsNIvBZcQbVnhQcJLCNBFPLSe9LeCz8gWqnSSZD0N2
|
19
|
+
ZuAm7EvBlWVRbMLZDNmUxpdRskdRZQQ9NOfTc9p4QU65x91Ys3RHCuGwB67H6ulp
|
20
|
+
O0PgSIyfs2IaEB8CR7pQk2qyEHVn81LkJLhlUvqM07vDYNflbGSwKgsIRYcu28jI
|
21
|
+
Xwb0Gpsjn/UcLsBuu/CvhqVx4CEdX6wo7DWtbeV3bWIf25T8cRGHZiftCDXI5a7H
|
22
|
+
YjdiqW38reXuPnWa2uqtdYWYUctHIObQ7OEAMKBiFbz9OPfw1z2acWpqs9JTwJLI
|
23
|
+
a3jQqPE7Qlifu/mtasZ94IBv+AJoMJeVuwIEcXlO8YlbAblMDeWz0MY2317g0xwy
|
24
|
+
lz6J6f9EXabWSk5q2PZMX4M5qHCPMoBwPX4NWjVscWY1Cs5KYERek079KZMCAwEA
|
25
|
+
AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUXGiFRVre
|
26
|
+
Vjoqpwk+D83rrR1OXpwwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
|
27
|
+
c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
|
28
|
+
BgkqhkiG9w0BAQsFAAOCAYEAf2g/Yn2jGLrcB4UF/4aCNMqHYxw3Tc6ubW+eoH0L
|
29
|
+
7xXPcsFl/5i6PTusx+DrVzE4g/jsKAIOkO9spU7uVcYAitadHZqmF1Y5/D64P1xo
|
30
|
+
ScfV1uRp3Dbeq3QQHqSPNTj17QXlspdaNw+tBJrI1O8/aTutwDg6tkcaC/yqGwFt
|
31
|
+
+bh7rB9730zTdurLNUTfruHI38CRSOjt4BkucvmuC17rHhx4h9jMCi6zu5rtengR
|
32
|
+
lnLA6WVHlggce4nsMEBQIZZLUOssW32OPGDVbjh/24jNpVukqRm5sQFRWWuWkrwd
|
33
|
+
jNJY60a6JkLn4Ahvzrhm2n7anGKTOpyVS62Qu8w6cUkjXpmwXWXWVN9N7/POG7EO
|
34
|
+
xgj1UqJaKqMEg3TAr0auf2iXyXfhxbRVryltYk+3SkZWbITs95cEbmfWSgoVu6os
|
35
|
+
v/Ouz34Li0pxu+f3q+Z4+FRkBjMmW1X8RIaeSj9LAirhInezIc2b9CkS5c5zkwkZ
|
36
|
+
S/OWSwnVm2eKNuPrpAfd36Wk
|
32
37
|
-----END CERTIFICATE-----
|
33
|
-
date:
|
38
|
+
date: 2021-11-18 00:00:00.000000000 Z
|
34
39
|
dependencies:
|
35
40
|
- !ruby/object:Gem::Dependency
|
36
41
|
name: dynarex-daily
|
@@ -41,7 +46,7 @@ dependencies:
|
|
41
46
|
version: '0.4'
|
42
47
|
- - ">="
|
43
48
|
- !ruby/object:Gem::Version
|
44
|
-
version: 0.4.
|
49
|
+
version: 0.4.1
|
45
50
|
type: :runtime
|
46
51
|
prerelease: false
|
47
52
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -51,47 +56,27 @@ dependencies:
|
|
51
56
|
version: '0.4'
|
52
57
|
- - ">="
|
53
58
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.4.
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: rubyzip
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '1.2'
|
62
|
-
- - ">="
|
63
|
-
- !ruby/object:Gem::Version
|
64
|
-
version: 1.2.1
|
65
|
-
type: :runtime
|
66
|
-
prerelease: false
|
67
|
-
version_requirements: !ruby/object:Gem::Requirement
|
68
|
-
requirements:
|
69
|
-
- - "~>"
|
70
|
-
- !ruby/object:Gem::Version
|
71
|
-
version: '1.2'
|
72
|
-
- - ">="
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
version: 1.2.1
|
59
|
+
version: 0.4.1
|
75
60
|
- !ruby/object:Gem::Dependency
|
76
61
|
name: nokorexi
|
77
62
|
requirement: !ruby/object:Gem::Requirement
|
78
63
|
requirements:
|
79
64
|
- - "~>"
|
80
65
|
- !ruby/object:Gem::Version
|
81
|
-
version: '0.
|
66
|
+
version: '0.5'
|
82
67
|
- - ">="
|
83
68
|
- !ruby/object:Gem::Version
|
84
|
-
version: 0.3
|
69
|
+
version: 0.5.3
|
85
70
|
type: :runtime
|
86
71
|
prerelease: false
|
87
72
|
version_requirements: !ruby/object:Gem::Requirement
|
88
73
|
requirements:
|
89
74
|
- - "~>"
|
90
75
|
- !ruby/object:Gem::Version
|
91
|
-
version: '0.
|
76
|
+
version: '0.5'
|
92
77
|
- - ">="
|
93
78
|
- !ruby/object:Gem::Version
|
94
|
-
version: 0.3
|
79
|
+
version: 0.5.3
|
95
80
|
- !ruby/object:Gem::Dependency
|
96
81
|
name: novowels
|
97
82
|
requirement: !ruby/object:Gem::Requirement
|
@@ -113,7 +98,7 @@ dependencies:
|
|
113
98
|
- !ruby/object:Gem::Version
|
114
99
|
version: 0.1.3
|
115
100
|
description:
|
116
|
-
email:
|
101
|
+
email: digital.robertson@gmail.com
|
117
102
|
executables: []
|
118
103
|
extensions: []
|
119
104
|
extra_rdoc_files: []
|
@@ -141,8 +126,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
141
126
|
version: '0'
|
142
127
|
requirements: []
|
143
128
|
rubyforge_project:
|
144
|
-
rubygems_version: 2.7.
|
129
|
+
rubygems_version: 2.7.10
|
145
130
|
signing_key:
|
146
131
|
specification_version: 4
|
147
|
-
summary: 'Offline Mail Helper: Stores email messages in a file directory archive'
|
132
|
+
summary: 'Offline Mail Helper: Stores email messages in a file directory archive.'
|
148
133
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|