daemon-kit 0.1.8rc1 → 0.1.8rc2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. data/History.txt +4 -0
  2. data/Rakefile +1 -1
  3. data/daemon-kit.gemspec +6 -37
  4. data/lib/daemon_kit.rb +1 -1
  5. data/lib/daemon_kit/error_handlers/base.rb +3 -3
  6. data/lib/daemon_kit/error_handlers/hoptoad.rb +135 -22
  7. data/lib/daemon_kit/safety.rb +0 -1
  8. data/lib/generators/daemon_kit/app/templates/config/boot.rb +7 -3
  9. data/lib/generators/daemon_kit/app/templates/config/environment.rb.tt +5 -2
  10. metadata +3 -34
  11. data/Manifest.txt +0 -176
  12. data/lib/daemon_kit/error_handlers/mail.rb +0 -85
  13. data/vendor/tmail-1.2.3/tmail.rb +0 -5
  14. data/vendor/tmail-1.2.3/tmail/address.rb +0 -426
  15. data/vendor/tmail-1.2.3/tmail/attachments.rb +0 -46
  16. data/vendor/tmail-1.2.3/tmail/base64.rb +0 -46
  17. data/vendor/tmail-1.2.3/tmail/compat.rb +0 -41
  18. data/vendor/tmail-1.2.3/tmail/config.rb +0 -67
  19. data/vendor/tmail-1.2.3/tmail/core_extensions.rb +0 -63
  20. data/vendor/tmail-1.2.3/tmail/encode.rb +0 -581
  21. data/vendor/tmail-1.2.3/tmail/header.rb +0 -960
  22. data/vendor/tmail-1.2.3/tmail/index.rb +0 -9
  23. data/vendor/tmail-1.2.3/tmail/interface.rb +0 -1130
  24. data/vendor/tmail-1.2.3/tmail/loader.rb +0 -3
  25. data/vendor/tmail-1.2.3/tmail/mail.rb +0 -578
  26. data/vendor/tmail-1.2.3/tmail/mailbox.rb +0 -495
  27. data/vendor/tmail-1.2.3/tmail/main.rb +0 -6
  28. data/vendor/tmail-1.2.3/tmail/mbox.rb +0 -3
  29. data/vendor/tmail-1.2.3/tmail/net.rb +0 -248
  30. data/vendor/tmail-1.2.3/tmail/obsolete.rb +0 -132
  31. data/vendor/tmail-1.2.3/tmail/parser.rb +0 -1476
  32. data/vendor/tmail-1.2.3/tmail/port.rb +0 -379
  33. data/vendor/tmail-1.2.3/tmail/quoting.rb +0 -118
  34. data/vendor/tmail-1.2.3/tmail/require_arch.rb +0 -58
  35. data/vendor/tmail-1.2.3/tmail/scanner.rb +0 -49
  36. data/vendor/tmail-1.2.3/tmail/scanner_r.rb +0 -261
  37. data/vendor/tmail-1.2.3/tmail/stringio.rb +0 -280
  38. data/vendor/tmail-1.2.3/tmail/utils.rb +0 -337
  39. data/vendor/tmail-1.2.3/tmail/version.rb +0 -39
  40. data/vendor/tmail.rb +0 -13
@@ -1,379 +0,0 @@
1
- =begin rdoc
2
-
3
- = Port class
4
-
5
- =end
6
- #--
7
- # Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
8
- #
9
- # Permission is hereby granted, free of charge, to any person obtaining
10
- # a copy of this software and associated documentation files (the
11
- # "Software"), to deal in the Software without restriction, including
12
- # without limitation the rights to use, copy, modify, merge, publish,
13
- # distribute, sublicense, and/or sell copies of the Software, and to
14
- # permit persons to whom the Software is furnished to do so, subject to
15
- # the following conditions:
16
- #
17
- # The above copyright notice and this permission notice shall be
18
- # included in all copies or substantial portions of the Software.
19
- #
20
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27
- #
28
- # Note: Originally licensed under LGPL v2+. Using MIT license for Rails
29
- # with permission of Minero Aoki.
30
- #++
31
-
32
- require 'tmail/stringio'
33
-
34
-
35
- module TMail
36
-
37
- class Port
38
- def reproducible?
39
- false
40
- end
41
- end
42
-
43
-
44
- ###
45
- ### FilePort
46
- ###
47
-
48
- class FilePort < Port
49
-
50
- def initialize( fname )
51
- @filename = File.expand_path(fname)
52
- super()
53
- end
54
-
55
- attr_reader :filename
56
-
57
- alias ident filename
58
-
59
- def ==( other )
60
- other.respond_to?(:filename) and @filename == other.filename
61
- end
62
-
63
- alias eql? ==
64
-
65
- def hash
66
- @filename.hash
67
- end
68
-
69
- def inspect
70
- "#<#{self.class}:#{@filename}>"
71
- end
72
-
73
- def reproducible?
74
- true
75
- end
76
-
77
- def size
78
- File.size @filename
79
- end
80
-
81
-
82
- def ropen( &block )
83
- File.open(@filename, &block)
84
- end
85
-
86
- def wopen( &block )
87
- File.open(@filename, 'w', &block)
88
- end
89
-
90
- def aopen( &block )
91
- File.open(@filename, 'a', &block)
92
- end
93
-
94
-
95
- def read_all
96
- ropen {|f|
97
- return f.read
98
- }
99
- end
100
-
101
-
102
- def remove
103
- File.unlink @filename
104
- end
105
-
106
- def move_to( port )
107
- begin
108
- File.link @filename, port.filename
109
- rescue Errno::EXDEV
110
- copy_to port
111
- end
112
- File.unlink @filename
113
- end
114
-
115
- alias mv move_to
116
-
117
- def copy_to( port )
118
- if FilePort === port
119
- copy_file @filename, port.filename
120
- else
121
- File.open(@filename) {|r|
122
- port.wopen {|w|
123
- while s = r.sysread(4096)
124
- w.write << s
125
- end
126
- } }
127
- end
128
- end
129
-
130
- alias cp copy_to
131
-
132
- private
133
-
134
- # from fileutils.rb
135
- def copy_file( src, dest )
136
- st = r = w = nil
137
-
138
- File.open(src, 'rb') {|r|
139
- File.open(dest, 'wb') {|w|
140
- st = r.stat
141
- begin
142
- while true
143
- w.write r.sysread(st.blksize)
144
- end
145
- rescue EOFError
146
- end
147
- } }
148
- end
149
-
150
- end
151
-
152
-
153
- module MailFlags
154
-
155
- def seen=( b )
156
- set_status 'S', b
157
- end
158
-
159
- def seen?
160
- get_status 'S'
161
- end
162
-
163
- def replied=( b )
164
- set_status 'R', b
165
- end
166
-
167
- def replied?
168
- get_status 'R'
169
- end
170
-
171
- def flagged=( b )
172
- set_status 'F', b
173
- end
174
-
175
- def flagged?
176
- get_status 'F'
177
- end
178
-
179
- private
180
-
181
- def procinfostr( str, tag, true_p )
182
- a = str.upcase.split(//)
183
- a.push true_p ? tag : nil
184
- a.delete tag unless true_p
185
- a.compact.sort.join('').squeeze
186
- end
187
-
188
- end
189
-
190
-
191
- class MhPort < FilePort
192
-
193
- include MailFlags
194
-
195
- private
196
-
197
- def set_status( tag, flag )
198
- begin
199
- tmpfile = @filename + '.tmailtmp.' + $$.to_s
200
- File.open(tmpfile, 'w') {|f|
201
- write_status f, tag, flag
202
- }
203
- File.unlink @filename
204
- File.link tmpfile, @filename
205
- ensure
206
- File.unlink tmpfile
207
- end
208
- end
209
-
210
- def write_status( f, tag, flag )
211
- stat = ''
212
- File.open(@filename) {|r|
213
- while line = r.gets
214
- if line.strip.empty?
215
- break
216
- elsif m = /\AX-TMail-Status:/i.match(line)
217
- stat = m.post_match.strip
218
- else
219
- f.print line
220
- end
221
- end
222
-
223
- s = procinfostr(stat, tag, flag)
224
- f.puts 'X-TMail-Status: ' + s unless s.empty?
225
- f.puts
226
-
227
- while s = r.read(2048)
228
- f.write s
229
- end
230
- }
231
- end
232
-
233
- def get_status( tag )
234
- File.foreach(@filename) {|line|
235
- return false if line.strip.empty?
236
- if m = /\AX-TMail-Status:/i.match(line)
237
- return m.post_match.strip.include?(tag[0])
238
- end
239
- }
240
- false
241
- end
242
-
243
- end
244
-
245
-
246
- class MaildirPort < FilePort
247
-
248
- def move_to_new
249
- new = replace_dir(@filename, 'new')
250
- File.rename @filename, new
251
- @filename = new
252
- end
253
-
254
- def move_to_cur
255
- new = replace_dir(@filename, 'cur')
256
- File.rename @filename, new
257
- @filename = new
258
- end
259
-
260
- def replace_dir( path, dir )
261
- "#{File.dirname File.dirname(path)}/#{dir}/#{File.basename path}"
262
- end
263
- private :replace_dir
264
-
265
-
266
- include MailFlags
267
-
268
- private
269
-
270
- MAIL_FILE = /\A(\d+\.[\d_]+\.[^:]+)(?:\:(\d),(\w+)?)?\z/
271
-
272
- def set_status( tag, flag )
273
- if m = MAIL_FILE.match(File.basename(@filename))
274
- s, uniq, type, info, = m.to_a
275
- return if type and type != '2' # do not change anything
276
- newname = File.dirname(@filename) + '/' +
277
- uniq + ':2,' + procinfostr(info.to_s, tag, flag)
278
- else
279
- newname = @filename + ':2,' + tag
280
- end
281
-
282
- File.link @filename, newname
283
- File.unlink @filename
284
- @filename = newname
285
- end
286
-
287
- def get_status( tag )
288
- m = MAIL_FILE.match(File.basename(@filename)) or return false
289
- m[2] == '2' and m[3].to_s.include?(tag[0])
290
- end
291
-
292
- end
293
-
294
-
295
- ###
296
- ### StringPort
297
- ###
298
-
299
- class StringPort < Port
300
-
301
- def initialize( str = '' )
302
- @buffer = str
303
- super()
304
- end
305
-
306
- def string
307
- @buffer
308
- end
309
-
310
- def to_s
311
- @buffer.dup
312
- end
313
-
314
- alias read_all to_s
315
-
316
- def size
317
- @buffer.size
318
- end
319
-
320
- def ==( other )
321
- StringPort === other and @buffer.equal? other.string
322
- end
323
-
324
- alias eql? ==
325
-
326
- def hash
327
- @buffer.object_id.hash
328
- end
329
-
330
- def inspect
331
- "#<#{self.class}:id=#{sprintf '0x%x', @buffer.object_id}>"
332
- end
333
-
334
- def reproducible?
335
- true
336
- end
337
-
338
- def ropen( &block )
339
- @buffer or raise Errno::ENOENT, "#{inspect} is already removed"
340
- StringInput.open(@buffer, &block)
341
- end
342
-
343
- def wopen( &block )
344
- @buffer = ''
345
- StringOutput.new(@buffer, &block)
346
- end
347
-
348
- def aopen( &block )
349
- @buffer ||= ''
350
- StringOutput.new(@buffer, &block)
351
- end
352
-
353
- def remove
354
- @buffer = nil
355
- end
356
-
357
- alias rm remove
358
-
359
- def copy_to( port )
360
- port.wopen {|f|
361
- f.write @buffer
362
- }
363
- end
364
-
365
- alias cp copy_to
366
-
367
- def move_to( port )
368
- if StringPort === port
369
- str = @buffer
370
- port.instance_eval { @buffer = str }
371
- else
372
- copy_to port
373
- end
374
- remove
375
- end
376
-
377
- end
378
-
379
- end # module TMail
@@ -1,118 +0,0 @@
1
- =begin rdoc
2
-
3
- = Quoting methods
4
-
5
- =end
6
- module TMail
7
- class Mail
8
- def subject(to_charset = 'utf-8')
9
- Unquoter.unquote_and_convert_to(quoted_subject, to_charset)
10
- end
11
-
12
- def unquoted_body(to_charset = 'utf-8')
13
- from_charset = sub_header("content-type", "charset")
14
- case (content_transfer_encoding || "7bit").downcase
15
- when "quoted-printable"
16
- # the default charset is set to iso-8859-1 instead of 'us-ascii'.
17
- # This is needed as many mailer do not set the charset but send in ISO. This is only used if no charset is set.
18
- if !from_charset.blank? && from_charset.downcase == 'us-ascii'
19
- from_charset = 'iso-8859-1'
20
- end
21
-
22
- Unquoter.unquote_quoted_printable_and_convert_to(quoted_body,
23
- to_charset, from_charset, true)
24
- when "base64"
25
- Unquoter.unquote_base64_and_convert_to(quoted_body, to_charset,
26
- from_charset)
27
- when "7bit", "8bit"
28
- Unquoter.convert_to(quoted_body, to_charset, from_charset)
29
- when "binary"
30
- quoted_body
31
- else
32
- quoted_body
33
- end
34
- end
35
-
36
- def body(to_charset = 'utf-8', &block)
37
- attachment_presenter = block || Proc.new { |file_name| "Attachment: #{file_name}\n" }
38
-
39
- if multipart?
40
- parts.collect { |part|
41
- header = part["content-type"]
42
-
43
- if part.multipart?
44
- part.body(to_charset, &attachment_presenter)
45
- elsif header.nil?
46
- ""
47
- elsif !attachment?(part)
48
- part.unquoted_body(to_charset)
49
- else
50
- attachment_presenter.call(header["name"] || "(unnamed)")
51
- end
52
- }.join
53
- else
54
- unquoted_body(to_charset)
55
- end
56
- end
57
- end
58
-
59
- class Unquoter
60
- class << self
61
- def unquote_and_convert_to(text, to_charset, from_charset = "iso-8859-1", preserve_underscores=false)
62
- return "" if text.nil?
63
- text.gsub(/(.*?)(?:(?:=\?(.*?)\?(.)\?(.*?)\?=)|$)/) do
64
- before = $1
65
- from_charset = $2
66
- quoting_method = $3
67
- text = $4
68
-
69
- before = convert_to(before, to_charset, from_charset) if before.length > 0
70
- before + case quoting_method
71
- when "q", "Q" then
72
- unquote_quoted_printable_and_convert_to(text, to_charset, from_charset, preserve_underscores)
73
- when "b", "B" then
74
- unquote_base64_and_convert_to(text, to_charset, from_charset)
75
- when nil then
76
- # will be nil at the end of the string, due to the nature of
77
- # the regex used.
78
- ""
79
- else
80
- raise "unknown quoting method #{quoting_method.inspect}"
81
- end
82
- end
83
- end
84
-
85
- def unquote_quoted_printable_and_convert_to(text, to, from, preserve_underscores=false)
86
- text = text.gsub(/_/, " ") unless preserve_underscores
87
- text = text.gsub(/\r\n|\r/, "\n") # normalize newlines
88
- convert_to(text.unpack("M*").first, to, from)
89
- end
90
-
91
- def unquote_base64_and_convert_to(text, to, from)
92
- convert_to(Base64.decode(text), to, from)
93
- end
94
-
95
- begin
96
- require 'iconv'
97
- def convert_to(text, to, from)
98
- return text unless to && from
99
- text ? Iconv.iconv(to, from, text).first : ""
100
- rescue Iconv::IllegalSequence, Iconv::InvalidEncoding, Errno::EINVAL
101
- # the 'from' parameter specifies a charset other than what the text
102
- # actually is...not much we can do in this case but just return the
103
- # unconverted text.
104
- #
105
- # Ditto if either parameter represents an unknown charset, like
106
- # X-UNKNOWN.
107
- text
108
- end
109
- rescue LoadError
110
- # Not providing quoting support
111
- def convert_to(text, to, from)
112
- warn "Action Mailer: iconv not loaded; ignoring conversion from #{from} to #{to} (#{__FILE__}:#{__LINE__})"
113
- text
114
- end
115
- end
116
- end
117
- end
118
- end