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