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.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/omah.rb +143 -138
  4. data.tar.gz.sig +0 -0
  5. metadata +35 -50
  6. metadata.gz.sig +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8d06eb4457018bb8014de125b696636a9482903275d61989f0c638e67324eb7b
4
- data.tar.gz: ee80906ff711cf99a89785f78ef9d97de4074d187ddebbe008cd76f04a32be80
3
+ metadata.gz: d1b29960de678baaa04b089b86091f22d62c3595a64f5304d23d32488a4333ee
4
+ data.tar.gz: b347eabaa96a1e72ff664d081ac70fc29d9adaea59746b3b602990d4a53c1ad3
5
5
  SHA512:
6
- metadata.gz: 1c112dbc1d4b9086fc18f74392db282a23b4e5762454bb01d1f1ea9100e3e6b2fcb7dcedacc279d30819f10ab1e48c72130e56057028bbdd2db65c40dfae549f
7
- data.tar.gz: f54bae7520efefd38c0a1141ce29bef6517515dc16eca4c784367064758a9e5fa8a6a11de9dcf4277e20cb0b62f8a79689b3b01822584e3e0c5e423e086af6d4
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 File.join(lib,'..','stylesheet',filename)
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 = (Date.today - 1).strftime("%Y/%b/%d").downcase
72
- @dd.prev_date = File.join(@webpath_user, date_yesterday)
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 |msg,i|
117
+ messages.each.with_index do |x,i|
114
118
 
115
- puts "i: %d msg: %s" % [i, msg]
116
- subject = msg[:subject] || ''
117
-
118
- title = subject.gsub(/\W+/,'-')[0,30].sub(/^-/,'').sub(/-$/,'')
119
+ email, msg = x
119
120
 
120
- a = @dd.all.select {|x| x.subject == subject}
121
+ begin
121
122
 
122
- ordinal = a.any? ? '.' + a.length.to_s : ''
123
+ puts "i: %d msg: %s" % [i, msg] if @debug
124
+ subject = msg[:subject] || ''
123
125
 
124
- x_file = title + ordinal
126
+ title = subject.gsub(/\W+/,'-')[0,30].sub(/^-/,'').sub(/-$/,'')
125
127
 
126
- id = msg[:msg_id]
128
+ a = @dd.all.select {|x| x.subject == subject}
127
129
 
128
- next if @dd.find_by_msg_id id
130
+ ordinal = a.any? ? '.' + a.length.to_s : ''
129
131
 
130
- path = archive()
132
+ x_file = title + ordinal
131
133
 
132
- x_filepath = File.join(path, x_file)
134
+ id = msg[:msg_id]
133
135
 
134
- puts 'FileX.pwd ' + FileX.pwd if @debug
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
- if msg[:raw_source] then
139
- FileX.write File.join(@filepath_user, x_filepath + '.eml'), \
140
- msg[:raw_source]
141
- end
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
- end
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
- FileX.write File.join(attachment_path, 'index.html'), html_page
225
- h[:html_filepath] = File.join(attachment_path, 'index.html')
226
- end
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
- @plugins.each {|x| x.on_newmessage(h) if x.respond_to? :on_newmessage }
231
-
232
- @dd.create h
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.0
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
- MIIDXjCCAkagAwIBAgIBATANBgkqhkiG9w0BAQUFADAsMSowKAYDVQQDDCFnZW1t
14
- YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMTgwNzI0MjE1NDUxWhcN
15
- MTkwNzI0MjE1NDUxWjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
- cnRzb24vREM9ZXUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUFiXU
17
- C+MpRXGK1y364aNZYHu0nBE58/E03G9PgNW5ey2WUG7VfqSpCHf+pnkKPvhERGcp
18
- fs2c+C8xMLYBlVEDR9UWgJTgAjYx3H79tMsgWn8xurMDKLjsxYW6RwP70HQMCFGU
19
- DChFrLLtNWLvW7giV00Miqlf9ZAEdphD8d+VFXIm8iDTUYitMOZE6NbmgacwZ4lu
20
- VHmOwNs3Wg+K66SobXrxBTrQzmYVTjJkgmbyEORH/of/oBvcOG5tZY9ELlZCxLhX
21
- sb1bQAi12cOkuOoCsV1tWtP9PVQWwoWMBjoC36sNemHmxzaNOt25BHxNdJrznlKt
22
- ZB52qlYVJ0qqbU0jAgMBAAGjgYowgYcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
23
- HQYDVR0OBBYEFN+DBAwxB/gSg8HcerKG5yiElimbMCYGA1UdEQQfMB2BG2dlbW1h
24
- c3RlckBqYW1lc3JvYmVydHNvbi5ldTAmBgNVHRIEHzAdgRtnZW1tYXN0ZXJAamFt
25
- ZXNyb2JlcnRzb24uZXUwDQYJKoZIhvcNAQEFBQADggEBAD0byFUEJePXzFGCTQVx
26
- tr796ChW0Fxno+ZsR3jTvN6dMbAKUR+9/TYzXInbVx7z1edtUlDJJ02Cxpu0JCGu
27
- Wiu9aMjHLXVcicTo9t73xMcO0tguhINlvfubf80Co7t8m9Cv6W8WpIRp/I7XKxGe
28
- 1LsGhAYGIzku126UPCzdPhZvxXEiv63N4SBbjfpiDKWZLyQ8m0NEEKIN3ak89A78
29
- imC/Xwzv0SxyYibMdqD+fRP6HKhUzawMSRhNvnw4EhtqFVw6WOVjVHQHc4E9aptT
30
- QYtaxpGWTpAPjszaFSAGnt9wrzAMCFPhpqXanwuDYpQ0rmo/GgWyJNEJuUgvMZBi
31
- WfE=
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: 2018-08-17 00:00:00.000000000 Z
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.0
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.0
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.3'
66
+ version: '0.5'
82
67
  - - ">="
83
68
  - !ruby/object:Gem::Version
84
- version: 0.3.2
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.3'
76
+ version: '0.5'
92
77
  - - ">="
93
78
  - !ruby/object:Gem::Version
94
- version: 0.3.2
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: james@jamesrobertson.eu
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.6
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