remailer 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.3.1
@@ -31,6 +31,7 @@ class Remailer::Connection < EventMachine::Connection
31
31
  attr_accessor :pipelining, :tls_support
32
32
  attr_accessor :timeout
33
33
  attr_accessor :options
34
+ attr_reader :error, :error_message
34
35
 
35
36
  # == Extensions ===========================================================
36
37
 
@@ -46,6 +47,8 @@ class Remailer::Connection < EventMachine::Connection
46
47
  # * debug => Where to send debugging output (IO or Proc)
47
48
  # * connect => Where to send a connection notification (IO or Proc)
48
49
  # * error => Where to send errors (IO or Proc)
50
+ # * on_connect => Called upon successful connection (Proc)
51
+ # * on_error => Called upon connection error (Proc)
49
52
  # A block can be supplied in which case it will stand in as the :connect
50
53
  # option. The block will recieve a first argument that is the status of
51
54
  # the connection, and an optional second that is a diagnostic message.
@@ -269,10 +272,11 @@ class Remailer::Connection < EventMachine::Connection
269
272
 
270
273
  error_notification(:timeout, "Connection timed out")
271
274
  debug_notification(:timeout, "Connection timed out")
272
- send_callback(:timeout, "Connection timed out before send could complete")
275
+ message_callback(:timeout, "Connection timed out before send could complete")
273
276
 
274
277
  unless (@connected)
275
278
  connect_notification(false, "Connection timed out")
279
+ send_callback(:on_error)
276
280
  end
277
281
 
278
282
  close_connection
@@ -290,6 +294,10 @@ class Remailer::Connection < EventMachine::Connection
290
294
  !!@closed
291
295
  end
292
296
 
297
+ def error?
298
+ !!@error
299
+ end
300
+
293
301
  def start_tls
294
302
  debug_notification(:tls, "Started")
295
303
  super
@@ -332,7 +340,7 @@ class Remailer::Connection < EventMachine::Connection
332
340
  end
333
341
 
334
342
  def after_message_sent(reply_code, reply_message)
335
- send_callback(reply_code, reply_message)
343
+ message_callback(reply_code, reply_message)
336
344
 
337
345
  @active_message = nil
338
346
  end
@@ -356,9 +364,13 @@ class Remailer::Connection < EventMachine::Connection
356
364
 
357
365
  def connect_notification(code, message = nil)
358
366
  send_notification(:connect, code, message || self.remote)
367
+ send_callback(:on_success)
359
368
  end
360
369
 
361
370
  def error_notification(code, message)
371
+ @error = code
372
+ @error_message = message
373
+
362
374
  send_notification(:error, code, message)
363
375
  end
364
376
 
@@ -366,7 +378,7 @@ class Remailer::Connection < EventMachine::Connection
366
378
  send_notification(:debug, code, message)
367
379
  end
368
380
 
369
- def send_callback(reply_code, reply_message)
381
+ def message_callback(reply_code, reply_message)
370
382
  if (callback = (@active_message and @active_message[:callback]))
371
383
  # The callback is screened in advance when assigned to ensure that it
372
384
  # has only 1 or 2 arguments. There should be no else here.
@@ -378,4 +390,15 @@ class Remailer::Connection < EventMachine::Connection
378
390
  end
379
391
  end
380
392
  end
393
+
394
+ def send_callback(type)
395
+ if (callback = @options[type])
396
+ case (callback.arity)
397
+ when 1
398
+ callback.call(self)
399
+ else
400
+ callback.call
401
+ end
402
+ end
403
+ end
381
404
  end
data/remailer.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{remailer}
8
- s.version = "0.3.0"
8
+ s.version = "0.3.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Scott Tadman"]
12
- s.date = %q{2010-12-02}
12
+ s.date = %q{2010-12-13}
13
13
  s.description = %q{EventMachine capable SMTP engine}
14
14
  s.email = %q{scott@twg.ca}
15
15
  s.extra_rdoc_files = [
@@ -2,6 +2,7 @@ require File.expand_path(File.join(*%w[ .. helper ]), File.dirname(__FILE__))
2
2
 
3
3
  class SmtpDelegate
4
4
  attr_accessor :options, :active_message
5
+ attr_accessor :tls_support
5
6
 
6
7
  def initialize(options = { })
7
8
  @sent = [ ]
@@ -32,6 +33,10 @@ class SmtpDelegate
32
33
  !!@started_tls
33
34
  end
34
35
 
36
+ def tls_support?
37
+ !!@tls_support
38
+ end
39
+
35
40
  def close_connection
36
41
  @closed = true
37
42
  end
@@ -250,8 +255,12 @@ class RemailerConnectionSmtpInterpreterTest < Test::Unit::TestCase
250
255
  def test_tls_connection_with_support
251
256
  delegate = SmtpDelegate.new(:use_tls => true)
252
257
  interpreter = Remailer::Connection::SmtpInterpreter.new(:delegate => delegate)
258
+
259
+ assert_equal true, delegate.use_tls?
260
+ assert_equal :initialized, interpreter.state
253
261
 
254
262
  interpreter.process("220 mail.example.com ESMTP Exim 4.63\r\n")
263
+ assert_equal :ehlo, interpreter.state
255
264
  assert_equal 'EHLO localhost.local', delegate.read
256
265
 
257
266
  interpreter.process("250-mail.example.com Hello\r\n")
@@ -262,6 +271,8 @@ class RemailerConnectionSmtpInterpreterTest < Test::Unit::TestCase
262
271
  interpreter.process("250-STARTTLS\r\n")
263
272
  interpreter.process("250 HELP\r\n")
264
273
 
274
+ assert_equal true, delegate.tls_support?
275
+
265
276
  assert_equal :starttls, interpreter.state
266
277
  assert_equal 'STARTTLS', delegate.read
267
278
  assert_equal false, delegate.started_tls?
@@ -40,6 +40,8 @@ class RemailerConnectionTest < Test::Unit::TestCase
40
40
  def test_failed_connect_no_service
41
41
  engine do
42
42
  error_received = nil
43
+ on_error = false
44
+ on_connect = false
43
45
 
44
46
  connection = Remailer::Connection.open(
45
47
  'example.com',
@@ -47,6 +49,8 @@ class RemailerConnectionTest < Test::Unit::TestCase
47
49
  :error => lambda { |code, message|
48
50
  error_received = [ code, message ]
49
51
  },
52
+ :on_connect => lambda { on_connect = true },
53
+ :on_error => lambda { on_error = true },
50
54
  :timeout => 1
51
55
  )
52
56
 
@@ -55,6 +59,10 @@ class RemailerConnectionTest < Test::Unit::TestCase
55
59
  end
56
60
 
57
61
  assert_equal :timeout, error_received[0]
62
+ assert_equal :timeout, connection.error
63
+
64
+ assert_equal false, on_connect
65
+ assert_equal true, on_error
58
66
  end
59
67
  end
60
68
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 0
9
- version: 0.3.0
8
+ - 1
9
+ version: 0.3.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Scott Tadman
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-12-02 00:00:00 -05:00
17
+ date: 2010-12-13 00:00:00 -05:00
18
18
  default_executable:
19
19
  dependencies: []
20
20