omah 0.9.0 → 0.9.4

Sign up to get free protection for your applications and to get access to all the features.
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