lib/gmail/client.rb in gmail-0.4.0 vs lib/gmail/client.rb in gmail-0.4.2
- old
+ new
@@ -1,22 +1,30 @@
-module Gmail
- module Client
- # Raised when connection with GMail IMAP service couldn't be established.
- class ConnectionError < SocketError; end
- # Raised when given username or password are invalid.
- class AuthorizationError < Net::IMAP::NoResponseError; end
- # Raised when delivered email is invalid.
- class DeliveryError < ArgumentError; end
-
- autoload :Base, 'gmail/client/base'
- autoload :Plain, 'gmail/client/plain'
- autoload :XOAuth, 'gmail/client/xoauth'
-
- def self.new_plain(*args)
- Gmail::Client::Plain.new(*args)
- end
-
- def self.new_xoauth(*args)
- Gmail::Client::XOAuth.new(*args)
- end
- end # Client
-end # Gmail
+module Gmail
+ module Client
+ # Raised when connection with GMail IMAP service couldn't be established.
+ class ConnectionError < SocketError; end
+ # Raised when given username or password are invalid.
+ class AuthorizationError < Net::IMAP::NoResponseError; end
+ # Raised when delivered email is invalid.
+ class DeliveryError < ArgumentError; end
+ # Raised when given client is not registered
+ class UnknownClient < ArgumentError; end
+
+ def self.register(name, klass)
+ @clients ||= {}
+ @clients[name] = klass
+ end
+
+ def self.new(name, *args)
+ if client = @clients[name]
+ client.new(*args)
+ else
+ raise UnknownClient, "No such client: #{name}"
+ end
+ end
+
+ require 'gmail/client/imap_extensions'
+ require 'gmail/client/base'
+ require 'gmail/client/plain'
+ require 'gmail/client/xoauth'
+ end # Client
+end # Gmail